OpenSearch Service 连接 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

OpenSearch Service 连接

在 Amazon Glue 4.0 及更高版本中,您可以使用 Amazon Glue for Spark 来读取和写入 OpenSearch Service 中的表。您可以使用 OpenSearch 查询来定义要从 OpenSearch Service 中读取的内容。您可以使用存储在 Amazon Secrets Manager 中的 HTTP 基本身份验证凭证,并通过 Amazon Glue 连接来连接到 OpenSearch Service。此功能与 OpenSearch Service 无服务器不兼容。

有关 Amazon OpenSearch Service 的更多信息,请参阅 Amazon OpenSearch Service 文档

配置 OpenSearch Service 连接

要从 Amazon Glue 连接到 OpenSearch Service,您需要创建 OpenSearch Service 凭证并将其存储在 Amazon Secrets Manager 密钥中,然后将该密钥关联到某个 OpenSearch Service Amazon 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 基本身份验证凭证(aosUseraosPassword)。

配置 OpenSearch Service 连接:
  1. 在 Amazon Secrets Manager 中,使用您的 OpenSearch Service 凭证创建一个密钥。要在 Secrets Manager 中创建密钥,请按照 Amazon Secrets Manager 文档中创建 Amazon Secrets Manager 密钥中的教程进行操作。创建密钥后,保留密钥名称 secretName,以供下一步使用。

    • 在选择键/值对时,请使用键 opensearch.net.http.auth.user 和值 aosUser 创建一个键值对。

    • 在选择键/值对时,请使用键 opensearch.net.http.auth.pass 和值 aosPassword 创建一个键值对。

  2. 在 Amazon Glue 控制台中,按照 添加 Amazon Glue 连接 中的步骤创建一个连接。创建连接后,保留连接名为 connectionName,以供未来在 Amazon Glue 中使用。

    • 选择连接类型时,请选择 OpenSearch Service。

    • 选择域端点时,请提供 aosEndpoint

    • 选择端口时,请提供 aosPort

    • 选择 Amazon 密钥时,请提供 secretName

创建 Amazon Glue OpenSearch Service 连接后,您需要完成以下操作,然后才能运行 Amazon Glue 作业:

  • 向与您的 Amazon Glue 作业关联的 IAM 角色授予读取 secretName 的权限。

  • 在 Amazon Glue 作业配置中,提供 connectionName 作为附加网络连接

读取 OpenSearch Service 索引

先决条件:

  • 您要读取的 OpenSearch Service 索引 aosIndex

  • 为了提供身份验证和网络位置信息而配置的 Amazon Glue OpenSearch Service 连接。要获得此信息,请完成前面“配置 OpenSearch Service 连接”中的步骤。您需要 Amazon 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。要提供 URL 查询参数字符串,请在查询前面加上 ?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 参数在方法调用中指定哪些字段是数组类型。

例如,在阅读以下文档时,您会遇到 genreactor 数组字段:

{ "_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。如果索引中已经含有信息,Amazon Glue 会将来自 DynamicFrame 的数据附加到现有信息之后。您需要提供 pushdown 参数。

先决条件:

  • 您要写入的 OpenSearch Service 表。您将需要该表的标识信息。我们称之为 tableName

  • 为了提供身份验证和网络位置信息而配置的 Amazon Glue OpenSearch Service 连接。要获得此信息,请完成前面“配置 OpenSearch Service 连接”中的步骤。您需要 Amazon Glue 连接的名称 connectionName

例如:

glueContext.write_dynamic_frame.from_options( frame=dynamicFrame, connection_type="opensearch", connection_options={ "connectionName": "connectionName", "opensearch.resource": "aosIndex", }, )

OpenSearch Service 连接选项参考

  • connectionName – 必需。用于读/写。为了向您的连接方法提供身份验证和网络位置信息而配置的 Amazon 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 索引”。