本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
OpenSearch Service 连接
在 AWS Glue 4.0 及更高版本中,您可以使用 AWS Glue for Spark 来读取和写入 OpenSearch Service 中的表。您可以使用 OpenSearch 查询来定义要从 OpenSearch Service 中读取的内容。您可以使用存储在 AWS Secrets Manager 中的 HTTP 基本身份验证凭证,并通过 AWS Glue 连接来连接到 OpenSearch Service。此功能与 OpenSearch Service 无服务器不兼容。
有关 Amazon OpenSearch Service 的更多信息,请参阅 Amazon OpenSearch Service 文档。
配置 OpenSearch Service 连接
要从 AWS Glue 连接到 OpenSearch Service,您需要创建 OpenSearch Service 凭证并将其存储在 AWS Secrets Manager 密钥中,然后将该密钥关联到某个 OpenSearch Service AWS Glue 连接。
先决条件:
-
确定您要从中读取的域端点
aosEndpoint
和端口aosPort
,或者按照 Amazon OpenSearch Service 文档中的说明创建资源。有关更多信息,请参阅《Amazon OpenSearch Service 开发人员指南》中的 Creating and managing Amazon OpenSearch Service domains。Amazon OpenSearch Service 域端点的默认格式为 https://search-
domainName
-unstructuredIdContent
.region
.es.amazonaws.com。有关如何确定域端点的更多信息,请参阅《Amazon OpenSearch Service 开发人员指南》中的 Creating and managing Amazon OpenSearch Service domains。确定或生成域的 HTTP 基本身份验证凭证(
aosUser
和aosPassword
)。
配置 OpenSearch Service 连接:
在 AWS Secrets Manager 中,使用您的 OpenSearch Service 凭证创建一个密钥。要在 Secrets Manager 中创建密钥,请按照 AWS Secrets Manager 文档中创建 AWS Secrets Manager 密钥中的教程进行操作。创建密钥后,保留密钥名称
secretName
,以供下一步使用。-
在选择键/值对时,请使用键
opensearch.net.http.auth.user
和值aosUser
创建一个键值对。 -
在选择键/值对时,请使用键
opensearch.net.http.auth.pass
和值aosPassword
创建一个键值对。
-
在 AWS Glue 控制台中,按照 添加 AWS Glue 连接 中的步骤创建一个连接。创建连接后,保留连接名为
connectionName
,以供未来在 AWS Glue 中使用。选择连接类型时,请选择 OpenSearch Service。
选择域端点时,请提供
aosEndpoint
。选择端口时,请提供
aosPort
。选择 AWS 密钥时,请提供
secretName
。
创建 AWS Glue OpenSearch Service 连接后,您需要完成以下操作,然后才能运行 AWS Glue 作业:
向与您的 AWS Glue 作业关联的 IAM 角色授予读取
secretName
的权限。在 AWS Glue 作业配置中,提供
connectionName
作为附加网络连接。
读取 OpenSearch Service 索引
先决条件:
-
您要读取的 OpenSearch Service 索引
aosIndex
。 -
为了提供身份验证和网络位置信息而配置的 AWS Glue OpenSearch Service 连接。要获得此信息,请完成前面“配置 OpenSearch Service 连接”中的步骤。您需要 AWS Glue 连接的名称
connectionName
。
此示例将从 Amazon OpenSearch Service 读取索引。您需要提供 pushdown
参数。
例如:
opensearch_read = glueContext.create_dynamic_frame.from_options( connection_type="opensearch", connection_options={ "connectionName": "
connectionName
", "opensearch.resource": "aosIndex
", "pushdown": "true", } )
您还可以提供查询字符串来筛选返回到 DynamicFrame 的结果。您将需要配置 opensearch.query
。
opensearch.query
可以为 URL 查询参数字符串 queryString
,也可以为查询 DSL JSON 对象 queryObject
。有关查询 DSL 的更多信息,请参阅 OpenSearch 文档中的 Query DSL?q=
,这与完全限定 URL 中一样。要提供查询 DSL 对象,请首先对 JSON 对象进行字符串转义,然后再提供该对象。
例如:
queryObject = "{ "query": { "multi_match": { "query": "Sample", "fields": [ "sample" ] } } }" queryString = "?q=
queryString
" opensearch_read_query = glueContext.create_dynamic_frame.from_options( connection_type="opensearch", connection_options={ "connectionName": "connectionName
", "opensearch.resource": "aosIndex
", "opensearch.query": queryString, "pushdown": "true", } )
有关如何构建不符合特定语法的查询的更多信息,请参阅 OpenSearch 文档中的 Query string syntax
从包含数组类型数据的 OpenSearch 集合中读取时,必须使用 opensearch.read.field.as.array.include
参数在方法调用中指定哪些字段是数组类型。
例如,在阅读以下文档时,您会遇到 genre
和 actor
数组字段:
{ "_index": "movies", "_id": "2", "_version": 1, "_seq_no": 0, "_primary_term": 1, "found": true, "_source": { "director": "Frankenheimer, John", "genre": [ "Drama", "Mystery", "Thriller", "Crime" ], "year": 1962, "actor": [ "Lansbury, Angela", "Sinatra, Frank", "Leigh, Janet", "Harvey, Laurence", "Silva, Henry", "Frees, Paul", "Gregory, James", "Bissell, Whit", "McGiver, John", "Parrish, Leslie", "Edwards, James", "Flowers, Bess", "Dhiegh, Khigh", "Payne, Julie", "Kleeb, Helen", "Gray, Joe", "Nalder, Reggie", "Stevens, Bert", "Masters, Michael", "Lowell, Tom" ], "title": "The Manchurian Candidate" } }
在这种情况下,您将在方法调用中包含这些字段名称。例如:
"opensearch.read.field.as.array.include": "genre,actor"
如果您的数组字段嵌套在文档结构内部,请使用点表示法引用它:"genre,actor,foo.bar.baz"
。这将通过包含嵌入式文档 bar
的嵌入式文档 foo
指定源文档中包含的数组 baz
。
写入 OpenSearch Service 表
此示例会将来自现有 DynamicFrame dynamicFrame
的信息写入 OpenSearch Service。如果索引中已经含有信息,AWS Glue 会将来自 DynamicFrame 的数据附加到现有信息之后。您需要提供 pushdown
参数。
先决条件:
-
您要写入的 OpenSearch Service 表。您将需要该表的标识信息。我们称之为
tableName
。 -
为了提供身份验证和网络位置信息而配置的 AWS Glue OpenSearch Service 连接。要获得此信息,请完成前面“配置 OpenSearch Service 连接”中的步骤。您需要 AWS Glue 连接的名称
connectionName
。
例如:
glueContext.write_dynamic_frame.from_options( frame=
dynamicFrame
, connection_type="opensearch", connection_options={ "connectionName": "connectionName
", "opensearch.resource": "aosIndex
", }, )
OpenSearch Service 连接选项参考
-
connectionName
– 必需。用于读/写。为了向您的连接方法提供身份验证和网络位置信息而配置的 AWS Glue OpenSearch Service 连接的名称。 -
opensearch.resource
– 必需。用于读/写。有效值:OpenSearch 索引名。您的连接方法将与之交互的索引的名称。 -
opensearch.query
– 用于读取。有效值:字符串转义后的 JSON,如果此字符串以?
开头,则为 URL 的搜索部分。用于在读取时筛选检索范围的 OpenSearch 查询。有关此参数用法的更多信息,请参阅上一节“读取 OpenSearch Service 索引”。 -
pushdown
– 对于下列情况为必填项。用于读取。有效值:布尔值。指示 Spark 将读取查询传递给 OpenSearch,以便数据库仅返回相关文档。 -
opensearch.read.field.as.array.include
– 如果读取数组类型数据,则为必填项。用于读取。有效值:以逗号分隔的字段名称列表。指定要从 OpenSearch 文档中作为数组读取的字段。有关此参数用法的更多信息,请参阅上一节“读取 OpenSearch Service 索引”。