Hadoop 配置单元从多个目录加载数据并动态创建分区

Hadoop 配置单元从多个目录加载数据并动态创建分区,hadoop,hive,Hadoop,Hive,我根据创建日期在Hadoop中存储数据,所以我有多个目录 基于格式/data/{year}/{month}/{day}创建的HDF上 我希望(定期)在配置单元中加载这些数据,并创建相应的分区。目前,我正在尝试以下几种方法 CREATE EXTERNAL TABLE tablename (...) PARTITIONED BY (year STRING, month STRING, day STRING) LOCATION '/data'; ALTER TABLE tablename ADD P

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

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命令手动创建每个分区。是否有任何方法可以自动化和参数化此过程(并将其放入工作流)以将数据动态加载到每个子目录的配置单元分区中?

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

  • 对于日期-将分区定义为日期(字符串日期)
  • For month-将分区定义为month(字符串日期)
  • 对于年-定义为年(字符串日期)

  • 希望你理解这个概念。希望这对您有所帮助

    msck修复表怎么样?这将自动加载子目录中的所有分区。请参见此处:

    问题是我能够创建分区,我的问题是我必须每天手动创建分区(使用上述过程)。理想情况下,我希望以某种方式创建某种自动化(例如,脚本),以便每天将新数据加载到Hive中检查这里的解决方案是否有帮助。。。感谢这正是我所需要的,我需要做的唯一一件事就是重命名输入目录以使其工作(format/partitionkey=partitionvalue/…),我认为没有任何命令可以自动完成这项工作。这可能需要在插入数据时重命名。是的,当然,我只是这样做了,而且效果很好。为了完整起见,如果有人有相同的issues@ypanag你能分享一下代码片段吗