我正在尝试在Hive中使用Insert overwrite。基本上我想插入覆盖不是完整的分区,而是分区中只有几条记录。我没有找到任何解决方案(基于非分区列上的过滤器也在目标表中插入覆盖)。 有什么办法可以实现吗?
答案 0 :(得分:0)
Hive不是常规RDBMS,如果要更新记录,请执行INSERT OVERWRITE TABLE Table_Name ...在一个临时表中简单更改数据或使用WITH子句简单地使用表分区插入overwrite..by。这是安全的。
QUERY [HIVE]:
WITH TEMP_TABLE AS(SELECT * FROM SOURCE_TABLE_NAME)INSERT OVERWRITE TABLE TARGET_TABLE_NAME SELECT * FROM TEMP_TABLE
答案 1 :(得分:0)
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>