

# Uso de vistas del Catálogo de datos en Athena
<a name="views-glue"></a>

La creación de vistas del Catálogo de datos en Amazon Athena requiere una declaración especial `CREATE VIEW`. Para consultarlas se utiliza la sintaxis SQL `SELECT` convencional. Las vistas del catálogo de datos también se conocen como vistas de *múltiples dialectos* o MDV.

## Creación de una vista del Catálogo de datos
<a name="views-glue-creating-a-data-catalog-view"></a>

Para crear una vista del Catálogo de datos de Athena, utilice la siguiente sintaxis.

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

**nota**  
La opción `SHOW VIEW JSON` se aplica únicamente a las vistas del Catálogo de datos y no a las vistas de Athena. Al utilizar la opción `SHOW VIEW JSON`, se realiza una “ejecución de prueba” que valida la entrada y, si la validación se completa correctamente, devuelve el archivo JSON del objeto de la tabla AWS Glue que representará la vista. La vista real no se crea. Si no se especifica la opción `SHOW VIEW JSON`, se completan las validaciones y la vista se crea de manera habitual en el Catálogo de datos.

En el siguiente ejemplo se muestra cómo un usuario del rol `Definer` crea la vista del Catálogo de datos `orders_by_date`. En el ejemplo se supone que el rol de `Definer` tiene todos los permisos `SELECT` en la tabla `orders` de la base de datos `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 obtener información sobre la sintaxis, consulte [CREATE PROTECTED MULTI DIALECT VIEW](create-view.md#create-protected-multi-dialect-view).

## Consulta de una vista del Catálogo de datos
<a name="views-glue-querying-a-data-catalog-view"></a>

Una vez creada la vista, el administrador de `Lake Formation` puede conceder permisos `SELECT` en la vista del Catálogo de datos a las entidades principales de `Invoker`. A continuación, las entidades principales del `Invoker` pueden consultar la vista sin tener acceso a las tablas base subyacentes a las que hace referencia la vista. A continuación se muestra un ejemplo de consulta del `Invoker`.

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

## Consideraciones y limitaciones
<a name="views-glue-limitations"></a>

La mayoría de las siguientes limitaciones de la vista del catálogo de datos se aplican específicamente a Athena. Para conocer las limitaciones adicionales de las vistas del catálogo de datos que también se aplican a otros servicios, consulte la documentación de Lake Formation.
+ Las vistas del catálogo de datos no pueden hacer referencia a otras vistas, a enlaces a recursos de bases de datos o a enlaces a recursos de tablas.
+ Puede hacer referencia a un máximo de 10 tablas en la definición de vista.
+ Las tablas no deben tener el permiso de lago de datos `IAMAllowedPrincipals` en Lake Formation. Si está presente, se produce el error Las vistas de múltiples dialectos solo pueden hacer referencia a tablas sin permisos IAMAllowedPrincipals.
+ La ubicación de Amazon S3 de la tabla debe estar registrada como ubicación de lago de datos de Lake Formation. Si la tabla no está registrada, se produce el error Las vistas de múltiples dialectos solo pueden hacer referencia a tablas administradas por Lake Formation. Para obtener información sobre cómo registrar ubicaciones de Amazon S3 en Lake Formation, consulte [Registrar una ubicación de Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) en la *Guía para desarrolladores de AWS Lake Formation*.
+ Las llamadas a las API de AWS Glue [GetTables](https://docs.aws.amazon.com/glue/latest/webapi/API_GetTables.html) y [SearchTables](https://docs.aws.amazon.com/glue/latest/webapi/API_SearchTables.html) no actualizan el parámetro `IsRegisteredWithLakeFormation`. Para visualizar el valor correcto del parámetro, utilice la API de AWS Glue [GetTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetTable.html). Para obtener más información, consulte [Las API GetTables y SearchTables no actualizan el valor del parámetro IsRegisteredWithLakeFormation](https://docs.aws.amazon.com/lake-formation/latest/dg/limitations.html#issue-GetTables-value) en la *Guía para desarrolladores de AWS Lake Formation*.
+ La entidad principal de `DEFINER` solo puede ser un rol de IAM.
+ El rol de `DEFINER` debe tener todos los permisos (otorgables) `SELECT` en las tablas subyacentes.
+ No se admiten las vistas del catálogo de datos `UNPROTECTED`.
+ No se admiten en la definición de vista las funciones definidas por el usuario (UDF).
+ Los orígenes de datos federados de Athena no se pueden utilizar en las vistas del catálogo de datos.
+ Las vistas del catálogo de datos no son compatibles con los metaalmacenes externos de Hive.
+ Athena muestra un mensaje de error cuando detecta vistas obsoletas. Se registra una vista obsoleta cuando se produce alguna de las siguientes situaciones:
  + La vista hace referencia a tablas o bases de datos que no existen.
  + Se realiza un cambio de esquema o metadatos en una tabla referenciada. 
  + Una tabla referenciada se elimina y se vuelve a crear con un esquema o configuración diferente.

## Permisos
<a name="views-glue-permissions"></a>

Las vistas del catálogo de datos requieren tres roles de `Lake Formation Admin`, `Definer` y `Invoker`. 
+ **`Lake Formation Admin`** – tiene acceso para configurar todos los permisos de Lake Formation.
+ **`Definer`** – crea la vista del catálogo de datos. El rol de `Definer` debe tener todos los permisos otorgables `SELECT` en todas las tablas subyacentes a las que hace referencia la definición de la vista.
+ **`Invoker`** – puede consultar la vista del catálogo de datos o comprobar sus metadatos. Para mostrar el invocador de una consulta, puede utilizar la función DML `invoker_principal()`. Para obtener más información, consulte [invoker\_principal()](functions-env3.md#functions-env3-invoker-principal).

Las relaciones de confianza del rol `Definer` deben permitir la acción `sts:AssumeRole` respecto de las entidades principales de servicios de AWS Glue y de Lake Formation. Para obtener más información, consulte [Prerequisites for creating views](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html#views-prereqs) en la *Guía para desarrolladores de AWS Lake Formation*.

También se requieren permisos de IAM para el acceso a Athena. Para obtener más información, consulte [AWSPolíticas administradas de para Amazon Athena](security-iam-awsmanpol.md).