У меня есть куча файлов в формате Parquet, хранящихся в S3, общим размером 2,1 ГБ. Я создаю две таблицы в Афинах, которые имеют одинаковую схему, за исключением типов данных - в первой таблице я определяю каждый столбец как STRING, тогда как во второй таблице я использую CHAR и VARCHAR.
Когда я запускаю запрос к первой таблице, Афина сканирует все файлы, и отсканированные данные отображаются как 2.1G. Когда я выполняю тот же запрос для второй таблицы, отсканированные данные составляют всего 939 МБ (что все еще кажется немного большим, поскольку я ожидаю, что Athena будет сканировать только столбец requestId и получит соответствующие строки).
Когда Если SELECT *
вместо *1006* используется тот же requestId, данные, отсканированные в первой таблице, составляют 261 МБ, тогда как данные, отсканированные во второй таблице, по-прежнему составляют 939 МБ. Почему это происходит?
Таблица 1
create external table table1 (
`timestamp` string,
level string,
requestId string,
class string,
message string
)
stored as parquet
location 's3://...'
Таблица 2
create external table table2 (
`timestamp` char(24),
level char(5),
requestId char(36),
class varchar(30),
message varchar(255)
)
stored as parquet
location 's3://...'
Запросы
SELECT * FROM "default"."table1" where requestId='abcdef'
Время заняло: 4,47 секунды Сканированные данные : 2,1 ГБ
SELECT * FROM "default"."table2" where requestId='abcdef'
Время: 5,55 секунд Сканированные данные: 939 МБ
SELECT count(*) FROM "default"."table1" where requestId='abcdef'
Время: 2,97 секунд Сканированные данные: 261 МБ
SELECT count(*) FROM "default"."table2" where requestId='abcdef'
Время заняло: 3,56 секунды. Сканированные данные: 939 МБ
Редактировать: поменять статистику по количеству (*) запросов