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 資料表。
建立外部結構描述與外部資料表
您可以建立外部結構描述和外部資料表,以便將其新增至以下各節中的資料共用。這些是初步步驟。如果您已完成這些步驟,則可略過此節。
-
在生產者上,建立外部結構描述以參考儲存在 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'; -
在外部結構描述中建立資料湖資料表。
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 近期繫結視觀表,其中包含來自資料湖的資料。下列程序顯示進行的步驟:
-
建立近期繫結視觀表,以參考您先前建立的外部資料表:
CREATE VIEW lbv AS select * from external_schema_name.sales, other_schema.t1 WITH NO SCHEMA BINDING; -
將檢視結構描述新增至資料共用。這是包含近期繫結視觀表的本機結構描述。
ALTER DATASHARE dsx_datashare ADD SCHEMA public; -
將包含近期繫結視觀表所參考資料表的結構描述新增至資料共用。無論結構描述包含本機資料庫物件或來自資料湖的物件,都必須新增結構描述,這是新增至資料共用的檢視中所參考的任何基礎資料表的必要項。請注意,您必須先新增此結構描述,才能新增近期繫結視觀表。
ALTER DATASHARE dsx_datashare ADD SCHEMA external_schema_name; ALTER DATASHARE dsx_datashare ADD SCHEMA other_schema; -
使用 SQL 命令將檢視新增至資料共用。請注意,資料表名稱包含 schema 字首。
ALTER DATASHARE my_datashare ADD TABLE public.lbv; -
確認檢視和結構描述已成功新增至資料共用:
SELECT * FROM svv_datashare_objects WHERE share_name = 'my_datashare'; -
取用者管理員會從資料共用建立資料庫,然後將使用權授予取用者使用者。
完成這些步驟後,可存取資料共用檢視的資料庫取用者使用者就可以查詢資料。
直接將資料湖資料表新增至資料共用
將外部結構描述中的資料表新增至資料共用的方式,與新增檢視類似。這也適用取用者想要以原始狀態查詢資料湖資料表,或取用者想要將其聯結至取用者資料倉儲中的資料表的情況。以下步驟說明如何使用 SQL 將資料湖資料表新增至資料共用。
-
依照本主題的第一節所述,建立外部結構描述和外部資料表。
-
探索外部結構描述中的現有資料表,以確認您建立的資料表可用:
SELECT * FROM svv_external_tables WHERE schemaname = 'external_schema_name'; -
將外部結構描述新增至資料共用:
ALTER DATASHARE my_datashare ADD SCHEMA external_schema_name; -
將外部資料表新增至資料共用。請注意,資料表名稱包含 schema 字首:
ALTER DATASHARE my_datashare ADD TABLE external_schema_name.sales; -
確認資料表已成功新增至資料共用:
SELECT * FROM svv_datashare_objects WHERE share_name = 'my_datashare';如需更詳細的指示,請參閱在 AWS 帳戶內共用資料的讀取存取權。
-
在取用者上 (這是接收共用資料的資料庫),管理員會建立資料共用的關聯,讓使用者可以查詢共用資料表。如需如何執行此步驟的詳細資訊,請參閱以取用者身分管理其他帳戶的資料共用。
管理員完成這些步驟後,取用者上的資料庫使用者就可以編寫查詢,以從共用資料表擷取資料,並將其與取用者上的其他資料表聯結。
將資料湖物件新增至資料共用的使用須知
當您使用資料共用中資料湖的資料表和檢視時,有幾點須注意:
-
使用 AWS CloudTrail 記錄 - 當透過資料共用來共用的資料湖資料表有存取操作時,資料生產者帳戶可以使用 AWS CloudTrail 日誌進行稽核:
-
使用日誌資料控制資料存取 - CloudTrail 日誌會記錄有關誰存取共用資料表的詳細資訊,包括 Redshift 資料共用生產者和取用者。識別碼可在
AssumeRoleCloudTrail 日誌的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 定價