AWS Glue Crawler создает таблицы разделов и файлов - PullRequest
0 голосов
/ 29 июня 2018

У меня довольно простые настройки s3, которые я хотел бы запросить с помощью Athena. Все данные хранятся в одной корзине, организованной в папки год / месяц / день / час.

|--data
|   |--2018
|   |   |--01
|   |   |   |--01
|   |   |   |   |--01
|   |   |   |   |   |--file1.json
|   |   |   |   |   |--file2.json
|   |   |   |   |--02
|   |   |   |   |   |--file3.json
|   |   |   |   |   |--file4.json
...

Затем я настроил сканер клея AWS для сканирования s3://bucket/data. Схема во всех файлах идентична. Я ожидаю, что получу одну таблицу базы данных с разделами по году, месяцу, дню и т. Д.

Вместо этого я получаю десятки тысяч таблиц. Существует таблица для каждого файла, а также таблица для каждого родительского раздела. Насколько я могу судить, для каждого файла / папки были созданы отдельные таблицы без единой всеобъемлющей таблицы, в которой я могу выполнять запросы в большом диапазоне дат.

Я следовал инструкциям https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html в меру своих возможностей, но не могу понять, как структурировать мои разделы / сканирование так, чтобы я не получал этот огромный, в основном бесполезный дамп данных.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Клеевой гусеничный оставляет желать лучшего. Он обещает решить множество ситуаций, но он действительно ограничен в том, что он на самом деле поддерживает. Если ваши данные хранятся в каталогах и не используют разделение в стиле Hive (например, year=2019/month=02/file.json), они чаще всего будут портиться. Это особенно расстраивает, когда данные создаются другими продуктами AWS, такими как Kinesis Firehose, которые, похоже, могут быть вашими данными.

В зависимости от того, сколько у вас данных, я мог бы начать с простого создания неразделенной таблицы Athena, которая указывала бы на корень структуры. Разделение становится важным только после того, как ваши данные превысят несколько гигабайт или тысячи файлов.

Другая стратегия, которую вы можете использовать, заключается в добавлении лямбда-функции, которая запускается уведомлением S3 всякий раз, когда новый объект попадает в ваше ведро. Функция может посмотреть на ключ и выяснить, к какому разделу он принадлежит, и использовать Glue API, чтобы добавить этот раздел в таблицу. Добавление уже существующего раздела вернет API-ошибку, но пока ваша функция ее перехватит и проигнорирует, все будет в порядке.

0 голосов
/ 29 июня 2018

В большинстве случаев файлы с одной записью создают отдельные таблицы. Я попробовал файлы с более чем 2 записями и смог сгруппировать все по одной таблице с соответствующими разделами.

Как выглядят ваши файлы json?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...