AWS glue 每次都将完整数据从源复制到目标,即使有书签也是如此

AWS glue copies full data from source to target every time even when there is a bookmark

我有一个从 aws glue 控制台中的向导生成的胶水作业。我没有更改生成任务时的默认脚本。它从 posgres 数据库 table(源)获取数据并写入另一个 postgres 数据库(目标)。我在 ide 中选择了启用书签。每当任务 运行 时,它都会将完整的源数据库 table 复制到目标 table,即使源中没有插入、更新或删除。我知道启用书签后,它应该只复制上次 运行 中源代码中的更改,但这并没有发生。因此,如果源 table 中有 4 行,每次任务 运行 都会将所有 4 行添加到目标并且目标的行数增加 1。如何让它只处理上次 运行 对源数据的更改? 此外,它如何添加书签?如果在 2 运行 秒之间修改了一行(更新 sql 语句),它如何才能 "update" 正确的行?

书签仅在两个 S3 端点之间复制数据时有效。 JDBC/ODBC 不支持。

我最近发布了一篇关于使用 AWS Glue 触发器为数据目录和 ETL 作业构建和自动化无服务器数据湖的博客。您可以在 Cloud-formation 模板和 p

中找到所有代码

https://aws.amazon.com/blogs/big-data/build-and-automate-a-serverless-data-lake-using-an-aws-glue-trigger-for-the-data-catalog-and-etl-jobs/

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.

这意味着您可以在源 table 中有一个列 updated_at,它将用作书签键。它将单调递增。

还有一点在文档中没有明确提及,但在所有 aws 给出的示例中都有实践,目前在使用胶水作业书签时也是如此。

如果您想使用书签,请始终对数据源使用 from_catalog 方法。这意味着模式应该已经存在于使用爬虫或手动粘合中。

对于 JDBC 数据库,您必须首先创建一个 connection,然后使用粘附爬虫创建一个 table(手动创建 JDBC tables 还不可能)

如果您使用 from_options 方法进行摄取,很遗憾,胶水书签将不起作用。我通过 S3 数据源艰难地学会了这一点。