使用 Glue Data Catalog 檢視 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 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。以下是幾個範例。

Using SQL

以下顯示建立 Data Catalog 檢視的語法。請注意MULTI DIALECT檢視類型。這會將 Data Catalog 檢視與其他檢視區分開來。SECURITY 述詞指定為 DEFINER。這表示具有DEFINER語意的 Data Catalog 檢視。

CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW [IF NOT EXISTS] view_name [(column_name [COMMENT column_comment], ...) ] [ COMMENT view_comment ] [TBLPROPERTIES (property_name = property_value, ... )] SECURITY DEFINER AS query;

以下是遵循語法的範例CREATE陳述式:

CREATE PROTECTED MULTI DIALECT VIEW catalog_view SECURITY DEFINER AS SELECT order_date, sum(totalprice) AS price FROM source_table GROUP BY order_date

您也可以使用 SQL 在試轉模式下建立檢視,以測試檢視建立,而無需實際建立資源。使用此選項會產生「試執行」來驗證輸入,如果驗證成功,則傳回將代表檢視之 Glue AWS 資料表物件的 JSON。在此情況下,不會建立實際檢視。

CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW view_name SECURITY DEFINER [ SHOW VIEW JSON ] AS view-sql
Using the AWS CLI
注意

當您使用 CLI 命令時,不會剖析用來建立檢視的 SQL。這可能會導致建立檢視的案例,但查詢不成功。請務必在建立檢視之前測試 SQL 語法。

您可以使用下列 CLI 命令來建立檢視:

aws glue create-table --cli-input-json '{ "DatabaseName": "database", "TableInput": { "Name": "view", "StorageDescriptor": { "Columns": [ { "Name": "col1", "Type": "data-type" }, ... { "Name": "col_n", "Type": "data-type" } ], "SerdeInfo": {} }, "ViewDefinition": { "SubObjects": [ "arn:aws:glue:aws-region:aws-account-id:table/database/referenced-table1", ... "arn:aws:glue:aws-region:aws-account-id:table/database/referenced-tableN", ], "IsProtected": true, "Representations": [ { "Dialect": "SPARK", "DialectVersion": "1.0", "ViewOriginalText": "Spark-SQL", "ViewExpandedText": "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 查詢中的資料欄名稱指定為 CastleCASTLE,EMR Spark 會為您將名稱設為小寫,以執行查詢。但是,欄標題會使用您在查詢中指定的大小寫顯示。

    如果您希望在 DML 查詢中指定的資料欄名稱與 Glue Data Catalog 中的資料欄名稱不相符的情況下,查詢失敗,您可以設定 spark.sql.caseSensitive=true