1

我想在 Hive 中创建一个分区表。我知道首先在“创建表...分区”命令的帮助下创建表结构,然后使用“插入表”命令将数据插入表中

但我想做的是将这两个命令组合成一个查询,如下所示,但它会引发错误。

CREATE TABLE test_extract AS
SELECT 
*
FROM master_extract 
PARTITION BY (year string
,month string)
;

Year 和 Month 都是 master_extract 表中的两个单独的列。

有没有办法实现这样的目标?

4

2 回答 2

3

不,这是不可能的,因为Create Table As Select (CTAS)有限制:

The target table cannot be a partitioned table.
The target table cannot be an external table.
The target table cannot be a list bucketing table.

您可以单独创建表,然后插入覆盖它。

于 2018-08-09T11:48:09.993 回答
2

自从最初提出并回答这个问题以来,已经有了一些发展。根据蜂巢文档Starting with Hive 3.2.0, CTAS statements can define a partitioning specification for the target table (HIVE-20241).

您还可以在此处查看相关票证。它已于 2018 年 7 月解决。

因此,如果您的配置单元是 3.2.0 或更高版本,那么您可以简单地执行

CREATE TABLE test_extract PARTITIONED BY (year string, month string) AS
SELECT 
    col1,
    col2, 
    year,
    month
FROM master_extract
于 2020-12-04T11:28:02.970 回答