

# Detección y catalogación de datos en AWS Glue
<a name="catalog-and-crawler"></a>

El AWS Glue Data Catalog es un repositorio centralizado que almacena metadatos sobre los conjuntos de datos de su organización. Actúa como un índice para las métricas de tiempo de ejecución, esquema y ubicación de sus orígenes de datos. Los metadatos se almacenan en tablas de metadatos, en las que cada tabla representa un único almacén de datos. 

Para completar el Catálogo de datos, puede usar un rastreador, que escanea automáticamente los orígenes de datos y extrae los metadatos. Los rastreadores pueden conectarse a orígenes de datos internos (basados en AWS) y externos a AWS. 

Para obtener más información sobre los orígenes de datos compatibles, consulte [Orígenes de datos admitidos para el rastreo](crawler-data-stores.md).

También puede crear tablas en el Catálogo de datos manualmente, para lo cual debe definir la estructura de la tabla, el esquema y la estructura de particiones de acuerdo con sus requisitos específicos.

Para obtener más información sobre la creación manual de tablas de metadatos, consulte [Cómo definir los metadatos manualmente](populate-dg-manual.md).

Puede usar la información del Catálogo de datos para crear y supervisar sus trabajos de ETL. El Catálogo de datos se integra con otros servicios de análisis de AWS y proporciona una vista unificada de los orígenes de datos, lo que facilita la administración y el análisis de los datos.
+ Amazon Athena: Almacene y consulte los metadatos de las tablas en el Catálogo de datos para los datos de Amazon S3 con SQL.
+ AWS Lake Formation: Defina y administre las políticas de acceso a los datos detalladas y audite el acceso a los datos de forma centralizada.
+ Amazon EMR: Acceda a los orígenes de datos definidos en el Catálogo de datos para el procesamiento de macrodatos.
+ Amazon SageMaker AI: Cree, entrene e implemente modelos de machine learning de forma rápida y segura.Características clave del Catálogo de datos

A continuación se detallan los aspectos clave del Catálogo de datos. 

Repositorio de metadatos  
 El Catálogo de datos actúa como un repositorio central de metadatos y almacena información sobre la ubicación, el esquema y las propiedades de los orígenes de datos. Estos metadatos se organizan en bases de datos y tablas, de forma similar a un catálogo de una base de datos relacional tradicional. 

Detección automática de datos  
 Los Rastreador de AWS Glue pueden detectar y catalogar los orígenes de datos nuevos o actualizados automáticamente, lo que reduce la sobrecarga de la administración manual de los metadatos y garantiza que su Catálogo de datos permanezca actualizado. Al catalogar sus orígenes de datos, el Catálogo de datos facilita a los usuarios y las aplicaciones la detección y la comprensión de los activos de datos disponibles en su organización, lo que promueve la reutilización de los datos y la colaboración.  
El Catálogo de datos es compatible con una amplia gama de orígenes de datos, incluidos Amazon S3, Amazon RDS, Amazon Redshift y Apache Hive, entre otros. Puede inferir y almacenar metadatos de estos orígenes automáticamente mediante el uso de Rastreador de AWS Glue.   
Para obtener más información, consulte [Uso de rastreadores para completar el Catálogo de datos](add-crawler.md).

Administración de esquemas  
El Catálogo de datos captura y administra automáticamente el esquema de sus orígenes de datos, incluida la inferencia, la evolución y el control de versiones del esquema. Para actualizar el esquema y las particiones del Catálogo de datos, puede usar los trabajos de ETL de AWS Glue. 

Optimización de tablas  
Para mejorar el rendimiento de lectura de los servicios de análisis de AWS, como Amazon Athena, Amazon EMR, y los trabajos de ETL de AWS Glue, el Catálogo de datos ofrece una compactación administrada (un proceso que compacta objetos pequeños de Amazon S3 para convertirlos en objetos más grandes) para procesar las tablas de Iceberg del Catálogo de datos. Puede usar la consola de AWS Glue, la consola de AWS Lake Formation, la AWS CLI o la API de AWS para activar o desactivar la compactación de las tablas de Iceberg individuales que están en el Catálogo de datos.  
Para obtener más información, consulte [Optimización de las tablas de Iceberg](table-optimizers.md).

Estadísticas de las columnas  
 Puede calcular las estadísticas a nivel de columna para las tablas del Catálogo de datos en formatos de datos como Parquet, ORC, JSON, ION, CSV y XML sin necesidad de configurar canalizaciones de datos adicionales. Las estadísticas de columnas le ayudan a entender los perfiles de datos al obtener información sobre los valores de una columna. El Catálogo de datos permite generar estadísticas para los valores de las columnas, como los valores mínimo y máximo, los valores nulos totales y distintos totales, la longitud media de los valores y el total de apariciones de valores verdaderos.   
Para obtener más información, consulte [Cómo optimizar el rendimiento de las consultas con las estadísticas de columnas](column-statistics.md).

Linaje de datos  
El Catálogo de datos mantiene un registro de las transformaciones y operaciones realizadas con los datos, y proporciona información sobre el linaje de los datos. Esta información sobre el linaje es valiosa para la auditoría, el cumplimiento y la comprensión de la procedencia de los datos.

Integración con otros servicios de AWS  
El Catálogo de datos se integra perfectamente con otros servicios de AWS, como AWS Lake Formation, Amazon Athena, Amazon Redshift Spectrum y Amazon EMR. Esta integración le permite consultar y analizar los datos de varios almacenes de datos mediante el uso de una única capa de metadatos coherente.

Seguridad y control de acceso  
AWS Glue se integra con AWS Lake Formation para promover un control minucioso del acceso a los recursos del Catálogo de datos, lo que le permite administrar los permisos y proteger el acceso a sus activos de datos en función de las políticas y los requisitos de su organización. AWS Glue se integra con AWS Key Management Service (AWS KMS) para cifrar los metadatos almacenados en el Catálogo de datos. 

Vistas materializadas   
El catálogo de datos admite vistas materializadas de Apache Iceberg, que son tablas administradas que almacenan resultados precomputados de consultas SQL y se actualizan automáticamente a medida que cambian los datos de origen subyacentes. Las vistas materializadas simplifican las canalizaciones de transformación de datos y aceleran el rendimiento de las consultas al eliminar cálculos redundantes.  
Puede crear vistas materializadas mediante Apache Spark SQL en la versión 5.1 de AWS Glue o posteriores, en la versión 7.12.0 de Amazon EMR o posteriores y en Amazon Athena. El catálogo de datos supervisa automáticamente las tablas de Apache Iceberg de origen y actualiza las vistas materializadas mediante infraestructura de cómputo administrada. Los motores de Spark en AWS Glue, Amazon EMR y Amazon Athena pueden reescribir automáticamente las consultas para usar vistas materializadas cuando estas ofrecen mejor rendimiento.  
Las vistas materializadas se almacenan como tablas de Apache Iceberg en buckets de tablas de Amazon S3 o en buckets de uso general de Amazon S3 dentro de su cuenta, lo que las hace accesibles desde múltiples motores de consulta. El catálogo de datos administra todos los aspectos del ciclo de vida de las vistas materializadas, incluida la programación automática de actualizaciones, las actualizaciones incrementales y la administración de metadatos.  
Para obtener más información, consulte Uso de vistas materializadas con AWS Glue y Uso de vistas materializadas con Amazon EMR.

**Topics**
+ [Cómo completar el Catálogo de datos de AWS Glue](populate-catalog-methods.md)
+ [Cómo completar y administrar las tablas transaccionales](populate-otf.md)
+ [Administración del Catálogo de datos](manage-catalog.md)
+ [Cómo acceder al Catálogo de datos](access_catalog.md)
+ [Prácticas recomendadas para el uso del Catálogo de datos de AWS Glue](best-practice-catalog.md)
+ [Supervisión de métricas de uso del Catálogo de datos en Amazon CloudWatch](data-catalog-cloudwatch-metrics.md)
+ [AWS Glue Schema Registry](schema-registry.md)

# Cómo completar el Catálogo de datos de AWS Glue
<a name="populate-catalog-methods"></a>

Puede completar el AWS Glue Data Catalog mediante los siguientes métodos:
+ Rastreador de AWS Glue: El Rastreador de AWS Glue puede detectar y catalogar automáticamente orígenes de datos, como bases de datos, lagos de datos y datos de streaming. Los rastreadores son el método más común y recomendado para completar el Catálogo de datos, ya que pueden detectar e inferir automáticamente los metadatos de una amplia variedad de orígenes de datos.
+  Adición manual de metadatos: Puede definir manualmente las bases de datos, las tablas y los detalles de conexión, y agregarlos al Catálogo de datos con la consola de AWS Glue, la consola de Lake Formation, la AWS CLI o las API de AWS Glue. El ingreso manual resulta útil cuando quiere catalogar los orígenes de datos que no se pueden rastrear. 
+ Integración con otros servicios de AWS: Puede completar el Catálogo de datos con metadatos de servicios como AWS Lake Formation y Amazon Athena. Estos servicios pueden detectar y registrar los orígenes de datos en el Catálogo de datos. 
+  Adición desde un repositorio de metadatos existente: Si tiene un almacén de metadatos existente, como Apache Hive Metastore, puede usar AWS Glue para importar esos metadatos al Catálogo de datos. Para obtener más información, consulte [Migración entre un metaalmacén de Hive y AWS Glue Data Catalog](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/Hive_metastore_migration) en GitHub.

**Topics**
+ [Uso de rastreadores para completar el Catálogo de datos](add-crawler.md)
+ [Cómo definir los metadatos manualmente](populate-dg-manual.md)
+ [Integración con Tablas de Amazon S3](glue-federation-s3tables.md)
+ [Integración con otros servicios de AWS](populate-dc-other-services.md)
+ [Configuración del Catálogo de datos](console-data-catalog-settings.md)

# Uso de rastreadores para completar el Catálogo de datos
<a name="add-crawler"></a>

Puede usar un Rastreador de AWS Glue para completar el AWS Glue Data Catalog con bases de datos y tablas. Este es el método principal usado por la mayoría de los usuarios de AWS Glue. Un rastreador puede rastrear varios almacenes de datos en una única ejecución. Cuando finaliza, el rastreador crea o actualiza una o varias tablas del Catálogo de datos. Los trabajos de extracción, transformación y carga (ETL) que define en AWS Glue usan estas tablas del Catálogo de datos como orígenes y destinos. El trabajo de ETL lee y escribe en los almacenes de datos que se especifican en las tablas de origen y destino del Catálogo de datos.

## Flujo de trabajo
<a name="crawler-workflow"></a>

En el siguiente diagrama de flujo de flujo de trabajo se muestra cómo los rastreadores de AWS Glue interactúan con almacenes de datos y otros elementos para rellenar el Catálogo de datos.

![\[Flujo de trabajo que muestra cómo el rastreador de AWS Glue rellena el Catálogo de datos en 5 pasos básicos.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/PopulateCatalog-overview.png)


Este es el flujo de flujo de trabajo general de rellenado de por parte de un rastreador AWS Glue Data Catalog:

1. Un rastreador ejecuta cualquier *clasificador* personalizado que elija para inferir el formato y el esquema de sus datos. Debe proporcionar el código para clasificadores personalizados, que se ejecutan en el orden especificado.

   El primer clasificador personalizado en reconocer correctamente la estructura de sus datos se usa para crear un esquema. Los clasificadores personalizados que aparecen más abajo en la lista se omiten.

1. Si no coincide ningún clasificador con el esquema de sus datos, los clasificadores integrados intentarán reconocer el esquema de sus datos. Un ejemplo de un clasificador integrado es uno que reconoce JSON.

1. El rastreador se conecta al almacén de datos. Algunos almacenes de datos requieren propiedades de conexión para el acceso del rastreador.

1. El esquema inferido se crea para sus datos.

1. El rastreador escribe los metadatos en el Catálogo de datos. Una definición de tabla contiene metadatos acerca de los datos de su almacén de datos. La tabla se escribe en una base de datos, que es un contenedor de tablas en el Catálogo de datos. Entre los atributos de una tabla se incluye la clasificación, que es una etiqueta creada por el clasificador que determinó el esquema de tabla.

**Topics**
+ [Flujo de trabajo](#crawler-workflow)
+ [Funcionamiento de los rastreadores](#crawler-running)
+ [¿Cómo determina un rastreador cuándo crear particiones?](#crawler-s3-folder-table-partition)
+ [Orígenes de datos admitidos para el rastreo](crawler-data-stores.md)
+ [Requisitos previos del rastreador](crawler-prereqs.md)
+ [Definición y administración de clasificadores](add-classifier.md)
+ [Configuración de rastreadores](define-crawler.md)
+ [Programación de un rastreador](schedule-crawler.md)
+ [Ver los resultados y detalles del rastreador](console-crawlers-details.md)
+ [Personalización del comportamiento del rastreador](crawler-configuration.md)
+ [Tutorial: agregar un rastreador de AWS Glue](tutorial-add-crawler.md)

## Funcionamiento de los rastreadores
<a name="crawler-running"></a>

Cuando se ejecuta un rastreador, realiza las siguientes acciones para interrogar a un almacén de datos:
+ **Clasifica los datos para determinar el formato, el esquema y las propiedades asociadas de los datos sin procesar**: puede configurar los resultados de clasificación mediante la creación de un clasificador personalizado.
+ **Agrupa los datos en tablas o particiones**: los datos se agrupan en función de la heurística de rastreador.
+ **Escribe los metadatos en el Catálogo de datos**: puede configurar cómo el rastreador agrega, actualiza y elimina tablas y particiones.

Al definir un rastreador, puede elegir uno o varios clasificadores que evalúen el formato de sus datos para inferir un esquema. Al ejecutarse el rastreador, el primer clasificador de su lista en reconocer correctamente su almacén de datos se usa para crear un esquema para su tabla. Puede usar clasificadores integrados o definir los suyos propios. Puede definir sus clasificadores personalizados en una operación independiente, antes de definir los rastreadores. AWS Glue proporciona clasificadores integrados para inferir esquemas a partir de archivos comunes con formatos entre los que se incluyen JSON, CSV y Apache Avro. Para ver la lista actual de clasificadores integrados en AWS Glue, consulte [Clasificadores integrados](add-classifier.md#classifier-built-in). 

Las tablas de metadatos que crea un rastreador se incluyen en una base de datos al definir un rastreador. Si su rastreador no especifica una base de datos, sus tablas se colocan en la base de datos predeterminada. Además, cada tabla tiene una columna de clasificación que rellena el clasificador que reconoció correctamente el almacén de datos en primer lugar.

Si se comprime el archivo que se rastrea, el rastreador debe descargarlo para procesarlo. Cuando un rastreador se ejecuta, interroga los archivos para determinar su formato y tipo de compresión, y escribe estas propiedades en el Catálogo de datos. Algunos formatos de archivo (por ejemplo, Apache Parquet) le permiten comprimir partes del archivo a medida que se escribe. Para estos archivos, los datos comprimidos son un componente interno del archivo y AWS Glue no rellena la propiedad `compressionType` cuando escribe tablas en el Catálogo de datos. Por el contrario, si un *archivo completo* se comprime mediante un algoritmo de compresión (por ejemplo, gzip), la propiedad `compressionType` se rellena cuando las tablas se escriben en el Catálogo de datos. 

El rastreador genera los nombres para las tablas que crea. Los nombres de las tablas que se almacenan en el AWS Glue Data Catalog siguen estas reglas:
+ Solo se permiten caracteres alfanuméricos y guiones bajos (`_`).
+ Ningún prefijo personalizado puede tener más de 64 caracteres.
+ La longitud máxima del nombre no puede ser superior a 128 caracteres. El rastreador trunca nombres generados para que quepan en el límite.
+ Si se encuentran nombres de tabla duplicados, el rastreador añade un sufijo de cadena hash al nombre.

Si su rastreador se ejecuta más de una vez, quizás en una programación, busca archivos o tablas nuevos o cambiados en su almacén de datos. La salida del rastreador incluye nuevas tablas y particiones encontradas desde una ejecución anterior.

## ¿Cómo determina un rastreador cuándo crear particiones?
<a name="crawler-s3-folder-table-partition"></a>

Cuando un rastreador de AWS Glue analiza el almacén de datos de Amazon S3 y detecta varias carpetas en un bucket, determina la raíz de una tabla dentro de la estructura de carpetas y cuáles carpetas son particiones de una tabla. El nombre de la tabla se basa en el prefijo de Amazon S3 o el nombre de carpeta. Proporcione una **ruta de inclusión** que apunte al nivel de carpeta que se rastreará. Cuando la mayoría de los esquemas en el nivel de carpeta son similares, el rastreador crea particiones de una tabla en vez de tablas independientes. Para influir en el rastreador con el fin de que cree tablas independientes, agregue la carpeta raíz de cada tabla como un almacén de datos independiente al definir el rastreador.

Por ejemplo, considere la siguiente estructura de carpetas de Amazon S3.

![\[Los rectángulos en varios niveles representan una jerarquía de carpetas en Amazon S3. El rectángulo superior tiene la etiqueta (Sales) Ventas. El rectángulo debajo de este está etiquetado year=2019 (año=2019). Dos rectángulos debajo que están etiquetados month=Jan (Mes=ene) y month=Feb (mes=feb). Cada uno de esos rectángulos tiene dos rectángulos debajo de ellos, etiquetados day=1 (día=1) y day=2 (día=2). Los cuatro rectángulos de “día” (parte inferior) tienen dos o cuatro archivos debajo de ellos. Todos los rectángulos y archivos están conectados con líneas.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/crawlers-s3-folders.png)


Las rutas de acceso a las cuatro carpetas de nivel inferior son las siguientes:

```
S3://sales/year=2019/month=Jan/day=1
S3://sales/year=2019/month=Jan/day=2
S3://sales/year=2019/month=Feb/day=1
S3://sales/year=2019/month=Feb/day=2
```

Supongamos que el destino del rastreador está establecido en `Sales` y que todos los archivos en la carpeta `day=n` tienen el mismo formato (por ejemplo, JSON, no cifrado) y tienen los mismos esquemas o muy similares. El rastreador creará una sola tabla con cuatro particiones, con claves de partición `year`, `month` y `day`.

Por ejemplo, considere la siguiente estructura de Amazon S3:

```
s3://bucket01/folder1/table1/partition1/file.txt
s3://bucket01/folder1/table1/partition2/file.txt
s3://bucket01/folder1/table1/partition3/file.txt
s3://bucket01/folder1/table2/partition4/file.txt
s3://bucket01/folder1/table2/partition5/file.txt
```

Si los esquemas para los archivos en `table1` y `table2` son similares, y se define un almacén de datos individual en el rastreador con **Include path (Ruta de inclusión)** `s3://bucket01/folder1/`, el rastreador crea una sola tabla con dos columnas de claves de partición. La primera columna de clave de partición contiene `table1` y `table2`, y la segunda columna de clave de partición contiene `partition1` a `partition3` para la partición de la `table1`, y `partition4` y `partition5` para la partición de la `table2`. Para crear dos tablas independientes, defina el rastreador con dos almacenes de datos. En este ejemplo, defina la primera **ruta de inclusión** como `s3://bucket01/folder1/table1/` y la segunda como `s3://bucket01/folder1/table2`.

**nota**  
En Amazon Athena, cada tabla corresponde a un prefijo de Amazon S3 con todos los objetos que contiene. Si los objetos tienen diferentes esquemas, Athena no reconoce objetos distintos en el mismo prefijo como tablas independientes. Esto puede suceder si un rastreador crea varias tablas a partir del mismo prefijo de Amazon S3. Esto podría dar lugar a consultas en Athena que no devuelvan resultados. Para que Athena reconozca y consulte las tablas correctamente, cree el rastreador con una **Include path (Ruta de inclusión)**diferente para cada esquema de tabla en la estructura de carpetas de Amazon S3. Para obtener más información, consulte las [Mejores prácticas de uso de Athena con AWS Glue](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html) y este artículo del [Centro de conocimientos de AWS](https://aws.amazon.com/premiumsupport/knowledge-center/athena-empty-results/).

# Orígenes de datos admitidos para el rastreo
<a name="crawler-data-stores"></a>

Los rastreadores pueden rastrear los siguientes almacenes de datos basados en archivos y almacenes de datos basados en tablas.


| Tipo de acceso que utiliza el rastreador | Almacenes de datos | 
| --- | --- | 
| Cliente nativo |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/crawler-data-stores.html)  | 
| JDBC |  Amazon Redshift Snowflake Dentro de Amazon Relational Database Service (Amazon RDS) o externo a Amazon RDS: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/crawler-data-stores.html)  | 
| Cliente de MongoDB |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/crawler-data-stores.html)  | 

**nota**  
Actualmente, AWS Glue no admite rastreadores para transmisiones de datos.

Para los almacenes de datos JDBC, MongoDB, MongoDB Atlas y Amazon DocumentDB (con compatibilidad con MongoDB), debe especificar una *conexión* de AWS Glue que el rastreador pueda usar para conectarse al almacén de datos. Para Amazon S3, puede especificar opcionalmente una conexión de tipo Red. Una conexión es un objeto del Catálogo de datos que almacena información de conexión, como credenciales, URL, información de Amazon Virtual Private Cloud, etc. Para obtener más información, consulte [Conexión a datos](glue-connections.md).

A continuación se enumeran las versiones de controladores compatibles con el rastreador:


| Producto | Controlador compatible con el rastreador | 
| --- | --- | 
| PostgreSQL | 42.2.1 | 
| Amazon Aurora | Igual que los controladores de rastreadores nativos | 
| MariaDB | 8.0.13 | 
| Microsoft SQL Server | 6.1.0 | 
| MySQL | 8.0.13 | 
| Oracle | 11.2.2 | 
| Amazon Redshift | 4.1 | 
| Snowflake | 3.13.20 | 
| MongoDB | 4.7.2 | 
| MongoDB Atlas | 4.7.2 | 

A continuación, se muestran notas sobre los distintos almacenes de datos.

**Amazon S3**  
Puede elegir rastrear una ruta en su cuenta o en otra cuenta. Si todos los archivos de Amazon S3 de una carpeta tienen el mismo esquema, el rastreador crea una tabla. Además, si el objeto de Amazon S3 está particionado, solo se crea una tabla de metadatos y se agrega información de particiones al Catálogo de datos de esa tabla.

**Amazon S3 y Amazon DynamoDB**  
Los rastreadores utilizan un rol de AWS Identity and Access Management (IAM) para obtener permiso y acceder a sus almacenes de datos. *El rol que se transfiere al rastreador debe tener permiso para obtener acceso a las rutas de Amazon S3 y a las tablas de Amazon DynamoDB que se rastrean*.

**Amazon DynamoDB**  
Al definir un rastreador mediante la consola de AWS Glue, especifica una tabla de DynamoDB. Si usa la API de AWS Glue, especifica una lista de tablas. Puede elegir rastrear sólo una pequeña muestra de los datos para reducir los tiempos de ejecución del rastreador.

**Delta Lake**  
En cada almacén de datos de Delta Lake, debe especificar cómo crear tablas de Delta:  
+ **Crear tablas nativas**: se permite la integración a los motores de consulta que permiten consultar el registro de transacciones de Delta directamente. Para obtener más información, consulte [Consultar las tablas de Delta Lake](https://docs.aws.amazon.com/athena/latest/ug/delta-lake-tables.html).
+ **Crear tablas de enlaces simbólicos**: se crea una carpeta de `_symlink_manifest` con los archivos de manifiesto particionados mediante las claves de partición en función de los parámetros de configuración especificados.

**Iceberg**  
Para cada almacén de datos de Iceberg, debe especificar una ruta de Amazon S3 que contenga los metadatos de las tablas de Iceberg. Si el rastreador descubre metadatos de tablas de Iceberg, los registra en el Data Catalog. Puede establecer una programación para que el rastreador mantenga las tablas actualizadas.  
Puede definir estos parámetros para el almacén de datos:  
+ **Exclusiones**: permite omitir determinadas carpetas.
+ **Profundidad máxima de recorrido**: establece el límite de profundidad que el rastreador puede rastrear en su bucket de Amazon S3. La profundidad de recorrido máxima predeterminada es 10 y la profundidad máxima que puede establecer es 20.

**Hudi**  
Para cada almacén de datos de Hudi, debe especificar una ruta de Amazon S3 que contenga los metadatos de las tablas de Hudi. Si el rastreador descubre metadatos de la tabla de Hudi, los registra en el Data Catalog. Puede establecer una programación para que el rastreador mantenga las tablas actualizadas.  
Puede definir estos parámetros para el almacén de datos:  
+ **Exclusiones**: permite omitir determinadas carpetas.
+ **Profundidad máxima de recorrido**: establece el límite de profundidad que el rastreador puede rastrear en su bucket de Amazon S3. La profundidad de recorrido máxima predeterminada es 10 y la profundidad máxima que puede establecer es 20.
Las columnas de marcas temporales con tipos lógicos `millis` se interpretarán como `bigint` debido a una incompatibilidad con Hudi 0.13.1 y los tipos de marcas temporales. Es posible que se proporcione una solución en la próxima versión de Hudi.
Las tablas Hudi se clasifican de la siguiente manera, con implicaciones específicas para cada una de ellas:  
+ Copiar al escribir (CoW): los datos se almacenan en un formato de columnas (Parquet) y cada actualización crea una nueva versión de los archivos durante una escritura.
+ Fusionar al leer (MoR): los datos se almacenan mediante la utilización de un formato que combina columnas (Parquet) y filas (Avro). Las actualizaciones se registran en archivos delta basados en filas y se compactan según sea necesario para crear nuevas versiones de los archivos en columnas.
Con los datasets de tipo CoW, cada vez que se produce una actualización de un registro, el archivo que contiene el registro se vuelve a escribir con los valores actualizados. Con un conjunto de datos de tipo MoR, cada vez que hay una actualización, Hudi escribe solo la fila correspondiente al registro modificado. MoR es más adecuado para cargas de trabajo con gran cantidad de escrituras o cambios y menos lecturas. CoW es más adecuado para cargas de trabajo con gran cantidad de lecturas con datos que cambian con menos frecuencia.  
Hudi ofrece tres tipos de consulta para acceder a los datos:  
+ Consultas de instantáneas: consultas que ven la última instantánea de la tabla a partir de una acción de confirmación o compactación determinada. Para las tablas MoR, las consultas de instantáneas exponen el estado más reciente de la tabla mediante la combinación de los archivos base y delta del segmento de archivos más reciente en el momento de la consulta.
+ Consultas progresivas: consultas que solo ven los nuevos datos escritos en la tabla, desde una confirmación o compactación determinada. Esto proporciona flujos de cambio de manera efectiva para habilitar canalizaciones de datos incrementales.
+ Consultas optimizadas para lectura: para las tablas de MoR, las consultas ven compactados los datos más recientes. Para las tablas CoW, las consultas ven los últimos datos confirmados.
En el caso de las tablas Copiar al escribir, los rastreadores crean una sola tabla en el Data Catalog con el serde ReadOptimized `org.apache.hudi.hadoop.HoodieParquetInputFormat`.  
En el caso de las tablas Fusionar al leer, el rastreador crea dos tablas en el Data Catalog para la misma ubicación de la tabla:  
+ Tabla con un sufijo `_ro` que utiliza el serde ReadOptimized `org.apache.hudi.hadoop.HoodieParquetInputFormat`.
+ Una tabla con un sufijo `_rt` que utiliza el serde RealTime para realizar consultas instantáneas: `org.apache.hudi.hadoop.realtime.HoodieParquetRealtimeInputFormat`.

**MongoDB y Amazon DocumentDB (compatible con MongoDB)**  
Las versiones 3.2 y posteriores de MongoDB son compatibles. Puede elegir rastrear sólo una pequeña muestra de los datos para reducir los tiempos de ejecución del rastreador.

**Base de datos relacional**  
La autenticación se realiza con un nombre de usuario y una contraseña de base de datos. En función del tipo de motor de base de datos, puede elegir qué objetos se rastrean, como bases de datos, esquemas y tablas.

**Snowflake**  
El rastreador de JDBC de Snowflake permite rastrear la tabla, la tabla externa, la vista y la vista materializada. La definición de vista materializada no se rellenará.  
En el caso de las tablas externas de Snowflake, el rastreador solo llevará a cabo el rastreo si apunta a una ubicación de Amazon S3. Además del esquema de la tabla, el rastreador también rastreará la ubicación de Amazon S3, el formato de archivo y la salida como parámetros de tabla en la tabla del Catálogo de datos. Tenga en cuenta que la información de particiones de la tabla externa particionada no se rellena.  
Actualmente, el proceso de ETL no es compatible con las tablas del Catálogo de datos creadas con el rastreador de Snowflake.

# Requisitos previos del rastreador
<a name="crawler-prereqs"></a>

El rastreador asume los permisos del rol de AWS Identity and Access Management (IAM) que se especifican al definirlo. Este rol de IAM debe tener permisos para extraer datos de su almacén de datos y escribir al Catálogo de datos. En la consola de AWS Glue solo se listan roles de IAM que tienen asociada una política de confianza para el servicio principal de AWS Glue. En la consola, también puede crear un rol de IAM con una política de IAM para obtener acceso a almacenes de datos de Amazon S3 a los que obtiene acceso el rastreador. Para obtener más información acerca de cómo proporcionar roles para AWS Glue, consulte [Políticas basadas en identidades de AWS Glue](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies).

**nota**  
Al rastrear un almacén de datos de Delta Lake, debe tener permisos de lectura y escritura en la ubicación de Simple Storage Service (Amazon S3).

Puede crear un rol para su rastreador y asociar las siguientes políticas:
+ La política `AWSGlueServiceRole` administrada por AWS, que concede los permisos necesarios en el Catálogo de datos
+ Política en línea que concede permisos en el origen de datos.
+ Política en línea que concede permisos de `iam:PassRole` al rol.

Un enfoque más rápido es dejar que el asistente de rastreadores de la consola de AWS Glue cree un rol para usted. El rol que crea es específicamente para el rastreador e incluye la política `AWSGlueServiceRole` administrada por AWS, más la política en línea necesaria para el origen de datos especificado.

Si especifica un rol existente para un rastreador, asegúrese de que incluya la política `AWSGlueServiceRole` o equivalente (o una versión reducida de esta política), además de las políticas en línea requeridas. Por ejemplo, para un almacén de datos de Amazon S3, la política en línea sería, como mínimo, la siguiente: 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::bucket/object*"
      ]
    }
  ]
}
```

------

Para un almacén de datos de Amazon DynamoDB, la política sería, como mínimo, la siguiente: 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DescribeTable",
        "dynamodb:Scan"
      ],
      "Resource": [
        "arn:aws:dynamodb:us-east-1:111122223333:table/table-name*"
      ]
    }
  ]
}
```

------

Si el rastreador lee datos de Amazon S3 cifrados por AWS Key Management Service (AWS KMS), entonces el rol de IAM debe tener permiso para descifrar la clave AWS KMS. Para obtener más información, consulte [Paso 2: creación de un rol de IAM para AWS Glue](create-an-iam-role.md).

# Definición y administración de clasificadores
<a name="add-classifier"></a>

Un clasificador lee los datos en un almacén de datos. Si reconoce el formato de los datos, genera un esquema. El clasificador también devuelve un número de certeza para indicar el grado de certeza del reconocimiento del formato. 

AWS Glue proporciona un conjunto de clasificadores integrados, pero también puede crear clasificadores personalizados. AWS Glue invoca clasificadores personalizados en primer lugar, en el orden especificado en su definición del rastreador. Según los resultados devueltos a partir de los clasificadores personalizados, AWS Glue también podría invocar clasificadores integrados. Si un clasificador devuelve `certainty=1.0` durante el procesamiento, indica que puede crear el esquema correcto con una seguridad del 100 por ciento. A continuación, AWS Glue usa la salida de ese clasificador. 

Si ningún clasificador devuelve `certainty=1.0`, AWS Glue usará la salida del clasificador con la mayor certeza. Si ningún clasificador devuelve una certeza mayor que `0.0`, AWS Glue devolverá la cadena de clasificación predeterminada de `UNKNOWN`.

## ¿Cuándo uso un clasificador?
<a name="classifier-when-used"></a>

Se usan clasificadores al rastrear un almacén de datos para definir tablas de metadatos en el AWS Glue Data Catalog. Puede configurar su rastreador con un conjunto ordenado de clasificadores. Cuando el rastreador invoca un clasificador, el clasificador determina si se reconocen los datos. Si el clasificador no puede reconocer los datos o no es 100 % seguro, el rastreador invoca el siguiente clasificador de la lista para determinar si puede reconocer los datos. 

 Para obtener información adicional acerca de cómo crear un clasificador mediante la consola de AWS Glue, consulte [Creación de clasificadores mediante la consola de AWS Glue](console-classifiers.md). 

## Clasificadores personalizados
<a name="classifier-defining"></a>

La salida de un clasificador incluye una cadena que indica la clasificación o el formato del archivo (por ejemplo, `json`) y el esquema del archivo. En el caso de los clasificadores personalizados, defina la lógica para crear el esquema en función del tipo de clasificador. Los tipos de clasificador incluyen la definición de esquemas en función de patrones de grok, etiquetas XML y rutas JSON.

Si cambia una definición de clasificador, no se vuelven a clasificar los datos que se rastrearon anteriormente con el clasificador. Un rastreador realiza un seguimiento de datos rastreados anteriormente. Los datos nuevos se clasifican con el clasificador actualizado, lo que podría dar lugar a un esquema actualizado. Si el esquema de sus datos ha evolucionado, actualice el clasificador para tener en cuenta los cambios de esquema cuando se ejecute el rastreador. Para volver a clasificar los datos con el fin de corregir un clasificador incorrecto, cree un nuevo rastreador con el clasificador actualizado. 

Para obtener más información acerca de la creación de clasificadores personalizados en AWS Glue, consulte [Redacción de clasificadores personalizados para diversos formatos de datos](custom-classifier.md).

**nota**  
Si uno de los clasificadores integrados reconoce el formato de sus datos, no es necesario que cree un clasificador personalizado.

## Clasificadores integrados
<a name="classifier-built-in"></a>

 AWS Glue proporciona clasificadores integrados para diversos formatos, incluidos JSON, CSV, registros web y muchos sistemas de bases de datos.

Si AWS Glue no encuentra un clasificador personalizado que se adapte mejor al formato de datos de entrada con una seguridad del 100 por ciento, invoca los clasificadores integrados en el orden mostrado en la siguiente tabla. Los clasificadores integrados devuelven un resultado para indicar si el formato coincide (`certainty=1.0`) o no coincide (`certainty=0.0`). El primer clasificador con `certainty=1.0` proporciona la cadena de clasificación y el esquema para una tabla de metadatos en su Data Catalog.


| Tipo de clasificador | Cadena de clasificación | Notas | 
| --- | --- | --- | 
| Apache Avro | avro | Lee el esquema al principio del archivo para determinar el formato. | 
| Apache ORC | orc | Lee los metadatos de archivo para determinar el formato. | 
| Apache Parquet | parquet | Lee el esquema al final del archivo para determinar el formato. | 
| JSON | json | Lee el principio del archivo para determinar el formato. | 
| JSON binario | bson | Lee el principio del archivo para determinar el formato. | 
| XML | xml | Lee el principio del archivo para determinar el formato. AWS Glue determina el esquema de la tabla basado en etiquetas XML del documento.  Para obtener información acerca de la creación de un clasificador XML personalizado para especificar filas en el documento, consulte [Escritura de clasificadores personalizados XML](custom-classifier.md#custom-classifier-xml).  | 
| Amazon Ion | ion | Lee el principio del archivo para determinar el formato. | 
| Registro Apache combinado | combined\$1apache | Determina los formatos de log a través de un patrón de grok. | 
| Registro Apache | apache | Determina los formatos de log a través de un patrón de grok. | 
| Registro de kernel de Linux | linux\$1kernel | Determina los formatos de log a través de un patrón de grok. | 
| Registro de Microsoft | microsoft\$1log | Determina los formatos de log a través de un patrón de grok. | 
| Registro de Ruby | ruby\$1logger | Lee el principio del archivo para determinar el formato. | 
| Registro de Squid 3.x | squid | Lee el principio del archivo para determinar el formato. | 
| Registro de monitorización de Redis | redismonlog | Lee el principio del archivo para determinar el formato. | 
| Registro de Redis | redislog | Lee el principio del archivo para determinar el formato. | 
| CSV | csv | Comprueba los siguientes delimitadores: coma (,), barra vertical (\$1), tabulación (\$1t), punto y coma (;) y Ctrl-A (\$1u0001). Ctrl-A es el carácter de control Unicode para Start Of Heading. | 
| Amazon Redshift | redshift | Usa la conexión de JDBC para importar metadatos. | 
| MySQL | mysql | Usa la conexión de JDBC para importar metadatos. | 
| PostgreSQL | postgresql | Usa la conexión de JDBC para importar metadatos. | 
| Base de datos de Oracle | oracle | Usa la conexión de JDBC para importar metadatos. | 
| Microsoft SQL Server | sqlserver | Usa la conexión de JDBC para importar metadatos. | 
| Amazon DynamoDB | dynamodb | Lee datos de la tabla de DynamoDB. | 

Los archivos en los siguientes formatos comprimidos se pueden clasificar:
+ ZIP (compatible con archivos que solo contengan un único archivo). Tenga en cuenta que Zip no es totalmente compatible en otros servicios (por el archivo).
+ BZIP
+ GZIP
+ LZ4
+ Snappy (compatible con los formatos Snappy estándar y nativo de Hadoop)

### Clasificador de CSV integrado
<a name="classifier-builtin-rules"></a>

El clasificador de CSV integrado analiza el contenido del archivo CSV para determinar el esquema de una tabla de AWS Glue. Este clasificador comprueba los siguientes delimitadores:
+ Coma (,)
+ Barra vertical (I)
+ Tabulador (\$1t)
+ Punto y coma (;)
+ Ctrl-A (\$1u0001)

  Ctrl-A es el carácter de control Unicode para `Start Of Heading`.

Para clasificarse como CSV, el esquema de tabla debe tener al menos dos columnas y dos filas de datos. El clasificador de CSV utiliza una serie de funciones heurísticas para determinar si un encabezado está en un determinado archivo. Si el clasificador no puede determinar un encabezado a partir de la primera fila de datos, los encabezados de columna se muestran como `col1`, `col2`, `col3`, etc. El clasificador de CSV determina si debe deducir un encabezado mediante la evaluación de las siguientes características del archivo:
+ Cada columna en un posible encabezado se analiza como un tipo de datos STRING.
+ Excepto en la última, cada columna en un posible encabezado incluye contenido de menos de 150 caracteres. Para permitir un delimitador final, la última columna puede estar vacía en el archivo.
+ Cada columna de un encabezado potencial debe cumplir los requisitos `regex` de AWS Glue correspondientes a un nombre de columna.
+ La fila de encabezado debe estar suficientemente diferenciada de las filas de datos. Para determinarlo, una o varias de las filas deben analizarse como un tipo distinto de STRING. Si todas las columnas son de tipo STRING, la primera fila de datos que no esté suficientemente diferenciada de las filas posteriores se usará como el encabezado.

**nota**  
Si el clasificador de CSV integrado no crea la tabla de AWS Glue como desea, es posible que deba usar una de las siguientes alternativas:  
Cambie los nombres de columnas en el Data Catalog, establezca `SchemaChangePolicy` en LOG y defina la configuración de salida de partición en `InheritFromTable` para las futuras ejecuciones de rastreador.
Cree un clasificador de grok para analizar los datos y asignar las columnas que desee.
El clasificador de CSV crea tablas haciendo referencia a `LazySimpleSerDe` como la biblioteca de serialización, lo que es una buena opción para la inferencia de tipo. Sin embargo, si los datos CSV contienen cadenas entre comillas, edite la definición de tabla y cambie la biblioteca SerDe a `OpenCSVSerDe`. Ajuste los tipos inferidos a STRING, establezca `SchemaChangePolicy` en LOG y defina la configuración de salida de partición en `InheritFromTable` para las futuras ejecuciones de rastreador. Para obtener más información acerca de las bibliotecas SerDe, consulte [Referencia de SerDe](https://docs.aws.amazon.com/athena/latest/ug/serde-reference.html) en la Guía del usuario de Amazon Athena.

# Redacción de clasificadores personalizados para diversos formatos de datos
<a name="custom-classifier"></a>

Puede proporcionar un clasificador personalizado para clasificar los datos de AWS Glue. Puede crear un clasificador personalizado con un patrón grok, con una etiqueta XML, con la notación de objetos JavaScript (JSON) o con valores separados por comas (CSV). Un rastreador de AWS Glue llama a un clasificador personalizado. Si el clasificador reconoce los datos, devuelve la clasificación y el esquema de los datos al rastreador. Puede que tenga que definir un clasificador personalizado si sus datos no coinciden con ningún clasificador integrado o si desea personalizar las tablas creadas por el rastreador.

 Para obtener información adicional acerca de cómo crear un clasificador mediante la consola de AWS Glue, consulte [Creación de clasificadores mediante la consola de AWS Glue](console-classifiers.md). 

AWS Glue ejecuta los clasificadores personalizados antes que los integrados, en el orden especificado. Cuando un rastreador encuentra un clasificador que coincide con los datos, la cadena de clasificación y el esquema se usan en la definición de las tablas escritas en su AWS Glue Data Catalog.

**Topics**
+ [Escritura de clasificadores personalizados de Grok](#custom-classifier-grok)
+ [Escritura de clasificadores personalizados XML](#custom-classifier-xml)
+ [Escritura de clasificadores personalizados JSON](#custom-classifier-json)
+ [Escritura de clasificadores personalizados CSV](#custom-classifier-csv)

## Escritura de clasificadores personalizados de Grok
<a name="custom-classifier-grok"></a>

Grok es una herramienta que se usa para analizar datos textuales con un patrón coincidente. Un patrón de grok es un conjunto designado de expresiones regulares (regex) que se usan para que los datos coincidan con una línea a la vez. AWS Glue usa patrones de grok para inferir el esquema de sus datos. Cuando un patrón de grok coincide con sus datos, AWS Glue usa el patrón para determinar la estructura de sus datos y mapearlos en campos.

AWS Glue proporciona muchos patrones integrados o usted puede definir los suyos propios. Puede crear un patrón de grok mediante patrones integrados y personalizados en su definición personalizada del clasificador. Puede adaptar un patrón de grok para clasificar formatos de archivos de texto personalizados.

**nota**  
Los clasificadores personalizados de grok de AWS Glue usan la biblioteca de serialización `GrokSerDe` para las tablas creadas en AWS Glue Data Catalog. Si usa AWS Glue Data Catalog con Amazon Athena, Amazon EMR o Redshift Spectrum, consulte la documentación acerca de esos servicios para obtener información acerca del soporte de `GrokSerDe`. Actualmente, podría tener problemas al consultar las tablas creadas con `GrokSerDe` desde Amazon EMR y Redshift Spectrum.

Esta es la sintaxis básica para los componentes de un patrón de grok:

```
%{PATTERN:field-name}
```

Los datos que coinciden con el elemento `PATTERN` designado se mapean a la columna `field-name` del esquema, con un tipo de datos predeterminado de `string`. Si lo prefiere, el tipo de datos para el campo se puede convertir en `byte`, `boolean`, `double`, `short`, `int`, `long` o `float` en el esquema resultante.

```
%{PATTERN:field-name:data-type}
```

Por ejemplo, para convertir un campo `num` en un tipo de datos `int`, puede usar este patrón: 

```
%{NUMBER:num:int}
```

Los patrones se pueden componer de otros patrones. Por ejemplo, puede tener un patrón para una marca temporal `SYSLOG` definida utilizando patrones para el mes, el día del mes y la hora (por ejemplo, `Feb 1 06:25:43`). Para estos datos, puede definir el siguiente patrón:

```
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
```

**nota**  
Los patrones de grok pueden procesar una única línea a la vez. No se admiten los patrones de varias líneas. Asimismo, no se admiten los saltos de línea dentro de un patrón.

### Valores personalizados para el clasificador grok
<a name="classifier-values"></a>

Al definir un clasificador grok, se proporcionan los siguientes valores para crear el clasificador personalizado.

**Nombre**  
Nombre del clasificador.

**Clasificación**  
La cadena de texto que se escribe para describir el formato de los datos que se clasifican; por ejemplo, `special-logs`.

**Patrón de Grok**  
El conjunto de patrones que se aplican al almacén de datos para determinar si existe una coincidencia. Estos patrones proceden de AWS Gluepatrones integrados[ de ](#classifier-builtin-patterns) y cualquier patrón personalizado que defina.  
A continuación se muestra un ejemplo de un patrón de grok:  

```
%{TIMESTAMP_ISO8601:timestamp} \[%{MESSAGEPREFIX:message_prefix}\] %{CRAWLERLOGLEVEL:loglevel} : %{GREEDYDATA:message}
```
Cuando los datos coinciden con `TIMESTAMP_ISO8601`, se crea una columna de esquema `timestamp`. El comportamiento es similar para los otros patrones designados del ejemplo.

**Patrones personalizados**  
Patrones personalizados opcionales definidos por usted. El patrón de grok que clasifica sus datos hace referencia a estos patrones. Puede hacer referencia a estos patrones personalizados en el patrón de grok aplicado a sus datos. Cada patrón de componente personalizado debe estar en una línea independiente. La sintaxis [Expresión regular (regex)](http://en.wikipedia.org/wiki/Regular_expression) se usa para definir el patrón.   
A continuación se muestra un ejemplo del uso de patrones personalizados:  

```
CRAWLERLOGLEVEL (BENCHMARK|ERROR|WARN|INFO|TRACE)
MESSAGEPREFIX .*-.*-.*-.*-.*
```
El primer patrón designado personalizado, `CRAWLERLOGLEVEL`, es una coincidencia si los datos coinciden con una de las cadenas enumeradas. El segundo patrón personalizado, `MESSAGEPREFIX`, intenta coincidir con una cadena prefijo del mensaje.

AWS Glue realiza un seguimiento de la hora de creación, la hora de la última actualización y la versión de su clasificador.

### Patrones integrados
<a name="classifier-builtin-patterns"></a>

AWS Glue proporciona muchos patrones comunes que puede usar para crear un clasificador personalizado. Puede añadir un patrón designado a `grok pattern` en una definición del clasificador.

La siguiente lista consta de una línea para cada patrón. En cada línea, al nombre del patrón le sigue su definición. Para definir el patrón, se utiliza la sintaxis de las [expresiones regulares (regex)](http://en.wikipedia.org/wiki/Regular_expression).

```
#<noloc>&GLU;</noloc> Built-in patterns
 USERNAME [a-zA-Z0-9._-]+
 USER %{USERNAME:UNWANTED}
 INT (?:[+-]?(?:[0-9]+))
 BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
 NUMBER (?:%{BASE10NUM:UNWANTED})
 BASE16NUM (?<![0-9A-Fa-f])(?:[+-]?(?:0x)?(?:[0-9A-Fa-f]+))
 BASE16FLOAT \b(?<![0-9A-Fa-f.])(?:[+-]?(?:0x)?(?:(?:[0-9A-Fa-f]+(?:\.[0-9A-Fa-f]*)?)|(?:\.[0-9A-Fa-f]+)))\b
 BOOLEAN (?i)(true|false)
 
 POSINT \b(?:[1-9][0-9]*)\b
 NONNEGINT \b(?:[0-9]+)\b
 WORD \b\w+\b
 NOTSPACE \S+
 SPACE \s*
 DATA .*?
 GREEDYDATA .*
 #QUOTEDSTRING (?:(?<!\\)(?:"(?:\\.|[^\\"])*"|(?:'(?:\\.|[^\\'])*')|(?:`(?:\\.|[^\\`])*`)))
 QUOTEDSTRING (?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))
 UUID [A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}
 
 # Networking
 MAC (?:%{CISCOMAC:UNWANTED}|%{WINDOWSMAC:UNWANTED}|%{COMMONMAC:UNWANTED})
 CISCOMAC (?:(?:[A-Fa-f0-9]{4}\.){2}[A-Fa-f0-9]{4})
 WINDOWSMAC (?:(?:[A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2})
 COMMONMAC (?:(?:[A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2})
 IPV6 ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?
 IPV4 (?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9])
 IP (?:%{IPV6:UNWANTED}|%{IPV4:UNWANTED})
 HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-_]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-_]{0,62}))*(\.?|\b)
 HOST %{HOSTNAME:UNWANTED}
 IPORHOST (?:%{HOSTNAME:UNWANTED}|%{IP:UNWANTED})
 HOSTPORT (?:%{IPORHOST}:%{POSINT:PORT})
 
 # paths
 PATH (?:%{UNIXPATH}|%{WINPATH})
 UNIXPATH (?>/(?>[\w_%!$@:.,~-]+|\\.)*)+
 #UNIXPATH (?<![\w\/])(?:/[^\/\s?*]*)+
 TTY (?:/dev/(pts|tty([pq])?)(\w+)?/?(?:[0-9]+))
 WINPATH (?>[A-Za-z]+:|\\)(?:\\[^\\?*]*)+
 URIPROTO [A-Za-z]+(\+[A-Za-z+]+)?
 URIHOST %{IPORHOST}(?::%{POSINT:port})?
 # uripath comes loosely from RFC1738, but mostly from what Firefox
 # doesn't turn into %XX
 URIPATH (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%_\-]*)+
 #URIPARAM \?(?:[A-Za-z0-9]+(?:=(?:[^&]*))?(?:&(?:[A-Za-z0-9]+(?:=(?:[^&]*))?)?)*)?
 URIPARAM \?[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*
 URIPATHPARAM %{URIPATH}(?:%{URIPARAM})?
 URI %{URIPROTO}://(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?
 
 # Months: January, Feb, 3, 03, 12, December
 MONTH \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b
 MONTHNUM (?:0?[1-9]|1[0-2])
 MONTHNUM2 (?:0[1-9]|1[0-2])
 MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])
 
 # Days: Monday, Tue, Thu, etc...
 DAY (?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)
 
 # Years?
 YEAR (?>\d\d){1,2}
 # Time: HH:MM:SS
 #TIME \d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?
 # TIME %{POSINT<24}:%{POSINT<60}(?::%{POSINT<60}(?:\.%{POSINT})?)?
 HOUR (?:2[0123]|[01]?[0-9])
 MINUTE (?:[0-5][0-9])
 # '60' is a leap second in most time standards and thus is valid.
 SECOND (?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)
 TIME (?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9])
 # datestamp is YYYY/MM/DD-HH:MM:SS.UUUU (or something like it)
 DATE_US %{MONTHNUM}[/-]%{MONTHDAY}[/-]%{YEAR}
 DATE_EU %{MONTHDAY}[./-]%{MONTHNUM}[./-]%{YEAR}
 DATESTAMP_US %{DATE_US}[- ]%{TIME}
 DATESTAMP_EU %{DATE_EU}[- ]%{TIME}
 ISO8601_TIMEZONE (?:Z|[+-]%{HOUR}(?::?%{MINUTE}))
 ISO8601_SECOND (?:%{SECOND}|60)
 TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
 TZ (?:[PMCE][SD]T|UTC)
 DATESTAMP_RFC822 %{DAY} %{MONTH} %{MONTHDAY} %{YEAR} %{TIME} %{TZ}
 DATESTAMP_RFC2822 %{DAY}, %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{ISO8601_TIMEZONE}
 DATESTAMP_OTHER %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR}
 DATESTAMP_EVENTLOG %{YEAR}%{MONTHNUM2}%{MONTHDAY}%{HOUR}%{MINUTE}%{SECOND}
 CISCOTIMESTAMP %{MONTH} %{MONTHDAY} %{TIME}
 
 # Syslog Dates: Month Day HH:MM:SS
 SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
 PROG (?:[\w._/%-]+)
 SYSLOGPROG %{PROG:program}(?:\[%{POSINT:pid}\])?
 SYSLOGHOST %{IPORHOST}
 SYSLOGFACILITY <%{NONNEGINT:facility}.%{NONNEGINT:priority}>
 HTTPDATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT}
 
 # Shortcuts
 QS %{QUOTEDSTRING:UNWANTED}
 
 # Log formats
 SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:
 
 MESSAGESLOG %{SYSLOGBASE} %{DATA}
 
 COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{Bytes:bytes=%{NUMBER}|-})
 COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent}
 COMMONAPACHELOG_DATATYPED %{IPORHOST:clientip} %{USER:ident;boolean} %{USER:auth} \[%{HTTPDATE:timestamp;date;dd/MMM/yyyy:HH:mm:ss Z}\] "(?:%{WORD:verb;string} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion;float})?|%{DATA:rawrequest})" %{NUMBER:response;int} (?:%{NUMBER:bytes;long}|-)
 
 
 # Log Levels
 LOGLEVEL ([A|a]lert|ALERT|[T|t]race|TRACE|[D|d]ebug|DEBUG|[N|n]otice|NOTICE|[I|i]nfo|INFO|[W|w]arn?(?:ing)?|WARN?(?:ING)?|[E|e]rr?(?:or)?|ERR?(?:OR)?|[C|c]rit?(?:ical)?|CRIT?(?:ICAL)?|[F|f]atal|FATAL|[S|s]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)
```

## Escritura de clasificadores personalizados XML
<a name="custom-classifier-xml"></a>

XML define la estructura de un documento utilizando etiquetas en el archivo. Con un clasificador personalizado XML, puede especificar el nombre de etiqueta usado para definir una fila.

### Valores de clasificador personalizados para un clasificador XML
<a name="classifier-values-xml"></a>

Al definir un clasificador XML, proporciona los siguientes valores a AWS Glue para crear el clasificador. El campo de clasificación de este clasificador se establece en `xml`.

**Nombre**  
Nombre del clasificador.

**Etiqueta de fila**  
El nombre de etiqueta XML que define una fila de tabla en el documento XML, sin paréntesis `< >`. El nombre debe cumplir las reglas de XML para una etiqueta.  
El elemento que contiene los datos de fila **no puede** ser un elemento vacío de autocierre. Por ejemplo, ** **noAWS Glue analiza este elemento vacío:  

```
            <row att1=”xx” att2=”yy” />  
```
 Los elementos vacíos se pueden escribir de la siguiente manera:  

```
            <row att1=”xx” att2=”yy”> </row> 
```

AWS Glue realiza un seguimiento de la hora de creación, la hora de la última actualización y la versión de su clasificador.

Por ejemplo, suponga que tiene el archivo XML siguiente. Para crear una tabla de AWS Glue que solo contiene columnas para autor y título, cree un clasificador en la consola de AWS Glue con **Row tag (Etiqueta de fila)** como `AnyCompany`. A continuación, añada y ejecute un rastreador que use este clasificador personalizado.

```
<?xml version="1.0"?>
<catalog>
   <book id="bk101">
     <AnyCompany>
       <author>Rivera, Martha</author>
       <title>AnyCompany Developer Guide</title>
     </AnyCompany>
   </book>
   <book id="bk102">
     <AnyCompany>   
       <author>Stiles, John</author>
       <title>Style Guide for AnyCompany</title>
     </AnyCompany>
   </book>
</catalog>
```

## Escritura de clasificadores personalizados JSON
<a name="custom-classifier-json"></a>

JSON es un formato de intercambio de datos. Define estructuras de datos con pares nombre-valor o una lista ordenada de valores. Con un clasificador personalizado JSON, puede especificar la ruta de JSON a una estructura de datos que se usa para definir el esquema para su tabla.

### Valores personalizados del clasificador en AWS Glue
<a name="classifier-values-json"></a>

Al definir un clasificador JSON, proporciona los siguientes valores a AWS Glue para crear el clasificador. El campo de clasificación de este clasificador se establece en `json`.

**Nombre**  
Nombre del clasificador.

**JSON path (Ruta JSON)**  
Ruta de JSON que apunta a un objeto que se usa para definir un esquema de tabla. La ruta de JSON se puede escribir en la notación de puntos o la notación de corchete. Se admiten los siguientes operadores:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/custom-classifier.html)

AWS Glue realiza un seguimiento de la hora de creación, la hora de la última actualización y la versión de su clasificador.

**Example Uso de un clasificador JSON para extraer registros de una matriz**  
Supongamos que sus datos JSON son una matriz de registros. Por ejemplo, las primeras líneas de su archivo podrían tener el siguiente aspecto:  

```
[
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ak",
    "name": "Alaska"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:1",
    "name": "Alabama's 1st congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:2",
    "name": "Alabama's 2nd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:3",
    "name": "Alabama's 3rd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:4",
    "name": "Alabama's 4th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:5",
    "name": "Alabama's 5th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:6",
    "name": "Alabama's 6th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:7",
    "name": "Alabama's 7th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:1",
    "name": "Arkansas's 1st congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:2",
    "name": "Arkansas's 2nd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:3",
    "name": "Arkansas's 3rd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:4",
    "name": "Arkansas's 4th congressional district"
  }
]
```
Al ejecutar un rastreador mediante el clasificador JSON integrado, todo el archivo se usará para definir el esquema. Como no especifica una ruta de JSON, el rastreador tratará los datos como un objeto, es decir, solo una matriz. Por ejemplo, el esquema podría tener el siguiente aspecto:  

```
root
|-- record: array
```
Sin embargo, para crear un esquema que se basa en cada registro de la matriz JSON, cree un clasificador JSON personalizado y especifique la ruta de JSON como `$[*]`. Al especificar esta ruta de JSON, el clasificador interroga a los 12 registros de la matriz para determinar el esquema. El esquema resultante contiene campos independientes para cada objeto, similares al siguiente ejemplo:  

```
root
|-- type: string
|-- id: string
|-- name: string
```

**Example Uso de un clasificador JSON para examinar solo las partes de un archivo**  
Supongamos que sus datos JSON siguen el patrón del archivo JSON de ejemplo `s3://awsglue-datasets/examples/us-legislators/all/areas.json` procedente de [http://everypolitician.org/](http://everypolitician.org/). Los objetos de ejemplo del archivo JSON tienen un aspecto similar al siguiente:  

```
{
  "type": "constituency",
  "id": "ocd-division\/country:us\/state:ak",
  "name": "Alaska"
}
{
  "type": "constituency",
  "identifiers": [
    {
      "scheme": "dmoz",
      "identifier": "Regional\/North_America\/United_States\/Alaska\/"
    },
    {
      "scheme": "freebase",
      "identifier": "\/m\/0hjy"
    },
    {
      "scheme": "fips",
      "identifier": "US02"
    },
    {
      "scheme": "quora",
      "identifier": "Alaska-state"
    },
    {
      "scheme": "britannica",
      "identifier": "place\/Alaska"
    },
    {
      "scheme": "wikidata",
      "identifier": "Q797"
    }
  ],
  "other_names": [
    {
      "lang": "en",
      "note": "multilingual",
      "name": "Alaska"
    },
    {
      "lang": "fr",
      "note": "multilingual",
      "name": "Alaska"
    },
    {
      "lang": "nov",
      "note": "multilingual",
      "name": "Alaska"
    }
  ],
  "id": "ocd-division\/country:us\/state:ak",
  "name": "Alaska"
}
```
Al ejecutar un rastreador mediante el clasificador JSON integrado, todo el archivo se usará para crear el esquema. Es posible que termine contando con un esquema similar a este:  

```
root
|-- type: string
|-- id: string
|-- name: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
```
Sin embargo, para crear un esquema con solo el objeto “`id`”, cree un clasificador JSON personalizado y especifique la ruta de JSON como `$.id`. A continuación, el esquema se basa solo en el campo “`id`”:  

```
root
|-- record: string
```
Las primeras líneas de datos extraídas con este esquema tienen el siguiente aspecto:  

```
{"record": "ocd-division/country:us/state:ak"}
{"record": "ocd-division/country:us/state:al/cd:1"}
{"record": "ocd-division/country:us/state:al/cd:2"}
{"record": "ocd-division/country:us/state:al/cd:3"}
{"record": "ocd-division/country:us/state:al/cd:4"}
{"record": "ocd-division/country:us/state:al/cd:5"}
{"record": "ocd-division/country:us/state:al/cd:6"}
{"record": "ocd-division/country:us/state:al/cd:7"}
{"record": "ocd-division/country:us/state:ar/cd:1"}
{"record": "ocd-division/country:us/state:ar/cd:2"}
{"record": "ocd-division/country:us/state:ar/cd:3"}
{"record": "ocd-division/country:us/state:ar/cd:4"}
{"record": "ocd-division/country:us/state:as"}
{"record": "ocd-division/country:us/state:az/cd:1"}
{"record": "ocd-division/country:us/state:az/cd:2"}
{"record": "ocd-division/country:us/state:az/cd:3"}
{"record": "ocd-division/country:us/state:az/cd:4"}
{"record": "ocd-division/country:us/state:az/cd:5"}
{"record": "ocd-division/country:us/state:az/cd:6"}
{"record": "ocd-division/country:us/state:az/cd:7"}
```
Para crear un esquema basado en un objeto profundamente anidado, como “`identifier`”, en el archivo JSON, puede crear un clasificador JSON personalizado y especificar la ruta de JSON como `$.identifiers[*].identifier`. Aunque el esquema es similar al ejemplo anterior, se basa en un objeto diferente del archivo JSON.   
El esquema sería similar al siguiente:  

```
root
|-- record: string
```
Al mostrar las primeras líneas de datos de la tabla, se muestra a su vez que el esquema se basa en los datos del objeto “`identifier`”:  

```
{"record": "Regional/North_America/United_States/Alaska/"}
{"record": "/m/0hjy"}
{"record": "US02"}
{"record": "5879092"}
{"record": "4001016-8"}
{"record": "destination/alaska"}
{"record": "1116270"}
{"record": "139487266"}
{"record": "n79018447"}
{"record": "01490999-8dec-4129-8254-eef6e80fadc3"}
{"record": "Alaska-state"}
{"record": "place/Alaska"}
{"record": "Q797"}
{"record": "Regional/North_America/United_States/Alabama/"}
{"record": "/m/0gyh"}
{"record": "US01"}
{"record": "4829764"}
{"record": "4084839-5"}
{"record": "161950"}
{"record": "131885589"}
```
Para crear una tabla basada en otro objeto profundamente anidado, como el campo “`name`” de la matriz “`other_names`” del archivo JSON, puede crear un clasificador JSON personalizado y especificar la ruta de JSON como `$.other_names[*].name`. Aunque el esquema es similar al ejemplo anterior, se basa en un objeto diferente del archivo JSON. El esquema sería similar al siguiente:  

```
root
|-- record: string
```
Al mostrar las primeras líneas de datos de la tabla, se muestra a su vez que se basa en los datos del objeto “`name`” de la matriz “`other_names`”:  

```
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Аляска"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "ألاسكا"}
{"record": "ܐܠܐܣܟܐ"}
{"record": "الاسكا"}
{"record": "Alaska"}
{"record": "Alyaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Штат Аляска"}
{"record": "Аляска"}
{"record": "Alaska"}
{"record": "আলাস্কা"}
```

## Escritura de clasificadores personalizados CSV
<a name="custom-classifier-csv"></a>

 Los clasificadores CSV personalizados permiten especificar los tipos de datos para cada columna en el campo del clasificador CSV personalizado. Se puede especificar el tipo de datos separados por una coma. Al especificar los tipos de datos, se pueden anular los tipos de datos inferidos por los rastreadores y garantizar que los datos se clasifiquen correctamente.

Puede configurar el SerDe para procesar CSV en el clasificador, lo que se aplicará en el Data Catalog.

Al crear un clasificador personalizado, también se puede volver a utilizarlo para diferentes rastreadores.
+  Para los archivos CSV con solo encabezados (sin datos), estos archivos se clasificarán como DESCONOCIDOS ya que no se proporciona suficiente información. Si especifica que el CSV “tiene encabezados” en la opción *Encabezados de columna* y proporciona los tipos de datos, se pueden clasificar estos archivos correctamente. 

Puede utilizar un clasificador CSV personalizado para deducir el esquema de distintos tipos de datos CSV. Entre los atributos personalizados que puede proporcionar para el clasificador, se incluyen los delimitadores, una opción de SerDe de CSV, las opciones sobre el encabezado y si se van a realizar o no ciertas validaciones de los datos.

### Valores personalizados del clasificador en AWS Glue
<a name="classifier-values-csv"></a>

Cuando defina un clasificador CSV, debe proporcionar los siguientes valores a AWS Glue para que pueda crear el clasificador. El campo de clasificación de este clasificador se establece en `csv`.

**Classifier name (Nombre de clasificador)**  
Nombre del clasificador.

**Serde de CSV**  
Establece el SerDe para procesar CSV en el clasificador, que se aplicará en el catálogo de datos. Las opciones son Open CSV SerDe, Lazy Simple SerDe y None. Puede especificar el valor Ninguno cuando desee que el rastreador realice la detección.

**Delimitador de columnas**  
Símbolo personalizado que indica qué elemento va a separar cada entrada de columna en la fila. Proporcione un carácter Unicode. Si no puede escribir el delimitador, puede copiarlo y pegarlo. Esto funciona con los caracteres imprimibles, incluidos con los que el sistema no es compatible (normalmente se muestran como □).

**Símbolo de comillas**  
Símbolo personalizado que indica qué elemento va a combinar contenido en un valor de columna único. Debe ser diferente al delimitador de columnas. Proporcione un carácter Unicode. Si no puede escribir el delimitador, puede copiarlo y pegarlo. Esto funciona con los caracteres imprimibles, incluidos con los que el sistema no es compatible (normalmente se muestran como □).

**Encabezados de columna**  
Indica cómo deben detectarse los encabezados de columna en el archivo CSV. Si el archivo CSV personalizado tiene encabezados de columna, escriba una lista delimitada por comas con los encabezados de columna.

**Opciones de procesamiento: permitir archivos con una sola columna**  
Permite procesar los archivos que contienen una sola columna.

**Opciones de procesamiento: quitar un espacio en blanco antes de identificar los valores de columna**  
Indica si los valores se van a recortar antes de identificar el tipo de valores de columna.

**Tipos de datos personalizados: *opcional***  
 Ingrese el tipo de datos personalizado separados por una coma. Especifica los tipos de datos personalizados del archivo CSV. El tipo de datos personalizado debe ser un tipo de datos compatible. Los tipos de datos admitidos son: “BINARIO”, “BOOLEANO”, “FECHA”, “DECIMAL”, “DOUBLE”, “FLOAT”, “INT”, “LONG”, “SHORT”, “STRING”, “TIMESTAMP”. Los tipos de datos no compatibles mostrarán un error. 

# Creación de clasificadores mediante la consola de AWS Glue
<a name="console-classifiers"></a>

Un clasificador determina el esquema de sus datos. Puede escribir un clasificador personalizado y apuntar a él desde AWS Glue. 

## Creación de clasificadores
<a name="add-classifier-console"></a>

Para añadir un clasificador en la consola de AWS Glue, seleccione **Add classifier (Añadir clasificador)**. Cuando define un clasificador, suministra valores para los elementos siguientes:
+ **Nombre del clasificador**: facilita un nombre único para el clasificador.
+ **Tipo de clasificador**: tipo de clasificación de las tablas que este clasificador deduce.
+ **Última actualización**: última actualización de este clasificador.

**Classifier name (Nombre de clasificador)**  
Facilite un nombre único para el clasificador.

**Tipo de clasificador**  
Elija el tipo de clasificador que debe crearse.

Dependiendo del tipo de clasificador que elija, configure las siguientes propiedades para el clasificador:

------
#### [ Grok ]
+ **Clasificación** 

  Describa el formato o el tipo de datos que se clasifica o proporcione una etiqueta personalizada. 
+ **Patrón de Grok** 

  Este valor se utiliza para analizar los datos en un esquema estructurado. El patrón de grok se compone de patrones con nombre que describen el formato de su almacén de datos. Debe escribir este patrón de grok con los patrones integrados con nombre que AWS Glue proporciona y los patrones personalizados que escribe e incluye en el campo **Custom patterns (Patrones personalizados)**. Aunque puede que los resultados del depurador de grok no coincidan exactamente con los resultados de AWS Glue, le sugerimos que pruebe su patrón utilizando algunos datos de muestra con un depurador de grok. Puede encontrar depuradores de grok en la web. Los patrones integrados con nombre que AWS Glue proporciona suelen ser compatibles con los patrones de grok que están disponibles en la web. 

  Cree su patrón de grok añadiendo iterativamente patrones con nombre y compruebe sus resultados en un depurador. Esta actividad le ofrece la confianza de que cuando el rastreador de AWS Glue ejecute el patrón de grok, sus datos se podrán analizar.
+ **Patrones personalizados** 

  Para los clasificadores de grok, son componentes básicos opcionales del **Grok pattern** (Patrón de grok) que escribe. Cuando los patrones integrados no pueden analizar sus datos, es posible que tenga que escribir un patrón personalizado. Estos patrones personalizados se definen en este campo y se hace referencia a ellos en el campo **Grok pattern** (Patrón de Grok). Cada patrón personalizado se define en una línea independiente. Al igual que los patrones integrados, se compone de una definición de patrón con nombre que utiliza la sintaxis [expresión regular (regex)](http://en.wikipedia.org/wiki/Regular_expression). 

  En el ejemplo siguiente se ve el nombre `MESSAGEPREFIX` seguido de una definición de expresión regular para aplicarla a sus datos a fin de establecer si siguen el patrón o no. 

  ```
  MESSAGEPREFIX .*-.*-.*-.*-.*
  ```

------
#### [ XML ]
+ **Etiqueta de fila** 

  Para los clasificadores de XML, nombre de la etiqueta XML que define una fila de una tabla en el documento XML. Escriba el nombre sin corchetes angulares `< >`. El nombre debe cumplir las reglas de XML para una etiqueta.

  Para obtener más información, consulte [Escritura de clasificadores personalizados XML](custom-classifier.md#custom-classifier-xml). 

------
#### [ JSON ]
+ **JSON path** (Ruta JSON) 

  Para los clasificadores de JSON, ruta de JSON al objeto, la matriz o el valor que define una fila de la tabla que se está creando. Escriba el nombre con sintaxis JSON de punto o corchete y utilizando los operadores compatibles de AWS Glue. 

  Para obtener más información, consulte la lista de operadores en [Escritura de clasificadores personalizados JSON](custom-classifier.md#custom-classifier-json). 

------
#### [ CSV ]
+ **Delimitador de columnas** 

  Único caracter o símbolo personalizado que indica qué elemento va a separar cada entrada de columna en la fila. Elija el delimitador en la lista o elija `Other` para introducir un delimitador personalizado.
+ **Símbolo de comillas** 

  Único caracter o símbolo personalizado que indica qué elemento va a combinar contenido en un valor de columna único. Debe ser diferente al delimitador de columnas. Elija el símbolo de comillas de la lista o elija `Other` para introducir un carácter de comilla personalizado.
+ **Encabezados de columna** 

  Indica cómo deben detectarse los encabezados de columna en el archivo CSV. Puede elegir `Has headings`, `No headings`, o `Detect headings`. Si el archivo CSV personalizado tiene encabezados de columna, escriba una lista delimitada por comas con los encabezados de columna. 
+ **Permita archivos con una sola columna** 

  Para clasificarse como CSV, los datos deben tener al menos dos columnas y dos filas de datos. Utilice esta opción para permitir procesar los archivos que contienen una sola columna.
+ **Quite los espacios en blanco antes de identificar los valores de columna** 

  Esta opción indica si los valores se van a recortar antes de identificar el tipo de valores de columna.
+  **Tipo de datos personalizado** 

   (Opcional): ingrese los tipos de datos personalizados en una lista delimitada por comas. Los tipos de datos admitidos son: “BINARIO”, “BOOLEANO”, “FECHA”, “DECIMAL”, “DOUBLE”, “FLOAT”, “INT”, “LONG”, “SHORT”, “STRING”, “TIMESTAMP”. 
+  **Serde de CSV** 

   (Opcional): un SerDe para procesar CSV en el clasificador, lo que se aplicará en el catálogo de datos. Elija entre `Open CSV SerDe`, `Lazy Simple SerDe` o `None`. Puede especificar el valor `None` cuando desee que el rastreador realice la detección. 

------

Para obtener más información, consulte [Redacción de clasificadores personalizados para diversos formatos de datos](custom-classifier.md).

## Visualización de clasificadores
<a name="view-classifiers-console"></a>

Para ver una lista de todos los clasificadores que ha creado, abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) y elija la pestaña **Classifiers (Clasificadores)**.

La lista muestra las siguientes propiedades sobre cada clasificador:
+ **Clasificadores**: nombre del clasificador. Cuando crea un clasificador, debe proporcionarle un nombre.
+ **Clasificación**: tipo de clasificación de las tablas que este clasificador deduce.
+ **Última actualización**: última actualización de este clasificador.

## Administración de clasificadores
<a name="manage-classifiers-console"></a>

En la lista **Classifiers (Clasificadores)** de la consola de AWS Glue, puede añadir, editar y eliminar clasificadores. Para consultar más detalles sobre un clasificador, seleccione el nombre del clasificador en la lista. Los detalles incluirán la información que definió al crear el clasificador. 

# Configuración de rastreadores
<a name="define-crawler"></a>

Un rastreador obtiene acceso al almacén de datos, identifica metadatos y crea definiciones de tablas en AWS Glue Data Catalog. El panel **Crawlers (Rastreadores)** de la consola de AWS Glue lista todos los rastreadores que crea. La lista muestra el estado y las métricas desde la última ejecución de su rastreador.

 Este tema contiene el proceso paso a paso de configuración de un rastreador y abarca aspectos clave como la configuración de parámetros del rastreador, la definición de los orígenes de datos que se van a rastrear, la configuración de la seguridad y la administración de los datos rastreados. 

**Topics**
+ [Paso 1: configurar las propiedades del rastreador](define-crawler-set-crawler-properties.md)
+ [Paso 2: elegir orígenes de datos y clasificadores](define-crawler-choose-data-sources.md)
+ [Paso 3: Establecer configuración de seguridad](define-crawler-configure-security-settings.md)
+ [Paso 4: establecer salida y programación](define-crawler-set-output-and-scheduling.md)
+ [Paso 5: Revisar y crear](define-crawler-review.md)

# Paso 1: configurar las propiedades del rastreador
<a name="define-crawler-set-crawler-properties"></a>

**Cómo configurar un rastreador**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\). Elija **Crawlers (Rastreadores)** en el panel de navegación.

1.  Elija **Crear rastreador** y siga las instrucciones en el asistente **Crear rastreador**. El asistente le explicará los pasos necesarios para crear un rastreador. Si desea añadir clasificadores personalizados para definir el esquema, consulte [Definición y administración de clasificadores](add-classifier.md). 

1.  Ingrese un nombre y una descripción para su rastreador (opcional). Si lo desea, puede etiquetar el rastreador con una **clave de etiqueta** y un **valor de etiqueta** opcional. Una vez creadas, las claves de etiqueta son de solo lectura. Utilice etiquetas en algunos recursos para que le resulte más fácil organizarlos e identificarlos. Para obtener más información, consulte las etiquetas de AWS en AWS Glue.   
**Nombre**  
El nombre puede contener letras (A-Z), números (0-9), guiones (-) o guiones bajos (\$1) y puede tener un máximo de 255 caracteres.  
**Descripción**  
La descripción puede tener una longitud máxima de 2048 caracteres.  
**Etiquetas**  
Utilice etiquetas para organizar e identificar los recursos. Para obtener más información, consulte los siguientes temas:   
   + [Etiquetas de AWS en AWS Glue](monitor-tags.md)

# Paso 2: elegir orígenes de datos y clasificadores
<a name="define-crawler-choose-data-sources"></a>

A continuación, configure los orígenes de datos y los clasificadores del rastreador.

Para obtener más información sobre orígenes de datos compatibles, consulte [Orígenes de datos admitidos para el rastreo](crawler-data-stores.md).

**Configuración del origen de datos**  
Seleccione la opción que corresponda para responder la pregunta **¿Sus datos ya están asignados a tablas de AWS Glue?**: elija «Aún no» o «Sí». De manera predeterminada, está seleccionado 'Aún no'.   
El rastreador puede acceder a los almacenes de datos directamente como origen de rastreo o puede utilizar tablas existentes del Catálogo de datos como origen. Si el rastreador utiliza tablas de catálogos existentes, este rastrea los almacenes de datos especificados por dichas tablas de catálogos.   
+ Not yet (Aún no): seleccione uno o varios orígenes de datos para rastrearlos. Un rastreador puede rastrear varios almacenes de datos de diferentes tipos (Amazon S3, JDBC, etc.).

  Solo puede configurar un almacén de datos por vez. Después de proporcionar la información de conexión e incluir rutas de acceso y patrones de exclusión, tendrá la opción de agregar otro almacén de datos.
+ Yes (Sí): seleccione las tablas existentes de su Catálogo de datos de AWS Glue. Las tablas de catálogos especifican los almacenes de datos que se van a rastrear. El rastreador puede rastrear solo tablas de catálogos en una única ejecución; no puede combinar otros tipos de fuentes.

  Una razón habitual para especificar una tabla de catálogo como origen es que creó la tabla de forma manual (dado que ya conocía la estructura del almacén de datos) y quiere un rastreador para mantener la tabla actualizada, incluido el agregado de nuevas particiones. Para obtener información de otras razones, consulte [Actualización de tablas del Catálogo de datos creadas de forma manual mediante rastreadores](tables-described.md#update-manual-tables).

  Cuando especifique las tablas existentes como el tipo de origen de rastreador, se aplicarán las siguientes condiciones:
  + El nombre de la base de datos es opcional.
  + Solo se permiten las tablas de catálogos que especifiquen los almacenes de datos de Amazon S3, Amazon DynamoDB o Delta Lake.
  + No se crean nuevas tablas de catálogos cuando el rastreador se ejecuta. Las tablas existentes se actualizan según sea necesario, lo que incluye la adición de nuevas particiones.
  + Los objetos eliminados encontrados en los almacenes de datos se ignoran; no se eliminan tablas de catálogos. En su lugar, el rastreador escribe un mensaje de registro. (`SchemaChangePolicy.DeleteBehavior=LOG`)
  + La opción de la configuración del rastreador para crear un único esquema para cada ruta de Amazon S3 está activada de forma predeterminada y no se puede desactivar. (`TableGroupingPolicy`=`CombineCompatibleSchemas`) Para obtener más información, consulte [Creación de un único esquema para cada ruta de inclusión de Amazon S3](crawler-grouping-policy.md).
  + No se pueden combinar las tablas de catálogos como origen con cualquier otro tipo de origen (por ejemplo, Amazon S3 o Amazon DynamoDB).
  
 Para usar tablas Delta, primero cree una tabla Delta con el DDL de Athena o la API de AWS Glue.   
 Mediante Athena, establezca la ubicación en su carpeta Amazon S3 y el tipo de tabla en “DELTA”.   

```
CREATE EXTERNAL TABLE database_name.table_name
LOCATION 's3://bucket/folder/'
TBLPROPERTIES ('table_type' = 'DELTA')
```
 Con la API de AWS Glue, especifique el tipo de tabla en el mapa de parámetros de la tabla. Los parámetros de la tabla deben incluir el siguiente par clave/valor. Para obtener más información sobre cómo crear una tabla, consulte la [documentación de Boto3 sobre create\$1table](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue/client/create_table.html).   

```
{
    "table_type":"delta"
}
```

**Origen de datos**  
Seleccione o agregue la lista de orígenes de datos que el rastreador va a analizar.  
 (Opcional) Si elige JDBC como origen de datos, puede usar sus propios controladores JDBC al especificar el acceso a la conexión en el que se almacena la información del controlador. 

**Incluir ruta**  
 Al evaluar lo que se va a incluir o excluir en un rastreo, un rastreador comienza por evaluar la ruta de inclusión necesaria. Para almacenes de datos relacionales, Amazon S3, MongoDB, MongoDB Atlas y Amazon DocumentDB (con compatibilidad con MongoDB), debe especificar una ruta de inclusión.     
Para un almacén de datos de Amazon S3  
Elija si desea especificar una ruta de esta cuenta o de una cuenta diferente y busque una ruta de Amazon S3.  
Para los almacenes de datos de Amazon S3, la sintaxis de ruta de inclusión es `bucket-name/folder-name/file-name.ext`. Para rastrear todos los objetos de un bucket, debe especificar solo el nombre de bucket en la ruta de inclusión. EL patrón de exclusión es relativo a la ruta de inclusión  
Para un almacén de datos de Delta Lake:  
Especifique una o más rutas de Simple Storage Service (Amazon S3) a las tablas Delta como s3://*bucket*/*prefijo*/*objeto*.  
Para un almacén de datos de Iceberg o Hudi  
*Especifique una o más rutas de Amazon S3 que contengan carpetas con metadatos de tablas de Iceberg o Hudi como s3://*bucket*/prefijo*.  
En el caso de los almacenes de datos de Iceberg y Hudi, la carpeta de Iceberg/Hudi puede estar ubicada en una carpeta secundaria de la carpeta raíz. El rastreador escaneará todas las carpetas situadas debajo de una ruta para una carpeta Hudi.  
En un almacén de datos JDBC  
Ingrese *<database>*/*<schema>*/*<table>* o *<database>*/*<table>*, en función del producto de base de datos. Oracle Database y MySQL no permiten utilizar un esquema en la ruta. Puede sustituir *<esquema>* o *<tabla>* por el carácter de porcentaje (%). Por ejemplo, en una base de datos Oracle con el identificador del sistema (SID) `orcl`, escriba `orcl/%` para importar todas las tablas a las que el usuario especificado en la conexión tiene acceso.  
Este campo distingue entre mayúsculas y minúsculas.
 Si decide incorporar sus versiones de controladores JDBC, los rastreadores AWS Glue consumirán recursos en trabajos AWS Glue y en los buckets de Amazon S3 para garantizar que los controladores proporcionados se ejecuten en su entorno. El uso adicional de los recursos se reflejará en su cuenta. Los controladores están limitados a las propiedades descritas en [Agregar una conexión AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/console-connections.html).   
Para un almacén de datos MongoDB, MongoDB Atlas o Amazon DocumentDB  
Para MongoDB, MongoDB Atlas y Amazon DocumentDB (con compatibilidad con MongoDB), la sintaxis es `database/collection`.
Para los almacenes de datos de JDBC, la sintaxis es `database-name/schema-name/table-name` o `database-name/table-name`. La sintaxis depende de si el motor de base de datos admite esquemas en una base de datos. Por ejemplo, en el caso de motores de base de datos como MySQL u Oracle, no especifique `schema-name` en la ruta de inclusión. Puede sustituir el signo de porcentaje (`%`) de un esquema o una tabla en la ruta de inclusión para representar todos los esquemas o todas las tablas de una base de datos. No se puede sustituir el signo de porcentaje (`%`) de base de datos en la ruta de inclusión. 

**Profundidad transversal máxima (solo para los almacenes de datos de Iceberg o Hudi)**  
Define la profundidad máxima de la ruta de Amazon S3 que el rastreador puede recorrer para descubrir la carpeta de metadatos de Iceberg o Hudi en la ruta de Amazon S3. El objetivo de este parámetro es limitar el tiempo de ejecución del rastreador. El valor predeterminado es 10 y el valor máximo es 20.

**Patrones de exclusión**  
Estos le permiten excluir determinados archivos o tablas desde del rastreo. Una ruta de exclusión es relativa a la ruta de inclusión. Por ejemplo, para excluir una tabla en su almacén de datos de JDBC, escriba el nombre de la tabla en la ruta de exclusión.   
Un rastreador se conecta a un almacén de datos de JDBC mediante una conexión de AWS Glue que contiene una cadena de conexión de URI de JDBC. El rastreador solo tiene acceso a los objetos en el motor de base de datos mediante el nombre de usuario y la contraseña de JDBC de la conexión de AWS Glue. *El rastreador solo puede crear tablas a las que puede obtener acceso a través de la conexión de JDBC.* Una vez que el rastreador obtiene acceso al motor de base de datos con el URI de JDBC, la ruta de inclusión se utiliza para determinar qué tablas de datos del motor de base de datos se crean en el Catálogo de datos. Por ejemplo, con MySQL, si especifica una ruta de inclusión de `MyDatabase/%`, todas las tablas en `MyDatabase` se crean en el Catálogo de datos. Al obtener acceso a Amazon Redshift, si especifica una ruta de inclusión de `MyDatabase/%`, todas las tablas en todos los esquemas de la base de datos `MyDatabase` se crean en el Catálogo de datos. Si especifica una ruta de inclusión de todas `MyDatabase/MySchema/%`, se crean todas las tablas de la base de datos `MyDatabase` y el esquema `MySchema`.   
Después de especificar una ruta de inclusión, puede excluir objetos del rastreo que, de otro modo, su ruta de inclusión incluiría especificando uno o varios patrones de exclusión `glob` tipo Unix. Estos patrones se aplican a la ruta de inclusión para determinar qué objetos están excluidos. Estos patrones también se almacenan como una propiedad de las tablas creadas por el rastreador. AWS Glue Las extensiones PySpark, como `create_dynamic_frame.from_catalog`, leen las propiedades de la tabla y excluyen los objetos definidos por el patrón de exclusión.   
AWS Glue admite los siguientes patrones `glob` en el patrón de exclusión.       
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/define-crawler-choose-data-sources.html)
AWS Glue interpreta los patrones de exclusión `glob` de la siguiente manera:  
+ El carácter de barra inclinada (`/`) es el delimitador para separar claves de Amazon S3 en una jerarquía de carpetas.
+ El carácter asterisco (`*`) coincide con cero o varios caracteres de un componente de nombre sin superar límites de carpeta.
+ Dos asteriscos (`**`) coinciden con cero o varios caracteres que superan límites de carpeta o esquema.
+ El signo de interrogación (`?`) coincide exactamente con un carácter de un componente de nombre.
+ El carácter de barra inversa (`\`) se usa para escapar caracteres que de otro modo se pueden interpretar como caracteres especiales. La expresión `\\` coincide con una sola barra inversa y `\{` coincide con una llave de apertura.
+ Los corchetes `[ ]` crean una expresión de corchetes que coincide con un solo carácter de un componente de nombre fuera de un conjunto de caracteres. Por ejemplo, `[abc]` coincide con `a`, `b` o `c`. El guion (`-`) se puede usar para especificar un rango, por lo que `[a-z]` especifica un rango que coincide de la `a` a la `z` (inclusive). Estas formas se pueden mezclar, por lo que [`abce-g`] coincide con `a`, `b`, `c`, `e`, `f` o `g`. Si el carácter después del corchete (`[`) es un signo de exclamación (`!`), la expresión de corchetes se niega. Por ejemplo, `[!a-c]` coincide con cualquier carácter salvo con `a`, `b` o `c`.

  Dentro de una expresión de corchete, los caracteres `*`, `?` y `\` coinciden con ellos mismos. El guion (`-`) coincide consigo mismo si es el primer carácter dentro de los corchetes o si es el primer carácter después de `!` durante la negación.
+ Las llaves (`{ }`) incluyen un grupo de subpatrones, donde el grupo coincide si cualquier subpatrón del grupo coincide. Una coma (`,`) se usa para separar los subpatrones. Los grupos no pueden estar anidados.
+ Los puntos al inicio de los nombres de archivo se tratan como caracteres normales en las operaciones de coincidencia. Por ejemplo, el patrón de exclusión `*` coincide con el nombre de archivo `.hidden`.

**Example Amazon S3 excluye patrones**  
Cada patrón de exclusión se evalúa con respecto a la ruta de inclusión. Por ejemplo, suponga que tiene la estructura de directorios de Amazon S3 siguiente:  

```
/mybucket/myfolder/
   departments/
      finance.json
      market-us.json
      market-emea.json
      market-ap.json
   employees/
      hr.json
      john.csv
      jane.csv
      juan.txt
```
Dada la ruta de inclusión `s3://mybucket/myfolder/`, estos son algunos resultados de ejemplo para los patrones de exclusión:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/define-crawler-choose-data-sources.html)

**Example Excluir un subconjunto de particiones de Amazon S3**  
Supongamos que sus datos se particionan por día de modo que cada uno de los días de un año esté en una partición de Amazon S3 independiente. En enero de 2015, hay 31 particiones. Ahora, para rastrear datos durante solo la primera semana de enero, debe excluir todas las particiones excepto del día 1 al 7:  

```
 2015/01/{[!0],0[8-9]}**, 2015/0[2-9]/**, 2015/1[0-2]/**    
```
Veamos las partes de este patrón de glob. La primera parte, ` 2015/01/{[!0],0[8-9]}**`, excluye todos los días que no comienzan por "0", además de los días 08 y 09 del mes 01 del año 2015. Tenga en cuenta que "\$1\$1" se usa como sufijo del patrón de número de día y supera límites de carpeta hasta alcanzar carpetas de nivel más bajo. Si "\$1" se usa, los niveles de carpeta más bajos no se excluyen.  
La segunda parte, ` 2015/0[2-9]/**`, excluye días de los meses comprendidos entre el 02 y el 09 del año 2015.  
La tercera parte, `2015/1[0-2]/**`, excluye días de los meses 10, 11 y 12 del año 2015.

**Example Patrones de exclusión de JDBC**  
Supongamos que rastrea una base de datos de JDBC con la siguiente estructura de esquema:  

```
MyDatabase/MySchema/
   HR_us
   HR_fr
   Employees_Table
   Finance
   Market_US_Table
   Market_EMEA_Table
   Market_AP_Table
```
Dada la ruta de inclusión `MyDatabase/MySchema/%`, estos son algunos resultados de ejemplo para los patrones de exclusión:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/define-crawler-choose-data-sources.html)

**Parámetros adicionales de origen de rastreadores**  
Cada tipo de origen requiere un conjunto diferente de parámetros adicionales.

**Connection**  
Seleccione o agregue una conexión de AWS Glue. Para obtener más información acerca de las conexiones, consulte [Conexión a datos](glue-connections.md).

**Metadatos adicionales: opcionales (para almacenes de datos de JDBC)**  
Seleccione propiedades de metadatos adicionales para que el rastreador las rastree.  
+ Comments (Comentarios): se rastrean los comentarios asociados de tabla y columna.
+ Raw types (Tipos sin procesar): se mantienen los tipos de datos sin procesar de las columnas de la tabla en metadatos adicionales. Como comportamiento predeterminado, el rastreador traduce los tipos de datos sin procesar a tipos compatibles con Hive.

**Nombre de clase de controlador JDBC: opcional (para almacenes de datos JDBC)**  
 Escriba un nombre de clase de controlador JDBC personalizado para que el rastreador se conecte al origen de datos:   
+ Postgres: org.postgresql.Driver
+ MySQL: com.mysql.jdbc.Driver, com.mysql.cj.jdbc.Driver
+ Redshift: com.amazon.redshift.jdbc.Driver, com.amazon.redshift.jdbc42.Driver
+ Oracle: oracle.jdbc.driver.OracleDriver
+ SQL Server: com.microsoft.sqlserver.jdbc.SQLServerDriver

**Ruta S3 del controlador JDBC: opcional (para almacenes de datos JDBC)**  
Elija una ruta de Amazon S3 existente para un archivo `.jar`. Aquí es donde se almacenará el archivo `.jar` cuando se utilice un controlador JDBC personalizado para que el rastreador se conecte al origen de datos.

**Habilitación del muestreo de datos (solo en almacenes de datos Amazon DynamoDB, MongoDB, MongoDB Atlas y Amazon DocumentDB)**  
Seleccione si desea rastrear solo una muestra de datos. Si no lo selecciona, se rastreará toda la tabla. Escanear todos los registros puede tardar mucho tiempo cuando la tabla no es una tabla de alto rendimiento.

**Crear tablas para consultar (solo para almacenes de datos de Delta Lake)**  
Seleccione cómo desea crear las tablas de Delta Lake:  
+ Crear tablas nativas: se permite la integración con los motores de consulta que permiten consultar directamente el registro de transacciones de Delta.
+ Create Symlink tables (Crear tablas de enlaces simbólicos): se crea una carpeta de manifiesto de enlaces simbólicos con los archivos de manifiesto particionados mediante las claves de partición en función de los parámetros de configuración especificados.

**Scanning rate (Velocidad de análisis): opcional (solo en almacenes de datos de DynamoDB)**  
Especifique el porcentaje de las unidades de capacidad de lectura de tablas de DynamoDB que utilizará el rastreador. Unidades de capacidad de lectura es un término definido por DynamoDB y es un valor numérico que actúa como limitador de velocidad del número de lecturas que se pueden realizar en esa tabla por segundo. Introduzca un valor comprendido entre 0,1 y 1,5. Si no se especifica, el valor predeterminado es de 0,5 para las tablas aprovisionadas y 1/4 de la capacidad máxima configurada para las tablas bajo demanda. Tenga en cuenta que solo se debe utilizar el modo de capacidad aprovisionada con rastreadores de AWS Glue.  
Para los almacenes de datos de DynamoDB, establezca el modo de capacidad aprovisionada para procesar las lecturas y escrituras en las tablas. El rastreador de AWS Glue no debe utilizarse con el modo de capacidad bajo demanda.

**Conexión de red: opcional (para almacenes de datos de destino de Amazon S3, Delta, Iceberg, Hudi y Catalog)**  
Si lo desea, incluya una conexión de red para utilizarla con este destino de Amazon S3. Tenga en cuenta que cada rastreador se limita a una conexión de red, por lo que cualquier otro destino de Amazon S3 también utilizará la misma conexión (o ninguna, si se deja en blanco).  
Para obtener más información acerca de las conexiones, consulte [Conexión a datos](glue-connections.md).

**Muestrear solo un subconjunto de archivos y tamaño de la muestra (solo para almacenes de datos de Amazon S3)**  
Establece el número de archivos de cada carpeta que se van a rastrear al rastrear archivos de ejemplo en un conjunto de datos. Cuando esta característica está activada, en lugar de rastrear todos los archivos de este conjunto de datos, el rastreador selecciona aleatoriamente algunos archivos en cada carpeta para rastrear.   
El rastreador de muestreo es el más adecuado para clientes que tienen conocimientos previos sobre sus formatos de datos y saben que los esquemas de sus carpetas no cambian. Activar esta característica reducirá significativamente el tiempo de ejecución del rastreador.  
Un valor válido es un entero entre 1 y 249. Si no se especifica, se rastrean todos los archivos.

**Ejecuciones posteriores del rastreador**  
Este campo es un campo global que afecta a todos los orígenes de datos de Amazon S3.  
+ Crawl all sub-folders (Rastrear todas las subcarpetas): se vuelven a rastrear todas las carpetas con cada rastreo posterior.
+ Crawl new sub-folders only (Rastrear solo las subcarpetas nuevas): solo se rastrearán las carpetas de Amazon S3 que se hayan agregado desde el último rastreo. Si los esquemas son compatibles, se agregarán nuevas particiones a las tablas existentes. Para obtener más información, consulte [Programación de rastreos progresivos para agregar nuevas particiones](incremental-crawls.md).
+ Crawl based on events (Rastreo basado en eventos): confíe en los eventos de Amazon S3 para controlar qué carpetas rastrear. Para obtener más información, consulte [Aceleración de los rastreadores mediante las notificaciones de eventos de Amazon S3](crawler-s3-event-notifications.md).

**Custom classifiers (Clasificadores personalizados): opcionales**  
Defina los clasificadores personalizados antes de definir los rastreadores. Un clasificador comprueba si un determinado archivo está en un formato que puede el rastreador administrar. En caso afirmativo, el clasificador crea un esquema en forma de un objeto `StructType` que coincida con formato de datos.  
Para obtener más información, consulte [Definición y administración de clasificadores](add-classifier.md).

# Paso 3: Establecer configuración de seguridad
<a name="define-crawler-configure-security-settings"></a>

**rol de IAM**  
El rastreador asume este rol. Debe tener permisos a la política `AWSGlueServiceRole` administrada por AWS. En el caso de los orígenes de Amazon S3 y DynamoDB, también debe tener permisos para acceder al almacén de datos. Si el rastreador lee datos de Amazon S3 cifrados por AWS Key Management Service (AWS KMS), entonces el rol debe tener permiso para descifrar la clave AWS KMS.   
Para un almacén de datos de Amazon S3, los permisos adicionales asociados al rol serían similares a los siguientes:     
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::bucket/object*"
      ]
    }
  ]
}
```
Para un almacén de datos de Amazon DynamoDB, los permisos adicionales asociados al rol serían similares a los siguientes:     
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DescribeTable",
        "dynamodb:Scan"
      ],
      "Resource": [
        "arn:aws:dynamodb:*:111122223333:table/table-name*"
      ]
    }
  ]
}
```
 Para agregar su propio controlador JDBC, es necesario agregar permisos adicionales.   
+  Conceda permisos para las siguientes acciones de trabajos: `CreateJob`, `DeleteJob`, `GetJob`, `GetJobRun`, `StartJobRun`. 
+  Conceda permisos para todas las acciones de Amazon S3: `s3:DeleteObjects`, `s3:GetObject`, `s3:ListBucket`, `s3:PutObject`. 
**nota**  
`s3:ListBucket` no es necesaria si la política de bucket de Amazon S3 está deshabilitada.
+  Conceda el acceso principal del servicio al bucket o la carpeta en la política de Amazon S3. 
 Ejemplo de política de Amazon S3:     
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/driver-parent-folder/driver.jar",
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        }
    ]
}
```
 AWS Glue crea las siguientes carpetas (`_crawler` y `_glue_job_crawler` al mismo nivel que el controlador JDBC en su bucket de Amazon S3). Por ejemplo, si la ruta del controlador es `<s3-path/driver_folder/driver.jar>`, entonces se crearán las siguientes carpetas si aún no existen:   
+  <s3-path/driver\$1folder/\$1crawler> 
+  <s3-path/driver\$1folder/\$1glue\$1job\$1crawler> 
 De forma opcional, puede agregar una configuración de seguridad a un rastreador para especificar opciones de cifrado en reposo.  
Para obtener más información, consulte [Paso 2: creación de un rol de IAM para AWS Glue](create-an-iam-role.md) y [Administración de identidades y accesos para AWS Glue](security-iam.md).

**Lake Formation configuration (Configuración de Lake Formation): opcional**  
Permita que el rastreador utilice credenciales de Lake Formation para rastrear el origen de datos.  
Al marcar **Use Lake Formation credentials for crawling S3 data source** (Utilizar credenciales de Lake Formation para rastrear un origen de datos S3), el rastreador podrá usar las credenciales de Lake Formation para rastrear el origen de datos. Si el origen de datos pertenece a otra cuenta, debe proporcionar el ID de la cuenta registrada. De lo contrario, el rastreador solo rastreará los orígenes de datos asociados a la cuenta. Solo se aplica a los orígenes de datos del Catálogo de datos y Amazon S3.

**Security configuration (Configuración de seguridad): opcional**  
La configuración incluye ajustes de seguridad. Para obtener más información, consulte los siguientes temas:   
+ [Cifrado de datos escritos por AWS Glue](encryption-security-configuration.md)
Una vez que se establezca una configuración de seguridad en un rastreador, puede modificarla, pero no eliminarla. Para reducir el nivel de seguridad de una rastreador, establezca de manera explícita la característica de seguridad en `DISABLED` dentro de la configuración o cree un nuevo rastreador.

# Paso 4: establecer salida y programación
<a name="define-crawler-set-output-and-scheduling"></a>

**Configuración de la salida**  
Las opciones incluyen la forma en la que el rastreador debe gestionar los cambios detectados en un esquema, los objetos eliminados en el almacén de datos y mucho más. Para obtener más información, consulte [Personalización del comportamiento del rastreador](crawler-configuration.md)

**Propiedad Schedule de rastreador**  
Puede ejecutar un rastreador bajo demanda o definir programaciones basadas en tiempo para los rastreadores y los trabajos de AWS Glue. La definición de estas programaciones utiliza sintaxis cron del tipo Unix. Para obtener más información, consulte [Programación de un rastreador](schedule-crawler.md).

# Paso 5: Revisar y crear
<a name="define-crawler-review"></a>

Revise la configuración del rastreador que estableció y cree el rastreador.

# Programación de un rastreador
<a name="schedule-crawler"></a>

Puede ejecutar un rastreador de AWS Glue bajo demanda o según una programación periódica. Al crear un rastreador con base en una programación, puede especificar ciertas restricciones, como la frecuencia de las ejecuciones del rastreador, los días de la semana y la hora en que este se ejecuta. Puede crear estas programaciones personalizadas en formato *cron*. Para obtener más información, consulte [Cron](http://en.wikipedia.org/wiki/Cron) en Wikipedia.

Al configurar una programación de rastreador, debe tener en cuenta las características y limitaciones de Cron. Por ejemplo, si decide ejecutar su rastreador el día 31 de cada mes, tenga en cuenta que algunos meses no tienen 31 días.

**Topics**
+ [Creación de una programación de rastreadores](create-crawler-schedule.md)
+ [Creación de una programación para un rastreador existente](Update-crawler-schedule.md)

# Creación de una programación de rastreadores
<a name="create-crawler-schedule"></a>

Puede crear una programación para un rastreador con la consola de AWS Glue o la AWS CLI.

------
#### [ Consola de administración de AWS ]

1. Luego, inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\). 

1. Elija **Crawlers (Rastreadores)** en el panel de navegación.

1. Siga los pasos 1-3 en la sección [Configuración de rastreadores](define-crawler.md).

1. En [Paso 4: establecer salida y programación](define-crawler-set-output-and-scheduling.md), elija una **Programación del rastreador** para establecer la frecuencia de la ejecución. Puede elegir el rastreador para que funcione cada hora, día, semana o mes o definir un horario personalizado mediante expresiones cron.

   Una expresión cron es una cadena que representa un patrón de programación y consta de 6 campos separados por espacios: \$1 \$1 \$1 \$1 \$1 <minuto> <hora> <día del mes> <mes> <día de la semana> <año> 

   Por ejemplo, para ejecutar una tarea todos los días a medianoche, la expresión cron es: 0 0 \$1 \$1? \$1

   Para obtener más información, consulte [Expresiones Cron](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html#CronExpressions).

1. Revise la configuración del rastreador que estableció y cree el rastreador para ejecutar una programación.

------
#### [ AWS CLI ]

```
aws glue create-crawler 
 --name myCrawler \
 --role AWSGlueServiceRole-myCrawler  \
 --targets '{"S3Targets":[{Path="s3://amzn-s3-demo-bucket/"}]}' \
 --schedule cron(15 12 * * ? *)
```

------

Para obtener más información acerca cómo utilizar Cron para programar trabajos y rastreadores, consulte [Programaciones basadas en tiempo para trabajos y rastreadores](monitor-data-warehouse-schedule.md). 

# Creación de una programación para un rastreador existente
<a name="Update-crawler-schedule"></a>

Siga estos pasos para configurar una programación periódica para un rastreador existente.

------
#### [ Consola de administración de AWS ]

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\). 

1. Elija **Crawlers (Rastreadores)** en el panel de navegación.

1. Elija el rastreador que desea programar de la lista disponible.

1. En el **Menú de acciones**, elija **Editar**.

1. Desplácese hacia abajo hasta el **Paso 4: configurar la salida y la programación** y seleccione **Editar**. 

1.  Actualice su programación de rastreadores en **Programación de rastreadores**. 

1. Elija **Actualizar**.

------
#### [ AWS CLI ]

Utilice el siguiente comando de la CLI para actualizar una configuración del rastreador existente:

```
aws glue update-crawler-schedule 
   --crawler-name myCrawler
   --schedule cron(15 12 * * ? *)
```

------

# Ver los resultados y detalles del rastreador
<a name="console-crawlers-details"></a>

 Una vez que el rastreador se ejecuta correctamente, crea definiciones de tabla en el Catálogo de datos. Elija **Tables (Tablas)** en el panel de navegación para ver las tablas que creó su rastreador en la base de datos especificada. 

 Puede ver la información relacionada con el rastreador en sí de la siguiente manera:
+ La página **Crawlers (Rastreadores)** en la consola de AWS Glue muestra las siguientes propiedades de un rastreador:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/console-crawlers-details.html)
+  Para el historial de un rastreador, elija **Crawlers** (Rastreadores) en el panel de navegación con el fin de ver los rastreadores que haya creado. Elija un rastreador de la lista de rastreadores disponibles. Puede ver las propiedades y el historial del rastreador en la pestaña **Crawler runs** (Ejecuciones del rastreador). 

   La pestaña Crawler runs (Ejecuciones del rastreador) muestra información sobre cada una de las veces que se ha ejecutado el rastreador, incluyendo **Start time (UTC)** (Hora de inicio [UTC]), **End time (UTC)** (Hora de finalización [UTC]), **Duration** (Duración), **Status** (Estado), **DPU hours** (Horas de DPU) y **Table changes** (Cambios en las tablas). 

  La pestaña del ejecutor del rastreador muestra solo los rastreos que se han producido desde la fecha de lanzamiento de la función de historial del rastreador y solo conserva hasta 12 meses de rastreo. No se devolverán los rastreos más antiguos.
+ Para ver información adicional, elija una pestaña en la página de detalles del rastreador. En cada pestaña se mostrará información relacionada con el rastreador. 
  +  **Schedule** (Programación): aquí aparecerán los programas creados para el rastreador. 
  +  **Data sources** (Orígenes de datos): aquí aparecerán todos los orígenes de datos analizados por el rastreador. 
  +  **Classifiers** (Clasificadores): aquí aparecerán todos los clasificadores asignados al rastreador. 
  +  **Tags** (Etiquetas): aquí aparecerán las etiquetas creadas y asignadas a un recurso de AWS. 

# Parámetros establecidos en las tablas del catálogo de datos por el rastreador
<a name="table-properties-crawler"></a>

 Los rastreadores de AWS Glue establecen estas propiedades de la tabla. Esperamos que los usuarios consuman las propiedades `classification` y `compressionType`. Para los cálculos internos se utilizan otras propiedades, incluidas las estimaciones del tamaño de las tablas, y no se garantizan su precisión ni aplicabilidad a los casos de uso de los clientes. Cambiar estos parámetros puede alterar el comportamiento del rastreador y no admitimos este flujo de trabajo. 


| Clave de la propiedad | Valor de la propiedad | 
| --- | --- | 
| UPDATED\$1BY\$1CRAWLER | Nombre del rastreador que realiza la actualización. | 
| connectionName | El nombre de la conexión del Catálogo de datos para el rastreador que se utiliza para la conexión al almacén de datos. | 
| recordCount | Calcule el recuento de registros de la tabla, según el tamaño de los archivos y los encabezados. | 
| skip.header.line.count | Filas omitidas para omitir el encabezado. Se establece en tablas clasificadas como CSV. | 
| CrawlerSchemaSerializerVersion | Para uso interno | 
| classification | Formato de los datos, deducido por el rastreador. Para obtener más información sobre los formatos de datos que admiten los rastreadores de AWS Glue, consulte [Clasificadores integrados](add-classifier.md#classifier-built-in). | 
| CrawlerSchemaDeserializerVersion | Para uso interno | 
| sizeKey | Tamaño combinado de los archivos de la tabla rastreada. | 
| averageRecordSize | Tamaño promedio de una fila en la tabla, en bytes. | 
| compressionType | Tipo de compresión utilizado en los datos de la tabla. Para obtener más información sobre los tipos de compresión que admiten los rastreadores de AWS Glue, consulte [Clasificadores integrados](add-classifier.md#classifier-built-in). | 
| typeOfData | `file`, `table` o bien `view`. | 
| objectCount | Número de objetos en la ruta de Amazon S3 para la tabla. | 

 Los rastreadores de AWS Glue establecen estas propiedades de tabla adicionales para almacenes de datos de Snowflake. 


| Clave de la propiedad | Valor de la propiedad | 
| --- | --- | 
| aws:RawTableLastAltered | Registra la última marca temporal modificada de la tabla de Snowflake. | 
| ViewOriginalText | Vea la instrucción SQL. | 
| ViewExpandedText | Vea la instrucción SQL codificada en formato Base64. | 
| ExternalTable:S3Location | Ubicación de Amazon S3 de la tabla externa de Snowflake. | 
| ExternalTable:FileFormat | Formato de archivo de Amazon S3 de la tabla externa de Snowflake. | 

 Los rastreadores de AWS Glue establecen estas propiedades de tabla adicionales para almacenes de datos de tipo JDBC, como Amazon Redshift, Microsoft SQL Server, MySQL, PostgreSQL y Oracle. 


| Clave de la propiedad | Valor de la propiedad | 
| --- | --- | 
| aws:RawType | Cuando un rastreador almacena los datos en el Catálogo de datos, traduce los tipos de datos a tipos compatibles con Hive, lo que muchas veces hace que se pierda la información del tipo de datos nativo. El rastreador genera el parámetro `aws:RawType` para proporcionar el tipo de datos de nivel nativo. | 
| aws:RawColumnComment | Si un comentario está asociado a una columna de la base de datos, el rastreador genera el comentario correspondiente en la tabla del catálogo. La cadena de comentario se trunca en 255 bytes. Microsoft SQL Server no admite los comentarios.  | 
| aws:RawTableComment | Si un comentario está asociado a una tabla de la base de datos, el rastreador genera el comentario correspondiente en la tabla del catálogo. La cadena de comentario se trunca en 255 bytes. Microsoft SQL Server no admite los comentarios. | 

# Personalización del comportamiento del rastreador
<a name="crawler-configuration"></a>

Al configurar un Rastreador de AWS Glue, dispone de varias opciones para definir el comportamiento de su rastreador.
+ **Rastreos progresivos**: puede configurar un rastreador para ejecutar rastreos progresivos y agregar solo particiones nuevas al esquema de la tabla. 
+ **Índices de particiones**: un rastreador crea, de manera predeterminada, índices de particiones para los destinos de Amazon S3 y Delta Lake para ofrecer una búsqueda eficiente de particiones específicas.
+ **Mejora del tiempo de rastreo mediante eventos de Amazon S3**: puede configurar un rastreador para usar eventos de Amazon S3 para identificar los cambios entre dos rastreos al enumerar todos los archivos de la subcarpeta que activó el evento en lugar de publicar el destino completo de Amazon S3 o el Catálogo de datos.
+ **Gestión de los cambios de esquema**: puede impedir que un rastreador realice cambios de esquema en el esquema existente. Puede utilizar la Consola de administración de AWS o la API de AWS Glue para configurar la manera en que su rastreador procesa determinados tipos de cambios. 
+ **Un solo esquema para varias rutas de Amazon S3**: puede configurar un rastreador para crear un solo esquema para cada ruta de S3, si los datos son compatibles.
+ **Ubicación de la tabla y niveles de partición**: la opción de rastreador de nivel de tabla proporciona la flexibilidad para indicar al rastreador dónde se encuentran las tablas y cómo desea crear las particiones. 
+ **Umbral de tabla**: puede especificar el número máximo de tablas que el rastreador tiene permitido crear mediante un umbral de tabla.
+ **Credenciales de AWS Lake Formation**: puede configurar un rastreador para que utilice credenciales de Lake Formation para acceder a un almacén de datos de Amazon S3 o a una tabla del Catálogo de datos con una ubicación de Amazon S3 subyacente en la misma Cuenta de AWS o en otra Cuenta de AWS. 

 Para obtener más información acerca de cómo usar la consola de AWS Glue para añadir un rastreador, consulte [Configuración de rastreadores](define-crawler.md). 

**Topics**
+ [Programación de rastreos progresivos para agregar nuevas particiones](incremental-crawls.md)
+ [Generación de índices de particiones](crawler-configure-partition-indexes.md)
+ [Cómo evitar que un rastreador cambie un esquema existente](crawler-schema-changes-prevent.md)
+ [Creación de un único esquema para cada ruta de inclusión de Amazon S3](crawler-grouping-policy.md)
+ [Cómo especificar la ubicación de la tabla y el nivel de partición](crawler-table-level.md)
+ [Cómo especificar el número máximo de tablas que el rastreador tiene permitido crear](crawler-maximum-number-of-tables.md)
+ [Configuración de un rastreador para que utilice credenciales de Lake Formation](crawler-lf-integ.md)
+ [Aceleración de los rastreadores mediante las notificaciones de eventos de Amazon S3](crawler-s3-event-notifications.md)

# Programación de rastreos progresivos para agregar nuevas particiones
<a name="incremental-crawls"></a>

Puede configurar rastreos progresivos de ejecuciones de Rastreador de AWS Glue para agregar solo particiones nuevas al esquema de la tabla. Cuando el rastreador se ejecuta por primera vez, realiza un rastreo completo para procesar todo el origen de datos y registrar el esquema completo y todas las particiones existentes en AWS Glue Data Catalog.

Los rastreos posteriores al rastreo completo inicial serán progresivos, en los que el rastreador identificará y agregará solo las particiones nuevas que se hayan introducido desde el rastreo anterior. Este enfoque se traduce en tiempos de rastreo más rápidos, ya que el rastreador ya no necesita procesar todo el origen de datos para cada ejecución, sino que se centra únicamente en las nuevas particiones. 

**nota**  
Los rastreos progresivos no detectan las modificaciones o eliminaciones de las particiones existentes. Esta configuración es la más adecuada para orígenes de datos con un esquema estable. Si se produce un cambio importante en el esquema una sola vez, se recomienda configurar temporalmente el rastreador para que realice un rastreo completo a fin de capturar el nuevo esquema con precisión y, a continuación, volver al modo de rastreo progresivo. 

En el siguiente diagrama se muestra que, con la configuración de rastreo gradual habilitada, el rastreador solo detectará y agregará al catálogo la carpeta recién agregada, month=March.

![\[El siguiente diagrama muestra que se han agregado archivos para el mes de marzo.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/crawlers-s3-folders-new.png)


Siga estos pasos para actualizar su rastreador y realizar rastreos graduales:

------
#### [ Consola de administración de AWS ]

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Elija **Rastreadores** en el **Catálogo de datos**.

1. Elija el rastreador que desea configurar para rastrear progresivamente.

1. Seleccione **Editar**.

1. Elija **Paso 2. Elija orígenes de datos y clasificadores**.

1. Elija el origen de datos que desea rastrear progresivamente. 

1. Seleccione **Editar**.

1. Seleccione **Rastrear subcarpetas nuevas únicamente** en las **Siguientes ejecuciones del rastreador**.

1. Elija **Actualizar**.

Para crear una programación para un rastreador, consulte [Programación de un rastreador](schedule-crawler.md).

------
#### [ AWS CLI ]

```
aws glue update-crawler \
 --name myCrawler \
 --recrawl-policy RecrawlBehavior=CRAWL_NEW_FOLDERS_ONLY \
 --schema-change-policy UpdateBehavior=LOG,DeleteBehavior=LOG
```

------

**Notas y restricciones**  
Cuando esta opción está activada, no puede cambiar los almacenes de datos de destino de Amazon S3 al editar el rastreador. Esta opción afecta a determinados valores de configuración del rastreador. Cuando está activada, fuerza el comportamiento de actualización y el comportamiento de eliminación del rastreador a `LOG`. Esto significa que:
+ Si descubre objetos en los que los esquemas no son compatibles, el rastreador no agregará los objetos en el Catálogo de datos y agregará este detalle como un registro en CloudWatch Logs.
+ No actualizará los objetos eliminados en el Catálogo de datos.

# Generación de índices de particiones
<a name="crawler-configure-partition-indexes"></a>

El Catálogo de datos es compatible con la creación de índices de particiones para ofrecer una búsqueda eficiente de particiones específicas. Para obtener más información, consulte [Creación de índices de partición](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html). El rastreador de AWS Glue crea, de manera predeterminada, índices de particiones para los destinos de Amazon S3 y Delta Lake.

------
#### [ Consola de administración de AWS ]

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Elija **Rastreadores** en el **Catálogo de datos**.

1. Cuando se define un rastreador, la opción para **Crear índices de partición de manera automática** se habilita de manera predeterminada en la sección **Opciones avanzadas** en la página **Establecer salida y programación**.

   Para desactivar esta opción, puede anular la selección de la casilla **Crear índices de particiones de manera automática** en la consola. 

1. Complete la configuración del rastreador y elija **Crear rastreador**.

------
#### [ AWS CLI ]

 También puede desactivarla mediante la AWS CLI, establezca `CreatePartitionIndex ` en el parámetro `configuration`. El valor predeterminado es true.

```
aws glue update-crawler \
    --name myCrawler \
    --configuration '{"Version": 1.0, "CreatePartitionIndex": false }'
```

------

## Notas de uso de índices de particiones
<a name="crawler-configure-partition-indexes-usage-notes"></a>
+ Las tablas creadas por el rastreador no tienen la variable de forma `partition_filtering.enabled` predeterminada. Para obtener más información, consulte [Índices de partición y filtros de AWS Glue](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index).
+ La creación de índices de partición para particiones cifradas no es compatible.

# Cómo evitar que un rastreador cambie un esquema existente
<a name="crawler-schema-changes-prevent"></a>

 Puede impedir que Rastreador de AWS Glue realice cambios de esquema en el Catálogo de datos durante su ejecución. De forma predeterminada, los rastreadores actualizan el esquema del Catálogo de datos para que coincida con el origen de datos que se está rastreando. Sin embargo, en algunos casos, puede impedir que el rastreador modifique el esquema existente, en especial si ha transformado o limpiado los datos y no quiere que el esquema original sobrescriba los cambios.

 Siga estos pasos para configurar el rastreador de forma que no sobrescriba el esquema existente en una definición de tabla. 

------
#### [  Consola de administración de AWS  ]

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Elija **Rastreadores** en el **Catálogo de datos**.

1. Elija un rastreador de la lista y, luego, **Editar**.

1. Elija **Paso 4: establecer la salida y la programación**.

1. En **Opciones avanzadas**, seleccione **Agregar solo columnas nuevas** o **Ignorar el cambio y no actualizar la tabla en el Catálogo de datos**. 

1.  También puede establecer una opción de configuración para **Actualizar todas las particiones nuevas y existentes con metadatos de la tabla**. Esto establece los esquemas de particiones para que se hereden de la tabla. 

1. Elija **Actualizar**.

------
#### [ AWS CLI ]

En el siguiente ejemplo, se muestra cómo configurar un rastreador para que no cambie el esquema existente y solo agregue columnas nuevas:

```
aws glue update-crawler \
  --name myCrawler \
  --configuration '{"Version": 1.0, "CrawlerOutput": {"Tables": {"AddOrUpdateBehavior": "MergeNewColumns"}}}'
```

En el siguiente ejemplo, se muestra cómo configurar un rastreador para que no cambie el esquema existente y no agregue columnas nuevas:

```
aws glue update-crawler \
  --name myCrawler \
  --schema-change-policy UpdateBehavior=LOG \
  --configuration '{"Version": 1.0, "CrawlerOutput": {"Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }}}'
```

------
#### [ API ]

Si no desea que un esquema de tabla cambie en absoluto cuando se ejecuta un rastreador, establezca la política de cambio de esquema en `LOG`. 

Al configurar el rastreador mediante la API, establezca los siguientes parámetros:
+ Configure el campo `UpdateBehavior` de la estructura `SchemaChangePolicy` en `LOG`.
+  Establezca el campo `Configuration` con una representación de cadena del siguiente objeto JSON en la API del rastreador; por ejemplo: 

  ```
  {
     "Version": 1.0,
     "CrawlerOutput": {
        "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }
     }
  }
  ```

------

# Creación de un único esquema para cada ruta de inclusión de Amazon S3
<a name="crawler-grouping-policy"></a>

De forma predeterminada, cuando un rastreador define tablas para los datos almacenados en Amazon S3, tiene en cuenta la compatibilidad y el esquema de los datos por igual. Entre los factores de compatibilidad de datos que se tienen en cuenta se incluye si los datos poseen el mismo formato (por ejemplo, JSON), el mismo tipo de compresión (por ejemplo, GZIP), la estructura de la ruta de Amazon S3 y otros atributos de datos. La similitud de los esquemas es una medida de qué tan similares son los esquemas de objetos de Amazon S3 independientes.

Para ayudar a ilustrar esta opción, supongamos que define un rastreador con una ruta de inclusión `s3://amzn-s3-demo-bucket/table1/`. Al ejecutarse el rastreador, encuentra dos archivos JSON con las siguientes características:
+ **Archivo 1** – `S3://amzn-s3-demo-bucket/table1/year=2017/data1.json`
+ *Contenido del archivo* – `{“A”: 1, “B”: 2}`
+ *Esquema* – `A:int, B:int`
+ **Archivo 2** – `S3://amzn-s3-demo-bucket/table1/year=2018/data2.json`
+ *Contenido del archivo* – `{“C”: 3, “D”: 4}`
+ *Esquema* – `C: int, D: int`

De forma predeterminada, el rastreador crea dos tablas, llamadas `year_2017` y `year_2018`, ya que los esquemas no son lo suficientemente similares. Sin embargo, si la opción **Crear un solo esquema para cada ruta de S3** está seleccionada y los datos son compatibles, el rastreador crea una tabla. La tabla tiene el esquema `A:int,B:int,C:int,D:int` y `partitionKey` `year:string`.

------
#### [ Consola de administración de AWS ]

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Elija **Rastreadores** en el **Catálogo de datos**.

1. Al configurar un rastreador nuevo, en **Salida y programación**, seleccione la opción **Crear un solo esquema para cada ruta de S3** en Opciones avanzadas. 

------
#### [ AWS CLI ]

Puede configurar un rastreador en `CombineCompatibleSchemas` en una definición de tabla común cuando sea posible. Con esta opción, el rastreador sigue teniendo en cuenta la compatibilidad de los datos, pero pasa por alto la similitud de los esquemas específicos al evaluar objetos de Amazon S3 en la ruta de inclusión especificada.

Al configurar el rastreador mediante la AWS CLI, establezca la siguiente opción de configuración:

```
aws glue update-crawler \
   --name myCrawler \
   --configuration '{"Version": 1.0, "Grouping": {"TableGroupingPolicy": "CombineCompatibleSchemas" }}'
```

------
#### [ API ]

Al configurar el rastreador mediante la API, establezca la siguiente opción de configuración:

 Establezca el campo `Configuration` con una representación de cadena del siguiente objeto JSON en la API del rastreador; por ejemplo: 

```
{
   "Version": 1.0,
   "Grouping": {
      "TableGroupingPolicy": "CombineCompatibleSchemas" }
}
```

------

# Cómo especificar la ubicación de la tabla y el nivel de partición
<a name="crawler-table-level"></a>

De forma predeterminada, cuando un rastreador define tablas para los datos almacenados en Amazon S3, el rastreador intenta combinar esquemas y crear tablas de nivel superior (`year=2019`). En algunos casos, es posible que espere que el rastreador cree una tabla para la carpeta `month=Jan`, pero en su lugar el rastreador crea una partición ya que una carpeta “hermana” (`month=Mar`) se fusionó en la misma tabla.

La opción de rastreador de nivel de tabla proporciona la flexibilidad para indicar al rastreador dónde se encuentran las tablas y cómo desea crear las particiones. Cuando se especifica un **Nivel de tabla**, la tabla se crea en ese nivel absoluto a partir del bucket de Amazon S3.

![\[Agrupación de rastreadores con nivel de tabla especificado como nivel 2.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/crawler-table-level1.jpg)


 Al configurar el rastreador en la consola, puede especificar un valor para la opción del rastreador **Nivel de tabla**. El valor debe ser un entero positivo que indique la ubicación de la tabla (el nivel absoluto del conjunto de datos). El nivel de la carpeta de nivel superior es 1. Por ejemplo, para la ruta `mydataset/year/month/day/hour`, si el nivel se establece en 3, la tabla se crea en la ubicación `mydataset/year/month`. 

------
#### [ Consola de administración de AWS ]

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Elija **Rastreadores** en el **Catálogo de datos**.

1. Al configurar un rastreador, en **Salida y programación**, elija **Nivel de tabla** en **Opciones avanzadas**.

![\[Especificación de un nivel de tabla en la configuración del rastreador.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/crawler-configuration-console.png)


------
#### [ AWS CLI ]

Al configurar el rastreador mediante la AWS CLI, defina el parámetro `configuration` tal y como se muestra en el código de ejemplo: 

```
aws glue update-crawler \
  --name myCrawler \
  --configuration '{"Version": 1.0, "Grouping": { "TableLevelConfiguration": 2 }}'
```

------
#### [ API ]

Cuando configure el rastreador mediante la API, establezca el campo `Configuration` con una representación de cadena del siguiente objeto JSON; por ejemplo: 

```
configuration = jsonencode(
{
   "Version": 1.0,
   "Grouping": {
            TableLevelConfiguration = 2  
        }
})
```

------
#### [ CloudFormation ]

En este ejemplo, establezca la opción **Nivel de la tabla** como disponible en la consola de la plantilla de CloudFormation:

```
"Configuration": "{
    \"Version\":1.0,
    \"Grouping\":{\"TableLevelConfiguration\":2}
}"
```

------

# Cómo especificar el número máximo de tablas que el rastreador tiene permitido crear
<a name="crawler-maximum-number-of-tables"></a>

Opcionalmente, puede especificar el número máximo de tablas que el rastreador tiene permitido crear especificando un valor de `TableThreshold` mediante la consola de AWS Glue o la AWS CLI. Si las tablas detectadas por el rastreador durante el rastreo superan este valor de entrada, se produce un error en el rastreo y no se escribe ningún dato en el Catálogo de datos.

Este parámetro es útil cuando las tablas que detectaría y crearía el rastreador son muchas más de las esperadas. Las razones para que ocurra esto pueden ser varias; por ejemplo:
+ Cuando se utiliza un trabajo de AWS Glue para rellenar las ubicaciones de Amazon S3, es posible que acabe habiendo archivos vacíos en el mismo nivel que el de una carpeta. En esos casos, cuando se ejecuta un rastreador en esta ubicación de Amazon S3, el rastreador crea varias tablas debido a la presencia de archivos y carpetas en el mismo nivel.
+ Si no configura `"TableGroupingPolicy": "CombineCompatibleSchemas"`, es posible que acabe habiendo más tablas de las esperadas. 

Se debe especificar un valor entero mayor que 0 para `TableThreshold`. Este valor se configura para cada rastreador. Es decir, se tiene en cuenta este valor para cada rastreo. Por ejemplo, un rastreador tiene el valor `TableThreshold` establecido en 5. En cada rastreo, AWS Glue compara el número de tablas detectadas con este valor de umbral de tablas (5) y, si el número de tablas detectadas es inferior a 5, AWS Glue escribe las tablas en el Catálogo de datos; en caso contrario, se produce un error en el rastreo y no se escribe nada en el Catálogo de datos.

------
#### [ Consola de administración de AWS ]

**Para configurar `TableThreshold` mediante la Consola de administración de AWS:**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Al configurar un rastreador, en **Salida y programación**, defina el **Umbral máximo de tabla** en el número de tablas que el rastreador puede generar.  
![\[Sección de salida y programación de la consola de AWS en la que aparece el parámetro Umbral de tablas máximo.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/crawler-max-tables.png)

------
#### [ AWS CLI ]

Para configurar `TableThreshold` mediante la AWS CLI:

```
aws glue update-crawler \
    --name myCrawler \
    --configuration '{"Version": 1.0, "CrawlerOutput": {"Tables": { "TableThreshold": 5 }}}'
```

------
#### [ API ]

Para configurar `TableThreshold` mediante la API:

```
"{"Version":1.0,
"CrawlerOutput":
{"Tables":{"AddOrUpdateBehavior":"MergeNewColumns",
"TableThreshold":5}}}";
```

------

Se registran mensajes de error para ayudarle a identificar las rutas de las tablas y a limpiar los datos. Ejemplo de registro en la cuenta si el rastreador falla porque el número de tablas es mayor que el valor umbral de tablas proporcionado:

```
Table Threshold value = 28, Tables detected - 29
```

En CloudWatch, se registran todas las ubicaciones de las tablas detectadas en forma de mensaje INFO. Se registra un error como motivo del fallo.

```
ERROR com.amazonaws.services.glue.customerLogs.CustomerLogService - CustomerLogService received CustomerFacingException with message 
The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. Failing crawler without writing to Data Catalog.
com.amazonaws.services.glue.exceptions.CustomerFacingInternalException: The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. 
Failing crawler without writing to Data Catalog.
```

# Configuración de un rastreador para que utilice credenciales de Lake Formation
<a name="crawler-lf-integ"></a>

Puede configurar un rastreador para que utilice credenciales de AWS Lake Formation para acceder a un almacén de datos de Amazon S3 o a una tabla del Catálogo de datos con una ubicación de Amazon S3 subyacente en la misma Cuenta de AWS o en otra Cuenta de AWS. Puede configurar una tabla existente del Catálogo de datos como destino de un rastreador, si el rastreador y la tabla del Catálogo de datos residen en la misma cuenta. Actualmente, solo se permite un único destino de catálogo con una sola tabla de catálogo cuando se utiliza una tabla del Catálogo de datos como destino de un rastreador.

**nota**  
Cuando vaya a definir una tabla del Catálogo de datos como destino de un rastreador, asegúrese de que la ubicación subyacente de la tabla del Catálogo de datos sea una ubicación de Amazon S3. Los rastreadores que utilizan credenciales de Lake Formation solo admiten destinos del Catálogo de datos con ubicaciones de Amazon S3 subyacentes.

## Configuración requerida cuando el rastreador y la ubicación de Amazon S3 o la tabla del Catálogo de datos registradas residen en la misma cuenta (rastreo en cuenta)
<a name="in-account-crawling"></a>

Para permitir que el rastreador acceda a un almacén de datos o a una tabla del Catálogo de datos con credenciales de Lake Formation, se debe registrar la ubicación de los datos en Lake Formation. Además, el rol de IAM del rastreador debe tener permisos para leer los datos del destino en el que esté registrado el bucket de Amazon S3.

Puede completar los siguientes pasos de configuración mediante la Consola de administración de AWS o la AWS Command Line Interface (AWS CLI).

------
#### [ Consola de administración de AWS ]

1. Antes de configurar un rastreador para que acceda al origen del rastreador, registre la ubicación de los datos del almacén de datos o el Catálogo de datos en Lake Formation. En la consola de Lake Formation ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)), registre una ubicación de Amazon S3 como ubicación raíz del lago de datos en la Cuenta de AWS donde esté definido el rastreador. Para obtener más información, consulte [Registering an Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) (Registro de una ubicación de Amazon S3).

1. Conceda permisos de **Ubicación de datos** al rol de IAM que se utiliza para la ejecución del rastreador, de modo que el rastreador pueda leer los datos del destino en Lake Formation. Para obtener más información, consulte [Concesión de permisos de ubicación de datos (misma cuenta)](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html).

1. Otorgue al rol del rastreador permisos de acceso (`Create`) a la base de datos, que se especifica como base de datos de salida. Para obtener más información, consulte [Concesión de permisos de base de datos mediante la consola de Lake Formation y el método de recurso con nombre](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-database-permissions.html).

1. En la consola de IAM ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)), cree un rol de IAM para el rastreador. Agregue la política `lakeformation:GetDataAccess` al rol.

1. En la consola de AWS Glue ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)), al configurar el rastreador, seleccione la opción **Utilizar credenciales de Lake Formation para rastrear un origen de datos de Amazon S3**.
**nota**  
El campo accountId es opcional para el rastreo en cuenta.

------
#### [ AWS CLI ]

```
aws glue --profile demo create-crawler --debug --cli-input-json '{
    "Name": "prod-test-crawler",
    "Role": "arn:aws:iam::111122223333:role/service-role/AWSGlueServiceRole-prod-test-run-role",
    "DatabaseName": "prod-run-db",
    "Description": "",
    "Targets": {
    "S3Targets":[
                {
                 "Path": "s3://amzn-s3-demo-bucket"
                }
                ]
                },
   "SchemaChangePolicy": {
      "UpdateBehavior": "LOG",
      "DeleteBehavior": "LOG"
  },
  "RecrawlPolicy": {
    "RecrawlBehavior": "CRAWL_EVERYTHING"
  },
  "LineageConfiguration": {
    "CrawlerLineageSettings": "DISABLE"
  },
  "LakeFormationConfiguration": {
    "UseLakeFormationCredentials": true,
    "AccountId": "111122223333"
  },
  "Configuration": {
           "Version": 1.0,
           "CrawlerOutput": {
             "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" },
             "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" }
           },
           "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" }
         },
  "CrawlerSecurityConfiguration": "",
  "Tags": {
    "KeyName": ""
  }
}'
```

------

# Configuración requerida cuando el rastreador y la ubicación de Amazon S3 registrada residen en cuentas diferentes (rastreo entre cuentas)
<a name="cross-account-crawling"></a>

Para permitir que el rastreador acceda a un almacén de datos de una cuenta diferente con credenciales de Lake Formation, primero debe registrar la ubicación de los datos de Amazon S3 en Lake Formation. Después, debe conceder permisos de ubicación de datos a la cuenta del rastreador siguiendo estos pasos.

Puede completar los siguientes pasos mediante la Consola de administración de AWS o la AWS CLI.

------
#### [ Consola de administración de AWS ]

1. En la cuenta en la que esté registrada la ubicación de Amazon S3 (cuenta B):

   1. Registre una ruta de Amazon S3 en Lake Formation. Para obtener más información, consulte [Registro de una ubicación de Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html).

   1.  Conceda permisos de **Ubicación de datos** a la cuenta (cuenta A) en la que se vaya a ejecutar el rastreador. Para obtener más información, consulte [Concesión de permisos de ubicación de datos](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html). 

   1. Cree una base de datos vacía en Lake Formation con la ubicación subyacente como ubicación de Amazon S3 de destino. Para obtener más información, consulte [Creación de una base de datos](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-database.html).

   1. Conceda a la cuenta A (la cuenta en la que se vaya a ejecutar el rastreador) acceso a la base de datos que ha creado en el paso anterior. Para obtener más información, consulte [Concesión de permisos de base de datos](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-database-permissions.html). 

1. En la cuenta donde se ha creado y se va a ejecutar el rastreador (cuenta A):

   1.  Mediante la consola de AWS RAM, acepte la base de datos que se haya compartido desde la cuenta externa (cuenta B). Para obtener más información, consulte [Aceptación de una invitación para compartir un recurso de AWS Resource Access Manager](https://docs.aws.amazon.com/lake-formation/latest/dg/accepting-ram-invite.html). 

   1.  Cree un rol de IAM para el rastreador. Agregue la política `lakeformation:GetDataAccess` al rol.

   1.  En la consola de Lake Formation ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)), conceda permisos de **Ubicación de datos** sobre la ubicación de Amazon S3 de destino al rol de IAM utilizado para la ejecución del rastreador, de modo que el rastreador pueda leer los datos del destino en Lake Formation. Para obtener más información, consulte [Concesión de permisos de ubicación de datos](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html). 

   1.  Cree un enlace de recurso en la base de datos compartida. Para obtener más información, consulte [Creación de un enlace de recurso](https://docs.aws.amazon.com/lake-formation/latest/dg/create-resource-link-database.html). 

   1.  Otorgue al rol del rastreador permisos de acceso (`Create`) en la base de datos compartida y (`Describe`) en el enlace de recurso. El enlace de recurso se especifica en la salida del rastreador. 

   1.  En la consola de AWS Glue ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)), al configurar el rastreador, seleccione la opción **Use Lake Formation credentials for crawling Amazon S3 data source** (Utilizar credenciales de Lake Formation para rastrear un origen de datos de Amazon S3).

      Para el rastreo entre cuentas, especifique el ID de la Cuenta de AWS donde esté registrada la ubicación de Amazon S3 de destino en Lake Formation. Para el rastreo en cuenta, el campo accountId es opcional.   
![\[IAM role selection and Lake Formation configuration options for Rastreador de AWS Glue security settings.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/cross-account-crawler.png)

------
#### [ AWS CLI ]

```
aws glue --profile demo create-crawler --debug --cli-input-json '{
    "Name": "prod-test-crawler",
    "Role": "arn:aws:iam::111122223333:role/service-role/AWSGlueServiceRole-prod-test-run-role",
    "DatabaseName": "prod-run-db",
    "Description": "",
    "Targets": {
    "S3Targets":[
                {
                 "Path": "s3://amzn-s3-demo-bucket"
                }
                ]
                },
   "SchemaChangePolicy": {
      "UpdateBehavior": "LOG",
      "DeleteBehavior": "LOG"
  },
  "RecrawlPolicy": {
    "RecrawlBehavior": "CRAWL_EVERYTHING"
  },
  "LineageConfiguration": {
    "CrawlerLineageSettings": "DISABLE"
  },
  "LakeFormationConfiguration": {
    "UseLakeFormationCredentials": true,
    "AccountId": "111111111111"
  },
  "Configuration": {
           "Version": 1.0,
           "CrawlerOutput": {
             "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" },
             "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" }
           },
           "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" }
         },
  "CrawlerSecurityConfiguration": "",
  "Tags": {
    "KeyName": ""
  }
}'
```

------

**nota**  
Un rastreador que utilice credenciales de Lake Formation solo puede rastrear destinos de Amazon S3 y el Catálogo de datos.
En el caso de destinos que utilicen el suministro de credenciales de Lake Formation, las ubicaciones de Amazon S3 subyacentes deben pertenecer al mismo bucket. Por ejemplo, los clientes pueden utilizar varios destinos (s3://amzn-s3-demo-bucket1/folder1, s3://amzn-s3-demo-bucket1/folder2) siempre que todas las ubicaciones de destino estén en el mismo bucket (amzn-s3-demo-bucket1). No se permite especificar buckets diferentes (s3://amzn-s3-demo-bucket1/folder1, s3://amzn-s3-demo-bucket2/folder2).
Actualmente, para los rastreadores de destinos del Catálogo de datos, solo se permite un único destino de catálogo con una sola tabla de catálogo.

# Aceleración de los rastreadores mediante las notificaciones de eventos de Amazon S3
<a name="crawler-s3-event-notifications"></a>

En lugar de publicar los objetos de un destino de Amazon S3 o del Catálogo de datos, puede configurar el rastreador para que utilice eventos de Amazon S3 para buscar cualquier cambio. Esta característica mejora el tiempo de rastreo mediante el uso de eventos de Amazon S3 o del Catálogo de datos para identificar los cambios entre dos rastreos al enumerar todos los archivos de la subcarpeta que activó el evento en lugar de publicar el destino completo de Amazon S3 o el Catálogo de datos.

En el primer rastreo se enumeran todos los objetos de Amazon S3 del destino. Después del primer rastreo exitoso, puede optar por volver a rastrear manualmente o según un calendario establecido. El rastreador enumerará solo los objetos de esos eventos en lugar de enumerar todos los objetos.

Cuando el destino es una tabla del Catálogo de datos, el rastreador actualiza las tablas existentes en el Catálogo de datos con los cambios (por ejemplo, particiones adicionales en una tabla).

Las ventajas de pasar a un rastreador basado en eventos de Amazon S3 son:
+ Un nuevo rastreo más rápido, ya que la lista de todos los objetos del destino no es necesaria, sino que la lista de carpetas específicas se realiza cuando se agregan o eliminan objetos.
+ Reducción del costo global de rastreo a medida que la lista de carpetas específicas se realiza en las que se agregan o eliminan objetos.

El rastreo de eventos de Amazon S3 se ejecuta al consumir eventos de Amazon S3 desde la cola de SQS según la programación del rastreador. No habrá ningún costo si no hay eventos en la cola. Los eventos de Amazon S3 se pueden configurar para que vayan directamente a la cola de SQS o en los casos en que varios consumidores necesitan el mismo evento, una combinación de SNS y SQS. Para obtener más información, consulte [Cómo configurar la cuenta para las notificaciones de eventos de Amazon S3](#crawler-s3-event-notifications-setup).

Después de crear y configurar el rastreador en modo evento, el primer rastreo se ejecuta en modo listado y enumera un listado completo del destino de Amazon S3 o del Catálogo de datos. A través del siguiente registro se confirma el funcionamiento del rastreo mediante el uso de eventos de Amazon S3 tras el primer rastreo correcto: “El rastreo se ejecuta mediante el uso de eventos de Amazon S3”.

Después de crear el rastreo de eventos de Amazon S3 y actualizar las propiedades del rastreador que pueden afectar al rastreo, el rastreo funciona en modo lista y se agrega el siguiente registro: “El rastreo no se ejecuta en modo de evento de S3”.

**nota**  
El número máximo de mensajes que se pueden consumir es de 100 000 mensajes por rastreo.

## Consideraciones y limitaciones
<a name="s3event-crawler-limitations"></a>

Las siguientes consideraciones y limitaciones se aplican al configurar un rastreador para usar notificaciones de eventos de Amazon S3 para detectar cualquier cambio. 
+  **Comportamiento importante con particiones eliminadas** 

  Cuando se utilizan rastreadores de eventos de Amazon S3 con tablas del Catálogo de datos:
  +  Si elimina una partición mediante la llamada a la API `DeletePartition`, también debe eliminar todos los objetos de S3 de esa partición y seleccionar **Todos los eventos de eliminación de objetos** al configurar las notificaciones de eventos de S3. Si los eventos de eliminación no están configurados, el rastreador volverá a crear la partición eliminada durante su próxima ejecución. 
+ El rastreador admite un solo destino, ya sean destinos para Amazon S3 o para el Catálogo de datos.
+ No es posible utilizar SQS en una VPC privada.
+ No se admite el muestreo de Amazon S3.
+ El destino del rastreador debe ser una carpeta para un destino de Amazon S3 o una o más tablas del Catálogo de datos de AWS Glue para un destino del Catálogo de datos.
+ No se admite el comodín de la ruta “todo”: s3://%
+ Para un destino de Catálogo de datos, todas las tablas del Catálogo deben apuntar al mismo bucket de Amazon S3 para el modo de eventos de Amazon S3.
+ Para un destino de Catálogo de datos, una tabla de catálogo no debe apuntar a una ubicación de Amazon S3 en formato Delta Lake (que contenga carpetas \$1symlink o consulte las tablas del catálogo `InputFormat`).

**Topics**
+ [Consideraciones y limitaciones](#s3event-crawler-limitations)
+ [Cómo configurar la cuenta para las notificaciones de eventos de Amazon S3](#crawler-s3-event-notifications-setup)
+ [Configuración de un rastreador para las notificaciones de eventos de Amazon S3 para un destino de Amazon S3](crawler-s3-event-notifications-setup-console-s3-target.md)
+ [Configuración de un rastreador para notificaciones de eventos de Amazon S3 para una tabla del Catálogo de datos](crawler-s3-event-notifications-setup-console-catalog-target.md)

## Cómo configurar la cuenta para las notificaciones de eventos de Amazon S3
<a name="crawler-s3-event-notifications-setup"></a>

Realice los siguientes pasos de configuración. Tenga en cuenta que los valores entre paréntesis hacen referencia a los valores configurables del script.

1. Debe configurar las notificaciones de eventos para su bucket de Amazon S3.

   Para obtener más información, consulte [Notificaciones de eventos de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html).

1. Para utilizar el rastreador basado en eventos de Amazon S3, debe habilitar la notificación de eventos en el bucket de Amazon S3 con eventos filtrados del prefijo, que es el mismo que el destino de S3 y el almacenamiento en SQS. Puede configurar SQS y la notificación de eventos a través de la consola siguiendo los pasos del [Tutorial: configuración de un bucket para notificaciones](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ways-to-add-notification-config-to-bucket.html).

1. Agregue la siguiente política de SQS al rol utilizado por el rastreador. 

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
           "sqs:DeleteMessage",
           "sqs:GetQueueUrl",
           "sqs:ListDeadLetterSourceQueues",
           "sqs:ReceiveMessage",
           "sqs:GetQueueAttributes",
           "sqs:ListQueueTags",
           "sqs:SetQueueAttributes",
           "sqs:PurgeQueue"
         ],
         "Resource": "arn:aws:sqs:us-east-1:111122223333:cfn-sqs-queue"
       }
     ]
   }
   ```

------

# Configuración de un rastreador para las notificaciones de eventos de Amazon S3 para un destino de Amazon S3
<a name="crawler-s3-event-notifications-setup-console-s3-target"></a>

Siga estos pasos para configurar un rastreador para las notificaciones de eventos de Amazon S3 para un destino de Amazon S3 mediante la Consola de administración de AWS o AWS CLI.

------
#### [ Consola de administración de AWS ]

1. Inicie sesión en la Consola de administración de AWS y abra la consola de GuardDuty en [https://console.aws.amazon.com/guardduty/](https://console.aws.amazon.com/guardduty/).

1.  Configure las propiedades del rastreador. Para obtener más información, consulte [Opciones de configuración de rastreadores en la consola de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-console). 

1.  En la sección **Configuración de origen de datos**, se preguntará *¿Los datos ya están asignados a tablas de AWS Glue?* 

    De manera predeterminada, está seleccionado **Not yet** (Aún no). Déjelo así si está utilizando un origen de datos de Amazon S3 y los datos aún no están asignados a tablas de AWS Glue. 

1.  En la sección **Data sources** (Origen de datos), elija **Add a data source** (Agregar un origen de datos).   
![\[Data source configuration interface with options to select or add data sources for crawling.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/crawler-s3-event-console1.png)

1.  En el modal **Add data source** (Agregar origen de datos), configure el origen de datos de Amazon S3: 
   +  **Data source** (Origen de datos): de manera predeterminada, está seleccionado Amazon S3. 
   +  **Network connection** (Conexión de red) (opcional): elija **Add new connection** (Agregar nueva conexión). 
   +  **Location of Amazon S3 data** (Ubicación de datos de Amazon S3): de manera predeterminada, está seleccionado **In this account** (En esta cuenta). 
   +  **Amazon S3 path** (Ruta de Amazon S3): especifique la ruta de Amazon S3 en la que se rastrean carpetas y archivos. 
   +  **Subsequent crawler runs** (Ejecuciones posteriores del rastreador): elija **Crawl based on events** (Rastreo basado en eventos) para utilizar las notificaciones de eventos de Amazon S3 para el rastreador. 
   +  **Include SQS ARN** (Incluir ARN de SQS): especifique los parámetros del almacén de datos, incluido un ARN SQS válido. (Por ejemplo, `arn:aws:sqs:region:account:sqs`). 
   +  **Include dead-letter SQS ARN** (Incluir un SQS ARN de mensajes fallidos) (Optional): especifique un ARN de SQS con mensajes erróneos de Amazon válido. (Por ejemplo, `arn:aws:sqs:region:account:deadLetterQueue`). 
   +  Elija **Add an Amazon S3 data source** (Agregar un origen de datos de Amazon S3).   
![\[Add data source dialog for S3, showing options for network connection and crawl settings.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/crawler-s3-event-console2.png)

------
#### [ AWS CLI ]

 El siguiente es un ejemplo de llamada a la AWS CLI de Amazon S3 para configurar un rastreador para usar notificaciones de eventos a fin de rastrear un bucket de destino de Amazon S3. 

```
Create Crawler:
aws glue update-crawler \
    --name myCrawler \
    --recrawl-policy RecrawlBehavior=CRAWL_EVENT_MODE \
    --schema-change-policy UpdateBehavior=UPDATE_IN_DATABASE,DeleteBehavior=LOG
    --targets '{"S3Targets":[{"Path":"s3://amzn-s3-demo-bucket/", "EventQueueArn": "arn:aws:sqs:us-east-1:012345678910:MyQueue"}]}'
```

------

# Configuración de un rastreador para notificaciones de eventos de Amazon S3 para una tabla del Catálogo de datos
<a name="crawler-s3-event-notifications-setup-console-catalog-target"></a>

Cuando el destino sea una tabla del Catálogo de datos, configure un rastreador para las notificaciones de eventos de Amazon S3 mediante la consola de AWS Glue:

1.  Configure las propiedades del rastreador. Para obtener más información, consulte [Opciones de configuración de rastreadores en la consola de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-console). 

1.  En la sección **Configuración de origen de datos**, se preguntará *¿Los datos ya están asignados a tablas de AWS Glue?* 

    Seleccione **Yes** (Sí) para seleccionar las tablas existentes de su Catálogo de datos como origen de datos. 

1.  En la sección **Glue tables** (Tablas de Glue), seleccione **Add tables** (Agregar tablas).   
![\[Data source configuration interface with options to select existing Glue tables or add new ones.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/crawler-s3-event-console1-cat.png)

1.  En el modal **Add table** (Agregar tabla), configure la base de datos y las tablas: 
   +  **Network connection** (Conexión de red) (opcional): elija **Add new connection** (Agregar nueva conexión). 
   +  **Base de datos**: seleccione una base de datos en el Catálogo de datos. 
   +  **Tablas**: seleccione una o más tablas de esa base de datos en el Catálogo de datos. 
   +  **Subsequent crawler runs** (Ejecuciones posteriores del rastreador): elija **Crawl based on events** (Rastreo basado en eventos) para utilizar las notificaciones de eventos de Amazon S3 para el rastreador. 
   +  **Include SQS ARN** (Incluir ARN de SQS): especifique los parámetros del almacén de datos, incluido un ARN SQS válido. (Por ejemplo, `arn:aws:sqs:region:account:sqs`). 
   +  **Include dead-letter SQS ARN** (Incluir un SQS ARN de mensajes fallidos) (Optional): especifique un ARN de SQS con mensajes erróneos de Amazon válido. (Por ejemplo, `arn:aws:sqs:region:account:deadLetterQueue`). 
   +  Elija **Confirmar**.   
![\[Add Glue tables dialog with network, database, tables, and crawler options.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/crawler-s3-event-console2-cat.png)

# Tutorial: agregar un rastreador de AWS Glue
<a name="tutorial-add-crawler"></a>

Para este escenario de AWS Glue, se le pedirá que analice los datos de llegada de las principales compañías aéreas para calcular la popularidad de los aeropuertos de salida mes a mes. Tiene datos de vuelos para el año 2016 en formato CSV almacenado en Amazon S3. Antes de transformar y analizar los datos, catalogue sus metadatos en AWS Glue Data Catalog.

En este tutorial, agregaremos un rastreador que deduce metadatos de estos registros de vuelo en Amazon S3 y crea una tabla en el Data Catalog.

**Topics**
+ [Requisitos previos](#tutorial-add-crawler-prerequisites)
+ [Paso 1: agregar un rastreador](#tutorial-add-crawler-step1)
+ [Paso 2: ejecutar el rastreador](#tutorial-add-crawler-step2)
+ [Paso 3: ver objetos del AWS Glue Data Catalog](#tutorial-add-crawler-step3)

## Requisitos previos
<a name="tutorial-add-crawler-prerequisites"></a>

En este tutorial se supone que usted tiene una cuenta de AWS y acceso a AWS Glue.

## Paso 1: agregar un rastreador
<a name="tutorial-add-crawler-step1"></a>

Siga estos pasos para configurar y ejecutar un rastreador que extraiga los metadatos de un archivo CSV almacenado en Amazon S3.

**Para crear un rastreador que lea archivos almacenados en Amazon S3**

1. En la consola del servicio AWS Glue, en el menú de la izquierda, elija **Crawlers (Rastreadores)**.

1. En la página Rastreadores, elija **Agregar rastreador**. Esto inicia una serie de páginas que le solicitan los detalles del rastreador.  
![\[La captura de pantalla muestra la página del rastreador. Desde aquí puede crear un rastreador o editar, duplicar, eliminar o ver un rastreador existente.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/crawlers-create_crawler.png)

1. En el campo Crawler name (Nombre del rastreador), ingrese **Flights Data Crawler** y, a continuación, elija **Next (Siguiente)**.

   Los rastreadores invocan clasificadores para inferir el esquema de sus datos. En este tutorial se utiliza el clasificador integrado para CSV de forma predeterminada. 

1. Para el tipo de origen de rastreador, elija **Data stores (Almacenes de datos)** y luego elija **Next (Siguiente)**.

1. Ahora apuntaremos el rastreador a sus datos. En la página **Add a data store (Agregar un almacén de datos)**, elija el almacén de datos de Amazon S3. Este tutorial no utiliza una conexión, así que deje el campo **Connection (Conexión)** en blanco si está visible. 

   Para la opción **Crawl data in (Rastrear los datos en)**, elija **Specified path in another account (Ruta especificada en otra cuenta)**. Luego, para **Include path (Incluir ruta)**, ingrese la ruta donde el rastreador puede encontrar los datos de vuelos, que es **s3://crawler-public-us-east-1/flight/2016/csv**. Después de introducir la ruta, el título de este campo cambia a **Include path (Incluir ruta).** Elija **Siguiente**.

1. Puede rastrear varios almacenes de datos con un único rastreador. Sin embargo, en este tutorial, estamos usando solo un único almacén de datos, así que elija **No**, y luego **Next (Siguiente)**.

1. El rastreador necesita permisos para acceder al almacén de datos y crear objetos en el AWS Glue Data Catalog. Para configurar estos permisos, elija **Create an IAM role (Crear un rol de IAM)**. El nombre del rol de IAM comienza con `AWSGlueServiceRole-` y, en el campo, ingrese la última parte del nombre del rol. Ingrese **CrawlerTutorial** y, a continuación, elija **Next (Siguiente)**. 
**nota**  
Para crear un rol de IAM, el usuario de AWS debe tener permisos `CreateRole`, `CreatePolicy` y `AttachRolePolicy`.

   El asistente crea un rol de IAM denominado `AWSGlueServiceRole-CrawlerTutorial`, asocia la política administrada de AWS, `AWSGlueServiceRole`, a este rol y agrega una política en línea que permite el acceso de lectura a la ubicación `s3://crawler-public-us-east-1/flight/2016/csv` de Amazon S3.

1. Cree una programación para el rastreador. Para **Frequency (Frecuencia)**, elija **Run on demand (Ejecutar bajo demanda)**, y luego elija **Next (Siguiente)**. 

1. Los rastreadores crean tablas en su Data Catalog. Una base de datos de en una base de datos del Data Catalog. Primero, elija **Add database (Agregar base de datos)** para crear una base de datos. En la ventana emergente, ingrese **test-flights-db** para el nombre de la base de datos y, a continuación, elija **Create (Crear)**.

   Luego, ingrese **flights** para **Prefix added to tables (Prefijo agregado a las tablas)**. Utilice los valores predeterminados para el resto de las opciones y elija **Next (Siguiente)**.

1. Compruebe las opciones elegidas en el asistente **Add crawler (Agregar rastreador)**. Si detecta algún error, puede elegir **Back (Atrás)** para volver a las páginas anteriores y realizar cambios.

   Después de haber revisado la información, elija **Finish (Finalizar)** para crear el rastreador.

## Paso 2: ejecutar el rastreador
<a name="tutorial-add-crawler-step2"></a>

Después de crear un rastreador, el asistente lo envía a la página Crawlers view (Visualización de rastreadores). Dado que creó un rastreador con una programación bajo demanda, se le ofrece la opción de ejecutar el rastreador.

**Para ejecutar un rastreador**

1. El banner situado cerca de la parte superior de esta página le permite saber que se creó el rastreador y le pregunta si desea ejecutarlo ahora. Elija **Run it now (Ejecutarlo ahora)** para ejecutar el rastreador.

   El banner cambia para mostrar los mensajes “Attempting to run (Intento de ejecución)” and “Running (Ejecución)” para el rastreador. Una vez que el rastreador comienza a ejecutarse, el banner desaparece y la visualización del rastreador se actualiza para mostrar un estado Starting (Inicio) para el rastreador. Después de un minuto, puede hacer clic en el ícono Refresh (Actualizar) para actualizar el estado del rastreador que se muestra en la tabla.

1. Cuando se completa el rastreador, aparece un nuevo banner que describe los cambios realizados por el rastreador. Puede elegir el enlace **test-flights-db (probar base de datos de vuelos)** para ver los objetos del Data Catalog.

## Paso 3: ver objetos del AWS Glue Data Catalog
<a name="tutorial-add-crawler-step3"></a>

El rastreador lee los datos en la ubicación de origen y crea tablas en el Data Catalog. Una tabla es una definición de metadatos que representa sus datos e incluye el esquema de datos. Las tablas del Data Catalog no contienen datos. En su lugar, se utilizan estas tablas como origen o destino en una definición de trabajo.

**Para ver los objetos del Data Catalog creados por el rastreador**

1. En el panel de navegación de la izquierda, en **Data Catalog**, elija **Databases (Bases de datos)**. Aquí puede ver la base de datos de `flights-db` que crea el rastreador.

1. En el panel de navegación de la izquierda, **Data catalog** y luego en **Databases (Bases de datos)**, elija **Tables (Tablas)**. Aquí puede ver la tabla de `flightscsv` que crea el rastreador. Si elige el nombre de la tabla, puede ver la configuración, los parámetros y las propiedades de la tabla. Si se desplaza hacia abajo en esta vista, puede ver el esquema, que es información sobre las columnas y los tipos de datos de la tabla.

1. Si elige **View partitions (Ver particiones)** en la página de vista de tabla, puede ver las particiones creadas para los datos. La primera columna es la clave de partición.

# Cómo definir los metadatos manualmente
<a name="populate-dg-manual"></a>

 El Catálogo de datos de AWS Glue es un repositorio central que almacena los metadatos sobre los orígenes y conjuntos de datos. Si bien un rastreador puede rastrear y completar metadatos automáticamente para los orígenes de datos compatibles, hay determinadas situaciones en las que es posible que deba definir los metadatos manualmente en el Catálogo de datos: 
+ Formatos de datos no compatibles: Si tiene orígenes de datos que no son compatibles con el rastreador, deberá definir los metadatos correspondientes a esos orígenes de datos en el catálogo de forma manual.
+ Requisitos de metadatos personalizados: El Rastreador de AWS Glue infiere los metadatos en función de reglas y convenciones predefinidas. Si tiene requisitos de metadatos específicos que no están cubiertos por los metadatos deducidos mediante el Rastreador de AWS Glue, puede definir los metadatos manualmente para adaptarlos a sus necesidades. 
+ Gobernanza y estandarización de los datos: En algunos casos, es posible que quiera tener un mayor control sobre las definiciones de los metadatos por motivos de gobernanza, cumplimiento o seguridad de los datos. Al definir los metadatos manualmente, se asegura de que estos cumplan con las normas y políticas de su organización. 
+ Marcador de posición para la futura ingesta de datos: Si tiene orígenes de datos que no están disponibles o accesibles de forma inmediata, puede crear tablas de esquemas vacías a modo de marcadores de posición. Una vez que los orígenes de datos estén disponibles, podrá completar las tablas con los datos reales y, al mismo tiempo, mantener la estructura predefinida. 

 Para definir los metadatos manualmente, puede usar la consola de AWS Glue, la consola de Lake Formation, la API de AWS Glue o la AWS Command Line Interface (AWS CLI). Puede crear bases de datos, tablas y particiones, y especificar las propiedades de los metadatos, como los nombres de las columnas, los tipos de datos, las descripciones y otros atributos. 

# Creación de bases de datos
<a name="define-database"></a>

Las bases de datos se utilizan para organizar tablas de metadatos en el AWS Glue. Al definir una tabla en el AWS Glue Data Catalog, puede añadirla a una base de datos. Una tabla puede estar en solo una base de datos.

Su base de datos puede contener tablas que definan datos de muchos almacenes de datos diferentes. Estos datos pueden incluir objetos de Amazon Simple Storage Service (Amazon S3) y tablas relacionales de Amazon Relational Database Service.

**nota**  
Al eliminar una base de datos del Catálogo de datos de AWS Glue, también se eliminan todas las tablas de la base de datos.

 Para ver la lista de bases de datos, inicie sesión en Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/). Seleccione **Databases** (Bases de datos) y, a continuación, seleccione un nombre de base de datos en la lista para ver los detalles. 

 En la pestaña **Databases (Bases de datos)** de la consola de AWS Glue, se pueden añadir, editar y eliminar bases de datos:
+ Para crear una nueva base de datos, seleccione **Add database** (Añadir base de datos) e indique un nombre y una descripción. Para ofrecer compatibilidad con otros almacenes de metadatos, como Apache Hive, el nombre se incorpora en minúsculas. 
**nota**  
Si tiene previsto obtener acceso a la base de datos desde Amazon Athena, proporcione un nombre únicamente con caracteres alfanuméricos y guiones bajos. Para obtener más información, consulte [Nombres de Athena](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#ate-table-database-and-column-names-allow-only-underscore-special-characters). 
+  Para editar la descripción de una base de datos, marque la casilla situada junto al nombre de la base de datos y seleccione **Edit database** (Editar base de datos). 
+  Para eliminar una base de datos, seleccione la casilla situada junto al nombre de la base de datos y elija **Remove** (Eliminar). 
+  Para ver la lista de tablas que contiene la base de datos, elija el nombre de la base de datos; todas las tablas aparecerán enumeradas en las propiedades de la base de datos. 

Para cambiar la base de datos de escritura de un rastreador, tendrá que modificar la definición del rastreador. Para obtener más información, consulte [Uso de rastreadores para completar el Catálogo de datos](add-crawler.md).

## Enlaces de recursos a base de datos
<a name="databases-resource-links"></a>


|  | 
| --- |
| La consola de AWS Glue se ha actualizado recientemente. La versión actual de la consola no admite enlaces de recursos a base de datos. | 

El Catálogo de datos también puede contener *enlaces de recursos* a bases de datos. Un enlace de recursos a bases de datos es un enlace a una base de datos local o compartida. En la actualidad, puede crear enlaces de recursos solo en AWS Lake Formation. Después de crear un enlace de recurso a una base de datos, puede utilizar el nombre del enlace de recursos donde quiera que utilice el nombre de la base de datos. Junto con las bases de datos que posee o que se comparten con usted, los enlaces de recursos a base de datos son devueltos por `glue:GetDatabases()` y aparecerán como entradas en la página **Databases (Bases de datos)** de la consola de AWS Glue.

El Catálogo de datos también puede contener enlaces de recursos a tablas.

Para obtener más información acerca de los enlaces de recursos, consulte [Creación de enlaces de recursos](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-resource-links.html) en la *Guía para desarrolladores de AWS Lake Formation*.

# Creación de tablas
<a name="tables-described"></a>

Aunque ejecutar un rastreador es el método recomendado para hacer un inventario de los datos incluidos en sus almacenes de datos, puede añadir tablas de metadatos al AWS Glue Data Catalog manualmente. Este enfoque le permite tener más control sobre las definiciones de los metadatos y personalizarlas de acuerdo con sus requisitos específicos.

También puede agregar tablas al Catálogo de datos manualmente de las siguientes formas:
+ Utilice la consola de AWS Glue para crear de forma manual una tabla en el AWS Glue Data Catalog. Para obtener más información, consulte [Creación de tablas mediante la consola](#console-tables).
+ Use la operación `CreateTable` en [API de AWS Glue](aws-glue-api.md) para crear una tabla en AWS Glue Data Catalog. Para obtener más información, consulte [Acción CreateTable (Python: create\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-CreateTable).
+ Utilice plantillas de CloudFormation. Para obtener más información, consulte [AWS CloudFormation para AWS Glue](populate-with-cloudformation-templates.md).

Al definir una tabla de forma manual mediante la consola o una API, especifica el esquema de tabla y el valor de un campo de clasificación que indica el tipo y el formato de los datos de la fuente de datos. Si un rastreador crea la tabla, el formato de los datos y el esquema se determinan por un clasificador personalizado o un clasificador integrado. Para obtener información adicional acerca de cómo crear una tabla mediante la consola de AWS Glue, consulte [Creación de tablas mediante la consola](#console-tables).

**Topics**
+ [Particiones de la tabla](#tables-partition)
+ [Enlaces de recursos a tabla](#tables-resource-links)
+ [Creación de tablas mediante la consola](#console-tables)
+ [Creación de índices de particiones](partition-indexes.md)
+ [Actualización de tablas del Catálogo de datos creadas de forma manual mediante rastreadores](#update-manual-tables)
+ [Propiedades de la tabla del catálogo de datos](#table-properties)

## Particiones de la tabla
<a name="tables-partition"></a>

Una definición de tabla de AWS Glue de una carpeta de Amazon Simple Storage Service (Amazon S3) puede describir una tabla con particiones. Por ejemplo, para mejorar el desempeño de las consultas, una tabla con particiones podría separar datos mensuales en diferentes archivos con el nombre del mes como clave. En AWS Glue, las definiciones de tabla incluyen la clave de partición de una tabla. Cuando AWS Glue evalúa los datos de carpetas de Amazon S3 para catalogar una tabla, determina si se agrega una tabla individual o con particiones. 

Puede crear índices de partición en una tabla para obtener un subconjunto de las particiones en lugar de cargar todas las particiones de la tabla. Para obtener más información sobre cómo trabajar con índices de partición, consulte [Creación de índices de particiones](partition-indexes.md).

Todas las condiciones siguientes deben cumplirse para que AWS Glue cree una tabla con particiones para una carpeta de Amazon S3:
+ Los esquemas de los archivos son similares, según determine AWS Glue.
+ El formato de datos de los archivos es el mismo.
+ El formato compresión de los archivos es el mismo.

Por ejemplo, es posible que posea un bucket de Amazon S3 denominado `my-app-bucket`, en el que almacene datos de aplicaciones de ventas de iOS y Android. Los datos se distribuyen en particiones por año, mes y día. Los archivos de datos para ventas iOS y Android tienen el mismo esquema, formato de datos y formato de compresión. En AWS Glue Data Catalog el rastreador de AWS Glue crea una definición de tabla con claves de partición para año, mes y día. 

En la siguiente lista de Amazon S3 para `my-app-bucket` se muestran algunas de las particiones. El símbolo `=` se utiliza para asignar valores de clave de partición. 

```
   my-app-bucket/Sales/year=2010/month=feb/day=1/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=1/Android.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/Android.csv
   ...
   my-app-bucket/Sales/year=2017/month=feb/day=4/iOS.csv
   my-app-bucket/Sales/year=2017/month=feb/day=4/Android.csv
```

## Enlaces de recursos a tabla
<a name="tables-resource-links"></a>


|  | 
| --- |
| La consola de AWS Glue se ha actualizado recientemente. La versión actual de la consola no admite enlaces de recursos a tabla. | 

El Catálogo de datos también puede contener *enlaces de recursos* a tablas. Un enlace de recursos a tablas es un enlace a una tabla local o compartida. En la actualidad, puede crear enlaces de recursos solo en AWS Lake Formation. Después de crear un enlace de recurso a una tabla, puede utilizar el nombre del enlace de recursos donde quiera que utilice el nombre de la tabla. Junto con las tablas que posee o que se comparten con usted, los enlaces de recursos a tablas son devueltos por `glue:GetTables()` y aparecerán como entradas en la página **Tables (Tablas)** de la consola de AWS Glue.

El Catálogo de datos también puede contener enlaces de recursos a tablas.

Para obtener más información acerca de los enlaces de recursos, consulte [Creación de enlaces de recursos](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-resource-links.html) en la *Guía para desarrolladores de AWS Lake Formation*.

## Creación de tablas mediante la consola
<a name="console-tables"></a>

Una tabla en el AWS Glue Data Catalog es la definición de metadatos que representa los datos en un almacén de datos. Puede crear tablas al ejecutar un rastreador, o bien puede crear una tabla manualmente en la consola de AWS Glue. En la lista **Tablas** en la consola de AWS Glue se muestran los valores de los metadatos de su tabla. Puede usar definiciones de tabla para especificar orígenes y destinos al crear trabajos de ETL (extracción, transformación y carga). 

**nota**  
Con los cambios recientes en la consola de administración de AWS, es posible que tenga que modificar sus roles de IAM existentes para obtener permiso de [https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables). Para la creación de nuevos roles, se agregó de forma predeterminada el permiso de la API de `SearchTables`.

Para comenzar, inicie sesión en Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/). Elija la pestaña **Tablas** y use el botón **Agregar tablas** para crear tablas con un rastreador o escribiendo atributos manualmente. 

### Adición de tablas en la consola
<a name="console-tables-add"></a>

A fin de usar un rastreador para agregar tablas, elija **Agregar tablas** y **Agregar tablas mediante un rastreador**. A continuación, siga las instrucciones en el asistente **Adición de rastreadores**. Cuando se ejecuta el rastreador, se agregan las tablas al AWS Glue Data Catalog. Para obtener más información, consulte [Uso de rastreadores para completar el Catálogo de datos](add-crawler.md).

Si conoce los atributos necesarios para crear una definición de tabla de Amazon Simple Storage Service (Amazon S3) en su Data Catalog puede crearla con el asistente de tabla. Elija **Agregar tablas**, **Agregar tabla manualmente** y siga las instrucciones en el asistente **Agregar tabla**.

Al agregar una tabla manualmente a través de la consola, tenga en cuenta lo siguiente:
+ Si tiene previsto obtener acceso a la tabla desde Amazon Athena, proporcione un nombre únicamente con caracteres alfanuméricos y guiones bajos. Para obtener más información, consulte [Nombres de Athena](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#ate-table-database-and-column-names-allow-only-underscore-special-characters).
+ La ubicación de sus datos de origen debe ser una ruta de Amazon S3.
+ El formato de los datos debe coincidir con uno de los formatos que aparecen en el asistente. La clasificación correspondiente, SerDe, y otras propiedades de tabla se rellenan automáticamente según el formato elegido. Puede definir tablas con los siguientes formatos:   
**Avro**  
Formato binario JSON Apache Avro.  
**CSV**  
Valores separados por caracteres. También puede especificar el delimitador de coma, barra vertical, punto y coma, tabulador o Ctrl-A.  
**JSON**  
JavaScript Object Notation, notación de objetos de JavaScript.  
**XML**  
Formato de lenguaje de marcado extensible. Especifique la etiqueta XML que define una fila en los datos. Las columnas se definen dentro de etiquetas de fila.  
**Parquet**  
Almacenamiento en columnas de Apache Parquet.  
**ORC**  
Formato archivo Optimized Row Columnar (ORC). Formato diseñado para almacenar de forma eficiente los datos de Hive.
+ Puede definir una clave de partición para la tabla.
+ Actualmente, las tablas con particiones que crea con la consola no se pueden usar en los trabajos de ETL.

### Atributos de tabla
<a name="console-tables-attributes"></a>

A continuación se muestran algunos atributos importantes de su tabla:

**Nombre**  
El nombre se determina al crearse la tabla y no puede cambiarlo. Puede hacer referencia a un nombre de tabla en muchas operaciones de AWS Glue.

**Database**  
El objeto contenedor donde reside su tabla. Este objeto contiene una organización de sus tablas que existe en el AWS Glue Data Catalog y puede diferir de una organización en su almacén de datos. Al eliminar una tabla, todas las tablas incluidas en la base de datos también se eliminan del Data Catalog. 

**Descripción**  
Descripción de la tabla. Puede escribir una descripción para ayudarle a entender el contenido de la tabla.

**Formato de tabla**  
Especifique la creación de una tabla estándar de AWS Glue o de una tabla en formato Apache Iceberg.  
El Catálogo de datos proporciona las siguientes opciones de optimización de tablas para administrar el almacenamiento de las tablas y mejorar el rendimiento de las consultas para las tablas de Iceberg.  
+ **Compactación**: los archivos de datos se combinan y se reescriben para eliminar los datos obsoletos y consolidar los datos fragmentados en archivos más grandes y eficientes.
+ **Retención de instantáneas**: las instantáneas son versiones con fecha y hora de una tabla de Iceberg. Las configuraciones de retención de instantáneas permiten a los clientes determinar cuánto tiempo se deben retener las instantáneas y cuántas instantáneas retener. La configuración de un optimizador de retención de instantáneas puede ayudar a administrar la sobrecarga de almacenamiento mediante la eliminación de las instantáneas antiguas e innecesarias y sus correspondientes archivos subyacentes.
+ **Eliminación de archivos huérfanos**: los archivos huérfanos son archivos a los que los metadatos de la tabla de Iceberg ya no hacen referencia. Con el tiempo, estos archivos se pueden acumular, sobre todo después de operaciones como la eliminación de tablas o los errores en los trabajos de ETL. Habilitar la eliminación de archivos huérfanos permite a AWS Glue identificar y eliminar periódicamente estos archivos innecesarios y así liberar espacio de almacenamiento.
Para obtener más información, consulte [Optimización de las tablas de Iceberg](table-optimizers.md).

**Configuración de optimización**  
Puede utilizar la configuración predeterminada o personalizar la configuración para activar los optimizadores de tablas.

**rol de IAM**  
 Para ejecutar los optimizadores de tablas, el servicio asume un rol de IAM en su nombre. Puede elegir un rol de IAM mediante el menú desplegable. Asegúrese de que el rol tenga los permisos necesarios para habilitar la compactación.  
Para obtener más información sobre los permisos necesarios para este rol de IAM, consulte [Requisitos previos para la optimización de tablas](optimization-prerequisites.md).

**Ubicación**  
El señalizador a la ubicación de los datos en un almacén de datos que representa esta definición de tabla.

**Clasificación**  
Un valor de categorización proporcionado cuando se creó la tabla. Normalmente, este se escribe al ejecutarse un rastreador y especifica el formato de los datos de origen.

**Última actualización**  
La hora y la fecha (UTC) en que se actualizó esta tabla en el Data Catalog.

**Fecha agregada**  
La hora y la fecha (UTC) en que se agregó esta tabla al Data Catalog.

**Obsoleto**  
Si AWS Glue descubre que una tabla en el Data Catalog ya no existe en su almacén de datos original, marca la tabla como obsoleta en el catálogo de datos. Si ejecuta un flujo de trabajo que hace referencia a una tabla obsoleta, podría producirse un error en el flujo de trabajo. Edite trabajos que hagan referencia a tablas obsoletas para quitarlas como orígenes y destinos. Recomendamos que elimine las tablas obsoletas cuando ya no sean necesarias. 

**Connection**  
Si AWS Glue requiere una conexión a su almacén de datos, el nombre de la conexión se asocia a la tabla.

### Visualización y administración de los detalles de la tabla
<a name="console-tables-details"></a>

Para ver los detalles de una tabla existente, elija el nombre de tabla de la lista y, a continuación, elija **Acción, Ver detalles**.

Entre los detalles de la tabla se incluyen propiedades de su tabla y su esquema. Esta vista muestra el esquema de la tabla, incluidos los nombres de columna en el orden definido para la tabla, los tipos de datos y las columnas con clave para las particiones. Si una columna es un tipo complejo, puede elegir **Ver propiedades** para mostrar detalles de la estructura de ese campo, como se muestra en el siguiente ejemplo:

```
{
"StorageDescriptor": 
    {
      "cols": {
         "FieldSchema": [
           {
             "name": "primary-1",
             "type": "CHAR",
             "comment": ""
           },
           {
             "name": "second ",
             "type": "STRING",
             "comment": ""
           }
         ]
      },
      "location": "s3://aws-logs-111122223333-us-east-1",
      "inputFormat": "",
      "outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
      "compressed": "false", 
      "numBuckets": "0",
      "SerDeInfo": {
           "name": "",
           "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
           "parameters": {
               "separatorChar": "|"
            }
      },
      "bucketCols": [],
      "sortCols": [],
      "parameters": {},
      "SkewedInfo": {},
      "storedAsSubDirectories": "false"
    },
    "parameters": {
       "classification": "csv"
    }
}
```

Para obtener más información acerca de las propiedades de una tabla, como `StorageDescriptor`, consulte [Estructura StorageDescriptor](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-StorageDescriptor).

Para cambiar el esquema de una tabla, elija **Editar esquema** para agregar y quitar columnas, cambiar nombres de columna y cambiar tipos de datos.

 Para comparar diferentes versiones de una tabla, incluido su esquema, elija **Comparar versiones** para ver una comparación paralela de dos versiones del esquema para una tabla. Para obtener más información, consulte [Comparación de las versiones del esquema de la tabla](#console-tables-schema-comparison). 

Para mostrar los archivos que componen una partición de Amazon S3, elija **Ver partición**. Para las tablas de Amazon S3, la columna **Clave** muestra las claves de partición que se usan para particionar la tabla en el almacén de datos de origen. La creación de particiones es una forma de dividir una tabla en partes relacionadas según los valores de una columna de clave, tales como fecha, ubicación o departamento. Para obtener más información acerca de las particiones, busque en Internet información acerca de la “creación de particiones Hive”.

**nota**  
Para obtener instrucciones paso a paso para ver los detalles de una tabla, consulte el tutorial **Explorar tabla** en la consola.

### Comparación de las versiones del esquema de la tabla
<a name="console-tables-schema-comparison"></a>

 Cuando compara dos versiones de esquemas de tablas, puede comparar los cambios en las filas anidadas al expandir y contraer las filas anidadas, puede comparar los esquemas de dos versiones y ver las propiedades de las tablas lado a lado. 

 Comparación de versiones 

1.  En la consola de AWS Glue, seleccione **Tablas**, **Acciones** y, a continuación, elija **Comparar versiones**.   
![\[La captura de pantalla muestra el botón de Acciones seleccionado. El menú desplegable muestra la opción Comparar versiones.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/catalog-table-compare-versions.png)

1.  Elija una versión para comparar mediante el menú desplegable de versiones. Cuando compare esquemas, la pestaña Esquema aparece resaltada en naranja. 

1.  Cuando compare tablas entre dos versiones, los esquemas de las tablas se muestran en la parte izquierda y derecha de la pantalla. Esto le permite visualizar los cambios al comparar los campos de Nombre de columna, tipo de datos, clave y comentario uno al lado del otro. Cuando se produce un cambio, aparece un icono de color que muestra el tipo de cambio realizado. 
   +  Eliminada: se muestra un icono rojo que indica dónde se quitó la columna de una versión anterior del esquema de la tabla. 
   +  Editada o movida: se muestra un icono azul que indica dónde se modificó o movió la columna en una versión más reciente del esquema de la tabla. 
   +  Agregado: se muestra un icono verde que indica dónde se agregó una columna a una versión más reciente del esquema de la tabla. 
   +  Cambios anidados: se muestra un icono amarillo que indica dónde contiene cambios la columna anidada. Elija la columna para expandirla y ver las columnas que se eliminaron, editaron, movieron o agregaron.   
![\[La captura de pantalla muestra la comparación del esquema de tablas entre dos versiones. En el lado izquierdo está la versión anterior. En el lado derecho está la versión más reciente. El icono de eliminación aparece junto a una columna que se quitó de la versión anterior y que ya no está en la versión más reciente.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/catalog-table-version-comparison.png)

1.  Utilice la barra de búsqueda de campos filtrados para mostrar los campos en función de los caracteres que introduzca aquí. Si introduce un nombre de columna en cualquier versión de la tabla, los campos filtrados se muestran en ambas versiones de la tabla para mostrarle dónde se produjeron los cambios. 

1.  Para comparar propiedades, elija la **pestaña de Propiedades**. 

1.  Para detener la comparación de versiones, elija **Detener comparación** para volver a la lista de tablas. 

# Creación de índices de particiones
<a name="partition-indexes"></a>

Con el tiempo, cientos de miles de particiones se agregan a una tabla. La [API GetPartitions](https://docs.aws.amazon.com/glue/latest/webapi/API_GetPartitions.html) se utiliza para buscar las particiones en la tabla. La API devuelve las particiones que coinciden con la expresión proporcionada en la solicitud.

Utilicemos, a modo de ejemplo, una tabla *sales\$1data* (datos de servicio), la cual está dividida en las secciones *Country* (País), *Category* (Categoría), *Year* (Año), *Month* (Mes) y *creationDate* (Fecha de creación). Para obtener los datos de ventas de todos los objetos que se vendieron en la categoría *Books* (Libros) durante el 2020, después del *2020-08-15*, tiene que crear una solicitud de `GetPartitions` con la expresión “Category = ‘Books’ and creationDate > ‘2020-08-15’” en el catálogo de datos.

Si no hay índices de partición presentes en la tabla, AWS Glue carga todas las particiones de la tabla y, a continuación, filtra las particiones cargadas con la expresión de consulta proporcionada por el usuario en la solicitud `GetPartitions`. La consulta tarda más tiempo en ejecutarse a medida que aumenta el número de particiones en una tabla sin índices. Con un índice, la consulta `GetPartitions` intentará obtener un subconjunto de las particiones en lugar de cargar todas las particiones en la tabla.

**Topics**
+ [Acerca de los índices de partición](#partition-index-1)
+ [Creación de una tabla con índices de partición](#partition-index-creating-table)
+ [Agregado de un índice de partición a una tabla existente](#partition-index-existing-table)
+ [Descripción de índices de partición en una tabla](#partition-index-describing)
+ [Limitaciones al uso de índices de partición](#partition-index-limitations)
+ [Uso de índices para una llamada GetPartitions optimizada](#partition-index-getpartitions)
+ [Integración con motores](#partition-index-integration-engines)

## Acerca de los índices de partición
<a name="partition-index-1"></a>

Cuando crea un índice de partición, especifica una lista de claves de partición que ya existen en una tabla determinada. El índice de partición es una sublista de claves de partición definidas en la tabla. Se puede crear un índice de partición en cualquier permutación de claves de partición definidas en la tabla. Para la tabla *sales\$1data* anterior, los índices posibles son (país, categoría, fecha de creación), (país, categoría, año), (país, categoría), (país), (categoría, país, año, mes), etc.

El Data Catalog concatenará los valores de partición en el orden proporcionado en el momento de la creación del índice. El índice se genera de forma continua a medida que se agregan particiones a la tabla. Los índices pueden crearse para los tipos de columna Cadena (string, char y varchar), Numérico (int, biging, long, tinyint y smallint) y Fecha (aaaa-mm-dd). 

**Tipos de datos compatibles**
+ Fecha: una fecha en el formato ISO, como `YYYY-MM-DD`. Por ejemplo, la fecha `2020-08-15`. El formato utiliza guiones (‐) para separar el año, el mes y el día. El rango de fechas admitido para los lapsos de indexación es de `0000-01-01` a `9999-12-31`.
+ Cadena: un literal de cadena entre comillas simples o dobles. 
+ Char: datos de caracteres de longitud fija, con una longitud especificada comprendida entre 1 y 255 como, por ejemplo, char(10).
+ Varchar: datos de caracteres de longitud variable, con una longitud especificada comprendida entre 1 y 65 535 como, por ejemplo, varchar(10).
+ Numérico: int, bigint, long, tinyint y smallint

Los índices para los tipos de datos Numérico, Cadena y Fecha admiten el uso de los símbolos =, >, >=, < y <= entre los operadores. La solución de indexación actualmente solo admite el operador lógico `AND`. Las subexpresiones con los operadores “LIKE (COMO)”, “IN (EN)”, “OR (O)” y “NOT (NO)” se ignoran en la expresión para el filtrado mediante índice. El filtrado de la subexpresión ignorada se realiza en las particiones obtenidas después de aplicar el filtrado de índices.

Para cada partición agregada a una tabla, se crea elemento de índice correspondiente. Para una tabla con particiones “n”, un índice de partición dará como resultado elementos de índice de partición “n”. El índice de partición “m” en la misma tabla dará como resultado elementos de índice de partición “m\$1n”. Cada elemento del índice de partición se cargará de acuerdo con la política de precios actual de AWS Glue para el almacenamiento del catálogo de datos. Para obtener detalles sobre el precio de los objetos de almacenamiento, consulte [Precios de AWS Glue](https://aws.amazon.com/glue/pricing/).

## Creación de una tabla con índices de partición
<a name="partition-index-creating-table"></a>

Puede crear un índice de partición durante la creación de la tabla. La solicitud `CreateTable` toma una lista de [objetos de `PartitionIndex`](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-PartitionIndex) como entrada. Se puede crear un máximo de 3 índices de partición en una tabla determinada. Cada índice de partición requiere un nombre y una lista de `partitionKeys` definida para la tabla. Los índices creados en una tabla se pueden recuperar con la [API `GetPartitionIndexes`](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-GetPartitionIndexes)

## Agregado de un índice de partición a una tabla existente
<a name="partition-index-existing-table"></a>

Para agregar un índice de partición a una tabla existente, se usa la operación `CreatePartitionIndex`. Puede crear un `PartitionIndex` por cada operación `CreatePartitionIndex`. Agregar un índice no afecta la disponibilidad de una tabla, ya que la tabla sigue estando disponible mientras se crean los índices.

El estado del índice para una partición agregada se establece en CREATING (CREACIÓN) y se inicia la creación de los datos del índice. Si el proceso de creación de los índices se realiza correctamente, el estado del índice se actualiza a ACTIVE (ACTIVO) y, en caso de que el proceso no se realice correctamente, el estado del índice se actualiza a FAILED (ERROR). La creación del índice puede presentar errores por varias razones, y puede usar la función `GetPartitionIndexes` para recuperar los detalles del error. Los posibles errores son:
+ ENCRYPTED\$1PARTITITION\$1ERROR (ERROR DE PARTICICÓN CIFRADA): no se admite la creación de índices en una tabla con particiones cifradas.
+ INVALID\$1PARTITITION\$1TYPE\$1DATA\$1ERROR (ERROR DE DATOS DE TIPO DE PARTICIÓN INVÁLIDOS): se observa cuando el valor `partitionKey` no es un valor válido para el tipo de datos `partitionKey` correspondiente. Por ejemplo: una `partitionKey` con el tipo de datos “int” tiene un valor “foo”.
+ MISSING\$1PARTITITION\$1VALUE\$1ERROR (ERROR DE VALOR DE PARTICIÓN FALTANTE): se observa cuando el `partitionValue` para una `indexedKey` no está presente. Esto puede suceder cuando una tabla no se particiona de manera uniforme.
+ UNSUPPORTED\$1PARTITITION\$1CARACTER\$1ERROR (ERROR DE CARÁCTER DE PARTICIÓN NO SOPORTADO): se observa cuando el valor de una clave de partición indexada contiene los caracteres \$1u0000, \$1u0001 o \$1u0002
+ INTERNAL\$1ERROR (ERROR INTERNO): se produjo un error interno mientras se creaban los índices. 

## Descripción de índices de partición en una tabla
<a name="partition-index-describing"></a>

Para obtener los índices de partición creados en una tabla, utilice la operación `GetPartitionIndexes`. La respuesta enumera todos los índices de la tabla, junto con el estado actual de cada uno de ellos (el `IndexStatus`).

El `IndexStatus` para un índice de partición será uno de los siguientes:
+ `CREATING`: el índice está en proceso de creación y aún no está disponible para usarlo.
+ `ACTIVE`: ya se puede utilizar el índice. Las solicitudes pueden utilizar el índice para realizar una consulta optimizada.
+ `DELETING`: el índice se está eliminando y ya no se puede utilizar. Un índice en el estado activo se puede eliminar mediante la solicitud `DeletePartitionIndex`, que mueve el estado de ACTIVE (ACTIVO) a DELETING (ELIMINACIÓN).
+ `FAILED`: error en la creación del índice en una tabla existente. Cada tabla almacena los últimos 10 índices que presentaron errores.

Las transiciones de estado posibles para los índices creados en una tabla existente son:
+ CREACIÓN → ACTIVO → ELIMINACIÓN
+ CREACIÓN → ERROR

## Limitaciones al uso de índices de partición
<a name="partition-index-limitations"></a>

Una vez que haya creado un índice de partición, tenga en cuenta estos cambios en la funcionalidad de la tabla y la partición:

**Creación de una nueva partición (después del agregado de índices)**  
Después de crear un índice de partición en una tabla, se validarán las comprobaciones de tipos de datos de claves indexadas de todas las particiones nuevas agregadas a la tabla. Se validará el formato de tipo de datos del valor de partición de las claves indexadas. Si se produce un error en la comprobación del tipo de datos, la operación de creación de partición fallará. Para la tabla *sales\$1data (datos de venta)*, si se crea un índice para claves (categoría, año) donde la categoría es de tipo `string` y año del tipo `int`, la creación de la nueva partición con un valor de YEAR (AÑO) de “foo” presentará errores.

Una vez habilitados los índices, el agregado de particiones con valores clave indexados que tengan los caracteres U\$10000, U\$100001 y U\$10002 comenzará a fallar.

**Actualizaciones de tablas**  
Una vez creado un índice de partición en una tabla, no puede modificar los nombres de las claves de partición para las claves de partición existentes y no puede cambiar el tipo o el orden de las claves que están registradas con el índice.

## Uso de índices para una llamada GetPartitions optimizada
<a name="partition-index-getpartitions"></a>

Cuando llame `GetPartitions` en una tabla con un índice, puede incluir una expresión y, si corresponde, el Data Catalog utilizará un índice si es posible. La primera clave del índice debe ser transferida a la expresión para los índices que se van a utilizar en el filtrado. La optimización de índices en el filtrado se aplica en la medida de lo posible. El Data Catalog intenta utilizar la optimización del índice tanto como sea posible, pero en caso de que falte un índice o en caso de un operador no soportado, vuelve a la implementación existente de cargar todas las particiones. 

Para la tabla *sales\$1data (datos de venta)* anterior, agregaremos el índice [Country (País), Category (Categoría), Year (Año)]. Si “País” no se transfiere en la expresión, el índice registrado no podrá filtrar particiones utilizando índices. Puede agregar hasta 3 índices para soportar varios patrones de consulta.

Tomemos algunas expresiones de ejemplo y veamos cómo funcionan los índices en ellas:


| Expresiones | Cómo se utilizará el índice | 
| --- | --- | 
|  Country = 'US' (País = “EE.UU.”)  |  El índice se utilizará para filtrar particiones.  | 
|  Country = 'US' (País = “EE.UU.”) y Category = 'Shoes' (Categoría = ”Zapatos”)  |  El índice se utilizará para filtrar particiones.  | 
|  Category = 'Shoes' (Categoría = “Zapatos”)  |  Los índices no se utilizarán ya que no se proporciona “país” en la expresión. Todas las particiones se cargarán para devolver una respuesta.  | 
|  Country = 'US' (País = “EE.UU.”) y Category = 'Shoes' (Categoría = ”Zapatos”) y Year > '2018' (Año > “2018”)  |  El índice se utilizará para filtrar particiones.  | 
|  Country = 'US' (País = “EE.UU.”) y Category = 'Shoes' (Categoría = ”Zapatos”) y Year > '2018' (Año > “2018”) y month = 2 (mes = 2)  |  El índice se utilizará para buscar todas las particiones con país = “EE.UU.” y categoría = “zapatos” y año > 2018. A continuación, se realizará el filtrado en la expresión del mes.  | 
|  País = “EE.UU.” Y Categoría = ”Zapatos” O Año > “2018”  |  Los índices no se usarán ya que se incluye un operador `OR` en la expresión.  | 
|  País = “EE.UU.” Y Categoría = “Zapatos” Y (Año = 2017 O Año = “2018”)  |  El índice se utilizará para buscar todas las particiones con país = “EE.UU.” y categoría = “zapatos”, y luego se realizará el filtrado en la expresión del año.  | 
|  País en (“EE.UU.”, “UK”) Y Categoría = “Zapatos”  |  Los índices no se usarán para filtrar ya que el operador `IN` no se soporta actualmente.  | 
|  País = “EE.UU.”, Y Categoría en (“Zapatos”, “Libros”)  |  El índice se utilizará para buscar todas las particiones con país = “EE.UU.” y luego se realizará el filtrado en la expresión de la categoría.  | 
|  País = ‘EE. UU.’ Y Categoría en (‘Zapatos’, ’Libros’) Y (Fecha de creación > ‘2023-9-01’  |  El índice se utilizará para buscar todas las particiones con País = ‘EE. UU.’ y Fecha de creación > ‘2023-9-01’ y luego se realizará el filtrado en la expresión de la Categoría.  | 

## Integración con motores
<a name="partition-index-integration-engines"></a>

Redshift Spectrum, Amazon EMR y AWS Glue ETL Spark DataFrames pueden utilizar índices para obtener particiones después de que los índices estén en estado ACTIVE en AWS Glue. [Athena](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index) y los [AWS Glue marcos dinámicos de ETL](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-cat-predicates) requieren que siga pasos adicionales si desea utilizar índices para mejorar las consultas.

### Habilitación del filtrado de particiones
<a name="enable-partition-filtering-athena"></a>

Para habilitar el filtrado de particiones, se necesita actualizar las propiedades de la tabla tal como se muestra a continuación:

1. En la consola de AWS Glue, en la sección **Catálogo de datos**, seleccione **Tablas**.

1. Elija una tabla.

1. En **Acciones**, seleccione **Editar tabla**.

1. En **Propiedades de la tabla**, agregue lo siguiente:
   + Clave: `partition_filtering.enabled`
   + Valor: `true`

1. Seleccione **Aplicar**.

Como alternativa, puede establecer este parámetro al ejecutar la consulta [ALTER TABLE SET PROPERTIES](https://docs.aws.amazon.com/athena/latest/ug/alter-table-set-tblproperties.html) (Alterar las propiedades establecidas de la tabla) en Athena.

```
ALTER TABLE partition_index.table_with_index
SET TBLPROPERTIES ('partition_filtering.enabled' = 'true')
```

## Actualización de tablas del Catálogo de datos creadas de forma manual mediante rastreadores
<a name="update-manual-tables"></a>

Es posible que desee crear tablas de AWS Glue Data Catalog de forma manual y, a continuación, mantenerlas actualizadas con rastreadores de AWS Glue. Los rastreadores que se ejecutan en una programación pueden añadir nuevas particiones y actualizar las tablas con cualquier cambio de esquema. Esto también se aplica a tablas migradas desde un metaalmacén de Apache Hive.

Para ello, cuando defina un rastreador, en lugar de especificar un almacén de datos o más como origen de un rastreador, especifique una o más tablas existentes del Catálogo de datos. El rastreador rastrea los almacenes de datos especificados por las tablas del catálogo. En este caso, no se crean tablas nuevas. En su lugar, las tablas que usted crea de forma manual se actualizan.

A continuación se muestran otros motivos por los que podría desear crear tablas de catálogos de forma manual y especificar tablas de catálogos como la fuente del rastreador:
+ Desea elegir el nombre de la tabla de catálogo y no confía en el algoritmo de denominación de tablas de catálogos.
+ Desea evitar que se creen tablas nuevas en caso de que los archivos que tengan un formato que podría interrumpir la detección de particiones se guarden de forma errónea en la ruta de la fuente de datos.

Para obtener más información, consulte [Paso 2: elegir orígenes de datos y clasificadores](define-crawler-choose-data-sources.md).

## Propiedades de la tabla del catálogo de datos
<a name="table-properties"></a>

 Las propiedades o los parámetros de la tabla, tal como se les conoce en la AWS CLI, son cadenas de valores y claves no validadas. Puede establecer sus propias propiedades en la tabla para permitir usos del catálogo de datos fuera de AWS Glue. Otros servicios que utilizan el Catálogo de datos también pueden hacerlo. AWS Glue establece algunas propiedades de la tabla al ejecutar trabajos o rastreadores. A menos que se describa lo contrario, estas propiedades son para uso interno, no se admite que sigan existiendo en su forma actual ni el comportamiento del producto si estas propiedades se cambian manualmente. 

 Para obtener más información sobre las propiedades de tabla establecidas por los rastreadores de AWS Glue, consulte [Parámetros establecidos en las tablas del catálogo de datos por el rastreador](table-properties-crawler.md). 

# Integración con Tablas de Amazon S3
<a name="glue-federation-s3tables"></a>

La integración del Catálogo de datos de AWS Glue con Tablas de Amazon S3 permite descubrir, consultar y combinar Tablas de S3 con datos en lagos de datos de Amazon S3 por medio de un único catálogo. Al integrar Tablas de S3 con el Catálogo de datos, el servicio crea una estructura de catálogo federado que asigna los recursos de Tablas de S3 a objetos del catálogo de AWS Glue:
+ Un bucket de tabla de S3 se convierte en un catálogo dentro del Catálogo de datos
+ Un espacio de nombres de S3 se convierte en una base de datos de AWS Glue
+ Una tabla de S3 se convierte en una tabla de AWS Glue

## Controles de acceso
<a name="s3-tables-access-controls"></a>

El Catálogo de datos admite dos modos de control de acceso para la integración con Tablas de S3:
+ **Control de acceso de IAM**: utiliza políticas de IAM para controlar el acceso a Tablas de S3 y al Catálogo de datos. Con este enfoque, se requieren permisos de IAM tanto sobre los recursos de Tablas de S3 como sobre los objetos del Catálogo de datos para acceder a los recursos.
+ **Control de acceso AWS Lake Formation**: utiliza concesiones de AWS Lake Formation además de los permisos de IAM para controlar el acceso a Tablas de S3 a través del Catálogo de datos. En este modo, las entidades principales requieren permisos de IAM para interactuar con el Catálogo de datos, y las concesiones de AWS Lake Formation determinan a qué recursos del catálogo (bases de datos, tablas, columnas, filas) puede acceder la entidad principal. Este modo admite tanto el control de acceso amplio (concesiones a nivel de base de datos y tabla) como el control de acceso detallado (seguridad a nivel de columna y fila). Cuando existe un rol registrado configurado y la entrega de credenciales está habilitada, no son necesarios permisos de IAM de Tablas de S3 para la entidad principal, dado que AWS Lake Formation emite credenciales en su nombre mediante dicho rol. Asimismo, el control de acceso de AWS Lake Formation admite la entrega de credenciales para motores de análisis de terceros. Para obtener más información, consulte [Creación de un catálogo de Tablas de S3](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html) en la *Guía para desarrolladores de AWS Lake Formation*.

Puede cambiar entre modos de control de acceso a medida que evolucionan sus requisitos.

## Jerarquía de catálogos para el montaje automático
<a name="s3-tables-catalog-hierarchy"></a>

Cuando integra Tablas de S3 con el Catálogo de datos mediante la consola de administración de Amazon S3, la consola crea un catálogo federado llamado `s3tablescatalog` en el Catálogo de datos de la cuenta en esa región de AWS. Este catálogo federado actúa como catálogo principal de todos los buckets de tablas de S3 existentes y futuros en esa cuenta y región. La integración asigna los recursos de buckets de tablas de Amazon S3 según la siguiente jerarquía:
+ **Catálogo federado**: `s3tablescatalog` (se crea automáticamente)
+ **Catálogos secundarios**: cada bucket de tablas de S3 se convierte en un catálogo secundario bajo `s3tablescatalog`
+ **Bases de datos**: cada espacio de nombres de S3 dentro de un bucket de tablas se convierte en una base de datos
+ **Tablas**: cada tabla de S3 dentro de un espacio de nombres se convierte en una tabla

Por ejemplo, si tiene un bucket de tablas S3 llamado “analytics-bucket” con un espacio de nombres “sales” que contiene una tabla “transactions”, la ruta completa en el Catálogo de datos sería: `s3tablescatalog/analytics-bucket/sales/transactions`

Esta jerarquía de cuatro niveles se aplica a escenarios en la misma cuenta, donde Tablas de S3 y el Catálogo de datos se encuentran en la misma cuenta de AWS. En escenarios entre cuentas, debe montar manualmente los buckets de tablas de S3 individuales en el Catálogo de datos, lo que crea una jerarquía de tres niveles.

## Regiones admitidas
<a name="s3-tables-supported-regions"></a>

La integración de Tablas de S3 con el Catálogo de datos está disponible en las siguientes regiones de AWS:


| Código de región | Nombre de la región | 
| --- | --- | 
| us-east-1 | Este de EE. UU. (Norte de Virginia) | 
| us-east-2 | Este de EE. UU. (Ohio) | 
| us-west-1 | Oeste de EE. UU. (Norte de California) | 
| us-west-2 | Oeste de EE. UU. (Oregón) | 
| af-south-1 | África (Ciudad del Cabo) | 
| ap-east-1 | Asia-Pacífico (Hong Kong) | 
| ap-east-2 | Asia-Pacífico (Taipéi) | 
| ap-northeast-1 | Asia-Pacífico (Tokio) | 
| ap-northeast-2 | Asia-Pacífico (Seúl) | 
| ap-northeast-3 | Asia-Pacífico (Osaka) | 
| ap-south-1 | Asia-Pacífico (Mumbai) | 
| ap-south-2 | Asia-Pacífico (Hyderabad) | 
| ap-southeast-1 | Asia-Pacífico (Singapur) | 
| ap-southeast-2 | Asia-Pacífico (Sídney) | 
| ap-southeast-3 | Asia-Pacífico (Yakarta) | 
| ap-southeast-4 | Asia-Pacífico (Melbourne) | 
| ap-southeast-5 | Asia-Pacífico (Malasia) | 
| ap-southeast-6 | Asia-Pacífico (Nueva Zelanda) | 
| ap-southeast-7 | Asia-Pacífico (Tailandia) | 
| ca-central-1 | Canadá (centro) | 
| ca-west-1 | Oeste de Canadá (Calgary) | 
| eu-central-1 | Europa (Fráncfort) | 
| eu-central-2 | Europa (Zúrich) | 
| eu-north-1 | Europa (Estocolmo) | 
| eu-south-1 | Europa (Milán) | 
| eu-south-2 | Europa (España) | 
| eu-west-1 | Europa (Irlanda) | 
| eu-west-2 | Europa (Londres) | 
| eu-west-3 | Europa (París) | 
| il-central-1 | Israel (Tel Aviv) | 
| mx-central-1 | México (centro) | 
| sa-east-1 | América del Sur (São Paulo) | 

**Topics**
+ [Controles de acceso](#s3-tables-access-controls)
+ [Jerarquía de catálogos para el montaje automático](#s3-tables-catalog-hierarchy)
+ [Regiones admitidas](#s3-tables-supported-regions)
+ [Requisitos previos](s3tables-catalog-prerequisites.md)
+ [Habilitación de la integración de Tablas de S3 con el Catálogo de datos](enable-s3-tables-catalog-integration.md)
+ [Cómo agregar bases de datos y tablas al catálogo de Tablas de S3](create-databases-tables-s3-catalog.md)
+ [Cómo compartir objetos del catálogo de Tablas de S3](share-s3-tables-catalog.md)
+ [Administración de la integración de Tablas de S3](manage-s3-tables-catalog-integration.md)

# Requisitos previos
<a name="s3tables-catalog-prerequisites"></a>

Antes de crear un catálogo federado para Tablas de S3 en el Catálogo de datos de AWS Glue, asegúrese de que la entidad principal de IAM (usuario o rol) cuente con los permisos necesarios.

## Permisos de IAM necesarios
<a name="s3tables-required-iam-permissions"></a>

La entidad principal de IAM necesita los siguientes permisos para habilitar la integración de Tablas de S3:

**Permisos de AWS Glue**:
+ `glue:CreateCatalog`: necesario para crear el catálogo federado de `s3tablescatalog`
+ `glue:GetCatalog`: necesario para ver los detalles del catálogo
+ `glue:GetDatabase`: necesario para ver los espacios de nombres de S3 como bases de datos
+ `glue:GetTable`: necesario para ver tablas de S3
+ `glue:passConnection`: otorga a la entidad principal que realiza la llamada el derecho a delegar la conexión de `aws:s3tables` al servicio AWS Glue

**Permisos de Tablas de S3** (para el control de acceso de IAM):
+ `s3tables:CreateTableBucket`
+ `s3tables:GetTableBucket`
+ `s3tables:CreateNamespace`
+ `s3tables:GetNamespace`
+ `s3tables:ListNamespaces`
+ `s3tables:CreateTable`
+ `s3tables:GetTable`
+ `s3tables:ListTables`
+ `s3tables:UpdateTableMetadataLocation`
+ `s3tables:GetTableMetadataLocation`
+ `s3tables:GetTableData`
+ `s3tables:PutTableData`

## Ejemplo de política de IAM
<a name="s3tables-iam-policy-example"></a>

La siguiente política de IAM proporciona los permisos mínimos requeridos para habilitar la integración de Tablas de S3 con el Catálogo de datos en el modo de IAM:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GlueDataCatalogPermissions",
      "Effect": "Allow",
      "Action": [
        "glue:CreateCatalog",
        "glue:GetCatalog",
        "glue:GetDatabase",
        "glue:GetTable"
      ],
      "Resource": [
        "arn:aws:glue:region:account-id:catalog/s3tablescatalog",
        "arn:aws:glue:region:account-id:database/s3tablescatalog/*/*",
        "arn:aws:glue:region:account-id:table/s3tablescatalog/*/*/*"
      ]
    },
    {
      "Sid": "S3TablesDataAccessPermissions",
      "Effect": "Allow",
      "Action": [
        "s3tables:GetTableBucket",
        "s3tables:GetNamespace",
        "s3tables:GetTable",
        "s3tables:GetTableMetadataLocation",
        "s3tables:GetTableData"
      ],
      "Resource": [
        "arn:aws:s3tables:region:account-id:bucket/*",
        "arn:aws:s3tables:region:account-id:bucket/*/table/*"
      ]
    }
  ]
}
```

# Habilitación de la integración de Tablas de S3 con el Catálogo de datos
<a name="enable-s3-tables-catalog-integration"></a>

Puede habilitar la integración de Tablas de Amazon S3 con el Catálogo de datos de AWS Glue mediante la consola de administración de Amazon S3 o AWS CLI. Cuando se habilita la integración mediante la consola, AWS crea un catálogo federado llamado `s3tablescatalog` que descubre automáticamente y monta todos los buckets de tablas de S3 en la cuenta y región de AWS.

## Habilitación de la integración de Tablas de S3 mediante la consola de administración de Amazon S3
<a name="enable-s3-tables-console"></a>

1. Abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets de tablas**.

1. Elija **Crear bucket de tablas**.

1. Introduzca un **Nombre de bucket de tablas** y asegúrese de que se ha seleccionado la casilla de verificación **Habilitar integración**.

1. Elija **Crear bucket de tablas**.

Amazon S3 integra automáticamente los buckets de tablas en esa región. La primera vez que se integran buckets de tablas en cualquier región, Amazon S3 crea `s3tablescatalog` en el Catálogo de datos de esa región.

Después de que se crea el catálogo, todos los buckets de tablas de S3 en la cuenta y región se montan automáticamente como catálogos secundarios. Para ver las bases de datos (espacios de nombres) y las tablas, vaya al catálogo en el Catálogo de Datos.

## Habilitación de Tablas de S3 mediante AWS CLI
<a name="enable-s3-tables-cli"></a>

Utilice el comando `glue create-catalog` para crear el catálogo `s3tablescatalog`.

```
aws glue create-catalog \
  --name "s3tablescatalog" \
  --catalog-input '{
    "Description": "Federated catalog for S3 Tables",
    "FederatedCatalog": {
      "Identifier": "arn:aws:s3tables:region:account-id:bucket/*",
      "ConnectionName": "aws:s3tables"
    },
    "CreateDatabaseDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }],
    "CreateTableDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }]
  }'
```

Sustituya *region* por la región de AWS y *account-id* por el ID de la cuenta de AWS.

## Verificación de la integración
<a name="verify-s3-tables-integration"></a>

Después de crear el catálogo, para verificar que los buckets de tablas de S3 estén montados, enumere los catálogos secundarios:

```
aws glue get-catalogs \
  --parent-catalog-id s3tablescatalog
```

# Cómo agregar bases de datos y tablas al catálogo de Tablas de S3
<a name="create-databases-tables-s3-catalog"></a>

Asegúrese de contar con los permisos necesarios para enumerar y crear catálogos, bases de datos y tablas en el Catálogo de datos de la región. Asegúrese de que la integración de Tablas de S3 esté habilitada en la cuenta y región de AWS.

## Cómo agregar una base de datos al catálogo de Tablas de S3
<a name="add-database-s3-tables-catalog"></a>

### Cómo agregar una base de datos (consola)
<a name="add-database-s3-tables-console"></a>

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

1. En el panel de navegación de la izquierda, elija **Bases de datos**.

1. Elija **Agregar una base de datos**.

1. Seleccione **Base de datos de Glue en el catálogo federado de Tablas de S3**.

1. Ingrese un nombre único para la base de datos.

1. Seleccione el catálogo de destino que se asigna a un bucket de tablas en Tablas de S3.

1. Elija **Create Database (Crear base de datos)**.

### Cómo agregar una base de datos (AWS CLI)
<a name="add-database-s3-tables-cli"></a>

```
aws glue create-database \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-input '{"Name": "my-database"}'
```

## Cómo agregar una tabla al catálogo de Tablas de S3
<a name="add-table-s3-tables-catalog"></a>

### Cómo agregar una tabla (consola)
<a name="add-table-s3-tables-console"></a>

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

1. En el panel de navegación izquierdo, elija **Tables (Tablas)**.

1. Seleccione el catálogo de Tablas de S3 correspondiente en el menú desplegable de catálogos.

1. Elija **Agregar tabla**.

1. Ingrese un nombre único para la tabla.

1. Confirme que el catálogo de Tablas de S3 correcto esté seleccionado en el menú desplegable de catálogos.

1. Seleccione la base de datos en el menú desplegable de bases de datos.

1. Para ingresar el esquema de la tabla, proporcione un JSON o agregue cada columna de forma individual.

1. Seleccione **Create table (Creación de tabla)**.

### Cómo agregar una tabla (AWS CLI)
<a name="add-table-s3-tables-cli"></a>

```
aws glue create-table \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-name "my-database" \
  --table-input '{
    "Name": "my-table",
    "Parameters": {
      "classification": "",
      "format": "ICEBERG"
    },
    "StorageDescriptor": {
      "Columns": [
        {"Name": "id", "Type": "int", "Parameters": {}},
        {"Name": "val", "Type": "string", "Parameters": {}}
      ]
    }
  }'
```

# Cómo compartir objetos del catálogo de Tablas de S3
<a name="share-s3-tables-catalog"></a>

Al utilizar el control de acceso de IAM, puede compartir objetos del catálogo de Tablas de S3 con otros usuarios mediante enlaces de recursos de AWS Glue para compartir dentro de la misma cuenta. Para el uso compartido entre cuentas, puede compartir buckets de tablas de S3 con otra cuenta de AWS, y el rol o usuario de IAM en la cuenta receptora puede crear un objeto de catálogo de AWS Glue por medio del bucket de tabla compartido.

## Cómo compartir dentro de la misma cuenta mediante enlaces de recursos
<a name="share-s3-tables-resource-links"></a>

Los enlaces de recursos permiten crear referencias a bases de datos y tablas de AWS Glue en `s3tablescatalog` que aparecen en el catálogo predeterminado de AWS Glue. Esto resulta útil para organizar el acceso a los datos o crear agrupaciones lógicas de tablas.

### Cómo crear un enlace de recurso (consola)
<a name="share-s3-tables-resource-link-console"></a>

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, seleccione **Catálogos**.

1. En la lista **Catálogos**, seleccione **s3tablescatalog**.

1. Seleccione la tabla que desea compartir desde `s3tablescatalog`.

1. Seleccione **Acciones** y luego **Crear enlace de recurso**.

1. En **Nombre del enlace de recurso**, ingrese un nombre para el enlace de recurso.

1. En **Base de datos de destino**, seleccione la base de datos donde desea crear el enlace de recurso.

1. (Opcional) En **Description (Descripción)**, introduzca una descripción.

1. Seleccione **Crear**.

El enlace de recurso aparece en la base de datos de destino y apunta a la tabla original en `s3tablescatalog`.

### Cómo crear enlaces de recursos (AWS CLI)
<a name="share-s3-tables-resource-link-cli"></a>

Crear un enlace de recurso de base de datos:

```
aws glue create-database \
  --database-name "my-database-resource-link" \
  --database-input '{
    "Name": "sales_data_link",
    "TargetDatabase": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales"
    }
  }'
```

Crear un enlace de recurso de tabla:

```
aws glue create-table \
  --table-name "my-table-resource-link" \
  --table-input '{
    "Name": "sales_data_link",
    "TargetTable": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales",
      "Name": "transactions"
    }
  }'
```

# Administración de la integración de Tablas de S3
<a name="manage-s3-tables-catalog-integration"></a>

## Habilitar: . AWS Lake Formation
<a name="manage-s3-tables-enable-lf"></a>

Puede habilitar AWS Lake Formation para el catálogo de Tablas de S3 cuando desee escalar los requisitos de gobernanza de datos. AWS Lake Formation ofrece concesiones al estilo de bases de datos para administrar el acceso detallado, escalar permisos mediante acceso basado en etiquetas y otorgar permisos según atributos de usuario, como asociaciones a grupos, a las tablas en Tablas de S3.

Vaya a la consola de administración de AWS Lake Formation para habilitar AWS Lake Formation en el catálogo de Tablas de S3 en AWS Glue. Para obtener más información, consulte [Creación de un catálogo de Tablas de S3](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html) en la *Guía para desarrolladores de AWS Lake Formation*.

## Eliminación de la integración de Tablas de S3
<a name="manage-s3-tables-delete-integration"></a>

Para eliminar la integración de Tablas de S3, elimine la integración del catálogo en el Catálogo de datos. Esta operación solo elimina los metadatos en el Catálogo de datos y no los recursos en Tablas de S3.

Asegúrese de contar con los permisos necesarios para enumerar, editar y eliminar objetos del catálogo en AWS Glue.

### Eliminación de la integración (consola)
<a name="delete-s3-tables-console"></a>

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

1. En el panel de navegación, seleccione **Catálogos**.

1. En la lista **Catálogos**, seleccione **s3tablescatalog**.

1. Elija **Eliminar**.

1. Confirme que al eliminar el catálogo también se eliminan todos los objetos asociados del catálogo en el Catálogo de datos.

1. Elija **Eliminar**.

### Eliminación de la integración (AWS CLI)
<a name="delete-s3-tables-cli"></a>

```
aws glue delete-catalog \
  --region region \
  --catalog-id "s3tablescatalog"
```

# Integración con otros servicios de AWS
<a name="populate-dc-other-services"></a>

 Si bien puede usar los Rastreador de AWS Glue para completar el AWS Glue Data Catalog, hay varios servicios de AWS que pueden integrarse con el catálogo y completarlo automáticamente. En las siguientes secciones se proporciona más información sobre los casos de uso específicos compatibles con los servicios de AWS que pueden completar el Catálogo de datos. 

**Topics**
+ [AWS Lake Formation](#lf-dc)
+ [Amazon Athena](#ate-dc)

## AWS Lake Formation
<a name="lf-dc"></a>

 AWS Lake Formation es un servicio que facilita la configuración de un lago de datos seguro en AWS. Lake Formation se basa en AWS Glue, y ambos comparten el mismo AWS Glue Data Catalog. Puede registrar la ubicación de sus datos de Amazon S3 con Lake Formation y usar la consola de Lake Formation para crear bases de datos y tablas en el Catálogo de datos de AWS Glue, definir políticas de acceso a los datos y auditar el acceso a estos en todo su lago de datos desde un solo lugar. Puede utilizar el control de acceso detallado de Lake Formation para gestionar los recursos del Catálogo de datos existentes y las ubicaciones de datos de Amazon S3. 

Si registra los datos con Lake Formation, puede compartir de forma segura los recursos del Catálogo de datos entre las entidades principales de IAM, cuentas de AWS, organizaciones de AWS y unidades organizativas.

 Para obtener más información sobre cómo crear recursos en el Catálogo de datos con Lake Formation, consulte [Creación de tablas y bases de datos del Catálogo de datos](https://docs.aws.amazon.com/lake-formation/latest/dg/populating-catalog.html) en la Guía para desarrolladores de AWS Lake Formation. 

## Amazon Athena
<a name="ate-dc"></a>

 Amazon Athena usa el Catálogo de datos para almacenar y recuperar metadatos de tablas para los datos de Amazon S3 en su cuenta de AWS. Los metadatos de la tabla permiten al motor de consultas de Athena saber cómo buscar, leer y procesar los datos que desea consultar.

 Para completar el AWS Glue Data Catalog, puede usar directamente las instrucciones de Athena para `CREATE TABLE`. Puede definir y completar manualmente los metadatos del esquema y la partición en el Catálogo de datos sin necesidad de ejecutar un rastreador. 

1. En la consola de Athena, cree una base de datos que almacene los metadatos de la tabla en el Catálogo de datos.

1. Use la instrucción `CREATE EXTERNAL TABLE` para definir el esquema del origen de datos.

1. Use la cláusula `PARTITIONED BY` para definir las claves de partición si sus datos están particionados.

1. Use la cláusula `LOCATION` para especificar la ruta de Amazon S3 en la que se almacenan sus archivos de datos reales. 

1. Ejecute la instrucción `CREATE TABLE`.

    Esta consulta crea los metadatos de la tabla en el Catálogo de datos en función del esquema y las particiones definidos sin rastrear realmente los datos. 

Puede consultar la tabla en Athena, que utilizará los metadatos del Catálogo de datos para acceder a sus archivos de datos en Amazon S3 y consultarlos. 

 Para obtener más información, consulte [Creación de bases de datos y tablas](https://docs.aws.amazon.com/athena/latest/ug/work-with-data.html) en la Guía del usuario de Amazon Athena. 

# Configuración del Catálogo de datos
<a name="console-data-catalog-settings"></a>

 La configuración del Catálogo de datos contiene opciones para establecer las opciones de encriptación y permisos para este en su cuenta. 

![\[La captura de pantalla muestra el modal de configuración del Catálogo de Datos.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/data_catalog_settings.png)


**Para cambiar el control de acceso detallado del Catálogo de datos**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1.  Elija una opción de cifrado. 
   +  **Cifrado de metadatos**: seleccione esta casilla para cifrar los metadatos en el Catálogo de datos. Los metadatos se cifrarán en reposo con la clave AWS Key Management Service (AWS KMS) que especifique. Para obtener más información, consulte [Cifrado del Catálogo de datos](encrypt-glue-data-catalog.md). 
   +  **Cifrado de contraseñas de conexión**: active esta casilla para cifrar las contraseñas en el objeto de conexión de AWS Glue cuando se cree o se actualice la conexión. Las contraseñas se cifran utilizando la clave de AWS KMS que especifique. Cuando se devuelven las contraseñas, se cifran. Esta opción es una configuración global para todas las conexiones de AWS Glue en el Catálogo de datos. Si desactiva esta casilla, las contraseñas cifradas anteriormente permanecen cifradas con la clave que se usó al crearlas o actualizarlas. Para obtener más información acerca de las conexiones de AWS Glue, consulte [Conexión a datos](glue-connections.md). 

     Al habilitar esta opción, elija una clave de AWS KMS o elija **Enter a key ARN (Escribir un ARN de clave)** y proporcione el nombre de recurso de Amazon (ARN) de la clave. Escriba el ARN con la forma ` arn:aws:kms:region:account-id:key/key-id `. También puede proporcionar el ARN como un alias de clave, como ` arn:aws:kms:region:account-id:alias/alias-name `. 
**importante**  
 Si se selecciona esta opción, cualquier usuario o rol que cree o actualice una conexión debe tener permiso de `kms:Encrypt` en la clave KMS especificada. 

     Para obtener más información, consulte [Cifrado de las contraseñas de conexión](encrypt-connection-passwords.md).

1.  Elija **Settings (Configuración)**, y luego en el editor de **Permissions (Permisos)**, agregue la instrucción de política para cambiar el control de acceso detallado del Catálogo de datos para su cuenta. Solo se puede asociar una política al Catálogo de datos a la vez. Puede pegar una política de recursos JSON en este control. Para obtener más información, consulte [Políticas basadas en recursos de AWS Glue](security_iam_service-with-iam.md#security_iam_service-with-iam-resource-based-policies). 

1.  Elija **Save (Guardar)** para actualizar el Catálogo de datos con los cambios que haya realizado. 

 También puede utilizar operaciones de la API de AWS Glue para colocar, obtener y eliminar políticas de recursos. Para obtener más información, consulte [API de seguridad en AWS Glue](aws-glue-api-jobs-security.md). 

# Cómo completar y administrar las tablas transaccionales
<a name="populate-otf"></a>

[Apache Iceberg](https://iceberg.apache.org/), [Apache Hudi](https://hudi.incubator.apache.org/) y Linux Foundation [Delta Lake](https://delta.io/) son formatos de tablas de código abierto diseñados para gestionar cargas de trabajo de análisis de datos y lagos de datos a gran escala en Apache Spark. 

Puede completar las tablas de Iceberg, Hudi y Delta Lake en el AWS Glue Data Catalog mediante los siguientes métodos: 
+ Rastreador de AWS Glue: Los Rastreador de AWS Glue pueden detectar y completar automáticamente los metadatos de las tablas de Iceberg, Hudi y Delta Lake en el Catálogo de datos. Para obtener más información, consulte [Uso de rastreadores para completar el Catálogo de datos](add-crawler.md).
+ Trabajos de ETL de AWS Glue: Puede crear trabajos de ETL para escribir datos en las tablas de Iceberg, Hudi y Delta Lake, y completar sus metadatos en el Catálogo de datos. Para obtener más información, consulte [Uso de marcos de lagos de datos con trabajos de ETL de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-datalake-native-frameworks.html).
+ Consola de AWS Glue, consola de AWS Lake Formation, AWS CLI o API: Puede usar la consola de AWS Glue, la consola de Lake Formation o API para crear y administrar las definiciones de las tablas de Iceberg en el Catálogo de datos.

**Topics**
+ [Creación de tablas de Apache Iceberg](#creating-iceberg-tables)
+ [Optimización de las tablas de Iceberg](table-optimizers.md)
+ [Optimización del rendimiento de las consultas en tablas de Iceberg](iceberg-column-statistics.md)

## Creación de tablas de Apache Iceberg
<a name="creating-iceberg-tables"></a>

Puede crear tablas de Apache Iceberg que utilicen el formato de datos de Apache Parquet en el AWS Glue Data Catalog con datos que residan en Amazon S3. Una tabla en el Catálogo de datos es la definición de metadatos que representa los datos en un almacén de datos. AWS Glue crea tablas de Iceberg v2 de forma predeterminada. Para ver la diferencia entre las tablas v1 y v2, consulte [Cambios de versión de formato](https://iceberg.apache.org/spec/#appendix-e-format-version-changes) en la documentación de Apache Iceberg.

 [Apache Iceberg](https://iceberg.apache.org/) es un formato de tabla abierto para conjuntos de datos analíticos muy grandes. Iceberg permite modificar fácilmente su esquema, o evolución del esquema, de manera que los usuarios pueden añadir, renombrar o eliminar columnas de una tabla de datos sin alterar los datos subyacentes. Iceberg también ofrece compatibilidad con el control de versiones de datos, que permite a los usuarios hacer un seguimiento de los cambios en los datos a lo largo del tiempo. Esto habilita la característica de viaje en el tiempo, con la que los usuarios pueden acceder a versiones históricas de los datos y consultarlas, así como analizar los cambios en los datos entre actualizaciones y eliminaciones.

Puede usar la consola de AWS Glue o de Lake Formation, o bien la operación `CreateTable` en la API de AWS Glue, para crear una tabla de Iceberg en el Catálogo de datos. Para obtener más información, consulte la [acción CreateTable (Python: create\$1table](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-CreateTable)).

Cuando cree una tabla de Iceberg en el Catálogo de datos, deberá especificar el formato de la tabla y la ruta del archivo de metadatos en Amazon S3 para poder hacer lecturas y escrituras.

 Puede utilizar Lake Formation para asegurar su tabla de Iceberg utilizando permisos de control de acceso específicos cuando registre la ubicación de datos de Amazon S3 con AWS Lake Formation. Para los datos de origen en Amazon S3 y los metadatos que no están registrados en Lake Formation, el acceso se determina mediante las políticas de permisos de IAM para Amazon S3 y acciones de AWS Glue. Para obtener más información, consulte [Administración de permisos](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-permissions.html). 

**nota**  
El Catálogo de datos no admite la creación de particiones ni la adición de propiedades de tablas de iceberg.

### Requisitos previos
<a name="iceberg-prerequisites"></a>

 Para crear tablas de Iceberg en el Catálogo de datos y configurar los permisos de acceso a los datos de Lake Formation, debe cumplir los siguientes requisitos: 

1. 

**Se requieren permisos para crear tablas de Iceberg sin datos registrados en Lake Formation.**

   Además de los permisos necesarios para crear una tabla en el Catálogo de datos, el creador de la tabla requiere los siguientes permisos:
   + `s3:PutObject` en el recurso arn:aws:s3:::\$1bucketName\$1
   + `s3:GetObject` en el recurso arn:aws:s3:::\$1bucketName\$1
   + `s3:DeleteObject` en el recurso arn:aws:s3:::\$1bucketName\$1

1. 

**Se requieren permisos para crear tablas de Iceberg con datos registrados en Lake Formation:**

   Para utilizar Lake Formation para administrar y asegurar los datos de su lago de datos, registre su ubicación de Amazon S3 que tiene los datos de las tablas con Lake Formation. De este modo, Lake Formation puede expedir credenciales a servicios analíticos de AWS como Athena, Redshift Spectrum y Amazon EMR para acceder a los datos. Para obtener más información sobre el registro de una ubicación de Amazon S3, consulte [Cómo añadir una ubicación de Amazon S3 a su lago de datos](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html). 

   Una entidad principal que lee y escribe los datos subyacentes que están registrados en Lake Formation requiere los siguientes permisos:
   + `lakeformation:GetDataAccess`
   + `DATA_LOCATION_ACCESS`

     Una entidad principal que tiene permisos de localización de datos en una localización también tiene permisos de localización en todas las ubicaciones secundarias.

     Para obtener más información sobre los permisos de ubicación de datos, consulte [Control de acceso a los datos subyacentes](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-underlying-data.html#data-location-permissions).

 Para habilitar la compactación, el servicio debe asumir un rol de IAM que tenga permisos para actualizar las tablas del Catálogo de datos. Para obtener más información, consulte [Requisitos previos para la optimización de tablas](optimization-prerequisites.md) 

### Creación de tablas de Iceberg
<a name="create-iceberg-table"></a>

Puede crear tablas de Iceberg v1 y v2 con la consola de AWS Glue o de Lake Formation, o bien con la AWS Command Line Interface, tal como se documenta en esta página. También puede crear tablas de Iceberg con el Rastreador de AWS Glue. Para más información, consulte [Catálogo de datos y rastreadores](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html) en la Guía para desarrolladores de AWS Glue.

**Creación de una tabla de Iceberg**

------
#### [ Console ]

1. Inicie sesión en Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. En Catálogo de datos, seleccione **Tablas** y utilice el botón **Crear tabla** para especificar los siguientes atributos:
   + **Nombre de la tabla:** Ingrese el nombre de la tabla. Si utiliza Athena para acceder a las tablas, utilice los [consejos para nombres](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html) recogidos en la Guía del usuario de Amazon Athena.
   + **Base de datos:** Seleccione una base de datos existente o cree una nueva.
   + **Descripción:** Descripción de la tabla. Puede escribir una descripción para ayudarle a entender el contenido de la tabla.
   + **Formato de la tabla:** En **Formato de la tabla**, seleccione Apache Iceberg.
   + **Activar la compactación:** Seleccione **Activar la compactación** para compactar los objetos pequeños de Amazon S3 de la tabla de modo que formen objetos más grandes.
   + **Rol de IAM:** para ejecutar la compactación, el servicio asume un rol de IAM en su nombre. Puede elegir un rol de IAM mediante el menú desplegable. Asegúrese de que el rol tenga los permisos necesarios para habilitar la compactación.

     Para obtener más información sobre los permisos necesarios, consulte [Requisitos previos para la optimización de tablas](optimization-prerequisites.md).
   + **Ubicación:** Especifique la ruta a la carpeta en Amazon S3 que almacena la tabla de metadatos. Iceberg necesita un archivo de metadatos y una ubicación en el Catálogo de datos para poder hacer lecturas y escrituras.
   + **Esquema:** Seleccione **Agregar columnas** para añadir columnas y los tipos de datos de las columnas. Tiene la opción de crear una tabla vacía y actualizar el esquema más adelante. El Catálogo de datos admite los tipos de datos de Hive. Para obtener más información, consulte [Tipos de datos de Hive](https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=27838462#content/view/27838462). 

      Con Iceberg podrá desarrollar el esquema y la partición después de crear la tabla. Puede utilizar [consultas de Athena](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-evolving-table-schema.html) para actualizar el esquema de la tabla y [consultas de Spark](https://iceberg.apache.org/docs/latest/spark-ddl/#alter-table-sql-extensions) para actualizar las particiones. 

------
#### [ AWS CLI ]

```
aws glue create-table \
    --database-name iceberg-db \
    --region us-west-2 \
    --open-table-format-input '{
      "IcebergInput": { 
           "MetadataOperation": "CREATE",
           "Version": "2"
         }
      }' \
    --table-input '{"Name":"test-iceberg-input-demo",
            "TableType": "EXTERNAL_TABLE",
            "StorageDescriptor":{ 
               "Columns":[ 
                   {"Name":"col1", "Type":"int"}, 
                   {"Name":"col2", "Type":"int"}, 
                   {"Name":"col3", "Type":"string"}
                ], 
               "Location":"s3://DOC_EXAMPLE_BUCKET_ICEBERG/"
            }
        }'
```

------

**Topics**
+ [Requisitos previos](#iceberg-prerequisites)
+ [Creación de tablas de Iceberg](#create-iceberg-table)

# Optimización de las tablas de Iceberg
<a name="table-optimizers"></a>

AWS Glue admite varias opciones de optimización de tablas que mejoran la administración y el rendimiento de las tablas de Apache Iceberg utilizadas por los motores analíticos de AWS y los trabajos de ETL. Estos optimizadores ofrecen un uso eficiente del almacenamiento, un rendimiento mejorado de las consultas y la administración efectiva de los datos. Existen tres tipos de optimizadores de tablas disponibles en AWS Glue: 
+ **Compactación**: la compactación de datos compacta archivos de datos pequeños para reducir el uso del almacenamiento y mejorar el rendimiento de lectura. Los archivos de datos se combinan y se reescriben para eliminar los datos obsoletos y consolidar los datos fragmentados en archivos más grandes y eficientes. Puede configurar la compactación para que se ejecute de forma automática. 

  Binpack es la estrategia de compactación predeterminada que utiliza Apache Iceberg. Combina archivos de datos más pequeños en otros de mayor tamaño para mejorar el rendimiento. La compactación también admite las estrategias de ordenación y orden Z, que agrupan datos similares. La ordenación organiza los datos según columnas especificadas y mejora el rendimiento de las consultas en operaciones que aplican filtros. El orden Z crea conjuntos de datos ordenados que mejoran el rendimiento de las consultas cuando se consultan varias columnas al mismo tiempo. Las tres estrategias de compactación (binpack, ordenación y orden Z) reducen la cantidad de datos que escanean los motores de consultas, lo que a su vez disminuye los costos de procesamiento de las consultas.
+ **Retención de instantáneas**: las instantáneas son versiones con fecha y hora de una tabla de Iceberg. Las configuraciones de retención de instantáneas permiten a los clientes determinar cuánto tiempo se deben retener las instantáneas y cuántas instantáneas retener. La configuración de un optimizador de retención de instantáneas puede ayudar a administrar la sobrecarga de almacenamiento mediante la eliminación de las instantáneas antiguas e innecesarias y sus correspondientes archivos subyacentes.
+ **Eliminación de archivos huérfanos**: los archivos huérfanos son archivos a los que los metadatos de la tabla de Iceberg ya no hacen referencia. Con el tiempo, estos archivos se pueden acumular, sobre todo después de operaciones como la eliminación de tablas o los errores en los trabajos de ETL. Habilitar la eliminación de archivos huérfanos permite a AWS Glue identificar y eliminar periódicamente estos archivos innecesarios y así liberar espacio de almacenamiento.

La configuración de la optimización a nivel de catálogo está disponible a través de la consola de Lake Formation y mediante el uso de la operación de la API `UpdateCatalog` de AWS Glue. Puede activar o desactivar la compactación, la retención de instantáneas y la eliminación de archivos huérfanos para tablas de Iceberg individuales en el Catálogo de datos mediante la consola de AWS Glue, la AWS CLI o las operaciones de la API de AWS Glue. 

 En el siguiente video se muestra cómo configurar optimizadores para tablas de Iceberg en el Catálogo de datos. 

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/xOXE7AS-pNA?si=lKvt_TSlPkoc6OXn/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/xOXE7AS-pNA?si=lKvt_TSlPkoc6OXn)


**Topics**
+ [Requisitos previos para la optimización de tablas](optimization-prerequisites.md)
+ [Optimizadores de tablas a nivel de catálogo](catalog-level-optimizers.md)
+ [Optimización de la compactación](compaction-management.md)
+ [Optimización de retención de instantáneas](snapshot-retention-management.md)
+ [Eliminación de archivos huérfanos](orphan-file-deletion.md)
+ [Visualización de los detalles de la optimización](view-optimization-status.md)
+ [Visualización de métricas de Amazon CloudWatch](view-optimization-metrics.md)
+ [Eliminar un optimizador](delete-optimizer.md)
+ [Consideraciones y limitaciones](optimizer-notes.md)
+ [Regiones compatibles con los optimizadores de tablas](regions-optimizers.md)

# Requisitos previos para la optimización de tablas
<a name="optimization-prerequisites"></a>

El optimizador de tablas asume los permisos del rol de AWS Identity and Access Management (IAM) que especifica al habilitar las opciones de optimización (compactación, retención de instantáneas y eliminación de archivos huérfanos) de una tabla. Puede crear un único rol para todos los optimizadores o crear roles separados para cada optimizador.

**nota**  
El optimizador de eliminación de archivos huérfanos no requiere los permisos `glue:updateTable` o `s3:putObject`. Los optimizadores de compactación y caducidad de las instantáneas requieren el mismo conjunto de permisos.

El rol de IAM debe tener los permisos para leer los datos y actualizar los metadatos en el catálogo de datos. Cree un rol de IAM y adjunte las siguientes políticas integradas:
+ Agregue la siguiente política insertada que conceda a Amazon S3 permisos de lectura y escritura en la ubicación para los datos en los que no estén registrados con AWS Lake Formation. Esta política también incluye permisos para actualizar la tabla en el catálogo de datos y permitir que AWS Glue agregue registros en los registros Amazon CloudWatch y publicar métricas. Para los datos de origen en Amazon S3 que no estén registrados en Lake Formation, el acceso se determina mediante las políticas de permisos de IAM para Amazon S3 y acciones de AWS Glue. 

  En las siguientes políticas en línea, sustituya `bucket-name` por el nombre de su bucket de Amazon S3, `aws-account-id` y `region` por un número de cuenta y región del catálogo de datos de AWS válidos, `database_name` por el nombre de su base de datos y `table_name` por el nombre de la tabla.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:DeleteObject"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket/*"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "glue:UpdateTable",
                  "glue:GetTable"
              ],
              "Resource": [
                  "arn:aws:glue:us-east-1:111122223333:table/<database-name>/<table-name>",
                  "arn:aws:glue:us-east-1:111122223333:database/<database-name>",
                  "arn:aws:glue:us-east-1:111122223333:catalog"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogGroup",
                  "logs:CreateLogStream",
                  "logs:PutLogEvents"
              ],
              "Resource": [
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-compaction/logs:*",
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-retention/logs:*",
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-orphan-file-deletion/logs:*"
              ]
          }
      ]
  }
  ```

------
+ Utilice la siguiente política para habilitar la compactación de los datos registrados en Lake Formation. 

  Si el rol de optimización no tiene permisos de grupo `IAM_ALLOWED_PRINCIPALS` otorgados en la tabla, el rol requiere los permisos de Lake Formation `ALTER`, `DESCRIBE`, `INSERT` y `DELETE` de la tabla. 

  Para obtener más información sobre cómo registrar un bucket de Amazon S3 con Lake Formation, consulte [Cómo añadir una ubicación de Amazon S3 a su lago de datos](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html).

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "lakeformation:GetDataAccess"
        ],
        "Resource": "*"
      },
      {
        "Effect": "Allow",
        "Action": [
          "glue:UpdateTable",
          "glue:GetTable"
        ],
        "Resource": [
          "arn:aws:glue:us-east-1:111122223333:table/databaseName/tableName",
          "arn:aws:glue:us-east-1:111122223333:database/databaseName",
          "arn:aws:glue:us-east-1:111122223333:catalog"
        ]
      },
      {
        "Effect": "Allow",
        "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
        ],
        "Resource": [
          "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-compaction/logs:*",
          "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-retention/logs:*",
          "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-orphan-file-deletion/logs:*"
        ]
      }
    ]
  }
  ```

------
+ (Opcional) Para optimizar tablas de Iceberg con datos de buckets de Amazon S3 cifrados mediante [cifrado del servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html), el rol de compactación requiere permisos para descifrar los objetos de Amazon S3 y generar una nueva clave de datos para escribir los objetos en los buckets cifrados. Agregue la siguiente política a la clave de AWS KMS deseada. Solo admitimos el cifrado a nivel de bucket.

  ```
  {
      "Effect": "Allow",
      "Principal": {
          "AWS": "arn:aws:iam::<aws-account-id>:role/<optimizer-role-name>"
      },
      "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
      ],
      "Resource": "*"
  }
  ```
+  (Opcional) Para la ubicación de datos registrada en Lake Formation, el rol utilizado para registrar la ubicación requiere permisos para descifrar los objetos de Amazon S3 y generar una nueva clave de datos para escribir los objetos en los buckets cifrados. Para obtener más información, consulte [Registro de una ubicación de Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-encrypted.html). 
+ (Opcional) Si la clave AWS KMS está almacenada en una cuenta AWS diferente, debe incluir los siguientes permisos para el rol de compactación.

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
        ],
        "Resource": [
          "arn:aws:kms:us-east-1:111122223333:key/key-id"
        ]
      }
    ]
  }
  ```

------
+  El rol que utilice para ejecutar la compactación debe tener el permiso `iam:PassRole` correspondiente al rol. 

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iam:PassRole"
        ],
        "Resource": [
          "arn:aws:iam::111122223333:role/<optimizer-role-name>"
        ]
      }
    ]
  }
  ```

------
+ Agregue la siguiente política de confianza al rol para que el servicio AWS Glue asuma el rol de IAM para ejecutar el proceso de compactación.

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "",
        "Effect": "Allow",
        "Principal": {
          "Service": "glue.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }
    ]
  }
  ```

------
+ <a name="catalog-optimizer-requirement"></a> (Opcional) Para actualizar la configuración del Catálogo de datos y así poder habilitar las optimizaciones a nivel de catálogo, el rol de IAM que se utiliza debe tener el permiso `glue:UpdateCatalog` o el permiso `ALTER CATALOG` de AWS Lake Formation en el catálogo raíz. Puede utilizar la API `GetCatalog` para verificar las propiedades del catálogo. 

# Optimizadores de tablas a nivel de catálogo
<a name="catalog-level-optimizers"></a>

Con una configuración de catálogo única, puede configurar optimizadores automáticos como la compactación, la retención de instantáneas y la eliminación de archivos huérfanos para todas las tablas de Apache Iceberg nuevas y actualizadas en el AWS Glue Data Catalog. Las configuraciones de los optimizadores a nivel de catálogo le permiten aplicar la misma configuración de optimización en todas las tablas de un catálogo, lo que elimina la necesidad de configurar los optimizadores individualmente para cada tabla.

Para configurar los optimizadores de tablas, los administradores de lagos de datos pueden seleccionar el catálogo predeterminado en la consola de Lake Formation y habilitar los optimizadores mediante la opción `Table optimization`. Al crear tablas nuevas o actualizar las tablas existentes en el Catálogo de datos, el Catálogo de datos ejecuta automáticamente las optimizaciones de las tablas para reducir la carga operativa.

Si configuró la optimización a nivel de la tabla o si eliminó previamente la configuración de optimización de una tabla, esa configuración específica de cada tabla tendrá prioridad sobre la configuración predeterminada del catálogo para la optimización de tablas. Si un parámetro de configuración no está definido ni a nivel de tabla ni de catálogo, se aplicará el valor de la propiedad de la tabla de Iceberg. Esta configuración se aplica al optimizador de retención de instantáneas y eliminación de archivos huérfanos.

Cuando habilite los optimizadores a nivel del catálogo, tenga en cuenta lo siguiente:
+ Si configura los ajustes de optimización cuando crea el catálogo y, posteriormente, deshabilita las optimizaciones mediante una solicitud de actualización del catálogo, la operación se extenderá en cascada a todas las tablas del catálogo.
+ Si ya ha configurado optimizadores para una tabla determinada, la operación de deshabilitación a nivel de catálogo no afectará esta tabla.
+ Si deshabilita los optimizadores a nivel de catálogo, las tablas con configuraciones de optimización existentes mantendrán sus ajustes específicos y no se verán afectadas por el cambio a nivel de catálogo. Sin embargo, las tablas que no tengan sus propias configuraciones de optimización heredarán el estado deshabilitado del nivel de catálogo.
+ Como los optimizadores para la retención de instantáneas y la eliminación de archivos huérfanos pueden basarse en una programación, las actualizaciones introducirán un retraso al azar en el inicio de su programación. Esto hará que cada optimizador se inicie en momentos ligeramente diferentes, lo que distribuirá la carga y reducirá la probabilidad de superar los límites de servicio.
+ La configuración del optimizador a nivel de catálogo no se hereda automáticamente en las tablas cuando el cifrado de AWS Glue Data Catalog está habilitado. Si el catálogo tiene habilitado el cifrado de metadatos, debe configurar los optimizadores de tabla de forma individual para cada tabla. Para utilizar la herencia de optimizadores a nivel de catálogo, el cifrado de metadatos debe estar desactivado en el catálogo.

**Topics**
+ [Habilitación de la optimización automática de tablas a nivel de catálogo](enable-auto-table-optimizers.md)
+ [Visualización de optimizaciones a nivel de catálogo](view-catalog-optimizations.md)
+ [Cómo deshabilitar la optimización de tablas a nivel de catálogo](disable-auto-table-optimizers.md)

# Habilitación de la optimización automática de tablas a nivel de catálogo
<a name="enable-auto-table-optimizers"></a>

 Puede habilitar la optimización automática de tablas para todas las tablas nuevas de Apache Iceberg en el Catálogo de datos. Tras crear la tabla, también puede actualizar de forma explícita y manual la configuración de la optimización de las tablas. 

 Para actualizar la configuración del Catálogo de datos y así poder habilitar las optimizaciones a nivel de catálogo, el rol de IAM que utiliza debe tener el permiso `glue:UpdateCatalog` en el catálogo raíz. Puede utilizar la API `GetCatalog` para verificar las propiedades del catálogo. 

 En el caso de las tablas gestionadas por Lake Formation, el rol de IAM seleccionado durante la configuración de la optimización del catálogo requiere los permisos `ALTER`, `DESCRIBE`, `INSERT`, y `DELETE` de Lake Formation para cualquier tabla nueva o actualizada. 

## Para habilitar los optimizadores a nivel de catálogo (consola)
<a name="enable-catalog-optimizers-console"></a>

1. Abra la consola de Lake Formation en [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

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

1. Seleccione la pestaña **Catálogos**.

1. Elija el catálogo a nivel de la cuenta.

1. Seleccione **Optimizaciones de tablas** y **Editar** en la pestaña **Optimizaciones de tablas**. También puede seleccionar **Editar optimizaciones** en **Acciones**.  
![\[La captura de pantalla muestra la opción de edición para habilitar las optimizaciones a nivel de catálogo.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/catalog-edit-optimizations.png)

1. En la página **Optimizaciones de tablas**, configure las siguientes opciones:  
![\[La captura de pantalla muestra las opciones de optimización a nivel de catálogo.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/catalog-optimization-options.png)

   1. Configure los ajustes de **Compactación**:
      + Habilite/deshabilite la compactación.
      + Elija el rol de IAM que tenga los permisos necesarios para ejecutar los optimizadores.

        Para obtener más información sobre los permisos necesarios para el rol de IAM, consulte [Requisitos previos para la optimización de tablas](optimization-prerequisites.md).

   1. Configure los ajustes de **Retención de instantáneas**:
      + Habilite/deshabilite la retención.
      + Establezca el período de retención de instantáneas en días; el valor predeterminado es de 5 días.
      + Establezca el número de instantáneas que se deben retener; el valor predeterminado es de 1 instantánea.
      + Habilite/deshabilite la limpieza de archivos caducados.

   1. Configure los ajustes de **Eliminación de archivos huérfanos**:
      + Habilite/deshabilite la eliminación de archivos huérfanos.
      + Establezca el período de retención de archivos huérfanos en días; el valor predeterminado es de 3 días.

1. Seleccione **Save**.

## Cómo habilitar los optimizadores a nivel de catálogo mediante AWS CLI
<a name="catalog-auto-optimizers-cli"></a>

Utilice el siguiente comando de la CLI para actualizar un catálogo existente con ajustes del optimizador:

**Example Actualice el catálogo con la configuración del optimizador**  

```
aws glue update-catalog \
   --name catalog-id \
  --catalog-input \
  '{
    "CatalogId": "111122223333",
    "CatalogInput": {
        "CatalogProperties": {
            "CustomProperties": {
                "ColumnStatistics.Enabled": "false",
                "ColumnStatistics.RoleArn": "arn:aws:iam::111122223333:role/service-role/stats-role-name"
            },
            "IcebergOptimizationProperties": {
                "RoleArn": "arn:aws:iam::111122223333:role/optimizer-role-name",
                "Compaction": {
                    "enabled": "true"
                },
                "Retention": {
                    "enabled": "true",
                    "snapshotRetentionPeriodInDays": "10",
                    "numberOfSnapshotsToRetain": "5",
                    "cleanExpiredFiles": "true"
                },
                "OrphanFileDeletion": {
                    "enabled": "true",
                    "orphanFileRetentionPeriodInDays": "3"
                }
            }
        }
    }
}'
```

Si tiene problemas con los optimizadores a nivel de catálogo, verifique lo siguiente:
+ Asegúrese de que el rol de IAM tenga los permisos correctos, tal como se describe en la sección Requisitos previos.
+ Revise los registros de CloudWatch para ver si hay algún mensaje de error relacionado con las operaciones del optimizador.

   Para obtener más información, consulte [Ver métricas disponibles](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html) en la *Guía del usuario de Amazon CloudWatch*. 
+ Compruebe que la configuración del catálogo se haya aplicado correctamente; para ello, verifique la configuración del catálogo.
+ En el caso de errores de acceso a las tablas, consulte los registros de CloudWatch y las notificaciones de EventBridge para obtener información detallada sobre los errores.

# Visualización de optimizaciones a nivel de catálogo
<a name="view-catalog-optimizations"></a>

 Cuando se habilita la optimización de tablas a nivel de catálogo, cada vez que se crea o actualiza una tabla de Apache Iceberg mediante las API `CreateTable` o `UpdateTable` a través de la Consola de administración de AWS, un SDK o la Rastreador de AWS Glue, se crea una configuración a nivel de tabla equivalente para esa tabla. 

 Después de crear o actualizar una tabla, puede verificar los detalles de esta para confirmar la optimización de tablas. `Table optimization` muestra el conjunto de propiedades `Configuration source` como `Catalog`. 

![\[Se aplicó una imagen de una tabla de Apache Iceberg con una configuración de optimización a nivel de catálogo.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/catalog-optimization-enabled.png)


# Cómo deshabilitar la optimización de tablas a nivel de catálogo
<a name="disable-auto-table-optimizers"></a>

 Puede deshabilitar la optimización de tablas para tablas nuevas mediante la consola de AWS Lake Formation, la API `glue:UpdateCatalog`. 

**Para deshabilitar las optimizaciones de las tablas a nivel de catálogo**

1. Abra la consola de Lake Formation en [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

1. En la barra de navegación izquierda, elija **Claves**.

1. En la página **Resumen del catálogo**, seleccione **Editar** en **Optimizaciones de tablas**.

1. En la página **Editar optimización**, anule la selección de **Opciones de optimización**.

1. Seleccione **Save**.

# Optimización de la compactación
<a name="compaction-management"></a>

 Los lagos de datos de Amazon S3 que utilizan formatos de tablas abiertos, como Apache Iceberg, almacenan los datos como objetos de S3. Tener miles de objetos pequeños de Amazon S3 en una tabla de lago de datos aumenta la sobrecarga de metadatos y afecta al rendimiento de lectura. AWS Glue Data Catalog proporciona una compactación administrada para tablas de Iceberg, que compacta objetos pequeños en otros más grandes para lograr un mejor rendimiento de lectura mediante servicios de análisis de AWS como Amazon Athena y Amazon EMR, así como trabajos de ETL de AWS Glue. El Catálogo de datos efectúa la compactación sin interferir en las consultas simultáneas y solo admite la compactación en tablas con formato Parquet. 

El optimizador de tablas supervisa continuamente las particiones de las tablas e inicia el proceso de compactación cuando se supera el límite de cantidad y tamaño de los archivos.

En el catálogo de datos, el proceso de compactación comienza cuando una tabla o cualquiera de sus particiones tiene más de 100 archivos. Cada archivo debe tener un tamaño inferior al 75 % del tamaño del archivo de destino. El tamaño del archivo de destino se define mediante la propiedad de tabla `write.target-file-size-bytes`, que por defecto es de 512 MB si no se establece explícitamente.

 Para conocer las limitaciones, consulte [Formatos compatibles y limitaciones de la compactación de datos administrada](optimizer-notes.md#compaction-notes). 

**Topics**
+ [Activación del optimizador de compactación](enable-compaction.md)
+ [Desactivación del optimizador de compactación](disable-compaction.md)

# Activación del optimizador de compactación
<a name="enable-compaction"></a>

 Puede usar la consola de AWS Glue, la AWS CLI o la API de AWS para activar la compactación de sus tablas de Apache Iceberg en el Catálogo de datos de AWS Glue. Para las tablas nuevas, puede elegir Apache Iceberg como formato de tabla y habilitar la compactación al crear la tabla. La compactación está deshabilitada de forma predeterminada para las tablas nuevas.

------
#### [ Console ]

**Habilitación de la compactación**

1.  Abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) e inicie sesión como administrador del lago de datos, creador de la tabla o usuario al que se le hayan concedido los permisos `glue:UpdateTable` y `lakeformation:GetDataAccess` de la tabla. 

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

1. En la página **Tablas**, elija una tabla en formato de tabla abierta para la que desee activar la compactación y, a continuación, en el menú **Acciones**, elija **Optimización** y, por último, **Activar**.

   Para activar la compactación, también puede seleccionar la pestaña **Optimización de la tabla** en la página **Detalles de la tabla**. Seleccione la pestaña **Optimización de tablas** en la sección inferior de la página y elija **Habilitar la compactación**. 

   La opción **Activar optimización** también está disponible al crear una nueva tabla de Iceberg en el Catálogo de datos.

1. En la página **Activar optimización**, seleccione **Compactación** en **Opciones de optimización**.  
![\[Página de detalles de la tabla de Apache Iceberg con la opción para habilitar la compactación.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/table-enable-compaction.png)

1. A continuación, seleccione un rol de IAM en el menú desplegable con los permisos que se muestran en la sección [Requisitos previos para la optimización de tablas](optimization-prerequisites.md). 

   También puede elegir la opción **Crear un nuevo rol de IAM** para crear un rol personalizado con los permisos necesarios para ejecutar la compactación.

    Siga los pasos que se indican a continuación para actualizar un rol de IAM existente: 

   1.  Para actualizar la política de permisos del rol de IAM, en la consola de IAM, vaya al rol de IAM que se está utilizando para ejecutar la compactación. 

   1.  En la sección **Agregar permisos**, seleccione Crear política. En la ventana del navegador que se acaba de abrir, cree una nueva política para utilizarla con su rol. 

   1. En la página Crear política, elija la pestaña `JSON`. Copie el código JSON que se muestra en la sección Requisitos previos en el campo del editor de políticas.

1. Si tiene configuraciones de políticas de seguridad en las que el optimizador de tablas de Iceberg necesita acceder a los buckets de Amazon S3 desde una nube privada virtual (VPC) específica, cree una conexión de red de AWS Glue o utilice una existente.

   Si aún no tiene configurada una conexión de VPC de AWS Glue, cree una nueva según los pasos de la sección [Creating connections for connectors](https://docs.aws.amazon.com/glue/latest/dg/creating-connections.html) mediante la consola de AWS Glue, la AWS CLI o los SDK.

1. Elija una estrategia de compactación. Las opciones disponibles son:
   + **Binpack**: Binpack es la estrategia de compactación predeterminada en Apache Iceberg. Combina archivos de datos más pequeños en otros de mayor tamaño para mejorar el rendimiento.
   + **Ordenar**: ordenar en Apache Iceberg es una técnica de organización de datos que agrupa en clústeres la información dentro de los archivos según columnas específicas, lo que mejora significativamente el rendimiento de las consultas al reducir la cantidad de archivos que se deben procesar. El orden de clasificación en los metadatos de Iceberg se establece mediante el campo de ordenación. Cuando se definen varias columnas, los datos se organizan según la secuencia en que estas aparecen, lo que permite almacenar juntos los registros con valores similares dentro de los archivos. La estrategia de compactación por ordenación lleva la optimización un paso más allá, ya que ordena los datos en todos los archivos dentro de una misma partición. 
   + **Orden Z**: el orden Z es una técnica de organización de datos útil cuando se requiere ordenarlos según varias columnas con igual importancia. A diferencia de la ordenación tradicional, que da prioridad a una columna sobre las demás, el orden Z asigna una ponderación equilibrada a cada columna, lo que permite al motor de consultas reducir la cantidad de archivos que debe leer al buscar datos.

     La técnica funciona al entrelazar los dígitos binarios de los valores de distintas columnas. Por ejemplo, si tiene los números 3 y 4 de dos columnas, el orden Z primero los convierte a binario (3 se convierte en 011 y 4 en 100) y luego entrelaza estos dígitos para generar un nuevo valor: 011010. Este entrelazado genera un patrón que mantiene los datos relacionados físicamente próximos entre sí.

     El orden Z resulta especialmente eficaz para consultas multidimensionales. Por ejemplo, una tabla de clientes ordenada en Z por ingresos, Estado y código postal puede ofrecer un rendimiento superior al de una ordenación jerárquica al ejecutar consultas en múltiples dimensiones. Esta organización permite que las consultas orientadas a combinaciones específicas de ingresos y ubicación geográfica localicen los datos relevantes con rapidez y, al mismo tiempo, reduzcan al mínimo los escaneos innecesarios de archivos.

1. **Archivos de entrada mínimos**: el número de archivos de datos necesarios en una partición para que se active la compactación.

1. **Límite de eliminación de archivos**: la cantidad mínima de operaciones de eliminación que debe contener un archivo de datos para que sea elegible para la compactación.

1. Seleccione **Habilitar la optimización**.

------
#### [ AWS CLI ]

 En el ejemplo siguiente se muestra cómo habilitar la compactación. Sustituya el ID de cuenta por un ID de cuenta de AWS válido. Sustituya el nombre de la base de datos y el nombre de la tabla por el nombre real de la tabla de Iceberg y el nombre de la base de datos. Sustituya el `roleArn` por el nombre de recurso de AWS (ARN) del rol de IAM y el nombre del rol de IAM que tiene los permisos necesarios para ejecutar la compactación. Puede reemplazar la estrategia de compactación de `sort` con otras estrategias compatibles, como `z-order` o `binpack`.

"orden" según sus requisitos.

```
aws glue create-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{
    "roleArn": "arn:aws:iam::123456789012:role/optimizer_role",
    "enabled": true,
    "vpcConfiguration": {"glueConnectionName": "glue_connection_name"},
    "compactionConfiguration": {
      "icebergConfiguration": {"strategy": "sort"}
    }
  }'\
--type compaction
```

------
#### [ AWS API ]

Llame a la operación [CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) para habilitar la compactación de una tabla.

------

Después de activar la compactación, la pestaña **Optimización de la tabla** muestra los siguientes detalles de compactación una vez finalizada la ejecución:

Hora de inicio  
Hora a la que se inició el proceso de compactación en el Catálogo de datos. El valor es una marca en la hora UTC. 

Hora de finalización  
Hora a la que terminó el proceso de compactación en el Catálogo de datos. El valor es una marca en la hora UTC. 

Status  
Estado del ciclo de compactación. Los valores indican éxito o fracaso.

Archivos compactados  
Número de archivos compactados.

Bytes compactados  
Número de bytes compactados.

# Desactivación del optimizador de compactación
<a name="disable-compaction"></a>

 Puede deshabilitar la compactación automática de una tabla Apache Iceberg concreta mediante la consola AWS Glue o AWS CLI. 

------
#### [ Console ]

1. Inicie sesión en la Consola de administración de AWS y 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 izquierdo, en **Catálogo de datos**, elija **Tablas**. 

1. En la lista de tablas, elija la tabla de Iceberg en la que quiera deshabilitar la compactación.

1. Seleccione la pestaña **Optimización de la tabla** en la sección inferior de la página **Detalles de tablas**.

1. En **Acciones**, seleccione **Desactivar** y, a continuación, seleccione **Compactación**.

1.  Selecciona **Desactivar la compactación** en el mensaje de confirmación. Puede volver a habilitar la compactación más adelante. 

    Tras la confirmación, la compactación se desactiva y el estado de compactación de la tabla vuelve a ser el siguiente `Disabled`.

------
#### [ AWS CLI ]

En el siguiente ejemplo, reemplace el ID de cuenta con un ID de AWS válido. Sustituya el nombre de la base de datos y el nombre de la tabla por el nombre real de la tabla de Iceberg y el nombre de la base de datos. Sustituya el `roleArn` por el nombre de recurso de AWS (ARN) del rol de IAM y el nombre real del rol de IAM que tiene los permisos necesarios para ejecutar la compactación.

```
aws glue update-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role", "enabled":'false', "vpcConfiguration":{"glueConnectionName":"glue_connection_name"}}'\ 
  --type compaction
```

------
#### [ AWS API ]

Llame a la operación [UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) para deshabilitar la compactación de una tabla específica.

------

# Optimización de retención de instantáneas
<a name="snapshot-retention-management"></a>

La característica de retención de instantáneas de Apache Iceberg permite a los usuarios consultar datos históricos en momentos específicos y revertir las modificaciones no deseadas en sus tablas. En el Catálogo de datos de AWS Glue, la configuración de retención de instantáneas controla cuánto tiempo se conservan estas instantáneas (versiones de los datos de la tabla) antes de que caduquen y se eliminen. Esto ayuda a administrar los costos de almacenamiento y la sobrecarga de metadatos al eliminar automáticamente las instantáneas antiguas en función de un periodo de retención configurado o del número máximo de instantáneas que se deben conservar. 

Puede configurar el periodo de retención en días y el número máximo de instantáneas que se deben retener para una tabla. AWS Glue elimina las instantáneas anteriores al periodo de retención especificado de los metadatos de la tabla y, al mismo tiempo, mantiene las instantáneas más recientes dentro del límite configurado. Tras eliminar las instantáneas antiguas de los metadatos, AWS Glue elimina los archivos de datos y metadatos correspondientes a los que ya no se hace referencia y que son exclusivos de las instantáneas caducadas. Esto permite realizar consultas en el tiempo solo hasta las instantáneas restantes que se han conservado y, al mismo tiempo, recuperar el espacio de almacenamiento utilizado por los datos de las instantáneas caducadas.

**Topics**
+ [Habilitación del optimizador de retención de instantáneas](enable-snapshot-retention.md)
+ [Actualización del optimizador de retención de instantáneas](update-snapshot-retention.md)
+ [Deshabilitación del optimizador de retención de instantáneas](disable-snapshot-retention.md)

# Habilitación del optimizador de retención de instantáneas
<a name="enable-snapshot-retention"></a>

 Puede usar la consola de AWS Glue, la AWS CLI o la API de AWS para habilitar los optimizadores de retención de instantáneas de las tablas Apache Iceberg en el Catálogo de datos. Para las tablas nuevas, puede elegir Apache Iceberg como formato de tabla y habilitar el optimizador de retención de instantáneas al crear la tabla. La retención de instantáneas está deshabilitada de forma predeterminada para las tablas nuevas.

------
#### [ Console ]

**Habilitación del optimizador de retención de instantáneas**

1.  Abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) e inicie sesión como administrador del lago de datos, creador de la tabla o usuario al que se le hayan concedido los permisos `glue:UpdateTable` y `lakeformation:GetDataAccess` de la tabla. 

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

1. En la página **Tablas**, elija una tabla de Iceberg para la que desee habilitar el optimizador de retención de instantáneas y, a continuación, en el menú **Acciones**, seleccione **Habilitar** en **Optimización**.

   Para habilitar la optimización, también puede seleccionar la tabla y abrir la página **Detalles de la tabla**. Seleccione la pestaña **Optimización de tablas** en la sección inferior de la página y elija **Habilitar la retención de instantáneas**. 

1. En la página **Habilitar la optimización**, en **Configuración de optimización**, tiene dos opciones: **Usar la configuración predeterminada** o **Personalizar la configuración**. Si elige usar la configuración predeterminada, AWS Glue utiliza las propiedades definidas en la configuración de la tabla de Iceberg para determinar el periodo de retención de las instantáneas y el número de instantáneas que se deben retener. En ausencia de esta configuración, AWS Glue retiene una instantánea durante cinco días y elimina los archivos asociados a las instantáneas caducadas.

1.  A continuación, elija un rol de IAM que AWS Glue pueda asumir en su nombre para ejecutar el optimizador. Para obtener más información sobre los permisos necesarios para el rol de IAM, consulte la sección [Requisitos previos para la optimización de tablas](optimization-prerequisites.md).

   Siga los pasos que se indican a continuación para actualizar un rol de IAM existente: 

   1.  Para actualizar la política de permisos del rol de IAM, en la consola de IAM, vaya al rol de IAM que se está utilizando para ejecutar la compactación. 

   1.  En la sección Agregar permisos, seleccione Crear política. En la ventana del navegador que se acaba de abrir, cree una nueva política para utilizarla con su rol. 

   1. En la página Crear política, elija la pestaña JSON. Copie el código JSON que se muestra en la sección Requisitos previos en el campo del editor de políticas.

1. Si prefiere establecer los valores de **Configuración de retención de instantáneas** de forma manual, elija **Personalizar la configuración**.   
![\[Página de detalles de la tabla Apache Iceberg con la opción Habilitar la retención>Personalizar la configuración.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/table-enable-retention.png)

1. Seleccione la casilla **Aplicar el rol de IAM seleccionado a los optimizadores seleccionados** para usar un solo rol de IAM para todos los optimizadores activados.

1. Si tiene configuraciones de políticas de seguridad en las que el optimizador de tablas de Iceberg necesita acceder a los buckets de Amazon S3 desde una nube privada virtual (VPC) específica, cree una conexión de red de AWS Glue o utilice una existente.

   Si aún no tiene configurada una conexión de VPC de AWS Glue, cree una nueva según los pasos de la sección [Creating connections for connectors](https://docs.aws.amazon.com/glue/latest/dg/creating-connections.html) mediante la consola de AWS Glue, la AWS CLI o los SDK.

1. A continuación, en **Configuración de retención de instantáneas**, elija usar los valores especificados en [Configuración de la tabla de Iceberg](https://iceberg.apache.org/docs/1.5.2/configuration/#table-behavior-properties) o especifique valores personalizados para el período de retención de las instantáneas (history.expire.max-snapshot-age-ms), el número mínimo de instantáneas que se deben retener (history.expire.min-snapshots-to-keep) y el tiempo en horas entre cada ejecución del trabajo de eliminación de instantáneas.

1.  Seleccione **Eliminar los archivos asociados** para eliminar los archivos subyacentes cuando el optimizador de tablas elimine las instantáneas antiguas de los metadatos de la tabla.

    Si no selecciona esta opción, cuando las instantáneas antiguas se eliminen de los metadatos de la tabla, sus archivos asociados permanecerán en el almacenamiento como archivos huérfanos. 

1. A continuación, lea la declaración de precaución y seleccione **Acepto** para continuar.
**nota**  
 En el Catálogo de datos, el optimizador de retención de instantáneas respeta el ciclo de vida controlado por las políticas de retención de nivel de ramificación y etiqueta. Para obtener más información, consulte la sección [Branching and tagging](https://iceberg.apache.org/docs/latest/branching/#overview) de la documentación de Iceberg.

1. Revise la configuración y elija **Habilitar la optimización**.

   Espere unos minutos a que el optimizador de retención se ejecute y caduque las instantáneas antiguas según la configuración.

------
#### [ AWS CLI ]

 Para habilitar la retención de instantáneas en las tablas nuevas Iceberg en AWS Glue, debe crear un optimizador de tablas de tipo `retention` y establecer el campo `enabled` en `true` en `table-optimizer-configuration`. Para ello, puede usar el comando de la AWS CLI `create-table-optimizer` o `update-table-optimizer`. Además, debe especificar los campos de configuración de la retención como `snapshotRetentionPeriodInDays` y `numberOfSnapshotsToRetain` en función de sus requisitos.

En el siguiente ejemplo se muestra cómo habilitar el optimizador de retención de instantáneas. Sustituya el ID de cuenta por un ID de cuenta de AWS válido. Sustituya el nombre de la base de datos y el nombre de la tabla por el nombre real de la tabla de Iceberg y el nombre de la base de datos. Sustituya `roleArn` por el nombre de recurso de AWS (ARN) del rol de IAM y el nombre del rol de IAM que tiene los permisos necesarios para ejecutar el optimizador de retención de instantáneas. 

```
aws glue create-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role","enabled":'true', "vpcConfiguration":{
"glueConnectionName":"glue_connection_name"}, "retentionConfiguration":{"icebergConfiguration":{"snapshotRetentionPeriodInDays":7,"numberOfSnapshotsToRetain":3,"cleanExpiredFiles":'true'}}}'\
  --type retention
```

 Este comando crea un optimizador de retención para la tabla de Iceberg especificada en el catálogo, la base de datos y la región indicados. table-optimizer-configuration especifica el ARN del rol de IAM que se va a utilizar, habilita el optimizador y establece la configuración de retención. En este ejemplo, retiene las instantáneas durante 7 días, conserva un mínimo de 3 instantáneas y limpia los archivos caducados. 
+  snapshotRetentionPeriodInDays: número de días que se deben retener las instantáneas antes de provocar que caduquen. El valor predeterminado es `5`. 
+ numberOfSnapshotsToRetain: número mínimo de instantáneas que se deben retener, incluso si son anteriores al periodo de retención. El valor predeterminado es `1`. 
+ cleanExpiredFiles: valor booleano que indica si se deben eliminar los archivos de datos caducados después de que las instantáneas hayan caducado. El valor predeterminado es `true`.

   Si se establece en verdadero, las instantáneas más antiguas se eliminan de los metadatos de la tabla, así como sus archivos subyacentes. Si este parámetro se establece en falso, las instantáneas más antiguas se eliminan de los metadatos de la tabla, pero sus archivos subyacentes permanecen en el almacenamiento como archivos huérfanos. 

------
#### [ AWS API ]

Llame a la operación [CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) para habilitar el optimizador de retención de captura de pantalla de una tabla.

------

Después de activar la compactación, la pestaña de **Optimización de la tabla** muestra los siguientes detalles de compactación (después de aproximadamente 15 a 20 minutos):

Hora de inicio  
Hora a la que se inició el optimizador de retención de instantáneas. El valor es una marca en la hora UTC. 

Tiempo de ejecución  
La hora muestra el tiempo que tarda el optimizador en completar la tarea. El valor es una marca en la hora UTC. 

Status  
Estado de la ejecución del optimizador. Los valores indican éxito o fracaso.

Archivos de datos eliminados  
Número total de archivos eliminados.

Archivos de manifiesto eliminados  
Número total de archivos de manifiesto eliminados.

Listas de manifiesto eliminadas  
Número total de listas de manifiesto eliminadas.

# Actualización del optimizador de retención de instantáneas
<a name="update-snapshot-retention"></a>

 Puede actualizar la configuración existente de un optimizador de retención de instantáneas para una tabla de Apache Iceberg concreta mediante la consola de AWS Glue, la AWS CLI o la API UpdateTableOptimizer. 

------
#### [ Console ]

**Actualización de la configuración de retención de instantáneas**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Elija la **Base de datos** y las **Tablas**. En la lista de tablas, elija la tabla de Iceberg en la que quiera actualizar la configuración del optimizador de retención de instantáneas.

1. En la sección inferior de la página **Detalles de las tablas**, seleccione la pestaña **Optimización de la tabla** y, a continuación, elija **Editar**. También puede seleccionar **Editar** en **Optimización** en el menú **Acciones** ubicado en la esquina superior derecha de la página.

1.  En la página **Editar optimización**, realice los cambios que desee. 

1.  Seleccione **Save**. 

------
#### [ AWS CLI ]

 Puede usar el siguiente comando para la actualización del optimizador de retención de instantáneas mediante la AWS CLI: 

```
aws glue update-table-optimizer \
 --catalog-id 123456789012 \
 --database-name iceberg_db \
 --table-name iceberg_table \
 --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role"","enabled":'true', "vpcConfiguration":{"glueConnectionName":"glue_connection_name"},"retentionConfiguration":{"icebergConfiguration":{"snapshotRetentionPeriodInDays":7,"numberOfSnapshotsToRetain":3,"cleanExpiredFiles":'true'}}}' \
 --type retention
```

 Este comando actualiza la configuración de retención para la tabla especificada en el catálogo, la base de datos y la región indicados. Los parámetros clave son: 
+  snapshotRetentionPeriodInDays: número de días que se deben retener las instantáneas antes de provocar que caduquen. El valor predeterminado es `1`. 
+ numberOfSnapshotsToRetain: número mínimo de instantáneas que se deben retener, incluso si son anteriores al periodo de retención. El valor predeterminado es `5`. 
+ cleanExpiredFiles: valor booleano que indica si se deben eliminar los archivos de datos caducados después de que las instantáneas hayan caducado. El valor predeterminado es `true`. 

   Si se establece en verdadero, las instantáneas más antiguas se eliminan de los metadatos de la tabla, así como sus archivos subyacentes. Si este parámetro se establece en falso, las instantáneas más antiguas se eliminan de los metadatos de la tabla, pero sus archivos subyacentes permanecen en el almacenamiento como archivos huérfanos. 

------
#### [ API ]

Para actualizar un optimizador de tablas, puede usar la API `UpdateTableOptimizer`. Esta API le permite actualizar la configuración de un optimizador de tablas existente para compactar, retener o eliminar archivos huérfanos. Los parámetros de la solicitud incluyen:
+ catalogId (obligatorio): ID del catálogo que contiene la tabla. 
+  databaseName (opcional): nombre de la base de datos que contiene la tabla. 
+  tableName (opcional): nombre de la tabla. 
+  type (obligatorio): tipo de optimizador de tablas (compaction, retention o orphan\$1file\$1deletion). 
+  retentionConfiguration (obligatorio): configuración actualizada del optimizador de tablas, que incluye el ARN del rol, el estado habilitado, la configuración de retención y la configuración de eliminación de archivos huérfanos. 

------

# Deshabilitación del optimizador de retención de instantáneas
<a name="disable-snapshot-retention"></a>

 Puede deshabilitar el optimizador de retención de instantáneas de una tabla Apache Iceberg concreta mediante la consola de AWS Glue o la AWS CLI. 

------
#### [ Console ]

**Deshabilitación de la retención de instantáneas**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Elija la **Base de datos** y las **Tablas**. En la lista de tablas, elija la tabla de Iceberg en la que quiera deshabilitar el optimizador de retención de instantáneas.

1. En la sección inferior de la página **Detalles de la tabla**, seleccione **Optimización de la tabla** y **Desactivar**, **Retención de instantáneas** en **Acciones**.

   También puede seleccionar **Desactivar** en **Optimización** en el menú **Acciones** ubicado en la esquina superior derecha de la página.

1.  Seleccione **Deshabilitar** en el mensaje de confirmación. Puede volver a habilitar el optimizador de retención de instantáneas en otro momento. 

    Tras la confirmación, el optimizador de retención de instantáneas se deshabilita y el estado de retención de instantáneas vuelve a ser `Not enabled`.

------
#### [ AWS CLI ]

En el siguiente ejemplo, reemplace el ID de cuenta con un ID de AWS válido. Sustituya el nombre de la base de datos y el nombre de la tabla por el nombre real de la tabla de Iceberg y el nombre de la base de datos. Sustituya `roleArn` por el nombre de recurso de AWS (ARN) del rol de IAM y el nombre real del rol de IAM que tiene los permisos necesarios para ejecutar el optimizador de retención.

```
aws glue update-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role", "vpcConfiguration":{"glueConnectionName":"glue_connection_name"}, "enabled":'false'}'\ 
  --type retention
```

------
#### [ AWS API ]

Llame a la operación [UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) para deshabilitar el optimizador de retención de instantáneas de una tabla específica.

------

# Eliminación de archivos huérfanos
<a name="orphan-file-deletion"></a>

 AWS Glue Data Catalog le permite eliminar archivos huérfanos de sus tablas de Iceberg. Los archivos huérfanos son archivos sin referencias que existen en su origen de datos de Amazon S3 en la ubicación de la tabla especificada, que no están registrados en los metadatos de la tabla de Iceberg y que son más antiguos que el límite de edad que usted configuró. Con el tiempo, estos archivos huérfanos pueden acumularse debido a errores en operaciones como la compactación, la eliminación de particiones o la reescritura de tablas, y ocupan espacio de almacenamiento innecesario.

El optimizador de eliminación de archivos huérfanos de AWS Glue analiza los metadatos de la tabla y los archivos de datos reales, identifica los archivos huérfanos y los elimina para recuperar espacio de almacenamiento. El optimizador solo elimina los archivos creados después de la fecha de creación del optimizador que también cumplen los criterios de eliminación configurados. Los archivos creados antes de la fecha de creación del optimizador, o en la misma fecha, nunca se eliminan.

**Lógica de la eliminación de archivos huérfanos**

1. Verificación de la fecha: compara la fecha de creación del archivo con la fecha de creación del optimizador. Si la fecha de creación del archivo es anterior o igual a la fecha de creación del optimizador, se omite.

1. Verificación de la configuración del optimizador: si el archivo es más reciente que la fecha de creación del optimizador, lo compara con el límite de edad configurado. El optimizador elimina el archivo si coincide con los criterios de eliminación. Si no cumple los criterios, lo omite.

 Para iniciar la eliminación de archivos huérfanos, cree un optimizador de tablas de eliminación de archivos huérfanos en el Catálogo de datos.

**importante**  
 De forma predeterminada, la eliminación de archivos huérfanos evalúa cada archivo en la ubicación de la tabla AWS Glue. Si bien puede configurar un subprefijo para limitar el alcance de la evaluación mediante el uso de un parámetro de API, asegúrese de que la ubicación de la tabla no contenga archivos de otros orígenes de datos o tablas. Si la ubicación de la tabla se superpone con otros orígenes de datos, es probable que el servicio identifique y elimine archivos que no estén relacionados como si fueran huérfanos. 

**Topics**
+ [Habilitación de la eliminación de archivos huérfanos](enable-orphan-file-deletion.md)
+ [Actualización del optimizador de eliminación de archivos huérfanos](update-orphan-file-deletion.md)
+ [Deshabilitación de la eliminación de archivos huérfanos](disable-orphan-file-deletion.md)

# Habilitación de la eliminación de archivos huérfanos
<a name="enable-orphan-file-deletion"></a>

 Puede usar la consola de AWS Glue, la AWS CLI o la API de AWS para habilitar la eliminación de archivos huérfanos de las tablas Apache Iceberg en el Catálogo de datos. Para las tablas nuevas, puede elegir Apache Iceberg como formato de tabla y habilitar el optimizador de eliminación de archivos huérfanos al crear la tabla. La retención de instantáneas está deshabilitada de forma predeterminada para las tablas nuevas.

------
#### [ Console ]

**Para habilitar la eliminación de archivos huérfanos**

1.  Abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) e inicie sesión como administrador del lago de datos, creador de la tabla o usuario al que se le hayan concedido los permisos `glue:UpdateTable` y `lakeformation:GetDataAccess` de la tabla. 

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

1. En la página **Tablas**, elija una tabla de Iceberg en la que quiera habilitar la eliminación de archivos huérfanos.

   Seleccione la pestaña **Optimización de la tabla** en la sección inferior de la página y seleccione **Activar**, **Eliminación de archivos huérfanos** en **Acciones**. 

   También puede seleccionar **Activar** en **Optimización** en el menú **Acciones** ubicado en la esquina superior derecha de la página.

1. En la página **Habilitar la optimización**, seleccione **Eliminación de archivos huérfanos** en **Opciones de optimización**.

1. Si elige usar **Configuración predeterminada**, todos los archivos huérfanos se eliminarán después de 3 días. Si desea conservar los archivos huérfanos durante un número específico de días, seleccione **Personalizar configuración**.

1. A continuación, elija un rol de IAM con los permisos necesarios para eliminar archivos huérfanos.

1. Si tiene configuraciones de políticas de seguridad en las que el optimizador de tablas de Iceberg necesita acceder a los buckets de Amazon S3 desde una nube privada virtual (VPC) específica, cree una conexión de red de AWS Glue o utilice una existente.

   Si aún no tiene configurada una conexión de VPC de AWS Glue, cree una nueva según los pasos de la sección [Creating connections for connectors](https://docs.aws.amazon.com/glue/latest/dg/creating-connections.html) mediante la consola de AWS Glue, la AWS CLI o los SDK.

1. Si elige **Personalizar configuración**, ingrese el número de días que se van a retener los archivos antes de eliminarlos en **Configuración de eliminación de archivos huérfanos**. También puede especificar el intervalo entre dos ejecuciones consecutivas del optimizador. El valor de predeterminado es 24 horas.

1. Seleccione **Habilitar la optimización**.

------
#### [ AWS CLI ]

 Para habilitar la eliminación de archivos huérfanos en una tabla de Iceberg de AWS Glue, debe crear un optimizador de tablas de tipo `orphan_file_deletion` y establecer el campo `enabled` en verdadero. Para crear un optimizador de eliminación de archivos huérfanos para una tabla de Iceberg mediante la AWS CLI, puede utilizar el siguiente comando:

```
aws glue create-table-optimizer \
 --catalog-id 123456789012 \
 --database-name iceberg_db \
 --table-name iceberg_table \
 --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role","enabled":true, "vpcConfiguration":{
"glueConnectionName":"glue_connection_name"}, "orphanFileDeletionConfiguration":{"icebergConfiguration":{"orphanFileRetentionPeriodInDays":3, "location":'S3 location'}}}'\
 --type orphan_file_deletion
```

 Este comando crea un optimizador de eliminación de archivos huérfanos para la tabla de Iceberg especificada. Los parámetros clave son:
+ roleArn: ARN del rol de IAM con permisos para acceder al bucket de S3 y a los recursos de Glue.
+ enabled: se establece en verdadero para habilitar el optimizador.
+ orphanFileRetentionPeriodInDays: el número de días necesarios para retener los archivos huérfanos antes de eliminarlos (mínimo 1 día).
+ type: se establece en orphan\$1file\$1deletion para crear un optimizador de eliminación de archivos huérfanos.

 Tras crear el optimizador de tablas, eliminará los archivos huérfanos periódicamente (una vez al día si se deja habilitado). Puede comprobar las ejecuciones mediante la API `list-table-optimizer-runs`. El trabajo de eliminación de archivos huérfanos identificará y eliminará los archivos sin seguimiento en los metadatos de Iceberg de la tabla.

------
#### [ API ]

Llame a la operación [CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) para crear el optimizador de eliminación de archivos huérfanos para una tabla específica.

------

# Actualización del optimizador de eliminación de archivos huérfanos
<a name="update-orphan-file-deletion"></a>

 Puede modificar la configuración del optimizador de eliminación de archivos huérfanos, por ejemplo, cambiando el periodo de retención de los archivos huérfanos o el rol de IAM utilizado por el optimizador mediante la consola de AWS Glue, la AWS CLI o la operación `UpdateTableOptimizer`. 

------
#### [ Consola de administración de AWS ]

**Actualización del optimizador de eliminación de archivos huérfanos**

1.  Elija la **Base de datos** y las **Tablas**. En la lista de tablas, elija la tabla en la que quiera actualizar la configuración del optimizador de eliminación de archivos huérfanos.

1. En la sección inferior de la página **Detalles de la tabla**, elija **Optimización de la tabla** y, a continuación, elija **Editar**. 

1.  En la página **Editar optimización**, realice los cambios que desee. 

1.  Seleccione **Save**. 

------
#### [ AWS CLI ]

 Puede usar la llamada de `update-table-optimizer` para actualizar el optimizador de eliminación de archivos huérfanos en AWS Glue. Esto le permite modificar el parámetro `OrphanFileDeletionConfiguration` en el campo `icebergConfiguration` en el que puede especificar el parámetro `OrphanFileRetentionPeriodInDays` actualizado para establecer el número de días que se retendrán los archivos huérfanos y especificar la ubicación de la tabla de Iceberg desde la que se eliminarán los archivos huérfanos. 

```
aws glue update-table-optimizer \
 --catalog-id 123456789012 \
 --database-name iceberg_db \
 --table-name Iceberg_table \
 --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role","enabled":true, "vpcConfiguration":{"glueConnectionName":"glue_connection_name"},"orphanFileDeletionConfiguration":{"icebergConfiguration":{"orphanFileRetentionPeriodInDays":5}}}' \
 --type orphan_file_deletion
```

------
#### [ API ]

Llame a la operación [UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) para actualizar el optimizador de eliminación de archivos huérfanos para una tabla.

------

 

# Deshabilitación de la eliminación de archivos huérfanos
<a name="disable-orphan-file-deletion"></a>

 Puede deshabilitar el optimizador de eliminación de archivos huérfanos de una tabla de Apache Iceberg concreta mediante la consola de AWS Glue o la AWS CLI. 

------
#### [ Console ]

**Deshabilitación de la eliminación de archivos huérfanos**

1. Elija la **Base de datos** y las **Tablas**. En la lista de tablas, elija la tabla de Iceberg en la que quiera deshabilitar el optimizador de eliminación de archivos huérfanos.

1. En la sección inferior de la página **Detalles de la tabla**, seleccione la pestaña **Optimización de la tabla**.

1. Seleccione **Acciones** y, a continuación, selecciona **Desactivar**, **Eliminar archivos huérfanos**.

   También puede seleccionar **Deshabilitar** en **Optimización** en el menú **Acciones**.

1.  Seleccione **Deshabilitar** en el mensaje de confirmación. Puede volver a habilitar el optimizador de eliminación de archivos huérfanos en otro momento. 

    Tras la confirmación, el optimizador de eliminación de archivos huérfanos se deshabilita y el estado de la eliminación de archivos huérfanos vuelve a ser `Not enabled`.

------
#### [ AWS CLI ]

En el siguiente ejemplo, reemplace el ID de cuenta con un ID de AWS válido. Sustituya el nombre de la base de datos y el nombre de la tabla por el nombre real de la tabla de Iceberg y el nombre de la base de datos. Sustituya `roleArn` por el nombre de recurso de AWS (ARN) del rol de IAM y el nombre real del rol de IAM que tiene los permisos necesarios para deshabilitar el optimizador.

```
aws glue update-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role", "enabled":'false'}'\ 
  --type orphan_file_deletion
```

------
#### [ API ]

Llame a la operación [UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) para deshabilitar el optimizador de retención de instantáneas de una tabla específica.

------

# Visualización de los detalles de la optimización
<a name="view-optimization-status"></a>

Puede ver el estado de optimización de las tablas Apache Iceberg mediante la consola de AWS Glue, la AWS CLI o las operaciones de la API de AWS. 

------
#### [ Console ]

**Visualización del estado de optimización de las tablas de Iceberg (consola)**
+ Para ver el estado de optimización de las tablas de Iceberg en la consola de AWS Glue, seleccione una tabla de Iceberg de la lista **Tablas** del **Catálogo de datos**. En **Optimización de la tabla**. Elija la opción **Ver todo**  
![\[Página de detalles de la tabla de Apache Iceberg con la opción para habilitar la compactación.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/table-list-compaction-status.png)

------
#### [  AWS CLI  ]

Puede ver los detalles de la optimización mediante la AWS CLI.

En los siguientes ejemplos, sustituya el identificador de cuenta por un identificador de cuenta de AWS válido, el nombre de la base de datos y el nombre de la tabla por el nombre real de la tabla de Iceberg. Para `type`, proporcione un tipo de optimización. Los valores admitidos son `compaction`, `retention` y `orphan-file-deletion`.
+ **Obtención de los detalles de la última tanda de compactación de una tabla**

  ```
  aws get-table-optimizer \
    --catalog-id 123456789012 \
    --database-name iceberg_db \
    --table-name iceberg_table \
    --type compaction
  ```
+ Utilice el siguiente ejemplo para recuperar el historial de un optimizador de una tabla específica.

  ```
  aws list-table-optimizer-runs \
    --catalog-id 123456789012 \
    --database-name iceberg_db \
    --table-name iceberg_table \
    --type compaction
  ```
+ En el siguiente ejemplo se muestra cómo recuperar la ejecución de optimización y los detalles de configuración de varios optimizadores. Puede especificar un máximo de 20 optimizadores.

  ```
  aws glue batch-get-table-optimizer \
  --entries '[{"catalogId":"123456789012", "databaseName":"iceberg_db", "tableName":"iceberg_table", "type":"compaction"}]'
  ```

------
#### [ API ]
+ Utilice la operación `GetTableOptimizer` para recuperar los detalles de la última ejecución de un optimizador. 
+  Utilice la operación `ListTableOptimizerRuns` para recuperar el historial de un optimizador determinado en una tabla específica. Puede especificar 20 optimizadores en una sola llamada a la API. 
+ Utilice la operación [BatchGetTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-BatchGetTableOptimizer) para recuperar los detalles de configuración de varios optimizadores de su cuenta. 

------

# Visualización de métricas de Amazon CloudWatch
<a name="view-optimization-metrics"></a>

 Tras ejecutar los optimizadores de tablas correctamente, el servicio crea métricas de Amazon CloudWatch sobre el rendimiento del trabajo de optimización. Puede ir a las **Métricas de CloudWatch** y elegir **Métricas**, **Todas las métricas**. Puede filtrar las métricas por el espacio de nombres específico (por ejemplo AWS Glue), el nombre de la tabla o el nombre de la base de datos.

 Para obtener más información, consulte [Ver métricas disponibles](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html) en la *Guía del usuario de Amazon CloudWatch*. 

****Compactación****
+ Número de bytes compactados 
+ Número de archivos compactados
+ Número de DPU asignadas a los trabajos 
+ Duración del trabajo (horas) 

****Retención de instantáneas****
+ Número de archivos de datos eliminados 
+ Número de archivos de manifiesto eliminados
+ Número de listas de manifiesto eliminadas 
+ Duración del trabajo (horas)

****Eliminación de archivos huérfanos****
+ Número de archivos huérfanos eliminados 
+ Duración del trabajo (horas) 

# Eliminar un optimizador
<a name="delete-optimizer"></a>

Puede eliminar un optimizador y los metadatos asociados a la tabla mediante AWS CLI o una operación de API de AWS.

Ejecute el siguiente comando de la AWS CLI para eliminar el historial de optimización de una tabla. Debe especificar el valor de `type` del optimizador junto con el ID del catálogo, el nombre de la base de datos y el nombre de la tabla. Los valores admitidos son `compaction`, `retention` y `orphan_file_deletion`.

```
aws glue delete-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --type compaction
```

 Utilice la operación `DeleteTableOptimizer` para eliminar un optimizador de una tabla.

# Consideraciones y limitaciones
<a name="optimizer-notes"></a>

 En esta sección se incluyen aspectos que se deben tener en cuenta al utilizar optimizadores de tablas en el AWS Glue Data Catalog. 

## Durabilidad y exactitud
<a name="durability-correctness"></a>

**Ubicaciones de tablas en S3:**

Si varias tablas de AWS Glue Data Catalog comparten la misma ubicación en Amazon S3 y tienen optimizadores habilitados, el optimizador de retención de instantáneas o el de eliminación de archivos huérfanos de una tabla podría eliminar archivos que aún utiliza la otra tabla. Asegúrese de que cada tabla con optimizadores habilitados tenga una ubicación única en Amazon S3 que no se comparta con ninguna otra tabla, incluidas las tablas de distintas bases de datos.

**Expiración del ciclo de vida de S3:**

Las reglas de expiración del ciclo de vida de Amazon S3 pueden eliminar archivos de manifiesto y de datos de tablas de Iceberg que aún están en uso por instantáneas activas. Si el bucket tiene reglas de expiración del ciclo de vida, asegúrese de excluir la ruta de almacenamiento de la tabla de Iceberg.

## Formatos compatibles y limitaciones de la compactación de datos administrada
<a name="compaction-notes"></a>

La compactación de datos admite una variedad de tipos de datos y formatos de compresión para leer y escribir datos, incluida la lectura de datos de tablas cifradas.

**Control de simultaneidad:**

 Apache Iceberg es compatible con un control de simultaneidad optimista, lo que permite que varias escrituras realicen operaciones simultáneamente. Los conflictos se detectan y resuelven en el momento de la confirmación. Cuando trabaje con canalizaciones de flujo, configure los ajustes de reintento adecuados mediante las propiedades de la tabla y los ajustes de compactación para gestionar las escrituras simultáneas de forma eficaz. Para obtener orientación detallada, consulte el blog de Big Data de AWS sobre la [administración de escrituras simultáneas en tablas de Iceberg](https://aws.amazon.com/blogs/big-data/manage-concurrent-write-conflicts-in-apache-iceberg-on-the-aws-glue-data-catalog/). 

**Reintentos de compactación:**

 Cuando las operaciones de compactación fallan cuatro veces consecutivas, la optimización de la tabla de catálogo de AWS Glue suspende automáticamente el optimizador para evitar un consumo innecesario de recursos de computación. Primero, investigue los registros e intente comprender la causa de la falla repetida de la compactación. Para reanudar la optimización de la compactación, puede volver a habilitar el optimizador a través de la API o la consola de AWS Glue. 

 **La compactación de datos admite:**
+ **Cifrado**: La compactación de datos solo admite el cifrado Amazon S3 (SSE-S3) y el cifrado KMS del lado del servidor (SSE-KMS)
+ **Estrategias de compactación**: binpack, clasificación y ordenación Z-order
+ Puede ejecutar la compactación desde la cuenta en la que reside el catálogo de datos cuando el bucket de Amazon S3 que almacena los datos subyacentes esté en otra cuenta. Para ello, el rol de compactación requiere acceso al bucket de Amazon S3.

 **La compactación de datos actualmente no admite:** 
+ **Compactación en tablas con varias cuentas**: No se puede ejecutar la compactación en tablas con varias cuentas
+ **Compactación en tablas de varias regiones**: No se puede ejecutar la compactación en tablas de varias regiones
+ **Habilitar la compactación en los enlaces de recursos**
+ **Tablas en la clase de almacenamiento Amazon S3 Express One Zone**: no se puede ejecutar la compactación en tablas de Iceberg en Amazon S3 Express One Zone. 
+ **La estrategia de compactación por ordenamiento en Z no admite los siguientes tipos de datos :**
  + Decimal
  + TimestampWithoutZone

## Consideraciones sobre los optimizadores de retención de instantáneas y eliminación de archivos huérfanos
<a name="retention-notes"></a>

Las siguientes consideraciones se aplican a los optimizadores de retención de instantáneas y de eliminación de archivos huérfanos. 
+ Los procesos de retención de instantáneas y eliminación de archivos huérfanos tienen un límite máximo de eliminación de 1 000 000 de archivos por ejecución. Al eliminar las instantáneas caducadas, si el número de archivos aptos para su eliminación supera 1 000 000, los archivos restantes que superen ese umbral seguirán existiendo en el almacenamiento de tablas como archivos huérfanos. 
+ El optimizador de retención de instantáneas conservará las instantáneas solo cuando se cumplan ambos criterios: el número mínimo de instantáneas que se deben conservar y el periodo de retención especificado.
+ El optimizador de retención de instantáneas elimina los metadatos de las instantáneas caducadas de Apache Iceberg, lo que evita que las consultas sobre las instantáneas caducadas viajen en el tiempo y, de forma opcional, elimina los archivos de datos asociados.
+  El optimizador de eliminación de archivos huérfanos elimina los archivos de datos y metadatos huérfanos a los que los metadatos de Iceberg ya no hacen referencia si su momento de creación es anterior al periodo de retención de la eliminación de archivos huérfanos desde el momento en que se ejecuta el optimizador.
+ Apache Iceberg facilita el control de versiones mediante ramas y etiquetas, denominadas punteros para estados de instantáneas específicos. Cada rama y etiqueta sigue su propio ciclo de vida independiente, regido por las políticas de retención definidas en sus niveles respectivos. Los optimizadores de AWS Glue Data Catalog tienen en cuenta estas políticas de ciclo de vida, lo que garantiza el cumplimiento de las reglas de retención especificadas. Las políticas de retención de rama y etiqueta tienen prioridad sobre las configuraciones del optimizador. 

   Para obtener más información, consulte la sección [Branching and Tagging](https://iceberg.apache.org/docs/nightly/branching/) de la documentación de Apache Iceberg. 
+ Los optimizadores de retención de instantáneas y de eliminación de archivos huérfanos eliminarán los archivos que puedan limpiarse según los parámetros configurados. Mejore su control sobre la eliminación de archivos mediante la implementación de políticas de control de versiones y ciclo de vida de S3 en los buckets correspondientes.

   Para obtener instrucciones detalladas sobre cómo configurar el control de versiones y crear reglas de ciclo de vida, consulte [https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html). 
+  Para determinar correctamente los archivos huérfanos, asegúrese de que la ubicación de la tabla proporcionada y las subrutas no se superpongan ni contengan datos de ninguna otra tabla u origen de datos. Si las rutas se superponen, corre el riesgo de sufrir una pérdida de datos irrecuperable debido a la eliminación no intencionada de archivos. 

## Depuración de la excepción OversizedAllocationException
<a name="debug-exception"></a>

Para resolver una excepción `OversizedAllocationException`:
+ Reduzca el tamaño del lote del lector vectorizado y compruébelo. El tamaño predeterminado del lote es de 5000. Esto se controla en `read.parquet.vectorization.batch-size`.
  + Si esto no funciona incluso después de varias variaciones, desactive la vectorización. Esto se controla en `read.parquet.vectorization.enabled`.

# Regiones compatibles con los optimizadores de tablas
<a name="regions-optimizers"></a>

Las funciones de optimización de tablas (compactación, retención de instantáneas y eliminación de archivos huérfanos) para AWS Glue Data Catalog están disponibles en las siguientes Regiones de AWS:
+ Asia-Pacífico (Tokio)
+ Asia-Pacífico (Seúl)
+ Asia-Pacífico (Mumbai)
+ Asia-Pacífico (Singapur)
+ Asia-Pacífico (Sídney)
+ Asia-Pacífico (Yakarta)
+ Canadá (centro)
+ Europa (Irlanda)
+ Europa (Londres)
+ Europa (Fráncfort)
+ Europa (Estocolmo)
+ Este de EE. UU. (Norte de Virginia)
+ Este de EE. UU. (Ohio)
+ Oeste de EE. UU. (Oregón)
+ América del Sur (São Paulo)

# Optimización del rendimiento de las consultas en tablas de Iceberg
<a name="iceberg-column-statistics"></a>

Apache Iceberg es un formato de tabla abierto de alto rendimiento para conjuntos de datos de análisis de gran tamaño. AWS Glue permite calcular y actualizar el número de valores distintos (NDV) para cada columna de las tablas de Iceberg. Estas estadísticas pueden facilitar una mejor optimización de las consultas, administración de los datos y eficiencia del rendimiento para los ingenieros y científicos de datos que trabajan con conjuntos de datos a gran escala.

 AWS Glue calcula el número de valores distintos de cada columna de la tabla de Iceberg y los almacena en archivos [Puffin](https://iceberg.apache.org/puffin-spec/) de Amazon S3 asociados a las instantáneas de la tabla de Iceberg. Puffin es un formato de archivo de Iceberg diseñado para almacenar metadatos como índices, estadísticas y bocetos. El almacenamiento de bocetos en archivos Puffin vinculados a instantáneas garantiza la coherencia de las transacciones y la actualización de las estadísticas de NDV.

Puede configurarlo para ejecutar la tarea de generación de estadísticas de columnas mediante la consola AWS Glue o AWS CLI. Al iniciar el proceso, AWS Glue inicia un trabajo de Spark en segundo plano y actualiza los metadatos de la tabla AWS Glue en el catálogo de datos. Puede ver las estadísticas de las columnas mediante la consola AWS Glue o AWS CLI, o llamando a la operación de la API [GetColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetColumnStatisticsForTable.html).

**nota**  
Si utiliza los permisos de AWS Lake Formation para controlar el acceso a la tabla, el rol que asume la tarea de estadísticas de columnas requiere acceso total a la tabla para generar estadísticas.

**Topics**
+ [Requisitos previos para generar estadísticas de columnas](iceberg-column-stats-prereqs.md)
+ [Generación de estadísticas de las columnas de las tablas de Iceberg](iceberg-generate-column-stats.md)
+ [Véase también](#see-also-iceberg-stats)

# Requisitos previos para generar estadísticas de columnas
<a name="iceberg-column-stats-prereqs"></a>

Para generar o actualizar las estadísticas de las columnas de tablas de Iceberg, la tarea de generación de estadísticas adopta un rol de AWS Identity and Access Management (IAM) en su nombre. Según los permisos concedidos al rol, la tarea de generación de estadísticas de columnas puede leer los datos del almacén de datos de Amazon S3.

Al configurar la tarea de generación de estadísticas de la columna, AWS Glue le permite crear un rol que incluye la política administrada de AWS `AWSGlueServiceRole`, más la política insertada necesaria para el origen de datos especificado. 

Si especifica un rol existente para generar estadísticas de las columnas, asegúrese de que incluya la política `AWSGlueServiceRole` o equivalente (o una versión reducida de esta política), además de las políticas insertadas requeridas.

Para obtener más información sobre los permisos fr necesarios, consulte . [Requisitos previos para generar estadísticas de columnas](column-stats-prereqs.md). 

# Generación de estadísticas de las columnas de las tablas de Iceberg
<a name="iceberg-generate-column-stats"></a>

Siga estos pasos para configurar una programación para generar estadísticas en el Catálogo de datos mediante la consola de AWS Glue o la AWS CLI, o ejecute la operación **StartColumnStatisticsTaskRun**.

**Generación de estadísticas de columnas**

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

1. Seleccione **Tablas** en el Catálogo de datos.

1. Seleccione una tabla de Iceberg de la lista. 

1. Seleccione **Generar estadísticas**, **Generar bajo demanda** en el menú **Acciones**.

   También puede pulsar el botón **Generar estadísticas** en la pestaña **Estadísticas de columnas**, en la sección inferior de la página de **Tablas**.

1. En la página **Generar estadísticas**, proporcione los detalles de generación de estadísticas. Siga los pasos 6 a 11 de la sección [Generación de estadísticas de columnas según una programación](generate-column-stats.md) a fin de configurar una programación para la generación de estadísticas de las tablas de Iceberg. 

   También puede optar por generar estadísticas de columnas bajo demanda si sigue las instrucciones en [Generación de estadísticas de columnas bajo demanda](column-stats-on-demand.md)
**nota**  
La opción de muestreo no está disponible para las tablas de Iceberg.

   AWS Glue calcula el número de valores distintos de cada columna de la tabla de Iceberg en un nuevo archivo Puffin asignado al ID de instantánea especificado en la ubicación de su instancia de Amazon S3.

## Véase también
<a name="see-also-iceberg-stats"></a>
+ [Visualización de estadísticas de columnas](view-column-stats.md)
+ [Visualización de las ejecuciones de tareas de estadísticas de columnas](view-stats-run.md)
+ [Detener la ejecución de la tarea de estadísticas de columnas](stop-stats-run.md)
+ [Eliminar estadísticas de columnas](delete-column-stats.md)

# Administración del Catálogo de datos
<a name="manage-catalog"></a>

 El AWS Glue Data Catalog es un repositorio central de metadatos que almacena los metadatos estructurales y operativos para sus conjuntos de datos de Amazon S3. La administración eficaz del Catálogo de datos es crucial para mantener la calidad, el rendimiento, la seguridad y la gobernanza de los datos.

 Si comprende y aplica estas prácticas de administración del Catálogo de datos, puede asegurarse de que sus metadatos sigan siendo precisos, eficaces y seguros, y de que estén bien gestionados a medida que el panorama de sus datos evoluciona. 

En esta sección se tratan los siguientes aspectos de la administración del Catálogo de datos:
+ *Actualización del esquema y las particiones de la tabla:* A medida que evolucionan los datos, es posible que deba actualizar el esquema de la tabla o la estructura de particiones definidos en el Catálogo de datos. Para obtener más información sobre cómo realizar estas actualizaciones mediante programación con la ETL de AWS Glue, consulte [Cómo actualizar el esquema y añadir nuevas particiones al Catálogo de datos mediante trabajos de ETL de AWS Glue](update-from-job.md).
+ *Administración de las estadísticas de columnas:* Las estadísticas de columnas precisas ayudan a optimizar los planes de las consultas y a mejorar el rendimiento. Para obtener más información sobre cómo generar, actualizar y administrar las estadísticas de columnas, consulte [Cómo optimizar el rendimiento de las consultas con las estadísticas de columnas](column-statistics.md). 
+  *Cifrado del Catálogo de datos:* Para proteger los metadatos confidenciales, puede cifrar el Catálogo de datos mediante el uso de AWS Key Management Service (AWS KMS). En esta sección se explica cómo activar y administrar el cifrado del Catálogo de datos. 
+ *Protección del Catálogo de datos con AWS Lake Formation:* Lake Formation proporciona un enfoque integral para abordar la seguridad de los lagos de datos y el control del acceso a estos. Puede usar Lake Formation para proteger y controlar el acceso a su Catálogo de datos y a los datos subyacentes. 

**Topics**
+ [Cómo actualizar el esquema y añadir nuevas particiones al Catálogo de datos mediante trabajos de ETL de AWS Glue](update-from-job.md)
+ [Cómo optimizar el rendimiento de las consultas con las estadísticas de columnas](column-statistics.md)
+ [Cifrado del Catálogo de datos](catalog-encryption.md)
+ [Cómo proteger su Catálogo de datos con Lake Formation](secure-catalog.md)
+ [Trabajar con vistas AWS Glue Data Catalog en AWS Glue](catalog-views.md)

# Cómo actualizar el esquema y añadir nuevas particiones al Catálogo de datos mediante trabajos de ETL de AWS Glue
<a name="update-from-job"></a>

Un trabajo de extracción, transformación y carga (ETL) podría crear nuevas particiones de la tabla en el almacén de datos de destino. El esquema del conjunto de datos puede evolucionar y ser cada vez más diferente del esquema del AWS Glue Data Catalog. AWS Glue Los trabajos de ETL ahora cuentan con varias características que se pueden utilizar dentro del script de ETL para actualizar el esquema y las particiones del Data Catalog. Estas características permiten ver los resultados del trabajo de ETL en el Data Catalog sin necesidad de volver a ejecutar el rastreador.

## Nuevas particiones
<a name="update-from-job-partitions"></a>

Si desea ver las nuevas particiones del AWS Glue Data Catalog, puede realizar una de las siguientes acciones:
+ Cuando el trabajo termine, vuelva a ejecutar el rastreador y, una vez que finalice, consulte las nuevas particiones en la consola.
+ Cuando el trabajo termine, podrá ver las nuevas particiones en la consola de inmediato sin necesidad de volver a ejecutar el rastreador. Puede habilitar esta característica agregando algunas líneas de código al script ETL, tal y como se muestra en los siguientes ejemplos. El código utiliza el argumento `enableUpdateCatalog` para indicar que el Data Catalog se va a actualizar durante la ejecución del trabajo a medida que se creen las nuevas particiones.

**Método 1**  
Pase `enableUpdateCatalog` y `partitionKeys` en un argumento de opciones.  

```
additionalOptions = {"enableUpdateCatalog": True}
additionalOptions["partitionKeys"] = ["region", "year", "month", "day"]


sink = glueContext.write_dynamic_frame_from_catalog(frame=last_transform, database=<target_db_name>,
                                                    table_name=<target_table_name>, transformation_ctx="write_sink",
                                                    additional_options=additionalOptions)
```

```
val options = JsonOptions(Map(
    "path" -> <S3_output_path>, 
    "partitionKeys" -> Seq("region", "year", "month", "day"), 
    "enableUpdateCatalog" -> true))
val sink = glueContext.getCatalogSink(
    database = <target_db_name>, 
    tableName = <target_table_name>, 
    additionalOptions = options)sink.writeDynamicFrame(df)
```

**Método 2**  
Pase `enableUpdateCatalog` y `partitionKeys` en `getSink()` y llame a `setCatalogInfo()` en el objeto `DataSink`.  

```
sink = glueContext.getSink(
    connection_type="s3", 
    path="<S3_output_path>",
    enableUpdateCatalog=True,
    partitionKeys=["region", "year", "month", "day"])
sink.setFormat("json")
sink.setCatalogInfo(catalogDatabase=<target_db_name>, catalogTableName=<target_table_name>)
sink.writeFrame(last_transform)
```

```
val options = JsonOptions(
   Map("path" -> <S3_output_path>, 
       "partitionKeys" -> Seq("region", "year", "month", "day"), 
       "enableUpdateCatalog" -> true))
val sink = glueContext.getSink("s3", options).withFormat("json")
sink.setCatalogInfo(<target_db_name>, <target_table_name>)
sink.writeDynamicFrame(df)
```

Ahora, puede crear nuevas tablas de catálogo, actualizar las tablas existentes con un esquema modificado y agregar nuevas particiones de tabla en el Data Catalog utilizando únicamente un trabajo de ETL de AWS Glue, sin necesidad de volver a ejecutar los rastreadores.

## Actualización del esquema de la tabla
<a name="update-from-job-updating-table-schema"></a>

Si desea sobrescribir el esquema de la tabla del Data Catalog, puede realizar una de las siguientes acciones:
+ Cuando termine el trabajo, vuelva a ejecutar el rastreador y asegúrese de que esté configurado para actualizar también la definición de la tabla. Cuando el rastreador finalice, consulte las nuevas particiones en la consola junto con las actualizaciones del esquema. Para obtener más información, consulte [Configuración de un rastreador con la API](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-api).
+ Cuando el trabajo termine, podrá ver de inmediato el esquema modificado en la consola sin necesidad de volver a ejecutar el rastreador. Puede habilitar esta característica agregando algunas líneas de código al script ETL, tal y como se muestra en los siguientes ejemplos. El código utiliza el valor `enableUpdateCatalog` establecido en verdadero y también el valor `updateBehavior` establecido en `UPDATE_IN_DATABASE`, lo que indica que el esquema debe sobrescribirse y deben agregarse nuevas particiones en el Data Catalog durante la ejecución del trabajo.

------
#### [ Python ]

```
additionalOptions = {
    "enableUpdateCatalog": True, 
    "updateBehavior": "UPDATE_IN_DATABASE"}
additionalOptions["partitionKeys"] = ["partition_key0", "partition_key1"]

sink = glueContext.write_dynamic_frame_from_catalog(frame=last_transform, database=<dst_db_name>,
    table_name=<dst_tbl_name>, transformation_ctx="write_sink",
    additional_options=additionalOptions)
job.commit()
```

------
#### [ Scala ]

```
val options = JsonOptions(Map(
    "path" -> outputPath, 
    "partitionKeys" -> Seq("partition_0", "partition_1"), 
    "enableUpdateCatalog" -> true))
val sink = glueContext.getCatalogSink(database = nameSpace, tableName = tableName, additionalOptions = options)
sink.writeDynamicFrame(df)
```

------

También puede establecer el valor `updateBehavior` en `LOG` si no desea que el esquema de la tabla se sobrescriba pero sí quiere agregar las nuevas particiones. El valor predeterminado de `updateBehavior` es `UPDATE_IN_DATABASE`, por lo que, si no lo define explícitamente, se sobrescribirá el esquema de la tabla.

Si `enableUpdateCatalog` no se establece en verdadero, independientemente de la opción seleccionada en `updateBehavior`, el trabajo de ETL no actualizará la tabla del Data Catalog. 

## Creación de nuevas tablas
<a name="update-from-job-creating-new-tables"></a>

También puede utilizar las mismas opciones para crear una nueva tabla en el Data Catalog. Puede especificar la base de datos y el nuevo nombre de la tabla con `setCatalogInfo`.

------
#### [ Python ]

```
sink = glueContext.getSink(connection_type="s3", path="s3://path/to/data",
    enableUpdateCatalog=True, updateBehavior="UPDATE_IN_DATABASE",
    partitionKeys=["partition_key0", "partition_key1"])
sink.setFormat("<format>")
sink.setCatalogInfo(catalogDatabase=<dst_db_name>, catalogTableName=<dst_tbl_name>)
sink.writeFrame(last_transform)
```

------
#### [ Scala ]

```
val options = JsonOptions(Map(
    "path" -> outputPath, 
    "partitionKeys" -> Seq("<partition_1>", "<partition_2>"), 
    "enableUpdateCatalog" -> true, 
    "updateBehavior" -> "UPDATE_IN_DATABASE"))
val sink = glueContext.getSink(connectionType = "s3", connectionOptions = options).withFormat("<format>")
sink.setCatalogInfo(catalogDatabase = “<dst_db_name>”, catalogTableName = “<dst_tbl_name>”)
sink.writeDynamicFrame(df)
```

------

## Restricciones
<a name="update-from-job-restrictions"></a>

Tome nota de las siguientes restricciones:
+ Solo se soportan los destinos de Amazon Simple Storage Service (Amazon S3).
+ La característica `enableUpdateCatalog` no es compatible con las tablas gobernadas.
+ Solo se admiten los siguientes formatos: `json`, `csv`, `avro` y `parquet`.
+ Para crear o actualiza tablas con la clasificación `parquet`, debe utilizar el escritor de parquet optimizado para DynamicFrames de AWS Glue. Esto se puede lograr con uno de los siguientes:
  + Si va a actualizar una tabla existente en el catálogo con una clasificación `parquet`, la tabla debe tener la propiedad de tabla `"useGlueParquetWriter"` establecida en `true` antes de actualizarla. Puede configurar esta propiedad a través de las API/SDK de AWS Glue, la consola o una instrucción DDL de Athena.   
![\[Campo de edición de propiedades de la tabla de catálogo en la consola AWS Glue.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/edit-table-property.png)

    Una vez establecida la propiedad de la tabla de catálogo, puede utilizar el siguiente fragmento de código para actualizar la tabla de catálogo con los nuevos datos:

    ```
    glueContext.write_dynamic_frame.from_catalog(
        frame=frameToWrite,
        database="dbName",
        table_name="tableName",
        additional_options={
            "enableUpdateCatalog": True,
            "updateBehavior": "UPDATE_IN_DATABASE"
        }
    )
    ```
  + Si la tabla aún no existe en el catálogo, puede utilizar el método `getSink()` del script con `connection_type="s3"` para agregar la tabla y sus particiones al catálogo, además de escribir los datos en Amazon S3. Proporcione la `partitionKeys` adecuada y la `compression` para su flujo de trabajo.

    ```
    s3sink = glueContext.getSink(
        path="s3://bucket/folder/",
        connection_type="s3",
        updateBehavior="UPDATE_IN_DATABASE",
        partitionKeys=[],
        compression="snappy",
        enableUpdateCatalog=True
    )
        
    s3sink.setCatalogInfo(
        catalogDatabase="dbName", catalogTableName="tableName"
    )
        
    s3sink.setFormat("parquet", useGlueParquetWriter=True)
    s3sink.writeFrame(frameToWrite)
    ```
  + El valor de formato `glueparquet` es un método heredado para habilitar el escritor de Parquet de AWS Glue.
+ Si `updateBehavior` se configura en `LOG`, las nuevas particiones solo se agregarán si el esquema de `DynamicFrame` es igual al subconjunto de las columnas definidas en el esquema de la tabla del Data Catalog, o si contiene un subconjunto de este tipo.
+ Las actualizaciones de esquema no son compatibles con las tablas sin particiones (no se utiliza la opción "PartitionKeys").
+ Las claves de partición deben ser equivalentes y estar en el mismo orden en el parámetro que se transfirió en el script de ETL y en las claves de partición del esquema de la tabla del catálogo de datos.
+ Esta característica aún no admite la actualización/creación de tablas en las que se anidan los esquemas de actualización (por ejemplo, matrices dentro de estructuras).

Para obtener más información, consulte [Programación de scripts de Spark](aws-glue-programming.md).

# Trabajar con conexiones MongoDB en trabajos de ETL
<a name="integrate-with-mongo-db"></a>

Puede crear una conexión para MongoDB y luego usar esa conexión en su trabajo de AWS Glue. Para obtener más información, consulte [Conexiones a MongoDB](aws-glue-programming-etl-connect-mongodb-home.md) en la guía de progrmación de AWS Glue. La `url`, el `username` y la `password` de la conexión se almacenan en la conexión de MongoDB. Se pueden especificar otras opciones en el script de trabajo de ETL mediante el parámetro `additionalOptions` de `glueContext.getCatalogSource`. Las otras opciones pueden incluir lo siguiente:
+ `database`: (obligatorio) la base de datos de MongoDB de la que se va a leer.
+ `collection`: (obligatorio) la colección de MongoDB de la que se va a leer.

Al colocar la información de `database` y `collection` dentro del script de trabajo de ETL, puede utilizar la misma conexión para varios trabajos.

1. Creación de una conexión de AWS Glue Data Catalog para el origen de datos MongoDB. Consulte ["connectionType": "mongodb"](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-mongodb) para ver una descripción de los parámetros de conexión. Puede crear la conexión mediante la consola, las API o CLI.

1. Cree una base de datos en AWS Glue Data Catalog para almacenar las definiciones de la tabla para sus datos de MongoDB. Para obtener más información, consulte [Creación de bases de datos](define-database.md).

1. Cree un rastreador que rastree los datos en MongoDB usando la información en la conexión para conectarse a MongoDB. El rastreador crea las tablas en AWS Glue Data Catalog, que describen las tablas en la base de datos MongoDB que usa en su trabajo. Para obtener más información, consulte [Uso de rastreadores para completar el Catálogo de datos](add-crawler.md).

1. Cree un trabajo con un script personalizado. Puede crear un trabajo mediante la consola, la API o CLI. Para obtener más información, consulte [Agregar trabajos en AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-job.html).

1. Elija los destinos de datos para su trabajo. Las tablas que representan el destino de datos se pueden definir en el Data Catalog, o bien, el trabajo puede crear las tablas de destino cuando se ejecute. El usuario elige la ubicación de destino al crear el trabajo. Si el destino requiere una conexión, esta también estará referenciada en el trabajo. Si el trabajo requiere varios destinos de datos, puede agregarlos más tarde al editar el script.

1. Personalice el entorno de procesamiento del flujo de trabajo mediante argumentos para el flujo de trabajo y el script que se generó. 

   A continuación, se muestra un ejemplo de creación de un `DynamicFrame` desde la base de datos MongoDB en función de la estructura de la tabla definida en el Data Catalog. El código utiliza `additionalOptions` para proporcionar la información adicional del origen de datos:

------
#### [  Scala  ]

   ```
   val resultFrame: DynamicFrame = glueContext.getCatalogSource(
           database = catalogDB, 
           tableName = catalogTable, 
           additionalOptions = JsonOptions(Map("database" -> DATABASE_NAME, 
                   "collection" -> COLLECTION_NAME))
         ).getDynamicFrame()
   ```

------
#### [  Python  ]

   ```
   glue_context.create_dynamic_frame_from_catalog(
           database = catalogDB,
           table_name = catalogTable,
           additional_options = {"database":"database_name", 
               "collection":"collection_name"})
   ```

------

1. Ejecute el trabajo, ya sea bajo demanda o a través de un desencadenador.

# Cómo optimizar el rendimiento de las consultas con las estadísticas de columnas
<a name="column-statistics"></a>

Puede calcular estadísticas a nivel de columna para tablas AWS Glue Data Catalog en formatos de datos como Parquet, ORC, JSON, ION, CSV y XML sin necesidad de configurar canalizaciones de datos adicionales. Las estadísticas de columnas le ayudan a entender los perfiles de datos al obtener información sobre los valores de una columna. 

El catálogo de datos le permite generar estadísticas para los valores de las columnas, como el valor mínimo, el valor máximo, los valores nulos totales, los valores distintos totales, la longitud media de los valores y el total de apariciones de valores verdaderos. Los servicios analíticos de AWS como Amazon Redshift y Amazon Athena pueden utilizar estas estadísticas de columnas para generar planes de ejecución de consultas y elegir el plan más adecuado que mejore el rendimiento de las consultas.

Existen tres casos en los que generar estadísticas de columnas: 

 **Automático**   
AWS Glue admite la generación automática de estadísticas de columnas a nivel de catálogo, para que pueda generar automáticamente estadísticas de las nuevas tablas en AWS Glue Data Catalog. 

**Programados**  
AWS Glue permite programar la generación de estadísticas de columnas para que se puedan ejecutar automáticamente según una programación periódica.   
Con el cálculo de estadísticas programado, la tarea de estadísticas de columnas actualiza las estadísticas generales a nivel de tabla (como las mínimas, máximas y medias) con las nuevas estadísticas, lo que proporciona a los motores de consultas estadísticas precisas y actualizadas para optimizar la ejecución de las consultas. 

**Bajo demanda**  
Utilice esta opción para generar estadísticas de columnas bajo demanda siempre que sea necesario. Esto resulta útil para realizar un análisis ad hoc o cuando es necesario calcular las estadísticas de forma inmediata. 

Puede configurar esto para ejecutar la tarea de generación de estadísticas de columnas mediante la consola AWS Glue, AWS CLI y operaciones de API AWS Glue. Al iniciar el proceso, AWS Glue inicia un trabajo de Spark en segundo plano y actualiza los metadatos de la tabla AWS Glue en el catálogo de datos. Puede ver las estadísticas de las columnas mediante la consola AWS Glue o AWS CLI, o llamando a la operación de la API [GetColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetColumnStatisticsForTable.html).

**nota**  
Si utiliza los permisos de Lake Formation para controlar el acceso a la tabla, el rol que asume la tarea de estadísticas de columnas requiere acceso total a la tabla para generar estadísticas.

 En el video a continuación se muestra cómo mejorar el rendimiento de las solicitudes con estadísticas de columnas. 

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/zUHEXJdHUxs?si=HjyhpoALR6RXJz2i/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/zUHEXJdHUxs?si=HjyhpoALR6RXJz2i)


**Topics**
+ [Requisitos previos para generar estadísticas de columnas](column-stats-prereqs.md)
+ [Generación automática de estadísticas de columnas](auto-column-stats-generation.md)
+ [Generación de estadísticas de columnas según una programación](generate-column-stats.md)
+ [Generación de estadísticas de columnas bajo demanda](column-stats-on-demand.md)
+ [Visualización de estadísticas de columnas](view-column-stats.md)
+ [Visualización de las ejecuciones de tareas de estadísticas de columnas](view-stats-run.md)
+ [Detener la ejecución de la tarea de estadísticas de columnas](stop-stats-run.md)
+ [Eliminar estadísticas de columnas](delete-column-stats.md)
+ [Consideraciones y limitaciones](column-stats-notes.md)

# Requisitos previos para generar estadísticas de columnas
<a name="column-stats-prereqs"></a>

Para generar o actualizar las estadísticas de las columnas, la tarea de generación de estadísticas adopta un rol de AWS Identity and Access Management (IAM) en su nombre. Según los permisos concedidos al rol, la tarea de generación de estadísticas de columnas puede leer los datos del almacén de datos de Amazon S3.

Al configurar la tarea de generación de estadísticas de la columna, AWS Glue le permite crear un rol que incluye la política administrada de AWS `AWSGlueServiceRole`, más la política insertada necesaria para el origen de datos especificado. 

Si especifica un rol existente para generar estadísticas de columnas, asegúrese de que incluya la política `AWSGlueServiceRole` o una equivalente (o una versión reducida de esta política), además de las políticas insertadas requeridas. Para crear un nuevo rol de IAM, siga estos pasos:

**nota**  
 Para generar estadísticas para las tablas administradas por Lake Formation, el rol de IAM utilizado para generar estadísticas requiere acceso total a las tablas. 

Al configurar la tarea de generación de estadísticas de la columna, AWS Glue le permite crear un rol que incluye la política administrada de AWS `AWSGlueServiceRole`, más la política insertada necesaria para el origen de datos especificado. También puede crear un rol y adjuntar los permisos que se indican en la política siguiente y agregarlo a la tarea de generación de estadísticas de la columna.

**Creación de un rol de IAM para generar estadísticas de columnas**

1. Para crear un rol de IAM;, consulte [Crear un rol de IAM para AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/create-an-iam-role.html).

1. Para actualizar un rol existente, en la consola de IAM, vaya al rol de IAM que está utilizando el proceso de generación de estadísticas de columnas.

1. En la sección **Agregar permisos**, elija **Asociar políticas**. En la ventana del navegador que se acaba de abrir, elija la política administrada de AWS `AWSGlueServiceRole`.

1. También debe incluir los permisos de lectura de los datos de la ubicación de datos de Amazon S3.

   En la sección **Agregar permisos**, elija **Crear política**. En la ventana del navegador que se acaba de abrir, cree una nueva política para utilizarla con su rol.

1. En la página **Crear política**, elija la pestaña **JSON**. Copie el siguiente código `JSON` en el campo del editor de política.
**nota**  
En las políticas a continuación, reemplace la ID de cuenta con una Cuenta de AWS válida, `region` con la Región de la tabla y `bucket-name` con el nombre del bucket de Amazon S3.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "S3BucketAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject"
               ],
               "Resource": [
               	"arn:aws:s3:::amzn-s3-demo-bucket/*",
   							"arn:aws:s3:::amzn-s3-demo-bucket"
               ]
           }
        ]
   }
   ```

------

1. (Opcional) Si utiliza los permisos de Lake Formation para acceder a sus datos, el rol de IAM requiere permisos `lakeformation:GetDataAccess`.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "LakeFormationDataAccess",
         "Effect": "Allow",
         "Action": "lakeformation:GetDataAccess",
         "Resource": [
           "*"
         ]
       }
     ]
   }
   ```

------

    Si la ubicación de datos de Amazon S3 está registrada en Lake Formation y el rol de IAM que asume la tarea de generación de estadísticas de columnas no tiene permisos de grupos `IAM_ALLOWED_PRINCIPALS` concedidos en la tabla, el rol requiere los permisos de Lake Formation `ALTER` y `DESCRIBE` en la tabla. El rol utilizado para registrar el bucket de Amazon S3 requiere los permisos de Lake Formation `INSERT` y `DELETE` en la tabla. 

   Si la ubicación de datos de Amazon S3 no está registrada en Lake Formation y el rol de IAM no tiene permisos de grupo `IAM_ALLOWED_PRINCIPALS` otorgados en la tabla, el rol requiere los permisos de Lake Formation `ALTER`, `DESCRIBE`, `INSERT` y `DELETE` en la tabla. 

1. Si ha habilitado la opción `Automatic statistics generation` a nivel de catálogo, el rol de IAM debe tener el permiso `glue:UpdateCatalog` o el permiso `ALTER CATALOG` de Lake Formation en el catálogo de datos predeterminado. Puede utilizar la operación `GetCatalog` para verificar las propiedades del catálogo. 

1. (Opcional) La tarea de generación de estadísticas de columnas que escribe Amazon CloudWatch Logs cifrado necesita los siguientes permisos en la política de claves.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "CWLogsKmsPermissions",
         "Effect": "Allow",
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents",
           "logs:AssociateKmsKey"
         ],
         "Resource": [
           "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue:*"
         ]
       },
       {
         "Sid": "KmsPermissions",
         "Effect": "Allow",
         "Action": [
           "kms:GenerateDataKey",
           "kms:Decrypt",
           "kms:Encrypt"
         ],
         "Resource": [
           "arn:aws:kms:us-east-1:111122223333:key/arn of key used for ETL cloudwatch encryption"
         ],
         "Condition": {
           "StringEquals": {
             "kms:ViaService": [
               "glue.us-east-1.amazonaws.com"
             ]
           }
         }
       }
     ]
   }
   ```

------

1. El rol que utilice para ejecutar las estadística de columnas debe contener el permiso `iam:PassRole` en el rol.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "iam:PassRole"
         ],
         "Resource": [
           "arn:aws:iam::111122223333:role/columnstats-role-name"
         ]
       }
     ]
   }
   ```

------

1. Al crear un rol de IAM para generar estadísticas de columnas, el rol también debe tener la siguiente política de confianza que permita al servicio asumirlo. 

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "TrustPolicy",
         "Effect": "Allow",
         "Principal": {
           "Service": "glue.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

# Generación automática de estadísticas de columnas
<a name="auto-column-stats-generation"></a>

La generación automática de estadísticas de columnas le permite programar y calcular automáticamente las estadísticas de las nuevas tablas en AWS Glue Data Catalog. Al activar la generación automática de estadísticas, el catálogo de datos indica nuevas tablas con formatos de datos específicos, como Parquet, JSON, CSV, XML, ORC, ION y Apache Iceberg, junto con sus respectivas rutas de bucket. Mediante una configuración de catálogo única, el catálogo de datos genera estadísticas para estas tablas.

 Los administradores del lago de datos pueden configurar la generación de estadísticas si seleccionan el catálogo predeterminado en la consola de Lake Formation y habilitando las estadísticas de tablas mediante la opción `Optimization configuration`. Al crear tablas nuevas o actualizar las existentes en el catálogo de datos, este recopila semanalmente el número de valores distintos (NDV) de las tablas de Apache Iceberg y otras estadísticas adicionales, como el número de valores nulos o la longitud máxima, mínima y media de otros formatos de archivo compatibles. 

Si configuró la generación de estadísticas a nivel de tabla o si eliminó previamente la configuración de generación de estadísticas de una tabla, esa configuración específica de tabla tendrá prioridad sobre la configuración predeterminada del catálogo para la generación automática de estadísticas de columnas.

 La tarea de generación automática de estadísticas analiza el 50 % de los registros de las tablas para calcular las estadísticas. La generación automática de estadísticas de columnas garantiza que el catálogo de datos mantenga las métricas semanales más recientes que pueden utilizar los motores de consultas, como Amazon Athena y Amazon Redshift Spectrum, para mejorar el rendimiento de las consultas y ahorrar costos potenciales. Permite programar la generación de estadísticas mediante las API de AWS Glue o la consola, lo que proporciona un proceso automatizado sin intervención manual. 

**Topics**
+ [Habilitación de la generación automática de estadísticas a nivel de catálogo](enable-auto-column-stats-generation.md)
+ [Visualización configuración automatizada en el nivel de tabla](view-auto-column-stats-settings.md)
+ [Desactivación de la generación de estadísticas de columnas a nivel de catálogo](disable-auto-column-stats-generation.md)

# Habilitación de la generación automática de estadísticas a nivel de catálogo
<a name="enable-auto-column-stats-generation"></a>

Puede habilitar la generación automática de estadísticas de columnas en todas las tablas nuevas de Apache Iceberg y las tablas que tengan formatos que no sean OTF (Parquet, JSON, CSV, XML, ORC, ION) del catálogo de datos. Tras crear la tabla, también puede actualizar de forma explícita y manual la configuración de las estadísticas de columnas.

 Para actualizar la configuración del catálogo de datos y así poder habilitar el nivel de catálogo, el rol de IAM que utilice debe tener el permiso `glue:UpdateCatalog` o el permiso AWS Lake Formation `ALTER CATALOG` del catálogo raíz. Puede utilizar la API `GetCatalog` para verificar las propiedades del catálogo. 

------
#### [ Consola de administración de AWS ]

**Habilitación de la generación automática de estadísticas de columnas a nivel de cuenta**

1. Abra la consola de Lake Formation en [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

1. En la barra de navegación izquierda, elija **Claves**.

1. En la página **Resumen del catálogo**, seleccione **Editar** en **Configuración de la optimización**.   
![\[La captura de pantalla muestra las opciones disponibles para generar estadísticas de columnas.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/edit-column-stats-auto.png)

1. En la página **Configuración de la optimización de tablas**, elija la opción **Habilitar la generación automática de estadísticas para las tablas del catálogo**.  
![\[La captura de pantalla muestra las opciones disponibles para generar estadísticas de columnas.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/edit-optimization-option.jpg)

1. Elija un rol de IAM existente o cree uno nuevo con los permisos necesarios para ejecutar la tarea de estadísticas de columnas.

1. Elija **Enviar**.

------
#### [ AWS CLI ]

También puede habilitar la recopilación de estadísticas a nivel de catálogo a través de AWS CLI. Para configurar la recopilación de estadísticas a nivel de tabla mediante AWS CLI, ejecute el siguiente comando:

```
aws glue update-catalog --cli-input-json '{
    "name": "123456789012",
    "catalogInput": {
        "description": "Updating root catalog with role arn",
        "catalogProperties": {
            "customProperties": {
                "ColumnStatistics.RoleArn": "arn:aws:iam::"123456789012":role/service-role/AWSGlueServiceRole",
                "ColumnStatistics.Enabled": "true"
            }
        }
    }
}'
```

 El comando anterior llama a operación `UpdateCatalog` de AWS Glue, que adopta una estructura `CatalogProperties` con los siguientes pares clave-valor para generar estadísticas a nivel de catálogo: 
+ ColumnStatistics.RoleArn: ARN del rol de IAM se utilizará en todas las tareas activadas para la generación de estadísticas a nivel de catálogo
+ ColumnStatistics.Enabled: valor booleano que indica si la configuración a nivel de catálogo está habilitada o deshabilitada

------

# Visualización configuración automatizada en el nivel de tabla
<a name="view-auto-column-stats-settings"></a>

 Cuando la recopilación de estadísticas en el catálogo está habilitada, cada vez que se crea o actualiza una tabla de Apache Hive o de Apache Iceberg mediante las API de `CreateTable` o de `UpdateTable` a través de Consola de administración de AWS, un SDK o Rastreador de AWS Glue, una configuración de tabla equivalente se crea para esa tabla. 

 Las tablas que tengan la generación automática de estadísticas habilitada deben seguir una de las siguientes propiedades:
+ Utilice una propiedad `InputSerdeLibrary` que comience por org.apache.hadoop y `TableType` sea igual a `EXTERNAL_TABLE`.
+ Utilice una propiedad `InputSerdeLibrary` que comience por `com.amazon.ion` y `TableType` sea igual a `EXTERNAL_TABLE`.
+ Guarde un valor table\$1type: “ICEBERG” en su estructura de parámetros. 

 Después de crear o actualizar una tabla, puede verificar los detalles de esta para confirmar la generación de estadísticas. `Statistics generation summary` muestra el conjunto de propiedades `Schedule` como `AUTO`, y el valor `Statistics configuration` es `Inherited from catalog`. Glue activará automáticamente y de forma interna cualquier configuración de tabla que tenga los siguientes parámetros. 

![\[Se aplicó una imagen de una tabla de Hive con una recopilación de estadísticas a nivel de catálogo y se han recopilado estadísticas.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/auto-stats-summary.png)


# Desactivación de la generación de estadísticas de columnas a nivel de catálogo
<a name="disable-auto-column-stats-generation"></a>

 Puede deshabilitar la generación automática de estadísticas de columnas en tablas nuevas mediante la consola AWS Lake Formation, la API `glue:UpdateCatalogSettings` o la API `glue:DeleteColumnStatisticsTaskSettings`. 

**Desactivación de la generación automática de estadísticas de columnas a nivel de cuenta**

1. Abra la consola de Lake Formation en [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

1. En la barra de navegación izquierda, elija **Claves**.

1. En la página **Resumen del catálogo**, seleccione **Editar** en **Configuración de la optimización**. 

1. En la página **Configuración de la optimización de tablas**, anule la selección de la opción **Habilitar la generación automática de estadísticas en las tablas del catálogo**.

1. Elija **Enviar**.

# Generación de estadísticas de columnas según una programación
<a name="generate-column-stats"></a>

Siga estos pasos para configurar una programación para generar estadísticas de columnas en AWS Glue Data Catalog mediante la consola de AWS Glue, la AWS CLI o la operación [CreateColumnStatisticsTaskSettings](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-CreateColumnStatisticsTaskSettings).

------
#### [ Console ]

**Generación de estadísticas de columnas mediante la consola**

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

1. Seleccione las tablas del Data Catalog.

1. Seleccione una tabla de la lista. 

1. Seleccione la pestaña **Estadísticas de columnas** en la sección inferior de la página **Tablas**.

1. También puede seleccionar **Generar según una programación** en **Estadísticas de columnas** de la sección **Acciones**.

1. En la página **Generar estadísticas según una programación**, configure una programación periódica para ejecutar la tarea de estadísticas de columnas seleccionando la frecuencia y la hora de inicio. Puede elegir la frecuencia para que sea por hora, día o semana, o definir una expresión cron para especificar el horario.

   Una expresión cron es una cadena que representa un patrón de programación y consta de 6 campos separados por espacios: \$1 \$1 \$1 \$1 \$1 <minuto> <hora> <día del mes> <mes> <día de la semana> <año> Por ejemplo, para ejecutar una tarea todos los días a medianoche, la expresión cron sería: 0 0 \$1 \$1 ? \$1

   Para obtener más información, consulte [Expresiones Cron](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html#CronExpressions).  
![\[La captura de pantalla muestra las opciones disponibles para generar estadísticas de columnas.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/generate-column-stats-schedule.png)

1. A continuación, elija la opción de columnas para generar las estadísticas.
   + **Todas las columnas**: elija esta opción para generar estadísticas para todas las columnas de la tabla.
   + **Columnas seleccionadas**: elija esta opción para generar estadísticas para columnas específicas. Puede seleccionar las columnas en la lista desplegable.

1. Elija un rol de IAM o cree un rol existente que tenga permisos para generar estadísticas. AWS Glue asume este rol para generar estadísticas de columnas.

   Un enfoque más rápido es dejar que la consola de AWS Glue cree un rol para usted. El rol que crea es específicamente para generar las estadísticas de columnas e incluye la política `AWSGlueServiceRole` administrada por AWS, más la política en línea necesaria para el origen de datos especificado. 

   Si especifica un rol existente para generar estadísticas de columnas, asegúrese de que incluya la política `AWSGlueServiceRole` o una equivalente (o una versión reducida de esta política), además de las políticas insertadas requeridas. 

1. (Opcional) A continuación, elija una configuración de seguridad para habilitar el cifrado en reposo de los registros.

1. (Opcional) Para elegir un tamaño de muestra, indique solo un porcentaje específico de filas de la tabla para generar estadísticas. El valor predeterminado es Todas las filas. Utilice las flechas hacia arriba y hacia abajo para aumentar o disminuir el valor porcentual. 

   Se recomienda incluir todas las filas de la tabla para calcular estadísticas precisas. Utilice filas de muestra para generar estadísticas de columnas solo cuando los valores aproximados sean aceptables.

1. Elija **Generar estadísticas** para ejecutar la tarea de generación de estadísticas de columnas.

------
#### [ AWS CLI ]

Puede usar la siguiente AWS CLI de ejemplo para crear una programación de generación de estadísticas de columnas. Database-name, table-name y role son parámetros obligatorios, y los parámetros opcionales son schedule, column-name-list, catalog-id, sample-size, and security-configuration.

```
aws glue create-column-statistics-task-settings \ 
 --database-name 'database_name' \ 
 --table-name table_name \ 
 --role 'arn:aws:iam::123456789012:role/stats-role' \ 
 --schedule 'cron(0 0-5 14 * * ?)' \ 
 --column-name-list 'col-1' \  
 --catalog-id '123456789012' \ 
 --sample-size '10.0 ' \
 --security-configuration 'test-security'
```

También puede generar estadísticas de columnas llamando a la operación [StartColumnStatisticsTaskRun](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-StartColumnStatisticsTaskRun).

------

# Administración de la programación para la generación de estadísticas de columnas
<a name="manage-column-stats-schedule"></a>

Puede administrar las operaciones de programación, como actualizar, iniciar, detener y eliminar las programaciones para la generación de estadísticas de columnas en AWS Glue. Puede utilizar la consola de AWS Glue, la AWS CLI o las [operaciones de la API de estadísticas de columnas de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html) para realizar estas tareas.

**Topics**
+ [Actualización de la programación para la generación de estadísticas de columnas](#update-column-stats-shedule)
+ [Detención de la programación para la generación de estadísticas de columnas](#stop-column-stats-schedule)
+ [Reanudación de la programación para la generación de estadísticas de columnas](#resume-column-stats-schedule)
+ [Eliminación de la programación de estadísticas de columnas](#delete-column-stats-schedule)

## Actualización de la programación para la generación de estadísticas de columnas
<a name="update-column-stats-shedule"></a>

Puede actualizar la programación para activar la tarea de generación de estadísticas de columnas después de haberla creado. Puede utilizar la consola de AWS Glue, la AWS CLI o ejecutar la operación [UpdateColumnStatisticsTaskSettings](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-UpdateColumnStatisticsTaskSettings) para actualizar la programación de una tabla. Puede modificar los parámetros de una programación existente, como el tipo de programación (bajo demanda o programada) y otros parámetros opcionales. 

------
#### [ Consola de administración de AWS ]

**Para actualizar la configuración de una tarea de estadísticas de columnas**

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

1. Elija la tabla que desea actualizar de la lista de tablas.

1. En la sección inferior de la página de detalles de la tabla, elija **Estadísticas de columnas**. 

1. En **Acciones**, elija **Editar** para actualizar la programación.

1. Realice los cambios que desee en la programación y seleccione **Guardar**.

------
#### [ AWS CLI ]

 Si no está utilizando la característica de generación de estadísticas de AWS Glue en la consola, puede actualizar manualmente la programación con el comando `update-column-statistics-task-settings`. En el siguiente ejemplo, se muestra cómo actualizar las estadísticas de las columnas mediante AWS CLI. 

```
aws glue update-column-statistics-task-settings \ 
 --database-name 'database_name' \ 
 --table-name 'table_name' \ 
 --role arn:aws:iam::123456789012:role/stats_role \ 
 --schedule 'cron(0 0-5 16 * * ?)' \ 
 --column-name-list 'col-1' \
 --sample-size '20.0' \  
 --catalog-id '123456789012'\
 --security-configuration 'test-security'
```

------

## Detención de la programación para la generación de estadísticas de columnas
<a name="stop-column-stats-schedule"></a>

 Si ya no necesita estadísticas incrementales, puede detener la generación programada para ahorrar recursos y costos. Pausar la programación no afecta las estadísticas generadas anteriormente. Puede reanudar la programación cuando lo desee. 

------
#### [ Consola de administración de AWS ]

**Para detener la programación para una tarea de generación de estadísticas de columnas**

1. En la consola AWS Glue, seleccione **Tablas** en el catálogo de datos.

1. Seleccione una tabla con estadísticas de columnas.

1. En la página de **Detalles de la tabla**, seleccione **Estadísticas de columnas**.

1. En **Acciones**, elija **Generación programada** y **Pausar**.

1. Seleccione **Pausar** para confirmar.

------
#### [ AWS CLI ]

Para detener la programación de ejecución de una tarea de estadísticas de columnas mediante la AWS CLI, puede utilizar el siguiente comando: 

```
aws glue stop-column-statistics-task-run-schedule \
 --database-name ''database_name' \
 --table-name 'table_name'
```

Reemplace `database_name` y `table_name` con los nombres reales de la base de datos y la tabla para las que desea detener la programación de ejecución de la tarea de estadísticas de columnas.

------

## Reanudación de la programación para la generación de estadísticas de columnas
<a name="resume-column-stats-schedule"></a>

 Si ha pausado la programación de generación de estadísticas, AWS Glue le permite reanudarla cuando lo desee. Puede reanudar la programación mediante la consola de AWS Glue, la AWS CLI o la operación [StartColumnStatisticsTaskRunSchedule](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-StartColumnStatisticsTaskRunSchedule). 

------
#### [ Consola de administración de AWS ]

**Para reanudar la programación para la generación de estadísticas de columnas**

1. En la consola AWS Glue, seleccione **Tablas** en el catálogo de datos.

1. Seleccione una tabla con estadísticas de columnas.

1. En la página de **Detalles de la tabla**, seleccione **Estadísticas de columnas**.

1. En **Acciones**, elija **Generación programada** y **Reanudar**.

1. Seleccione **Reanudar** para confirmar.

------
#### [ AWS CLI ]

Reemplace `database_name` y `table_name` con los nombres reales de la base de datos y la tabla para las que desea detener la programación de ejecución de la tarea de estadísticas de columnas.

```
aws glue start-column-statistics-task-run-schedule \
 --database-name 'database_name' \
 --table-name 'table_name'
```

------

## Eliminación de la programación de estadísticas de columnas
<a name="delete-column-stats-schedule"></a>

 Si bien por lo general se recomienda mantener las estadísticas actualizadas para obtener un rendimiento óptimo de las consultas, hay casos de uso específicos en los que eliminar la programación de generación automática podría resultar beneficioso.
+ Si los datos permanecen relativamente estáticos, las estadísticas de las columnas existentes pueden seguir siendo precisas durante un período prolongado, lo que reduce la necesidad de actualizaciones frecuentes. Eliminar la programación puede evitar el consumo innecesario de recursos y la sobrecarga asociada con la regeneración de estadísticas en datos que no sufren modificaciones.
+ Cuando se prefiere el control manual sobre la generación de estadísticas. Al eliminar la programación automática, los administradores pueden actualizar selectivamente las estadísticas de las columnas en intervalos específicos o después de cambios significativos en los datos, alineando el proceso con sus estrategias de mantenimiento y necesidades de asignación de recursos. 

------
#### [ Consola de administración de AWS ]

**Cómo eliminar la programación de generación de estadísticas de columnas**

1. En la consola AWS Glue, seleccione **Tablas** en el catálogo de datos.

1. Seleccione una tabla con estadísticas de columnas.

1. En la página de **Detalles de la tabla**, seleccione **Estadísticas de columnas**.

1. En **Acciones**, elija **Generación programada** y **Eliminar**.

1. Elija **Eliminar** para confirmar.

------
#### [ AWS CLI ]

Reemplace `database_name` y `table_name` con los nombres reales de la base de datos y la tabla para las que desea detener la programación de ejecución de la tarea de estadísticas de columnas.

Puede eliminar la programación de estadísticas de las columnas mediante la operación de API [DeleteColumnStatisticsTaskSettings](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-DeleteColumnStatisticsTaskSettings) o AWS CLI. En el ejemplo siguiente se muestra cómo eliminar la programación para generar estadísticas de columnas mediante AWS Command Line Interface (AWS CLI).

```
aws glue delete-column-statistics-task-settings \
    --database-name 'database_name' \
    --table-name 'table_name'
```

------

# Generación de estadísticas de columnas bajo demanda
<a name="column-stats-on-demand"></a>

Puede ejecutar la tarea de estadísticas de columnas para la tarea de tablas de AWS Glue Data Catalog bajo demanda sin una programación establecida. Esta opción resulta útil para realizar un análisis ad hoc o cuando es necesario calcular las estadísticas de forma inmediata.

Siga estos pasos para generar las estadísticas de columnas bajo demanda para el catálogo de datos mediante la consola de AWS Glue o AWS CLI.

------
#### [ Consola de administración de AWS ]

**Generación de estadísticas de columnas mediante la consola**

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

1. Seleccione las tablas del Data Catalog.

1.  Seleccione una tabla de la lista. 

1. Seleccione **Generar estadísticas** en el menú **Acciones**.

   También puede elegir la opción **Generar**, **Generar bajo demanda** en la pestaña **Estadísticas de columnas**, en la sección inferior de la página de **Tabla**.

1. Siga los pasos 7 a 11 de [Generación de estadísticas de columnas según una programación](generate-column-stats.md) para generar estadísticas de columnas para la tabla.

1. En la página **Generar estadísticas**, especifique las siguientes opciones:   
![\[La captura de pantalla muestra las opciones disponibles para generar estadísticas de columnas.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/generate-column-stats.png)
   + **Todas las columnas**: elija esta opción para generar estadísticas para todas las columnas de la tabla.
   + **Columnas seleccionadas**: elija esta opción para generar estadísticas para columnas específicas. Puede seleccionar las columnas en la lista desplegable.
   + **Rol de IAM**: elija **Crear un nuevo rol de IAM** que tenga las políticas de permisos necesarias para ejecutar la tarea de generación de estadísticas de columnas. Elija Ver detalles del permiso para revisar la declaración de la política. También puede elegir un rol de IAM de la lista. Para obtener más información sobre los permisos necesarios, consulte [Requisitos previos para generar estadísticas de columnas](column-stats-prereqs.md).

     AWS Glue asume los permisos del rol que se especifican para generar estadísticas. 

     Para obtener más información sobre cómo proporcionar roles para AWS Glue, consulte [Políticas basadas en identidad para AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies).
   + (Opcional) A continuación, elija una configuración de seguridad para habilitar el cifrado en reposo de los registros.
   + **Filas de muestra**: elija solo un porcentaje específico de filas de la tabla para generar estadísticas. El valor predeterminado es Todas las filas. Utilice las flechas hacia arriba y hacia abajo para aumentar o disminuir el valor porcentual.
**nota**  
Se recomienda incluir todas las filas de la tabla para calcular estadísticas precisas. Utilice filas de muestra para generar estadísticas de columnas solo cuando los valores aproximados sean aceptables.

   Elija **Generar estadísticas** para ejecutar la tarea.

------
#### [ AWS CLI ]

Este comando activará la ejecución de una tarea de estadísticas de columnas para la tabla especificada. Debe proporcionar el nombre de la base de datos, el nombre de la tabla, un rol de IAM con permisos para generar estadísticas y, de forma opcional, proporcionar los nombres de las columnas y un porcentaje del tamaño de la muestra para el cálculo de las estadísticas.

```
aws glue start-column-statistics-task-run \ 
    --database-name 'database_name \ 
    --table-name 'table_name' \ 
    --role 'arn:aws:iam::123456789012:role/stats-role' \
    --column-name 'col1','col2'  \
    --sample-size 10.0
```

Este comando iniciará una tarea para generar estadísticas de columnas para la tabla especificada. 

------

## Actualización de estadísticas de columnas bajo demanda
<a name="update-column-stats-on-demand"></a>

 Mantener las estadísticas de las columnas actualizadas es fundamental para que el optimizador de consultas genere planes de ejecución eficientes, lo que garantiza un mejor rendimiento de las consultas, una reducción del consumo de recursos y un mejor rendimiento general del sistema. Este proceso es especialmente importante después de cambios importantes en los datos, como cargas masivas o modificaciones exhaustivas, que pueden hacer que las estadísticas existentes queden obsoletas. 

Debe ejecutar explícitamente la tarea **Generar estadísticas** desde la consola AWS Glue para actualizar las estadísticas de las columnas. El catálogo de datos no actualiza automáticamente las estadísticas.

Si no utiliza la característica de generación de estadísticas de AWS Glue en la consola, puede actualizar manualmente las estadísticas de las columnas mediante la operación de API [UpdateColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateColumnStatisticsForTable.html) o AWS CLI. En el siguiente ejemplo, se muestra cómo actualizar las estadísticas de las columnas mediante AWS CLI.

```
aws glue update-column-statistics-for-table --cli-input-json:

{
    "CatalogId": "111122223333",
    "DatabaseName": "database_name",
    "TableName": "table_name",
    "ColumnStatisticsList": [
        {
            "ColumnName": "col1",
            "ColumnType": "Boolean",
            "AnalyzedTime": "1970-01-01T00:00:00",
            "StatisticsData": {
                "Type": "BOOLEAN",
                "BooleanColumnStatisticsData": {
                    "NumberOfTrues": 5,
                    "NumberOfFalses": 5,
                    "NumberOfNulls": 0
                }
            }
        }
    ]
}
```

# Visualización de estadísticas de columnas
<a name="view-column-stats"></a>

Tras generar las estadísticas correctamente, el catálogo de datos almacena esta información para que los optimizadores basados en los costos de Amazon Athena y Amazon Redshift puedan tomar las decisiones óptimas al ejecutar consultas. Las estadísticas varían en función del tipo de columna.

------
#### [ Consola de administración de AWS ]

**Visualización de las estadísticas de columna de una tabla**
+ Tras ejecutar la tarea de estadísticas de columnas, la pestaña **Estadísticas de columnas** de la página de **Detalles de la tabla** muestra las estadísticas de la tabla.   
![\[La captura de pantalla muestra las columnas generadas a partir de la ejecución más reciente.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/view-column-stats.png)

  Están disponibles las siguientes estadísticas:
  + Nombre de columna: nombre de columna utilizado para generar estadísticas
  + Última actualización: fecha y hora en que se generaron las estadísticas
  + Longitud media: longitud media de los valores de la columna
  + Valores distintos: número total de valores distintos de la columna. Estimamos el número de valores distintos de una columna con un error relativo del 5 %.
  + Valor máximo: el valor más alto de la columna.
  + Valor mínimo: el valor más bajo de la columna. 
  + Longitud máxima: longitud del valor más alto de la columna.
  + Valores nulos: el número total de valores nulos en la columna.
  + Valores verdaderos: el número de valores verdaderos en la columna.
  + Valores falsos: el número de valores falsos en la columna.
  + numFiles: número total de archivos de la tabla. Este valor está disponible en la pestaña **Propiedades avanzadas**.

------
#### [ AWS CLI ]

En el siguiente ejemplo se muestra cómo recuperar estadísticas de columnas mediante AWS CLI.

```
aws glue get-column-statistics-for-table \
    --database-name database_name \
    --table-name table_name \
    --column-names <column_name>
```

 También puede ver las estadísticas de las columnas mediante la operación de API [GetColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetColumnStatisticsForTable.html). 

------

# Visualización de las ejecuciones de tareas de estadísticas de columnas
<a name="view-stats-run"></a>

Después de ejecutar una tarea de estadísticas de columnas, puede explorar los detalles de la ejecución de la tarea de una tabla mediante la consola AWS Glue, AWS CLI o mediante la operación [GetColumnStatisticsTaskRuns](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-GetColumnStatisticsTaskRun).

------
#### [ Console ]

**Para ver los detalles de ejecución de la tarea con estadísticas de columnas**

1. En la consola AWS Glue, seleccione **Tablas** en el catálogo de datos.

1. Seleccione una tabla con estadísticas de columnas.

1. En la página de **Detalles de la tabla**, seleccione **Estadísticas de columnas**.

1. Seleccione **Ver ejecuciones**.

   Puede ver información sobre todas las ejecuciones asociadas a la tabla especificada.  
![\[La captura de pantalla muestra las opciones disponibles para generar estadísticas de columnas.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/view-column-stats-task-runs.png)

------
#### [ AWS CLI ]

En el siguiente ejemplo, sustituya los valores de `DatabaseName` y `TableName` por el nombre real de la base de datos y la tabla.

```
aws glue get-column-statistics-task-runs --input-cli-json file://input.json
{
    "DatabaseName": "database_name",
    "TableName": "table_name"
}
```

------

# Detener la ejecución de la tarea de estadísticas de columnas
<a name="stop-stats-run"></a>

Puede detener la ejecución de una tarea de estadísticas de columnas para una tabla mediante la consola AWS Glue, AWS CLI o mediante la operación [StopColumnStatisticsTaskRun](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-StopColumnStatisticsTaskRun).

------
#### [ Console ]

**Para detener una tarea de estadísticas de columnas, ejecute**

1. En la consola AWS Glue, seleccione **Tablas** en el catálogo de datos.

1. Seleccione la tabla con la columna de La ejecución de la tarea de estadísticas está en curso.

1. En la página de **Detalles de la tabla**, seleccione **Estadísticas de columnas**.

1. Elija **Detener**.

   Si detiene la tarea antes de que se complete la ejecución, no se generarán las estadísticas de las columnas para la tabla.

------
#### [ AWS CLI ]

En el siguiente ejemplo, sustituya los valores de `DatabaseName` y `TableName` por el nombre real de la base de datos y la tabla.

```
aws glue stop-column-statistics-task-run --input-cli-json file://input.json
{
    "DatabaseName": "database_name",
    "TableName": "table_name"
}
```

------

# Eliminar estadísticas de columnas
<a name="delete-column-stats"></a>

Puede eliminar las estadísticas de las columnas mediante la operación de API [DeleteColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_DeleteColumnStatisticsForTable.html) o AWS CLI. En el ejemplo siguiente se muestra cómo eliminar estadísticas de columnas mediante AWS Command Line Interface (AWS CLI).

```
aws glue delete-column-statistics-for-table \
    --database-name 'database_name' \
    --table-name 'table_name' \
    --column-name 'column_name'
```

# Consideraciones y limitaciones
<a name="column-stats-notes"></a>

Las siguientes consideraciones y limitaciones se aplican a la generación de estadísticas de columnas.

**Consideraciones**
+ El uso del muestreo para generar estadísticas reduce el tiempo de ejecución, pero puede generar estadísticas inexactas.
+ El catálogo de datos no almacena versiones diferentes de las estadísticas.
+ Solo puede ejecutar una tarea de generación de estadísticas a la vez por tabla.
+ Si una tabla se cifra con la clave AWS KMS de cliente registrada en el catálogo de datos, AWS Glue utiliza la misma clave para cifrar las estadísticas.

**La tarea de estadísticas de las columnas permite generar estadísticas:**
+ Cuando el rol de IAM tiene permisos de tabla completos (IAM o Lake Formation).
+ Cuando el rol de IAM tiene permisos sobre la tabla mediante el modo de acceso híbrido de Lake Formation.

**La tarea de estadísticas de columnas no admite la generación de estadísticas para:**
+ Tablas con control de acceso basado en celdas de Lake Formation
+ Lagos de datos transaccionales: Fundación Linux Delta Lake, Apache Hudi
+ Tablas en bases de datos federadas: recursos compartidos de datos Hive metastore, Amazon Redshift
+ Columnas anidadas, matrices y tipos de datos de estructura.
+ Tabla que se comparte con usted desde otra cuenta

# Cifrado del Catálogo de datos
<a name="catalog-encryption"></a>

 Para proteger los metadatos en reposo que están almacenados en el AWS Glue Data Catalog, puede usar claves de cifrado administradas por AWS Key Management Service (AWS KMS). En **Configuración del Catálogo de datos**, puede activar el cifrado del Catálogo de datos para el nuevo catálogo. Puede activar o desactivar el cifrado del Catálogo de datos existente, según lo que necesite. Cuando está activado, AWS Glue cifra todos los metadatos nuevos que se escriben en el catálogo, mientras que los ya existentes permanecen sin cifrar. 

Para obtener información detallada sobre el cifrado del Catálogo de datos, consulte [Cifrado del Catálogo de datos](encrypt-glue-data-catalog.md).

# Cómo proteger su Catálogo de datos con Lake Formation
<a name="secure-catalog"></a>

 AWS Lake Formation es un servicio que facilita la configuración de un lago de datos seguro en AWS. Proporciona un lugar central para crear y administrar sus lagos de datos de forma segura mediante la definición de permisos detallados para controlar el acceso. Lake Formation usa el Catálogo de datos para almacenar y recuperar metadatos sobre su lago de datos, como las definiciones de tablas, la información de los esquemas y las configuraciones del control de acceso a los datos.

Puede registrar la ubicación de sus datos de Amazon S3 de la base de datos o la tabla de metadatos con Lake Formation y usarla para definir los permisos a nivel de metadatos en los recursos del Catálogo de datos. También puede usar Lake Formation para administrar los permisos de acceso al almacenamiento en los datos subyacentes que se guardan en Amazon S3 en nombre de los motores analíticos integrados.

Para obtener más información, consulte [¿Qué es AWS Lake Formation?](lake-formation/latest/dg/what-is-lake-formation.html).

# Trabajar con vistas AWS Glue Data Catalog en AWS Glue
<a name="catalog-views"></a>

 Puede crear y gestionar vistas en AWS Glue Data Catalog, conocidas comúnmente como vistas AWS Glue Data Catalog. Estas vistas son útiles porque admiten varios motores de consultas SQL, lo que le permite acceder a la misma vista en diferentes servicios AWS, como Amazon Athena, Amazon Redshift y AWS Glue. Puede utilizar vistas basadas en Apache Iceberg, Apache Hudi y Delta Lake. 

 Al crear una vista en el Catálogo de datos, puede usar concesiones de recursos y controles de acceso basados en etiquetas en AWS Lake Formation para otorgar acceso a dicha vista. Al utilizar este método de control de acceso, no es necesario configurar permisos adicionales para las tablas referenciadas al crear la vista. Este método de concesión de permisos se denomina semántica del definidor y estas vistas se denominan vistas del definidor. Para obtener más información sobre el control de acceso en AWS Lake Formation, consulte la sección [Concesión y revocación de permisos en los recursos del Catálogo de datos](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html) de en la Guía para desarrolladores de AWS Lake Formation. 

 Las vistas del Catálogo de datos son útiles para los siguientes casos de uso: 
+  **Control de acceso detallado**: puede crear una vista que restrinja el acceso a los datos en función de los permisos que necesite el usuario. Por ejemplo, puede usar las vistas del Catálogo de datos para evitar que el personal que no trabaje en el departamento de Recursos Humanos (RR.HH.) vea información de identificación personal (PII). 
+  **Definición de vista completa**: al aplicar determinados filtros a la vista del Catálogo de datos, se asegura de que los registros de datos disponibles en la vista estén siempre completos. 
+  **Seguridad mejorada**: La definición de la consulta utilizada para crear la vista debe estar completa, lo que hace que las vistas del Catálogo de datos sean menos susceptibles a comandos SQL de actores maliciosos. 
+  **Uso compartido de datos sencillo**: Comparta datos con otras cuentas de AWS sin mover los datos, utilizando el uso compartido de datos entre cuentas en AWS Lake Formation. 

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

 Puede crear vistas del Catálogo de datos utilizando AWS CLI y scripts ETL de AWS Glue usando Spark SQL. La sintaxis para crear una vista del Catálogo de datos incluye especificar el tipo de vista como `MULTI DIALECT` y el predicado `SECURITY` como `DEFINER`, lo que indica una vista de definidor. 

 Ejemplo de instrucción SQL para crear una vista en el Catálogo de datos: 

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

 Después de crear una vista del Catálogo de datos, puede utilizar un rol de IAM con el permiso AWS Lake Formation `SELECT` en la vista para consultarla desde servicios como Amazon Athena, Amazon Redshift o trabajos ETL de AWS Glue. No es necesario conceder acceso a las tablas subyacentes a las que se hace referencia en la vista. 

 Para obtener más información sobre la creación y configuración de vistas del Catálogo de datos, consulte [Creación de vistas del Catálogo de datos de AWS Glue](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html) en la Guía para desarrolladores de AWS Lake Formation. 

## Operaciones de vista admitidas
<a name="catalog-supported-view-operations"></a>

 Los siguientes fragmentos de comandos muestran varias formas de trabajar con las vistas del Catálogo de datos: 

 **CREATE VIEW** 

 Crea una vista del Catálogo de datos. El siguiente es un ejemplo que muestra cómo crear una vista a partir de una tabla existente: 

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

 **ALTER VIEW** 

 Sintaxis disponible: 

```
ALTER VIEW view_name [FORCE] ADD DIALECT AS query
ALTER VIEW view_name [FORCE] UPDATE DIALECT AS query
ALTER VIEW view_name DROP DIALECT
```

 Puede utilizar la opción `FORCE ADD DIALECT` para forzar la actualización del esquema y los subobjetos según el nuevo dialecto del motor. Tenga en cuenta que hacer esto puede provocar errores de consulta si no utiliza también `FORCE` para actualizar otros dialectos del motor. A continuación se muestra un ejemplo: 

```
ALTER VIEW catalog_view FORCE ADD DIALECTAS
SELECT order_date, sum(totalprice) AS priceFROM source_tableGROUP BY orderdate;
```

 A continuación se muestra cómo modificar una vista para actualizar el dialecto: 

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

 **DESCRIBE VIEW** 

 Sintaxis disponible para describir una vista: 

 `SHOW COLUMNS {FROM|IN} view_name [{FROM|IN} database_name]`: Si el usuario tiene los permisos AWS Glue y AWS Lake Formation necesarios para describir la vista, puede enumerar las columnas. A continuación se muestran un par de comandos de ejemplo para mostrar columnas: 

```
SHOW COLUMNS FROM my_database.source_table;    
SHOW COLUMNS IN my_database.source_table;
```

 `DESCRIBE view_name`: Si el usuario tiene los permisos AWS Glue y AWS Lake Formation necesarios para describir la vista, puede enumerar las columnas de la vista junto con sus metadatos. 

 **DROP VIEW** 

 Sintaxis disponible: 

```
DROP VIEW [ IF EXISTS ] view_name
```

 El siguiente ejemplo muestra una instrucción `DROP` que comprueba si existe una vista antes de eliminarla: 

```
DROP VIEW IF EXISTS catalog_view;
```

 `SHOW CREATE VIEW view_name`: Muestra la instrucción SQL que crea la vista especificada. El siguiente es un ejemplo que muestra cómo crear una vista en el catálogo de datos: 

```
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 las vistas en el catálogo, como vistas regulares, vistas multidialecto (MDV) y MDV sin dialecto de Spark. La sintaxis disponible es la siguiente: 

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

 A continuación se muestra un comando de ejemplo para mostrar vistas: 

```
SHOW VIEWS IN marketing_analytics LIKE 'catalog_view*';
```

 Para obtener más información sobre la creación y configuración de vistas de catálogos de datos, consulte [Creación de vistas de Catálogos de datos de AWS Glue](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html) en la Guía para desarrolladores de AWS Lake Formation. 

## Consulta de la vista del Catálogo de datos
<a name="catalog-view-query"></a>

 Tras crear una vista del Catálogo de datos, puede consultar la vista. El rol de IAM configurado en sus trabajos AWS Glue debe tener el permiso **SELECT** de Lake Formation en la vista del Catálogo de datos. No es necesario conceder acceso a las tablas subyacentes a las que se hace referencia en la vista. 

 Una vez que haya configurado todo, podrá consultar la vista. Por ejemplo, puede ejecutar la siguiente consulta para acceder a una vista. 

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

## Limitaciones
<a name="catalog-view-limitations"></a>

 Tenga en cuenta las siguientes limitaciones cuando utilice las vistas de catálogo de datos. 
+  Solo puede crear vistas del Catálogo de datos con la versión 5.0 de AWS Glue o superior. 
+  El creador de la vista en el Catálogo de datos debe tener acceso a `SELECT` a las tablas base subyacentes a las que accede la vista. La creación de la vista en el Catálogo de datos falla si una tabla base específica tiene filtros de Lake Formation impuestos al rol del creador. 
+  Las tablas base no deben tener el permiso de lago de datos `IAMAllowedPrincipals` en AWS 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 AWS Lake Formation. Si la tabla no está registrada, se produce el error `Multi Dialect views may only reference AWS Lake Formation managed tables`. Para obtener información sobre cómo registrar ubicaciones de Amazon S3 en AWS Lake Formation, consulte [Registrar una ubicación de Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html) en la Guía para desarrolladores de AWS Lake Formation. 
+  Solo puede crear vistas del catálogo de datos `PROTECTED`. No se admiten las vistas `UNPROTECTED`. 
+  No puede hacer referencia a tablas en otra cuenta de AWS en una definición de vista del Catálogo de datos. Tampoco se puede hacer referencia a una tabla de la misma cuenta que esté en una región distinta. 
+  Para compartir datos entre cuentas o regiones, toda la vista debe compartirse entre cuentas y regiones, mediante enlaces de recursos AWS Lake Formation. 
+  No se admiten las funciones definidas por el usuario (UDF). 
+  No puede hacer referencia a otras vistas en las vistas del catálogo de datos. 

# Cómo acceder al Catálogo de datos
<a name="access_catalog"></a>

 Puede usar el AWS Glue Data Catalog (Catálogo de datos) para detectar y comprender sus datos. El Catálogo de datos proporciona una forma coherente de mantener las definiciones de los esquemas, los tipos de datos, las ubicaciones y otros metadatos. Puede acceder al Catálogo de datos mediante los siguientes métodos:
+ Consola de AWS Glue: Puede acceder al Catálogo de datos y administrarlo por medio de la consola de AWS Glue, una interfaz de usuario en línea. La consola le permite explorar y buscar bases de datos, tablas y sus metadatos asociados, así como crear, actualizar y eliminar definiciones de metadatos. 
+ Rastreador de AWS Glue: Los rastreadores son programas que escanean automáticamente los orígenes de datos y completan el Catálogo de datos con metadatos. Puede crear y ejecutar rastreadores para detectar y catalogar datos de diversas fuentes, como Amazon S3, Amazon RDS, Amazon DynamoDB, Amazon CloudWatch y bases de datos relacionales que cumplen los requisitos de JDBC, como MySQL y PostgreSQL, así como de varias fuentes ajenas a AWS, como Snowflake y Google BigQuery.
+ API de AWS Glue: Puede acceder al Catálogo de datos por medio de programación mediante las API de AWS Glue. Estas API le permiten interactuar con el Catálogo de datos por medio de programación, lo que permite la automatización y la integración con otras aplicaciones y servicios. 
+ AWS Command Line Interface (AWS CLI): Puede usar la AWS CLI para acceder al Catálogo de datos y administrarlo desde la línea de comandos. La CLI proporciona comandos para crear, actualizar y eliminar definiciones de metadatos, así como para consultar y recuperar información de metadatos. 
+ Integración con otros servicios de AWS: El Catálogo de datos se integra con otros servicios de AWS, lo que le permite acceder a los metadatos almacenados en el Catálogo y usarlos. Por ejemplo, puede usar Amazon Athena para consultar orígenes de datos mediante los metadatos del Catálogo de datos y usar AWS Lake Formation para administrar el acceso a los datos y la gobernanza de los recursos del Catálogo. 

**Topics**
+ [Conexión al catálogo de datos mediante el punto de conexión de REST de AWS Glue Iceberg](connect-glu-iceberg-rest.md)
+ [Conexión al catálogo de datos mediante el punto de conexión de la extensión de REST de AWS Glue Iceberg](connect-glue-iceberg-rest-ext.md)
+ [Especificaciones de las API de REST de AWS Glue para Apache Iceberg](iceberg-rest-apis.md)
+ [Conexión al catálogo de datos desde una aplicación Spark independiente](connect-gludc-spark.md)
+ [Asignación de datos entre Amazon Redshift y Apache Iceberg](data-mapping-rs-iceberg.md)
+ [Consideraciones y limitaciones al utilizar las API del catálogo de REST de Iceberg AWS Glue](limitation-glue-iceberg-rest-api.md)

# Conexión al catálogo de datos mediante el punto de conexión de REST de AWS Glue Iceberg
<a name="connect-glu-iceberg-rest"></a>

 El punto de conexión de REST de Iceberg de AWS Glue admite las operaciones de API indicadas en la especificación REST de Apache Iceberg. Si usa un cliente de REST de Iceberg, puede conectar la aplicación que se ejecuta en un motor de análisis al catálogo de REST hospedado en el catálogo de datos.

 El punto de conexión es compatible con las dos especificaciones de la tabla de Apache Iceberg, v1 y v2; de forma predeterminada, se usará v2. Si utiliza la especificación v1 de la tabla de Iceberg, debe especificar v1 en la llamada a la API. Mediante la operación de API, puede acceder a las tablas de Iceberg que se guardan tanto en el almacenamiento de objetos de Amazon S3 como en el almacenamiento de tablas de Amazon S3. 

**Configuración de puntos de conexión**

Puede acceder al catálogo de REST de AWS Glue Iceberg con el punto de conexión del servicio. Consulte la [guía de referencia de puntos de conexión de servicio de AWS Glue](https://docs.aws.amazon.com/general/latest/gr/glue.html#glue_region) para el punto de conexión específico de la región. Por ejemplo, si conecta AWS Glue a la región us-east-1, debe configurar la propiedad URI del punto de conexión como se indica a continuación: 

```
Endpoint : https://glue.us-east-1.amazonaws.com/iceberg
```

**Propiedades de configuración adicionales**: cuando se utiliza el cliente Iceberg para conectar un motor de análisis como Spark al punto de conexión del servicio, es necesario especificar las siguientes propiedades de configuración de la aplicación:

```
catalog_name = "mydatacatalog"
aws_account_id = "123456789012"
aws_region = "us-east-1"
spark = SparkSession.builder \
    ... \
    .config("spark.sql.defaultCatalog", catalog_name) \
    .config(f"spark.sql.catalog.{catalog_name}", "org.apache.iceberg.spark.SparkCatalog") \
    .config(f"spark.sql.catalog.{catalog_name}.type", "rest") \
    .config(f"spark.sql.catalog.{catalog_name}.uri", "https://glue.{aws_region}.amazonaws.com/iceberg") \
    .config(f"spark.sql.catalog.{catalog_name}.warehouse", "{aws_account_id}") \
    .config(f"spark.sql.catalog.{catalog_name}.rest.sigv4-enabled", "true") \
    .config(f"spark.sql.catalog.{catalog_name}.rest.signing-name", "glue") \    
    .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .getOrCreate()
```

El punto de conexión de Iceberg de AWS Glue, ` https://glue.us-east-1.amazonaws.com/iceberg`, admite las siguientes API de REST de Iceberg:
+ GetConfig
+ ListNamespaces
+ CreateNamespace
+ LoadNamespaceMetadata
+ UpdateNamespaceProperties
+ DeleteNamespace
+ ListTables
+ CreateTable
+ LoadTable
+ TableExists
+ UpdateTable
+ DeleteTable

## Parámetros de prefijo y ruta de catálogo
<a name="prefix-catalog-path-parameters"></a>

Las API del catálogo de REST de Iceberg tienen un prefijo de formato libre en las URL de solicitud. Por ejemplo, la llamada a la API `ListNamespaces` usa el formato URL`GET/v1/{prefix}/namespaces`. El prefijo AWS Gluesiempre sigue la estructura `/catalogs/{catalog}` para garantizar que la ruta de REST alinee la jerarquía de varios catálogos de AWS Glue. El parámetro `{catalog}` de ruta se puede derivar en función de las siguientes reglas:


| **Patrón de acceso** |  **Estilo de ID de catálogo de Glue**  |  **Estilo de prefijo**  | **Ejemplo de ID de catálogo predeterminado** |  **Ejemplo de ruta de REST**  | 
| --- | --- | --- | --- | --- | 
|  Acceda al catálogo predeterminado en la cuenta actual  | No obligatorio | : |  no aplicable  |  GET /v1/catalogs/:/namespaces  | 
|  Acceso al catálogo predeterminado en una cuenta específica  | accountID | accountID | 111122223333 | GET /v1/catalogs/111122223333/namespaces | 
|  Acceda al catálogo anidado en la cuenta actual  |  catalog1/catalog2  |  catalog1/catalog2  |  rmscatalog1:db1  |  GET /v1/catalogs/rmscatalog1:db1/namespaces  | 
|  Acceso a un catálogo anidado en una cuenta específica  |  accountId:catalog1/catalog2  |  accountId:catalog1/catalog2  |  123456789012/rmscatalog1:db1  |  GET /v1/catalogs/123456789012:rmscatalog1:db1/namespaces  | 

Esta asignación de identificador de catálogo a prefijo solo es necesaria cuando se llama directamente a las API de REST. Si trabaja con las API del catálogo REST de Iceberg de AWS Glue a través de un motor, debe especificar el ID del catálogo de AWS Glue en el parámetro `warehouse` de la configuración de la API del catálogo REST de Iceberg o en el parámetro `glue.id` de la configuración de la API de extensiones de AWS Glue. Por ejemplo, vea cómo puede usarlo con EMR Spark en [Use an Iceberg clúster with Spark](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-spark-cluster.html).

## Parámetro de ruta de espacio de nombres
<a name="ns-path-param"></a>

La ruta de API del catálogo de REST de Iceberg para espacios de nombres puede tener varios niveles. Sin embargo, AWS Glue solo admite espacios de nombres de un solo nivel. Para acceder a un espacio de nombres en una jerarquía de catálogos de varios niveles, puede conectarse a un catálogo de varios niveles situado encima del espacio de nombres para hacer referencia al espacio de nombres. Esto permite a cualquier motor de consultas que admita la notación de tres partes de `catalog.namespace.table` acceder a los objetos en la jerarquía del catálogo de varios niveles de AWS Glue sin problemas de compatibilidad, en comparación con el uso del espacio de nombres de varios niveles.

# Conexión al catálogo de datos mediante el punto de conexión de la extensión de REST de AWS Glue Iceberg
<a name="connect-glue-iceberg-rest-ext"></a>

 El punto de conexión de la extensión de REST de AWS Glue Iceberg proporciona API adicionales, que no están presentes en la especificación REST de Apache Iceberg; además, otorga funciones de planificación de escaneo del servidor. Estas API adicionales se utilizan al acceder a las tablas que se guardan en el almacenamiento gestionado de Amazon Redshift. El punto de conexión es accesible desde una aplicación que utiliza extensiones AWS Glue Data Catalog de Apache Iceberg. 

**Configuración del punto de conexión**: se puede acceder a un catálogo con tablas en el almacenamiento administrado de Redshift mediante el punto de conexión del servicio. Consulte la [guía de referencia de puntos de conexión de servicio de AWS Glue](https://docs.aws.amazon.com/general/latest/gr/glue.html#glue_region) para el punto de conexión específico de la región. Por ejemplo, si conecta AWS Glue a la región us-east-1, debe configurar la propiedad URI del punto de conexión como se indica a continuación:

```
Endpoint : https://glue.us-east-1.amazonaws.com/extensions
```

```
catalog_name = "myredshiftcatalog"
aws_account_id = "123456789012"
aws_region = "us-east-1"
spark = SparkSession.builder \
    .config("spark.sql.defaultCatalog", catalog_name) \
    .config(f"spark.sql.catalog.{catalog_name}", "org.apache.iceberg.spark.SparkCatalog") \
    .config(f"spark.sql.catalog.{catalog_name}.type", "glue") \
    .config(f"spark.sql.catalog.{catalog_name}.glue.id", "{123456789012}:redshiftnamespacecatalog/redshiftdb") \
    .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .getOrCreate()
```

# Especificaciones de las API de REST de AWS Glue para Apache Iceberg
<a name="iceberg-rest-apis"></a>

Esta sección contiene especificaciones sobre el catálogo REST Iceberg de AWS Glue y las API de extensión de AWS Glue, así como consideraciones sobre el uso de estas API. 

Las solicitudes de API a los puntos de conexión de AWS Glue Data Catalog se autentican mediante AWS Signature Version 4 (SigV4). Consulte la sección de [solicitudes de API de la versión de firma 4 de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) para obtener más información sobre SigV4 de AWS.

Al acceder al punto de conexión del servicio AWS Glue y a los metadatos de AWS Glue, la aplicación asume un rol de IAM que requiere una acción de IAM `glue:getCatalog`. 

El acceso al Catálogo de Datos y sus objetos puede gestionarse mediante IAM, Lake Formation o permisos en modo híbrido de Lake Formation.

Los catálogos federados en el catáogo de datos tienen ubicaciones de datos registradas en Lake Formation. Lake Formation trabaja con el catálogo de datos y proporciona permisos similares a los de una base de datos para administrar el acceso de los usuarios a los objetos del catálogo de datos. 

Puede usar IAM, AWS Lake Formation o los permisos de modo híbrido de Lake Formation para administrar el acceso al catálogo de datos predeterminado y sus objetos. 

Para crear, insertar o eliminar datos en objetos administrados por Lake Formation, debes configurar permisos específicos para el usuario o rol de IAM. 
+ CREATE\$1CATALOG: es necesario para crear catálogos 
+ CREATE\$1DATABASE: es necesario para crear bases de datos
+ CREATE\$1TABLE: es necesario para crear tablas
+ DELETE: es necesario para eliminar datos de una tabla
+ DESCRIBE: es necesario para leer los metadatos 
+ DROP: es necesario para eliminar una tabla o base de datos
+ INSERT: es necesario cuando la entidad principal debe insertar datos en una tabla
+ SELECT: es necesario cuando la entidad principal necesita seleccionar datos de una tabla

Para obtener más información, consulte [Lake Formation permissions reference](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-reference.html) en la Guía para desarrolladores de AWS Lake Formation.

# GetConfig
<a name="get-config"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | GetConfig | 
| Tipo |  API del catálogo de REST de Iceberg  | 
| Ruta de REST |  GET /iceberg/v1/config  | 
| Acción de IAM |  glue:GetCatalog  | 
| Permisos de Lake Formation | No aplicable | 
| Evento de CloudTrail |  glue:GetCatalog  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L67 | 

****Consideraciones y limitaciones****
+ El parámetro de consulta `warehouse` debe establecerse en el ID del catálogo AWS Glue. Si no se establece, se utiliza el catálogo raíz de la cuenta actual para devolver la respuesta. Para obtener más información, consulte [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).

# GetCatalog
<a name="get-catalog"></a>


**Información general**  

|  |  | 
| --- |--- |
| nombre de operación | GetCatalog | 
| Tipo |  API de extensión AWS Glue  | 
| Ruta de REST |  GET/extensions/v1/catalogs/\$1catalog\$1  | 
| Acción de IAM |  glue:GetCatalog  | 
| Permisos de Lake Formation | DESCRIBE | 
| Evento de CloudTrail |  glue:GetCatalog  | 
| Definición de API abierta | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L40 | 

****Consideraciones y limitaciones****
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).

# ListNamespaces
<a name="list-ns"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | ListNamespaces | 
| Tipo |  API del catálogo de REST de Iceberg  | 
| Ruta de REST |  GET/iceberg/v1/catalogs/\$1catalog\$1/namespaces  | 
| Acción de IAM |  glue:GetDatabase  | 
| Permisos de Lake Formation | ALL, DESCRIBE, SELECT | 
| Evento de CloudTrail |  glue:GetDatabase  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L205 | 

****Consideraciones y limitaciones****
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo se muestran los espacios de nombres del siguiente nivel. Para listar los espacios de nombres en niveles más profundos, especifique el ID del catálogo anidado en el parámetro de ruta del catálogo.

# CreateNamespace
<a name="create-ns"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | CreateNamespace | 
| Tipo |  API del catálogo de REST de Iceberg  | 
| Ruta de REST |  POST/iceberg/v1/catalogs/\$1catalog\$1/namespaces  | 
| Acción de IAM |  glue:CreateDatabase  | 
| Permisos de Lake Formation | ALL, DESCRIBE, SELECT | 
| Evento de CloudTrail |  glue:CreateDatabase  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L256 | 

****Consideraciones y limitaciones****
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo se puede crear un espacio de nombres de un solo nivel. Para crear un espacio de nombres de varios niveles, debe crear cada nivel de forma iterativa y conectarse al nivel mediante el parámetro de ruta del catálogo.

# StartCreateNamespaceTransaction
<a name="start-create-ns-transaction"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | StartCreateNamespaceTransaction | 
| Tipo |  API de extensiones AWS Glue  | 
| Ruta de REST |  POST/extensions/v1/catalogs/\$1catalog\$1/namespaces  | 
| Acción de IAM |  glue:CreateDatabase  | 
| Permisos de Lake Formation | ALL, DESCRIBE, SELECT | 
| Evento de CloudTrail |  glue:CreateDatabase  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L256 | 

****Consideraciones y limitaciones****
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede crear un espacio de nombres de un solo nivel. Para crear espacios de nombres de varios niveles, debe crear cada nivel de forma iterativa y conectarse al nivel mediante el parámetro de ruta del catálogo.
+ La API es asíncrona y devuelve un identificador de transacción que puede usar para realizar un seguimiento mediante la llamada a la API `CheckTransactionStatus`.
+  Puedes llamar a esta API solo si la llamada a la API `GetCatalog` contiene el parámetro `use-extensions=true` en la respuesta. 

## LoadNamespaceMetadata
<a name="load-ns-metadata"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | LoadNamespaceMetadata | 
| Tipo |  API del catálogo de REST de Iceberg  | 
| Ruta de REST |  GET/iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1  | 
| Acción de IAM |  glue:GetDatabase  | 
| Permisos de Lake Formation | ALL, DESCRIBE, SELECT | 
| Evento de CloudTrail |  glue:GetDatabase  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L302 | 

****Consideraciones y limitaciones****
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).

## UpdateNamespaceProperties
<a name="w2aac20c29c16c21c13"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | UpdateNamespaceProperties | 
| Tipo |  API del catálogo de REST de Iceberg  | 
| Ruta de REST |  POST /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/properties  | 
| Acción de IAM |  glue:UpdateDatabase  | 
| Permisos de Lake Formation | ALL, ALTER | 
| Evento de CloudTrail |  glue:UpdateDatabase  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L400 | 

****Consideraciones y limitaciones****
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).

# DeleteNamespace
<a name="delete-ns"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | DeleteNamespace | 
| Tipo |  API del catálogo de REST de Iceberg  | 
| Ruta de REST |  DELETE/iceberg/v1/catalogs/\$1catalog\$1/namespces/\$1ns\$1  | 
| Acción de IAM |  glue:DeleteDatabase  | 
| Permisos de Lake Formation | ALL, DROP | 
| Evento de CloudTrail |  glue:DeleteDatabase  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L365 | 

****Consideraciones y limitaciones****
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).
+ Si hay objetos en la base de datos, la operación fallará.
+ La API es asíncrona y devuelve un identificador de transacción que puede usar para realizar un seguimiento mediante la llamada a la API `CheckTransactionStatus`.
+  La API solo se puede usar si la llamada a la API `GetCatalog` indica `use-extensions=true` en la respuesta. 

# StartDeleteNamespaceTransaction
<a name="start-delete-ns-transaction"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | StartDeleteNamespaceTransaction | 
| Tipo |  API de extensiones AWS Glue  | 
| Ruta de REST |  DELETE /extensions/v1/catalogs/\$1catalog\$1/namespces/\$1ns\$1  | 
| Acción de IAM |  glue:DeleteDatabase  | 
| Permisos de Lake Formation | ALL, DROP | 
| Evento de CloudTrail |  glue:DeleteDatabase  | 
| Definición de API abierta | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L85 | 

****Consideraciones y limitaciones****
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).
+ Si hay objetos en la base de datos, la operación fallará.
+ La API es asíncrona y devuelve un identificador de transacción que puede usar para realizar un seguimiento mediante la llamada a la API `CheckTransactionStatus`.
+  La API solo se puede usar si la llamada a la API `GetCatalog` indica `use-extensions=true` en la respuesta. 

# ListTables
<a name="list-tables"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | ListTables | 
| Tipo |  API del catálogo de REST de Iceberg  | 
| Ruta de REST |  GET /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables  | 
| Acción de IAM |  glue:GetTable  | 
| Permisos de Lake Formation | ALL, SELECT, DESCRIBE | 
| Evento de CloudTrail |  glue:GetTable  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L463 | 

****Consideraciones y limitaciones****
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).
+ Se listarán todas las tablas, incluidas las que no son de Iceberg. Para determinar si una tabla se puede cargar como una tabla de Iceberg o no, llame a la operación `LoadTable`.

# CreateTable
<a name="create-table"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | CreateTable | 
| Tipo |  API del catálogo de REST de Iceberg  | 
| Ruta de REST |  GET /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables  | 
| Acción de IAM |  glue:CreateTable  | 
| Permisos de Lake Formation | ALL, CREATE\$1TABLE | 
| Evento de CloudTrail |  glue:CreateTable  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L497 | 

****Consideraciones y limitaciones****
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).
+ `CreateTable` con almacenamiento provisional no es compatible. Si se especifica el parámetro de consulta `stageCreate`, la operación fallará. Esto significa que no se admite una operación como `CREATE TABLE AS SELECT`, y el usuario debe utilizar una combinación de `CREATE TABLE` y `INSERT INTO` como solución alternativa.
+ La operación de la API `CreateTable` no admite la opción `state-create = TRUE`.

# StartCreateTableTransaction
<a name="start-create-table-transaction"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | CreateTable | 
| Tipo |  API de extensiones AWS Glue  | 
| Ruta de REST |  POST/extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables  | 
| Acción de IAM |  glue:CreateTable  | 
| Permisos de Lake Formation | ALL, CREATE\$1TABLE | 
| Evento de CloudTrail |  glue:CreateTable  | 
| Definición de API abierta | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L107 | 

****Consideraciones y limitaciones****
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).
+ `CreateTable` con almacenamiento provisional no es compatible. Si se especifica el parámetro de consulta `stageCreate`, la operación fallará. Esto significa que no se admite una operación como `CREATE TABLE AS SELECT`, y el usuario debe utilizar una combinación de `CREATE TABLE` y `INSERT INTO` como solución alternativa.
+ La API es asíncrona y devuelve un identificador de transacción que puede usar para realizar un seguimiento mediante la llamada a la API `CheckTransactionStatus`.
+  La API solo se puede usar si la llamada a la API `GetCatalog` indica `use-extensions=true` en la respuesta. 

# LoadTable
<a name="load-table"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | LoadTable | 
| Tipo |  API del catálogo de REST de Iceberg  | 
| Ruta de REST |  GET /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Acción de IAM |  glue:GetTable  | 
| Permisos de Lake Formation | ALL, SELECT, DESCRIBE | 
| evento de CloudTrail |  glue:GetTable  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L616 | 

**Consideraciones**
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).
+ `CreateTable` con almacenamiento provisional no es compatible. Si se especifica el parámetro de consulta `stageCreate`, la operación fallará. Esto significa que no se admite una operación como `CREATE TABLE AS SELECT`, y el usuario debe utilizar una combinación de `CREATE TABLE` y `INSERT INTO` como solución alternativa.
+ La API es asíncrona y devuelve un identificador de transacción que puede usar para realizar un seguimiento mediante la llamada a la API `CheckTransactionStatus`.
+  La API solo se puede usar si la llamada a la API `GetCatalog` indica `use-extensions=true` en la respuesta. 

# ExtendedLoadTable
<a name="extended-load-table"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | LoadTable | 
| Tipo |  API de extensiones AWS Glue  | 
| Ruta de REST |  GET /extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Acción de IAM |  glue:GetTable  | 
| Permisos de Lake Formation | ALL, SELECT, DESCRIBE | 
| Evento de CloudTrail |  glue:GetTable  | 
| Definición de API abierta | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L134 | 

**Consideraciones**
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).
+ Solo se admite el modo `all` para el parámetro de consulta de instantáneas.
+ En comparación con la API `LoadTable`, la API `ExtendedLoadTable` se diferencia en los siguientes aspectos:
  +  No exige estrictamente que todos los campos estén disponibles.
  + Proporciona los siguientes parámetros adicionales en el campo de configuración de la respuesta:   
**Parámetros adicionales**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/extended-load-table.html)

# PreplanTable
<a name="preplan-table"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | PreplanTable | 
| Tipo |  API de extensiones AWS Glue  | 
| Ruta de REST |  POST /extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1/preplan  | 
| Acción de IAM |  glue:GetTable  | 
| Permisos de Lake Formation | ALL, SELECT, DESCRIBE | 
| Evento de CloudTrail |  glue:GetTable  | 
| Definición de API abierta | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L211 | 

**Consideraciones**
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).
+ El llamante de esta API siempre debe determinar si quedan resultados por recuperar en función del token de página. Es posible obtener una respuesta con un elemento de página vacío pero con un token de paginación si el servidor sigue procesando pero no puede generar ningún resultado en el tiempo de respuesta dado.
+  Puede usar esta API solo si la respuesta de la API `ExtendedLoadTable` contiene `aws.server-side-capabilities.scan-planning=true`. 

# PlanTable
<a name="plan-table"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | PlanTable | 
| Tipo |  API de extensiones AWS Glue  | 
| Ruta de REST |  POST /extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1/plan  | 
| Acción de IAM |  glue:GetTable  | 
| Permisos de Lake Formation | ALL, SELECT, DESCRIBE | 
| Evento de CloudTrail |  glue:GetTable  | 
| Definición de API abierta | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L243 | 

**Consideraciones**
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).
+ El llamante de esta API siempre debe determinar si quedan resultados por recuperar en función del token de página. Es posible obtener una respuesta con un elemento de página vacío pero con un token de paginación si el servidor sigue procesando pero no puede generar ningún resultado en el tiempo de respuesta dado.
+  Puede usar esta API solo si la respuesta de la API `ExtendedLoadTable` contiene `aws.server-side-capabilities.scan-planning=true`. 

# TableExists
<a name="table-exists"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | TableExists | 
| Tipo |  API del catálogo de REST de Iceberg  | 
| Ruta de REST |  HEAD/iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Acción de IAM |  glue:GetTable  | 
| Permisos de Lake Formation | ALL, SELECT, DESCRIBE | 
| Evento de CloudTrail |  glue:GetTable  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L833 | 

**Consideraciones**
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).

# UpdateTable
<a name="update-table"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | UpdateTable | 
| Tipo |  API del catálogo de REST de Iceberg  | 
| Ruta de REST |  POST /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Acción de IAM |  glue:UpdateTable  | 
| Permisos de Lake Formation | ALL, ALTER | 
| Evento de CloudTrail |  glue:UpdateTable  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L677 | 

**Consideraciones**
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).

# StartUpdateTableTransaction
<a name="start-update-table-transaction"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | StartUpdateTableTransaction | 
| Tipo | API de extensión AWS Glue | 
| Ruta de REST |  POST/extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Acción de IAM |  glue:UpdateTable  | 
| Permisos de Lake Formation |  ALL, ALTER  | 
| Evento de CloudTrail |  glue:UpdateTable  | 
| Definición de API abierta | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L154 | 

**Consideraciones**
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).
+ La API es asíncrona y devuelve un identificador de transacción que puede usar para realizar un seguimiento mediante la llamada a la API `CheckTransactionStatus`.
+  También se puede realizar una operación `RenamTable` a través de esta API. Cuando eso ocurre, la persona que llama también debe tener el permiso Glue:CreateTable o LakeFormation CREATE\$1TABLE para cambiar el nombre de la tabla. 
+  Puede usar esta API solo si la respuesta de la API `ExtendedLoadTable` contiene `aws.server-side-capabilities.scan-planning=true`. 

# DeleteTable
<a name="delete-table"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | DeleteTable | 
| Tipo |  API del catálogo de REST de Iceberg  | 
| Ruta de REST |  DELETE/iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Acción de IAM |  glue:DeleteTable  | 
| Permisos de Lake Formation | ALL, DROP | 
| Evento de CloudTrail |  glue:DeleteTable  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L793 | 

**Consideraciones**
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).
+ La operación de API `DeleteTable` admite una opción de purga. Si la purga está establecida en `true`, los datos de la tabla se eliminan; de lo contrario, no se eliminarán. En el caso de las tablas de Amazon S3, la operación no elimina los datos de las tablas. La operación devuelve un error cuando la tabla está almacenada en Amazon S3 y `purge = TRUE,`. 

  En el caso de las tablas que se guardan en el almacenamiento gestionado de Amazon Redshift, la operación eliminará los datos de la tabla, de forma similar al comportamiento `DROP TABLE` de Amazon Redshift. La operación devuelve un error cuando la tabla está almacenada en Amazon Redshift y `purge = FALSE`.
+ `purgeRequest=true` no se admite. 

# StartDeleteTableTransaction
<a name="start-delete-table-transaction"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | StartDeleteTableTransaction | 
| Tipo |  API de extensiones AWS Glue  | 
| Ruta de REST |  DELETE /extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Acción de IAM |  glue:DeleteTable  | 
| Permisos de Lake Formation | ALL, DROP | 
| Evento de CloudTrail |  glue:DeleteTable  | 
| Definición de API abierta | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L793 | 

**Consideraciones**
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Solo puede especificar un espacio de nombres de un solo nivel en el parámetro de ruta de REST. Para obtener más información, consulte la sección [Parámetro de ruta de espacio de nombres](connect-glu-iceberg-rest.md#ns-path-param).
+ `purgeRequest=false` no se admite. 
+  La API es asíncrona y devuelve un identificador de transacción que se puede rastrear mediante `CheckTransactionStatus`. 

# CheckTransactionStatus
<a name="check-transaction-status"></a>


**Información general**  

|  |  | 
| --- |--- |
| Nombre de operación | CheckTransactionStatus | 
| Tipo |  API de extensiones AWS Glue  | 
| Ruta de REST |  POST/extensions/v1/transactions/status  | 
| Acción de IAM |  El mismo permiso que la acción que inicia la transacción  | 
| Permisos de Lake Formation | El mismo permiso que la acción que inicia la transacción | 
| Definición de API abierta | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L273 | 

**Consideraciones**
+ El parámetro de ruta del catálogo debe seguir el estilo descrito en la sección [Parámetros de prefijo y ruta de catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).

# Conexión al catálogo de datos desde una aplicación Spark independiente
<a name="connect-gludc-spark"></a>

Puede conectarse al catálogo de datos desde una aplicación independiente mediante un conector de Apache Iceberg. 

1. Cree un rol de IAM para la aplicación Spark.

1. Conéctese al punto de conexión de REST de Iceberg de AWS Glue mediante el conector de Iceberg.

   ```
   # configure your application. Refer to https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html for best practices on configuring environment variables.
   export AWS_ACCESS_KEY_ID=$(aws configure get appUser.aws_access_key_id)
   export AWS_SECRET_ACCESS_KEY=$(aws configure get appUser.aws_secret_access_key)
   export AWS_SESSION_TOKEN=$(aws configure get appUser.aws_secret_token)
   
   export AWS_REGION=us-east-1
   export REGION=us-east-1
   export AWS_ACCOUNT_ID = {specify your aws account id here}
   
   ~/spark-3.5.3-bin-hadoop3/bin/spark-shell \
       --packages org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.6.0 \
       --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
       --conf "spark.sql.defaultCatalog=spark_catalog" \
       --conf "spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkCatalog" \
       --conf "spark.sql.catalog.spark_catalog.type=rest" \
       --conf "spark.sql.catalog.spark_catalog.uri=https://glue.us-east-1.amazonaws.com/iceberg" \
       --conf "spark.sql.catalog.spark_catalog.warehouse = {AWS_ACCOUNT_ID}" \
       --conf "spark.sql.catalog.spark_catalog.rest.sigv4-enabled=true" \
       --conf "spark.sql.catalog.spark_catalog.rest.signing-name=glue" \
       --conf "spark.sql.catalog.spark_catalog.rest.signing-region=us-east-1" \
       --conf "spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO" \
       --conf "spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.SimpleAWSCredentialProvider"
   ```

1. Consulte los datos en el catálogo de datos.

   ```
   spark.sql("create database myicebergdb").show()
   spark.sql("""CREATE TABLE myicebergdb.mytbl (name string) USING iceberg location 's3://bucket_name/mytbl'""")
   spark.sql("insert into myicebergdb.mytbl values('demo') ").show()
   ```

# Asignación de datos entre Amazon Redshift y Apache Iceberg
<a name="data-mapping-rs-iceberg"></a>

Redshift e Iceberg admiten varios tipos de datos. La siguiente matriz de compatibilidad describe la compatibilidad y las limitaciones cuando tenga que asignar datos entre estos dos sistemas de datos. Consulte [Tipos de datos de Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html) y [Especificaciones de la tabla de Apache Iceberg](https://iceberg.apache.org/spec/#primitive-types) para obtener más información sobre los tipos de datos compatibles en sus respectivos sistemas de datos.


| Tipo de datos de Redshift | Alias | Tipo de datos de Iceberg | 
| --- | --- | --- | 
| SMALLINT | INT2 | int | 
| INTEGER | INT, INT4 | int | 
| BIGINT | INT8 | long | 
| DECIMAL | NUMERIC | decimal | 
| REAL | FLOAT4 | float | 
| REAL | FLOAT4 | float | 
| DOUBLE PRECISION | FLOAT8, FLOAT | double | 
| CHAR | CHARACTER, NCHAR | cadena | 
| VARCHAR | CHARACTER VARYING, NVARCHAR | cadena | 
| BPCHAR |  | cadena | 
| TEXT |  | cadena | 
| DATE |  | date | 
| TIME | TIME WITHOUT TIMEZONE | hora | 
| TIME | TIME WITH TIMEZONE | no admitido | 
| TIMESTAMP | TIMESTAMP WITHOUT TIMEZONE | TIMESTAMP | 
| TIMESTAMPZ | TIMESTAMP WITH TIMEZONE | TIMESTAMPZ | 
| INTERVALO AÑO A MES |  | No compatible | 
| INTERVALO DÍA A SEGUNDO |  | No compatible | 
| BOOLEAN | BOOL | bool | 
| HLLSKETCH |  | No compatible | 
| SUPER |  | No compatible | 
| VARBYTE | VARBINARY, BINARY VARYING | binario | 
| GEOMETRY |  | No compatible | 
| GEOGRAPHY |  | No compatible | 

# Consideraciones y limitaciones al utilizar las API del catálogo de REST de Iceberg AWS Glue
<a name="limitation-glue-iceberg-rest-api"></a>

A continuación, puede ver las consideraciones y limitaciones que surgen al utilizar el comportamiento de la operación de lenguaje de definición de datos (DDL) del catálogo de REST de Apache Iceberg.

**Consideraciones**
+  **Comportamiento de la API `RenameTable`**: la operación `RenameTable` se admite en las tablas de Amazon Redshift, pero no en Amazon S3. 
+  **Operaciones de DDL para espacios de nombres y tablas en Amazon Redshift**: las operaciones de creación, actualización y eliminación de espacios de nombres y tablas en Amazon Redshift son operaciones asíncronas porque dependen del momento en que está disponible el grupo de trabajo que administra Amazon Redshift y de si se va a realizar una transacción de DDL y DML conflictiva y la operación tiene que esperar a que se bloquee para confirmar los cambios. 

**Limitaciones**
+  Las API de visualización de la especificación de REST de Apache Iceberg no son compatibles con el catálogo de REST de AWS Glue Iceberg. 

# Prácticas recomendadas para el uso del Catálogo de datos de AWS Glue
<a name="best-practice-catalog"></a>

 En esta sección se describen las prácticas recomendadas para administrar y usar el AWS Glue Data Catalog de forma eficaz. Se hace hincapié en prácticas como el uso eficiente de los rastreadores, la organización de los metadatos, la seguridad, la optimización del rendimiento, la automatización, la gobernanza de los datos y la integración con otros servicios de AWS. 
+ **Use los rastreadores de forma eficaz**: Ejecute los rastreadores con regularidad para mantener el Catálogo de datos actualizado con los cambios en los orígenes de datos. Use rastreos progresivos para los orígenes de datos que cambian con frecuencia a fin de mejorar el rendimiento. Configure los rastreadores para añadir automáticamente nuevas particiones o actualizar los esquemas cuando se detecten cambios. 
+ **Organice y asigne nombres a las tablas de metadatos**: Establezca una convención de nomenclatura coherente para las bases de datos y las tablas del Catálogo de datos. Agrupe los orígenes de datos relacionados en bases de datos o carpetas de forma lógica para una mejor organización. Use nombres descriptivos que expresen el propósito y el contenido de cada tabla. 
+ **Administre los esquemas de forma eficaz**: Aproveche las capacidades de inferencia de los esquemas que tienen los rastreadores de AWS Glue. Revise y actualice los cambios de esquema antes de aplicarlos para evitar interrumpir las aplicaciones posteriores. Use las características de evolución del esquema para gestionar los cambios de este con fluidez. 
+ **Proteja el Catálogo de datos**: Active el cifrado de datos en reposo y en tránsito para el Catálogo de datos. Implemente políticas de control de acceso detalladas para restringir el acceso a los datos confidenciales. Audite y revise periódicamente los permisos y los registros de actividad del Catálogo de datos. 
+ **Integre otros servicios de AWS**: Use el Catálogo de datos como una capa de metadatos centralizada para servicios como Amazon Athena, Redshift Spectrum y AWS Lake Formation. Aproveche los trabajos de ETL de AWS Glue para transformar y cargar datos en varios almacenes de datos y, al mismo tiempo, mantener los metadatos en el Catálogo de datos. 
+  **Supervise y optimice el rendimiento**: Supervise el rendimiento de los rastreadores y los trabajos de ETL mediante el uso de las métricas de Amazon CloudWatch. Particione los conjuntos de datos grandes en el Catálogo de datos para mejorar el rendimiento de las consultas. Implemente optimizaciones de rendimiento para los metadatos a los que se accede con frecuencia. 
+  **Manténgase actualizado con la documentación y las prácticas recomendadas de AWS Glue**: Consulte periódicamente la documentación y los recursos de AWS Glue para obtener las últimas novedades, prácticas recomendadas y recomendaciones. Asista a seminarios web, talleres y otros eventos de AWS Glue para aprender de los expertos y mantenerse informado sobre las nuevas características y capacidades. 

# Supervisión de métricas de uso del Catálogo de datos en Amazon CloudWatch
<a name="data-catalog-cloudwatch-metrics"></a>

Las métricas de uso de AWS Glue Data Catalog ya están disponibles en Amazon CloudWatch, lo que simplifica la supervisión y comprensión del uso de recursos en el catálogo de datos. Ahora dispone de visibilidad inmediata sobre el uso de las API del Catálogo de Glue en relación con catálogos, bases de datos, tablas, particiones y conexiones, lo que facilita el mantenimiento y control del catálogo de datos.

## Información general sobre las métricas del Catálogo de datos
<a name="data-catalog-metrics-overview"></a>

AWS Glue Data Catalog publica automáticamente las métricas de uso en Amazon CloudWatch. Con la integración de métricas en CloudWatch, puede supervisar indicadores críticos de rendimiento cada minuto, incluidos:
+ Solicitudes de tablas
+ Índices de particiones creados
+ Conexiones actualizadas
+ Estadísticas actualizadas

Estas métricas ayudan a identificar cuellos de botella, detectar anomalías y tomar decisiones basadas en datos para mejorar la fiabilidad general del catálogo de datos. También puede configurar alarmas en CloudWatch para recibir notificaciones cuando las métricas superen los umbrales especificados, lo que permite una administración proactiva de la implementación. 

## Cómo agregar métricas a un panel de CloudWatch
<a name="glue-data-catalog-metrics-dashboard"></a>

Puede crear paneles personalizados para supervisar los recursos de AWS Glue Data Catalog y configurar alarmas para recibir notificaciones ante cualquier actividad inusual.

Para agregar métricas del Catálogo de datos al panel de CloudWatch, siga estos pasos:

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, seleccione **Métricas**.

1. Elija **Todas las métricas**.

1. Elija **Uso > Por recurso de AWS**.

1. Filtre por **Glue** para ver las métricas disponibles.

1. Seleccione las métricas que desea agregar al panel.

1. Agregue métricas de catálogos, bases de datos, tablas, particiones y conexiones al gráfico de CloudWatch.  
![\[Métricas de AWS Glue Data Catalog en el panel de CloudWatch\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/glue-cloudwatch-metrics.png)

Puede configurar alarmas personalizadas que se activen automáticamente cuando el uso de las API supere los umbrales definidos, con el fin de identificar anomalías en el uso del catálogo de datos.

Para obtener instrucciones detalladas sobre cómo configurar alarmas, consulte [Creación de una alarma de Información de métricas en CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-insights-alarm-create.html).

# AWS Glue Schema Registry
<a name="schema-registry"></a>

**nota**  
El Registro de esquemas de AWS Glue no es compatible en la siguiente región en la consola de AWS Glue: Oriente Medio (EAU).

Con AWS Glue Schema Registry, puede descubrir, controlar y evolucionar de forma centralizada los esquemas de flujo de datos. Un *esquema* define la estructura y el formato de un registro de datos. Con AWS Glue Schema Registry, puede administrar y aplicar esquemas en sus aplicaciones de streaming de datos mediante integraciones convenientes con Apache Kafka, [Amazon Managed Streaming for Apache Kafka](https://aws.amazon.com/msk/), [Amazon Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/), [Amazon Managed Service para Apache Flink](https://aws.amazon.com/kinesis/data-analytics/) y [AWS Lambda](https://aws.amazon.com/lambda/).

Schema Registry admite el formato de datos AVRO (v1.11.4), el formato de datos JSON con [formato de esquemas JSON](https://json-schema.org/) para el esquema (especificaciones Draft-04, Draft-06 y Draft-07) con la validación de esquemas JSON mediante el método [biblioteca de Everit](https://github.com/everit-org/json-schema), y admite los búferes de protocolo (Protobuf) en las versiones proto2 y proto3 sin soporte para `extensions` o `groups`, y el lenguaje Java, con otros formatos de datos e idiomas que estarán disponibles en el futuro. Las características admitidas incluyen compatibilidad, fuentes de esquemas mediante metadatos, registro automático de esquemas, compatibilidad con IAM y compresión ZLIB opcional para reducir el almacenamiento y la transferencia de datos. Schema Registry funciona sin servidor y es gratuito.

El uso de un esquema como contrato de formato de datos entre productores y consumidores conduce a una mejor gobernanza de los datos, datos de mayor calidad y permite que los consumidores de datos sean resistentes a los cambios posteriores compatibles.

Schema Registry permite que sistemas dispares compartan un esquema para la serialización y la deserialización. Por ejemplo, suponga que tiene un productor y un consumidor de datos. El productor conoce el esquema cuando publica los datos. Schema Registry proporciona un serializador y deserializador para determinados sistemas como Amazon MSK o Apache Kafka. 

 Para obtener más información, consulte [Cómo funciona Schema Registry](schema-registry-works.md).

**Topics**
+ [Schemas](#schema-registry-schemas)
+ [Registries](#schema-registry-registries)
+ [Compatibilidad y control de versiones de esquemas](#schema-registry-compatibility)
+ [Bibliotecas Serde de código abierto](#schema-registry-serde-libraries)
+ [Cuotas del Schema Registry](#schema-registry-quotas)
+ [Cómo funciona Schema Registry](schema-registry-works.md)
+ [Introducción a Schema Registry](schema-registry-gs.md)

## Schemas
<a name="schema-registry-schemas"></a>

Un *esquema* define la estructura y el formato de un registro de datos. Un esquema es una especificación versionada para publicación, consumo o almacenamiento de confianza de datos.

En este esquema de ejemplo para Avro, el formato y la estructura están definidos por el diseño y los nombres de campos, y el formato de los nombres de campos está definido por los tipos de datos (por ejemplo, `string`, `int`).

```
{
    "type": "record",
    "namespace": "ABC_Organization",
    "name": "Employee",
    "fields": [
        {
            "name": "Name",
            "type": "string"
        },
        {
            "name": "Age",
            "type": "int"
        },
        {
            "name": "address",
            "type": {
                "type": "record",
                "name": "addressRecord",
                "fields": [
                    {
                        "name": "street",
                        "type": "string"
                    },
                    {
                        "name": "zipcode",
                        "type": "int" 
                    }
                ]
            }
        }
    ]
}
```

En este ejemplo de esquema JSON Draft-07 para JSON, el formato está definido por la [organización del esquema JSON](https://json-schema.org/).

```
{
	"$id": "https://example.com/person.schema.json",
	"$schema": "http://json-schema.org/draft-07/schema#",
	"title": "Person",
	"type": "object",
	"properties": {
		"firstName": {
			"type": "string",
			"description": "The person's first name."
		},
		"lastName": {
			"type": "string",
			"description": "The person's last name."
		},
		"age": {
			"description": "Age in years which must be equal to or greater than zero.",
			"type": "integer",
			"minimum": 0
		}
	}
}
```

En este ejemplo de Protobuf, el formato se define mediante la[versión 2 del lenguaje de búferes de protocolo (proto2)](https://developers.google.com/protocol-buffers/docs/reference/proto2-spec).

```
syntax = "proto2";

package tutorial;

option java_multiple_files = true;
option java_package = "com.example.tutorial.protos";
option java_outer_classname = "AddressBookProtos";

message Person {
  optional string name = 1;
  optional int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    optional string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phones = 4;
}

message AddressBook {
  repeated Person people = 1;
}
```

## Registries
<a name="schema-registry-registries"></a>

Un *registro* es un contenedor lógico de esquemas. Los registros le permiten organizar sus esquemas, así como administrar el control de acceso para sus aplicaciones. Un registro tiene un nombre de recurso de Amazon (ARN) que le permite organizar y establecer diferentes permisos de acceso a las operaciones de esquema dentro del registro.

Puede utilizar el registro predeterminado o crear tantos registros nuevos como sea necesario.


**AWS GlueJerarquía de Schema Registry**  

|  | 
| --- |
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/schema-registry.html)  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/schema-registry.html)  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/schema-registry.html)  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/schema-registry.html)  | 

## Compatibilidad y control de versiones de esquemas
<a name="schema-registry-compatibility"></a>

Cada esquema puede tener varias versiones. El control de versiones se rige por una regla de compatibilidad que se aplica a un esquema. Schema Registry contrasta las solicitudes para registrar nuevas versiones de esquema con esta regla antes de que puedan tener éxito. 

Una versión de esquema marcada como punto de verificación se utiliza para determinar la compatibilidad de registrar nuevas versiones de un esquema. Cuando se crea un esquema por primera vez, el punto de verificación predeterminado será la primera versión. A medida que el esquema evoluciona con más versiones, puede utilizar CLI/SDK para cambiar el punto de control a una versión de un esquema mediante la herramienta API `UpdateSchema` que cumple con un conjunto de restricciones. En la consola, la edición de la definición de esquema o el modo de compatibilidad cambiará el punto de control a la última versión de forma predeterminada. 

Los modos de compatibilidad permiten controlar cómo los esquemas pueden o no evolucionar con el tiempo. Estos modos forman el contrato entre las aplicaciones que producen y consumen datos. Cuando se envía una nueva versión de un esquema al registro, la regla de compatibilidad aplicada al nombre del esquema se utiliza para determinar si se puede aceptar la nueva versión. Existen ocho modos de compatibilidad: NONE (NINGUNO), DISABLED (DESACTIVADO), BACKWARD (HACIA ATRÁS), BACKWARD\$1ALL (HACIA ATRÁS\$1TODO), FORWARD (HACIA ADELANTE), FORWARD\$1ALL (HACIA ADELANTE\$1TODO), FULL (COMPLETO), FULL\$1ALL (COMPLETO\$1TODO).

En el formato de datos Avro, los campos pueden ser opcionales u obligatorios. Un campo opcional es aquel en el que el `Type` incluye nulo. Los campos obligatorios no tienen nulo como `Type`.

En el formato de datos Protobuf, los campos pueden ser opcionales (incluso repetidos) u obligatorios en la sintaxis proto2, mientras que todos los campos son opcionales (incluidos los repetidos) en la sintaxis proto3. Todas las reglas de compatibilidad se determinan en función de la comprensión de las especificaciones de los búferes de protocolo, así como en función de las pautas en la [documentación sobre búferes de protocolo de Google](https://developers.google.com/protocol-buffers/docs/overview#updating).
+ *NONE (NINGUNO)*: no se aplica ningún modo de compatibilidad. Puede utilizar esta opción en escenarios de desarrollo o si no conoce los modos de compatibilidad que desea aplicar a los esquemas. Cualquier nueva versión que se agregue será aceptada sin someterse a una comprobación de compatibilidad.
+ *DISABLED (DESACTIVADO)*: esta opción de compatibilidad impide el control de versiones de un esquema en particular. No se pueden agregar nuevas versiones.
+ *BACKWARD (HACIA ATRÁS)*: se recomienda esta opción de compatibilidad ya que permite a los consumidores leer tanto la versión actual como la anterior del esquema. Puede utilizar esta opción para comprobar la compatibilidad con la última versión del esquema, al eliminar campos o agregar campos adicionales. Un caso de uso típico para HACIA ATRÁS es cuando la aplicación se ha creado para el esquema más reciente.

**AVRO**  
Por ejemplo, suponga que tiene un esquema definido por nombre (obligatorio), apellido (obligatorio), email (obligatorio) y número de teléfono (opcional).

  Si la siguiente versión del esquema elimina el campo de email obligatorio, esto se registraría correctamente. La compatibilidad HACIA ATRÁS requiere que los consumidores puedan leer la versión actual y anterior del esquema. Sus consumidores podrán leer el nuevo esquema a medida que se ignora el campo de email adicional de los mensajes antiguos.

  Si tiene una nueva versión de esquema propuesta que agrega un campo obligatorio, por ejemplo, código postal, esto no se registrará correctamente con la compatibilidad HACIA ATRÁS. Los consumidores de la nueva versión no podrían leer mensajes antiguos antes de cambiar el esquema, ya que les faltará el campo de código postal obligatorio. Sin embargo, si el campo de código postal se estableció como opcional en el nuevo esquema, entonces la versión propuesta se registraría correctamente, ya que los consumidores pueden leer el esquema anterior sin el campo de código postal opcional.

**JSON**  
Por ejemplo, supongamos que tiene una versión de esquema definida por nombre (opcional), apellido (opcional), email (opcional) y número de teléfono (opcional).

  Si la siguiente versión de esquema agrega la propiedad opcional de número de teléfono, esto se registraría correctamente siempre y cuando la versión original del esquema no permita ninguna propiedad adicional al configurar el campo `additionalProperties` en falso. La compatibilidad HACIA ATRÁS requiere que los consumidores puedan leer la versión actual y anterior del esquema. Sus consumidores podrán leer los datos producidos con el esquema original en el que la propiedad del número de teléfono no existe.

  Si tiene una nueva versión de esquema propuesta que agrega la propiedad de número de teléfono opcional, esto no se registrará correctamente con la compatibilidad HACIA ATRÁS, cuando la versión del esquema original establezca el campo `additionalProperties` a verdadero, es decir, cuando permita cualquier propiedad adicional. Los consumidores de la nueva versión no podrían leer mensajes antiguos antes de cambiar el esquema, ya que no pueden leer datos con propiedad de número de teléfono en un tipo diferente, por ejemplo, cadena en lugar de número.

**PROTOBUF**  
Por ejemplo, suponga que tiene una versión de esquema definida por un mensaje `Person` con `first name` (obligatorio), `last name` (obligatorio), `email` (obligatorio) y `phone number` (opcional) en la sintaxis proto2.

  En forma semejante a las situaciones de AVRO, si la siguiente versión del esquema elimina el campo de `email` obligatorio, esto se registraría correctamente. La compatibilidad HACIA ATRÁS requiere que los consumidores puedan leer la versión actual y anterior del esquema. Sus consumidores podrán leer el nuevo esquema a medida que se ignora el campo de `email` adicional de los mensajes antiguos.

  Si tiene una nueva versión de esquema propuesta que agrega un campo obligatorio, por ejemplo, `zip code`, esto no se registrará correctamente con la compatibilidad CON VERSIONES ANTERIORES. Los consumidores de la nueva versión no podrían leer mensajes antiguos antes de cambiar el esquema, ya que les faltará el campo de `zip code` obligatorio. Sin embargo, si el campo de `zip code` se estableció como opcional en el nuevo esquema, entonces la versión propuesta se registraría correctamente, ya que los consumidores pueden leer el esquema anterior sin el campo de `zip code` opcional.

  En caso de un caso de uso de gRPC, agregar un nuevo servicio RPC o un método RPC es un cambio compatible con versiones anteriores. Por ejemplo, suponga que tiene una versión de esquema definida por un servicio RPC `MyService` con dos métodos RPC, `Foo` y `Bar`.

  Si la próxima versión de esquema añade un nuevo método RPC llamado `Baz`, esto se registraría correctamente. Los consumidores podrán leer los datos producidos con el esquema original según la compatibilidad CON VERSIONES ANTERIORES desde el método RPC `Baz` recientemente agregado es opcional. 

  Si tiene una nueva versión de esquema propuesta que agrega un método RPC existente `Foo`, esto no se registrará correctamente con la compatibilidad CON VERSIONES ANTERIORES. Los consumidores de la nueva versión no podrían leer mensajes antiguos antes del cambio de esquema, ya que no pueden entender ni leer datos con el método RPC inexistente `Foo` en una aplicación de gRPC.
+ *BACKWARD\$1ALL (HACIA ATRÁS\$1TODO)*: esta opción de compatibilidad permite a los consumidores leer tanto la versión actual como todas las versiones anteriores del esquema. Puede utilizar esta opción para comprobar la compatibilidad con la última versión del esquema cuando elimine campos o agregue campos adicionales.
+ *FORWARD (HACIA ADELANTE)*: esta opción de compatibilidad permite a los consumidores leer tanto la versión actual como la inmediatamente siguiente del esquema, pero no necesariamente versiones posteriores. Puede utilizar esta opción para comprobar la compatibilidad con la última versión del esquema cuando elimine campos o agregue campos adicionales. Un caso de uso típico de HACIA ADELANTE es cuando la aplicación se ha creado para un esquema anterior y debe poder procesar un esquema más reciente.

**AVRO**  
Por ejemplo, supongamos que tiene una versión de esquema definida por nombre (obligatorio), apellido (obligatorio), email (opcional).

  Si tiene una nueva versión de esquema que agrega un campo obligatorio, p. ej., número de teléfono, esto se registraría correctamente. La compatibilidad HACIA ADELANTE requiere que los consumidores puedan leer los datos producidos con el nuevo esquema utilizando la versión anterior.

  Si tiene una sugerencia de una versión de esquema que elimina el campo obligatorio de nombre, esto no se registrará correctamente con la compatibilidad HACIA ADELANTE. Los consumidores de la versión anterior no podrían leer los esquemas propuestos, ya que les falta el campo obligatorio de nombre. Sin embargo, si el campo de nombre original era opcional, entonces el nuevo esquema propuesto se registraría correctamente, ya que los consumidores pueden leer datos basados en el nuevo esquema que no incluye el campo opcional de nombre.

**JSON**  
Por ejemplo, supongamos que tiene una versión de esquema definida por nombre (opcional), apellido (opcional), email (opcional) y número de teléfono (opcional).

  Si tiene una nueva versión de esquema que elimina la propiedad opcional de número de teléfono, esto se registraría correctamente siempre y cuando la nueva versión del esquema no permita ninguna propiedad adicional al configurar el campo `additionalProperties` en falso. La compatibilidad HACIA ADELANTE requiere que los consumidores puedan leer los datos producidos con el nuevo esquema utilizando la versión anterior.

  Si tiene una sugerencia de una versión de esquema que elimina la propiedad opcional de número de teléfono, esto no se registraría correctamente con la compatibilidad HACIA ADELANTE cuando la nueva versión del esquema establece el campo `additionalProperties` a verdadero, es decir, permite cualquier propiedad adicional. Los consumidores de la versión anterior no podrían leer los esquemas propuestos, ya que podrían tener la propiedad de número de teléfono en un tipo diferente, por ejemplo, cadena en lugar de número.

**PROTOBUF**  
Por ejemplo, suponga que tiene una versión de esquema definida por un mensaje `Person` con `first name` (obligatorio), `last name`(obligatorio) y `email` (opcional) en la sintaxis proto2.

  De manera semejante a las situaciones de AVRO, si tiene una nueva versión de esquema que agrega un campo obligatorio, p. ej., `phone number`, esto se registraría correctamente. La compatibilidad HACIA ADELANTE requiere que los consumidores puedan leer los datos producidos con el nuevo esquema utilizando la versión anterior.

  Si tiene una sugerencia de una versión de esquema que elimina el campo obligatorio de `first name`, esto no se registrará correctamente con la compatibilidad CON VERSIONES FUTURAS. Los consumidores de la versión anterior no podrían leer los esquemas propuestos, ya que les falta el campo obligatorio de `first name`. Sin embargo, si el campo de `first name` original era opcional, entonces el nuevo esquema propuesto se registraría correctamente, ya que los consumidores pueden leer datos basados en el nuevo esquema que no incluye el campo opcional de `first name`.

  En caso de un caso de uso de gRPC, quitar un servicio RPC o un método RPC es un cambio compatible con versiones futuras. Por ejemplo, suponga que tiene una versión de esquema definida por un servicio RPC `MyService` con dos métodos RPC, `Foo` y `Bar`. 

  Si la próxima versión del esquema elimina el método RPC existente denominado `Foo`, esto se registraría correctamente según la compatibilidad CON VERSIONES FUTURAS, ya que los consumidores pueden leer los datos producidos con el nuevo esquema utilizando la versión anterior. Si tiene una sugerencia de una nueva versión de esquema que agrega un método RPC de `Baz`, esto no se registrará correctamente con la compatibilidad CON VERSIONES FUTURAS. Los consumidores de la versión anterior no podrían leer los esquemas propuestos, ya que les falta el método RPC de `Baz`.
+ *FORWARD\$1ALL (HACIA ADELANTE\$1TODO)*: esta opción de compatibilidad permite a los consumidores leer datos escritos por los productores de cualquier nuevo esquema registrado. Puede utilizar esta opción cuando necesite agregar campos o eliminar campos opcionales, y comprobar la compatibilidad con todas las versiones de esquema anteriores.
+ *FULL (COMPLETO)*: esta opción de compatibilidad permite a los consumidores leer los datos escritos por los productores con la versión inmediatamente anterior o siguiente del esquema, pero no necesariamente versiones anteriores o posteriores. Puede utilizar esta opción para comprobar la compatibilidad con la última versión del esquema cuando elimine campos o agregue campos adicionales.
+ *FULL\$1ALL (COMPLETO\$1TODO)*: esta opción de compatibilidad permite a los consumidores leer los datos escritos por los productores con todas las versiones de esquema anteriores. Puede utilizar esta opción para comprobar la compatibilidad con todas las versiones anteriores del esquema, cuando agregue o elimine campos opcionales.

## Bibliotecas Serde de código abierto
<a name="schema-registry-serde-libraries"></a>

AWS proporciona bibliotecas Serde de código abierto como marco para serializar y deserializar datos. El diseño de código abierto de estas bibliotecas permite que las aplicaciones y marcos de código abierto comunes soporten estas bibliotecas en sus proyectos.

Para obtener más detalles sobre cómo funcionan las bibliotecas de Serde, consulte [Cómo funciona Schema Registry](schema-registry-works.md).

## Cuotas del Schema Registry
<a name="schema-registry-quotas"></a>

Las cuotas, también conocidas como límites en AWS, son el valor máximo de los recursos, acciones y elementos de su cuenta de AWS. Los siguientes son los límites flexibles para el Schema Registry en AWS Glue.

**Pares de clave-valor de metadatos de la versión del esquema**  
Puede tener hasta 10 pares clave-valor por SchemaVersion por región de AWS.

Puede ver o establecer los pares de metadatos clave-valor con las API [Acción QuerySchemaVersionMetadata (Python: query\$1schema\$1version\$1metadata)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-QuerySchemaVersionMetadata) o [Acción PutSchemaVersionMetadata (Python: put\$1schema\$1version\$1metadata)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-PutSchemaVersionMetadata).

Los siguientes son los límites invariables para el Schema Registry en AWS Glue.

**Registries**  
Puede tener hasta 100 registros por región de AWS para esta cuenta.

**SchemaVersion**  
Puede tener hasta 10 000 versiones de esquema por región de AWS para esta cuenta.

Cada esquema nuevo crea una nueva versión de esquema, por lo que teóricamente puede tener hasta 10 000 esquemas por cuenta por región, si es que cada esquema tiene una sola versión.

**Cargas de esquema**  
Hay un límite de tamaño de 170 KB para las cargas de esquema.

# Cómo funciona Schema Registry
<a name="schema-registry-works"></a>

En esta sección se describe cómo funcionan los procesos de serialización y deserialización en Schema Registry.

1. Registrar un esquema: si el esquema aún no existe en el registro, puede registrarse con un nombre de esquema igual al nombre del destino (por ejemplo, test\$1topic, test\$1stream, prod\$1firehose) o el productor puede proporcionar un nombre personalizado para el esquema. Los productores también pueden agregar pares clave-valor al esquema como metadatos, como orígenes: msk\$1kafka\$1topic\$1a, o aplicar etiquetas AWS a esquemas en la creación de esquemas. Una vez registrado un esquema, el Schema Registry devuelve el ID de versión del esquema al serializador. Si el esquema existe pero el serializador está utilizando una nueva versión que no existe, Schema Registry comprobará la referencia del esquema en función de una regla de compatibilidad para asegurarse de que la nueva versión es compatible antes de registrarla como una nueva versión.

   Existen dos métodos para registrar un esquema: registro manual y registro automático. Puede registrar un esquema manualmente a través de la consola de AWS Glue o CLI/SDK.

   Cuando el registro automático está activado en la configuración del serializador, se realizará el registro automático del esquema. Si no se proporciona el `REGISTRY_NAME` en las configuraciones del productor, entonces el registro automático registrará la nueva versión del esquema según el registro predeterminado (default-registry). Consulte [Instalación de bibliotecas SerDe](schema-registry-gs-serde.md) para obtener información sobre cómo especificar la propiedad de registro automático.

1. El serializador valida los registros de datos respecto del esquema: cuando la aplicación que produce datos ha registrado su esquema, el serializador de Schema Registry valida que el registro que está produciendo la aplicación se estructure con los campos y tipos de datos que coincidan con un esquema registrado. Si el esquema del registro no coincide con un esquema registrado, el serializador devolverá una excepción y la aplicación no entregará el registro al destino. 

   Si no existe ningún esquema y si el nombre del esquema no se proporciona a través de las configuraciones del productor, el esquema se crea con el mismo nombre que el nombre del tema (si es Apache Kafka o Amazon MSK) o el nombre del flujo (si es Kinesis Data Streams).

   Cada registro tiene una definición de esquema y datos. La definición de esquema se consulta respecto de los esquemas y versiones existentes en el Schema Registry.

   De forma predeterminada, los productores almacenan en caché las definiciones de esquema y los ID de versión de esquema de los esquemas registrados. Si la definición de versión de esquema de un registro no coincide con lo que está disponible en caché, el productor intentará validar el esquema con Schema Registry. Si la versión del esquema es válida, su ID de versión y definición se almacenarán en caché de manera local en el productor.

   Puede ajustar el período de caché predeterminado (24 horas) dentro de las propiedades del productor opcionales en el paso n.º 3 de [Instalación de bibliotecas SerDe](schema-registry-gs-serde.md).

1. Serializar y entregar registros: si el registro cumple con el esquema, el serializador agrega a cada registro el ID de la versión del esquema, serializa el registro en función del formato de datos seleccionado (AVRO, JSON, Protobuf u otros formatos próximamente), comprime el registro (configuración opcional del productor) y lo entrega al destino.

1. Los consumidores deserializan los datos: los consumidores que leen estos datos utilizan la biblioteca del deserializador de Schema Registry que analiza el ID de versión del esquema proveniente de la carga del registro.

1. El deserializador puede solicitar el esquema desde el Schema Registry: si es la primera vez que el deserializador ha visto registros con un identificador de versión de esquema concreto, a través del ID de versión de esquema, el deserializador solicitará el esquema desde Schema Registry y almacenará el esquema localmente en el consumidor. Si Schema Registry no puede deserializar el registro, el consumidor puede registrar los datos a partir del registro y continuar, o detener la aplicación.

1. El deserializador utiliza el esquema para deserializar el registro: cuando el deserializador recupera el ID de versión del esquema de Schema Registry, descomprime el registro (si el registro enviado por el productor está comprimido) y utiliza el esquema para deserializar el registro. La aplicación procesa ahora el registro.

**nota**  
Cifrado: sus clientes se comunican con Schema Registry a través de llamadas a la API que cifran los datos en tránsito mediante el cifrado TLS a través de HTTPS. Los esquemas almacenados en Schema Registry siempre se cifran en reposo mediante una clave AWS Key Management Service (AWS KMS) administrada por el servicio.

**nota**  
Autorización de usuario: el registro de esquemas admite políticas de IAM basadas en identidad.

# Introducción a Schema Registry
<a name="schema-registry-gs"></a>

Las siguientes secciones ofrecen información general y una guía para configurar y empezar a utilizar Schema Registry. Para obtener más información sobre los conceptos y componentes de Schema Registry, consulte [AWS Glue Schema Registry](schema-registry.md).

**Topics**
+ [Instalación de bibliotecas SerDe](schema-registry-gs-serde.md)
+ [Integración con AWS Glue Schema Registry](schema-registry-integrations.md)
+ [Migración desde un registro de esquemas de terceros a AWS Glue Schema Registry](schema-registry-integrations-migration.md)

# Instalación de bibliotecas SerDe
<a name="schema-registry-gs-serde"></a>

Las bibliotecas SerDe proporcionan un marco para serializar y deserializar datos. 

Instalará el serializador de código abierto para sus aplicaciones que producen datos (colectivamente los “serializadores”). El serializador controla la serialización, la compresión y la interacción con Schema Registry. El serializador extrae automáticamente el esquema de un registro que se está escribiendo en un destino compatible con Schema Registry, como Amazon MSK. Del mismo modo, instalará el deserializador de código abierto en sus aplicaciones que consumen datos.

# Implementación de Java
<a name="schema-registry-gs-serde-java"></a>

**nota**  
Requisitos previos: antes de completar los siguientes pasos, deberá tener un clúster de Amazon Managed Streaming for Apache Kafka (Amazon MSK) o Apache Kafka en ejecución. Sus productores y consumidores deben ejecutarse en Java 8 o superior.

Para instalar las bibliotecas en productores y consumidores:

1. Dentro de los archivos pom.xml de los productores y consumidores, agregue esta dependencia a través del siguiente código:

   ```
   <dependency>
       <groupId>software.amazon.glue</groupId>
       <artifactId>schema-registry-serde</artifactId>
       <version>1.1.5</version>
   </dependency>
   ```

   También puede clonar el [repositorio Github de AWS Glue Schema Registry](https://github.com/awslabs/aws-glue-schema-registry).

1. Configure sus productores con estas propiedades requeridas:

   ```
   props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); // Can replace StringSerializer.class.getName()) with any other key serializer that you may use
   props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, GlueSchemaRegistryKafkaSerializer.class.getName());
   props.put(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2");
   properties.put(AWSSchemaRegistryConstants.DATA_FORMAT, "JSON"); // OR "AVRO"
   ```

   Si no hay esquemas existentes, debe activarse el registro automático (siguiente paso). Si tiene un esquema que desea aplicar, reemplace “my-schema (mi esquema)” con su nombre de esquema. También debe proporcionarse el “registry-name (nombre del registro)” si el registro automático del esquema está desactivado. Si el esquema se crea como “default-registry (registro predeterminado)”, entonces el nombre del registro se puede omitir.

1. (Opcional) configure cualquiera de estas propiedades de productor opcionales. Para ver descripciones detalladas de propiedades, consulte [el archivo ReadMe (Léame)](https://github.com/awslabs/aws-glue-schema-registry/blob/master/README.md).

   ```
   props.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, "true"); // If not passed, uses "false"
   props.put(AWSSchemaRegistryConstants.SCHEMA_NAME, "my-schema"); // If not passed, uses transport name (topic name in case of Kafka, or stream name in case of Kinesis Data Streams)
   props.put(AWSSchemaRegistryConstants.REGISTRY_NAME, "my-registry"); // If not passed, uses "default-registry"
   props.put(AWSSchemaRegistryConstants.CACHE_TIME_TO_LIVE_MILLIS, "86400000"); // If not passed, uses 86400000 (24 Hours)
   props.put(AWSSchemaRegistryConstants.CACHE_SIZE, "10"); // default value is 200
   props.put(AWSSchemaRegistryConstants.COMPATIBILITY_SETTING, Compatibility.FULL); // Pass a compatibility mode. If not passed, uses Compatibility.BACKWARD
   props.put(AWSSchemaRegistryConstants.DESCRIPTION, "This registry is used for several purposes."); // If not passed, constructs a description
   props.put(AWSSchemaRegistryConstants.COMPRESSION_TYPE, AWSSchemaRegistryConstants.COMPRESSION.ZLIB); // If not passed, records are sent uncompressed
   ```

   El registro automático registra la versión del esquema en el registro predeterminado (“default-registry”). Si no se especifica un `SCHEMA_NAME` en el paso anterior, entonces el nombre del tema se infiere como el `SCHEMA_NAME`. 

   Consulte [Compatibilidad y control de versiones de esquemas](schema-registry.md#schema-registry-compatibility) para obtener más información sobre los modos de compatibilidad.

1. Configure sus consumidores con estas propiedades obligatorias:

   ```
   props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
   props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, GlueSchemaRegistryKafkaDeserializer.class.getName());
   props.put(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2"); // Pass an Región de AWS
   props.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName()); // Only required for AVRO data format
   ```

1. (Opcional) configure estas propiedades de consumidores opcionales. Para ver descripciones detalladas de propiedades, consulte [el archivo ReadMe (Léame)](https://github.com/awslabs/aws-glue-schema-registry/blob/master/README.md).

   ```
   properties.put(AWSSchemaRegistryConstants.CACHE_TIME_TO_LIVE_MILLIS, "86400000"); // If not passed, uses 86400000
   props.put(AWSSchemaRegistryConstants.CACHE_SIZE, "10"); // default value is 200
   props.put(AWSSchemaRegistryConstants.SECONDARY_DESERIALIZER, "com.amazonaws.services.schemaregistry.deserializers.external.ThirdPartyDeserializer"); // For migration fall back scenario
   ```

# Implementación de C\$1
<a name="schema-registry-gs-serde-csharp"></a>

**nota**  
Requisitos previos: antes de completar los siguientes pasos, deberá tener un clúster de Amazon Managed Streaming for Apache Kafka (Amazon MSK) o Apache Kafka en ejecución. Sus productores y consumidores deben ejecutarse en .NET 8.0 o superior.

## Instalación
<a name="schema-registry-gs-serde-csharp-install"></a>

Para las aplicaciones de C\$1, instale el paquete de NuGet de SerDe de registro de esquema de AWS Glue mediante uno de los siguientes métodos:

**.NET CLI:**  
Para instalar el paquete, use el siguiente comando:

```
dotnet add package Aws.Glue.SchemaRegistry --version 1.0.0-<rid>
```

donde `<rid>` podría ser `1.0.0-linux-x64`, `1.0.0-linux-musl-x64` o `1.0.0-linux-arm64`

**PackageReference (en su archivo.csproj):**  
Añada lo siguiente al archivo del proyecto:

```
<PackageReference Include="Aws.Glue.SchemaRegistry" Version="1.0.0-<rid>" />
```

donde `<rid>` podría ser `1.0.0-linux-x64`, `1.0.0-linux-musl-x64` o `1.0.0-linux-arm64`

## Configuración del archivo de configuración
<a name="schema-registry-gs-serde-csharp-config"></a>

Cree un archivo de propiedades de configuración (por ejemplo, `gsr-config.properties`) con los parámetros necesarios:

**Configuración mínima:**  
El siguiente ejemplo es una configuración mínima de muestra:

```
region=us-east-1
registry.name=default-registry
dataFormat=AVRO
schemaAutoRegistrationEnabled=true
```

## Uso de la biblioteca de cliente de esquema de Glue de C\$1 para Kafka SerDes
<a name="schema-registry-gs-serde-csharp-kafka"></a>

**Ejemplo de uso del serializador:**  
En el siguiente ejemplo se muestra cómo utilizar el serializador:

```
private static readonly string PROTOBUF_CONFIG_PATH = "<PATH_TO_CONFIG_FILE>";
var protobufSerializer = new GlueSchemaRegistryKafkaSerializer(PROTOBUF_CONFIG_PATH);
var serialized = protobufSerializer.Serialize(message, message.Descriptor.FullName);
// send serialized bytes to Kafka using producer.Produce(serialized)
```

**Ejemplo de uso del deserializador:**  
En el siguiente ejemplo se muestra cómo utilizar el deserializador:

```
private static readonly string PROTOBUF_CONFIG_PATH = "<PATH_TO_CONFIG_FILE>";
var dataConfig = new GlueSchemaRegistryDataFormatConfiguration(
    new Dictionary<string, dynamic>
    {
        {
            GlueSchemaRegistryConstants.ProtobufMessageDescriptor, message.Descriptor
        }
    }
);
var protobufDeserializer = new GlueSchemaRegistryKafkaDeserializer(PROTOBUF_CONFIG_PATH, dataConfig);

// read message from Kafka using serialized = consumer.Consume()
var deserializedObject = protobufDeserializer.Deserialize(message.Descriptor.FullName, serialized);
```

## Uso de la biblioteca de cliente de esquema de Glue de C\$1 con KafkaFlow para SerDes
<a name="schema-registry-gs-serde-csharp-kafkaflow"></a>

**Ejemplo de uso del serializador:**  
En el siguiente ejemplo se muestra cómo configurar KafkaFlow con el serializador:

```
services.AddKafka(kafka => kafka
    .UseConsoleLog()
    .AddCluster(cluster => cluster
        .WithBrokers(new[] { "localhost:9092" })
        .AddProducer<CustomerProducer>(producer => producer
            .DefaultTopic("customer-events")
            .AddMiddlewares(m => m
                .AddSerializer<GlueSchemaRegistryKafkaFlowProtobufSerializer<Customer>>(
                    () => new GlueSchemaRegistryKafkaFlowProtobufSerializer<Customer>("config/gsr-config.properties")
                )
            )
        )
    )
);
```

**Ejemplo de uso del deserializador:**  
En el siguiente ejemplo se muestra cómo configurar KafkaFlow con el deserializador:

```
.AddConsumer(consumer => consumer
    .Topic("customer-events")
    .WithGroupId("customer-group")
    .WithBufferSize(100)
    .WithWorkersCount(10)
    .AddMiddlewares(middlewares => middlewares
        .AddDeserializer<GlueSchemaRegistryKafkaFlowProtobufDeserializer<Customer>>(
            () => new GlueSchemaRegistryKafkaFlowProtobufDeserializer<Customer>("config/gsr-config.properties")
        )
        .AddTypedHandlers(h => h.AddHandler<CustomerHandler>())
    )
)
```

## Propiedades opcionales del productor
<a name="schema-registry-gs-serde-csharp-optional"></a>

Puede ampliar el archivo de configuración con propiedades opcionales adicionales:

```
# Auto-registration (if not passed, uses "false")
schemaAutoRegistrationEnabled=true

# Schema name (if not passed, uses topic name)
schema.name=my-schema

# Registry name (if not passed, uses "default-registry")
registry.name=my-registry

# Cache settings
cacheTimeToLiveMillis=86400000
cacheSize=200

# Compatibility mode (if not passed, uses BACKWARD)
compatibility=FULL

# Registry description
description=This registry is used for several purposes.

# Compression (if not passed, records are sent uncompressed)
compressionType=ZLIB
```

## Formatos de fecha admitidos
<a name="schema-registry-gs-serde-supported-formats"></a>

Las implementaciones de Java y C\$1 admiten los mismos formatos de datos:
+ *AVRO*: formato binario JSON Apache Avro.
+ *JSON*: formato de esquemas JSON
+ *PROTOBUF*: formato de búferes de protocolo

## Notas
<a name="schema-registry-gs-serde-csharp-notes"></a>
+ Para empezar a utilizar la biblioteca, visite [https://www.nuget.org/packages/AWS.Glue.SchemaRegistry](https://www.nuget.org/packages/AWS.Glue.SchemaRegistry)
+ El código fuente está disponible en: [https://github.com/awslabs/aws-glue-schema-registry](https://github.com/awslabs/aws-glue-schema-registry)

# Creación de un registro
<a name="schema-registry-gs3"></a>

Puede utilizar el registro predeterminado o crear tantos registros nuevos como sea necesario mediante las API de AWS Glue o la consola de AWS Glue.

**AWS GlueLas API de**  
Puede seguir estos pasos para realizar esta tarea mediante las API de AWS Glue.

Para utilizar AWS CLI para las API de AWS Glue Schema Registry, asegúrese de actualizar su AWS CLI a la versión más reciente.

 Para agregar un registro nuevo, use la API de [Acción CreateRegistry (Python: create\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-CreateRegistry). Especifique `RegistryName` como el nombre del registro que se va a crear con una longitud máxima de 255, y solo puede contener letras, números, guión, guión bajo, signo de dólar o marca hash. 

Especifique una `Description` como una cadena cuya extensión no sea más de 2048 bytes y que coincida con el [patrón de cadena de varias líneas de la dirección URI](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-common.html#aws-glue-api-common-_string-patterns). 

De manera opcional, especifique una o varias `Tags` para su registro, como matriz de mapas de pares clave-valor.

```
aws glue create-registry --registry-name registryName1 --description description
```

Cuando se crea el registro se le asigna un nombre de recurso de Amazon (ARN). Este ARN lo puede ver en `RegistryArn` de la respuesta de la API. Ahora que ha creado un registro, cree uno o más esquemas para ese registro.

**Consola de AWS Glue**  
Para agregar un nuevo registro en la consola de AWS Glue:

1. Inicie sesión en Consola de administración de AWS y 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, en **Data catalog** (Catálogo de datos), elija **Schema registries (Registros de esquemas)**.

1. Elija **Add registry (Agregar registro)**.

1. Escriba un **Registry name (Nombre del Registro)** para el registro, que conste de letras, números, guiones o guiones bajos. Este nombre no se puede cambiar.

1. Escriba una **Description (Descripción)** (opcional) para el registro.

1. De manera opcional, aplique una o varias etiquetas a su registro. Elija **Add new tag (Agregar nueva etiqueta)** y especifique una **Tag key (Clave de etiqueta)** y, opcionalmente, un **Tag value (Valor de etiqueta)**.

1. Elija **Add registry (Agregar registro)**.

![\[Ejemplo de creación de un registro.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/schema_reg_create_registry.png)


Cuando se crea el registro, se le asigna un nombre de recurso de Amazon (ARN), que puede ver al seleccionar el registro de la lista en **Schema registries (Registros de esquemas)**. Ahora que ha creado un registro, cree uno o más esquemas para ese registro.

# Trabajar con un registro específico (JAVA POJO) para JSON
<a name="schema-registry-gs-json-java-pojo"></a>

Puede usar un objeto Java antiguo simple (POJO) y transferir el objeto como un registro. Esto es similar a la noción de un registro específico en AVRO. [mbknor-jackson-jsonschema](https://github.com/mbknor/mbknor-jackson-jsonSchema) puede generar un esquema JSON para el POJO transferido. Esta biblioteca también puede inyectar información adicional en el esquema JSON.

La biblioteca de AWS Glue Schema Registry utiliza el campo “className (nombre de clase)” inyectado en el esquema para proporcionar un nombre de clase completamente clasificado. El deserializador utiliza el campo “className” para deserializar en un objeto de esa clase.

```
 Example class :

@JsonSchemaDescription("This is a car")
@JsonSchemaTitle("Simple Car Schema")
@Builder
@AllArgsConstructor
@EqualsAndHashCode
// Fully qualified class name to be added to an additionally injected property
// called className for deserializer to determine which class to deserialize
// the bytes into
@JsonSchemaInject(
        strings = {@JsonSchemaString(path = "className",
                value = "com.amazonaws.services.schemaregistry.integrationtests.generators.Car")}
)
// List of annotations to help infer JSON Schema are defined by https://github.com/mbknor/mbknor-jackson-jsonSchema
public class Car {
    @JsonProperty(required = true)
    private String make;

    @JsonProperty(required = true)
    private String model;

    @JsonSchemaDefault("true")
    @JsonProperty
    public boolean used;

    @JsonSchemaInject(ints = {@JsonSchemaInt(path = "multipleOf", value = 1000)})
    @Max(200000)
    @JsonProperty
    private int miles;

    @Min(2000)
    @JsonProperty
    private int year;

    @JsonProperty
    private Date purchaseDate;

    @JsonProperty
    @JsonFormat(shape = JsonFormat.Shape.NUMBER)
    private Date listedDate;

    @JsonProperty
    private String[] owners;

    @JsonProperty
    private Collection<Float> serviceChecks;

    // Empty constructor is required by Jackson to deserialize bytes
    // into an Object of this class
    public Car() {}
}
```

# Creación de un esquema
<a name="schema-registry-gs4"></a>

Puede crear un esquema con las API de AWS Glue o la consola de AWS Glue. 

**AWS GlueLas API de**  
Puede seguir estos pasos para realizar esta tarea mediante las API de AWS Glue.

Para agregar un esquema nuevo, use la API de [Acción CreateSchema (Python: create\$1schema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-CreateSchema).

Especifique una estructura de `RegistryId` para indicar un registro para el esquema. O bien, omita el `RegistryId` para utilizar el registro predeterminado.

Especifique un `SchemaName`, que conste de letras, números, guiones o guiones bajos, y `DataFormat` como **AVRO** o **JSON**. Una vez configurado el `DataFormat` en un esquema no puede modificarse.

Especifique un modo de `Compatibility`:
+ *Hacia atrás (recomendado)*: el consumidor puede leer tanto la versión actual como la anterior.
+ *Hacia atrás todo*: el consumidor puede leer tanto la versión actual como todas las anteriores.
+ *Hacia adelante*: el consumidor puede leer tanto la versión actual como la posterior.
+ *Hacia adelante todo*: el consumidor puede leer tanto la versión actual como todas las versiones posteriores.
+ *Completo*: combinación de hacia atrás y hacia adelante.
+ *Completo todo*: combinación de hacia atrás todos y hacia adelante todos.
+ *Ninguno*: no se realizan comprobaciones de compatibilidad.
+ *Desactivado*: evita cualquier control de versiones para este esquema.

Opcionalmente, especifique `Tags` para su esquema. 

Especifique una `SchemaDefinition` para definir el esquema en formato de datos Avro, JSON o Protobuf. Consulte estos ejemplos.

Para el formato de datos Avro:

```
aws glue create-schema --registry-id RegistryName="registryName1" --schema-name testschema --compatibility NONE --data-format AVRO --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}"
```

```
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1" --schema-name testschema --compatibility NONE --data-format AVRO  --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}"
```

Para el formato de datos JSON:

```
aws glue create-schema --registry-id RegistryName="registryName" --schema-name testSchemaJson --compatibility NONE --data-format JSON --schema-definition "{\"$schema\": \"http://json-schema.org/draft-07/schema#\",\"type\":\"object\",\"properties\":{\"f1\":{\"type\":\"string\"}}}"
```

```
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName" --schema-name testSchemaJson --compatibility NONE --data-format JSON --schema-definition "{\"$schema\": \"http://json-schema.org/draft-07/schema#\",\"type\":\"object\",\"properties\":{\"f1\":{\"type\":\"string\"}}}"
```

Para el formato de datos Protobuf:

```
aws glue create-schema --registry-id RegistryName="registryName" --schema-name testSchemaProtobuf --compatibility NONE --data-format PROTOBUF --schema-definition "syntax = \"proto2\";package org.test;message Basic { optional int32 basic = 1;}"
```

```
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName" --schema-name testSchemaProtobuf --compatibility NONE --data-format PROTOBUF --schema-definition "syntax = \"proto2\";package org.test;message Basic { optional int32 basic = 1;}"
```

**Consola de AWS Glue**  
Para agregar un nuevo esquema a través de la consola de AWS Glue:

1. Inicie sesión en la consola de administración de AWS y 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, en **Data catalog** (Catálogo de datos), elija **Schema (Esquemas)**.

1. Elija **Add schema (Agregar esquema)**.

1. Escriba un **Schema name (Nombre del esquema)**, que conste de letras, números, guiones, guiones bajos, signos de dólar o marcas hash. Este nombre no se puede cambiar.

1. Elija el **Registry (Registro)** en el que se almacenará el esquema del menú desplegable. El registro principal no se puede cambiar después de la creación.

1. Deje el **Data format (Formato de los datos)** como *Apache Avro* o *JSON*. Este formato se aplica a todas las versiones de este esquema.

1. Elija un **(Compatibility mode) Modo de compatibilidad**.
   + *Hacia atrás (recomendado)*: el receptor puede leer tanto la versión actual como la anterior.
   + *Hacia atrás todo*: el receptor puede leer tanto la versión actual como todas las anteriores.
   + *Hacia adelante*: el remitente puede escribir tanto la versión actual como la anterior.
   + *Hacia adelante todo*: el remitente puede escribir tanto la versión actual como todas las versiones anteriores.
   + *Completo*: combinación de hacia atrás y hacia adelante.
   + *Completo todo*: combinación de hacia atrás todos y hacia adelante todos.
   + *Ninguno*: no se realizan comprobaciones de compatibilidad.
   + *Desactivado*: evita cualquier control de versiones para este esquema.

1. Escriba una **Description (Descripción)** para el registro de hasta 250 caracteres.  
![\[Ejemplo de creación de un esquema.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/schema_reg_create_schema.png)

1. De manera opcional, aplique una o varias etiquetas a su esquema. Elija **Add new tag (Agregar nueva etiqueta)** y especifique una **Tag key (Clave de etiqueta)** y, opcionalmente, un **Tag value (Valor de etiqueta)**.

1. En la casilla, **First schema version (Primera versión del esquema)**, ingrese o pegue el esquema inicial.

   Para el formato Avro, consulte [Trabajar con formato de datos Avro](#schema-registry-avro)

   Para el formato JSON, consulte [Trabajar con formato de datos JSON](#schema-registry-json)

1. También puede seleccionar **Add metadata (Agregar metadatos)** para agregar metadatos de versión para anotar o clasificar la versión del esquema.

1. Elija **Create schema and version (Crear esquema y versión)**.

![\[Ejemplo de creación de un esquema.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/schema_reg_create_schema2.png)


El esquema se crea y aparece en la lista en **Schemas (Esquemas)**.

## Trabajar con formato de datos Avro
<a name="schema-registry-avro"></a>

Avro proporciona servicios de serialización e intercambio de datos. Avro almacena la definición de datos en formato JSON, lo que facilita su lectura e interpretación. Los datos en sí se almacenan en formato binario.

Para obtener información sobre cómo definir un esquema Apache Avro, consulte la [especificación de Apache Avro](http://avro.apache.org/docs/current/spec.html).

## Trabajar con formato de datos JSON
<a name="schema-registry-json"></a>

Los datos se pueden serializar con formato JSON. [Formato de esquemas JSON](https://json-schema.org/) define el estándar para el formato de esquema JSON.

# Actualización de un esquema o registro
<a name="schema-registry-gs5"></a>

Una vez creado, puede editar los esquemas, las versiones de esquema o el registro.

## Actualización de un registro
<a name="schema-registry-gs5a"></a>

Puede actualizar un registro mediante las API de AWS Glue o la consola de AWS Glue. No se puede editar el nombre de un registro existente. La descripción de un registro puede editarse.

**AWS GlueLas API de**  
Para actualizar un registro existente, use la API [Acción UpdateRegistry (Python: update\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-UpdateRegistry).

Especifique una estructura de `RegistryId` para indicar el registro que desea actualizar. Transferir una `Description` para cambiar la descripción de un registro.

```
aws glue update-registry --description updatedDescription --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1"
```

**Consola de AWS Glue**  
Para actualizar un registro mediante la consola de AWS Glue:

1. Inicie sesión en Consola de administración de AWS y 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, en **Data catalog** (Catálogo de datos), elija **Schema registries (Registros de esquemas)**.

1. Seleccione un registro de la lista de registros, al marcar la casilla correspondiente.

1. En el menú **Action (Acción)**, elija **Edit registry (Editar registro)**.

# Actualización de un esquema
<a name="schema-registry-gs5b"></a>

Puede actualizar la descripción o la configuración de compatibilidad de un esquema.

Para actualizar un esquema existente, use la API [Acción UpdateSchema (Python: update\$1schema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-UpdateSchema).

Especifique una estructura de `SchemaId` para indicar el esquema que desea actualizar. Uno de `VersionNumber` o `Compatibility` debe ser proporcionado.

Ejemplos de código 11:

```
aws glue update-schema --description testDescription --schema-id SchemaName="testSchema1",RegistryName="registryName1" --schema-version-number LatestVersion=true --compatibility NONE
```

```
aws glue update-schema --description testDescription --schema-id SchemaArn="arn:aws:glue:us-east-2:901234567890:schema/registryName1/testSchema1" --schema-version-number LatestVersion=true --compatibility NONE
```

# Agregar una versión de esquema.
<a name="schema-registry-gs5c"></a>

Cuando agregue una versión de esquema, deberá comparar las versiones para asegurarse de que se aceptará el nuevo esquema.

Para agregar una nueva versión a un esquema existente, utilice la API [Acción RegisterSchemaVersion (Python: register\$1schema\$1version)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-RegisterSchemaVersion).

Especifique una estructura de `SchemaId` para indicar el esquema para el que desea agregar una versión, y una `SchemaDefinition` para definir el esquema.

Ejemplos de código 12:

```
aws glue register-schema-version --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}" --schema-id SchemaArn="arn:aws:glue:us-east-1:901234567890:schema/registryName/testschema"
```

```
aws glue register-schema-version --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}" --schema-id SchemaName="testschema",RegistryName="testregistry"
```

1. Inicie sesión en Consola de administración de AWS y 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, en **Data catalog** (Catálogo de datos), elija **Schema (Esquemas)**.

1. Seleccione el esquema de la lista de esquemas, al marcar la casilla correspondiente.

1. Seleccione uno o varios esquemas de la lista, al marcar las casillas correspondientes.

1. En el menú **Action (Acción)**, elija **Register new version (Registrar nueva versión)**.

1. En la casilla **New version (Nueva versión)**, ingrese o pegue el nuevo esquema.

1. Elija **Compare with previous version (Comparar con la versión anterior)** para ver las diferencias con la versión del esquema anterior.

1. También puede seleccionar **Add metadata (Agregar metadatos)** para agregar metadatos de versión para anotar o clasificar la versión del esquema. Ingrese **Key (Clave)** y **Value (Valor)** opcional.

1. Elija **Register version (Registrar versión)**.

![\[Agregar una versión de esquema.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/schema_reg_add_schema_version.png)


La versión de esquema(s) aparece en la lista de versiones. Si la versión cambió el modo de compatibilidad, la versión se marcará como punto de control.

## Ejemplo de comparación de versiones de esquema.
<a name="schema-registry-gs5c1"></a>

Cuando elige **Compare with previous version (Comparar con la versión anterior)**, verá las versiones anterior y nueva mostradas juntas. La información que se modificó se resaltará de la siguiente manera:
+ *Amarillo*: indica información modificada.
+ *Verde*: indica el contenido agregado en la última versión.
+ *Rojo*: indica el contenido eliminado de la última versión.

También se pueden realizar comparaciones con versiones anteriores.

![\[Ejemplo de comparación de versiones de esquema.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/schema_reg_version_comparison.png)


# Eliminación de un esquema o registro
<a name="schema-registry-gs7"></a>

Eliminar un esquema, una versión de esquema o un registro son acciones permanentes que no se pueden deshacer.

## Eliminación de un esquema
<a name="schema-registry-gs7a"></a>

Es posible que desee eliminar un esquema cuando ya no se utilizará dentro de un registro, utilizando la consola Consola de administración de AWS, o la API [Acción DeleteSchema (Python: delete\$1schema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteSchema).

Eliminar uno o varios esquemas es una acción permanente que no se puede deshacer. Asegúrese de que el esquema o los esquemas ya no son necesarios.

Para eliminar un esquema del registro, llame a la API [Acción DeleteSchema (Python: delete\$1schema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteSchema), y especifique la estructura de `SchemaId` para identificar el esquema.

Por ejemplo:

```
aws glue delete-schema --schema-id SchemaArn="arn:aws:glue:us-east-2:901234567890:schema/registryName1/schemaname"
```

```
aws glue delete-schema --schema-id SchemaName="TestSchema6-deleteschemabyname",RegistryName="default-registry"
```

**Consola de AWS Glue**  
Para eliminar un esquema de la consola de AWS Glue:

1. Inicie sesión en Consola de administración de AWS y 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, en **Data catalog** (Catálogo de datos), elija **Schema registries (Registros de esquemas)**.

1. Elija el registro que contiene el esquema de la lista de registros.

1. Seleccione uno o varios esquemas de la lista, al marcar las casillas correspondientes.

1. En el menú **Action (Acción)**, elija **Delete schema (Eliminar esquema)**.

1. Ingrese el texto **Delete** en el campo para confirmar la eliminación.

1. Elija **Eliminar**.

Los esquemas especificados se eliminan del registro.

## Eliminar una versión de esquema
<a name="schema-registry-gs7b"></a>

A medida que los esquemas se acumulan en el registro, es posible que desee eliminar las versiones de esquema no deseadas mediante la Consola de administración de AWS o la API [Acción DeleteSchemaVersions (Python: delete\$1schema\$1versions)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteSchemaVersions). Eliminar una o varias versiones de esquema es una acción permanente que no se puede deshacer. Asegúrese de que las versiones del esquema ya no sean necesarias.

Al eliminar versiones de esquema, tenga en cuenta las siguientes restricciones:
+ No puede eliminar una versión marcada como punto de control.
+ El rango de versiones contiguas no puede ser superior a 25.
+ La versión del esquema más reciente no debe estar en un estado pendiente.

Especifique la estructura de `SchemaId` para identificar el esquema y especifique las `Versions` como un rango de versiones para eliminar. Para obtener más información sobre cómo especificar una versión o un rango de versiones, consulte [Acción DeleteRegistry (Python: delete\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteRegistry). Las versiones de los esquemas especificados se eliminan del registro.

Llamar a la API [Acción ListSchemaVersions (Python: list\$1schema\$1versions)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-ListSchemaVersions) después de esta llamada arrojará una lista del estado de las versiones eliminadas.

Por ejemplo:

```
aws glue delete-schema-versions --schema-id SchemaName="TestSchema6",RegistryName="default-registry" --versions "1-1"
```

```
aws glue delete-schema-versions --schema-id SchemaArn="arn:aws:glue:us-east-2:901234567890:schema/default-registry/TestSchema6-NON-Existent" --versions "1-1"
```

1. Inicie sesión en Consola de administración de AWS y 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, en **Data catalog** (Catálogo de datos), elija **Schema registries (Registros de esquemas)**.

1. Elija el registro que contiene el esquema de la lista de registros.

1. Seleccione uno o varios esquemas de la lista, al marcar las casillas correspondientes.

1. En el menú **Action (Acción)**, elija **Delete schema (Eliminar esquema)**.

1. Ingrese el texto **Delete** en el campo para confirmar la eliminación.

1. Elija **Eliminar**.

Las versiones de los esquemas especificados se eliminan del registro.

# Eliminación de un registro
<a name="schema-registry-gs7c"></a>

Es posible que desee eliminar un registro cuando los esquemas que contiene ya no se organicen en ese registro. Tendrá que reasignar esos esquemas a otro registro.

Eliminar uno o varios registros es una acción permanente que no se puede deshacer. Asegúrese de que el registro o los registros ya no son necesarios.

El registro predeterminado se puede eliminar mediante AWS CLI.

**AWS GlueAPI de**  
Para eliminar todo el registro, incluido el esquema y todas sus versiones, llame a la API [Acción DeleteRegistry (Python: delete\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteRegistry). Especifique una estructura de `RegistryId` para identificar el registro.

Por ejemplo:

```
aws glue delete-registry --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1"
```

```
aws glue delete-registry --registry-id RegistryName="TestRegistry-deletebyname"
```

Para obtener el estado de la operación de eliminación, puede llamar a la API `GetRegistry` después de la llamada asíncrona.

**Consola de AWS Glue**  
Para eliminar un registro de la consola de AWS Glue:

1. Inicie sesión en Consola de administración de AWS y 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, en **Data catalog** (Catálogo de datos), elija **Schema registries (Registros de esquemas)**.

1. Seleccione un registro de la lista, al marcar la casilla correspondiente.

1. En el menú **Action (Acción)**, elija **Delete registry (Eliminar registro)**.

1. Ingrese el texto **Delete** en el campo para confirmar la eliminación.

1. Elija **Eliminar**.

Los registros seleccionados se eliminan de AWS Glue.

## Ejemplos de IAM para serializadores
<a name="schema-registry-gs1"></a>

**nota**  
AWSLas políticas administradas de conceden los permisos necesarios para los casos de uso comunes. Para obtener información sobre el uso de las políticas para administrar el registro de esquemas, consulte [AWS Políticas administradas (predefinidas) por para AWS Glue](security-iam-awsmanpol.md#access-policy-examples-aws-managed). 

Para los serializadores, debe crear una política mínima similar a la siguiente para poder encontrar el `schemaVersionId` para una definición de esquema determinada. Tenga en cuenta que debe tener permisos de lectura en el registro para poder leer los esquemas del registro. Puede limitar los registros que se pueden leer mediante la cláusula `Resource`.

Ejemplos de código 13:

```
{
    "Sid" : "GetSchemaByDefinition",
    "Effect" : "Allow",
    "Action" :
	[
        "glue:GetSchemaByDefinition"
    ],
        "Resource" : ["arn:aws:glue:us-east-2:012345678:registry/registryname-1",
                      "arn:aws:glue:us-east-2:012345678:schema/registryname-1/schemaname-1",
                      "arn:aws:glue:us-east-2:012345678:schema/registryname-1/schemaname-2"
                     ]
}
```

Además, también puede permitir a los productores crear nuevos esquemas y versiones mediante la inclusión de los siguientes métodos adicionales. Tenga en cuenta que debería poder inspeccionar el registro para agregar/eliminar/evolucionar los esquemas dentro de él. Puede limitar los registros que se pueden inspeccionar mediante la cláusula `Resource`.

Ejemplos de código 14:

```
{
    "Sid" : "RegisterSchemaWithMetadata",
    "Effect" : "Allow",
    "Action" :
	[
        "glue:GetSchemaByDefinition",
        "glue:CreateSchema",
        "glue:RegisterSchemaVersion",
        "glue:PutSchemaVersionMetadata",
    ],
    "Resource" : ["arn:aws:glue:aws-region:123456789012:registry/registryname-1",
                  "arn:aws:glue:aws-region:123456789012:schema/registryname-1/schemaname-1",
                  "arn:aws:glue:aws-region:123456789012:schema/registryname-1/schemaname-2"
                 ]
}
```

## Ejemplos de IAM para deserializadores
<a name="schema-registry-gs1b"></a>

Para los deserializadores (lado del consumidor), debe crear una política similar a la siguiente para permitir que el deserializador recupere el esquema de Schema Registry para su deserialización. Tenga en cuenta que debería poder inspeccionar el registro para obtener los esquemas dentro de él.

Ejemplos de código 15:

```
{
    "Sid" : "GetSchemaVersion",
    "Effect" : "Allow",
    "Action" :
	[
        "glue:GetSchemaVersion"
    ],
    "Resource" : ["*"]
}
```

## Conectividad privada mediante AWS PrivateLink
<a name="schema-registry-gs-private"></a>

Puede usar AWS PrivateLink para conectar la VPC del productor de datos a AWS Glue. Para ello, defina un punto de enlace de la VPC de interfaz para AWS Glue. Cuando se utiliza un punto de enlace de la interfaz de la VPC, la comunicación entre la VPC y AWS Glue se realiza en su totalidad dentro de la red de AWS. Para obtener más información, consulte [Uso de AWS Glue con puntos de enlace de la VPC](https://docs.aws.amazon.com/glue/latest/dg/vpc-endpoint.html).

# Acceso a métricas de Amazon CloudWatch
<a name="schema-registry-gs-monitoring"></a>

Las métricas de Amazon CloudWatch están disponibles como parte de la capa gratuita de CloudWatch. También puede acceder a estas métricas en la consola de CloudWatch. Las métricas de nivel de API incluyen CreateSchema (éxito y latencia), GetSchemabyDefinition, (éxito y latencia), GetSchemaVersion (éxito y latencia), RegisterSchemaVersion (éxito y latencia), PutSchemaVersionMetadata (éxito y latencia). Las métricas de nivel de recursos incluyen Registry.ThrottledByLimit, SchemaVersion.ThrottledByLimit, SchemaVersion.Size.

# Ejemplo de plantilla de CloudFormation para Schema Registry
<a name="schema-registry-integrations-cfn"></a>

A continuación se muestra una plantilla de ejemplo para crear recursos de Schema Registry en CloudFormation. Para crear esta pila en su cuenta, copie la plantilla anterior en un archivo `SampleTemplate.yaml` y ejecute el siguiente comando:

```
aws cloudformation create-stack --stack-name ABCSchemaRegistryStack --template-body "'cat SampleTemplate.yaml'"
```

En este ejemplo se utiliza `AWS::Glue::Registry` para crear un registro, `AWS::Glue::Schema` para crear un esquema, `AWS::Glue::SchemaVersion` para crear una versión de esquema y `AWS::Glue::SchemaVersionMetadata` para completar los metadatos de la versión del esquema. 

```
Description: "A sample CloudFormation template for creating Schema Registry resources."
Resources:
  ABCRegistry:
    Type: "AWS::Glue::Registry"
    Properties:
      Name: "ABCSchemaRegistry"
      Description: "ABC Corp. Schema Registry"
      Tags:
        Project: "Foo"
  ABCSchema:
    Type: "AWS::Glue::Schema"
    Properties:
      Registry:
        Arn: !Ref ABCRegistry
      Name: "TestSchema"
      Compatibility: "NONE"
      DataFormat: "AVRO"
      SchemaDefinition: >
        {"namespace":"foo.avro","type":"record","name":"user","fields":[{"name":"name","type":"string"},{"name":"favorite_number","type":"int"}]}
      Tags:
        Project: "Foo"
  SecondSchemaVersion:
    Type: "AWS::Glue::SchemaVersion"
    Properties:
      Schema:
        SchemaArn: !Ref ABCSchema
      SchemaDefinition: >
        {"namespace":"foo.avro","type":"record","name":"user","fields":[{"name":"status","type":"string", "default":"ON"}, {"name":"name","type":"string"},{"name":"favorite_number","type":"int"}]}
  FirstSchemaVersionMetadata:
    Type: "AWS::Glue::SchemaVersionMetadata"
    Properties:
      SchemaVersionId: !GetAtt ABCSchema.InitialSchemaVersionId
      Key: "Application"
      Value: "Kinesis"
  SecondSchemaVersionMetadata:
    Type: "AWS::Glue::SchemaVersionMetadata"
    Properties:
      SchemaVersionId: !Ref SecondSchemaVersion
      Key: "Application"
      Value: "Kinesis"
```

# Integración con AWS Glue Schema Registry
<a name="schema-registry-integrations"></a>

En estas secciones se describen las integraciones con AWS Glue Schema Registry. Los ejemplos de esta sección muestran un esquema con formato de datos AVRO. Para obtener más ejemplos, incluidos esquemas con formato de datos JSON, consulte las pruebas de integración y la información de ReadMe (Léame) en el [Repositorio de código abierto de AWS Glue Schema Registry](https://github.com/awslabs/aws-glue-schema-registry).

**Topics**
+ [Caso de uso: Conexión de Schema Registry a Amazon MSK o Apache Kafka](#schema-registry-integrations-amazon-msk)
+ [Caso de uso: Integración de Amazon Kinesis Data Streams con AWS Glue Schema Registry](#schema-registry-integrations-kds)
+ [Caso de uso: Amazon Managed Service para Apache Flink](#schema-registry-integrations-kinesis-data-analytics-apache-flink)
+ [Caso de uso: integración con AWS Lambda](#schema-registry-integrations-aws-lambda)
+ [Caso de uso: AWS Glue Data Catalog](#schema-registry-integrations-aws-glue-data-catalog)
+ [Caso de uso: Streaming de AWS Glue](#schema-registry-integrations-aws-glue-streaming)
+ [Caso de uso: Apache Kafka Streams](#schema-registry-integrations-apache-kafka-streams)

## Caso de uso: Conexión de Schema Registry a Amazon MSK o Apache Kafka
<a name="schema-registry-integrations-amazon-msk"></a>

Supongamos que está escribiendo datos en un tema de Apache Kafka. Puede seguir estos pasos para comenzar.

1. Cree un clúster de Amazon Managed Streaming for Apache Kafka (Amazon MSK) o Apache Kafka con al menos un tema. Si crea un clúster de Amazon MSK, puede utilizar la Consola de administración de AWS. Siga las siguientes isntrucciones: [Introducción al uso de Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html) en la *Guía para desarrolladores de Amazon Managed Streaming for Apache Kafka*.

1. Siga el paso [Instalación de bibliotecas SerDe](schema-registry-gs-serde.md) anterior.

1. Para crear registros de esquema, esquemas o versiones de esquema, siga las instrucciones de la sección [Introducción a Schema Registry](schema-registry-gs.md) de este documento.

1. Inicie a sus productores y consumidores en el uso de Schema Registry para escribir y leer registros a/desde el tema de Amazon MSK o Apache Kafka. Puede encontrar un ejemplo de código de productor y consumidor en [el archivo ReadMe (Léame)](https://github.com/awslabs/aws-glue-schema-registry/blob/master/README.md) de las bibliotecas Serde. La biblioteca de Schema Registry del productor serializará automáticamente el registro y agregará un ID de versión de esquema al registro.

1. Si se ha introducido el esquema de este registro, o si el registro automático está activado, el esquema se habrá registrado en Schema Registry.

1. El consumidor que lee el tema de Amazon MSK o Apache Kafka, con la biblioteca de AWS Glue Schema Registry, buscará automáticamente el esquema desde Schema Registry.

## Caso de uso: Integración de Amazon Kinesis Data Streams con AWS Glue Schema Registry
<a name="schema-registry-integrations-kds"></a>

Esta integración requiere que tenga un flujo de datos de Amazon Kinesis. Para obtener más información, consulte [Introducción a Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/getting-started.html) en la *Guía para desarrolladores de Amazon Kinesis Data Streams*.

Existen dos formas de interactuar con los datos en un flujo de datos de Kinesis.
+ A través de las bibliotecas Kinesis Producer Library (KPL) y Kinesis Client Library (KCL) en Java. No se proporciona soporte multilingüe.
+ A través de las API `PutRecords`, `PutRecord` y `GetRecords` de Kinesis Data Streams disponibles en AWS SDK para Java.

Si utiliza actualmente las bibliotecas KPL/KCL, le recomendamos seguir utilizando ese método. Hay versiones actualizadas de KCL y KPL con Schema Registry integrado, como se muestra en los ejemplos. De lo contrario, puede utilizar el código de muestra para aprovechar el AWS Glue Schema Registry si utiliza las API de KDS directamente.

La integración de Schema Registry sólo está disponible con KPL v0.14.2 o posterior y con KCL v2.3 o posterior. La integración de Schema Registry con datos JSON sólo está disponible con KPL v0.14.8 o posterior y con KCL v2.3.6 o posterior.

### Interacción con datos mediante SDK de Kinesis V2
<a name="schema-registry-integrations-kds-sdk-v2"></a>

En esta sección se describe la interacción con Kinesis mediante SDK de Kinesis V2

```
// Example JSON Record, you can construct a AVRO record also
private static final JsonDataWithSchema record = JsonDataWithSchema.builder(schemaString, payloadString);
private static final DataFormat dataFormat = DataFormat.JSON;

//Configurations for Schema Registry
GlueSchemaRegistryConfiguration gsrConfig = new GlueSchemaRegistryConfiguration("us-east-1");

GlueSchemaRegistrySerializer glueSchemaRegistrySerializer =
        new GlueSchemaRegistrySerializerImpl(awsCredentialsProvider, gsrConfig);
GlueSchemaRegistryDataFormatSerializer dataFormatSerializer =
        new GlueSchemaRegistrySerializerFactory().getInstance(dataFormat, gsrConfig);

Schema gsrSchema =
        new Schema(dataFormatSerializer.getSchemaDefinition(record), dataFormat.name(), "MySchema");

byte[] serializedBytes = dataFormatSerializer.serialize(record);

byte[] gsrEncodedBytes = glueSchemaRegistrySerializer.encode(streamName, gsrSchema, serializedBytes);

PutRecordRequest putRecordRequest = PutRecordRequest.builder()
        .streamName(streamName)
        .partitionKey("partitionKey")
        .data(SdkBytes.fromByteArray(gsrEncodedBytes))
        .build();
shardId = kinesisClient.putRecord(putRecordRequest)
        .get()
        .shardId();

GlueSchemaRegistryDeserializer glueSchemaRegistryDeserializer = new GlueSchemaRegistryDeserializerImpl(awsCredentialsProvider, gsrConfig);

GlueSchemaRegistryDataFormatDeserializer gsrDataFormatDeserializer =
        glueSchemaRegistryDeserializerFactory.getInstance(dataFormat, gsrConfig);

GetShardIteratorRequest getShardIteratorRequest = GetShardIteratorRequest.builder()
        .streamName(streamName)
        .shardId(shardId)
        .shardIteratorType(ShardIteratorType.TRIM_HORIZON)
        .build();

String shardIterator = kinesisClient.getShardIterator(getShardIteratorRequest)
        .get()
        .shardIterator();

GetRecordsRequest getRecordRequest = GetRecordsRequest.builder()
        .shardIterator(shardIterator)
        .build();
GetRecordsResponse recordsResponse = kinesisClient.getRecords(getRecordRequest)
        .get();

List<Object> consumerRecords = new ArrayList<>();
List<Record> recordsFromKinesis = recordsResponse.records();

for (int i = 0; i < recordsFromKinesis.size(); i++) {
    byte[] consumedBytes = recordsFromKinesis.get(i)
            .data()
            .asByteArray();

    Schema gsrSchema = glueSchemaRegistryDeserializer.getSchema(consumedBytes);
    Object decodedRecord = gsrDataFormatDeserializer.deserialize(ByteBuffer.wrap(consumedBytes),
                                                                    gsrSchema.getSchemaDefinition());
    consumerRecords.add(decodedRecord);
}
```

### Interacción con los datos mediante las bibliotecas KPL/KCL
<a name="schema-registry-integrations-kds-libraries"></a>

En esta sección se describe la integración de Kinesis Data Streams con Schema Registry mediante las bibliotecas KPL/KCL. Para obtener más información sobre el uso de KPL/KCL, consulte [Desarrollar productores con Amazon Kinesis Producer Library](https://docs.aws.amazon.com/streams/latest/dev/developing-producers-with-kpl.html) en la *Guía para desarrolladores de Amazon Kinesis Data Streams*.

#### Configuración de Schema Registry en KPL
<a name="schema-registry-integrations-kds-libraries-kpl"></a>

1. Establezca la definición de esquema para los datos, el formato de datos y el nombre del esquema creados en AWS Glue Schema Registry.

1. Opcionalmente, configure el objeto `GlueSchemaRegistryConfiguration`.

1. Transfiera el objeto de esquema a `addUserRecord API`.

   ```
   private static final String SCHEMA_DEFINITION = "{"namespace": "example.avro",\n"
   + " "type": "record",\n"
   + " "name": "User",\n"
   + " "fields": [\n"
   + " {"name": "name", "type": "string"},\n"
   + " {"name": "favorite_number", "type": ["int", "null"]},\n"
   + " {"name": "favorite_color", "type": ["string", "null"]}\n"
   + " ]\n"
   + "}";
   
   KinesisProducerConfiguration config = new KinesisProducerConfiguration();
   config.setRegion("us-west-1")
   
   //[Optional] configuration for Schema Registry.
   
   GlueSchemaRegistryConfiguration schemaRegistryConfig =
   new GlueSchemaRegistryConfiguration("us-west-1");
   
   schemaRegistryConfig.setCompression(true);
   
   config.setGlueSchemaRegistryConfiguration(schemaRegistryConfig);
   
   ///Optional configuration ends.
   
   final KinesisProducer producer =
         new KinesisProducer(config);
   
   final ByteBuffer data = getDataToSend();
   
   com.amazonaws.services.schemaregistry.common.Schema gsrSchema =
       new Schema(SCHEMA_DEFINITION, DataFormat.AVRO.toString(), "demoSchema");
   
   ListenableFuture<UserRecordResult> f = producer.addUserRecord(
   config.getStreamName(), TIMESTAMP, Utils.randomExplicitHashKey(), data, gsrSchema);
   
   private static ByteBuffer getDataToSend() {
         org.apache.avro.Schema avroSchema =
           new org.apache.avro.Schema.Parser().parse(SCHEMA_DEFINITION);
   
         GenericRecord user = new GenericData.Record(avroSchema);
         user.put("name", "Emily");
         user.put("favorite_number", 32);
         user.put("favorite_color", "green");
   
         ByteArrayOutputStream outBytes = new ByteArrayOutputStream();
         Encoder encoder = EncoderFactory.get().directBinaryEncoder(outBytes, null);
         new GenericDatumWriter<>(avroSchema).write(user, encoder);
         encoder.flush();
         return ByteBuffer.wrap(outBytes.toByteArray());
    }
   ```

#### Configuración de Kinesis Client Library
<a name="schema-registry-integrations-kds-libraries-kcl"></a>

Desarrolle un consumidor de Kinesis Client Library en Java. Para obtener más información, consulte [Desarrollo de un consumidor de Kinesis Client Library en Java](https://docs.aws.amazon.com/streams/latest/dev/kcl2-standard-consumer-java-example.html) en la *Guía para desarrolladores de Amazon Kinesis Data Streams*.

1. Cree una instancia de `GlueSchemaRegistryDeserializer` al transferir un objeto `GlueSchemaRegistryConfiguration`.

1. Transfiera el `GlueSchemaRegistryDeserializer` a `retrievalConfig.glueSchemaRegistryDeserializer`.

1. Acceda al esquema de los mensajes entrantes al llamar a `kinesisClientRecord.getSchema()`.

   ```
   GlueSchemaRegistryConfiguration schemaRegistryConfig =
       new GlueSchemaRegistryConfiguration(this.region.toString());
   
    GlueSchemaRegistryDeserializer glueSchemaRegistryDeserializer =
       new GlueSchemaRegistryDeserializerImpl(DefaultCredentialsProvider.builder().build(), schemaRegistryConfig);
   
    RetrievalConfig retrievalConfig = configsBuilder.retrievalConfig().retrievalSpecificConfig(new PollingConfig(streamName, kinesisClient));
    retrievalConfig.glueSchemaRegistryDeserializer(glueSchemaRegistryDeserializer);
   
     Scheduler scheduler = new Scheduler(
               configsBuilder.checkpointConfig(),
               configsBuilder.coordinatorConfig(),
               configsBuilder.leaseManagementConfig(),
               configsBuilder.lifecycleConfig(),
               configsBuilder.metricsConfig(),
               configsBuilder.processorConfig(),
               retrievalConfig
           );
   
    public void processRecords(ProcessRecordsInput processRecordsInput) {
               MDC.put(SHARD_ID_MDC_KEY, shardId);
               try {
                   log.info("Processing {} record(s)",
                   processRecordsInput.records().size());
                   processRecordsInput.records()
                   .forEach(
                       r ->
                           log.info("Processed record pk: {} -- Seq: {} : data {} with schema: {}",
                           r.partitionKey(), r.sequenceNumber(), recordToAvroObj(r).toString(), r.getSchema()));
               } catch (Throwable t) {
                   log.error("Caught throwable while processing records. Aborting.");
                   Runtime.getRuntime().halt(1);
               } finally {
                   MDC.remove(SHARD_ID_MDC_KEY);
               }
    }
   
    private GenericRecord recordToAvroObj(KinesisClientRecord r) {
       byte[] data = new byte[r.data().remaining()];
       r.data().get(data, 0, data.length);
       org.apache.avro.Schema schema = new org.apache.avro.Schema.Parser().parse(r.schema().getSchemaDefinition());
       DatumReader datumReader = new GenericDatumReader<>(schema);
   
       BinaryDecoder binaryDecoder = DecoderFactory.get().binaryDecoder(data, 0, data.length, null);
       return (GenericRecord) datumReader.read(null, binaryDecoder);
    }
   ```

#### Interacción con datos mediante las API de Kinesis Data Streams
<a name="schema-registry-integrations-kds-apis"></a>

En esta sección se describe la integración de Kinesis Data Streams con Schema Registry mediante las API de Kinesis Data Streams.

1. Actualice estas dependencias de Maven:

   ```
   <dependencyManagement>
           <dependencies>
               <dependency>
                   <groupId>com.amazonaws</groupId>
                   <artifactId>aws-java-sdk-bom</artifactId>
                   <version>1.11.884</version>
                   <type>pom</type>
                   <scope>import</scope>
               </dependency>
           </dependencies>
       </dependencyManagement>
   
       <dependencies>
           <dependency>
               <groupId>com.amazonaws</groupId>
               <artifactId>aws-java-sdk-kinesis</artifactId>
           </dependency>
   
           <dependency>
               <groupId>software.amazon.glue</groupId>
               <artifactId>schema-registry-serde</artifactId>
               <version>1.1.5</version>
           </dependency>
   
           <dependency>
               <groupId>com.fasterxml.jackson.dataformat</groupId>
               <artifactId>jackson-dataformat-cbor</artifactId>
               <version>2.11.3</version>
           </dependency>
       </dependencies>
   ```

1. En el productor, agregue información de encabezado de esquema con la API `PutRecords` o `PutRecord` en Kinesis Data Streams.

   ```
   //The following lines add a Schema Header to the record
           com.amazonaws.services.schemaregistry.common.Schema awsSchema =
               new com.amazonaws.services.schemaregistry.common.Schema(schemaDefinition, DataFormat.AVRO.name(),
                   schemaName);
           GlueSchemaRegistrySerializerImpl glueSchemaRegistrySerializer =
               new GlueSchemaRegistrySerializerImpl(DefaultCredentialsProvider.builder().build(), new GlueSchemaRegistryConfiguration(getConfigs()));
           byte[] recordWithSchemaHeader =
               glueSchemaRegistrySerializer.encode(streamName, awsSchema, recordAsBytes);
   ```

1. En el productor, use la API `PutRecords` o `PutRecord` para poner el registro en el flujo de datos.

1. En el consumidor, elimine el registro de esquema del encabezado y serialice un registro de esquemas de Avro.

   ```
   //The following lines remove Schema Header from record
           GlueSchemaRegistryDeserializerImpl glueSchemaRegistryDeserializer =
               new GlueSchemaRegistryDeserializerImpl(DefaultCredentialsProvider.builder().build(), getConfigs());
           byte[] recordWithSchemaHeaderBytes = new byte[recordWithSchemaHeader.remaining()];
           recordWithSchemaHeader.get(recordWithSchemaHeaderBytes, 0, recordWithSchemaHeaderBytes.length);
           com.amazonaws.services.schemaregistry.common.Schema awsSchema =
               glueSchemaRegistryDeserializer.getSchema(recordWithSchemaHeaderBytes);
           byte[] record = glueSchemaRegistryDeserializer.getData(recordWithSchemaHeaderBytes);
   
           //The following lines serialize an AVRO schema record
           if (DataFormat.AVRO.name().equals(awsSchema.getDataFormat())) {
               Schema avroSchema = new org.apache.avro.Schema.Parser().parse(awsSchema.getSchemaDefinition());
               Object genericRecord = convertBytesToRecord(avroSchema, record);
               System.out.println(genericRecord);
           }
   ```

#### Interacción con datos mediante las API de Kinesis Data Streams
<a name="schema-registry-integrations-kds-apis-reference"></a>

El siguiente es el código de ejemplo para usar las API `PutRecords` y `GetRecords`.

```
//Full sample code
import com.amazonaws.services.schemaregistry.deserializers.GlueSchemaRegistryDeserializerImpl;
import com.amazonaws.services.schemaregistry.serializers.GlueSchemaRegistrySerializerImpl;
import com.amazonaws.services.schemaregistry.utils.AVROUtils;
import com.amazonaws.services.schemaregistry.utils.AWSSchemaRegistryConstants;
import org.apache.avro.Schema;
import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericDatumWriter;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.Decoder;
import org.apache.avro.io.DecoderFactory;
import org.apache.avro.io.Encoder;
import org.apache.avro.io.EncoderFactory;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.services.glue.model.DataFormat;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;


public class PutAndGetExampleWithEncodedData {
    static final String regionName = "us-east-2";
    static final String streamName = "testStream1";
    static final String schemaName = "User-Topic";
    static final String AVRO_USER_SCHEMA_FILE = "src/main/resources/user.avsc";
    KinesisApi kinesisApi = new KinesisApi();

    void runSampleForPutRecord() throws IOException {
        Object testRecord = getTestRecord();
        byte[] recordAsBytes = convertRecordToBytes(testRecord);
        String schemaDefinition = AVROUtils.getInstance().getSchemaDefinition(testRecord);

        //The following lines add a Schema Header to a record
        com.amazonaws.services.schemaregistry.common.Schema awsSchema =
            new com.amazonaws.services.schemaregistry.common.Schema(schemaDefinition, DataFormat.AVRO.name(),
                schemaName);
        GlueSchemaRegistrySerializerImpl glueSchemaRegistrySerializer =
            new GlueSchemaRegistrySerializerImpl(DefaultCredentialsProvider.builder().build(), new GlueSchemaRegistryConfiguration(regionName));
        byte[] recordWithSchemaHeader =
            glueSchemaRegistrySerializer.encode(streamName, awsSchema, recordAsBytes);

        //Use PutRecords api to pass a list of records
        kinesisApi.putRecords(Collections.singletonList(recordWithSchemaHeader), streamName, regionName);

        //OR
        //Use PutRecord api to pass single record
        //kinesisApi.putRecord(recordWithSchemaHeader, streamName, regionName);
    }

    byte[] runSampleForGetRecord() throws IOException {
        ByteBuffer recordWithSchemaHeader = kinesisApi.getRecords(streamName, regionName);

        //The following lines remove the schema registry header
        GlueSchemaRegistryDeserializerImpl glueSchemaRegistryDeserializer =
            new GlueSchemaRegistryDeserializerImpl(DefaultCredentialsProvider.builder().build(), new GlueSchemaRegistryConfiguration(regionName));
        byte[] recordWithSchemaHeaderBytes = new byte[recordWithSchemaHeader.remaining()];
        recordWithSchemaHeader.get(recordWithSchemaHeaderBytes, 0, recordWithSchemaHeaderBytes.length);

        com.amazonaws.services.schemaregistry.common.Schema awsSchema =
            glueSchemaRegistryDeserializer.getSchema(recordWithSchemaHeaderBytes);

        byte[] record = glueSchemaRegistryDeserializer.getData(recordWithSchemaHeaderBytes);

        //The following lines serialize an AVRO schema record
        if (DataFormat.AVRO.name().equals(awsSchema.getDataFormat())) {
            Schema avroSchema = new org.apache.avro.Schema.Parser().parse(awsSchema.getSchemaDefinition());
            Object genericRecord = convertBytesToRecord(avroSchema, record);
            System.out.println(genericRecord);
        }

        return record;
    }

    private byte[] convertRecordToBytes(final Object record) throws IOException {
        ByteArrayOutputStream recordAsBytes = new ByteArrayOutputStream();
        Encoder encoder = EncoderFactory.get().directBinaryEncoder(recordAsBytes, null);
        GenericDatumWriter datumWriter = new GenericDatumWriter<>(AVROUtils.getInstance().getSchema(record));
        datumWriter.write(record, encoder);
        encoder.flush();
        return recordAsBytes.toByteArray();
    }

    private GenericRecord convertBytesToRecord(Schema avroSchema, byte[] record) throws IOException {
        final GenericDatumReader<GenericRecord> datumReader = new GenericDatumReader<>(avroSchema);
        Decoder decoder = DecoderFactory.get().binaryDecoder(record, null);
        GenericRecord genericRecord = datumReader.read(null, decoder);
        return genericRecord;
    }

    private Map<String, String> getMetadata() {
        Map<String, String> metadata = new HashMap<>();
        metadata.put("event-source-1", "topic1");
        metadata.put("event-source-2", "topic2");
        metadata.put("event-source-3", "topic3");
        metadata.put("event-source-4", "topic4");
        metadata.put("event-source-5", "topic5");
        return metadata;
    }

    private GlueSchemaRegistryConfiguration getConfigs() {
        GlueSchemaRegistryConfiguration configs = new GlueSchemaRegistryConfiguration(regionName);
        configs.setSchemaName(schemaName);
        configs.setAutoRegistration(true);
        configs.setMetadata(getMetadata());
        return configs;
    }

    private Object getTestRecord() throws IOException {
        GenericRecord genericRecord;
        Schema.Parser parser = new Schema.Parser();
        Schema avroSchema = parser.parse(new File(AVRO_USER_SCHEMA_FILE));

        genericRecord = new GenericData.Record(avroSchema);
        genericRecord.put("name", "testName");
        genericRecord.put("favorite_number", 99);
        genericRecord.put("favorite_color", "red");

        return genericRecord;
    }
}
```

## Caso de uso: Amazon Managed Service para Apache Flink
<a name="schema-registry-integrations-kinesis-data-analytics-apache-flink"></a>

Apache Flink es un marco de código abierto y motor de procesamiento distribuido popular para informática con estado sobre flujos de datos ilimitados y delimitados. Amazon Managed Service para Apache Flink es un servicio de AWS completamente administrado que permite crear y administrar aplicaciones de Apache Flink para procesar datos de streaming.

El código abierto Apache Flink proporciona una serie de orígenes y receptores. Por ejemplo, los orígenes de datos predefinidos incluyen la lectura de archivos, directorios y sockets, y la ingesta de datos de recopilaciones e iteradores. Los conectores Apache Flink DataStream proporcionan código para que Apache Flink interactúe con varios sistemas de terceros, como Apache Kafka o Kinesis como orígenes o receptores.

Para obtener más información, consulte la [Guía para desarrolladores de Amazon Kinesis Data Analytics](https://docs.aws.amazon.com/kinesisanalytics/latest/java/what-is.html).

### Conector Kafka de Apache Flink
<a name="schema-registry-integrations-kafka-connector"></a>

Apache Flink proporciona un conector de flujo de datos Apache Kafka para leer y escribir datos en temas de Kafka con garantías de una sola vez. El consumidor Kafka de Flink, `FlinkKafkaConsumer`, proporciona acceso a la lectura de uno o más temas de Kafka. El productor Kafka de Apache Flink, `FlinkKafkaProducer`, permite escribir una secuencia de registros en uno o más temas de Kafka. Para obtener más información, consulte [Conector de Apache Kafka](https://ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/kafka.html).

### Conector de flujos de Kinesis de Apache Flink
<a name="schema-registry-integrations-kinesis-connector"></a>

El conector de flujo de datos de Kinesis proporciona acceso a Amazon Kinesis Data Streams. El `FlinkKinesisConsumer` es un origen de datos de streaming en paralelo de exactamente una única vez que se suscribe a múltiples flujos de Kinesis dentro de la misma región de servicio de AWS, y puede manejar de forma transparente la redistribución de flujos mientras el trabajo se está ejecutando. Cada subtarea del consumidor es responsable de obtener registros de datos de múltiples fragmentos de Kinesis. El número de fragmentos obtenidos por cada subtarea cambiará a medida que Kinesis cierre y cree fragmentos. El `FlinkKinesisProducer` utiliza Kinesis Producer Library (KPL) para poner los datos de un flujo de Apache Flink en un flujo de Kinesis. Para obtener más información, consulte [Conector de Amazon Kinesis Streams](https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/connectors/kinesis.html).

Para obtener más información, consulte el [repositorio GitHub de esquemas de AWS Glue](https://github.com/awslabs/aws-glue-schema-registry).

### Integración con Apache Flink
<a name="schema-registry-integrations-apache-flink-integrate"></a>

La biblioteca SerDes proporcionada con Schema Registry se integra con Apache Flink. Para trabajar con Apache Flink, debe implementar las interfaces de [https://github.com/apache/flink/blob/master/flink-streaming-java/src/main/java/org/apache/flink/streaming/util/serialization/SerializationSchema.java](https://github.com/apache/flink/blob/master/flink-streaming-java/src/main/java/org/apache/flink/streaming/util/serialization/SerializationSchema.java) y [https://github.com/apache/flink/blob/8674b69964eae50cad024f2c5caf92a71bf21a09/flink-core/src/main/java/org/apache/flink/api/common/serialization/DeserializationSchema.java](https://github.com/apache/flink/blob/8674b69964eae50cad024f2c5caf92a71bf21a09/flink-core/src/main/java/org/apache/flink/api/common/serialization/DeserializationSchema.java), denominadas `GlueSchemaRegistryAvroSerializationSchema` y `GlueSchemaRegistryAvroDeserializationSchema`, que puede conectar a los conectores Apache Flink.

### Adición de una dependencia de AWS Glue Schema Registry en la aplicación Apache Flink
<a name="schema-registry-integrations-kinesis-data-analytics-dependencies"></a>

Para configurar las dependencias de integración a AWS Glue Schema Registry en la aplicación Apache Flink:

1. Agregue la dependencia al archivo `pom.xml`.

   ```
   <dependency>
       <groupId>software.amazon.glue</groupId>
       <artifactId>schema-registry-flink-serde</artifactId>
       <version>1.0.0</version>
   </dependency>
   ```

#### Integración de Kafka o Amazon MSK con Apache Flink
<a name="schema-registry-integrations-kda-integrate-msk"></a>

Puede usar Managed Service para Apache Flink con Kafka como origen o receptor.

**Kafka como origen**  
En el siguiente diagrama, se muestra la integración de Kinesis Data Streams con Managed Service para Apache Flink, con Kafka como origen.

![\[Kafka como origen.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/gsr-kafka-source.png)


**Kafka como receptor**  
En el siguiente diagrama, se muestra la integración de Kinesis Data Streams con Managed Service para Apache Flink, con Kafka como receptor.

![\[Kafka como receptor.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/gsr-kafka-sink.png)


Para integrar Kafka (o Amazon MSK) con Managed Service para Apache Flink, con Kafka como origen o receptor, realice los siguientes cambios de código. Agregue los bloques de código en negrita a su código respectivo en las secciones análogas.

Si Kafka es el origen, entonces use el código deserializador (bloque 2). Si Kafka es el receptor, use el código serializador (bloque 3).

```
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

String topic = "topic";
Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "localhost:9092");
properties.setProperty("group.id", "test");

// block 1
Map<String, Object> configs = new HashMap<>();
configs.put(AWSSchemaRegistryConstants.AWS_REGION, "aws-region");
configs.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, true);
configs.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName());

FlinkKafkaConsumer<GenericRecord> consumer = new FlinkKafkaConsumer<>(
    topic,
    // block 2
    GlueSchemaRegistryAvroDeserializationSchema.forGeneric(schema, configs),
    properties);

FlinkKafkaProducer<GenericRecord> producer = new FlinkKafkaProducer<>(
    topic,
    // block 3
    GlueSchemaRegistryAvroSerializationSchema.forGeneric(schema, topic, configs),
    properties);

DataStream<GenericRecord> stream = env.addSource(consumer);
stream.addSink(producer);
env.execute();
```

#### Integración de Kinesis Data Streams con Apache Flink
<a name="schema-registry-integrations-integrate-kds"></a>

Puede usar Managed Service para Apache Flink, con Kinesis Data Streams como origen o como receptor.

**Kinesis Data Streams como origen**  
En el siguiente diagrama, se muestra la integración de Kinesis Data Streams con Managed Service para Apache Flink, con Kinesis Data Streams como origen.

![\[Kinesis Data Streams como origen.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/gsr-kinesis-source.png)


**Kinesis Data Streams como receptor**  
En el siguiente diagrama, se muestra la integración de Kinesis Data Streams con Managed Service para Apache Flink, con Kinesis Data Streams como receptor.

![\[Kinesis Data Streams como receptor.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/gsr-kinesis-sink.png)


Para integrar Kinesis Data Streams con Managed Service para Apache Flink, con Kinesis Data Streams como origen o receptor, realice los cambios de código que se indican a continuación. Agregue los bloques de código en negrita a su código respectivo en las secciones análogas.

Si Kinesis Data Streams es el origen, utilice el código deserializador (bloque 2). Si Kinesis Data Streams es el receptor, use el código serializador (bloque 3).

```
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

String streamName = "stream";
Properties consumerConfig = new Properties();
consumerConfig.put(AWSConfigConstants.AWS_REGION, "aws-region");
consumerConfig.put(AWSConfigConstants.AWS_ACCESS_KEY_ID, "aws_access_key_id");
consumerConfig.put(AWSConfigConstants.AWS_SECRET_ACCESS_KEY, "aws_secret_access_key");
consumerConfig.put(ConsumerConfigConstants.STREAM_INITIAL_POSITION, "LATEST");

// block 1
Map<String, Object> configs = new HashMap<>();
configs.put(AWSSchemaRegistryConstants.AWS_REGION, "aws-region");
configs.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, true);
configs.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName());

FlinkKinesisConsumer<GenericRecord> consumer = new FlinkKinesisConsumer<>(
    streamName,
    // block 2
    GlueSchemaRegistryAvroDeserializationSchema.forGeneric(schema, configs),
    properties);

FlinkKinesisProducer<GenericRecord> producer = new FlinkKinesisProducer<>(
    // block 3
    GlueSchemaRegistryAvroSerializationSchema.forGeneric(schema, topic, configs),
    properties);
producer.setDefaultStream(streamName);
producer.setDefaultPartition("0");

DataStream<GenericRecord> stream = env.addSource(consumer);
stream.addSink(producer);
env.execute();
```

## Caso de uso: integración con AWS Lambda
<a name="schema-registry-integrations-aws-lambda"></a>

Para utilizar una función AWS Lambda como consumidor Apache Kafka/Amazon MSK y deserializar mensajes codificados por AVRO-con AWS Glue Schema Registry, visite la [página de MSK Labs](https://amazonmsk-labs.workshop.aws/en/msklambda/gsrschemareg.html).

## Caso de uso: AWS Glue Data Catalog
<a name="schema-registry-integrations-aws-glue-data-catalog"></a>

Las tablas de AWS Glue soportan esquemas que se pueden especificar en forma manual o por referencia a AWS Glue Schema Registry. Schema Registry se integra con el Catálogo de datos para permitirle utilizar opcionalmente esquemas almacenados en Schema Registry al crear o actualizar tablas o particiones de AWS Glue en el Catálogo de datos. Para identificar una definición de esquema en Schema Registry, es necesario conocer, al menos, el ARN del esquema del que forma parte. Una versión de esquema, que contiene una definición de esquema, puede ser referenciada por su UUID o número de versión. Siempre hay una versión de esquema, la “última” versión, que se puede buscar sin saber su número de versión o UUID.

Al llamar a las operaciones `CreateTable` o `UpdateTable`, transferirá una estructura `TableInput` que contiene un `StorageDescriptor`, que podría tener una `SchemaReference` a un esquema existente en Schema Registry. Del mismo modo, cuando se llama a las API `GetTable` o `GetPartition`, la respuesta puede contener el esquema y la `SchemaReference`. Cuando se crea una tabla o partición mediante referencias de esquema, el Catálogo de datos intentará buscar el esquema para esta referencia de esquema. En caso de que no pueda encontrar el esquema, Schema Registry devuelve un esquema vacío en la respuesta `GetTable`; de lo contrario, la respuesta tendrá el esquema y la referencia del esquema.

Puede realizar las siguientes acciones desde la consola de AWS Glue.

Para realizar estas operaciones y crear, actualizar o ver la información del esquema, debe brindar al usuario que realiza la llamada un rol de IAM que proporcione permisos para la API `GetSchemaVersion`.

### Agregar una tabla o actualizar el esquema de una tabla
<a name="schema-registry-integrations-aws-glue-data-catalog-table"></a>

Agregar una nueva tabla a partir de un esquema existente enlaza la tabla a una versión de esquema específica. Una vez que se registren las nuevas versiones de esquema, puede actualizar esta definición de tabla desde la página View tables (Ver tabla) en la consola de AWS Glue o con la API [Acción UpdateTable (Python: update\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-UpdateTable).

#### Agregar una tabla a partir de un esquema existente
<a name="schema-registry-integrations-aws-glue-data-catalog-table-existing"></a>

Puede crear una tabla de AWS Glue a partir de una versión de esquema en el registro mediante la consola AWS Glue o la API `CreateTable`.

**AWS GlueAPI**  
Al llamar a la API `CreateTable`, transferirá una `TableInput` que contiene un `StorageDescriptor` con una `SchemaReference` a un esquema existente en Schema Registry.

**Consola de AWS Glue**  
Para crear una tabla desde la consola de AWS Glue:

1. Inicie sesión en Consola de administración de AWS y 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, en **Data catalog** (Catálogo de datos), elija **Tables (Tablas)**.

1. En el menú **Add tables (Agregar tablas)**, elija **Add table from existing schema (Agregar tabla a partir del esquema existente)**.

1. Configure las propiedades de la tabla y el almacén de datos según la Guía para desarrolladores de AWS Glue.

1. En la página **Choose a Glue schema (Elegir un esquema de Glue)**, seleccione el **Record (Registro)** donde reside el esquema.

1. Elija el **Schema name (Nombre del esquema)** y seleccione la **Version (Versión)** del esquema que se va a aplicar.

1. Revise la previsualización del esquema y elija **Next (Siguiente)**.

1. Revise y cree la tabla.

El esquema y la versión aplicados a la tabla aparecen en la columna **Glue schema (Esquema de Glue)** en la lista de tablas. Puede ver la tabla para ver más detalles.

#### Actualización del esquema de una tabla
<a name="schema-registry-integrations-aws-glue-data-catalog-table-updating"></a>

Cuando esté disponible una nueva versión de esquema, es posible que desee actualizar el esquema de una tabla mediante la API [Acción UpdateTable (Python: update\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-UpdateTable) o la consola de AWS Glue. 

**importante**  
Al actualizar el esquema de una tabla existente que tiene un esquema de AWS Glue especificado manualmente, el nuevo esquema al que se hace referencia en el Schema Registry puede ser incompatible. Esto puede dar lugar a que sus trabajos presenten errores.

**AWS GlueAPI**  
Al llamar a la API `UpdateTable`, transferirá una `TableInput` que contiene un `StorageDescriptor` con una `SchemaReference` a un esquema existente en Schema Registry.

**Consola de AWS Glue**  
Para actualizar el esquema de una tabla desde la consola de AWS Glue:

1. Inicie sesión en Consola de administración de AWS y 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, en **Data catalog** (Catálogo de datos), elija **Tables (Tablas)**.

1. Vea la tabla de la lista de tablas.

1. Haga clic en **Update schema (Actualizar esquema)** en el cuadro que le informa sobre una nueva versión.

1. Revise las diferencias entre el esquema actual y el nuevo.

1. Seleccione **Show all schema differences (Mostrar todas las diferencias de esquemas)** para ver más detalles.

1. Seleccione **Save table (Guardar tabla)** para aceptar la nueva versión.

## Caso de uso: Streaming de AWS Glue
<a name="schema-registry-integrations-aws-glue-streaming"></a>

AWS GlueEl streaming de consume datos de orígenes de streaming y realiza operaciones ETL antes de escribir en un receptor de salida. El origen del streaming de entrada se puede especificar mediante una tabla de datos o directamente especificando la configuración de origen.

El streaming de AWS Glue admite una tabla del Catálogo de datos para el origen de transmisión creado con el esquema presente en AWS Glue Schema Registry. Puede crear un esquema en AWS Glue Schema Registry y, mediante el uso de este, crear una tabla de AWS Glue con un origen de streaming. Esta tabla de AWS Glue se puede utilizar como entrada para un trabajo de streaming de AWS Glue de manera de deserializar los datos en el flujo de entrada.

Un punto que se debe tener en cuenta aquí es que, cuando cambia el esquema de AWS Glue Schema Registry, debe reiniciar el trabajo de streaming de AWS Glue para que el cambio se vea reflejado.

## Caso de uso: Apache Kafka Streams
<a name="schema-registry-integrations-apache-kafka-streams"></a>

La API Apache Kafka Streams es una biblioteca cliente para procesar y analizar datos almacenados en Apache Kafka. Esta sección describe la integración de Apache Kafka Streams con AWS Glue Schema Registry, que le permite administrar y aplicar esquemas en sus aplicaciones de streaming de datos. Para obtener más información sobre Apache Kafka Streams, consulte [Apache Kafka Streams](https://kafka.apache.org/documentation/streams/).

### Integración con las bibliotecas SerDes
<a name="schema-registry-integrations-apache-kafka-streams-integrate"></a>

Existe una clase de `GlueSchemaRegistryKafkaStreamsSerde` con la que puede configurar una aplicación de Streams.

#### Código de ejemplo de aplicación de Kafka Streams
<a name="schema-registry-integrations-apache-kafka-streams-application"></a>

Para utilizar el AWS Glue Schema Registry dentro de una aplicación Apache Kafka Streams:

1. Configure la aplicación Kafka Streams.

   ```
   final Properties props = new Properties();
       props.put(StreamsConfig.APPLICATION_ID_CONFIG, "avro-streams");
       props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
       props.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);
       props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
       props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, AWSKafkaAvroSerDe.class.getName());
       props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
   
       props.put(AWSSchemaRegistryConstants.AWS_REGION, "aws-region");
       props.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, true);
       props.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName());
   	props.put(AWSSchemaRegistryConstants.DATA_FORMAT, DataFormat.AVRO.name());
   ```

1. Cree un flujo a partir del tema avro-input.

   ```
   StreamsBuilder builder = new StreamsBuilder();
   final KStream<String, GenericRecord> source = builder.stream("avro-input");
   ```

1. Procese los registros de datos (el ejemplo filtra aquellos registros cuyo valor de color\$1favorito es rosa o cuyo valor de cantidad es 15).

   ```
   final KStream<String, GenericRecord> result = source
       .filter((key, value) -> !"pink".equals(String.valueOf(value.get("favorite_color"))));
       .filter((key, value) -> !"15.0".equals(String.valueOf(value.get("amount"))));
   ```

1. Escriba los resultados en el tema avro-output.

   ```
   result.to("avro-output");
   ```

1. Inicie la aplicación Apache Kafka Streams.

   ```
   KafkaStreams streams = new KafkaStreams(builder.build(), props);
   streams.start();
   ```

#### Resultados de implementación
<a name="schema-registry-integrations-apache-kafka-streams-results"></a>

Estos resultados muestran el proceso de filtrado de registros que se filtraron en el paso 3 como color\$1favorito “rosa” o valor “15,0”.

Registros antes del filtrado:

```
{"name": "Sansa", "favorite_number": 99, "favorite_color": "white"}
{"name": "Harry", "favorite_number": 10, "favorite_color": "black"}
{"name": "Hermione", "favorite_number": 1, "favorite_color": "red"}
{"name": "Ron", "favorite_number": 0, "favorite_color": "pink"}
{"name": "Jay", "favorite_number": 0, "favorite_color": "pink"}

{"id": "commute_1","amount": 3.5}
{"id": "grocery_1","amount": 25.5}
{"id": "entertainment_1","amount": 19.2}
{"id": "entertainment_2","amount": 105}
	{"id": "commute_1","amount": 15}
```

Registros después del filtrado:

```
{"name": "Sansa", "favorite_number": 99, "favorite_color": "white"}
{"name": "Harry", "favorite_number": 10, "favorite_color": "black"}
{"name": "Hermione", "favorite_number": 1, "favorite_color": "red"}
{"name": "Ron", "favorite_number": 0, "favorite_color": "pink"}

{"id": "commute_1","amount": 3.5}
{"id": "grocery_1","amount": 25.5}
{"id": "entertainment_1","amount": 19.2}
{"id": "entertainment_2","amount": 105}
```

### Caso de uso: Apache Kafka Connect
<a name="schema-registry-integrations-apache-kafka-connect"></a>

La integración de Apache Kafka Connect con el AWS Glue Schema Registry permite obtener información de esquemas a partir de los conectores. Los convertidores Apache Kafka especifican el formato de datos dentro de Apache Kafka y cómo traducirlos a datos Apache Kafka Connect. Cada usuario de Apache Kafka Connect tendrá que configurar estos convertidores en función del formato en el que desea que sus datos estén cargados o almacenados en Apache Kafka. De esta manera, puede definir sus propios convertidores para traducir los datos de Apache Kafka Connect al tipo utilizado en AWS Glue Schema Registry (por ejemplo: Avro) y utilizar nuestro serializador para registrar su esquema y serializar. Los convertidores también pueden usar nuestro deserializador para deserializar los datos recibidos de Apache Kafka y volver a convertirlos en datos Apache Kafka Connect. A continuación se muestra un diagrama de flujo de trabajo de ejemplo.

![\[Flujo de trabajo Apache Kafka Connect.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/schema_reg_int_kafka_connect.png)


1. Instale el proyecto `aws-glue-schema-registry` al clonar el [repositorio de Github para AWS Glue Schema Registry](https://github.com/awslabs/aws-glue-schema-registry).

   ```
   git clone git@github.com:awslabs/aws-glue-schema-registry.git
   cd aws-glue-schema-registry
   mvn clean install
   mvn dependency:copy-dependencies
   ```

1. Si planea usar Apache Kafka Connect en modo *independiente*, actualice **connect-standalone.properties** según las instrucciones que se incluyen a continuación. Si planea usar Apache Kafka Connect en modo *distribuido*, actualice **connect-avro-distributed.properties** según las mismas instrucciones.

   1. Agregue estas propiedades también al archivo de propiedades de conexión Apache Kafka:

      ```
      key.converter.region=aws-region
      value.converter.region=aws-region
      key.converter.schemaAutoRegistrationEnabled=true
      value.converter.schemaAutoRegistrationEnabled=true
      key.converter.avroRecordType=GENERIC_RECORD
      value.converter.avroRecordType=GENERIC_RECORD
      ```

   1. Agregue el siguiente comando a la sección **Launch mode (Modo de lanzamiento)** en **kafka-run-class.sh**:

      ```
      -cp $CLASSPATH:"<your AWS GlueSchema Registry base directory>/target/dependency/*"
      ```

1. Agregue el siguiente comando a la sección **Launch mode (Modo de lanzamiento)** en **kafka-run-class.sh**

   ```
   -cp $CLASSPATH:"<your AWS GlueSchema Registry base directory>/target/dependency/*" 
   ```

   Debería tener un aspecto similar al siguiente:

   ```
   # Launch mode
   if [ "x$DAEMON_MODE" = "xtrue" ]; then
     nohup "$JAVA" $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH:"/Users/johndoe/aws-glue-schema-registry/target/dependency/*" $KAFKA_OPTS "$@" > "$CONSOLE_OUTPUT_FILE" 2>&1 < /dev/null &
   else
     exec "$JAVA" $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH:"/Users/johndoe/aws-glue-schema-registry/target/dependency/*" $KAFKA_OPTS "$@"
   fi
   ```

1. Si usa bash, ejecute los siguientes comandos para configurar su CLASSPATH en su bash\$1profile. Para cualquier otro shell, actualice el entorno en consecuencia.

   ```
   echo 'export GSR_LIB_BASE_DIR=<>' >>~/.bash_profile
   echo 'export GSR_LIB_VERSION=1.0.0' >>~/.bash_profile
   echo 'export KAFKA_HOME=<your Apache Kafka installation directory>' >>~/.bash_profile
   echo 'export CLASSPATH=$CLASSPATH:$GSR_LIB_BASE_DIR/avro-kafkaconnect-converter/target/schema-registry-kafkaconnect-converter-$GSR_LIB_VERSION.jar:$GSR_LIB_BASE_DIR/common/target/schema-registry-common-$GSR_LIB_VERSION.jar:$GSR_LIB_BASE_DIR/avro-serializer-deserializer/target/schema-registry-serde-$GSR_LIB_VERSION.jar' >>~/.bash_profile
   source ~/.bash_profile
   ```

1. (Opcional) si desea realizar una prueba con un origen de archivo simple, clone el conector de origen del archivo.

   ```
   git clone https://github.com/mmolimar/kafka-connect-fs.git
   cd kafka-connect-fs/
   ```

   1. En la configuración del conector de origen, edite el formato de datos a Avro, el lector de archivos a `AvroFileReader` y actualice un objeto Avro de ejemplo desde la ruta del archivo de la que está leyendo. Por ejemplo:

      ```
      vim config/kafka-connect-fs.properties
      ```

      ```
      fs.uris=<path to a sample avro object>
      policy.regexp=^.*\.avro$
      file_reader.class=com.github.mmolimar.kafka.connect.fs.file.reader.AvroFileReader
      ```

   1. Instale el conector de origen.

      ```
      mvn clean package
      echo "export CLASSPATH=\$CLASSPATH:\"\$(find target/ -type f -name '*.jar'| grep '\-package' | tr '\n' ':')\"" >>~/.bash_profile
      source ~/.bash_profile
      ```

   1. Actualice las propiedades del receptor en `<your Apache Kafka installation directory>/config/connect-file-sink.properties`, actualice el nombre del tema y el nombre del archivo de salida.

      ```
      file=<output file full path>
      topics=<my topic>
      ```

1. Inicie el conector de origen (en este ejemplo es un conector de origen de archivo).

   ```
   $KAFKA_HOME/bin/connect-standalone.sh $KAFKA_HOME/config/connect-standalone.properties config/kafka-connect-fs.properties
   ```

1. Ejecute el conector del receptor (en este ejemplo es un conector receptor de archivo).

   ```
   $KAFKA_HOME/bin/connect-standalone.sh $KAFKA_HOME/config/connect-standalone.properties $KAFKA_HOME/config/connect-file-sink.properties
   ```

   Para ver un ejemplo de uso de Kafka Connect, mire el script run-local-tests.sh en la carpeta integration-tests (pruebas de integración) en el [repositorio de Github para AWS Glue Schema Registry](https://github.com/awslabs/aws-glue-schema-registry/tree/master/integration-tests).

# Migración desde un registro de esquemas de terceros a AWS Glue Schema Registry
<a name="schema-registry-integrations-migration"></a>

La migración de un registro de esquema de terceros a AWS Glue Schema Registry tiene una dependencia en el registro de esquemas de terceros existente. Si hay registros en un tema de Apache Kafka que se enviaron mediante un registro de esquemas de terceros, los consumidores necesitan el registro de esquemas de terceros para deserializar esos registros. `AWSKafkaAvroDeserializer` proporciona la capacidad de especificar una clase de deserializador secundario que apunta al deserializador de terceros y se utiliza para deserializar esos registros.

Existen dos criterios para retirar un esquema de terceros. En primer lugar, el retiro sólo puede ocurrir después de que los registros en temas de Apache Kafka que utilizan el registro de esquemas de terceros ya no sean requeridos por o para un consumidor. En segundo lugar, el retiro puede ocurrir si se eliminan los temas de Apache Kafka, dependiendo del período de retención especificado para esos temas. Tenga en cuenta que si tiene temas que tienen retención infinita, puede migrar a AWS Glue Schema Registry, pero no podrá retirar el registro de esquemas de terceros. Como solución alternativa, puede usar una aplicación o Mirror Maker 2 para leer el tema actual y producir un tema nuevo con AWS Glue Schema Registry.

Migración desde un registro de esquemas de terceros a AWS Glue Schema Registry:

1. Cree un registro en AWS Glue Schema Registry o utilice el registro predeterminado.

1. Detenga el consumidor. Modifíquelo para incluir AWS Glue Schema Registry como el deserializador principal y el registro de esquemas de terceros como el secundario. 
   + Configure las propiedades del consumidor. En este ejemplo, el secondary\$1deserializer (deserializador secundario) se configura en un deserializador diferente. El comportamiento es el siguiente: el consumidor recupera los registros de Amazon MSK y primero intenta utilizar el `AWSKafkaAvroDeserializer`. Si no puede leer el byte mágico que contiene el ID de esquema de Avro para AWS Glue Schema Registry, el `AWSKafkaAvroDeserializer` luego intenta usar la clase de deserializador proporcionada en el secondary\$1deserializer (deserializador secundario). Las propiedades específicas del deserializador secundario también deben proporcionarse en las propiedades del consumidor, como schema\$1registry\$1url\$1config (configuración url de registro de esquema) y specific\$1avro\$1reader\$1config (configuración de lector avro específica), como se muestra a continuación.

     ```
     consumerProps.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
     consumerProps.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, AWSKafkaAvroDeserializer.class.getName());
     consumerProps.setProperty(AWSSchemaRegistryConstants.AWS_REGION, KafkaClickstreamConsumer.gsrRegion);
     consumerProps.setProperty(AWSSchemaRegistryConstants.SECONDARY_DESERIALIZER, KafkaAvroDeserializer.class.getName());
     consumerProps.setProperty(KafkaAvroDeserializerConfig.SCHEMA_REGISTRY_URL_CONFIG, "URL for third-party schema registry");
     consumerProps.setProperty(KafkaAvroDeserializerConfig.SPECIFIC_AVRO_READER_CONFIG, "true");
     ```

1. Reinicie el consumidor.

1. Detenga el productor y dirija al productor a AWS Glue Schema Registry.

   1. Configure las propiedades del productor. En este ejemplo, el productor utilizará las versiones de esquema de registro predeterminado y registro automático.

      ```
      producerProps.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
      producerProps.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, AWSKafkaAvroSerializer.class.getName());
      producerProps.setProperty(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2");
      producerProps.setProperty(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.SPECIFIC_RECORD.getName());
      producerProps.setProperty(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, "true");
      ```

1. (Opcional) mueva manualmente los esquemas y las versiones de esquema existentes del registro de esquemas de terceros actual a AWS Glue Schema Registry, ya sea al registro predeterminado en AWS Glue Schema Registry o a un registro no predeterminado específico en AWS Glue Schema Registry. Esto se puede hacer al exportar esquemas de los registros de esquemas de terceros en formato JSON y crear nuevos esquemas en AWS Glue Schema Registry con Consola de administración de AWS o AWS CLI.

    Este paso puede ser importante si necesita habilitar las comprobaciones de compatibilidad con versiones de esquema anteriores para las versiones de esquema recién creadas mediante AWS CLI y Consola de administración de AWS, o cuando los productores envían mensajes con un nuevo esquema con la función de registro automático de versiones de esquema activada.

1. Inicie el productor.