微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS Glue Python 作业未创建新的数据目录分区

如何解决AWS Glue Python 作业未创建新的数据目录分区

我使用 glue Studio 创建了一个 AWS glue 作业。 它从 glue 数据目录中获取数据,进行一些转换,然后写入不同的数据目录。

在配置目标节点时,我启用了运行后创建新分区的选项:

enter image description here

作业运行成功,数据以正确的分区文件夹结构写入 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

解决方法

正如 documentation 中强调的那样,向数据目录添加新分区存在限制,更具体地说,请确保您的用例不与以下任何内容相矛盾:

仅支持 Amazon Simple Storage Service (Amazon S3) 目标。

仅支持以下格式:json、csv、avro 和 镶木地板。

要使用 Parquet 分类创建或更新表,您必须为 DynamicFrames 使用 AWS Glue 优化的 parquet writer。

updateBehavior 设置为 LOG 时,会添加新的分区 仅当 DynamicFrame 架构等效于或包含子集时 数据目录表的架构中定义的列。

您的 partitionKeys 必须相等,并且顺序相同,在 您在 ETL 脚本中传递的参数和在您的 数据目录表架构。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。