從 Amazon Redshift 查詢 Amazon S3 資料表 - Amazon Redshift

Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊,請參閱部落格文章

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

從 Amazon Redshift 查詢 Amazon S3 資料表

Amazon Redshift 與 Amazon S3 資料表儲存貯體整合,可讓您使用 Amazon Redshift 存取 S3 資料表資源。無論您是剛開始使用或管理 Iceberg 環境中的數千個資料表,資料表儲存貯體都可以簡化任何規模的資料湖管理。如需詳細資訊,請參閱資料表儲存貯體

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

先決條件

從 Amazon Redshift 查詢 S3 資料表之前,您必須將 S3 資料表與 整合 AWS Glue Data Catalog。如需說明,請參閱將 Amazon S3 資料表與 整合 AWS Glue Data Catalog

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

注意

方法 3 (自動掛載的 awsdatacatalog) 有其他先決條件。如需詳細資訊,請參閱 方法 3:自動掛載 awsdatacatalog

從 Amazon Redshift 查詢 S3 資料表

若要開始使用查詢 S3 資料表,請遵循下列步驟:

  • 步驟 1:建立 Amazon Redshift 的 IAM 角色

  • 步驟 2:將 IAM 角色連接至您的 Amazon Redshift 叢集

  • 步驟 3:從 Amazon Redshift 查詢 S3 資料表

步驟 1:建立 Amazon Redshift 的 IAM 角色

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

注意

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

若要建立政策:

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

  2. 在導覽窗格中,選擇政策

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

  4. 請選擇 JSON 標籤。

  5. 貼上下列 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/*" ] } ] }
  6. 選擇檢閱政策

  7. 檢閱政策頁面上,為名稱輸入 GlueCatalogS3Tables_Policy 。或者,輸入描述。檢閱政策摘要,然後選擇建立政策

若要為 Amazon Redshift 建立 IAM 角色:

  1. 開啟 IAM 主控台

  2. 在導覽窗格中,選擇 Roles (角色)。

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

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

  5. 其他服務 AWS 的使用案例下,選擇 Redshift - 可自訂,然後選擇下一步

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

  7. Role name (角色名稱) 中輸入角色名稱,例如 RedshiftS3TablesRole

  8. 檢閱資訊,然後選擇建立角色

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

注意

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

步驟 2:將 IAM 角色連接至您的 Amazon Redshift 叢集

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

使用 AWS 管理主控台:

  1. 登入 AWS 管理主控台,並在 https://console.aws.amazon.com/redshiftv2/:// 開啟 Amazon Redshift 主控台。

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

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

  4. 管理 IAM 角色頁面上,選擇要新增的 IAM 角色,然後選擇新增 IAM 角色

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

使用 AWS CLI:

執行下列命令,將 IAM 角色與現有叢集或命名空間建立關聯。my-redshift-namespacemy-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 角色與叢集建立關聯

步驟 3:從 Amazon Redshift 查詢 S3 資料表

當您將 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/ 開啟 AWS Glue 主控台。

  2. 在導覽窗格中,選擇 Databases (資料庫)。

  3. 選擇建立,然後選擇資源連結

  4. 建立資源連結頁面上,提供下列資訊:

    • 資源連結名稱:輸入資源連結的名稱 (例如 sales_resource_link)。

    • 共用資料庫:輸入 S3 Tables 資料庫路徑 (例如 s3tablescatalog/analytics-bucket/sales)。

    • 共用資料庫擁有者:輸入您的 AWS 帳戶 ID。

    • 共用資料庫的目錄 ID:以 格式輸入目錄 ID<account-id>:s3tablescatalog/<bucket-name>

  5. 選擇建立

使用 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

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

如需完整的語法詳細資訊,請參閱《Amazon Redshift 資料庫開發人員指南》中的 CREATE EXTERNAL SCHEMA

範例

使用步驟 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 建立資料庫

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

如需完整的語法詳細資訊,請參閱《Amazon Redshift 資料庫開發人員指南》中的 CREATE DATABASE

範例

將 取代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

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 所定義)

  2. 當您使用 IAM 身分連線時,Amazon Redshift 會自動建立字首為 IAM:(適用於使用者) 或 IAMR:(適用於角色) 的資料庫使用者。

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

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

如需設定聯合存取的詳細說明,請參閱《Amazon Redshift 管理指南》中的使用聯合身分來管理對本機資源和 Amazon Redshift Spectrum 外部資料表的 Amazon Redshift 存取。

查詢 S3 資料表

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

驗證掛載結構描述:

SHOW SCHEMAS FROM DATABASE awsdatacatalog;

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

SELECT * FROM awsdatacatalog.sales_resource_link.transactions;