我在日期和时间按以下日期和时间组织了CSV文件
logs/YYYY/MM/DD/CSV files...
我有设置Apache Drill可以在这些CSV文件的顶部执行SQL查询。由于有许多CSV文件;可以利用文件的组织来优化性能。例如,
SELECT * from data where trans>='20170101' AND trans<'20170102';
在此SQL中,应扫描目录logs/2017/01/01
以获取数据。有没有办法让Apache Drill根据此目录结构进行优化?是否可以在Hive,Impala或任何其他工具中进行此操作?
请注意:
- SQL查询几乎总是包含时间范围。
- 给定目录中的CSV文件数量并不大。所有年份的数据总计,这将是巨大的
- 每个CSV文件中都有一个名为" trans"的字段,其中包含日期和时间。
- CSV文件根据" Trans"字段的值将适当的目录放在适当的目录下。
- CSV文件不遵循任何架构。列可能会或可能不会有所不同。
使用数据文件中的列查询不会在分区修剪中有所帮助。
您可以在钻头中使用DIR*变量来参考表中的分区。
create view trans_logs_view as
select
`dir0` as `tran_year`,
`dir1` as `trans_month`,
`dir2` as `tran_date`, * from dfs.`/data/logs`;
您可以使用tran_year,tran_month和tran_date列查询分区修剪。
还查看以下查询是否有助于修剪。
select count(1) from dfs.`/data/logs`
where concat(`dir0`,`dir1`,`dir2`) between '20170101' AND '20170102';
如果是这样,您可以通过与concat( dir0
, dir1
, dir2
)为 trans
列名称和查询来定义视图。
有关更多详细信息,请参见下文。
https://drill.apache.org/docs/how-to-to-partition-data/