本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
消費者管理員動作
使用 Amazon Redshift,您可以在取用者叢集上執行管理任務,以管理資料擷取和載入處理。
如果您是消費者管理員 – 請遵循下列步驟:
-
列出可供您使用的資料共用,並檢視資料共用的內容。只有當生產者管理員已授權資料共用,且取用者管理員已接受並關聯資料共用時,資料共用的內容才能使用。如需詳細資訊,請參閱 DESC DATASHARE 和 SHOW DATASHARES。
下列範例會顯示指定生產者命名空間的輸入資料共用資訊。當您以取用者管理員身分執行 DESC DATAHSARE 時,您必須指定 NAMESPACE 和帳戶 ID 來檢視傳入資料共用。對於輸出資料共用,請指定資料共用名稱。
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 | 'dd8772e1-d792-4fa4-996b-1870577efc0d'
DESC DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d'; producer_account | producer_namespace | share_type | share_name | object_type | object_name ------------------+--------------------------------------+------------+------------+-------------+--------------------------------- 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_users_redshift 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_venue_redshift 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_category_redshift 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_date_redshift 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_event_redshift 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_listing_redshift 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_sales_redshift 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | schema | public (8 rows)
只有叢集超級使用者才能執行此動作。您也可以使用 SVV_DATASHARES 來檢視資料共用,以及使用 SVV_DATASHARE_OBJECTS 來檢視資料共用內的物件。
下列範例顯示取用者叢集中的輸入資料共用。
SELECT * FROM SVV_DATASHARES WHERE share_name 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 | 'dd8772e1-d792-4fa4-996b-1870577efc0d'
SELECT * FROM SVV_DATASHARE_OBJECTS WHERE share_name LIKE 'sales%'; share_type | share_name | object_type | object_name | producer_account | producer_namespace ------------+------------+-------------+---------------------------------+------------------+-------------------------------------- INBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d INBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d INBOUND | salesshare | table | public.tickit_category_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d INBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d INBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d INBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d INBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d INBOUND | salesshare | schema | public | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d (8 rows)
-
建立參照資料共用的本機資料庫。從資料共用建立資料庫時,請指定 NAMESPACE 和帳戶 ID。如需詳細資訊,請參閱CREATE DATABASE。
CREATE DATABASE sales_db FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d';
如果您想要對本機資料庫中物件的存取進行更精細的控制,請在建立資料庫時使用 WITH PERSOMMENTS 子句。這可讓您在步驟 4 中為資料庫中的物件授予物件層級權限。
CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d';
您可以透過查詢 SVV_REDSHIFT_DATABASES 檢視來查看您從資料共用中建立的資料庫。您可以直接連線至這些資料庫,也可以連線至取用者叢集上的本機資料庫,並執行跨資料庫查詢來查詢資料共用資料庫的資料。您不能在現有資料共用中建立的資料庫物件頂端建立資料共用。不過,您可以將資料複製到取用者叢集上的個別資料表中,執行所需的任何處理,然後共用已建立的新物件。
-
(選擇性) 建立外部結構描述,以參照取用者叢集上匯入之取用者資料庫中的特定結構描述,並對其指派精細的許可。如需詳細資訊,請參閱CREATE EXTERNAL SCHEMA。
CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
-
視需要,將從資料共用建立的資料庫和結構描述參照的許可授予使用者叢集中的使用者或角色。如需詳細資訊,請參閱 GRANT 或 REVOKE。
GRANT USAGE ON DATABASE sales_db TO Bob;
GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
如果您在沒有 WITH PERSOMMENCE 的情況下建立資料庫,則只能將從資料共用建立的整個資料庫的權限指派給您的使用者或角色。在某些情況下,您需要更精細地控制從資料共用中建立的資料庫物件子集。如果是這樣,您可以建立指向資料共用中特定結構描述的外部結構描述參照,如上一個步驟所述。然後,您可以在結構描述層級上提供精細的許可。您也可以在共用物件之上建立近期繫結檢視,並使用這些檢視來指派精細的許可。也可以考慮讓生產者叢集以所需的精細程度為您建立其他資料共用。您可以依需要,為從資料共用中建立的資料庫建立盡可能多的結構描述參照。
如果您在步驟 2 中使用 WITH PERMISSIONS 建立資料庫,則必須為共用資料庫中的物件指派物件層級權限。只有 USAGE 權限的使用者在獲得額外的物件層級權限之前,不能存取使用 WITH PERMISSIONS 建立的資料庫中的任何物件。
GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
-
查詢資料共用中共用物件的資料。
在取用者資料庫和取用者叢集結構描述上具有許可的使用者和角色,可以探索和瀏覽任何共用物件的中繼資料。他們也可以探索和瀏覽取用者叢集中的本機物件。若要做到這一點,請使用 JDBC 或 ODBC 驅動程式或 SVV_ALL 和 SVV_REDSHIFT 檢視。
生產者叢集在每個結構描述中可能會有多個資料庫、資料表和檢視的結構描述。取用者端的使用者只能看到透過資料共用提供的物件子集。這些使用者無法從生產者叢集看到所有中繼資料。此方法有助於透過資料共用提供精細的中繼資料安全控制
您可以繼續連線到本機叢集資料庫。但是現在,您也可以使用三部分 database.schema.table 表示法,從資料共用中建立的資料庫和結構描述中讀取。您可以執行跨越任何和所有可見資料庫的查詢。這些資料庫可以是叢集上的本機資料庫,也可以是從資料共用建立的資料庫。取用者叢集無法連線至從資料共用建立的資料庫。
您可以使用完整資格存取資料。如需詳細資訊,請參閱跨資料庫查詢範例。
SELECT * FROM sales_db.public.tickit_sales_redshift;
您只能在共用物件上使用 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;