Hive-使用“选择查询”和“分区依据”命令创建表语句

时间:2018-08-09 02:19:49

标签: hive hiveql hive-partitions

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

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

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

“年”和“月”都是master_extract表中的两个单独的列。

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

2 个答案:

答案 0 :(得分:1)

否,这是不可能的,因为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.

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

答案 1 :(得分:0)

自最初提出并回答此问题以来,已有一些发展。按照配置单元documentationStarting with Hive 3.2.0, CTAS statements can define a partitioning specification for the target table (HIVE-20241).

您还可以看到相关的票证here。早在2018年7月就已解决。

因此,如果您的配置单元为3.2.0或更高版本,则只需执行

CREATE TABLE test_extract PARTITIONED BY (year string, month string) AS
SELECT 
    col1,
    col2, 
    year,
    month
FROM master_extract