在 AWS Data Exchange 上共用授權的 Amazon Redshift 資料 - Amazon Redshift

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

在 AWS Data Exchange 上共用授權的 Amazon Redshift 資料

建立 AWS Data Exchange 資料共用並將其新增至 AWS Data Exchange 產品時,提供者可以在 Amazon Redshift 中授權資料,讓取用者在擁有有效 AWS Data Exchange 訂閱時,在 Amazon Redshift 中探索、訂閱和查詢最新資料。

將 AWS Data Exchange 資料共用新增至 AWS Data Exchange 產品後,取用者會在訂閱開始時自動存取產品的資料共用,並且只要訂閱處於作用中狀態,即可保留其存取權。

以取用者身份使用 AWS Data Exchange 資料共用

透過 Amazon Redshift,您可以存取和分析來自 AWS Data Exchange 的資料集,而不必儲存或管理資料的副本。

如果您是取用者,請依照下列步驟探索包含 AWS Data Exchange 資料共用的資料產品,並查詢 Amazon Redshift 資料:

  1. 在 AWS Data Exchange 主控台上,探索並訂閱包含 AWS Data Exchange 資料共用的資料產品。

    訂閱開始後,您可以存取已授權的 Amazon Redshift 資料,這些資料會作為資產匯入到包含 AWS Data Exchange 資料共用的資料集。

    若要深入了解如何開始使用包含 AWS Data Exchange 資料共用的資料產品,請參閱訂閱 AWS Data Exchange 上的資料產品

  2. 如有需要,在 Amazon Redshift 主控台上,建立 Amazon Redshift 叢集。

    如需如何建立叢集的資訊,請參閱建立叢集

  3. 列出可供您使用的資料共用,並檢視資料共用的內容。如需詳細資訊,請參閱DESC DATASHARESHOW DATASHARES

    下列範例會顯示指定生產者命名空間的輸入資料共用資訊。當您以取用者管理員身分執行 DESC DATASHARE 時,您必須指定 ACCOUNT 和 NAMESPACE 選項以檢視輸入資料共用。

    DESC DATASHARE salesshare of ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d'; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+---------------------------------+------------------ 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_category_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | schema | public | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | view | public.sales_data_summary_view |

    只有叢集超級使用者才能執行此動作。您也可以使用 SVV_DATASHARES 來檢視資料共用,以及使用 SVV_DATASHARE_OBJECTS 來檢視資料共用內的物件。

    下列範例顯示取用者叢集中的輸入資料共用。

    SHOW DATASHARES LIKE 'sales%'; share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace ------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+-------------------------------------- salesshare | | | | INBOUND | | t | | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
  4. 建立參照資料共用的本機資料庫。您必須指定 ACCOUNT 和 NAMESPACE 選項,才能建立 AWS Data Exchange 資料共用的本機資料庫。如需更多詳細資訊,請參閱 CREATE DATABASE

    CREATE DATABASE sales_db FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    如果您想要對本機資料庫中物件的存取進行更精細的控制,請在建立資料庫時使用 WITH PERSOMMENTS 子句。這可讓您在步驟 6 中為資料庫中的物件授予物件層級權限。

    CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    您可以透過查詢 SVV_REDSHIFT_DATABASES 檢視來查看您從資料共用中建立的資料庫。您可以直接連線到這些資料庫,或是連線到取用者叢集上的本機資料庫,並執行跨資料庫查詢,以查詢資料共用資料庫中的資料。您不能在現有資料共用中建立的資料庫物件頂端建立資料共用。不過,您可以將資料複製到取用者叢集上的個別資料表中,執行所需的任何處理,然後共用已建立的新物件。

    您也可以使用 Amazon Redshift 主控台從資料共用中建立資料共用。如需更多詳細資訊,請參閱 從資料共用中建立資料庫

  5. (選擇性) 建立外部結構描述,以參照取用者叢集上匯入之取用者資料庫中的特定結構描述,並對其指派精細的許可。如需更多詳細資訊,請參閱 CREATE EXTERNAL SCHEMA

    CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
  6. 視需要,將從資料共用建立的資料庫和結構描述參照的許可授予使用者叢集中的使用者或角色。如需詳細資訊,請參閱 GRANTREVOKE

    GRANT USAGE ON DATABASE sales_db TO Bob;
    GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;

    如果您在沒有 WITH PERSOMMENCE 的情況下建立資料庫,則只能將從資料共用建立的整個資料庫的權限指派給您的使用者和角色。在某些情況下,您需要更精細地控制從資料共用中建立的資料庫物件子集。如果是這樣,您可以建立指向資料共用中特定結構描述的外部結構描述參考 (如上一個步驟所述),並在結構描述層級上提供精細的許可。

    您也可以在共用物件之上建立近期繫結檢視,並使用這些檢視來指派精細的許可。也可以考慮讓生產者叢集以所需的精細程度為您建立其他資料共用。您可以依需要,為從資料共用中建立的資料庫建立盡可能多的結構描述參照。

    如果您在步驟 4 中使用 WITH PERMISSIONS 建立資料庫,則必須為共用資料庫中的物件指派物件層級權限。只有 USAGE 權限的使用者在獲得額外的物件層級權限之前,不能存取使用 WITH PERMISSIONS 建立的資料庫中的任何物件。

    GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
  7. 查詢資料共用中共用物件的資料。

    在取用者資料庫和取用者叢集結構描述上具有許可的使用者和角色,可以探索和瀏覽任何共用物件的中繼資料。他們也可以探索和瀏覽取用者叢集中的本機物件。若要做到這一點,他們會使用 JDBC 或 ODBC 驅動器、SHOW 命令,或是 SVV_ALL 和 SVV_REDSHIFT 檢視。

    生產者叢集在每個結構描述中可能會有多個資料庫、資料表和檢視的結構描述。取用者端的使用者只能看到透過資料共用提供的物件子集。這些使用者無法從生產者叢集看到整個中繼資料。此方法有助於透過資料共用提供精細的中繼資料安全控制

    您可以繼續連線到本機叢集資料庫。但是現在,您也可以使用三部分 database.schema.table 表示法,從資料共用中建立的資料庫和結構描述中讀取。您可以執行跨越任何和所有可見資料庫的查詢。這些資料庫可以是叢集上的本機資料庫,也可以是從資料共用建立的資料庫。或者,您可以直接連線到這些取用者資料庫,並使用部分標記法對共用物件執行查詢。

    您可以使用完整資格存取資料。如需更多詳細資訊,請參閱 跨資料庫查詢範例

    SELECT * FROM sales_db.public.tickit_sales_redshift ORDER BY 1,2 LIMIT 5; salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission | saletime ---------+--------+----------+---------+---------+--------+---------+-----------+------------+--------------------- 1 | 1 | 36861 | 21191 | 7872 | 1875 | 4 | 728.00 | 109.20 | 2008-02-18 02:36:48 2 | 4 | 8117 | 11498 | 4337 | 1983 | 2 | 76.00 | 11.40 | 2008-06-06 05:00:16 3 | 5 | 1616 | 17433 | 8647 | 1983 | 2 | 350.00 | 52.50 | 2008-06-06 08:26:17 4 | 5 | 1616 | 19715 | 8647 | 1986 | 1 | 175.00 | 26.25 | 2008-06-09 08:38:52 5 | 6 | 47402 | 14115 | 8240 | 2069 | 2 | 154.00 | 23.10 | 2008-08-31 09:17:02

    您只能在共用物件上使用 SELECT 陳述式。不過,您可以從不同本機資料庫中的共用物件查詢資料,在取用者叢集中建立資料表。

    除了查詢之外,取用者還可以在共用物件上建立檢視。僅支援近期繫結檢視或具體化視觀表。Amazon Redshift 不支援共用資料的一般檢視。取用者建立的檢視可跨越多個本機資料庫或從資料共用建立的資料庫。如需更多詳細資訊,請參閱 CREATE VIEW

    // Connect to a local cluster database // Create a view on shared objects and access it. CREATE VIEW sales_data AS SELECT * FROM sales_db.public.tickit_sales_redshift WITH NO SCHEMA BINDING; SELECT * FROM sales_data;