【问题标题】:How to create partitions from one impala table to another如何创建从一个 impala 表到另一个表的分区
【发布时间】:2016-05-18 23:59:17
【问题描述】:

我想在我们的数据库中克隆一个名为“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 TABLE ... 添加 PARTITION 语句。

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

【问题讨论】:

    标签: database cloudera impala


    【解决方案1】:

    如果你有最新的 impala 版本,你可以这样做

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:
        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;

        【讨论】:

          猜你喜欢
          • 2014-12-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多