Структура каталогов на основе времени Apache Drill

У меня есть файлы CSV, организованные по дате и времени следующим образом

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

Я настроил Apache Drill для выполнения SQL-запросов поверх этих CSV-файлов. Поскольку файлов 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 не соответствуют какой-либо схеме. Столбцы могут быть или не быть разными.

person TriCore    schedule 16.09.2017    source источник


Ответы (1)


Запрос с использованием столбца внутри файла данных не поможет в сокращении раздела.

Вы можете использовать переменные dir* в Drill для ссылки на разделы в таблице.

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 имя столбца и запрос.

Подробности смотрите ниже.

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

person InfamousCoconut    schedule 16.09.2017
comment
не уверен, что не нравится в этом ответе, он действительно помог мне, спасибо! - person sg1234; 17.06.2021
comment
Я воспользовался вашим советом и создал представление, за исключением того, что мне нужно преобразовать dir0 в int, чтобы иметь возможность использовать это поле в соединениях с другими таблицами. Вы случайно не знаете, поддерживает ли это обрезку разделов или нарушает ее? Если вы хотите присоединиться, вот мой вопрос: table-in-csv-format-with" title="ищу необлачную rdbms для импорта секционированных таблиц в формате csv с">stackoverflow.com/questions/67929849/ - person sg1234; 17.06.2021