欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

impala的update用法

程序员文章站 2022-07-11 18:38:36
...

更新声明(仅限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语句