按日期范围读取Hive表中的多个文件

我们假设我每天以一种格式存储一个文件:

/path/to/files/2016/07/31.csv
/path/to/files/2016/08/01.csv
/path/to/files/2016/08/02.csv

如何在给定日期范围内(例如2016-06-04至2016-08-03)读取单个Hive表中的文件?

最佳答案 假设每个文件都遵循相同的模式,那么我建议您使用以下命名约定存储文件:

/path/to/files/dt=2016-07-31/data.csv
/path/to/files/dt=2016-08-01/data.csv
/path/to/files/dt=2016-08-02/data.csv

然后,您可以创建一个由dt分区并指向位置/路径/到/ files /的外部表

CREATE EXTERNAL TABLE yourtable(id int, value int)
PARTITIONED BY (dt string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/path/to/files/'

如果您有多个分区并且不想为每个分区编写alter table yourtable add partition …查询,则可以使用将自动添加分区的修复命令.

msck repair table yourtable

然后,您可以通过指定分区范围简单地选择日期范围内的数据

SELECT * FROM yourtable WHERE dt BETWEEN '2016-06-04' and '2016-08-03'
点赞