Trabalhando com visualizações do Glue Data Catalog - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Trabalhando com visualizações do Glue Data Catalog

Você pode criar e gerenciar visualizações no AWS Glue Data Catalog para uso com o EMR Serverless. Elas são comumente conhecidas como visualizações do AWS Glue Data Catalog. Essas visualizações são úteis porque oferecem suporte a vários mecanismos de consulta SQL, para que você possa acessar a mesma visualização em diferentes AWS serviços, como EMR Serverless e Amazon Athena Amazon Redshift.

Ao criar uma exibição no Catálogo de Dados, você pode usar concessões de recursos e controles de acesso baseados em tags AWS Lake Formation para conceder acesso a ela. Usando esse método de controle de acesso, você não precisa configurar acesso adicional às tabelas referenciadas ao criar a exibição. Esse método de concessão de permissões é chamado de semântica definidora, e essas exibições são chamadas de vizualizações definidoras. Para obter mais informações sobre o controle de acesso no Lake Formation, consulte Conceder e revogar permissões nos recursos do Catálogo de Dados no Guia do Desenvolvedor do AWS Lake Formation.

As vizualizações do Data Catalog são úteis para os seguintes casos de uso:

  • Controle de acesso granular: é possível criar uma visualização que restringe o acesso aos dados com base nas permissões necessárias ao usuário. Por exemplo, você pode usar as exibições do Data Catalog para evitar que funcionários que não trabalham no departamento de RH vejam informações de identificação pessoal (PII).

  • Definição completa de exibição — Ao aplicar filtros em sua exibição no Catálogo de Dados, você garante que os registros de dados disponíveis em uma exibição no Catálogo de Dados estejam sempre completos.

  • Segurança aprimorada — A definição da consulta usada para criar a exibição deve estar completa. Esse benefício significa que as visualizações no Catálogo de Dados são menos suscetíveis aos comandos SQL de agentes mal-intencionados.

  • Compartilhamento simples de dados — compartilhe dados com outras AWS contas sem mover dados. Para obter mais informações, consulte Cross-account data sharing in Lake Formation.

Criação de uma visualização do Catálogo de Dados

Há diferentes maneiras de criar uma exibição do Catálogo de Dados. Isso inclui o uso do AWS CLI ou do Spark SQL. Seguem alguns exemplos.

Using SQL

A seguir, mostramos a sintaxe para criar uma exibição do Catálogo de Dados. Observe o tipo de MULTI DIALECT visualização. Isso distingue a exibição do Catálogo de Dados de outras visualizações. O SECURITY predicado é especificado comoDEFINER. Isso indica uma visualização do Catálogo de Dados com DEFINER semântica.

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;

Veja a seguir um exemplo de CREATE declaração, seguindo a sintaxe:

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

Você também pode criar uma visualização no modo de execução a seco, usando SQL, para testar a criação da visualização, sem realmente criar o recurso. O uso dessa opção resulta em uma “execução seca” que valida a entrada e, se a validação for bem-sucedida, retorna o JSON do objeto da tabela AWS Glue que representará a visualização. Nesse caso, a visualização real não é criada.

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

Quando você usa o comando CLI, o SQL usado para criar a exibição não é analisado. Isso pode resultar em um caso em que a exibição é criada, mas as consultas não são bem-sucedidas. Certifique-se de testar sua sintaxe SQL antes de criar a exibição.

Você usa o seguinte comando da CLI para criar uma visualização:

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" } ] } } }'

Operações compatíveis para visualizações

Os fragmentos de comandos apresentados a seguir mostram como é possível trabalhar com as visualizações do Catálogo de Dados de diferentes formas:

  • CREATE VIEW

    Cria uma visualização do Catálogo de Dados. A seguir, um exemplo que demonstra a criação da visualização usando uma tabela existente:

    CREATE PROTECTED MULTI DIALECT VIEW catalog_view SECURITY DEFINER AS SELECT * FROM my_catalog.my_database.source_table
  • ALTER VIEW

    Sintaxe disponível:

    • ALTER VIEW view_name [FORCE] ADD DIALECT AS query

    • ALTER VIEW view_name [FORCE] UPDATE DIALECT AS query

    • ALTER VIEW view_name DROP DIALECT

    É possível usar a opção FORCE ADD DIALECT para aplicar a atualização do esquema e dos objetos secundários de acordo com o novo dialeto do mecanismo. Lembre-se de que essa ação pode resultar em erros de consulta, caso a opção FORCE não seja usada para atualizar os demais dialetos do mecanismo. A seguir, um exemplo que demonstra a aplicação:

    ALTER VIEW catalog_view FORCE ADD DIALECT AS SELECT order_date, sum(totalprice) AS price FROM source_table GROUP BY orderdate;

    A seguir, um exemplo que demonstra a alteração de uma visualização para a atualização do dialeto:

    ALTER VIEW catalog_view UPDATE DIALECT AS SELECT count(*) FROM my_catalog.my_database.source_table;
  • DESCRIBE VIEW

    Sintaxe disponível para descrever uma visualização:

    • SHOW COLUMNS {FROM|IN} view_name [{FROM|IN} database_name]— Se o usuário tiver as permissões necessárias de AWS Glue e Lake Formation para descrever a visualização, ele poderá listar as colunas. A seguir, alguns exemplos de comandos que demonstram como visualizar colunas:

      SHOW COLUMNS FROM my_database.source_table; SHOW COLUMNS IN my_database.source_table;
    • DESCRIBE view_name— Se o usuário tiver as permissões necessárias de AWS Glue e Lake Formation para descrever a visualização, ele poderá listar as colunas na exibição junto com seus metadados.

  • DROP VIEW

    Sintaxe disponível:

    • DROP VIEW [ IF EXISTS ] view_name

      A seguir, um exemplo de instrução DROP que demonstra como realizar um teste para verificar a existência da visualização antes de sua remoção:

      DROP VIEW IF EXISTS catalog_view;
  • MOSTRAR CRIAR VISUALIZAÇÃO

    • SHOW CREATE VIEW view_name: mostra a instrução SQL responsável pela criação da visualização especificada. A seguir, um exemplo que demonstra o processo de criação de uma visualização no Catálogo de Dados:

      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)
  • SHOW VIEWS

    Liste todas as visualizações no catálogo, como visualizações regulares, visualizações com vários dialetos (MDV) e MDV sem o dialeto Spark. A sintaxe disponível é a seguinte:

    • SHOW VIEWS [{ FROM | IN } database_name] [LIKE regex_pattern]:

      A seguir, um exemplo que demonstra um comando para mostrar as visualizações:

      SHOW VIEWS IN marketing_analytics LIKE 'catalog_view*';

