impala的update用法

更新声明(仅限Impala 2.8或更高版本)

更新Kudu表中的任意行数。此语句仅适用于使用Kudu存储引擎的Impala表。

句法:

<span style="color:#000000"><code>
UPDATE [database_name.]table_name SET col = val [, col = val ... ]
  [ FROM joined_table_refs ]
  [ WHERE where_conditions ]
</code></span>

使用说明:

构成主键的列都不能由SET子句更新 。

WHERE条款中的条件与该语句允许的条件相同SELECT。请参阅SELECT语句 以获取详细信

如果WHERE省略该子句,则更新表中的所有行。

WHERE子句中 的条件可以指主键列或其他列的任意组合。引用WHERE子句中的主键列比引用非主键列更有效。

因为Kudu目前在并发DML操作期间不强制执行强一致性,所以请注意,此语句完成后的结果可能与您直观期望的不同:

  • 如果某些行由于找不到某些主键列而无法更新,由于它们被并发DELETE操作删除,该语句会成功但会返回警告。

  • UPDATE声明也可能会重叠 INSERTUPDATEUPSERT在同一台同时运行的语句。声明完成后,表中可能会有比预期更多或更少的匹配行,因为未定义是否UPDATE适用UPDATE于正在进行中插入或更新的行。

受影响的行数在impala-shell消息和查询概要文件中报告。

可选FROM子句允许您将更新限制为仅指定表中属于连接查询结果集的行。join子句可以包括非Kudu表,但删除行的表必须是Kudu表。

声明类型: DML

要点: 在性能关键型查询中使用的表中添加或替换数据后,请发出COMPUTE STATS语句以确保所有统计信息都是最新的。考虑在Impala中的任何INSERTLOAD DATACREATE TABLE AS SELECT语句之后,或在通过Hive加载数据并在Impala中执行之后更新表的统计信息。此技术对于非常大的表,在连接查询中使用或两者都特别重要。 REFRESH table_name

例子:

以下示例显示如何对表执行简单更新,包含或不包含WHERE子句:

<span style="color:#000000"><code>
-- Set all rows to the same value for column c3.
-- In this case, c1 and c2 are primary key columns
-- and so cannot be updated.
UPDATE kudu_table SET c3 = 'not applicable';

-- Update only the rows that match the condition.
UPDATE kudu_table SET c3 = NULL WHERE c1 > 100 AND c3 IS NULL;

-- Does not update any rows, because the WHERE condition is always false.
UPDATE kudu_table SET c3 = 'impossible' WHERE 1 = 0;

-- Change the values of multiple columns in a single UPDATE statement.
UPDATE kudu_table SET c3 = upper(c3), c4 = FALSE, c5 = 0 WHERE c6 = TRUE;
</code></span>

以下示例显示如何使用FROM带有join子句的关键字执行更新 :

<span style="color:#000000"><code>
-- Uppercase a column value, only for rows that have
-- an ID that matches the value from another table.
UPDATE kudu_table SET c3 = upper(c3)
  FROM kudu_table JOIN non_kudu_table
  ON kudu_table.id = non_kudu_table.id;

-- Same effect as previous statement.
-- Assign table aliases in FROM clause, then refer to
-- short names elsewhere in the statement.
UPDATE t1 SET c3 = upper(c3)
  FROM kudu_table t1 JOIN non_kudu_table t2
  ON t1.id = t2.id;

-- Same effect as previous statements, but more efficient.
-- Use WHERE clause to skip updating values that are
-- already uppercase.
UPDATE t1 SET c3 = upper(c3)
  FROM kudu_table t1 JOIN non_kudu_table t2
  ON t1.id = t2.id
  WHERE c3 != upper(c3);
</code></span>

相关信息:

使用Impala查询Kudu表INSERT语句, DELETE语句(仅限Impala 2.8或更高版本)UPSERT语句(仅限Impala 2.8或更高版本)

父主题: Impala SQL语句

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值