【问题标题】:Create HIVE partitioned table HDFS location assistance创建 HIVE 分区表 HDFS 定位辅助
【发布时间】:2014-05-21 18:44:41
【问题描述】:

当然希望有人可以通过基于驻留在 HDFS 目录中的逗号分隔文件自动添加数据来帮助我创建外部 HIVE 分区表。我的理解或缺乏理解是,当您定义 CREATE EXTERNAL TABLE, PARTITIONED 并为其提供 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 外部表时,我会认为我所有的分隔文件都已经包含在创建时的表中。我将数据放入新定义的外部表的唯一方法是通过 ALTER TABLE ADD PARTITION 语句,例如:ALTER TABLE master_test ADD PARTITION (dt='2014-04-16')。或者,如果我明确定义分隔文件的位置,它会将单个文件添加到定义的表中。

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

【问题讨论】:

    标签: hadoop hive beeswax


    【解决方案1】:

    【讨论】:

    • 格温,谢谢。它就像一个魅力!由于某种原因,由于我是新成员,因此我无法投票赞成您的答案。
    • 不用担心。通过回答其他问题来支付它:)
    • @GwenShapira 在阅读了您提供的 apache 文档/链接后,我不清楚是否可以使分区“真正”动态化。我的意思是,可以创建一个新目录,比如 /data/output/dt=2014-01-01。并将其自动添加到未来基于分区的查询中,而无需将新分区“添加”到 Hive 定义中。这似乎类似于“多阶段”提交错误如何导致 RDBM 中的级联故障。
    • 您必须以某种方式将目录添加到 Hive 元数据。没有自动发现过程。因此,必须使用“add”或“msck”命令。不确定它与多阶段提交的关系 - 在运行“添加”命令之前,表根本不会改变。
    • 术语“动态分区”是指通过 Hive 完成的插入(以及未来的更新)。如果启用动态分区,则无需指定插入哪个分区,新分区将自动创建。这些将立即可见,无需对它们运行“添加”。
    猜你喜欢
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多