错误报告 - 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
EXPERTE
gefragt vor 5 Monaten49 Aufrufe
1 Antwort
0

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

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

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

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

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

profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen