我想在Hive中创建一个分区表。我知道先借助“创建表...进行分区”命令来创建表结构,然后使用“插入表”命令将数据插入表中
但是我想做的是将这两个命令组合成一个查询,如下所示,但这会引发错误。
CREATE TABLE test_extract AS
SELECT
*
FROM master_extract
PARTITION BY (year string
,month string)
;
“年”和“月”都是master_extract表中的两个单独的列。
有没有办法实现这样的目标?
答案 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)
自最初提出并回答此问题以来,已有一些发展。按照配置单元documentation:Starting 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