У меня есть таблица 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 МБ
Итак, я думаю, что Афина достаточно умна, чтобы использовать функцию разделения даже при приведении объединенных разделенных столбцов, так почему же это требуеток.в два раза больше?Что именно происходит за кулисами?
Большое спасибо.