更新,Hive中的SET选项

Jot*_*thi 14 hive

我知道Hadoop中没有文件更新,但是在Hive中,可以使用语法糖将新值与表中的旧数据合并,然后使用合并输出重写表,但是如果我在另一个中有新值表然后我可以通过使用左外连接来实现相同的效果.

我的问题是我必须通过将一个值设置为具有某些where条件的列来更新表.众所周知,SET不支持.

例如,请考虑以下常规查询:

UPDATE temp1
SET location=florida
WHERE id=206;
Run Code Online (Sandbox Code Playgroud)

我试图在Hive中转换相同的内容,但我被困在了SET.如果有人让我知道,那对我来说将是一个很大的帮助.

Qui*_*nnG 10

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_];
Run Code Online (Sandbox Code Playgroud)

您可以通过逗号分隔多个分区.... PARTITION (_partitionColumn_= _partitionValue1_, _partitionColumn_= _partitionValue2_, ...).我没有使用多个分区,一次只有一个,所以我会在一次执行所有分区之前检查测试/ dev env上的结果.我还有其他原因将每个限制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]来自表中的列的其余部分.他们需要按正确的顺序.这非常重要,否则您的数据将被破坏.

希望这可以帮助.:)