Hive - 使用 'select query' 和 'partition by' 命令创建 Table 语句

Hive - Create Table statement with 'select query' and 'partition by' commands

我想在 Hive 中创建分区 Table。我知道首先在 "Create table ... Partitioned by" 命令的帮助下创建一个 table 结构,然后使用 "Insert Into Table" 命令

将数据插入 table

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

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

年份和月份都是 master_extract table 中的两个单独的列。

有什么办法可以达到这样的目的吗?

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

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

自最初提出并回答这个问题以来,已经有了一些进展。根据配置单元 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