

# Consulta de las tablas de Linux Foundation Delta Lake
<a name="delta-lake-tables"></a>

Linux Foundation [Delta Lake](https://delta.io/) es un formato de tabla para el análisis de macrodatos. Puede usar Amazon Athena para leer directamente las tablas de Delta Lake almacenadas en Amazon S3 sin tener que generar archivos de manifiesto ni ejecutar la instrucción `MSCK REPAIR`.

El formato de Delta Lake almacena los valores mínimo y máximo por columna de cada archivo de datos. La implementación de Athena utiliza esta información para permitir omitir archivos en los predicados a fin de evitar que se tengan en cuenta los archivos no deseados.

## Consideraciones y limitaciones
<a name="delta-lake-tables-considerations-and-limitations"></a>

La compatibilidad de Delta Lake Athena tiene las siguientes consideraciones y limitaciones:
+ **Solo tablas con catálogo de AWS Glue**: la compatibilidad nativa de Delta Lake solo se admite a través de tablas registradas con AWS Glue. Si tiene una tabla de Delta Lake registrada en otro metaalmacén, puede conservarla y tratarla como su metaalmacén principal. Como los metadatos de Delta Lake se almacenan en el sistema de archivos (por ejemplo, en Amazon S3) y no en el metaalmacén, Athena solo requiere la propiedad de ubicación de AWS Glue para leer las tablas de Delta Lake.
+ **Solo motor V3**: las consultas de Delta Lake solo se admiten en la versión 3 del motor Athena. Debe asegurarse de que el grupo de trabajo que cree esté configurado para utilizar la versión 3 del motor Athena.
+ **No hay compatibilidad con viajes en el tiempo**: no hay compatibilidad con consultas que utilicen las capacidades de viaje en el tiempo de Delta Lake.
+ **Solo lectura**: las instrucciones DML de escritura como `UPDATE`, `INSERT` o `DELETE` no se admiten.
+ **Soporte de Lake Formation**: la integración de Lake Formation se encuentra disponible para las tablas de Delta Lake con su esquema sincronizado con AWS Glue. A fin de obtener más información, consulte [Uso de AWS Lake Formation con Amazon Athena](https://docs.aws.amazon.com/lake-formation/latest/dg/athena-lf.html) y [Configuración de permisos para una tabla de Delta Lake](https://docs.aws.amazon.com/lake-formation/latest/dg/set-up-delta-table.html) en la *Guía para desarrolladores de AWS Lake Formation*.
+ **Compatibilidad con DDL limitada**: se admiten las siguientes instrucciones DDL: `CREATE EXTERNAL TABLE`, `SHOW COLUMNS`, `SHOW TBLPROPERTIES`, `SHOW PARTITIONS`, `SHOW CREATE TABLE` y `DESCRIBE`. Para obtener información sobre el uso de la instrucción `CREATE EXTERNAL TABLE`, consulte la sección [Comience con las tablas de Delta Lake](delta-lake-tables-getting-started.md).
+ **No se admite la omisión de objetos de Amazon Glacier**: si los objetos de la tabla de Linux Foundation Delta Lake se encuentran en una clase de almacenamiento de Amazon Glacier, establecer la propiedad de la tabla `read_restored_glacier_objects` en `false` no tendrá ningún efecto.

  Suponga, por ejemplo, que ejecuta el siguiente comando:

  ```
  ALTER TABLE table_name SET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')
  ```

  En el caso de las tablas de Iceberg y Delta Lake, el comando produce el error Clave de propiedad de tabla no compatible: read\$1restored\$1glacier\$1objects. En el caso de las tablas de Hudi, el comando `ALTER TABLE` no produce ningún error, pero los objetos de Amazon Glacier se mantienen sin omitirse. Al ejecutar consultas `SELECT` después del comando `ALTER TABLE`, se siguen devolviendo todos los objetos.
+ **Tablas cifradas**: Athena no admite la lectura nativa de tablas de Delta Lake cifradas con CSE-KMS. Esto incluye las instrucciones SELECT y las instrucciones DDL.

### Control de versiones de Delta Lake y Athena
<a name="delta-lake-tables-versioning"></a>

Athena no utiliza el [control de versiones](https://docs.delta.io/latest/releases.html) que figuran en la documentación de Delta Lake. Para determinar si sus tablas de Delta Lake son compatibles con Athena, considere las siguientes dos características:
+ **Versión de lectura**: todas las tablas de Delta Lake tienen una versión de lectura. En la actualidad, es un número comprendido entre 1 y 3. Las consultas que incluyan una tabla con una versión de lectura que Athena no admita fallarán.
+ **Características de la tabla**: todas las tablas de Delta Lake también pueden declarar un conjunto de funciones de lectura y escritura. Como la compatibilidad de Athena con Delta Lake es de solo lectura, no se aplica la compatibilidad de las características de escritura de las tablas. Sin embargo, fallarán las consultas en tablas con características de lector de tablas no compatibles.

En la siguiente tabla, se muestran las versiones del lector de Delta Lake y las características del lector de tablas de Delta Lake compatibles con Athena.


****  

| Tipo de consulta | Versiones de lector compatibles | Características de lector compatibles | 
| --- | --- | --- | 
| DQL (instrucciones SELECT) | <= 3 | [Asignación de columnas](https://docs.delta.io/latest/delta-column-mapping.html), [timestampNtz](https://github.com/delta-io/delta/blob/master/PROTOCOL.md#timestamp-without-timezone-timestampntz), [vectores de eliminación](https://docs.delta.io/latest/delta-deletion-vectors.html) | 
| DDL | <= 1 | No se usa. Las características del lector solo se pueden declarar en tablas con una versión de lector de 2 o superior. | 
+ Para obtener una lista de las características de las tablas de Delta Lake, consulte [Nombres válidos de las características de las tablas](https://github.com/delta-io/delta/blob/master/PROTOCOL.md#valid-feature-names-in-table-features) en GitHub.com.
+ Para ver una lista de las características de Delta Lake por versión de protocolo, consulte [Características por versión de protocolo](https://docs.delta.io/latest/versioning.html#features-by-protocol-version) en GitHub.com.

Para crear una tabla de Delta Lake en Athena con una versión de lector superior a 1, consulte [Sincronización de metadatos de Delta Lake](delta-lake-tables-syncing-metadata.md).

**Topics**
+ [Consideraciones y limitaciones](#delta-lake-tables-considerations-and-limitations)
+ [Tipos de datos de columnas admitidos](delta-lake-tables-supported-data-types-columns.md)
+ [Comience con las tablas de Delta Lake](delta-lake-tables-getting-started.md)
+ [Consulta de las tablas de Delta Lake con SQL](delta-lake-tables-querying.md)
+ [Sincronización de metadatos de Delta Lake](delta-lake-tables-syncing-metadata.md)
+ [Recursos adicionales](delta-lake-tables-additional-resources.md)

# Tipos de datos de columnas admitidos
<a name="delta-lake-tables-supported-data-types-columns"></a>

En esta sección se describen los tipos de datos admitidos para las columnas sin partición y para las de partición. 

## Tipos de datos de columnas sin particiones compatibles
<a name="delta-lake-tables-supported-data-types-non-partition-columns"></a>

En el caso de las columnas sin particiones, se admiten todos los tipos de datos que admite Athena excepto `CHAR` (`CHAR` no se admite en el propio protocolo de Delta Lake). Los tipos de datos admitidos incluyen:

```
boolean
tinyint
smallint
integer
bigint
double
float
decimal
varchar
string
binary
date
timestamp
array
map
struct
```

## Tipos de datos de columnas de particiones compatibles
<a name="delta-lake-tables-supported-data-types-partition-columns"></a>

Para las columnas de particiones, Athena admite tablas con los siguientes tipos de datos:

```
boolean
integer
smallint
tinyint
bigint
decimal
float
double
date
timestamp
varchar
```

Para más información sobre los tipos de datos en Athena, consulte [Tipos de datos en Amazon Athena](data-types.md).

# Comience con las tablas de Delta Lake
<a name="delta-lake-tables-getting-started"></a>

Para poder consultarla, su tabla de Delta Lake debe existir en AWS Glue. Si la tabla está en Amazon S3, pero no en AWS Glue, ejecute una instrucción `CREATE EXTERNAL TABLE` con la siguiente sintaxis. Si la tabla ya existe en AWS Glue (por ejemplo, porque está usando Apache Spark u otro motor con AWS Glue), puede omitir este paso. Tenga en cuenta la omisión de las definiciones de columnas, la biblioteca SerDe y otras propiedades de tablas. A diferencia de las tablas de Hive tradicionales, los metadatos de las tablas de Delta Lake se deducen del registro de transacciones de Delta Lake y se sincronizan directamente con AWS Glue.

```
CREATE EXTERNAL TABLE
  [db_name.]table_name
  LOCATION 's3://amzn-s3-demo-bucket/your-folder/'
  TBLPROPERTIES ('table_type' = 'DELTA')
```

**nota**  
Esta instrucción no es compatible con los buckets de S3 que tienen habilitados los pagos por solicitante. Si desea crear una tabla de Delta Lake en función de un bucket de S3 con los pagos por solicitante habilitados, siga las instrucciones y la instrucción DDL que figuran en [Sincronización de metadatos de Delta Lake](delta-lake-tables-syncing-metadata.md).
En el caso de las tablas de Delta Lake, no se permiten instrucciones `CREATE TABLE` que incluyan más que las propiedades `LOCATION` y `table_type`.

# Consulta de las tablas de Delta Lake con SQL
<a name="delta-lake-tables-querying"></a>

Para consultar una tabla de Delta Lake, utilice la sintaxis `SELECT` SQL estándar:

```
[ WITH with_query [, ...] ]SELECT [ ALL | DISTINCT ] select_expression [, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]
[ HAVING condition ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]
[ OFFSET count [ ROW | ROWS ] ]
[ LIMIT [ count | ALL ] ]
```

Para obtener más información acerca de la sintaxis `SELECT`, consulte [SELECT](select.md) en la documentación de Athena.

El formato de Delta Lake almacena los valores mínimo y máximo por columna de cada archivo de datos. Athena utiliza esta información para permitir omitir archivos en los predicados a fin de evitar que se tengan en cuenta los archivos innecesarios.

# Sincronización de metadatos de Delta Lake
<a name="delta-lake-tables-syncing-metadata"></a>

Athena sincroniza los metadatos de la tabla, incluidos el esquema, las columnas de partición y las propiedades de la tabla, con AWS Glue si usa Athena para crear su tabla de Delta Lake. A medida que pasa el tiempo, estos metadatos pueden perder su sincronización con los metadatos de la tabla subyacente en el registro de transacciones. Para mantener su tabla actualizada, puede elegir una de las siguientes opciones:
+ Utilizar el rastreador de AWS Glue para tablas de Delta Lake. Para obtener más información, consulte [Presentación de la compatibilidad nativa de tablas de Delta Lake con rastreadores de AWS Glue](https://aws.amazon.com/blogs/big-data/introducing-native-delta-lake-table-support-with-aws-glue-crawlers/) en el *Blog de macrodatos de AWS* y [Programación de un rastreador de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schedule-crawler.html) en la Guía para desarrolladores de AWS Glue.
+ Eliminar y recrear la tabla en Athena.
+ Utilizar el SDK, la CLI o la consola de AWS Glue para actualizar de forma manual el esquema en AWS Glue.

Tenga en cuenta que las siguientes características requieren que su esquema de AWS Glue tenga siempre el mismo esquema que el registro de transacciones:
+ Lake Formation
+ Vistas
+ Filtros de filas y columnas

Si su flujo de trabajo no requiere ninguna de estas funciones y prefiere no mantener esta compatibilidad, puede utilizar el DDL `CREATE TABLE` en Athena y, a continuación, agregar la ruta de Amazon S3 como parámetro SerDe en AWS Glue.

## Creación de una tabla de Delta Lake con las consolas de Athena y AWS Glue
<a name="delta-lake-tables-syncing-metadata-console"></a>

Puede utilizar el siguiente procedimiento para crear una tabla de Delta Lake con las consolas de Athena y AWS Glue.

**Para crear una tabla de Delta Lake con las consolas de Athena y AWS Glue**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. En el editor de consultas de Athena, utilice el siguiente DDL para crear la tabla de Delta Lake. Tenga en cuenta que cuando utilice este método, el valor de `TBLPROPERTIES` debe ser `'spark.sql.sources.provider' = 'delta'` y no `'table_type' = 'delta'`.

   Tenga en cuenta que este mismo esquema (con una sola columna con el nombre `col` del tipo `array<string>`) se inserta cuando utiliza Apache Spark (Athena para Apache Spark) o la mayoría de los demás motores a fin de crear la tabla.

   ```
   CREATE EXTERNAL TABLE
      [db_name.]table_name(col array<string>)
      LOCATION 's3://amzn-s3-demo-bucket/your-folder/'
      TBLPROPERTIES ('spark.sql.sources.provider' = 'delta')
   ```

1. Abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. En el panel de navegación, elija **Catálogo de datos**, **Tablas**.

1. En la lista de tablas, elija el enlace de su tabla.

1. En la página de la tabla, seleccione **Acciones**, **Editar tabla**.

1. En la sección de **Parámetros Serde**, agregue la clave **path** con el valor **s3://amzn-s3-demo-bucket/*your-folder*/**.

1. Seleccione **Save**.

## Creación de una tabla de Delta Lake con la AWS CLI
<a name="delta-lake-tables-syncing-metadata-cli"></a>

Para crear una tabla de Delta Lake con la AWS CLI, introduzca un comando como el siguiente.

```
aws glue create-table --database-name dbname \
    --table-input '{"Name" : "tablename", "StorageDescriptor":{
            "Columns" : [
                {
                    "Name": "col",
                    "Type": "array<string>"
                }
            ],
            "Location" : "s3://amzn-s3-demo-bucket/<prefix>/",
            "SerdeInfo" : {
                "Parameters" : {
                    "serialization.format" : "1",
                    "path" : "s3://amzn-s3-demo-bucket/<prefix>/"
                }
            }
        },
        "PartitionKeys": [],
        "TableType": "EXTERNAL_TABLE",
        "Parameters": {
            "EXTERNAL": "TRUE",
            "spark.sql.sources.provider": "delta"
        }
    }'
```

# Recursos adicionales
<a name="delta-lake-tables-additional-resources"></a>

Para obtener información sobre el uso de las tablas de Delta Lake con AWS Glue y cómo consultarlas con Athena, consulte [Handle UPSERT data operations using open-source Delta Lake and AWS Glue](https://aws.amazon.com/blogs/big-data/handle-upsert-data-operations-using-open-source-delta-lake-and-aws-glue/) en el *Blog de macrodatos de AWS*.