我正在尝试在 Hive 中使用插入覆盖。基本上,我想插入的不是覆盖整个分区,而是覆盖分区中的一些记录。我没有找到任何解决方案(也基于基于非分区列的过滤器在目标表中插入覆盖)。有什么办法可以实现?
Hive 不是常规的 RDBMS,如果要简单地更新记录,请执行 INSERT OVERWRITE TABLE Table_Name...simple 更改一个临时表中的数据,或者使用 WITH 子句,只需使用表 partioning..it 插入 overwrite..by 是安全的。
QUERY [1]:
WITH TEMP_TABLE AS(SELECT * FROM SOURCE_TABLE_NAME)插入覆盖表 TARGET_TABLE_NAME SELECT * FROM TEMP_TABLE
Hive 不是 RDBMS。不建议您尝试使用 Hive 实现的功能。 Hive 更适合于对非常大的不可变数据集进行批处理。
但是,根据我的推断,您正在尝试更新表中的现有记录。为此,请在需要更新的表上启用 ACID 支持,您的更新查询将开始工作。
UPDATE <TABLE> SET <COL1>='Value1', SET <COL2>='Value2' WHERE <Some Condition That Only Evaluates To The Rows You Need Updated>
2 回答
Hive 不是常规的 RDBMS,如果要简单地更新记录,请执行 INSERT OVERWRITE TABLE Table_Name...simple 更改一个临时表中的数据,或者使用 WITH 子句,只需使用表 partioning..it 插入 overwrite..by 是安全的。
QUERY [1]:
WITH TEMP_TABLE AS(SELECT * FROM SOURCE_TABLE_NAME)插入覆盖表 TARGET_TABLE_NAME SELECT * FROM TEMP_TABLE
Hive 不是 RDBMS。不建议您尝试使用 Hive 实现的功能。 Hive 更适合于对非常大的不可变数据集进行批处理。
但是,根据我的推断,您正在尝试更新表中的现有记录。为此,请在需要更新的表上启用 ACID 支持,您的更新查询将开始工作。