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

时间:2016-05-18 23:59:17

标签: database cloudera impala

我想要克隆一个名为' blah'的impala表。在我们的数据库中进行测试(所以我不会意外删除我不应该删除的内容)。然而,表格' blah'有分区,它看起来像我正在运行的命令正在做的伎俩。有人可以告诉我在新表中自动创建/模仿分区的任何技巧,还是我需要在新表中手动创建分区?

我使用的cmd是:

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 documentation,它说:

  

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

这就是我现在所处的位置。提前感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:2)

如果您有最新的impala版本,则可以

create table blah_copy partitioned by (column_x, column_y, column_z) as select * from blah;

答案 1 :(得分:1)

  1. 设置hive.exec.dynamic.partition.mode = nonstrict
  2. CREATE TABLE blah_copy LIKE blah;
  3. INSERT INTO TABLE blah_copy分区(wName,xName,yName,zName)SELECT * FROM blah;

答案 2 :(得分:0)

您必须在插入查询中添加PARTITION (column)

INSERT INTO TABLE blah_copy PARTITION (column) 
SELECT * FROM blah