2017-09-16 40 views
-1

我有日期和時間組織CSV文件如下基於時間的目錄結構Apache的鑽

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

我有安裝的Apache鑽取到這些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'的字段,其中包含日期和時間。
  • 根據'trans'字段的值將CSV文件放在適當的目錄下。
  • CSV文件不遵循任何模式。列可能會也可能不會不同。

回答

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(dir0dir1dir2)至trans列名和查詢定義視圖。

請參閱下文了解更多詳情。

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