使用联合查询的示例 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用联合查询的示例

以下示例显示了如何运行联合查询。使用连接到 Amazon Redshift 数据库的 SQL 客户端运行 SQL。

将联合查询与 PostgreSQL 结合使用的示例

以下示例演示如何设置引用 Amazon Redshift 数据库、Aurora PostgreSQL 数据库和 Amazon S3 的联合查询。此示例说明联合查询的工作原理。要在您自己的环境中运行联合查询,请对该查询进行相应更改,使其适合您的环境。有关执行此操作的先决条件,请参阅开始使用对 PostgreSQL 的联合查询

创建引用 Aurora PostgreSQL 数据库的外部 schema。

CREATE EXTERNAL SCHEMA apg FROM POSTGRES DATABASE 'database-1' SCHEMA 'myschema' URI 'endpoint to aurora hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO' SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';

创建另一个引用 Amazon S3 的外部 schema,该 schema 使用 Amazon Redshift Spectrum。此外,将使用架构的权限授予 public

CREATE EXTERNAL SCHEMA s3 FROM DATA CATALOG DATABASE 'default' REGION 'us-west-2' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-S3'; GRANT USAGE ON SCHEMA s3 TO public;

显示 Amazon Redshift 表中的行计数。

SELECT count(*) FROM public.lineitem; count ---------- 25075099

显示 Aurora PostgreSQL 表中的行计数。

SELECT count(*) FROM apg.lineitem; count ------- 11760

显示 Amazon S3 中的行计数。

SELECT count(*) FROM s3.lineitem_1t_part; count ------------ 6144008876

从 Amazon Redshift、Aurora PostgreSQL 和 Amazon S3 创建表视图。此视图用于运行联合查询。

CREATE VIEW lineitem_all AS SELECT l_orderkey,l_partkey,l_suppkey,l_linenumber,l_quantity,l_extendedprice,l_discount,l_tax,l_returnflag,l_linestatus, l_shipdate::date,l_commitdate::date,l_receiptdate::date, l_shipinstruct ,l_shipmode,l_comment FROM s3.lineitem_1t_part UNION ALL SELECT * FROM public.lineitem UNION ALL SELECT * FROM apg.lineitem with no schema binding;

使用谓词显示视图 lineitem_all 中的行计数以限制结果。

SELECT count(*) from lineitem_all WHERE l_quantity = 10; count ----------- 123373836

了解每年 1 月份一件商品的销量。

SELECT extract(year from l_shipdate) as year, extract(month from l_shipdate) as month, count(*) as orders FROM lineitem_all WHERE extract(month from l_shipdate) = 1 AND l_quantity < 2 GROUP BY 1,2 ORDER BY 1,2; year | month | orders ------+-------+--------- 1992 | 1 | 196019 1993 | 1 | 1582034 1994 | 1 | 1583181 1995 | 1 | 1583919 1996 | 1 | 1583622 1997 | 1 | 1586541 1998 | 1 | 1583198 2016 | 1 | 15542 2017 | 1 | 15414 2018 | 1 | 15527 2019 | 1 | 151

使用混合大小写名称的示例

要查询具有数据库、schema、表或列混合大小写名称的受支持 PostgreSQL 远程数据库,请将 enable_case_sensitive_identifier 设置为 true。有关设置此会话参数的更多信息,请参阅enable_case_sensitive_identifier

SET enable_case_sensitive_identifier TO TRUE;

数据库和 schema 名称通常是小写的。以下示例说明如何连接到受支持的 PostgreSQL 远程数据库,该数据库具有数据库和 schema 的小写名称以及表和列的混合大小写名称。

创建引用具有小写数据库名称 (dblower) 和小写 schema 名称 (schemalower) 的 Aurora PostgreSQL 数据库的外部 schema。

CREATE EXTERNAL SCHEMA apg_lower FROM POSTGRES DATABASE 'dblower' SCHEMA 'schemalower' URI 'endpoint to aurora hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO' SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';

在运行查询的会话中,将 enable_case_sensitive_identifier 设置为 true

SET enable_case_sensitive_identifier TO TRUE;

运行联合查询以从 PostgreSQL 数据库中选择所有数据。表 (MixedCaseTab) 和列 (MixedCaseName) 具有混合大小写的名称。结果是一行 (Harry)。

select * from apg_lower."MixedCaseTab";
MixedCaseName ------- Harry

以下示例说明如何连接到受支持的 PostgreSQL 远程数据库,该数据库具有数据库、schema、表和列的混合大小写名称。

enable_case_sensitive_identifier 设置为 true,然后再创建外部 schema。如果 enable_case_sensitive_identifier 未在创建外部 schema 之前设置为 true,则会发生数据库不存在错误。

创建引用具有混合大小写数据库名称 (UpperDB) 和 schema 名称 (UpperSchema) 的 Aurora PostgreSQL 数据库的外部 schema。

CREATE EXTERNAL SCHEMA apg_upper FROM POSTGRES DATABASE 'UpperDB' SCHEMA 'UpperSchema' URI 'endpoint to aurora hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO' SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';

运行联合查询以从 PostgreSQL 数据库中选择所有数据。表 (MixedCaseTab) 和列 (MixedCaseName) 具有混合大小写的名称。结果是一行 (Harry)。

select * from apg_upper."MixedCaseTab";
MixedCaseName ------- Harry

使用联合查询 与 MySQL 的示例

以下示例演示如何设置引用 Aurora MySQL 数据库的联合查询。此示例说明联合查询的工作原理。要在您自己的环境中运行联合查询,请对该查询进行相应更改,使其适合您的环境。有关执行此操作的先决条件,请参阅开始使用对 MySQL 的联合查询

该示例取决于以下先决条件:

  • 在 Aurora MySQL 数据库的 Secrets Manager 中设置的密钥。在 IAM 访问策略和角色中引用该密钥。有关更多信息,请参阅创建密钥和 IAM 角色以使用联合查询

  • 设置 Amazon Redshift 和 Aurora MySQL 的链接的安全组。

创建引用 Aurora MySQL 数据库的外部 schema。

CREATE EXTERNAL SCHEMA amysql FROM MYSQL DATABASE 'functional' URI 'endpoint to remote hostname' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-SecretsManager-RO' SECRET_ARN 'arn:aws:secretsmanager:us-west-2:123456789012:secret:federation/test/dataplane-apg-creds-YbVKQw';

运行一个 Aurora MySQL 表的 SQL SELECT,以在 Aurora MySQL 中显示员工表中的一行。

SELECT level FROM amysql.employees LIMIT 1; level ------- 8