新闻中心

  • Home
  • 在 AWS Glue JDBC 作业中使用多个书签键 大数据博客

在 AWS Glue JDBC 作业中使用多个书签键 大数据博客

在 AWS Glue JDBC 作业中使用多个书签键

主要资讯

这篇文章将介绍如何在 AWS Glue 作业中使用多个书签键来增量处理数据,特别是在 JDBC 连接到来源资料存储时的应用场景。透过设置书签键,AWS Glue 作业能够从上次处理的地方继续,提升效率并降低成本。

加速器免费安装

AWS Glue 是一个无伺服器的数据整合服务,可以用来编目数据并准备进行分析。透过 AWS Glue,您能够发现数据、开发转换脚本以及在无伺服器环境中排程和运行提取、转换及加载ETL作业。AWS Glue 作业负责运行数据处理逻辑。

AWS Glue 作业的一个重要特性是能够使用书签键来进行增量数据处理。当 AWS Glue 作业执行时,它会从数据源读取数据并进行处理。可以指定一个或多个来源表的列作为书签键。这些列应具有连续增长或减少的值,且不应包含缺口。这些值用于标记批次中的最后处理记录。作业的下一次运行将会从这个点继续,这样就能够增量处理大量数据。如果没有书签键,AWS Glue 作业每次运行时都需要重新处理所有数据,这会浪费时间和成本。使用书签键则能够节省时间并降低成本。

这篇文章将详细讲解如何在 AWS Glue 作业中使用多个栏位作为书签键,并演示如何在 AWS Glue 作业连接选项中将书签键列和表名称进行参数化。

这篇文章主要针对设计与构建 AWS 上 ETL 管道的架构师与数据工程师。读者应对AWS 管理控制台、AWS Glue、Amazon RDS 以及Amazon CloudWatch 日志有基本的了解。

解决方案概述

要实现这个解决方案,我们需要完成以下步骤:

创建一个Amazon RDS for PostgreSQL 实例。创建两个表并插入示例数据。创建并运行 AWS Glue 作业,使用多个书签键从 RDS for PostgreSQL 数据库实例中提取数据。创建并运行参数化的 AWS Glue 作业,从不同的表中提取数据,并使用不同的书签键。

以下图表展示了这个解决方案的组件:

部署解决方案

为了实现这个解决方案,我们提供了一个AWS CloudFormation 模板,该模板设置了架构中包含的服务,以便进行可重复的部署。这个模板会创建以下资源:

一个 RDS for PostgreSQL 实例一个Amazon S3 存储桶,用来存储从 RDS for PostgreSQL 实例提取的数据一个 AWS Glue 的IAM 角色两个启用书签的 AWS Glue 作业,用以增量提取 RDS for PostgreSQL 实例中的数据

完成以下步骤以部署解决方案:

点击 此处 以启动 CloudFormation 堆叠。输入堆叠名称。勾选 我确认 AWS CloudFormation 可能会使用自定义名称创建 IAM 资源。点击 创建堆叠。等待堆叠创建完成,则可在 AWS CloudFormation 控制台上查看进度。

当堆叠创建完成后,将 AWS Glue 脚本复制到名称为 jobbookmarkkeysdemoltaccountidgt 的 S3 存储桶中。打开AWS CloudShell。

执行以下命令,并将 ltaccountidgt 替换为您的 AWS 帐户 ID:

bashaws s3 cp s3//awsblogsartifactspublic/artifacts/BDB2907/glue/scenario1jobpy s3//jobbookmarkkeysdemoltaccountidgt/scenario1jobpyaws s3 cp s3//awsblogsartifactspublic/artifacts/BDB2907/glue/scenario2jobpy s3//jobbookmarkkeysdemoltaccountidgt/scenario2jobpy

添加示例数据并运行 AWS Glue 作业

在这部分,我们将通过AWS Lambda 连接到 RDS for PostgreSQL 实例并创建两个表。我们还将向这两个表中插入示例数据。

在 Lambda 控制台中,选择导航面板中的 函数。选择函数 LambdaRDSDDLExecute。

