【问题标题】:Create partitioned table from non partitioned table从非分区表创建分区表
【发布时间】:2017-10-26 14:01:28
【问题描述】:

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

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

是否可以通过 cte like 语句以某种方式创建 parquet 分区表?

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

此创建语句不起作用。

所以基本上我需要添加列并使表按此列分区。我知道我可以通过简单的 create table 语句来创建表,但我需要在 CREATE TABLE LIKE 中完成它并以某种方式进行更改

【问题讨论】:

    标签: hadoop hive hiveql


    【解决方案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

    【讨论】:

    • 感谢您的回复,但您能否澄清一下您是做什么的(SET FILEFORMAT PARQUET 不会就地更改数据类型)?改文件格式后show create table和以前不一样了
    • 您所做的只是更新 Hive 元存储中的条目。 hdfs dfs -ls 表格位置。这些文件不会神奇地更改为镶木地板格式
    猜你喜欢
    • 2015-11-07
    • 2016-12-23
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多