

# Usar visualizações do Catálogo de Dados no Athena
<a name="views-glue"></a>

A criação de visualizações do catálogo de dados no Amazon Athena exige uma instrução `CREATE VIEW` especial. Consultá-las usa a sintaxe `SELECT` do SQL convencional. As visualizações do Catálogo de Dados também são chamadas de visualizações de *vários dialetos*, ou MDVs.

## Criar uma visualização do Catálogo de Dados
<a name="views-glue-creating-a-data-catalog-view"></a>

Para criar uma visualização do Catálogo de Dados no Athena, use a sintaxe a seguir.

```
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW {{view_name}} 
SECURITY DEFINER 
[ SHOW VIEW JSON ]
AS {{athena-sql-statement}}
```

**nota**  
A opção `SHOW VIEW JSON` se aplica somente às visualizações do Catálogo de Dados, e não às visualizações do Athena. O uso da opção `SHOW VIEW JSON` inicia uma "execução seca" que valida a entrada e, se a validação for bem-sucedida, retornará o JSON do objeto da tabela AWS Glue que representará a visualização. A visualização real não é criada. Se a opção `SHOW VIEW JSON` não for especificada, as validações serão feitas e a exibição será criada normalmente no Catálogo de Dados.

O exemplo de sintaxe apresentado a seguir mostra como um usuário do perfil `Definer` cria a visualização `orders_by_date` do Catálogo de Dados. O exemplo pressupõe que o perfil `Definer` tenha permissões `SELECT` completas na tabela `orders` no banco de dados `default`.

```
CREATE PROTECTED MULTI DIALECT VIEW orders_by_date 
SECURITY DEFINER 
AS 
SELECT orderdate, sum(totalprice) AS price 
FROM orders 
WHERE order_city = 'SEATTLE' 
GROUP BY orderdate
```

Para obter informações sobre sintaxe, consulte [CREATE PROTECTED MULTI DIALECT VIEW](create-view.md#create-protected-multi-dialect-view).

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

Depois que a visualização for criada, o admin do `Lake Formation` poderá conceder permissões `SELECT` na visualização do Catálogo de Dados para as entidades principais do `Invoker`. Em seguida, as entidades principais do `Invoker` poderão consultar a visualização sem ter acesso às tabelas subjacentes básicas referenciadas pela visualização. Veja a seguir um exemplo de consulta do `Invoker`.

```
SELECT * from orders_by_date where price > 5000
```

## Considerações e limitações
<a name="views-glue-limitations"></a>

A maioria das limitações de visualização a seguir do Catálogo de Dados são específicas do Athena. Para ver limitações adicionais das visualizações do Catálogo de Dados que se também aplicam a outros serviços, consulte a documentação do Lake Formation.
+ As visualizações do catálogo de dados não podem referenciar outras visualizações, links de recursos de banco de dados ou links de recursos de tabela.
+ É possível fazer referência a até dez tabelas na definição de visualização.
+ As tabelas não devem ter a permissão de data lake `IAMAllowedPrincipals` no Lake Formation. Se presente, o erro Visualizações de vários dialetos só podem fazer referência a tabelas sem permissões de IAMAllowedPrincipals permissions ocorrerá.
+ 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 dessa forma, 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 no Lake Formation, consulte [Registrar um local do Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) no *Guia do desenvolvedor do AWS Lake Formation*.
+ As chamadas das APIs [GetTables](https://docs.aws.amazon.com/glue/latest/webapi/API_GetTables.html) e [SearchTables](https://docs.aws.amazon.com/glue/latest/webapi/API_SearchTables.html) do AWS Glue não atualizam o parâmetro `IsRegisteredWithLakeFormation`. Para visualizar o valor correto para o parâmetro, use a API [GetTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetTable.html) do AWS Glue. Para obter mais informações, consulte [As APIs GetTables e SearchTables não atualizam o valor do parâmetro IsRegisteredWithLakeFormation](https://docs.aws.amazon.com/lake-formation/latest/dg/limitations.html#issue-GetTables-value) no *Guia do desenvolvedor do AWS Lake Formation*.
+ A entidade principal `DEFINER` pode ser somente um perfil do IAM.
+ O perfil `DEFINER` deve ter permissões `SELECT` completas (concedíveis) nas tabelas subjacentes.
+ Não há suporte para as visualizações `UNPROTECTED` do Catálogo de Dados.
+ Não há suporte para as funções definidas pelo usuário (UDFs) na definição de visualização.
+ As fontes de dados federadas do Athena não podem ser usadas em visualizações do Catálogo de Dados.
+ As visualizações do Catálogo de Dados não têm suporte para metastores externos do Hive.
+ O Athena exibe uma mensagem de erro quando detecta visualizações obsoletas. Uma exibição obsoleta é relatada quando um dos seguintes itens ocorrer:
  + A exibição faz referência a tabelas ou bancos de dados que não existem.
  + Uma alteração de esquema ou metadados é feita em uma tabela referenciada. 
  + Uma tabela referenciada é descartada e recriada com um esquema ou uma configuração diferente.

## Permissões
<a name="views-glue-permissions"></a>

As visualizações do Catálogo de Dados requerem três perfis: `Lake Formation Admin`, `Definer` e `Invoker`. 
+ **`Lake Formation Admin`** – tem acesso para configurar todas as permissões do Lake Formation.
+ **`Definer`** – cria a visualização do Catálogo de Dados. O perfil `Definer` deve ter permissões `SELECT` completas e concedíveis em todas as tabelas subjacentes às quais a definição de visualização faz referência.
+ **`Invoker`** – pode consultar a visualização do Catálogo de Dados ou verificar seus metadados. Para mostrar o invocador de uma consulta, você pode usar a função `invoker_principal()` do DML. Para obter mais informações, consulte [invoker\_principal()](functions-env3.md#functions-env3-invoker-principal).

As relações de confiança do perfil `Definer` devem permitir a ação `sts:AssumeRole` para as entidades principais de serviço do AWS Glue e do Lake Formation. Para obter mais informações, consulte [Pré-requisitos para a criação de visualizações](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html#views-prereqs) no *Guia do desenvolvedor do AWS Lake Formation*.

As permissões do IAM para o acesso ao Athena também são necessárias. Para obter mais informações, consulte [AWSPoliticas gerenciadas pela para o Amazon Athena](security-iam-awsmanpol.md).