我们假设我每天以一种格式存储一个文件:
/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'