从 JDBC 表并行读取 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从 JDBC 表并行读取

您可以设置 JDBC 表的属性,以使 Amazon Glue 并行读取数据。当您设置某些属性时,您可以指示 Amazon Glue 对数据的逻辑分区运行并行 SQL 查询。您可以通过设置哈希字段或哈希表达式来控制分区。您还可以控制用于访问您的数据的并行读取的数量。

并行读取 JDBC 表是一种可以提高性能的优化技术。要详细了解确定何时适合使用这种技术的过程,请参阅《Amazon 规范性指南》中“优化 Amazon Glue for Apache Spark 作业性能的最佳实践”指南中的 减少数据扫描量

要启用并行读取,可在表结构的参数字段中设置键值对。使用 JSON 表示法为表的参数字段设置值。有关编辑表属性的更多信息,请参阅 查看和编辑表详细信息。当您调用 ETL(提取、转换和加载)方法 create_dynamic_frame_from_optionscreate_dynamic_frame_from_catalog 时,您也可以启用并行读取。有关在这些方法中指定选项的更多信息,请参阅 from_optionsfrom_catalog

您可以将此方法用于 JDBC 表,也即,其基本数据是 JDBC 数据存储的大多数表。当读取 Amazon Redshift 和 Amazon S3 表时,这些属性将被忽略。

hashfield

hashfield 设置为 JDBC 表中要用来将数据划分成分区的列的名称。为了获得最佳效果,此列应具有值的偶数分布以便在各分区之间分布数据。此列可以是任意数据类型。Amazon Glue 生成非重叠的查询,这些查询并行运行以读取通过此列进行分区的数据。例如,如果您的数据按月份均匀地分布,您可以使用 month 列并行读取每月的数据。

'hashfield': 'month'

Amazon Glue 创建一个查询以便将字段值哈希处理成分区编号,并针对这些分区并行运行该查询。要使用您自己的查询对表读取进行分区,请提供 hashexpression 而不是 hashfield

hashexpression

hashexpression 设置为会返回一个整数的 SQL 表达式(符合 JDBC 数据库引擎语法)。简单表达式是表中任何数字列的名称。Amazon Glue 生成 SQL 查询以并行读取 JDBC 数据(通过使用 WHERE 子句中的 hashexpression 对数据分区)。

例如,使用数字列 customerID 来读取按客户编号分区的数据。

'hashexpression': 'customerID'

要让 Amazon Glue 控制分区,请提供 hashfield 而不是 hashexpression

hashpartitions

hashpartitions 设置为 JDBC 表的并行读取数目。如果未设置该属性,默认值为 7。

例如,将并行读取数目设置为 5,以便 Amazon Glue 通过五个(或更少)查询读取您的数据。

'hashpartitions': '5'