Учитывая источник данных из 1,4 ТБ данных Parquet на S3, разделенных полем отметки времени (так что разделы year
- month
- day
), я запрашиваю данные за определенный день (2,6 ГБ данных) и извлекаю все доступные поля в Parquet. файлы через Redshift Spectrum с этим запросом:
SELECT *
FROM my_external_schema.my_external_table
WHERE year = '2020' and month = '01' and day = '01'
Таблица доступна через Glue Crawler, который указывает на папка верхнего уровня в S3; это создает базу данных, а затем с помощью этой команды я связываю базу данных с новым внешняя схема:
create external schema my_external_schema from data catalog
database 'my_external_schema'
iam_role 'arn:aws:iam::123456789:role/my_role'
region 'my-region-9';
Анализируя таблицу в моей среде IDE, я вижу, что таблица создается с помощью этого оператора:
create external table my_external_schema.my_external_table
(
id string,
my_value string,
my_nice_value string
)
partitioned by (year string, month string, day string)
row format serde 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
with serdeproperties ('serialization.format'='1')
stored as
inputformat 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
outputformat 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
location 's3://my-bucket/my/location/'
table properties ('CrawlerSchemaDeserializerVersion'='1.0', 'CrawlerSchemaSerializerVersion'='1.0', 'UPDATED_BY_CRAWLER'='my_crawler');
Когда я анализирую запрос от Redshift, я вижу, что вместо этого было отсканировано ~ 86 ГБ данных.
Как такое возможно? Это вызывает беспокойство, потому что Redshift выставляет счета на основе количества отсканированных данных и похоже, что служба сканирует примерно в 40 раз больше, чем фактический объем данных в этом разделе.
Я также попытался выполнить тот же запрос в Афине, и там я получил только 2,55 ГБ отсканированных данных (определенно более разумно).
Я не могу дать слишком много подробностей о размере кластера, но предполагаю, что эти 86 ГБ отсканированных данных поместятся в памяти кластера.
CREATE EXTERNAL TABLE
команду и пример имен путей, используемых для данных? - person John Rotenstein   schedule 19.11.2020SHOW CREATE TABLE ..
- по крайней мере, в Athena. Или вы также можете поделиться снимком экрана с определением в Glue. - person Philipp Johannis   schedule 20.11.2020