6

当然希望有人可以通过基于驻留在 HDFS 目录中的逗号分隔文件自动添加数据来帮助我创建外部 HIVE 分区表。我的理解或缺乏理解是,当您定义 CREATE EXTERNAL TABLE, PARTITIONED 并为其提供 LOCATION 时,它应该递归扫描/读取每个子目录,并将数据加载到新创建的分区外部表中。下面应该提供一些关于我的麻烦的额外见解......</p>

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 外部表时,我会认为我所有的分隔文件都已经包含在创建时的表中。我将数据放入新定义的外部表的唯一方法是通过 ALTER TABLE ADD PARTITION 语句,例如:ALTER TABLE master_test ADD PARTITION (dt='2014-04-16')。或者,如果我明确定义分隔文件的位置,它会将单个文件添加到定义的表中。

非常感谢任何建议或指导。

4

1 回答 1

11

您可以使用 MSCK REPAIR 自动发现分区。看看文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE)

于 2014-05-21T19:05:08.470 回答