Vertica 连接
在 AWS Glue 4.0 及更高版本中,您可以使用 AWS Glue for Spark 来读取和写入 Vertica 中的表。您可以使用 SQL 查询来定义要从 Vertica 中读取的信息。您可以通过 AWS Glue 连接并使用存储在 AWS Secrets Manager 中的用户名和密码凭证连接到 Vertica。
有关 Vertica 的更多信息,请参阅 Vertica 文档
配置 Vertica 连接
要从 AWS Glue 连接到 Vertica,您需要创建 Vertica 凭证并将其存储在某个 AWS Secrets Manager 密钥中,然后将该密钥关联到某个 Vertica AWS Glue 连接。如果您的 Vertica 实例位于某个 Amazon VPC 中,则还需要提供 AWS Glue Vertica 连接的联网选项。您需要提供读取和写入数据库时用于临时存储的 Amazon S3 存储桶或文件夹。
要从 AWS Glue 连接到 Vertica,您将需要满足一些先决条件:
-
读取和写入数据库时用于临时存储的 Amazon S3 存储桶或文件夹,也称为
tempS3Path
。注意
在 AWS Glue 任务数据预览中使用 Vertica 时,临时文件可能不会自动从
tempS3Path
中删除。为确保删除临时文件,请在数据预览窗格中选择结束会话,以直接结束数据预览会话。如果无法保证数据预览会话直接结束,请考虑将 Amazon S3 生命周期配置设置为删除旧数据。我们建议根据最大作业运行时间加一定的裕度移除已存在超过 49 小时的数据。有关配置 Amazon S3 生命周期的更多信息,请参阅 Amazon S3 文档中的 管理存储生命周期。
-
对您的 Amazon S3 路径具有适当权限,并且您可以将其关联到您的 AWS Glue 作业角色的 IAM policy。
-
如果您的 Vertica 实例位于某个 Amazon VPC 中,请确保您的 Amazon VPC 配置允许您的 AWS Glue 作业与 Vertica 实例进行通信,并且无需通过公共互联网路由流量。
在 Amazon VPC 中,确定或创建将在执行 AWS Glue 作业时使用的 VPC、子网和安全组。此外,您的 Amazon VPC 配置需要允许您的 Vertica 实例与该位置之间的网络流量。您的作业需要与您的 Vertica 客户端端口(默认为 5433)建立 TCP 连接。根据您的网络布局,这可能需要更改安全组规则、网络 ACL、NAT 网关和对等连接。
然后您可以继续配置 AWS Glue 以便与 Vertica 配合使用。
配置 Vertica 连接:
-
在 AWS Secrets Manager 中,使用您的 Vertica 凭证
verticaUsername
和verticaPassword
创建一个密钥。要在 Secrets Manager 中创建密钥,请按照 AWS Secrets Manager 文档中创建 AWS Secrets Manager 密钥中的教程进行操作。创建密钥后,保留密钥名称secretName
,以供下一步使用。-
在选择键/值对时,请使用键
user
和值verticaUsername
创建一个键值对。 -
在选择键/值对时,请使用键
password
和值verticaPassword
创建一个键值对。
-
在 AWS Glue 控制台中,按照 添加 AWS Glue 连接 中的步骤创建一个连接。创建连接后,保留连接名称
connectionName
,以供下一步使用。选择连接类型时,请选择 Vertica。
选择 Vertica 主机时,请提供您安装了 Vertica 的主机名。
选择 Vertica 端口时,请提供可用于访问 Vertica 安装的端口。
选择 AWS 密钥时,请提供
secretName
。
-
对于下列情况,您可能需要添加额外的配置:
-
对于通过 Amazon VPC 在 AWS 云端托管的 Vertica 实例
-
向 AWS Glue 连接提供用于定义 Vertica 安全凭证的 Amazon VPC 连接信息。创建或更新连接时,请在网络选项中设置 VPC、子网和安全组。
-
-
创建 AWS Glue Vertica 连接后,您需要执行以下操作,然后才能调用您的连接方法:
向与您的 AWS Glue 作业关联的 IAM 角色授予对
tempS3Path
的权限。向与您的 AWS Glue 作业关联的 IAM 角色授予读取
secretName
的权限。在 AWS Glue 作业配置中,提供
connectionName
作为附加网络连接。
从 Vertica 读取
先决条件:
-
您要读取的 Vertica 表。您需要 Vertica 数据库名
dbName
和表名tableName
。 -
为了提供身份验证信息而配置的 AWS Glue Vertica 连接。完成上一节“配置 Vertica 连接”中的步骤,以配置您的身份验证信息。您需要 AWS Glue 连接的名称
connectionName
。 -
前面提到的用作临时存储的 Amazon S3 存储桶或文件夹。您将需要名称
tempS3Path
。您将需要使用s3a
协议连接到此位置。
例如:
dynamicFrame = glueContext.create_dynamic_frame.from_options( connection_type="vertica", connection_options={ "connectionName": "
connectionName
", "staging_fs_url": "s3a://tempS3Path
", "db": "dbName
", "table": "tableName
", } )
您还可以提供 SELECT SQL 查询来筛选返回到 DynamicFrame 的结果,或者访问来自多个表的数据集。
例如:
dynamicFrame = glueContext.create_dynamic_frame.from_options( connection_type="vertica", connection_options={ "connectionName": "
connectionName
", "staging_fs_url": "s3a://tempS3Path
", "db": "dbName
", "query": "select * FROMtableName
", }, )
写入 Vertica 表
此示例会将来自现有 DynamicFrame dynamicFrame
的信息写入 Vertica。如果表中已经含有信息,AWS Glue 会将来自 DynamicFrame 的数据附加到现有信息之后。
先决条件:
-
您要写入的当前已有或需要的表名
tableName
。您还需要相应的 Vertica 数据库名dbName
。 -
为了提供身份验证信息而配置的 AWS Glue Vertica 连接。完成上一节“配置 Vertica 连接”中的步骤,以配置您的身份验证信息。您需要 AWS Glue 连接的名称
connectionName
。 -
前面提到的用作临时存储的 Amazon S3 存储桶或文件夹。您将需要名称
tempS3Path
。您将需要使用s3a
协议连接到此位置。
例如:
glueContext.write_dynamic_frame.from_options( frame=
dynamicFrame
, connection_type="vertica", connection_options={ "connectionName": "connectionName
", "staging_fs_url": "s3a://tempS3Path
", "db": "dbName
", "table": "tableName
", } )
Vertica 连接选项参考
-
connectionName
– 必需。用于读/写。为了向您的连接方法提供身份验证和网络信息而配置的 AWS Glue Vertica 连接的名称。 -
db
– 必需。用于读/写。您的连接方法将与之交互的 Vertica 中数据库的名称。 -
dbSchema
– 如果需要标识您的表,则为必填项。用于读/写。默认值:public
。您的连接方法将与之交互的 Schema 的名称。 -
table
– 对于写入为必填项,对于读取也为必填项,但提供了query
时除外。用于读/写。您的连接方法将与之交互的表的名称。 -
query
– 用于读取。用来定义从 Teradata 读取数据时要检索的内容的 SQL SELECT 查询。 -
staging_fs_url
– 必需。用于读/写。有效值:s3a
URL。用作临时存储的 Amazon S3 存储桶或文件夹的 URL。