Почему данные Athena сканируются для каждого запроса по-разному для типов данных STRING и CHAR с источником Parquet? - PullRequest
1 голос
/ 03 февраля 2020

У меня есть куча файлов в формате 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 МБ

Редактировать: поменять статистику по количеству (*) запросов

...