本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Glue Data Catalog 檢視
您可以在 Glue Data Catalog AWS 中建立和管理檢視,以搭配 EMR Serverless 使用。這些通常稱為 AWS Glue Data Catalog 檢視。這些檢視非常有用,因為它們支援多個 SQL 查詢引擎,因此您可以跨不同 AWS 服務存取相同的檢視,例如 EMR Serverless Amazon Athena和 Amazon Redshift。
透過在 Data Catalog 中建立檢視,您可以在 中使用資源授予和標籤型存取控制 AWS Lake Formation 來授予其存取權。使用此存取控制方法,您不需要為建立檢視時參考的資料表設定額外的存取權。此授予許可的方法稱為定義者語意,而這些檢視稱為定義者檢視。如需 Lake Formation 中存取控制的詳細資訊,請參閱 AWS Lake Formation 開發人員指南中的授予和撤銷 Data Catalog 資源的許可。
Data Catalog 檢視適用於下列使用案例:
精細存取控制 – 您可以建立檢視,根據使用者所需的許可來限制資料存取。例如,您可使用 Data Catalog 中的視觀表阻止不在 HR 部門工作的員工查看個人身分識別資訊 (PII)。
完整檢視定義 – 透過在 Data Catalog 中的檢視上套用篩選條件,您可以確保 Data Catalog 中檢視中可用的資料記錄一律完整。
增強安全性 – 用於建立檢視的查詢定義必須已完成。此優點表示 Data Catalog 中的檢視較不容易受到惡意執行者的 SQL 命令影響。
簡單共用資料 – 與其他 AWS 帳戶共用資料而不移動資料。如需詳細資訊,請參閱 Lake Formation 中的跨帳戶資料共用。
建立 Data Catalog 檢視
有不同的方法來建立 Data Catalog 檢視。這包括使用 AWS CLI 或 Spark SQL。以下是幾個範例。
支援的檢視操作
下列命令片段顯示使用 Data Catalog 檢視的各種方式:
建立檢視
建立資料型錄檢視。以下是顯示從現有資料表建立檢視的範例:
CREATE PROTECTED MULTI DIALECT VIEW catalog_view SECURITY DEFINER AS SELECT * FROM my_catalog.my_database.source_table
ALTER VIEW
可用的語法:
ALTER VIEW view_name [FORCE] ADD DIALECT AS query
ALTER VIEW view_name [FORCE] UPDATE DIALECT AS query
ALTER VIEW view_name DROP DIALECT
您可以使用
FORCE ADD DIALECT
選項,根據新的引擎方言強制更新結構描述和子物件。請注意,如果您不使用 更新其他引擎方言FORCE
,這樣做可能會導致查詢錯誤。以下顯示範例:ALTER VIEW catalog_view FORCE ADD DIALECT AS SELECT order_date, sum(totalprice) AS price FROM source_table GROUP BY orderdate;
下列顯示如何變更檢視以更新方言:
ALTER VIEW catalog_view UPDATE DIALECT AS SELECT count(*) FROM my_catalog.my_database.source_table;
描述檢視
描述檢視的可用語法:
SHOW COLUMNS {FROM|IN} view_name [{FROM|IN} database_name]
– 如果使用者具有描述檢視所需的 AWS Glue 和 Lake Formation 許可,他們可以列出資料欄。以下顯示顯示欄的幾個範例命令:SHOW COLUMNS FROM my_database.source_table; SHOW COLUMNS IN my_database.source_table;
DESCRIBE view_name
– 如果使用者具有描述檢視所需的 AWS Glue 和 Lake Formation 許可,他們可以列出檢視中的資料欄及其中繼資料。
DROP VIEW
可用的語法:
DROP VIEW [ IF EXISTS ] view_name
下列範例顯示
DROP
陳述式,在捨棄檢視之前測試檢視是否存在:DROP VIEW IF EXISTS catalog_view;
顯示建立檢視
SHOW CREATE VIEW view_name
– 顯示建立指定檢視的 SQL 陳述式。以下是顯示建立資料型錄檢視的範例:SHOW CREATE TABLE my_database.catalog_view; CREATE PROTECTED MULTI DIALECT VIEW my_catalog.my_database.catalog_view ( net_profit, customer_id, item_id, sold_date) TBLPROPERTIES ( 'transient_lastDdlTime' = '1736267222') SECURITY DEFINER AS SELECT * FROM my_database.store_sales_partitioned_lf WHERE customer_id IN (SELECT customer_id from source_table limit 10)
顯示檢視
列出目錄中的所有檢視,例如非正規檢視、多方位檢視 (MDV) 和不含 Spark 方言的 MDV。可用的語法如下:
SHOW VIEWS [{ FROM | IN } database_name] [LIKE regex_pattern]
:以下顯示顯示檢視的範例命令:
SHOW VIEWS IN marketing_analytics LIKE 'catalog_view*';
如需建立和設定資料型錄檢視的詳細資訊,請參閱《 AWS Lake Formation 開發人員指南》中的建置 AWS Glue Data Catalog 檢視。
查詢 Data Catalog 檢視
建立 Data Catalog 檢視後,您可以使用已啟用 AWS Lake Formation 精細存取控制的 Amazon EMR Serverless Spark 任務來查詢它。任務執行時間角色必須具有 Data Catalog 檢視上的 Lake Formation SELECT
許可。您不需要授予檢視中參考的基礎資料表存取權。
完成所有設定後,您就可以查詢檢視。例如,在 EMR Studio 中建立 EMR Serverless 應用程式後,您可以執行下列查詢來存取檢視。
SELECT * from
my_database
.catalog_view
LIMIT 10;
實用的函數是 invoker_principal
。它會傳回 EMRS 任務執行期角色的唯一識別符。這可用於根據調用主體來控制檢視輸出。您可以使用它在檢視中新增條件,根據呼叫角色來精簡查詢結果。任務執行期角色必須具有 IAM LakeFormation:GetDataLakePrincipal
動作的許可,才能使用此函數。
select invoker_principal();
例如,您可以將此函數新增至WHERE
子句,以精簡查詢結果。
考量與限制
當您建立 Data Catalog 檢視時,會套用下列條件:
您只能使用 Amazon EMR 7.6 及更高版本建立 Data Catalog 檢視。
Data Catalog 檢視定義程式必須
SELECT
能夠存取檢視存取的基礎基礎資料表。如果特定基礎資料表具有對定義者角色施加的任何 Lake Formation 篩選條件,則建立資料目錄檢視會失敗。基礎資料表不得具有 Lake Formation 中的
IAMAllowedPrincipals
資料湖許可。如果存在,則錯誤多重方言檢視只能參考沒有 IAMAllowedPrincipals 許可的資料表。資料表的 Amazon S3 位置必須註冊為 Lake Formation 資料湖位置。如果資料表未註冊,則錯誤多方位檢視可能只會參考 Lake Formation 受管資料表。如需如何在 Lake Formation 中註冊 Amazon S3 位置的詳細資訊,請參閱《 AWS Lake Formation 開發人員指南》中的註冊 Amazon S3 位置。
您只能建立
PROTECTED
Data Catalog 檢視。不支援UNPROTECTED
檢視。您無法在 Data Catalog 檢視定義中參考另一個 AWS 帳戶中的資料表。您也無法在位於不同區域的相同帳戶中參考資料表。
若要跨帳戶或區域共用資料,整個檢視必須使用 Lake Formation 資源連結跨帳戶和跨區域共用。
不支援使用者定義的函數 UDFs)。
您可以根據 Iceberg 資料表使用檢視。也支援開放資料表格式 Apache Hudi 和 Delta Lake。
您無法在 Data Catalog 檢視中參考其他檢視。
AWS Glue Data Catalog 檢視結構描述一律使用小寫儲存。例如,如果您使用 DDL 陳述式來建立名為 的資料欄的 Glue Data Catalog 檢視
Castle
,則在 Glue Data Catalog 中建立的資料欄將小寫為castle
。如果您接著將 DML 查詢中的資料欄名稱指定為Castle
或CASTLE
,EMR Spark 會為您將名稱設為小寫,以執行查詢。但是,欄標題會使用您在查詢中指定的大小寫顯示。如果您希望在 DML 查詢中指定的資料欄名稱與 Glue Data Catalog 中的資料欄名稱不相符的情況下,查詢失敗,您可以設定
spark.sql.caseSensitive=true
。