基于时间的目录结构Apache钻头



我在日期和时间按以下日期和时间组织了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( dir0dir1dir2)为 trans列名称和查询来定义视图。

有关更多详细信息,请参见下文。

https://drill.apache.org/docs/how-to-to-partition-data/

最新更新