我有按日期和时间组织的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或任何其他工具中执行此操作?
请注意:
答案 0 :(得分:0)
使用数据文件中的列进行查询无助于分区修剪。
您可以在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
列名称和查询来定义视图。
有关详细信息,请参见下文。