使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

错误报告 - Glue作业:有时Relationlize函数无法识别临时路径

0

【以下的问题经过翻译处理】 我已经使用了通过getResolvedOptions函数检索的临时路径,作为relationlize函数的“staging_path”。 发现作业有时会失败 - 这意味着不规则 - 因为作业在执行关系化函数后无法检索分段的表。

为了更好地理解,请在下面添加一些说明和代码。 如果有任何建议,请告知我,并请确认我们可以继续使用由getResolvedOptions函数获取的参数。

[代码1]

getResolvedOptions(sys.argv, [..., "TempDir", ...])
...
# the name of the target field to be relationalized is "params"

flatten_dyc = dyc["post_log"].relationalize(
        root_table_name = 'root',
        staging_path = args["TempDir"],
        transformation_ctx = 'flatten_dyc'
)

flatten_dyc["root"].printSchema()
flatten_dyc["root_params"].printSchema()

今天早上,我运行它并得到了以下结果。

image

flatten_dyc["root_params"]为空,尽管它至少应该有id字段,以与flatten_dyc["root"]表连接。

[代码2]

因此,我使用硬编码的staging_path(请参阅下文)尝试了相同的脚本,并发现作业可以成功读取分段表 -flatten_dyc["root"]-的所有字段。

...

flatten_dyc = dyc["post_log"].relationalize(
        root_table_name = 'root',
        staging_path = "s3://temp-glue-info/"
        transformation_ctx = 'flatten_dyc'
)

flatten_dyc["root"].printSchema()
flatten_dyc["root_params"].printSchema()

Correctoutput

我的问题是:

1/ 当路径被软编码时,为什么函数无法正确读取暂存表?

2/此外,当我再次运行[Code1]时,flatten_dyc[“root_params”]已成功读取。 表示该功能不可靠。 为什么吗?

profile picture
专家
已提问 1 年前86 查看次数
1 回答
0

【以下的回答经过翻译处理】 当你运行relationalize时,作业将在stage文件夹下创建一个uuid文件夹,并将子表保存在其中。

要么是无法写入这些文件,要么是有东西在删除它们。

建议使用一个特定的staging文件夹(比桶或基础作业临时目录更好),并且在作业运行时检查该文件夹(可以在步骤之间加一个休眠,以便看到进展情况)。

此外,考虑指定一个知道没有其他作业使用的存储桶/路径,这样就不会有人从中删除。

最终,您可能需要启用S3审计来监视文件是否被添加或删除。

profile picture
专家
已回答 1 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则