首页 > 解决方案 > Hive 的动态分区无法写入最终文件

问题描述

我正在尝试将具有 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 个分区的列表开始并尝试从第一个表派生第二个分区是行不通的。

标签: hadoophivepartitioningtezhive-partitions

解决方案


推荐阅读