从带有子目录的 HDFS 目录创建 Impala 表
Posted
技术标签:
【中文标题】从带有子目录的 HDFS 目录创建 Impala 表【英文标题】:Create Impala Table from HDFS Directory with subdirectories 【发布时间】:2020-06-16 02:49:35 【问题描述】:我有一个目录,比如/user/name/folder
。
在这个目录里面,我还有多个子目录,分别命名为dt=2020-06-01
、dt=2020-06-02
、dt=2020-06-03
等
这些目录包含 parquet 文件。它们都具有相同的架构。
是否可以使用/user/name/folder
创建 Impala 表?
每次我这样做,我都会得到一个包含 0 条记录的表。有没有办法告诉 Impala 从所有子目录中提取 parquet 文件?
【问题讨论】:
【参考方案1】:一种方法是使用静态分区加载数据,您可以在其中手动定义不同的分区。使用静态分区,您可以使用 ALTER TABLE ... ADD PARTITION 语句手动创建分区, 然后将数据加载到分区中。
CREATE TABLE customers_by_date
(cust_id STRING, name STRING)
PARTITIONED BY (dt STRING)
STORED AS PARQUET;
ALTER TABLE customers_by_country
ADD PARTITION (dt='2020-06-01')
SET LOCATION '/user/name/folder/dt=2020-06-01';
如果未指定位置,则创建位置
ALTER TABLE customers_by_date
ADD PARTITION (dt='2020-06-01');
您也可以使用 HDFS 命令加载数据
$ hdfs dfs -cp /user/name/folder/dt=2020-06-01 /user/directory_impala/table/partition
您可以点击这些指向 Cloudera 文档的链接了解更多详细信息:
Partitioning for Impala Tables
Impala Create table statement
Impala Alter table statement
【讨论】:
以上是关于从带有子目录的 HDFS 目录创建 Impala 表的主要内容,如果未能解决你的问题,请参考以下文章
客快物流大数据项目(七十五):使用impala创建kudu表
如何对 hdfs 中的数据进行加密,然后创建 hive 或 impala 表进行查询?