

 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/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從 Amazon Redshift 查詢 Amazon S3 資料表
<a name="querying-s3Tables"></a>

Amazon Redshift 與 Amazon S3 資料表儲存貯體整合，可讓您使用 Amazon Redshift 存取 S3 資料表資源。無論您是剛開始使用或管理 Iceberg 環境中的數千個資料表，資料表儲存貯體都可以簡化任何規模的資料湖管理。如需詳細資訊，請參閱[資料表儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets.html)。

本主題說明如何開始使用 Amazon S3 Tables 和 Redshift，並使用 Amazon Redshift 存取 S3 Tables 物件。

## 先決條件
<a name="querying-s3Tables-prerequisites"></a>

從 Amazon Redshift 查詢 S3 資料表之前，您必須將 S3 資料表與 整合 AWS Glue Data Catalog。如需說明，請參閱[將 Amazon S3 資料表與 整合 AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/glue-federation-s3tables.html)。

與 S3 Tables 整合後 AWS Glue Data Catalog，具有所需 S3 Tables 和 IAM 許可的 AWS Glue IAM 主體可以透過 探索 S3 Tables AWS Glue Data Catalog。

**注意**  
方法 3 （自動掛載的 awsdatacatalog) 有其他先決條件。如需詳細資訊，請參閱 [方法 3：自動掛載 awsdatacatalog](#querying-s3Tables-method3)。

## 從 Amazon Redshift 查詢 S3 資料表
<a name="querying-s3Tables-steps"></a>

若要開始使用查詢 S3 資料表，請遵循下列步驟：
+ 步驟 1：建立 Amazon Redshift 的 IAM 角色
+ 步驟 2：將 IAM 角色連接至您的 Amazon Redshift 叢集
+ 步驟 3：從 Amazon Redshift 查詢 S3 資料表

### 步驟 1：建立 Amazon Redshift 的 IAM 角色
<a name="querying-s3Tables-step1"></a>

您的叢集需要授權才能存取外部 S3 Tables 目錄 AWS Glue。為了提供該授權，Amazon Redshift 會使用連接到叢集的 IAM 角色。建立具有下列政策許可的 IAM 角色。

**注意**  
在下面的政策和範例中，將 取代`us-west-2`為您的 AWS 區域，並將 `111122223333`取代為您的 AWS 帳戶 ID。

**若要建立政策：**

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**政策**。

1. 選擇 **Create policy** (建立政策)。

1. 請選擇 **JSON** 標籤。

1. 貼上下列 JSON 政策文件：

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "GlueDataCatalogPermissions",
         "Effect": "Allow",
         "Action": [
           "glue:GetCatalog",
           "glue:GetDatabase",
           "glue:GetTable",
           "glue:GetTables",
           "glue:UpdateTable",
           "glue:DeleteTable"
         ],
         "Resource": [
           "arn:aws:glue:us-west-2:111122223333:catalog",
           "arn:aws:glue:us-west-2:111122223333:catalog/s3tablescatalog",
           "arn:aws:glue:us-west-2:111122223333:catalog/s3tablescatalog/*",
           "arn:aws:glue:us-west-2:111122223333:database/s3tablescatalog/*/*",
           "arn:aws:glue:us-west-2:111122223333:table/s3tablescatalog/*/*/*",
           "arn:aws:glue:us-west-2:111122223333:database/*",
           "arn:aws:glue:us-west-2:111122223333:table/*/*"
         ]
       },
       {
         "Sid": "S3TablesDataAccessPermissions",
         "Effect": "Allow",
         "Action": [
           "s3tables:GetTableBucket",
           "s3tables:GetNamespace",
           "s3tables:GetTable",
           "s3tables:GetTableMetadataLocation",
           "s3tables:GetTableData",
           "s3tables:ListTableBuckets",
           "s3tables:CreateTable",
           "s3tables:PutTableData",
           "s3tables:UpdateTableMetadataLocation",
           "s3tables:ListNamespaces",
           "s3tables:ListTables",
           "s3tables:DeleteTable"
         ],
         "Resource": [
           "arn:aws:s3tables:us-west-2:111122223333:bucket/*",
           "arn:aws:s3tables:us-west-2:111122223333:bucket/*/table/*"
         ]
       }
     ]
   }
   ```

1. 選擇**檢閱政策**。

1. 在**檢閱政策**頁面上，為**名稱**輸入 `GlueCatalogS3Tables_Policy` 。或者，輸入描述。檢閱政策摘要，然後選擇**建立政策**。

**若要為 Amazon Redshift 建立 IAM 角色：**

1. 開啟 [ IAM 主控台](https://console.aws.amazon.com/iam/)。

1. 在導覽窗格中，選擇 **Roles** (角色)。

1. 選擇 **Create Role** (建立角色)。

1. 選擇**AWS 服務**做為信任的實體，然後選擇 **Redshift** 做為使用案例。

1. 在**其他服務 AWS 的使用案例**下，選擇 **Redshift - 可自訂**，然後選擇**下一步**。

1. 在**新增許可**頁面上，連接您在上面建立`GlueCatalogS3Tables_Policy`的政策。選擇**下一步**。

1. 在 **Role name (角色名稱)** 中輸入角色名稱，例如 `RedshiftS3TablesRole`。

1. 檢閱資訊，然後選擇**建立角色**。

1. 在導覽窗格中，選擇**角色**。選擇新角色的名稱以檢視摘要，然後將**角色 ARN** 複製到剪貼簿。為 S3 Tables 命名空間建立外部結構描述時，您將使用此 ARN。

**注意**  
使用確切的 Amazon Resource Name (ARNs) 取代萬用字元，將範圍縮小到特定資源。

### 步驟 2：將 IAM 角色連接至您的 Amazon Redshift 叢集
<a name="querying-s3Tables-step2"></a>

將您在步驟 1 中設定的 IAM 角色與 Amazon Redshift 叢集建立關聯。

**使用 AWS 管理主控台：**

1. 登入 AWS 管理主控台，並在 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)：// 開啟 Amazon Redshift 主控台。

1. 在導覽功能表上，選擇**叢集**，然後選擇您要更新的叢集。

1. 針對**動作**，選擇**管理 IAM 角色**以顯示與叢集相關聯的目前 IAM 角色清單。

1. 在**管理 IAM 角色**頁面上，選擇要新增的 IAM 角色，然後選擇**新增 IAM 角色**。

1. 選擇 **Done (完成)** 以儲存變更。

**使用 AWS CLI：**

執行下列命令，將 IAM 角色與現有叢集或命名空間建立關聯。`my-redshift-namespace` 將 `my-redshift-cluster`或 取代為您的叢集識別符或命名空間，並將 `111122223333`取代為您的 AWS 帳戶 ID。

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier my-redshift-cluster \
    --add-iam-roles arn:aws:iam::111122223333:role/RedshiftS3TablesRole

-- for serverless
aws redshift-serverless update-namespace \
    --namespace-name my-redshift-namespace \
    --iam-roles "arn:aws:iam::111122223333:role/RedshiftS3TablesRole"
```

