使用联合查询的示例
以下示例显示了如何运行联合查询。使用连接到 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