hive的 INSERT OVERWRITE 是先将sql逻辑数据写入临时文件最后Moving data to目标路径,是先清空后写入吗?如果移动一半任务中止,这个表的数据是什么样?

hive的 INSERT OVERWRITE 是先将sql逻辑数据写入临时文件最后Moving data to目标路径,是先清空后写入吗?如果移动一半任务中止,这个表的数据是什么样?

其实无需清空,只需要标注你要写入的hive表所使用的数据块为可覆盖即可。

如果数据块上已有数据,再insert的时候只能利用其它为写入的块,防止数据被覆盖。
insert overwrite的时候,就标记这些已经写入的数据块状态为可以被覆盖。

Hive中使用INSERT OVERWRITE时,
数据会先被写入到数据文件夹的临时文件内,类似于 .hive-staging_hive_ 开头的文件
对于中间数据文件为什么放到/tmp/hive-hadoop 这个是可以在 hive-site.xml 文件中配置参数 hive.exec.scratchdir 的
然后Move Operator 删除所有原文件,将临时文件cope到目标目录