本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Redshift 詳細資訊的資料共用
使用 Amazon Redshift,您可以安全地跨 Amazon Redshift 叢集共用即時資料,而不必複製或傳輸資料。Amazon Redshift 的資料共用可讓您與相同或不同 AWS 帳戶和 AWS 區域中的任何 Amazon Redshift 叢集共用即時查詢結果,包括來源資料的更新。
Amazon Redshift 中的資料共用狀態值
本主題說明資料共用在 Amazon Redshift 中可能具有的狀態。
使用跨帳戶資料共用時,會有不同的資料共用狀態,需要您執行動作。您的資料共用的狀態可以是作用中、需要的動作或非作用中。
以下說明每個資料共用狀態及其必要動作:
當生產者叢集管理員建立資料共用時,生產者叢集上的資料共用狀態為待定授權。生產者叢集管理員可以授權資料取用者存取資料共用。取用者叢集管理員沒有任何動作。
當生產者叢集管理員授權資料共用時,生產者叢集上的資料共用狀態會變成已授權。生產者叢集管理員沒有任何動作。當資料共用的資料取用者至少有一個關聯時,資料共用狀態會從已授權變更為作用中。
接著,取用者叢集上資料共用的共用狀態會變成可用 (需要在 Amazon Redshift 主控台上採取動作)。取用者叢集管理員可以將資料共用與資料取用者建立關聯,或拒絕資料共用。取用者叢集管理員也可以使用 AWS CLI 命令
describeDatashareforConsumer
來檢視資料共用的狀態。或者,管理員可以使用 CLI命令describeDatashare
並提供資料共用 Amazon Resource Name (ARN),以檢視資料共用的狀態。當取用者叢集管理員將資料共用與資料取用者建立關聯時,生產者叢集上的資料共用狀態會變成作用中。當資料共用的資料取用者至少有一個關聯時,資料共用狀態會從已授權變更為作用中。生產者叢集管理員不需要執行任何動作。
取用者叢集上的資料共用狀態會變成作用中。取用者叢集管理員不需要執行任何動作。
當取用者叢集管理員從資料共用中移除取用者關聯時,資料共用狀態會變成作用中或已授權。當資料共用與另一個資料取用者之間至少存在一個關聯時,它會變成作用中。當生產者叢集上的資料共用沒有任何取用者關聯時,它會變成已授權。生產者叢集管理員沒有任何動作。
如果移除所有關聯,則資料共用狀態會在取用者叢集上變成需要採取動作。當資料共用可供取用者使用時,取用者叢集管理員可以將資料共用與資料取用者重新建立關聯。
當取用者叢集管理員拒絕資料共用時,生產者叢集上的資料共用狀態會在取用者叢集上變成需要採取動作和已拒絕。生產者叢集管理員可以重新授權資料共用。取用者叢集管理員沒有任何動作。
當生產者叢集管理員從資料共用中移除授權時,生產者叢集上的資料共用狀態會變成需要採取動作。如有必要,生產者叢集管理員可以選擇重新授權資料共用。取用者叢集管理員不需要執行任何動作。
叢集內和叢集之間的資料共用
只有在不同的 Amazon Redshift 佈建叢集或無伺服器工作群組之間共用資料時,才需要資料共用。在同一個叢集中,只要您擁有其他資料庫中物件的必要權限,就可以使用簡單的三部分標記法 database.schema.table
來查詢另一個資料庫。
在 Amazon Redshift 中管理資料共用的許可
身為生產者叢集管理員,您可以保留所共用資料集的控制權。您可以將新物件新增至資料共用,或從資料共用中移除物件。您也可以授予或撤銷取用者叢集、 AWS 帳戶或 AWS 區域的整個資料共用存取權。撤銷許可時,取用者叢集會立即失去共用物件的存取權,並停止在 SVV_ 中的INBOUND資料共用清單中查看它們DATASHARES。
下列範例會建立資料共用 salesshare
、新增結構描述 public
,並將資料表新增至 public.tickit_sales_redshift
salesshare
。它也會salesshare
將 的使用許可授予指定的叢集命名空間。
CREATE DATASHARE salesshare; ALTER DATASHARE salesshare ADD SCHEMA public; ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
對於 CREATE DATASHARE,超級使用者和資料庫擁有者可以建立資料共用。如需詳細資訊,請參閱CREATE DATASHARE。對於 ALTER DATASHARE,具有要新增或移除之資料共用物件所需許可的資料共用擁有者可能會變更資料共用。如需相關資訊,請參閱 ALTER DATASHARE。
身為生產者管理員,當您捨棄資料共用時,資料共用不會再列在取用者叢集上。使用者叢集上從捨棄的資料共用中建立的資料庫和結構描述參考會繼續存在,但其中沒有任何物件。取用者叢集管理員必須手動刪除這些資料庫。
在取用者方面,取用者叢集管理員可以透過從資料共用建立資料庫來決定哪些使用者和角色應該可以存取共用資料。根據您在建立資料庫時所選擇的選項,您可以按照下列方式控制對資料庫的存取。如需從資料共用建立資料庫的詳細資訊,請參閱 CREATE DATABASE。
如需設定資料共用和從取用者讀取資料的詳細資訊,請參閱共用 AWS 帳戶內的資料的讀取存取權。
在沒有子WITHPERMISSIONS句的情況下建立資料庫
管理員可以在資料庫或結構描述層級上控制存取權。若要在結構描述層級上控制存取權,管理員必須從在資料共用中建立的 Amazon Redshift 資料庫建立外部結構描述。
下列範例會授予在資料庫層級和結構描述層級上存取共用資料表的許可。
GRANT USAGE ON DATABASE sales_db TO Bob; CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE sales_db SCHEMA 'public'; GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
若要進一步限制存取權,您可以在共用物件頂端建立檢視,僅公開必要的資料。然後,您可以使用這些視觀表將存取權提供給使用者和角色。
一旦授予使用者資料庫或結構描述的存取權後,他們就可以存取該資料庫或結構描述中的所有共用物件。
使用 WITHPERMISSIONS子句建立資料庫
授予資料庫或結構描述的使用權之後,系統管理員可以使用與本機資料庫或結構描述相同的權限授予程序,進一步控制存取權。如果沒有個別物件許可,即使獲得USAGE許可,使用者也無法存取資料共用資料庫或結構描述中的任何物件。
下列範例會授予在資料庫層級上存取共用資料表的許可。
GRANT USAGE ON DATABASE sales_db TO Bob; GRANT USAGE FOR SCHEMAS IN DATABASE sales_db TO Bob; GRANT SELECT ON sales_db.public.tickit_sales_redshift TO Bob;
授予資料庫或結構描述的存取權之後,使用者仍然需要獲得資料庫或結構描述中任何您要讓他們存取之物件的相關權限。
使用 進行精細共用 WITH PERMISSIONS
讓叢集或 Serverless 工作群組查詢資料共用
此步驟假設資料共用源自您帳戶中的其他叢集或 Amazon Redshift Serverless 命名空間,或者來自另一個帳戶,且已與您正在使用的命名空間相關聯。
取用者資料庫管理員可以從資料共用建立資料庫。
CREATE DATABASE my_ds_db [WITH PERMISSIONS] FROM DATASHARE my_datashare OF NAMESPACE 'abc123def';
如果您建立資料庫WITHPERMISSIONS,您可以將資料共用物件的精細許可授予不同的使用者和角色。如果沒有這樣做,對資料共用資料庫授予USAGE許可的所有使用者和角色都會授予資料共用資料庫中所有物件的所有許可。
以下說明如何將權限授予 Redshift 資料庫使用者或角色。您必須連線到本機資料庫,才能執行這些陳述式。如果您在執行授予陳述式之前在資料共用資料庫上執行USE命令,則無法執行這些陳述式。
GRANT USAGE ON DATABASE my_ds_db TO ROLE data_eng; GRANT CREATE, USAGE ON SCHEMA my_ds_db.my_shared_schema TO ROLE data_eng; GRANT ALL ON ALL TABLES IN SCHEMA my_ds_db.my_shared_schema TO ROLE data_eng; GRANT USAGE ON DATABASE my_ds_db TO bi_user; GRANT USAGE ON SCHEMA my_ds_db.my_shared_schema TO bi_user; GRANT SELECT ON my_ds_db.my_shared_schema.table1 TO bi_user;
在 Amazon Redshift 資料共用中使用檢視
生產者叢集可以共用一般、近期繫結和具體化視觀表。共用一般檢視或近期繫結檢視時,您不需要共用基底資料表。下表顯示資料共用如何支援檢視。
檢視表名稱 | 可以將此檢視新增到資料共用嗎? | 取用者可以在跨叢集的資料共用物件上建立此檢視嗎? |
---|---|---|
一般檢視 | 是 | 否 |
近期繫結檢視 | 是 | 是 |
具體化視觀表 | 是 | 是,但僅限完整的重新整理 |
下面的查詢顯示資料共用支援的一般檢視輸出。如需一般檢視定義的資訊,請參閱 CREATE VIEW。
SELECT * FROM tickit_db.public.myevent_regular_vw ORDER BY eventid LIMIT 5; eventid | eventname ----------+------------- 3835 | LeAnn Rimes 3967 | LeAnn Rimes 4856 | LeAnn Rimes 4948 | LeAnn Rimes 5131 | LeAnn Rimes
下面的查詢顯示資料共用支援的近期繫結檢視輸出。如需近期繫結檢視的詳細資訊,請參閱 CREATE VIEW。
SELECT * FROM tickit_db.public.event_lbv ORDER BY eventid LIMIT 5; eventid | venueid | catid | dateid | eventname | starttime --------+---------+-------+--------+------------------------------+--------------------- 1 | 305 | 8 | 1851 | Gotterdammerung | 2008-01-25 14:30:00 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00 3 | 302 | 8 | 1935 | Salome | 2008-04-19 14:30:00 4 | 309 | 8 | 2090 | La Cenerentola (Cinderella) | 2008-09-21 14:30:00 5 | 302 | 8 | 1982 | Il Trovatore | 2008-06-05 19:00:00
下面的查詢顯示資料共用支援的具體化視觀表輸出。如需具體化視觀表的詳細資訊,請參閱 CREATE MATERIALIZED VIEW。
SELECT * FROM tickit_db.public.tickets_mv; catgroup | qtysold ----------+--------- Concerts | 195444 Shows | 149905
您可以維護生產者叢集中所有租用戶的通用資料表。您也可以與取用者叢集共用依維度資料欄 (例如 tenant_id
(account_id
或 namespace_id
)) 篩選的資料子集。若要這麼做,您可以在基底資料表上定義檢視,並在這些 ID 欄上使用篩選,例如 current_aws_account = tenant_id
。在取用者方面,當您查詢檢視時,您只會看到符合您帳戶資格的資料列。若要這麼做,您可以使用 Amazon Redshift 內容函數 current_aws_account
和 current_namespace
。
下列查詢會傳回目前 Amazon Redshift 叢集所在的帳戶 ID。如果您已連線到 Amazon Redshift,則可以執行此查詢。
select current_user, current_aws_account; current_user | current_aws_account -------------+-------------------- dwuser | 111111111111 (1row)
下列查詢會傳回目前 Amazon Redshift 叢集的命名空間。如果您已連線到資料庫,則可以執行此查詢。
select current_user, current_namespace; current_user | current_namespace -------------+-------------------------------------- dwuser | 86b5169f-01dc-4a6f-9fbb-e2e24359e9a8 (1 row)
資料共用中具體化視觀表的增量重新整理
共用基礎資料表時,Amazon Redshift 支援消費者資料共用中具體化視觀表的增量重新整理。增量重新整理是一種操作,其中 Amazon Redshift 會識別在上一次重新整理後基礎資料表或資料表中的變更,並僅更新具體化檢視中的對應記錄。如需此行為的詳細資訊,請參閱 CREATE MATERIALIZED VIEW。
使用 IAM 政策管理對資料共用API操作的存取
若要控制對資料共用API操作的存取,請使用IAM動作型政策。如需有關如何管理IAM政策的資訊,請參閱 IAM 使用者指南 中的管理IAM政策。
如需使用資料共用API操作所需的許可資訊,請參閱 Amazon Redshift 管理指南 中的使用資料共用API操作所需的許可。
若要讓跨帳戶資料共用更安全,您可以使用 AuthorizeDataShare
和 ConsumerIdentifier
DeauthorizeDataShare
API操作的條件式金鑰。透過這樣做,您可以明確控制 AWS 帳戶 可以對兩個API操作進行呼叫的 。
對於不是您自己帳戶的取用者,您可以拒絕授權或取消授權資料共用。若要這麼做,請在IAM政策中指定 AWS 帳戶 號碼。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "redshift:AuthorizeDataShare", "redshift:DeauthorizeDataShare" ], "Resource": "*", "Condition": { "StringNotEquals": { "redshift:ConsumerIdentifier": "555555555555" } } } ] }
您可以在 IAM政策中允許具有 的 DataShareArn testshare2
生產者與具有 111122223333 AWS 帳戶 的消費者明確共用 。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "redshift:AuthorizeDataShare", "redshift:DeauthorizeDataShare" ], "Resource": "arn:aws:redshift:us-east-1:666666666666:datashare:af06285e-8a45-4ee9-b598-648c218c8ff1/testshare2", "Condition": { "StringEquals": { "redshift:ConsumerIdentifier": "111122223333" } } } ] }
查詢資料庫
在 Amazon Redshift 中存取共用資料
您可以使用標準SQL介面或JDBCODBC驅動程式,以及資料 來探索共用資料API。您也可以透過熟悉的商業智慧 (BI) 和分析工具,以高效能方式查詢資料。您可以參考其他 Amazon Redshift 資料庫中的物件來執行查詢,只要這些資料庫是您有權存取的叢集的本機和遠端資料庫即可。
只要保持連線至叢集中的本機資料庫,就可以這麼做。然後,您可以從資料庫建立取用者資料庫以使用共用資料。
完成此操作後,您可以連線至取用者資料庫,並使用部分符號查詢共用物件。或者,您可以使用三部分符號 () 連線到本機叢集資料庫,並查詢取用者資料庫中的物件
。您也可以使用取用者資料庫中結構描述的外部結構描述連結進行查詢。您可以同時查詢本機資料和相同查詢內其他叢集共用的資料。這類查詢可以參考來自目前連線資料庫和其他未連線資料庫的物件,包括從資料共用建立的取用者資料庫。consumer_database_name
.schema_name
.table_name
在 Amazon Redshift 中存取資料共用的中繼資料
為了協助叢集管理員探索資料共用,Amazon Redshift 提供了一組中繼資料檢視來列出資料共用。這些檢視會列出叢集中建立的資料共用,以及從相同帳戶內的其他叢集、其他帳戶或其他 AWS 區域接收的資料共用。這些檢視會顯示下列資訊:
叢集共用和接收的資料共用
資料共用中資料庫物件的內容,包括基本共用中繼資料、物件和取用者
使用 SHOW SCHEMAS 檢視與連線資料庫相關聯的資料共用中共用結構描述的清單。如需詳細資訊,請參閱SHOW SCHEMAS。
使用 SHOWTABLES可從與連線資料庫相關聯的資料共用,檢視共用結構描述中的資料表清單。如需詳細資訊,請參閱SHOW TABLES。
使用 SHOW COLUMNS 檢視與連線資料庫相關聯的資料共用中共用資料表的資料欄清單。如需詳細資訊,請參閱SHOW COLUMNS。
使用 SVV_DATASHARES 檢視在您的叢集 (傳出) 中建立並與他人共用 (傳入) 的所有資料共用清單。如需詳細資訊,請參閱SVV_DATASHARES。
使用 SVV_DATASHARE_CONSUMERS 檢視資料取用者清單。如需詳細資訊,請參閱SVV_DATASHARE_CONSUMERS。
使用 SVV_DATASHARE_OBJECTS 檢視叢集 (傳出) 中建立並與他人共用 (傳入) 的所有資料共用中的物件清單。如需詳細資訊,請參閱SVV_DATASHARE_OBJECTS。
將 Amazon Redshift 資料共用與商業智慧工具整合
若要將資料共用與商業智慧 (BI) 工具整合,建議您使用 Amazon Redshift JDBC或ODBC驅動程式。
Amazon Redshift JDBC和ODBC驅動程式支援驅動程式中的 GetCatalogs
API 操作,這會傳回所有資料庫的清單,包括從資料共用建立的資料庫。這些驅動程式也支援下游作業,例如 GetSchemas
、GetTables
等,這些作業會從 GetCatalogs
傳回的所有資料庫傳回資料。即使呼叫中未明確指定目錄,驅動程式也會提供此支援。如需 JDBC或 ODBC驅動程式的詳細資訊,請參閱 Amazon Redshift 管理指南 中的在 Amazon Redshift 中設定連線。
您可以直接連線至從資料共用建立的取用者資料庫,方式與任何其他資料庫相同。如果您的工具中有連線切換使用者介面,資料庫清單應包含從資料共用建立的資料庫。您可以使用 SVV_REDSHIFT_ 探索這些取用者資料庫DATABASES。