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

时间:2017-06-02 23:49:43

标签: java apache hadoop hive

CREATE EXTERNAL TABLE IF NOT EXISTS LOGS (LGACT STRING,NTNAME STRING)  
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'  
LOCATION '/user/hive/warehouse/LOGS/test';

' 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';

我可以看到那天的记录。

我希望在我的HIVE表中查看/ test目录下的所有数据,同时每天都会使用新文件填充/ test目录。

2 个答案:

答案 0 :(得分:2)

选项1

为了支持子目录

set mapred.input.dir.recursive=true;

如果您的Hive版本低于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

答案 1 :(得分:0)

默认情况下,hive只读取外部表中指定位置内的文件(而不是目录)。如果要启用添加目录,请设置以下参数:

set mapred.input.dir.recursive = true;