將資料湖資料表新增至資料共用 - Amazon Redshift

Amazon Redshift 自 2025 年 11 月 1 日起不再支援建立新的 Python UDF。如果您想要使用 Python UDF,請在該日期之前建立 UDF。現有 Python UDF 將繼續正常運作。如需詳細資訊,請參閱部落格文章

將資料湖資料表新增至資料共用

透過資料共用,資料生產者就能安全地與相同 AWS 帳戶或不同帳戶中的取用者精細地共用資料庫物件,例如結構描述和資料表。生產者也可以在不同區域之間共用物件。本主題說明如何將物件從資料湖 (特別是從 AWS Glue Data Catalog) 新增至資料共用。內容涵蓋了兩個使用案例:

  • 將近期繫結視觀表新增至參考資料湖中資料表的資料共用 - 這對取用者來說很方便,因為使用 Lake Formation 等的初步組態 (例如定義外部來源資料的許可) 可能已經完成。另一個好處是,新增至資料共用的檢視可以聯結資料湖中的資料表與 Redshift 原生資料表。

  • 直接從外部結構描述將資料表新增至資料共用 - 這可在不需額外分層或邏輯的情況下,將資料湖的物件提供給取用者。取用者可以查詢資料表,或將資料表與取用者上的資料表聯結。

上述案例在您使用 CREATE EXTERNAL SCHEMA 於 Redshift 中參考 AWS 資料目錄中的資料表後即適用。AWS 資料目錄中的任何資料表都可以是來源。

注意

您新增至資料共用的資料湖資料表可以包含於 Lake Formation 註冊的資料表和 AWS Glue Data Catalog 資料表。

建立外部結構描述與外部資料表

您可以建立外部結構描述和外部資料表,以便將其新增至以下各節中的資料共用。這些是初步步驟。如果您已完成這些步驟,則可略過此節。

  1. 在生產者上,建立外部結構描述以參考儲存在 Amazon S3 中的資料湖資料。外部結構描述參考 AWS Glue Data Catalog。示範的角色和區域為範例:

    CREATE EXTERNAL SCHEMA external_schema_name FROM DATA CATALOG DATABASE 'glue_database_name' IAM_ROLE 'arn:aws:iam::123456789012:role/sample-role' REGION 'us-east-1';
  2. 在外部結構描述中建立資料湖資料表。

    CREATE EXTERNAL TABLE external_schema_name.sales( salesid INTEGER, sellerid INTEGER, buyerid INTEGER, saledate DATE, pricepaid DECIMAL(8,2)) ROW FORMAT delimited FIELDS TERMINATED BY '\t' STORED AS textfile LOCATION 's3://redshift-downloads/tickit/spectrum/sales/';

    範例包括 LOCATION。其形式必須為 s3://{bucket_name}/{folder}/,且其中已指定資料夾。資料夾的長度至少須為一個字元。您可以選擇包含子資料夾。若要查看在資料湖中建立資料表的其他範例,請參閱 CREATE EXTERNAL TABLE 的範例

    注意

    只有生產者上的 IAM 角色擁有資料表的 SELECT 存取權時,才支援共用資料表。

將參考資料湖資料表的近期繫結視觀表新增至資料共用

當您根據 AWS 資料目錄中的外部結構描述建立資料表,並且想要將其新增至資料共用時,最常見的方式是新增參考您所建立資料表的 Redshift 近期繫結視觀表,其中包含來自資料湖的資料。下列程序顯示進行的步驟:

  1. 建立近期繫結視觀表,以參考您先前建立的外部資料表:

    CREATE VIEW lbv AS select * from external_schema_name.sales, other_schema.t1 WITH NO SCHEMA BINDING;
  2. 將檢視結構描述新增至資料共用。這是包含近期繫結視觀表的本機結構描述。

    ALTER DATASHARE dsx_datashare ADD SCHEMA public;
  3. 將包含近期繫結視觀表所參考資料表的結構描述新增至資料共用。無論結構描述包含本機資料庫物件或來自資料湖的物件,都必須新增結構描述,這是新增至資料共用的檢視中所參考的任何基礎資料表的必要項。請注意,您必須先新增此結構描述,才能新增近期繫結視觀表。

    ALTER DATASHARE dsx_datashare ADD SCHEMA external_schema_name; ALTER DATASHARE dsx_datashare ADD SCHEMA other_schema;
  4. 使用 SQL 命令將檢視新增至資料共用。請注意,資料表名稱包含 schema 字首。

    ALTER DATASHARE my_datashare ADD TABLE public.lbv;
  5. 確認檢視和結構描述已成功新增至資料共用:

    SELECT * FROM svv_datashare_objects WHERE share_name = 'my_datashare';
  6. 取用者管理員會從資料共用建立資料庫,然後將使用權授予取用者使用者。