如需詳細資訊，請參閱《Amazon Redshift 管理指南》**中的[將 IAM 角色與叢集建立關聯](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html)。

### 步驟 3：從 Amazon Redshift 查詢 S3 資料表
<a name="querying-s3Tables-step3"></a>

當您將 S3 Tables 與 整合時 AWS Glue Data Catalog，服務會建立聯合目錄結構，將 S3 Tables 資源映射至 AWS Glue 目錄物件：
+ S3 資料表儲存貯體會成為 中的**目錄** AWS Glue Data Catalog。
+ S3 命名空間會成為**AWS Glue 資料庫**。
+ S3 資料表會成為**AWS Glue 資料表物件**。

整合會建立下列階層：
+ **聯合目錄：**`s3tablescatalog` （自動建立）
+ **子目錄：**每個 S3 資料表儲存貯體都會成為 下的子目錄`s3tablescatalog`。
+ **資料庫：**資料表儲存貯體中的每個 S3 命名空間都會成為資料庫。
+ **資料表：**命名空間中的每個 S3 資料表都會變成資料表。

例如，如果您有一個名為 的 S3 資料表儲存貯體`analytics-bucket`，其命名空間`sales`包含資料表 `transactions`，則 中的完整路徑 AWS Glue Data Catalog 為：`s3tablescatalog/analytics-bucket/sales/transactions`。

**建立資源連結**

使用下列三種查詢方法中的任何一種之前，您必須在其中建立資源連結 AWS Glue Data Catalog。資源連結可讓 Amazon Redshift 透過標準目錄參考 S3 Tables 資料庫。

*使用 AWS Glue 主控台：*

1. 在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS Glue 主控台。

1. 在導覽窗格中，選擇 **Databases** (資料庫)。

1. 選擇**建立**，然後選擇**資源連結**。

1. 在**建立資源連結**頁面上，提供下列資訊：
   + **資源連結名稱：**輸入資源連結的名稱 （例如 `sales_resource_link`)。
   + **共用資料庫：**輸入 S3 Tables 資料庫路徑 （例如 `s3tablescatalog/analytics-bucket/sales`)。
   + **共用資料庫擁有者：**輸入您的 AWS 帳戶 ID。
   + **共用資料庫的目錄 ID：**以 格式輸入目錄 ID`<account-id>:s3tablescatalog/<bucket-name>`。

1. 選擇**建立**。

