创建外部表配置单元,位置中包含多个文件

cbwuti44  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(287)
CREATE EXTERNAL TABLE IF NOT EXISTS LOGS (LGACT STRING,NTNAME STRING)  
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'  
LOCATION '/user/hive/warehouse/LOGS/test';

在'测试'文件夹下,我每天写文件。例如:

/user/hive/warehouse/LOGS/test/20170420
/user/hive/warehouse/LOGS/test/20170421
/user/hive/warehouse/LOGS/test/20170422

在我创建的logs表中看不到任何数据。
但是,我使用

LOCATION '/user/hive/warehouse/LOGS/test/20170422';

我可以看到那些天的记录。
我想查看配置单元表中/test目录下的所有数据,而且/test目录每天都会填充新文件。

bvhaajcl

bvhaajcl1#

方案1
为了支持子目录

set mapred.input.dir.recursive=true;

如果您的配置单元版本低于2.0.0,那么

set hive.mapred.supports.subdirectories=false;

方案2
创建分区表

CREATE EXTERNAL TABLE IF NOT EXISTS LOGS (LGACT STRING,NTNAME STRING)  
partitioned by (dt date)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'  
LOCATION '/user/hive/warehouse/LOGS/test';
alter table LOGS add if not exists partition (dt=date '2017-04-20') LOCATION '/user/hive/warehouse/LOGS/test/20170420';
alter table LOGS add if not exists partition (dt=date '2017-04-21') LOCATION '/user/hive/warehouse/LOGS/test/20170421';
alter table LOGS add if not exists partition (dt=date '2017-04-22') LOCATION '/user/hive/warehouse/LOGS/test/20170422';

如果使用标准约定保存目录,那么管理起来会更容易。 dt=2017-04-20 而不是 20170420

lf3rwulv

lf3rwulv2#

默认情况下,配置单元只读取外部表中指定位置内的文件(而不是目录)。如果要启用添加目录,请设置以下参数:
设置mapred.input.dir.recursive=true;

相关问题