IMPALA:基于未分区表创建新的分区表

Posted

技术标签:

【中文标题】IMPALA:基于未分区表创建新的分区表【英文标题】:IMPALA: Create new partitioned table based on unpartitioned table 【发布时间】:2018-08-15 00:59:52 【问题描述】:

我想基于另一个未分区表创建一个新的分区表。 新表应按旧表的列进行分区。然后我想在新表中加载所有旧数据。

CREATE TABLE new_table PARTITIONED BY (id) STORED AS PARQUET AS SELECT * FROM old_table

如here* 所述,id 应该是最后一列,但它是 old_table 中的第一列。 old_table 包含很多列,所以我不想列出所有列。我能做什么?

    *-- We expect this CTAS to fail because non-key column S
-- comes after key columns YEAR and MONTH in the select list.
create table partitions_maybe partitioned by (year, month)
  as select year, month, s from partitions_no;
ERROR: AnalysisException: Partition column name mismatch: year != month

【问题讨论】:

【参考方案1】:

如果您不介意在记录级别复制列信息,您可以这样做

CREATE TABLE new_table PARTITIONED BY (id_partition) STORED AS PARQUET AS SELECT *, id as id_partition FROM old_table

您将无法在 Impala 中以不同的方式执行此操作。在 Hive 中,您有一些选项可以选择所有列,但其他选项使用正则表达式。

【讨论】:

我会采用这个解决方案。谢谢!

以上是关于IMPALA:基于未分区表创建新的分区表的主要内容,如果未能解决你的问题,请参考以下文章

Impala分区表

从分区文件结构创建 Impala 外部表

具有 < 或 > 条件的 impala 分区

从 Impala 分区拼花表创建文本表

在Impala 和Hive里进行数据分区

带 hdfs 的 Impala 分区表