【问题标题】:Hive - static partitioning - difference between creating the partition directory directly vs using alter table statementHive - 静态分区 - 直接创建分区目录与使用 alter table 语句的区别
【发布时间】:2017-01-26 09:54:33
【问题描述】:

在 hive 中创建静态分区的以下两个语句之间是否存在任何内部/性能差异,我已经尝试了两种方法,并且在将数据加载到分区后它们都可以正常工作

dfs -mkdir /user/cloudera/sqoop_import/avroData/orders_part/order_month=2014-02;
alter table orders_part add partition(order_month='2014-02');

【问题讨论】:

    标签: hadoop hive hdfs hive-partitions hiveddl


    【解决方案1】:

    此命令:dfs -mkdir /user/cloudera/sqoop_import/avroData/orders_part/order_month=2014-02; 不创建分区,它创建一个目录。此目录尚未安装为表分区。分区是一个目录加上一个元数据,其中包含存储在元存储中的分区信息(键值+分区目录)。您可以在执行 mkdir 后使用show partitions orders_part; 命令轻松检查它。此目录不会在分区列表中。

    alter table orders_part add partition(order_month='2014-02'); 创建目录order_month=2014-02 并将其挂载为分区。

    可以使用动态创建分区

    insert overwrite table orders_part partition(order_month) 
    select ... 
    

    命令。在这种情况下,目录将自动创建并挂载为分区。

    考虑一下:您可以使分区不一定位于等于“key=value”的目录中。例如:alter table orders_part add partition(order_month='2014-02') location '/user/cloudera/sqoop_import/avroData/orders_part/mydir' ; 注意分区目录现在是'/user/cloudera/sqoop_import/avroData/orders_part/mydir'

    【讨论】:

    • 谢谢@leftjoin,这很有帮助。 'show partitions oders_part' 显示两个分区,我正在使用 cloudera quickstart vm 5.7.0
    • 它可能是从您之前的表加载中遗留下来的。首先删除分区(更改表删除分区)然后 mkdir 然后显示分区。 mkdir 不应创建分区。
    • 我创建了两个分区,一个是alter table,另一个是直接创建目录,当我做show partitions orders_part时,只有一个使用alter table创建的分区出现了,但是在将数据加载到分区,当我做show partitions orders_part时都显示了
    • 是的,这是因为第二个分区是在加载过程中动态创建的。通过创建目录来创建分区是不可能的。可以通过发出“alter table add partition”或加载数据并动态创建分区来创建分区。你这样做了 - 在加载数据期间动态创建分区。
    • 可是你还不满意我的解释?所以请建议 wat 是错误的,以及如何改进我的答案
    猜你喜欢
    • 2020-02-04
    • 2021-04-01
    • 2017-08-05
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多