【问题标题】:Add PARTITION after creating TABLE in hive在 hive 中创建 TABLE 后添加 PARTITION
【发布时间】:2015-09-03 15:17:39
【问题描述】:

我已经创建了一个非分区表并将数据加载到表中,现在我想在该表中添加一个基于部门的PARTITION,我可以这样做吗? 如果我这样做:

ALTER TABLE Student ADD PARTITION (dept='CSE') location '/test';

它给了我错误:

FAILED: SemanticException table is not partitioned but partition spec exists: {dept=CSE}

请帮忙。谢谢

【问题讨论】:

  • 能否提供create table语句。您不能在 create table 语句中存在的列上创建分区。您似乎在表中添加了列 CSE
  • 如果您想在CSE 列上创建分区,那么您应该先从表中删除该列,然后再添加分区。
  • 创建表 emp(id INT,name string,sal INT,dept string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 存储为 TEXTFILE;
  • 您的创建表语句错误。请参阅以下用户提供的答案。
  • 所以你的意思是说我们不能在以后为非分区表添加 PARTITION,我们必须在创建表期间使用 partitioned by 然后我们才能将新 PARTITION 添加到表中。

标签: hadoop hive partition


【解决方案1】:

首先以这样的方式创建一个表,以便表中没有分区列。

create external table Student(col1 string, col2 string) partitioned by (dept string) location 'ANY_RANDOM_LOCATION';

一旦你完成了表的创建,然后改变表以添加 像这样明智地划分部门:

alter table Student add partition(dept ='cse') location '/test';

我希望这会有所帮助。

【讨论】:

  • 是的,当我创建表时,它是一个非分区表,所以我可以稍后创建分区,这是我的问题
  • 答案是否定的。但是为什么首先要将非分区表更改为分区表。只需创建一个具有任何名称分区的表。稍后您可以添加任意数量的位置。
  • 好的,所以应该在创建表的过程中预先决定我们想要对哪一列进行分区,然后我们可以在它上面添加更多的列。
【解决方案2】:

如果您在创建表时没有定义分区,则无法更改表分区。

如果在更改未分区表以添加分区时,您收到此错误:“语义异常表未分区但分区规范存在:{dept=CSE}”,这意味着您正在尝试将分区包含在表本身。

您没有收到语法错误,因为该命令的语法正确并用于更改分区列。

了解有关 Hive 表的更多信息:

https://www.dezyre.com//hadoop-tutorial/apache-hive-tutorial-tables

您还可以检查表中可能的交替:

https://sites.google.com/site/hadoopandhive/home/how-to-create-table-partition-in-hive

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多