完成這些步驟後,可存取資料共用檢視的資料庫取用者使用者就可以查詢資料。

直接將資料湖資料表新增至資料共用

將外部結構描述中的資料表新增至資料共用的方式,與新增檢視類似。這也適用取用者想要以原始狀態查詢資料湖資料表,或取用者想要將其聯結至取用者資料倉儲中的資料表的情況。以下步驟說明如何使用 SQL 將資料湖資料表新增至資料共用。

  1. 依照本主題的第一節所述,建立外部結構描述和外部資料表。

  2. 探索外部結構描述中的現有資料表,以確認您建立的資料表可用:

    SELECT * FROM svv_external_tables WHERE schemaname = 'external_schema_name';
  3. 將外部結構描述新增至資料共用:

    ALTER DATASHARE my_datashare ADD SCHEMA external_schema_name;
  4. 將外部資料表新增至資料共用。請注意,資料表名稱包含 schema 字首:

    ALTER DATASHARE my_datashare ADD TABLE external_schema_name.sales;
  5. 確認資料表已成功新增至資料共用:

    SELECT * FROM svv_datashare_objects WHERE share_name = 'my_datashare';

    如需更詳細的指示,請參閱在 AWS 帳戶內共用資料的讀取存取權

  6. 在取用者上 (這是接收共用資料的資料庫),管理員會建立資料共用的關聯,讓使用者可以查詢共用資料表。如需如何執行此步驟的詳細資訊,請參閱以取用者身分管理其他帳戶的資料共用

管理員完成這些步驟後,取用者上的資料庫使用者就可以編寫查詢,以從共用資料表擷取資料,並將其與取用者上的其他資料表聯結。

將資料湖物件新增至資料共用的使用須知

當您使用資料共用中資料湖的資料表和檢視時,有幾點須注意:

  • 使用 AWS CloudTrail 記錄 - 當透過資料共用來共用的資料湖資料表有存取操作時,資料生產者帳戶可以使用 AWS CloudTrail 日誌進行稽核:

    • 使用日誌資料控制資料存取 - CloudTrail 日誌會記錄有關誰存取共用資料表的詳細資訊,包括 Redshift 資料共用生產者和取用者。識別碼可在 AssumeRole CloudTrail 日誌的 ExternalId 欄位中取得。資料擁有者可以藉由動作對 IAM 政策中的資料存取設定其他限制。如需透過政策定義資料存取的詳細資訊,請參閱存取第三方擁有的 AWS 帳戶

  • 安全和取用者許可 - 對於在 Lake Formation 註冊的資料表,Amazon S3 資源會受到 Lake Formation 保護,並使用 Lake Formation 提供的憑證來提供使用。

將資料湖物件新增至資料共用的帳單考量事項

以下詳細說明在資料共用中儲存和掃描資料湖物件所產生的成本:

  • 當取用者查詢資料湖中的共用物件時,會向取用者收取掃描費用。

    • 當取用者是佈建叢集時,Redshift 會使用 Redshift Spectrum 掃描 Amazon S3 資料。因此,Spectrum 費用會向取用者帳戶收取。

    • 當取用者是 Amazon Redshift Serverless 工作群組時,Spectrum 不會另外收費。

  • Amazon S3 的儲存和操作費用 (例如列出儲存貯體) 會向擁有每個 Amazon S3 儲存貯體的帳戶收取。

如需有關 Amazon Redshift Serverless 計費的其他詳細資訊,請參閱 Amazon Redshift Serverless 的計費。如需更多計費和定價資訊,請查看 Amazon Redshift 定價