Hadoop 如果插入覆盖的SELECT查询未返回任何结果,是否有方法防止覆盖配置单元表

Hadoop 如果插入覆盖的SELECT查询未返回任何结果,是否有方法防止覆盖配置单元表,hadoop,hive,hiveql,Hadoop,Hive,Hiveql,我正在开发一个批处理作业,将数据从HDFS文件加载到配置单元表中。数据流如下所示 使用外部配置单元表读取HDFS中接收的文件 INSERT应用某些转换覆盖外部配置单元表中的最终配置单元表 将收到的文件移动到存档 如果在步骤1中输入目录中有一个文件可供外部表读取,则此流可以正常工作。 如果没有文件,外部表将为空,因此执行步骤2将清空最终表。如果外部表为空,我希望将现有数据保留在最终表中(上次执行期间加载的数据) 是否有一个配置单元属性可以设置为仅当我们使用一些数据覆盖最终表时才覆盖它 我知道我可以

我正在开发一个批处理作业,将数据从HDFS文件加载到配置单元表中。数据流如下所示

  • 使用外部配置单元表读取HDFS中接收的文件
  • INSERT应用某些转换覆盖外部配置单元表中的最终配置单元表
  • 将收到的文件移动到存档
  • 如果在步骤1中输入目录中有一个文件可供外部表读取,则此流可以正常工作。 如果没有文件,外部表将为空,因此执行步骤2将清空最终表。如果外部表为空,我希望将现有数据保留在最终表中(上次执行期间加载的数据)

    是否有一个配置单元属性可以设置为仅当我们使用一些数据覆盖最终表时才覆盖它


    我知道我可以使用HDFS命令检查输入文件是否存在,并有条件地启动配置单元请求。但是我想知道我是否可以直接在Hive中实现相同的行为,这将帮助我避免这种额外的验证

    尝试将虚拟分区添加到您的表中,比如加载标签并使用动态分区加载:

    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;
    

    分区值在您的情况下应该始终相同

    @leftjoin-如果我的主表在某个countrycode列上分区。。当外部表为空时,我可以防止主表分区吗?好心的advise@vikrantrana你的意思是当源表为空时?在这种情况下,“插入覆盖”不会覆盖任何分区。