Para obter mais informações sobre como criar e configurar visualizações do catálogo de dados, consulte Como criar visualizações do catálogo de dados do AWS Glue no Guia do AWS Lake Formation desenvolvedor.

Consulta de uma visualização do Catálogo de Dados

Depois de criar uma visualização do catálogo de dados, você pode consultá-la usando uma tarefa do Amazon EMR Serverless Spark que tenha AWS Lake Formation um controle de acesso refinado ativado. A função de tempo de execução do trabalho deve ter a SELECT permissão Lake Formation na visualização do Catálogo de Dados. Não é necessário conceder acesso às tabelas subjacentes referenciadas na visualização.

Depois de configurar tudo, você pode consultar sua exibição. Por exemplo, depois de criar um aplicativo EMR Serverless no EMR Studio, você pode executar a consulta a seguir para acessar uma visualização.

SELECT * from my_database.catalog_view LIMIT 10;

Uma função útil é invoker_principal a. Ele retorna o identificador exclusivo da função de tempo de execução do trabalho do EMRS. Isso pode ser usado para controlar a saída da visualização, com base no principal de invocação. Você pode usar isso para adicionar uma condição à sua visualização que refina os resultados da consulta, com base na função de chamada. A função de tempo de execução do trabalho deve ter permissão para que a ação LakeFormation:GetDataLakePrincipal do IAM use essa função.

select invoker_principal();

Você pode adicionar essa função a uma WHERE cláusula, por exemplo, para refinar os resultados da consulta.

Considerações e limitações

Quando você cria exibições do Catálogo de Dados, o seguinte se aplica:

  • Você só pode criar visualizações do catálogo de dados com o Amazon EMR 7.6 e superior.

  • O responsável pela definição da visualização do Catálogo de Dados deve ter permissão de acesso SELECT nas tabelas de base subjacentes acessadas pela visualização. A operação de criação da visualização do Catálogo de Dados não será bem-sucedida caso uma das tabelas de base tenha filtros do Lake Formation atribuídos ao perfil “definer”.

  • As tabelas base não devem ter a permissão IAMAllowedPrincipals de data lake no Lake Formation. Se presente, o erro de visualizações de vários dialetos só pode fazer referência a tabelas sem a permissão do IAMAllowed Principal.

  • A localização da tabela no Amazon S3 deve ser registrada como uma localização de data lake do Lake Formation. Se a tabela não estiver registrada, ocorrerá o erro de visualizações de vários dialetos somente referenciar tabelas gerenciadas pelo Lake Formation. Para obter informações sobre como registrar locais do Amazon S3 em Lake Formation, consulte Registro de um local do Amazon S3 no Guia do desenvolvedor. AWS Lake Formation

  • Você só pode criar vizualizações PROTECTED do Data Catalog. Não há suporte para exibições UNPROTECTED.

  • Você não pode referenciar tabelas em outra AWS conta em uma definição de exibição do Catálogo de Dados. Além disso, não é possível referenciar uma tabela da mesma conta que esteja em uma região diferente.

  • Para compartilhar dados em uma conta ou região, toda a visualização deve ser compartilhada entre contas e regiões, usando links de recursos do Lake Formation.

  • As funções definidas pelo usuário (UDFs) não são suportadas.

  • Você pode usar visualizações com base nas tabelas do Iceberg. Os formatos de tabela aberta Apache Hudi e Delta Lake também são suportados.

  • Não é possível fazer referência a outras vizualizações nas exibições do Data Catalog.

  • Um esquema de visualização do AWS Glue Data Catalog é sempre armazenado em letras minúsculas. Por exemplo, se você usar uma instrução DDL para criar uma visualização do Glue Data Catalog com uma coluna chamadaCastle, a coluna criada no Glue Data Catalog será transformada em minúsculas, para. castle Se você especificar o nome da coluna em uma consulta DML como Castle ouCASTLE, o EMR Spark colocará o nome em minúsculas para que você possa executar a consulta. Mas o título da coluna é exibido usando as letras maiúsculas e minúsculas que você especificou na consulta.

    Se você quiser que uma consulta falhe em um caso em que o nome da coluna especificado na consulta DML não corresponda ao nome da coluna no Glue Data Catalog, você pode definirspark.sql.caseSensitive=true.