为什么在调用转换和接收器操作时需要设置 `transformation_ctx` 参数以使 AWS Glue 书签工作?

vic*_*orx 5 amazon-web-services aws-glue

AWS Glue 书签文档 ( https://docs.aws.amazon.com/glue/latest/dg/monitor-continuations.html ) 似乎表明必须将transformation_ctx参数传递给书签的源、转换和接收操作工作。这反映在在该网页的示例代码,所有的的,其中调用create_dynamic_frame.from_catalog()ApplyMapping.apply()write_dynamic_frame.from_options()与被传递transformation_ctx的值。

我可以理解传递这样一个transformation_ctxtocreate_dynamic_frame.from_catalog()方法的意义,因为 AWS Glue 需要存储有关已在给定transformation_ctx键下的书签中读取的文件的信息。

但是,我不明白为什么这对于ApplyMapping.apply()和 等方法也是必要的write_dynamic_frame.from_options()。换句话说,这些操作需要存储在书签中的状态信息是什么?如果我不传递transformation_ctx给这些方法,这会导致什么问题?

Hyr*_*a92 7

几个月前(2019 年 10 月),我对书签也有同样的疑问,由于亚马逊提供的文档不是很清楚,我打开了一个支持案例以了解更多它是如何实现的。

在我的胶水工作中有:

  • 来自 S3 的读取函数 (glue_context.create_dynamic_frame.from_options)
  • A ResolveChoice.apply
  • Redshift 的写函数(glue_context.write_dynamic_frame.from_jdbc_conf)

所有这些操作都有transformation_ctx 值,我测试了不同的可能行为(所有的transformation_ctx 相同,不同的固定值,动态值ecc)。

在收到 AWS 支持的许多消息后,他们确认书签仅适用于 read 函数(他们还说只有 S3 作为源,但我没有测试它),所以我问在 ResolveChoice(和也写函数),他们说是的!他们确认这没有任何区别。

此外,对于 write 函数,它不会更改任何内容,因此没有书签逻辑,如果之前已经运行过,则没有“避免函数”。