我想基于另一个未分区表创建一个新的分区表。 新表应按旧表的一列进行分区。然后,我想将所有旧数据加载到新表中。
CREATE TABLE new_table PARTITIONED BY (id) STORED AS PARQUET AS SELECT * FROM old_table
类似于here *,ID应该是LAST列,但它是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
答案 0 :(得分:1)
如果您不介意在记录级别复制列信息,则可以这样做
CREATE TABLE new_table PARTITIONED BY (id_partition) STORED AS PARQUET AS SELECT *, id as id_partition FROM old_table
在Impala中,您将无法以其他方式进行操作。在Hive中,您可以使用某些选项选择所有列,而其他选项则使用正则表达式。