我正在开发一个批处理作业,它将数据从HDFS文件加载到Hive表中。数据流如下
如果在步骤1中读取外部表的输入目录中有文件,则此流程可正常工作。 如果没有文件,则外部表将为空,因此执行步骤2将清空最终表。如果外部表为空,我想将现有数据保留在最终表中(上一次执行期间加载的数据)。
我是否可以设置一个hive属性,以便只有在我们用一些数据覆盖它时才会覆盖最终表?
我知道我可以使用HDFS命令检查输入文件是否存在,并有条件地启动Hive请求。但我想知道我是否可以直接在Hive中实现相同的行为,这将有助于我避免这种额外的验证
答案 0 :(得分:2)
尝试在表中添加虚拟分区,比如说LOAD_TAG并使用动态分区加载:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
INSERT OVERWRITE TABLE your_table PARTITION(LOAD_TAG)
select
col1,
...
colN,
'dummy_value' as LOAD_TAG
from source_table;
在您的情况下,分区值应始终相同。