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_ctx
传递给create_dynamic_frame.from_catalog()
方法的意义,因为AWS Glue需要将有关已在给定transformation_ctx
键下的书签中读取的文件的信息存储在该注册表项下。
但是,我不明白为什么这对于ApplyMapping.apply()
和write_dynamic_frame.from_options()
等方法也是必需的。换句话说,这些操作需要在书签中存储哪些状态信息?如果我不transformation_ctx
传递给这些方法,这会导致什么问题?
几个月前(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支持人员发送了许多消息后,他们确认书签仅适用于读取功能(他们还说只有S3作为来源,但我没有对其进行测试(,所以我问transformation_ctx在ResolveChoice中是否无用(以及写入功能(,他们说是的!他们证实这没有任何区别。
此外,对于写入函数,它不会更改任何内容,因此没有书签逻辑,如果之前已经运行过,则没有"避免函数"。