

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á.

# Trabalhar com visualizações do Catálogo de dados do Glue
<a name="SECTION-jobs-glue-data-catalog-views"></a>

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, use 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](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html) 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 da exibição**: ao aplicar filtros à sua visualização no Catálogo de dados, você garante que os registros de dados em uma exibição do 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 vizualizações no Data Catalog não são suscetíveis a comandos SQL de acessos mal-intencionados.
+ **Compartilhamento simples de dados** — compartilhe dados com outras AWS contas sem mover dados. Para obter mais informações, consulte [Compartilhamento de dados entre contas no Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-permissions.html).

## Criação de uma visualização do Catálogo de Dados
<a name="SECTION-jobs-glue-data-catalog-views-create"></a>

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

------
#### [ Using SQL ]

Veja a seguir a sintaxe para a criação de uma exibição do Catálogo de dados. Observe o tipo de visualização `MULTI DIALECT`. Isso distingue a exibição do Catálogo de dados de outras visualizações. O predicado `SECURITY` é especificado como `DEFINER`. Isso indica uma visualização do Catálogo de dados com semântica `DEFINER`.

```
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 instrução `CREATE`, 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 exibição no modo de simulação, usando SQL, para testar a criação da exibiçã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 da 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.

Use 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
<a name="SECTION-jobs-glue-data-catalog-views-supported-operations"></a>

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, apresentamos um exemplo:

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

  A seguir, é demonstrado como alterar uma visualização para atualizar o 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**

  Lista todas as visualizações existentes no catálogo, incluindo as visualizações regulares, as visualizações com múltiplos dialetos (MDV, na sigla em inglês) e as MDVs sem suporte ao 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 Building [AWS Glue Data Catalog no Developer](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html) Guide. AWS Lake Formation 

## Consulta de uma visualização do Catálogo de Dados
<a name="SECTION-jobs-glue-data-catalog-views-querying"></a>

 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. O perfil de runtime do trabalho deve ter a permissão `SELECT` do 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 uma aplicação do EMR Sem Servidor no EMR Studio, execute a consulta a seguir para acessar uma exibição.

```
SELECT * from my_database.catalog_view LIMIT 10;
```

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

```
select invoker_principal();
```

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

## Considerações e limitações
<a name="SECTION-jobs-glue-data-catalog-views-considerations"></a>

Quando você cria exibições do Catálogo de dados, o seguinte se aplica:
+ Você só pode criar exibições do Catálogo de dados com o Amazon EMR 7.6 e versões superiores.
+ 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 de base não devem ter a permissão de data lake `IAMAllowedPrincipals` 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, o erro *Visualizações de vários dialetos só podem fazer referência a tabelas gerenciadas pelo Lake Formation* ocorrerá. Para obter informações sobre como registrar locais do Amazon S3 em Lake Formation, consulte [Registro de um local do Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) 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 entre contas ou regiões, a visualização inteira deve ser compartilhada entre contas e entre regiões, usando links de recurso do Lake Formation.
+ As funções definidas pelo usuário (UDFs) não são suportadas.
+ É possível usar visualizações baseadas em tabelas do Iceberg. Os formatos de tabela aberta Apache Hudi e Delta Lake também são compatíveis.
+ 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 exibição do Catálogo de dados do Glue com uma coluna chamada `Castle`, a coluna criada no Catálogo de dados do Glue será transformada em minúsculas, para `castle`. Se você especificar o nome da coluna em uma consulta DML como `Castle` ou `CASTLE`, o EMR Spark mudará o nome para letras minúsculas para você executar a consulta. Porém, o título da coluna é exibido usando as letras maiúsculas e minúsculas que você especificou na consulta. 

  Se 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 Catálogo de dados do Glue, defina `spark.sql.caseSensitive=true`.