当然希望有人可以通过基于HDFS目录中以逗号分隔的文件自动添加数据来帮助我创建外部HIVE分区表。我的理解或缺乏理解的是,当您定义一个CREATE EXTERNAL TABLE,进行了分区,并为其提供了LOCATION时,它应该递归地扫描/读取每个子目录,并将数据加载到新创建的分区外部表中。以下内容应为我的麻烦提供更多的见解…
Sample HDFS directory structure:<br>
/data/output/dt=2014-01-01<br>
/data/output/dt=2014-01-02<br>
/data/output/dt=2014-01-03 ...<br>
/data/output/dt=2014-05-21<br>
每个“dt =”子目录都包含定界文件。
以下是我的CREATE EXTERNAL TABLE语法的示例:
CREATE EXTERNAL TABLE master_test (UID string,
lname string,
fname string,
addr string,
city string,
state string,
orderdate string,
shipdate string)
PARTITIONED BY (dt STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '/data/output/';
创建master_test外部表后,我会以为在CREATE时所有定界文件都已包含在表中。我将数据获取到新定义的外部表中的唯一方法是通过ALTER TABLE ADD PARTITION语句,例如:ALTER TABLE master_test ADD PARTITION(dt ='2014-04-16')。或者,如果我明确定义了分隔文件的位置,则它将在定义的表中添加单个文件。
任何建议或指导,不胜感激。
最佳答案
您可以使用MSCK REPAIR自动发现分区。
看一下文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE)