我想基于另一个未分区表创建一个新的分区表。新表应按旧表的列进行分区。然后我想将所有旧数据加载到新表中。
CREATE TABLE new_table PARTITIONED BY (id) STORED AS PARQUET AS SELECT * FROM old_table
Run Code Online (Sandbox Code Playgroud)
如此处所述*,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
Run Code Online (Sandbox Code Playgroud)
如果您不介意在记录级别复制列信息,则可以执行此操作
CREATE TABLE new_table PARTITIONED BY (id_partition) STORED AS PARQUET AS SELECT *, id as id_partition FROM old_table
Run Code Online (Sandbox Code Playgroud)
在 Impala 中您将无法以不同的方式执行此操作。在 Hive 中,您可以使用一些选项来选择所有列,但其他选项则使用正则表达式。
| 归档时间: |
|
| 查看次数: |
5498 次 |
| 最近记录: |