Hive从多个目录加载数据并动态创建分区

时间:2014-10-13 11:06:33

标签: hadoop hive

我根据创建日期将数据存储在Hadoop中,因此我有多个目录 HDFS上基于 / data / {year} / {month} / {day} 格式创建的。 我希望在Hive中加载这些数据(定期)并创建相应的分区。目前我正在尝试几种方法,如下面的方法

CREATE EXTERNAL TABLE tablename (...)
PARTITIONED BY (year STRING, month STRING, day STRING)
LOCATION '/data';

ALTER TABLE tablename ADD PARTITION(year='2014', month='10', day='13') LOCATION '/data/2014/10/13';

但是使用这种方法我需要手动使用ALTER命令创建每个分区。有没有办法自动化和参数化这个过程(并将其放入工作流程),以便为每个子目录动态地将数据加载到Hive分区中?

2 个答案:

答案 0 :(得分:1)

msck修复表怎么样?这应该自动加载子目录中的所有分区。见这里:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE)

答案 1 :(得分:0)

为了在您的案例中创建动态分区,您需要在定义分区列时执行以下操作

  1. 日期 - 将分区定义为日期(字符串日期)。
  2. 月份 - 将分区定义为月份(字符串日期)
  3. 年份 - 定义为年份(字符串日期)。
  4. 希望你理解这个概念。希望这可以帮助你