

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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 資料庫的外部結構描述。

```
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 的外部結構描述，該結構描述使用 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>

查詢支援的 PostgreSQL 遠端資料庫，該資料庫具有混合大小寫的資料庫、結構描述、資料表或資料欄名稱，然後將 `enable_case_sensitive_identifier` 設定為 `true`。如需此工作階段參數的相關資訊，請參閱 [enable\$1case\$1sensitive\$1identifier](r_enable_case_sensitive_identifier.md)。

```
SET enable_case_sensitive_identifier TO TRUE;
```

一般而言，資料庫和結構描述名稱是小寫的。下列範例顯示如何連線到支援的 PostgreSQL 遠端資料庫，該資料庫的資料庫和結構描述名稱為小寫，而資料表和資料欄的名稱則混合大小寫。

建立外部結構描述，並使其參考具有小寫資料庫名稱 (`dblower`) 和小寫結構描述名稱 (`schemalower`) 的 Aurora PostgreSQL 資料庫。

```
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 遠端資料庫，該資料庫的資料庫、結構描述、資料表和資料欄名稱混合大小寫。

將 `enable_case_sensitive_identifier` 設定為 `true`，然後再建立外部結構描述。如果 `enable_case_sensitive_identifier` 在建立外部結構描述之前未設定為 `true`，則會發生資料庫不存在錯誤。

建立外部結構描述，並使其參考具有混合大小寫資料庫名稱 (`UpperDB`) 和結構描述名稱 (`UpperSchema`) 的 Aurora PostgreSQL 資料庫。

```
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 資料庫的外部結構描述。

```
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 選取，以顯示 Aurora MySQL 中員工資料表中的一個資料列。

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