我有按日期和时间组织的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或任何其他工具中执行此操作?请注意:
最佳答案
使用数据文件中的列进行查询将无助于分区修剪。
您可以在Drill中使用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
列名和查询来定义 View 。请参阅下面的更多细节。
https://drill.apache.org/docs/how-to-partition-data/
关于hadoop - 基于时间的目录结构Apache Drill,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46249110/