将分区添加到没有数据的配置单元表

Posted

技术标签:

【中文标题】将分区添加到没有数据的配置单元表【英文标题】:Add partition to hive table with no data 【发布时间】:2016-11-29 17:10:32 【问题描述】:

我正在尝试创建一个与另一个表(分区)具有相同列的配置单元表。我使用以下查询相同

CREATE TABLE destTable STORED AS PARQUET AS select * from srcTable where 1=2;

显然我不能使用“PARTITIONED BY(col_name)”,因为不能对 destTable 进行分区。但我想提一下,在我向它添加数据之前,destTable 应该按列(与 srcTable 相同)进行分区。

有没有办法做到这一点?

【问题讨论】:

能解释清楚吗? 显然我不能使用“PARTITIONED BY(col_name)”,因为不能对 destTable 进行分区。但我想提一下,destTable 应该按列分区 【参考方案1】:

正如您所提到的,destTable 不能是分区表,因此无法直接执行此操作。另外,destTable 不能是外部表。

在这种情况下,您将需要创建一个临时的“staging_table”(未分区和 Hive 管理的表)来保存数据。

第 1 步:将所有内容从 srcTable 转移到 staging_table

第 2 步:创建一个分区的 destTable 并执行:

INSERT OVERWRITE TABLE destTable PARTITION(xxxx)
SELECT * FROM staging_table;

希望这会有所帮助。

【讨论】:

以上是关于将分区添加到没有数据的配置单元表的主要内容,如果未能解决你的问题,请参考以下文章

如何将按月分区的配置单元表中的数据加载到按周分区的配置单元表中

将外部分区表(带分区)与另一个没有分区的外部表在配置单元中连接

带有分区的外部配置单元表 - 当我添加具有读取访问权限的数据的分区时出现权限错误

如何插入配置单元表,按从临时表读取的日期进行分区? [复制]

Sqoop 增量加载到分区的配置单元表中

通过 pig 脚本删除 hive 表分区