执行 Redshift Spectrum 查询
现在,已在 AWS Glue 数据目录中创建客户表,下面我们来使用 Redshift Spectrum 查询该表。
从您的查询工具登录 Amazon Redshift 集群。
运行下面的语句,为 Redshift Spectrum 创建一个称为
spectrumxacct 的外部架构,以指向 AWS Glue 数据目录数据库。此数据库在账户 B 中为
spectrumdb_account_b,已在 AWS Glue 控制台中创建。
SQL
运行下面的示例查询,以确认 Redshift Spectrum 可以成功查询数据。
SQL
注意:Redshift Spectrum 使用账户 B 中的 AWS Glue 数据目录,而非账户 A。
选项 2:账户 A 中的 AWS Glue 数据目录
****
设置权限
1.登录账户 A 的 AWS 控制台,然后将 AWS 区域更改为 us-west-2(俄勒冈)。
• rs-xacct-bucket-policy,可授予对账户 A 中的 S3 存储桶的访问权限
• rs_xacct_kms_policy,可授予对账户 A 中的 CMK 的访问权限
策略名称:rs_xacct_bucket_policy
注意:将存储桶名称 rs-xacct-kms-bucket 替换为您的存储桶名称。
Json
策略名称:rs_xacct_kms_policy
注意:将<ARN of kms_key_account_a from Account A>替换为账户 A 中的 KMS 密钥 ARN。
Json
b) 为具有以下 IAM 策略的 Amazon Redshift 服务创建称为
xacct_kms_role_account_b 的新 IAM 角色:
•
rs_xacct_bucket_policy
•
rs_xacct_kms_policy
•
AWSGlueConsoleFullAccess(此托管策略为 AWS Glue 数据目录提供必需权限)
保存 IAM 角色 ARN,供稍后使用。
c) 通过选择编辑信任关系并将现有信任策略替换为以下内容来更改 IAM 角色
xacct_kms_role_account_a 的信任关系:
注意:将<Account B>替换为账户 B 的 AWS 账户 ID。
Json
d) 创建称为
glue_service_role_account_a 的 AWS Glue 服务 IAM 角色,并附加以下策略:
•
AWSGlueServiceRole(AWS 托管策略)
•
rs_xacct_bucket_policy(早前创建的托管策略)
•
rs_xacct_kms_policy(早前创建的托管策略)
注意:务必将 glue_service_role_account_a 更新为您自己的 IAM 角色
2.登录账户 B 的 AWS 控制台,并在尚未选择的情况下,将 AWS 区域更改为 us-west-2(俄勒冈)。
a) 修改现有的 IAM 策略
rs_xacct_assume_role_policy,并将现有的 JSON 策略替换为以下内容:
****注意:替换<ARN for IAM role xacct_kms_role_account_a from Account A>。
Json
执行 Amazon Redshift COPY
1.从您的查询工具登录 Amazon Redshift 集群并使用下面的 DDL 创建
客户表。
SQL
2.现在,您应该能够成功地运行下面的 COPY 语句。
SQL
注意:替换 IAM 角色 ARN,用逗号隔开,周围不加任何空格。
3.运行示例查询,以验证数据已成功加载。
SQL
为要查询的 Redshift Spectrum 设置 AWS Glue 数据目录表
现在,我们在账户 A 中创建 AWS Glue 爬网程序,以对相同的
客户数据进行爬网,并按照下面的步骤在账户 A 的 AWS Glue 数据目录数据库
spectrumdb_account_a 中创建称为客户的表:
按照选项 1 中列出的步骤操作,并使用下面的更改运行爬网程序:
这一次,在账户 A 中创建爬网程序(与选项 1 中的账户 B 相反)。
在账户 A 中创建 AWS Glue 数据目录数据库
spectrumdb_account_a(与账户 B 中的
spectrumdb_account_b 相反,然后为爬网程序选择该数据库以创建
客户表。
提供 S3 路径的同时,选择选项我的账户中的指定路径 (与为选项 1 选择的另一个账户中的指定路径不同)。
确保将早前创建的
glue_service_role_account_a 用作 AWS Glue 服务 IAM 角色。=
执行 Redshift Spectrum 查询**
**
现在,已在 AWS Glue 数据目录中创建
客户表,下面我们来使用 Redshift Spectrum 查询该表。
1.从您的查询工具登录 Amazon Redshift 集群,并运行下面的语句。这将会为 Redshift Spectrum 创建一个称为
spectrumxacct2 的外部架构,该架构指向账户 A 中的 AWS Glue 数据目录数据库
spectrumdb_account_a(早前从 AWS Glue 控制台中创建)。
SQL
注意:替换 IAM 角色 ARN,用逗号隔开,周围不加任何空格。
2.运行下面的查询,该查询应成功运行。
SQL
注意:Spectrum 使用账户 A 中的 AWS Glue 数据目录,而非账户 B_。_
小结
此博文显示了如何使用 Redshift Spectrum 为 Amazon S3 中的示例 KMS 加密数据集设置跨账户 Amazon Redshift COPY 和查询的逐步演练。它演示了两种解决方案选项,可根据您希望将哪个账户的 AWS Glue 目录用于 Redshift Spectrum 进行选择。
本文转载自 AWS 技术博客。
评论