gpt4 book ai didi

hadoop - 如何将一个 Hive 表指向多个外部文件?

转载 作者:可可西里 更新时间:2023-11-01 14:21:09 24 4
gpt4 key购买 nike

我希望能够将多个 HDFS 文件附加到一个 Hive 表,同时将 HDFS 文件保留在其原始目录中。这些创建的文件位于不同的目录中。

LOAD DATA INPATH将HDFS文件移动到hive仓库目录。

据我所知,外部表必须指向一个文件,或者指向一个目录,在该目录中可以放置具有相同架构的多个文件。但是,我的文件不会位于单个目录下。

是否可以将单个 Hive 表指向单独目录中的多个外部文件,或者以其他方式将多个文件复制到单个 Hive 表中而不将文件从其原始 HDFS 位置移动?

Pradeep 回答的扩展解决方案:

例如,我的文件如下所示:

/root_directory/<job_id>/input/<dt>

假装每个的模式是 (foo STRING, bar STRING, job_id STRING, dt STRING)

我首先创建一个外部表。但是请注意,我的 DDL 不包含初始位置,也不包含 job_id 和 dt 字段:

CREATE EXTERNAL TABLE hivetest (
foo STRING,
bar STRING
) PARTITIONED BY (job_id STRING, dt STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
;

假设我有两个文件要插入:

/root_directory/b1/input/2014-01-01
/root_directory/b2/input/2014-01-02

我可以像这样将这两个外部文件加载到同一个 Hive 表中:

ALTER TABLE hivetest 
ADD PARTITION(job_id = 'b1', dt='2014-01-01')
LOCATION '/root_directory/b1/input/2014-01-01';

ALTER TABLE hivetest
ADD PARTITION(job_id = 'b2', dt='2014-01-02')
LOCATION '/root_directory/b2/input/2014-01-02';

如果有人碰巧需要使用 Talend 来执行此操作,他们可以像这样使用 tHiveLoad 组件 [编辑:这不起作用;检查下面]:

Matthew Moisen Hive Talend Insert

talend 使用 tHiveLoad 为此生成的代码实际上是 LOAD DATA INPATH ...,它将文件从其在 HDFS 中的原始位置移除。

您必须改为在 tHiveLoad 中执行较早的 ALTER TABLE 语法。

最佳答案

简短的回答是肯定的。一个 Hive 外部表可以指向多个文件/目录。长答案将取决于数据的目录结构。执行此操作的典型方法是创建一个分区表,其中分区列映射到目录路径的某些部分。

例如我们有一个用例,其中一个外部表指向 HDFS 上的数千个目录。我们的路径符合这种模式 /prod/${customer-id}/${date}/。在这些目录中的每一个目录中,我们都有大约 100 个文件。在将其映射到 Hive 表中时,我们创建了两个分区列,customer_id 和 date。所以每天,我们都可以将数据加载到 Hive 中,方法是

ALTER TABLE x ADD PARTITION (customer_id = "blah", dt = "blah_date") LOCATION '/prod/blah/blah_date';

关于hadoop - 如何将一个 Hive 表指向多个外部文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28377606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com