Я пытаюсь использовать задание ETL для прямой записи моего фрейма данных в каталог базы данных и обновления моих разделов.
У меня был такой код:
datasink4 = glueContext.write_dynamic_frame.from_options(
frame = dropnullfields3,
connection_type = "s3",
connection_options = {
"path": TARGET_PATH,
"partitionKeys":["x", "y"]
},
format = "parquet",
transformation_ctx = "datasink4")
additionalOptions = {"enableUpdateCatalog": True}
additionalOptions["partitionKeys"] = ["x", "y"]
sink = glueContext.write_dynamic_frame_from_catalog(frame=dropnullfields3,
database=DATABASE,
table_name=TABLE,
transformation_ctx="write_sink",
additional_options=additionalOptions)
, который работал записать данные в каталог. Однако я бы хотел избежать двойной записи. Поэтому я последовал методу 2 из документации для обновления разделов: https://docs.aws.amazon.com/glue/latest/dg/update-from-job.html
И пришел с этим кодом:
datasink4 = glueContext.write_dynamic_frame.from_options(
frame = dropnullfields3,
connection_type = "s3",
connection_options = {
"path": TARGET_PATH,
"partitionKeys":["x", "y"]
},
format = "parquet",
transformation_ctx = "datasink4")
sink = glueContext.getSink(connection_type="s3", path=TARGET_PATH,
enableUpdateCatalog=True,
partitionKeys=["x", "y"])
sink.setFormat("glueparquet")
sink.setCatalogInfo(catalogDatabase=DATABASE, catalogTableName=TABLE)
sink.writeFrame(dropnullfields3)
Но теперь данные не могут быть загруженным в Athena, я получаю странные ошибки о структуре данных, например:
HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: < expected at the end of 'struct' (Service: null; Status Code: 0; Error Code: null; Request ID: null)
Я попытался воссоздать таблицу, чтобы в ней были только новые файлы.
У меня также есть попытался запустить краулер на новых файлах клеевого паркета, таблица, сгенерированная искателем, может быть запрошена. Однако, когда я заполняю ту же таблицу из задания ETL выше, я всегда получаю эту ошибку ...