Hive 配置单元-使用“select query”和“partition by”命令创建表语句

Hive 配置单元-使用“select query”和“partition by”命令创建表语句,hive,hiveql,create-table,hive-partitions,hiveddl,Hive,Hiveql,Create Table,Hive Partitions,Hiveddl,我想在配置单元中创建一个分区表。我知道先用CREATETABLE创建一个表结构。。。按命令分区,然后使用insert into table命令将数据插入表中 但我试图做的是将这两个命令组合到一个查询中,如下面所示,但它会抛出错误 CREATE TABLE test_extract AS SELECT * FROM master_extract PARTITION BY (year string ,month string) ; 年和月都是master_extract表中的两个独立列 有什么

我想在配置单元中创建一个分区表。我知道先用CREATETABLE创建一个表结构。。。按命令分区,然后使用insert into table命令将数据插入表中

但我试图做的是将这两个命令组合到一个查询中,如下面所示,但它会抛出错误

CREATE TABLE test_extract AS
SELECT 
*
FROM master_extract 
PARTITION BY (year string
,month string)
;
年和月都是master_extract表中的两个独立列


有什么方法可以实现这样的目标吗?

不,这是不可能的,因为有以下限制:

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.

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

不,这是不可能的,因为有以下限制:

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.

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

自从最初提出并回答这个问题以来,已经有了一些进展。按照配置单元:从配置单元3.2.0开始,CTAS语句可以为目标表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

自从最初提出并回答这个问题以来,已经有了一些进展。按照配置单元:从配置单元3.2.0开始,CTAS语句可以为目标表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

有道理。谢谢@leftjoin,这很有意义。谢谢@leftjoin