如果 INSERT OVERWRITE 的 SELECT 查询没有 return 任何结果,是否有办法防止 Hive table 被覆盖
Is there a way to prevent a Hive table from being overwritten if the SELECT query of the INSERT OVERWRITE does not return any results
我正在开发一个批处理作业,将数据从 HDFS 文件加载到 Hive tables。数据流向如下
- 使用外部 Hive 读取 HDFS 中接收到的文件 table
- 从外部 Hive table 应用某些转换
插入覆盖最终的 hive table
- 将收到的文件移动到存档
如果输入目录中有文件供外部 table 在步骤 1 中读取,则此流程工作正常。
如果没有文件,外部 table 将为空,因此执行步骤 2 将清空最终 table。如果外部table为空,我想保留最后table中已有的数据(上次执行时加载的数据)
是否有我可以设置的配置单元 属性,以便仅当我们用一些数据覆盖它时才覆盖最后的 table?
我知道我可以使用 HDFS 命令检查输入文件是否存在并有条件地启动 Hive 请求。但我想知道我是否可以直接在 Hive 中实现相同的行为,这将帮助我避免这种额外的验证
尝试将虚拟分区添加到您的 table,比如 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;
您的分区值应始终相同。
我正在开发一个批处理作业,将数据从 HDFS 文件加载到 Hive tables。数据流向如下
- 使用外部 Hive 读取 HDFS 中接收到的文件 table
- 从外部 Hive table 应用某些转换 插入覆盖最终的 hive table
- 将收到的文件移动到存档
如果输入目录中有文件供外部 table 在步骤 1 中读取,则此流程工作正常。 如果没有文件,外部 table 将为空,因此执行步骤 2 将清空最终 table。如果外部table为空,我想保留最后table中已有的数据(上次执行时加载的数据)
是否有我可以设置的配置单元 属性,以便仅当我们用一些数据覆盖它时才覆盖最后的 table?
我知道我可以使用 HDFS 命令检查输入文件是否存在并有条件地启动 Hive 请求。但我想知道我是否可以直接在 Hive 中实现相同的行为,这将帮助我避免这种额外的验证
尝试将虚拟分区添加到您的 table,比如 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;
您的分区值应始终相同。