5

我使用 Glue Studio 创建了一个 AWS Glue 作业。它从 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

4

1 回答 1

2

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

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

仅支持以下格式:json、csv、avro 和 parquet。

要使用 parquet 分类创建或更新表,您必须使用适用于 DynamicFrames 的 AWS Glue 优化 parquet 编写器。

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

在 ETL 脚本中传递的参数与 Data Catalog 表架构中的 partitionKeys 之间,partitionKeys 必须相同且顺序相同。

于 2021-06-05T21:14:25.747 回答