如何从一个 Impala 表创建分区到另一个表

3
我想为测试目的克隆我们数据库中名为'blah'的Impala表(以免意外删除某些内容)。但是,'blah'表有分区,而且我运行的命令似乎没有起作用。有人能告诉我如何在新表中自动创建/模拟分区,还是我需要手动创建新表的分区?
我使用的命令是:
CREATE TABLE blah_copy LIKE blah
INSERT INTO TABLE blah_copy SELECT * FROM blah

当我运行时,它会为我创建表格,因为它们具有相同数量的列

desc blah
desc blah_copy

然而,当我尝试复制数据(上面的插入语句)时,它告诉我:
ERROR: AnalysisException: Not enough partition columns mentioned in query. Missing columns are: www, xxx, yyy, zzz.

看看Cloudera文档,它说:

如果原始表是分区的,则新表继承相同的分区键列。由于新表最初为空,因此它不会继承实际存在于原始表中的分区。要在新表中创建分区,请插入数据或发出ALTER TABLE ... ADD PARTITION语句。

这就是我现在的情况。感谢您提前提供的任何帮助。
3个回答

4
你需要在插入查询中添加一个PARTITION (column)
INSERT INTO TABLE blah_copy PARTITION (column) 
SELECT * FROM blah

4
如果您有最新版本的Impala,您可以执行以下操作:
create table blah_copy partitioned by (column_x, column_y, column_z) as select * from blah;

2
  1. 设置hive.exec.dynamic.partition.mode=nonstrict
  2. 创建一个名为blah_copy的表,与原始表blah具有相同的结构
  3. 将blah表中的所有数据插入到blah_copy表中,同时按照分区字段wName、xName、yName和zName进行分区

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接