创build外部表格configuration单元,位置包含多个文件

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

在“testing”文件夹下我每天都在写文件。 例如:

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

我看不到我创build的LOGS表中的任何数据。

但是,我使用创build表

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

我可以看到那几天的logging。

我想查看我的HIVE表中/ test目录下的所有数据,并且/ test目录每天使用新文件填充。

选项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

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

set mapred.input.dir.recursive = true;