

# 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). 