点击 测试,然后选择 调用 以执行 Lambda 函数插入数据。

两个名为 product 和 address 的表将创建,并显示如下示例数据。

运行 multiplejobbookmarkkeys AWS Glue 作业

我们将运行 multiplejobbookmarkkeys AWS Glue 作业两次,从 RDS for PostgreSQL 实例的 product 表中提取数据。在第一次运行中,将提取所有现有的记录。然后我们插入新记录并再次运行作业。作业在第二次运行时只需提取新插入的记录。

在 AWS Glue 控制台中,选择导航面板中的 作业。选择作业 multiplejobbookmarkkeys。点击 运行,然后选择 运行 标签以监控作业进度。在作业完成后,选择 CloudWatch 日志 下的 输出日志 超链接。

在下一个视窗中选择日志流以查看输出日志。

该 AWS Glue 作业从来源表 product 中提取了所有记录,并跟踪了 productid 和 version 栏位的最后组合值。接下来,我们运行另一个 Lambda 函数以插入新记录。productid 为 45 的记录已存在,但插入的记录将有一个新的版本号 2,这样结合值将呈现连续增长。

运行 LambdaRDSDDLExecuteincremental Lambda 函数以在 product 表中插入新记录。

在插入记录后,再次运行 AWS Glue 作业 multiplejobbookmarkkeys,并且等待其成功完成。选择 CloudWatch 日志 中的输出日志超链接。在下一个视窗中选择日志流,以查看仅新插入的记录。

该作业仅提取那些组合值大于先前提取记录的记录。

运行 parameterisedjobbookmarkkeys AWS Glue 作业

现在,我们运行参数化的 AWS Glue 作业,它接受表名称和书签键列作为参数。我们运行此作业以从不同的表中提取数据,并保持各自的书签。

第一次运行将针对 address 表,书签键设置为 addressid,这些已在作业参数中填充。

在 AWS Glue 控制台中,选择导航面板中的 作业。选择作业 parameterisedjobbookmarkkeys。点击 运行 并选择 运行 标签以监控作业进度。在作业完成后,选择 CloudWatch 日志 下的 输出日志 超链接。

在下一个视窗中选择日志流,以查看从 address 表中提取的所有记录。

在 操作菜单 中,选择 带参数运行。展开 作业参数 部分。修改作业参数值为:键 bookmarkkey 的值为 productid键 tablename 的值为 productS3 存储桶名称不变jobbookmarkkeysdemoltaccountnumbergt。

点击 运行作业 以运行作业,并选择 运行 标签以监控作业进度。在作业完成后,选择 CloudWatch 日志 下的 输出日志 超链接。选择日志流以查看从 product 表中提取的所有记录。

该作业在从来源数据存储提取数据时,为每个表维护各自的书签。这是通过将表名称添加到作业名称和 AWS Glue 作业脚本中的转换上下文来实现的。

清理

为了避免未来产生费用,完成以下步骤:

在 Amazon S3 控制台中,选择导航面板中的 存储桶。选择名称中包含 jobbookmarkkeys 的存储桶。点击 清空 以删除其中的所有文件夹和文件。在 CloudFormation 控制台中,选择导航面板中的 堆叠。选择您创建的堆叠以删除解决方案。

总结

这篇文章展示了如何将多于一列的表作为 jobBookmarkKeys 在 JDBC 连接到 AWS Glue 作业中使用。它还说明了如何使用参数化 AWS Glue 作业来从多个表中提取数据,同时保持它们各自的书签。下一步,您可以通过更改来源表中的数据来测试增量数据提取的效果。

作者简介

Durga Prasad 是高级首席顾问,协助客户在 AWS 上构建他们的数据分析解决方案。他热爱咖啡,并且喜欢打羽毛球。

Murali Reddy 是 Amazon Web Services (AWS) 的首席顾问,帮助客户构建和实施数据分析解决方案。他喜欢骑车,热爱探索新地方。

标签 AWS Glue

在 AWS Glue JDBC 作业中使用多个书签键 大数据博客

发表评论