【问题标题】:Dynamic partitioning of external tables in Hive 0.12Hive 0.12 中外部表的动态分区
【发布时间】:2014-08-14 12:53:22
【问题描述】:

在 Hive 文档中,它讨论了外部表的动态分区:https://cwiki.apache.org/confluence/display/Hive/HCatalog+DynamicPartitions

我最近升级到 Hive 0.12 并希望通过在 DDL 的位置部分中提供表的根 HDFS 位置来使用动态外部表分区,然后添加子目录,然后这些子目录将自动添加到表中。子目录将由 Flume 代理创建,该代理将添加日期作为路径名。我希望位于根目录顶部的 Hive 表能够自动获取子目录中的新数据。

例如,如果根位置是:

hdfs:///partitionTest

我使用 Flume 使用路径添加数据

hdfs:///partitionTest/year=%Y/month=%m/day=%d

我的 Hive DDL 语句在哪里:

create external table partitionTest (line String)  
partitioned by (year int, month int, day int) 
stored as sequencefile 
location 'hdfs:///partitionTest';

我仍然发现自己必须使用 alter table 语句手动添加分区,或者将数据从包含相关分区字段的另一个表插入到该表中 - 这确实将数据写入 HDFS 上的正确目录结构。

我认为 Hive 0.12 将允许我将数据写入 HDFS,然后自动将其添加到表中,我错了吗?我是否总是需要手动添加分区才能让 Hive 获取新数据?

【问题讨论】:

    标签: hadoop hive partitioning


    【解决方案1】:

    如果您的表是外部的并且如果它是静态分区,那么是的,您必须在每次创建新分区时添加分区(使用 alter 命令)。

    如果它是一个内部表并且如果它是一个静态分区,那么你必须使用 LOAD 命令或使用 insert into 命令。

    如果是动态分区,则选择查询中的最后一列将是分区值。直到 Hive 0.13 这是程序。

    希望对您有所帮助...!!!

    【讨论】:

    • 我认为 0.12 允许对外部表进行动态分区(请参阅我的问题中的文档链接)?我可以使用insert into 语法将数据插入到表中,它会进行分区。我认为我可以将文件添加到目录中,HCat 会获取 HDFS 上的更改并添加新分区。
    【解决方案2】:

    如果在外部/不是通过 hive 命令手动添加分区,请运行修复表命令来拾取分区。看看这能不能解决问题

    MSCK 修复表表名; 或者 ALTER TABLE table_name RECOVER PARTITIONS;

    【讨论】:

      猜你喜欢
      • 2013-07-26
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多