AWS Glue - avro to parquet - Работа по приклеиванию пустого каркаса из каталога

Я использую AWS Glue Crawler для сканирования примерно 170 ГБ данных avro для создания таблицы каталога данных.

В данных avro есть несколько разных версий схемы, но поисковому роботу все же удается объединить данные в единую таблицу (я включил «Группировать по совместимости данных и сходству схемы - режим»).

Вот когда возникают проблемы.

Я могу использовать Athena только для выполнения SELECT COUNT(*) FROM <DB>.<TABLE> запроса к данным - любой другой запрос вызывает следующую ошибку:

GENERIC_INTERNAL_ERROR: Unknown object inspector category: UNION

Краткая проверка в Google заставляет меня поверить, что это как-то связано со схемой в файлах avro.

Обычно именно здесь я сосредоточиваю свои усилия, НО: я мог выполнить ту же самую процедуру (AVRO -> сканер -> Склейка -> ПАРКЕТ) раньше, с меньшим набором данных avro (50 ГБ), имеющим ту же проблему. (только возможность выполнить подсчетный запрос). Двигаемся дальше.

Раньше преобразование занимало около часа. Теперь при выполнении того же задания с данными размером 170 ГБ задание завершается через минуту, потому что glueContext.create_dynamic_frame.from_catalog теперь возвращает пустой фрейм - ни ошибок, ни ничего. Путаница реальна, поскольку я могу запустить COUNT-запрос в Athena для той же таблицы, что и задание, и вернуть количество объектов 520M.

У кого-нибудь есть идеи, в чем может быть проблема?

Несколько важных моментов:

  • Запрос COUNT возвращает 520M, но recordCount в свойствах таблицы указывает 170M записей.
  • Данные хранятся в файлах 300k .avro размером от 2MB до 30MB.
  • Да, сканер указывает на папку со всеми файлами, а не на файл (обычная ошибка поискового робота).
  • Предыдущая попытка с меньшим набором данных (50 ГБ) была на 100% успешной - я мог сканировать данные паркета и запрашивать их с помощью Athena (проверял много разных запросов, все работали)

person Percolator    schedule 24.03.2019    source источник


Ответы (1)


У нас была такая же проблема, и мы могли решить ее следующим образом.

В нашей схеме avro была запись со смешанными типами полей, т.е. одни имели форму "type" : [ "string" ], другие - форму "type" : [ "null", "string" ].

Изменив это вручную на [ "null", "string" ] везде, мы смогли без проблем использовать таблицу в Athena.

person phantomias    schedule 13.12.2019
comment
В итоге мы использовали Spark on EMR для наших заданий ETL из-за нескольких ограничений Athena / Glue. В любом случае спасибо за ответ, может быть полезно для кого-то другого (: - person Percolator; 13.12.2019