Hadoop 配置单元的动态分区无法写入最终文件
我试图将数据从一个有1列分区的表加载到一个有2列分区的新表中,新的分区列是第一个表中的常规列 例如,create table语句经过简化和更改以便于理解: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,
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?是,执行常规工作。那里有数据,甚至正确分区中的临时数据也会在整个过程中写入。就在作业最终完成时,没有写入任何最终数据。