INSERT OVERWRITE TABLE _tableName_ PARTITION (_partitionColumn_= _partitionValue_)
SELECT [other Things], CASE WHEN id=206 THEN 'florida' ELSE location END AS location, [other Other Things]
FROM _tableName_ WHERE [_whereClause_];
您可以列出多个分区,方法是用逗号分隔它们。... PARTITION (_partitionColumn_= _partitionValue1_, _partitionColumn_= _partitionValue2_, ...)
. 我没有对多个分区执行此操作,一次只执行一个,因此在一次执行所有分区之前,我会在测试/开发环境中检查结果。我还有其他理由将每个分区限制OVERWRITE
为单个分区。
这个页面https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML有更多内容。
一般来说,这个站点https://cwiki.apache.org/confluence/display/Hive/LanguageManual是您使用 HiveSQL 时最好的朋友。
我开发了与此相同的东西来迁移一些数据并且它有效。我还没有针对大型数据集尝试过它,只有几 GB,而且效果很好。
注意 - 这将覆盖分区。它将使以前的文件再见。创建备份和恢复脚本/程序。[other Things]
和是表[other Other Things]
中的其余列。它们需要按正确的顺序排列。这非常重要,否则您的数据将被损坏。
希望这可以帮助。:)