Запрос таблицы Athena, разделенной на год, месяц, день - PullRequest
0 голосов
/ 23 октября 2018

У меня есть таблица Athena, разделенная по годам, месяцам и дням со следующим определением

CREATE EXTERNAL TABLE `my_table`(
    `price` double) 
PARTITIONED BY ( 
    `year` int, 
    `month` int, 
    `day` int) 
ROW FORMAT SERDE 
    'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'

Мне нужно запросить ее между датами.Например, я вижу следующие варианты:

SELECT avg(price) 
FROM my_table 
WHERE year = 2018 AND month = 1

Результат: Время выполнения: 4,89 секунды, Сканированные данные: 20,72 МБ

SELECT avg(price) 
FROM my_table 
WHERE cast(date_parse(concat(cast(year as varchar(4)),'-',
                             cast(month as varchar(2)),'-',
                             cast(day as varchar(2))
                             ), '%Y-%m-%d') as date) 
BETWEEN Date '2018-01-01' AND Date '2018-01-31'

Результат: Время выполнения: 8,64 секунды, Сканированные данные: 20,72 МБ

Итак, я думаю, что Афина достаточно умна, чтобы использовать функцию разделения даже при приведении объединенных разделенных столбцов, так почему же это требуеток.в два раза больше?Что именно происходит за кулисами?

Большое спасибо.

...