基于时间的目录结构apachedrill

fhity93d  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(360)

我有按日期和时间组织的csv文件,如下所示

logs/YYYY/MM/DD/CSV files...

我已经设置了apachedrill在这些csv文件上执行sql查询。因为有很多csv文件;可以利用文件的组织来优化性能。例如,

SELECT * from data where trans>='20170101' AND trans<'20170102';

在这个sql中,目录 logs/2017/01/01 应扫描数据。有没有办法让apachedrill基于这个目录结构进行优化?在Hive、 Impala 或其他工具中是否可以做到这一点?
请注意:
sql查询几乎总是包含时间范围。
给定目录中的csv文件数量不是很大。加上多年的数据,这将是巨大的
每个csv文件中都有一个名为“trans”的字段,其中包含日期和时间。
csv文件根据“trans”字段的值放在适当的目录下。
csv文件不遵循任何模式。列可以不同,也可以不不同。

7y4bm7vi

7y4bm7vi1#

在数据文件中使用列进行查询无助于分区修剪。
您可以在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\u year、tran\u month和tran\u 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-partition-data/

相关问题