*使用 AWS CLI：*

```
aws glue create-database \
  --region us-west-2 \
  --cli-input-json '{
        "CatalogId": "111122223333",
        "DatabaseInput": {
            "Name": "sales_resource_link",
            "TargetDatabase": {
                "CatalogId": "111122223333:s3tablescatalog/analytics-bucket",
                "DatabaseName": "sales"
            }
        }
  }'
```

此命令會在預設 AWS Glue Data Catalog `sales_resource_link`中建立名為 的資源連結，指向 S3 資料表儲存貯體 中的`sales`資料庫`analytics-bucket`。

建立資源連結後，Amazon Redshift 會提供三種方法來查詢 S3 Tables。選擇最適合您的使用案例的方法。

**注意**  
若要在資料庫層級建立資源連結，Redshift 管理員必須具有預設目錄和所建立資料庫的 `AWS Glue:CreateDatabase` 許可。

#### 方法 1：建立外部 SCHEMA
<a name="querying-s3Tables-method1"></a>

使用 `CREATE EXTERNAL SCHEMA`建立參考 S3 Tables 資料庫的外部結構描述。此方法可明確控制結構描述命名和組態。

如需完整的語法詳細資訊，請參閱《*Amazon Redshift 資料庫開發人員指南*》中的 [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)。

**範例**

使用步驟 3 中的資料庫名稱和目錄 ID。將 取代`111122223333`為 AWS 您的帳戶 ID。

```
CREATE EXTERNAL SCHEMA s3tables_schema
FROM DATA CATALOG DATABASE 'sales_resource_link'
IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftS3TablesRole'
REGION 'us-west-2'
CATALOG_ID '111122223333';

SELECT * FROM s3tables_schema.transactions;
```

#### 方法 2：從 ARN 建立資料庫
<a name="querying-s3Tables-method2"></a>

使用 `CREATE DATABASE`搭配 `FROM ARN`子句來建立直接參考 AWS Glue 資源連結的聯合資料庫。此方法會自動將 AWS Glue 資料庫映射至 Redshift 資料庫。

如需完整的語法詳細資訊，請參閱《*Amazon Redshift 資料庫開發人員指南*》中的 [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html)。

**範例**

將 取代`111122223333`為 AWS 您的帳戶 ID。

```
CREATE DATABASE s3tables_db
FROM ARN 'arn:aws:glue:us-west-2:111122223333:database/sales_resource_link'
WITH DATA CATALOG SCHEMA analytics_schema
IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftS3TablesRole';

SELECT * FROM s3tables_db.analytics_schema.transactions;
```

#### 方法 3：自動掛載 awsdatacatalog
<a name="querying-s3Tables-method3"></a>

Amazon Redshift 可以透過 AWS Glue Data Catalog 資料庫自動掛載`awsdatacatalog`資料庫，包括 S3 Tables 資源連結。此方法需要在叢集上啟用 Spectrum (FAS) 的聯合存取。

**先決條件**

若要使用自動掛載`awsdatacatalog`資料庫，您必須啟用 Spectrum 的聯合存取。這可讓 Amazon Redshift 使用聯合身分憑證來存取 AWS Glue Data Catalog 和外部資料來源。

若要啟用 Spectrum 的聯合存取：

1. 使用具有下列許可的 IAM 身分連線至 Redshift 叢集：
   + `redshift:GetClusterCredentialsWithIAM` （適用於佈建叢集） 或 `redshift-serverless:GetCredentials`（適用於無伺服器）
   + `AmazonS3ReadOnlyAccess`
   + `AWSGlueConsoleFullAccess`
   + S3 Tables 許可 （如步驟 1 所定義）

1. 當您使用 IAM 身分連線時，Amazon Redshift 會自動建立字首為 `IAM:`（適用於使用者） 或 `IAMR:`（適用於角色） 的資料庫使用者。

1. 身為叢集管理員，請授予聯合身分使用者存取外部結構描述的許可。`my_user` 將 取代為您的 IAM 角色或使用者名稱：

   ```
   GRANT ALL ON SCHEMA awsdatacatalog TO "IAMR:my_user";
   ```

如需設定聯合存取的詳細說明，請參閱《[Amazon Redshift 管理指南》中的使用聯合身分來管理對本機資源和 Amazon Redshift Spectrum 外部資料表](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html)*的 Amazon Redshift* 存取。

**查詢 S3 資料表**

設定聯合存取後，請驗證掛載的結構描述並查詢 S3 資料表。

驗證掛載結構描述：

```
SHOW SCHEMAS FROM DATABASE awsdatacatalog;
```

使用步驟 3 中的資源連結名稱查詢 S3 資料表：

```
SELECT * FROM awsdatacatalog.sales_resource_link.transactions;
```