

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 使用联合查询的示例
<a name="federated_query_example"></a>

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

## 将联合查询与 PostgreSQL 结合使用的示例
<a name="federated_query_example_postgres"></a>

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

创建引用 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
```

## 使用混合大小写名称的示例
<a name="federated_query_example_postgres-mixed"></a>

要查询具有数据库、schema、表或列混合大小写名称的受支持 PostgreSQL 远程数据库，请将 `enable_case_sensitive_identifier` 设置为 `true`。有关设置此会话参数的更多信息，请参阅[enable\$1case\$1sensitive\$1identifier](r_enable_case_sensitive_identifier.md)。

```
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 的示例
<a name="federated_query_example_mysql"></a>

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

该示例取决于以下先决条件：
+ 在 Aurora MySQL 数据库的 Secrets Manager 中设置的密钥。在 IAM 访问策略和角色中引用该密钥。有关更多信息，请参阅 [创建密钥和 IAM 角色以使用联合查询](federated-create-secret-iam-role.md)。
+ 设置 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
```