我在aws胶水控制台中从向导生成了胶水作业。我没有在生成任务时更改默认脚本。它从posgres数据库表(源)获取数据并写入另一个postgres数据库(目标)。我在ide中选择了启用书签。每当任务运行时,即使源中没有插入,更新或删除,它也会将完整的源数据库表复制到目标表。我理解启用了书签,它应该只复制上次运行的源中的更改,但这不会发生。因此,如果源表中有4行,则每次运行任务时,它会将所有4行添加到目标,并且目标的行数增加1.如何使其仅处理来自上一次的源数据的chages跑? 此外,它如何书签?如果在两次运行之间修改了一行(更新sql语句),它将如何“更新”正确的行?
答案 0 :(得分:2)
书签仅在两个S3端点之间复制数据时有效。不支持JDBC / ODBC。
答案 1 :(得分:0)
JDBC 连接是 supported 用于在 AWS Glue 作业中添加书签。如文档中所述,使用 jdbc 源时需要满足一些前提条件。
For JDBC sources, the following rules apply:
- For each table, AWS Glue uses one or more columns as bookmark keys to determine new and processed data. The bookmark keys combine to form a single compound key.
- You can specify the columns to use as bookmark keys. If you don't specify bookmark keys, AWS Glue by default uses the primary key as the bookmark key, provided that it is sequentially increasing or decreasing (with no gaps).
- If user-defined bookmarks keys are used, they must be strictly
monotonically increasing or decreasing. Gaps are permitted.
这意味着您可以在源表中有一列 updated_at
用作书签键。它将单调递增。
还有一点很重要,文档中没有明确提到,但在所有给定的 aws 示例中都得到了实践,目前在使用胶水作业书签时也是如此。
如果您希望使用书签,请始终对数据源使用 from_catalog 方法。这意味着架构应该已经使用爬虫或手动存在于胶水中。
对于 JDBC 数据库,您必须先创建一个 connection,然后使用胶水爬虫创建一个表(目前还不能手动创建 JDBC 表)
如果您使用 from_options 方法进行摄取,遗憾的是粘贴书签将不起作用。我通过 S3 数据源艰难地了解到这一点。
答案 2 :(得分:-1)
我最近发布了一个博客,该博客使用用于数据目录和ETL作业的AWS Glue触发器来构建和自动化无服务器数据湖。您可以在Cloud-formation模板和p
中找到所有代码