Задание AWS Glue Python не создает новые разделы каталога данных

Я создал задание AWS Glue с помощью Glue Studio. Он берет данные из каталога данных Glue, выполняет некоторые преобразования и записывает данные в другой каталог данных.

При настройке целевого узла я включил возможность создания новых разделов после запуска:

введите описание изображения здесь

Задание выполняется успешно, данные записываются в S3 с правильной структурой папок разделов, но в реальной таблице каталога данных новые разделы не создаются - мне все равно нужно запустить Glue Crawler для их создания.

Код в сгенерированном скрипте, который отвечает за создание раздела, следующий (последние две строки задания):

DataSink0 = glueContext.write_dynamic_frame.from_catalog(frame = Transform4, database = "tick_test", table_name = "test_obj", transformation_ctx = "DataSink0", additional_options = {"updateBehavior":"LOG","partitionKeys":["date","provider"],"enableUpdateCatalog":True})
job.commit()

Что я делаю неправильно? Почему не создаются новые разделы? Как мне избежать запуска поискового робота, чтобы данные были доступны в Athena?

Я использую Glue 2.0 - PySpark 2.4


person gshpychka    schedule 18.03.2021    source источник
comment
Просто вопрос: нужно ли запускать краулер каждый раз при запуске задания (с той же схемой)? Потому что ожидается запуск краулера один раз после изменения, но он не потребуется для будущих запусков.   -  person Coockson    schedule 22.03.2021
comment
Да, я знаю, так как задание Glue не создает новых разделов в каталоге данных.   -  person gshpychka    schedule 23.03.2021


Ответы (1)


Как подчеркивается в документации, существует < строгие> ограничения на добавление новых разделов в каталоги данных, в частности, убедитесь, что ваш вариант использования не противоречит любому из следующего:

Поддерживаются только цели Amazon Simple Storage Service (Amazon S3).

Поддерживаются только следующие форматы: json, csv, avro и parquet.

Чтобы создать или обновить таблицы с классификацией паркета, необходимо использовать оптимизированное средство записи паркета AWS Glue для DynamicFrames.

Если для updateBehavior задано значение LOG, новые разделы будут добавлены только в том случае, если схема DynamicFrame эквивалентна или содержит подмножество столбцов, определенных в схеме таблицы каталога данных.

Ключи partitionKeys должны быть эквивалентными и в том же порядке между параметром, переданным в сценарии ETL, и ключами partitionKeys в схеме таблицы каталога данных.

person Gaurav Tiwari    schedule 05.06.2021
comment
Все это верно в моем случае использования. - person gshpychka; 06.06.2021
comment
Я могу подтвердить, что это решило проблему для меня (я использовал ORC, а не Parquet). - @gshpychka проверьте, используете ли вы также средство записи паркета, оптимизированное для клея, и что у вас есть необходимые разрешения для обновления схемы. - person Luis Miguel Mejía Suárez; 06.06.2021