Hadoop 配置单元的动态分区无法写入最终文件

Hadoop 配置单元的动态分区无法写入最终文件,hadoop,hive,partitioning,tez,hive-partitions,Hadoop,Hive,Partitioning,Tez,Hive Partitions,我试图将数据从一个有1列分区的表加载到一个有2列分区的新表中,新的分区列是第一个表中的常规列 例如,create table语句经过简化和更改以便于理解: CREATE EXTERNAL TABLE `house`( `color` string, `size` string,

我试图将数据从一个有1列分区的表加载到一个有2列分区的新表中,新的分区列是第一个表中的常规列

例如,create table语句经过简化和更改以便于理解:

CREATE EXTERNAL TABLE `house`(                                     
   `color` string,                                     
   `size` string,                                    
   `owner` string)                                     
PARTITIONED BY (                                   
   `dt` date)

CREATE EXTERNAL TABLE `house_new`(                                   
   `size` string,                                    
   `owner` string)                                     
PARTITIONED BY (                                   
   `dt` date, `color` string)
我有一个简单的插入查询,如下所示:

INSERT OVERWRITE TABLE `house_new` PARTITION (`dt`='2018-06-10’, `color`)
SELECT
   `size`,                                      
   `owner`,                                     
   `color`
FROM house
WHERE `dt`='2018-06-10';
因此,这条消息一直在运行,并表示这项工作在终端和Tez UI中都已成功完成。即使在整个过程中,我也可以看到文件实际上是用所有正确的分区填充到S3上的tmp/staging文件夹中的。但是,当它最终完成时,实际上没有写入任何文件,所有临时文件都将被删除


对分区进行硬编码静态分区可以工作,从一个1分区列表到另一个1分区列表的动态分区也可以工作。从一个1分区的列表开始并尝试从第一个表派生第二个分区是行不通的

为什么要定义外部表?您是否已将hive.exec.dynamic.partition设置为true?另外,您不需要在分区中指定dt值;只需将颜色和日期作为最后一个字段,并从每个位置的字段名中删除引号,因为我们使用外部表。是,该标志设置为true。我将dt值设置为一个测试,将其限制为1天。对于生产,我们希望成批进行,否则数据会太大。prod值需要反引号,因为有保留字,所以我只将它们应用于所有列以保持一致性。这是否选择了count*cnt from house where dt='2018-06-10';返回值>0?是,执行常规工作。那里有数据,甚至正确分区中的临时数据也会在整个过程中写入。就在作业最终完成时,没有写入任何最终数据。