从非分区表创建分区表

时间:2017-10-26 14:01:28

标签: hadoop hive hiveql

假设我在Hive中有内部orc非分区表:

CREATE TABLE IF NOT EXISTS non_partitioned_table(
        id STRING,
        company STRING,
        city STRING,
        country STRING,
        )
    STORED AS ORC;

是否有可能以某种方式通过cte like statement创建镶木地板分区表?

create partitioned_table PARTITION ON (date STRING) like non_partitioned_table;
alter table partitioned_table SET FILEFORMAT PARQUET;

这个创建语句不起作用。

所以基本上我需要添加由此列分区的列和make表。我知道我可以通过简单的create table语句创建表,但我需要在 CREATE TABLE LIKE 中进行创建,并且不知何故更改

1 个答案:

答案 0 :(得分:1)

您的表格中没有date列,因此您必须创建一个新列。

您可能ALTER TABLE non_partitioned_table ADD PARTITION,但我自己没有尝试过。如果你想尝试一下,我会建议分区位置在现有的HDFS目录之外。

无论如何,CREATE-TABLE-LIKE DDL不支持PARTITIONED BY

 CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
 LIKE existing_table_or_view_name
 [LOCATION hdfs_path];

您需要复制第一个DESCRIBE TABLE架构,然后更改它并添加PARTITIONED BY,并可选择指定STORED AS。 (SET FILEFORMAT PARQUET不会就地更改数据类型)。

然后,如果您想要新表中的数据,则需要INSERT OVERWRITE TABLE