

# Utilice AWS Glue Data Catalog para conectarse a los datos
<a name="data-sources-glue"></a>

Athena utiliza AWS Glue Data Catalog para almacenar metadatos, como nombres de tablas y columnas para los datos almacenados en Amazon S3. Esta información de metadatos se convierte en las tablas de datos, las tablas y las vistas que aparecen en el editor de consultas de Athena.

Al utilizar Athena con el AWS Glue Data Catalog, puede usar AWS Glue para crear las bases de datos y las tablas (esquemas) que consultará en Athena, o bien puede utilizar Athena para crear un esquema y entonces utilizarlo en AWS Glue u otros servicios relacionados. 

Para definir la información del esquema para AWS Glue, puede usar un formulario en la consola de Athena, usar el editor de consultas de Athena o crear un rastreador de AWS Glue en la consola de AWS Glue. Los rastreadores de AWS Glue infieren automáticamente el esquema de tablas y bases de datos des los datos que tiene en Amazon S3. El uso de un formulario ofrece una mayor personalización. Redactar sus propias instrucciones de `CREATE TABLE` requiere más esfuerzo, pero ofrece más control. Para obtener más información, consulte [CREATE TABLE](create-table.md).

## Recursos adicionales
<a name="glue-additional-resources"></a>
+ Para obtener más información sobre AWS Glue Data Catalog, consulte [Catálogo de datos y rastreadores en AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html) en la *Guía para desarrolladores de AWS Glue*.
+ Para ver un artículo ilustrativo que muestra cómo utilizar AWS Glue y Athena para procesar datos XML, consulte [Procesar y analizar archivos XML altamente anidados y de gran tamaño mediante AWS Glue y Amazon Athena](https://aws.amazon.com/blogs/big-data/process-and-analyze-highly-nested-and-large-xml-files-using-aws-glue-and-amazon-athena/) en el Blog de macrodatos de AWS.
+  está sujeto a cargos por separado AWS Glue. Para más información, consulte [Precios de AWS Glue](https://aws.amazon.com/glue/pricing).

**Topics**
+ [Recursos adicionales](#glue-additional-resources)
+ [Registro y uso de catálogos de datos en Athena](gdc-register.md)
+ [Registrar un catálogo de datos desde otra cuenta](data-sources-glue-cross-account.md)
+ [Control del acceso a los catálogos de datos con políticas de IAM](datacatalogs-iam-policy.md)
+ [Utilice un formulario de la consola de Athena para agregar una tabla de AWS Glue](data-sources-glue-manual-table.md)
+ [Utilice un rastreador para agregar una tabla](schema-crawlers.md)
+ [Optimización de las consultas con indexación y filtrado de particiones de AWS Glue](glue-best-practices-partition-index.md)
+ [Usar la AWS CLI para recrear una base de datos de AWS Glue y sus tablas](glue-recreate-db-and-tables-cli.md)
+ [Creación de tablas para los trabajos de ETL](schema-classifier.md)
+ [Trabajar con datos CSV en AWS Glue](schema-csv.md)
+ [Uso de datos geoespaciales en AWS Glue](schema-geospatial.md)

# Registro y uso de catálogos de datos en Athena
<a name="gdc-register"></a>

Athena permite montar varios catálogos de datos y conectarse a estos. 
+ Puede montar datos de Amazon Redshift en el AWS Glue Data Catalog y consultarlos desde Athena sin tener que copiar o trasladar datos. Para obtener más información, consulte [Incorporación de datos de Amazon Redshift a AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-namespaces-datacatalog.html).
+  Conecte el AWS Glue Data Catalog a orígenes de datos externos mediante conexiones de AWS Glue y cree catálogos federados para administrar de forma centralizada los permisos de los datos con un control de acceso detallado mediante Lake Formation. Para obtener más información, consulte [Cómo registrar la conexión como Catálogo de datos de Glue](register-connection-as-gdc.md).
+ Cree catálogos a partir de los buckets de tabla de Amazon S3 y utilice Lake Formation para administrar de forma centralizada los permisos de acceso y restringir el acceso de los usuarios a los objetos del bucket de tabla. Para obtener más información, consulte [Cómo trabajar con tablas y buckets de tablas de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables.html) en la Guía del usuario de Amazon S3.

**nota**  
En cualquier catálogo de Glue, solo se puede registrar un catálogo multinivel como `123412341234:my_catalog/my_child`. No puede registrar un catálogo de un solo nivel como `123412341234:linkcontainer` o `my_catalog`. Los catálogos de un solo nivel solo se pueden consultar con el catálogo de datos de Glue directamente en la consulta de Athena. Para obtener más información, consulte [Cómo consultar los catálogos de datos de AWS Glue en Athena](gdc-register-query-the-data-source.md). 

**Topics**
+ [Registrar catálogos de datos de Redshift en Athena](gdc-register-rs.md)
+ [Registro de catálogos federados en Athena](gdc-register-federated.md)
+ [Registro de catálogos de buckets de tabla de S3 y consulta de tablas desde Athena](gdc-register-s3-table-bucket-cat.md)
+ [Cómo consultar los catálogos de datos de AWS Glue en Athena](gdc-register-query-the-data-source.md)

# Registrar catálogos de datos de Redshift en Athena
<a name="gdc-register-rs"></a>

Athena puede leer y escribir datos almacenados en clústeres de Redshift o espacios de nombres sin servidor que se hayan registrado en el AWS Glue Data Catalog. Esto funciona en tándem con AWS Lake Formation, que proporciona seguridad y gobernanza centralizadas, lo que garantiza que el acceso a los datos se administra de forma coherente en los distintos motores de consulta y mantiene controles de acceso detallados para los datos compartidos de Redshift.

## Consideraciones y limitaciones
<a name="gdc-register-rs-considerations-and-limitations"></a>
+ **Vistas materializadas**: las vistas materializadas de Amazon Redshift se pueden consultar desde Athena, pero no es posible crear vistas materializadas con Athena o Spark.
+ No se admiten las operaciones DDL, incluido el ajuste de la configuración de AWS Glue Data Catalog y las operaciones en tablas de almacenamiento administrado de Amazon Redshift.

## Requisitos previos
<a name="gdc-register-rs-prerequisites"></a>

Antes de poder consultar un catálogo de datos de AWS Glue desde Athena, complete las siguientes tareas:

1. Cree y registre un clúster de Amazon Redshift o un espacio de nombres sin servidor en el AWS Glue Data Catalog. Para obtener más información, consulte [Cómo registrar un clúster en el AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/mgmt/register-cluster.html) o [Cómo registrar espacios de nombres en el AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless_datasharing-register-namespace.html) en la guía de administración de Amazon Redshift.

1. Cree un catálogo de datos en AWS Lake Formation a partir del espacio de nombres registrado. Para obtener más información, consulte [Creación de catálogos federados de Amazon Redshift](https://docs.aws.amazon.com/lake-formation/latest/dg/create-ns-catalog.html) en la Guía para desarrolladores de AWS Lake Formation.

1. (Opcional) Utilice Lake Formation para establecer controles de acceso detallados en el catálogo. Para obtener más información, consulte [Cómo incluir los datos en el AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/bring-your-data-overview.html) en la Guía para desarrolladores de AWS Lake Formation.

## Registrar un catálogo de datos de Redshift en la consola Athena
<a name="gdc-register-rs-console-steps"></a>

Para registrar un catálogo de datos de Redshift en la consola de Athena, siga estos pasos.

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

1. En el panel de navegación, elija **Orígenes de datos y catálogos**.

1. En la página **Orígenes de datos y catálogos**, elija **Crear origen de datos**.

1. En **Elegir un origen de datos**, elija **Amazon S3: AWS Glue Data Catalog**.

1. En la sección **AWS Glue Data Catalog**, bajo **Cuenta de origen de datos**, elija **AWS Glue Data Catalog en esta cuenta**.

1. En **Crear una tabla o registrar un catálogo**, elija **Registrar un nuevo catálogo de AWS Glue**.

1. En la sección **Detalles del origen de datos**, en **Nombre del origen de datos**, ingrese el nombre que desea utilizar para especificar el origen de datos en las consultas SQL o utilice el nombre predeterminado que se genera.

1. En **Catálogo**, seleccione **Examinar** para buscar una lista de catálogos de AWS Glue en la misma cuenta. Si no ve ningún catálogo existente, cree uno en la [consola de AWS Glue](https://console.aws.amazon.com/glue/). 

1. En el cuadro de diálogo **Examinar catálogos de AWS Glue**, seleccione el catálogo que desea utilizar y, a continuación, elija **Seleccionar**.

1. (Opcional) En **Etiquetas**, ingrese cualquier par de clave/valor que desee asociar al origen de datos.

1. Elija **Siguiente**.

1. En la página **Revisar y crear**, compruebe que la información introducida es correcta y, a continuación, seleccione **Crear origen de datos**.

# Registro de catálogos federados en Athena
<a name="gdc-register-federated"></a>

Una vez creadas las conexiones a los orígenes de datos federados, puede registrarlos como catálogos de datos federados para simplificar la detección de datos y administrar el acceso a los datos con permisos detallados mediante Lake Formation. Para obtener más información, consulte [Cómo registrar la conexión como Catálogo de datos de Glue](register-connection-as-gdc.md).

## Consideraciones y limitaciones
<a name="gdc-register-federated-consideration"></a>
+ No se admiten operaciones DDL en catálogos federados. 
+ Puede registrar los siguientes conectores para integrarlos con AWS Glue y obtener un control de acceso detallado:
  + [Azure Data Lake Storage](connectors-adls-gen2.md)
  + [Azure Synapse](connectors-azure-synapse.md)
  + [BigQuery](connectors-bigquery.md)
  + [CMDB](connectors-cmdb.md)
  + [Db2](connectors-ibm-db2.md)
  + [Db2 iSeries](connectors-ibm-db2-as400.md)
  + [DocumentDB](connectors-docdb.md)
  + [DynamoDB](connectors-dynamodb.md)
  + [Google Cloud Storage](connectors-gcs.md)
  + [HBase](connectors-hbase.md)
  + [MySQL](connectors-mysql.md)
  + [OpenSearch](connectors-opensearch.md)
  + [Oracle](connectors-oracle.md)
  + [PostgreSQL](connectors-postgresql.md)
  + [Redshift](connectors-redshift.md)
  + [SAP HANA](connectors-sap-hana.md)
  + [Snowflake](connectors-snowflake.md)
  + [de SQL Server](connectors-microsoft-sql-server.md)
  + [Timestream](connectors-timestream.md)
  + [TPC-DS](connectors-tpcds.md)
+ Al crear un enlace de recursos para la federación de la conexión de Glue, el nombre del [enlace de recursos](https://docs.aws.amazon.com/lake-formation/latest/dg/create-resource-link-database.html) debe ser el mismo que el nombre de la base de datos del productor.
+ Actualmente, solo se reconocen los nombres de tablas y columnas en minúscula, incluso si el origen de datos no distingue entre mayúsculas y minúsculas.

# Registro de catálogos de buckets de tabla de S3 y consulta de tablas desde Athena
<a name="gdc-register-s3-table-bucket-cat"></a>

Los buckets de tabla de S3 son un tipo de bucket de Amazon S3 diseñado específicamente para almacenar datos tabulares en tablas de Apache Iceberg. Los buckets de tablas automatizan tareas de administración de tablas, como la compactación, la administración de instantáneas y la recopilación de elementos no utilizados, para optimizar continuamente el rendimiento de las consultas y minimizar los costos. Tanto si recién comienza como si cuenta con miles de tablas en el entorno de Iceberg, los buckets de tabla simplifican el uso de los lagos de datos a cualquier escala. Para obtener más información, consulte [buckets de tabla](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets.html).

## Consideraciones y limitaciones
<a name="gdc-register-s3-table-consideration"></a>
+ Todas las operaciones DDL compatibles con las tablas de Iceberg son compatibles con las tablas de S3, excepto los siguientes:
  + `ALTER TABLE RENAME`, `CREATE VIEW` y `ALTER DATABASE` no son compatibles.
  + `OPTIMIZE` y `VACUUM`: puede gestionar la compactación y la gestión de instantáneas en S3. Para obtener más información, consulte [la documentación de mantenimiento de tablas de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html).
+ No se admiten consultas DDL en tablas de S3 registradas como orígenes de datos de Athena.
+ No se admite la reutilización del resultado de la consulta.
+ En los grupos de trabajo con el cifrado SSE-KMS, CSE-KMS activado, no se pueden ejecutar operaciones de escritura como `INSERT`, `UPDATE`, `DELETE` o `MERGE` en tablas de S3.
+ En los grupos de trabajo con la opción Pagos de solicitantes de S3 (S3 Requester Pays) habilitada, no puede ejecutar operaciones DML en tablas de S3.

## Consulta de tablas de S3 desde Athena
<a name="gdc-register-s3-table-prereq-setup"></a>

**Complete estos requisitos previos antes de consultar las tablas de S3 desde Athena**

1. Cree un bucket de tabla de S3. Para obtener más información, consulte [Cómo crear un bucket de tabla](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html) en la Guía del usuario de Amazon Simple Storage Service. 

1. Asegúrese de que la integración de sus cubos de mesa con AWS Glue Data Catalog sea correcta. Para conocer los permisos necesarios y los pasos de configuración, consulte [Requisitos previos para la integración de las Tablas de S3](https://docs.aws.amazon.com/glue/latest/dg/s3tables-catalog-prerequisites.html) y [Habilitar la integración de las tablas de S3 con los Catálogo de datos de Glue](https://docs.aws.amazon.com/glue/latest/dg/enable-s3-tables-catalog-integration.html) en la Guía para desarrolladores AWS Glue.

1. Para la entidad principal que utilice para ejecutar consultas con Athena, conceda permisos sobre el catálogo de tablas de S3 mediante uno de los siguientes enfoques: 

   **Opción 1: usar permisos de IAM**

   Al utilizar el control de acceso de IAM, su entidad principal necesita permisos tanto en los recursos AWS Glue Data Catalog como en los recursos de tablas de Amazon S3.

   La siguiente lista contiene todos los permisos `s3tables` necesarios para realizar cualquier operación DDL o DML compatible en sus tablas de S3 en Athena:
   + `s3tables:GetTableBucket`
   + `s3tables:GetNamespace`
   + `s3tables:GetTable`
   + `s3tables:GetTableData`
   + `s3tables:PutTableData`
   + `s3tables:ListNamespaces`
   + `s3tables:ListTables`
   + `s3tables:DeleteNamespace`
   + `s3tables:DeleteTable`
   + `s3tables:CreateNamespace`
   + `s3tables:CreateTable`
   + `s3tables:UpdateTableMetadataLocation`

   Aplique estos permisos a un grupo de tablas de S3 y a recursos de tablas de S3 específicos o utilice `*` como recurso para conceder acceso a todos los grupos de tablas y tablas de su cuenta. Estos permisos se pueden combinar con la política administrada [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html) para habilitar una funcionalidad completa.

   **Opción 2: usar los permisos de Lake Formation**

   Para habilitar el control de acceso detallado, puede conceder permisos de Lake Formation en el catálogo de la tabla de S3, ya sea a través de la consola de Lake Formation o la AWS CLI. Esto requiere registrar sus buckets de tablas de S3 como una ubicación de datos de Lake Formation. Para obtener más información sobre el proceso de migración o integración, consulte [Creación de un catálogo de tablas de Amazon S3 en la AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html) en la Guía para desarrolladores de Lake Formation.

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

   1. Abra la consola de AWS Lake Formation en [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) e inicie sesión como administrador del lago de datos. Para obtener más información sobre cómo crear un administrador del lago de datos, consulte [Cómo crear un administrador del lago de datos](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin).

   1. En el panel de navegación, elija **Permisos de datos** y, a continuación, seleccione **Conceder**. 

   1. En la página **Conceder permisos**, en **Entidades principales**, elija la entidad principal que desea utilizar para enviar consultas desde Athena.

   1. En **Etiquetas LF o recursos de catálogo**, elija **Recursos de catálogo de datos con nombre**.

   1. En **Catálogos**, elija un catálogo de datos de Glue que haya creado a partir de la integración del bucket de tablas. Por ejemplo, *<accoundID>*:s3tablescatalog/*amzn-s3-demo-bucket*.

   1. En **Permisos del catálogo**, elija **Super**.

   1. Elija **Conceder**.

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

   Ejecute el siguiente comando con el rol de administrador del lago de datos de Lake Formation para conceder acceso a la entidad principal que utiliza para enviar consultas desde Athena. 

   ```
   aws lakeformation grant-permissions \
   --region <region (Example,us-east-1)> \
   --cli-input-json \
   '{
       "Principal": {
           "DataLakePrincipalIdentifier": "<user or role ARN (Example, arn:aws:iam::<Account ID>:role/ExampleRole>"
       },
       "Resource": {
           "Catalog": {
               "Id":"<Account ID>:s3tablescatalog/amzn-s3-demo-bucket"
           }
       },
       "Permissions": ["ALL"]
   }'
   ```

------

**Enviar consultas para tablas de S3**

1. Envíe una consulta `CREATE DATABASE` desde Athena con el usuario/rol concedido anteriormente. En este ejemplo, `s3tablescatalog` es el catálogo de datos de Glue principal creado a partir de la integración, y ` s3tablescatalog/amzn-s3-demo-bucket` es el catálogo de datos de Glue secundario creado para cada bucket de tabla de S3. Existen dos formas de realizar la consulta.

------
#### [ Option 1 ]

   Especifique el catálogo de datos de Glue secundario (`s3tablescatalog/amzn-s3-demo-bucket`) directamente desde la consola o la AWS CLI.

   **Uso de Consola de administración de AWS**

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

   1. En el menú de navegación de la izquierda, en **Nombre del origen de datos**, elija **AwsDataCatalog**.

   1. Para **Catálogo**, elija **s3tablescatalog/*amzn-s3-demo-bucket***.

   1. En el editor de consultas, ingrese una consulta como `CREATE DATABASE test_namespace`.

   **Uso de AWS CLI**

   Ejecute el siguiente comando.

   ```
   aws athena start-query-execution \ 
   --query-string 'CREATE DATABASE `test_namespace`' \ 
   --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket"}' \
   --work-group "primary"
   ```

------
#### [ Option 2 ]

   Cree un catálogo de datos de Athena a partir del catálogo de datos de Glue secundario en la consola de Athena y especifíquelo como catálogo en la consulta. Para obtener más información, consulte [Registro de catálogos de buckets de tabla de S3 como orígenes de datos de Athena](#gdc-register-s3-table-console-steps).

------

1. Con la base de datos que creó en el paso anterior, utilice `CREATE TABLE` para crear una tabla. En el siguiente ejemplo, se crea una tabla en la base de datos *`test_namespace`* que creó anteriormente en el catálogo `s3tablescatalog/amzn-s3-demo-bucket` de Glue.

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

   1. En el menú de navegación de la izquierda, en **Nombre del origen de datos**, elija **AwsDataCatalog**.

   1. Para **Catálogo**, elija **s3tablescatalog/*amzn-s3-demo-bucket***.

   1. Para **Base de datos**, elija **test\$1namespace**.

   1. En el editor de consultas, ejecute la siguiente consulta.

      ```
      CREATE TABLE daily_sales (
              sale_date date,
              product_category
              string, sales_amount double)
      PARTITIONED BY (month(sale_date))
      TBLPROPERTIES ('table_type' = 'iceberg')
      ```

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

   Ejecute el siguiente comando.

   ```
   aws athena start-query-execution \
   --query-string "CREATE TABLE daily_sales (
           sale_date date,
           product_category
           string, sales_amount double)
   PARTITIONED BY (month(sale_date))
   TBLPROPERTIES ('table_type' = 'iceberg')" \
   --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket", "Database":"test_namespace"}' \
   --work-group "primary"
   ```

------

1. Inserte datos en la tabla que creó en el paso anterior.

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

   1. En el menú de navegación de la izquierda, en **Nombre del origen de datos**, elija **AwsDataCatalog**.

   1. Para **Catálogo**, elija **s3tablescatalog/*amzn-s3-demo-bucket***.

   1. Para **Base de datos**, elija **test\$1namespace**.

   1. En el editor de consultas, ejecute la siguiente consulta.

      ```
      INSERT INTO daily_sales
      VALUES 
          (DATE '2024-01-15', 'Laptop', 900.00),
          (DATE '2024-01-15', 'Monitor', 250.00),
          (DATE '2024-01-16', 'Laptop', 1350.00),
          (DATE '2024-02-01', 'Monitor', 300.00);
      ```

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

   Ejecute el siguiente comando.

   ```
   aws athena start-query-execution \
   --query-string "INSERT INTO \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales
   VALUES 
   (DATE '2024-01-15', 'Laptop', 900.00),
   (DATE '2024-01-15', 'Monitor', 250.00),
   (DATE '2024-01-16', 'Laptop', 1350.00),
   (DATE '2024-02-01', 'Monitor', 300.00)"\ 
   --work-group "primary"
   ```

------

1. Después de insertar los datos en la tabla, puede consultarlos.

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

   1. En el menú de navegación de la izquierda, en **Nombre del origen de datos**, elija **AwsDataCatalog**.

   1. Para **Catálogo**, elija **s3tablescatalog/*amzn-s3-demo-bucket***.

   1. Para **Base de datos**, elija **test\$1namespace**.

   1. En el editor de consultas, ejecute la siguiente consulta.

      ```
      SELECT
          product_category,
          COUNT(*) AS units_sold,
          SUM(sales_amount) AS total_revenue,
          AVG(sales_amount) AS average_price
      FROM
          daily_sales
      WHERE
          sale_date BETWEEN DATE '2024-02-01' 
                       AND DATE '2024-02-29'
      GROUP BY
          product_category
      ORDER BY
          total_revenue DESC
      ```

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

   Ejecute el siguiente comando.

   ```
   aws athena start-query-execution \
   --query-string "SELECT product_category,
       COUNT(*) AS units_sold,
       SUM(sales_amount) AS total_revenue,
       AVG(sales_amount) AS average_price
   FROM \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales
   WHERE sale_date BETWEEN DATE '2024-02-01' AND DATE '2024-02-29'
   GROUP BY product_category
   ORDER BY total_revenue DESC"\
   --work-group "primary"
   ```

------

## Creación de tablas de S3 en Athena
<a name="gdc-create-s3-tables-athena"></a>

Athena admite la creación de tablas en los espacios de nombres de tablas de S3 existentes o en los espacios de nombres creados en Athena con introducciones `CREATE DATABASE`. Para crear una tabla de S3 desde Athena, la sintaxis es la misma que cuando se [crea una tabla de Iceberg normal](querying-iceberg-creating-tables.md), excepto que no se especifica la `LOCATION`, como se muestra en el siguiente ejemplo.

```
CREATE TABLE
[db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] )
[PARTITIONED BY (col_name | transform, ... )]
[TBLPROPERTIES ([, property_name=property_value] )]
```

También puede crear tablas de S3 por medio de las instrucciones CREATE TABLE AS SELECT (CTAS). Para obtener más información, consulte [CTAS para tablas de S3](#ctas-s3-tables).

## Registro de catálogos de buckets de tabla de S3 como orígenes de datos de Athena
<a name="gdc-register-s3-table-console-steps"></a>

Para registrar catálogos de buckets de tabla de S3 en la consola de Athena, siga estos pasos.

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

1. En el panel de navegación, elija **Orígenes de datos y catálogos**.

1. En la página **Orígenes de datos y catálogos**, elija **Crear origen de datos**.

1. En **Elegir un origen de datos**, elija **Amazon S3: AWS Glue Data Catalog**.

1. En la sección **AWS Glue Data Catalog**, bajo **Cuenta de origen de datos**, elija **AWS Glue Data Catalog en esta cuenta**.

1. En **Crear una tabla o registrar un catálogo**, elija **Registrar un nuevo catálogo de AWS Glue**.

1. En la sección **Detalles del origen de datos**, en **Nombre del origen de datos**, ingrese el nombre que desea utilizar para especificar el origen de datos en las consultas SQL o utilice el nombre predeterminado que se genera.

1. En **Catálogo**, seleccione **Examinar** para buscar una lista de catálogos de AWS Glue en la misma cuenta. Si no ve ningún catálogo existente, cree uno en la [consola de AWS Glue](https://console.aws.amazon.com/glue/). 

1. En el cuadro de diálogo **Examinar catálogos de AWS Glue**, seleccione el catálogo que desea utilizar y, a continuación, elija **Seleccionar**.

1. (Opcional) En **Etiquetas**, ingrese cualquier par de clave/valor que desee asociar al origen de datos.

1. Elija **Siguiente**.

1. En la página **Revisar y crear**, compruebe que la información introducida es correcta y, a continuación, seleccione **Crear origen de datos**.

## CTAS para tablas de S3
<a name="ctas-s3-tables"></a>

Amazon Athena ahora admite operaciones CREATE TABLE AS SELECT (CTAS) para tablas de S3. Esta característica permite crear nuevas tablas de S3 en función de los resultados de una consulta SELECT. 

Al crear una consulta CTAS para una tabla de S3, existen algunas diferencias importantes en comparación con las tablas estándar de Athena:
+ Debe omitir la propiedad de ubicación porque las tablas de S3 administran automáticamente sus propias ubicaciones de almacenamiento.
+ La propiedad `table_type` se establece de forma predeterminada en `ICEBERG`, por lo que no es necesario especificarla explícitamente en la consulta.
+ Si no se especifica un formato, el sistema utiliza automáticamente `PARQUET` como formato predeterminado para los datos.
+ Todas las demás propiedades siguen la misma sintaxis que las tablas de Iceberg normales.

Antes de crear tablas de S3 por medio de CTAS, asegúrese de contar con los permisos necesarios configurados en IAM o AWS Lake Formation. Específicamente, necesita permisos para crear tablas en el catálogo de las tablas de S3. Sin estos permisos, se producirá un error en las operaciones CTAS.

**nota**  
Si se produce un error en la consulta CTAS, es posible que tenga que eliminar la tabla por medio de la [API de las tablas de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-delete.html) antes de intentar volver a ejecutar la consulta. No puede usar las instrucciones `DROP TABLE` de Athena para eliminar la tabla que fue creada parcialmente por la consulta. 

**Ejemplo**

```
CREATE TABLE "s3tablescatalog/amzn-s3-demo-bucket"."namespace"."s3-table-name"
WITH (
    format = 'PARQUET'
)
AS SELECT *
FROM source_table;
```

# Cómo consultar los catálogos de datos de AWS Glue en Athena
<a name="gdc-register-query-the-data-source"></a>

Para consultar catálogos de datos desde Athena, realice una de las siguientes acciones.
+ Registre el catálogo en Athena como origen de datos y, a continuación, utilice el nombre del origen de datos para consultar el catálogo. En este uso, las siguientes consultas son equivalentes.

  ```
  SELECT * FROM my_data_source.my_database.my_table
  ```
+ Si va a consultar un catálogo que no se ha registrado como origen de datos de Athena, puede proporcionar la ruta completa al catálogo en las consultas `SELECT`, como en el siguiente ejemplo.

  ```
  SELECT * FROM "my_catalog/my_subcatalog".my_database.my_table
  ```
+ También puede hacerlo a través de la Consola de administración de AWS.

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

  1. En el editor de consultas, en **Origen de datos**, seleccione **AwsDataCatalog**.

  1. En **Catálogo**, elija el nombre del catálogo que desea utilizar.

  1. En **Base de datos**, elija la base de datos que contiene la tabla que desea consultar.

  1. Ingrese una consulta como `SELECT * FROM my_table` y, a continuación, elija **Ejecutar**.

# Registrar un catálogo de datos desde otra cuenta
<a name="data-sources-glue-cross-account"></a>

Puede utilizar la característica de catálogo de AWS Glue de cuentas cruzadas de Athena para registrar un catálogo AWS Glue desde una cuenta que no sea la suya. Después de configurar los permisos de IAM necesarios para AWS Glue y registrar el catálogo como recurso de `DataCatalog` de Athena, puede utilizar Athena para ejecutar consultas entre cuentas. Para obtener información sobre la configuración de los permisos necesarios, consulte [Configuración del acceso entre cuentas a los catálogos de datos de AWS Glue](security-iam-cross-account-glue-catalog-access.md).

El procedimiento siguiente muestra cómo utilizar Athena para configurar un AWS Glue Data Catalog en una cuenta de Amazon Web Services distinta de la suya como origen de datos.

## Registrar desde la consola
<a name="data-sources-glue-cross-account-console"></a>

1. Siga los pasos de [Configuración del acceso entre cuentas a los catálogos de datos de AWS Glue](security-iam-cross-account-glue-catalog-access.md) para asegurarse de que tiene permisos para consultar el catálogo de datos en la otra cuenta.

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

1. Si el panel de navegación de la consola no está visible, elija el menú de expansión de la izquierda.  
![\[Elija el menú de expansión.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/nav-pane-expansion.png)

1. Elija **Orígenes de datos y catálogos**.

1. En la parte superior derecha de la consola, seleccione **Create data source** (Crear origen de datos).

1. En la página **Choose a data source** (Elegir un origen de datos), para **Data Sources** (Orígenes de datos), elija **S3 -AWS Glue Data Catalog** y, a continuación, elija **Next** (Siguiente).

1. En la página **Introducir detalles del origen de datos**, en la sección **AWS Glue Data Catalog**, para **Elegir un AWS Glue Data Catalog**, elija **AWS Glue Data Catalog en otra cuenta**.

1. En **Dataset details** (Detalles del origen de datos), ingrese la siguiente información:
   + **Data source name** (Nombre del origen de datos): ingrese el nombre que desea utilizar en las consultas SQL para hacer referencia al catálogo de datos de la otra cuenta.
   + **Descripción**: (opcional) ingrese una descripción del catálogo de datos en la otra cuenta.
   + **ID del catálogo**: ingrese el ID de cuenta de Amazon Web Services de 12 dígitos de la cuenta a la que pertenece el catálogo de datos. El ID de cuenta de Amazon Web Services es el ID del catálogo.

1. (Opcional) En **Tags** (Etiquetas), ingrese pares clave-valor que quiera asociar con el origen de datos. Para obtener más información acerca de las etiquetas, consulte [Etiquetado de recursos de Athena](tags.md).

1. Elija **Siguiente**.

1. En la página **Review and create** (Revisar y crear), revise la información que ha proporcionado y, a continuación, elija **Create data source** (Crear un origen de datos). En la página **Data source details** (Detalles de origen de datos) se enumeran las bases de datos y etiquetas del catálogo de datos que ha registrado.

1. Elija **Orígenes de datos y catálogos**. El catálogo de datos que ha registrado se muestra en la columna **Data source name** (Nombre de origen de datos).

1. Para ver o editar información sobre el nuevo catálogo de datos, elija el catálogo y, a continuación, elija **Actions** (Acciones) y **Edit** (Editar).

1. Para eliminar el nuevo catálogo de datos, elija el catálogo y, a continuación, elija **Actions** (Acciones) y **Delete** (Eliminar).

## Registrar usando las operaciones API
<a name="data-sources-glue-cross-account-api"></a>

1. El siguiente cuerpo de solicitud de `CreateDataCatalog` registra un catálogo de AWS Glue para acceso entre cuentas:

   ```
   # Example CreateDataCatalog request to register a cross-account Glue catalog:
   {
       "Description": "Cross-account Glue catalog",
       "Name": "ownerCatalog",
       "Parameters": {"catalog-id" : "<catalogid>"  # Owner's account ID
       },
       "Type": "GLUE"
   }
   ```

1. El siguiente código de muestra utiliza un cliente Java para crear el objeto `DataCatalog`.

   ```
   # Sample code to create the DataCatalog through Java client
   CreateDataCatalogRequest request = new CreateDataCatalogRequest()
       .withName("ownerCatalog")
       .withType(DataCatalogType.GLUE)
       .withParameters(ImmutableMap.of("catalog-id", "<catalogid>"));
   
   athenaClient.createDataCatalog(request);
   ```

   Después de estos pasos, el prestatario debe ver el *`ownerCatalog`* cuando llama a la operación de la API [ListDataCatalogs](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListDataCatalogs.html).

## Registrar usando AWS CLI
<a name="data-sources-glue-cross-account-cli"></a>

Utilice el siguiente comando CLI de ejemplo para registrar una AWS Glue Data Catalog desde otra cuenta.

```
aws athena create-data-catalog \
  --name cross_account_catalog \
  --type GLUE \
  --description "Cross Account Catalog" \
  --parameters catalog-id=<catalogid>
```

Para obtener más información, consulte [Query cross-account AWS Glue Data Catalogs using Amazon Athena](https://aws.amazon.com/blogs/big-data/query-cross-account-aws-glue-data-catalogs-using-amazon-athena/) en el *Blog de macrodatos de AWS*.

# Control del acceso a los catálogos de datos con políticas de IAM
<a name="datacatalogs-iam-policy"></a>

Para controlar el acceso a los catálogos de datos, utilice permisos de IAM de nivel de recursos o políticas de IAM basadas en identidad. 

El siguiente procedimiento es específico de Athena. 

Para obtener información específica sobre IAM, consulte los enlaces que se enumeran al final de esta sección. Para obtener información sobre políticas de catálogo de datos JSON de ejemplo, consulte [Políticas de catálogos de datos de ejemplo](datacatalogs-example-policies.md).

**Para utilizar el editor visual en la consola de IAM para crear una política de catálogo de datos**

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

1. En el panel de navegación de la izquierda, elija **Políticas** y, a continuación, elija **Crear política**.

1. En la pestaña **Editor visual**, elija **Elegir un servicio**. A continuación, elija un servicio de Athena para agregar a la política.

1. Elija **Seleccionar acciones** y, a continuación, elija las acciones que desea añadir a la política. El editor visual muestra las acciones disponibles en Athena. Para obtener más información, consulte [Acciones, recursos y claves de condición de Amazon Athena](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html) en la *Referencia de autorizaciones de servicio*.

1. Elija **Añadir acciones** para escribir una acción específica o utilice comodines (\$1) para especificar varias acciones. 

   De forma predeterminada, la política que está creando permite las acciones que usted elija. Si eligió una o más acciones que admiten permisos en el nivel de recursos para el recurso `datacatalog` en Athena, el editor visual enumera el recurso `datacatalog`. 

1. Elija **Recursos** para especificar catálogos de datos específicos para su política. Para ver políticas de catálogo de datos JSON de ejemplo, consulte [Políticas de catálogos de datos de ejemplo](datacatalogs-example-policies.md).

1. Especifique el recurso `datacatalog` como se indica a continuación:

   ```
   arn:aws:athena:<region>:<user-account>:datacatalog/<datacatalog-name>
   ```

1. Elija **Revisar la política** y, a continuación, escriba un **Nombre** y una **Descripción** (opcional) para la política que está creando. Revise el resumen de la política para asegurarse de que ha concedido los permisos deseados. 

1. Elija **Crear política** para guardar la nueva política.

1. Asocie esta política basada en la identidad a un usuario, grupo o rol y especifique los recursos de `datacatalog` a los que pueden acceder.

Para obtener más información, consulte los siguientes temas en la *Referencia de autorizaciones de servicio* y la *Guía del usuario de IAM*:
+ [Acciones, recursos y claves de condición de Amazon Athena](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html)
+ [Creación de políticas con el editor visual](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor)
+ [Adición y eliminación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)
+ [Control del acceso a los recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html#access_controlling-resources)

Para ver políticas de catálogo de datos JSON de ejemplo, consulte [Políticas de catálogos de datos de ejemplo](datacatalogs-example-policies.md).

Para obtener información sobre los permisos de AWS Glue y los permisos del rastreador de AWS Glue, consulte [Configuración de permisos de IAM para AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/getting-started-access.html) y [Requisitos previos del rastreador](https://docs.aws.amazon.com/glue/latest/dg/crawler-prereqs.html) en la *Guía para desarrolladores de AWS Glue*.

Para obtener una lista completa de las acciones de Amazon Athena, consulte los nombres de acciones de la API en la [Referencia de API de Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). 

# Políticas de catálogos de datos de ejemplo
<a name="datacatalogs-example-policies"></a>

En esta sección se incluyen políticas de ejemplo que puede utilizar para habilitar varias acciones en catálogos de datos.

Un catálogo de datos es un recurso de IAM administrado por Athena. Por lo tanto, si la política de catálogo de datos utiliza acciones que toman `datacatalog` como entrada, debe especificar el ARN del catálogo de datos de la siguiente manera:

```
"Resource": [arn:aws:athena:<region>:<user-account>:datacatalog/<datacatalog-name>]
```

El `<datacatalog-name>` es el nombre del catálogo de datos. Por ejemplo, para un catálogo de datos denominado `test_datacatalog`, especifíquelo como recurso de la siguiente manera:

```
"Resource": ["arn:aws:athena:us-east-1:123456789012:datacatalog/test_datacatalog"]
```

Para obtener una lista completa de las acciones de Amazon Athena, consulte los nombres de acciones de la API en la [Referencia de API de Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). Para obtener más información sobre las políticas de IAM, consulte [Creación de políticas con el editor visual](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor) en la *Guía del usuario de IAM*. Para obtener más información acerca de la creación de políticas de IAM para grupos de trabajo, consulte [Control del acceso a los catálogos de datos con políticas de IAM](datacatalogs-iam-policy.md).
+ [Example Policy for Full Access to All Data Catalogs](#datacatalog-policy-full-access-to-all-data-catalogs)
+ [Example Policy for Full Access to a Specified Data Catalog](#datacatalog-policy-full-access-to-a-specified-catalog)
+ [Example Policy for Querying a Specified Data Catalog](#datacatalog-policy-querying-a-specified-data-catalog)
+ [Example Policy for Management Operations on a Specified Data Catalog](#datacatalog-policy-management-operations-on-a-specified-catalog)
+ [Example Policy for Listing Data Catalogs](#datacatalog-policy-listing-data-catalogs)
+ [Example Policy for Metadata Operations on Data Catalogs](#datacatalog-policy-metadata-operations)

**Example Ejemplo de política para el acceso completo a todos los catálogos de datos**  
La siguiente política permite el acceso completo a todos los recursos de catálogos de datos que podrían existir en la cuenta. Le recomendamos que utilice esta política para aquellos usuarios en su cuenta que deben administrar catálogos de datos para los demás usuarios.    
****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "athena:*"
         ],
         "Resource":[
            "*"
         ]
      }
   ]
}
```

**Example Ejemplo de política para el acceso completo a un catálogo de datos especificado**  
La siguiente política permite acceso completo al recurso de catálogo de datos específico individual, denominado `datacatalogA`. Puede utilizar esta política para los usuarios con control total sobre un catálogo de datos en particular.    
****  

```
{ "Version":"2012-10-17",		 	 	  "Statement":[ { "Effect":"Allow", "Action":[
   "athena:ListDataCatalogs", "athena:ListWorkGroups", "athena:GetDatabase", "athena:ListDatabases",
   "athena:ListTableMetadata", "athena:GetTableMetadata" ], "Resource":"*" }, { "Effect":"Allow",
   "Action":[ "athena:StartQueryExecution", "athena:GetQueryResults", "athena:DeleteNamedQuery",
   "athena:GetNamedQuery", "athena:ListQueryExecutions", "athena:StopQueryExecution",
   "athena:GetQueryResultsStream", "athena:ListNamedQueries", "athena:CreateNamedQuery",
   "athena:GetQueryExecution", "athena:BatchGetNamedQuery", "athena:BatchGetQueryExecution",
   "athena:DeleteWorkGroup", "athena:UpdateWorkGroup", "athena:GetWorkGroup",
   "athena:CreateWorkGroup" ], "Resource":[
      "arn:aws:athena:us-east-1:123456789012:workgroup/*"
   ] }, { "Effect":"Allow", "Action":[ "athena:CreateDataCatalog", "athena:DeleteDataCatalog",
   "athena:GetDataCatalog", "athena:GetDatabase", "athena:GetTableMetadata", "athena:ListDatabases",
   "athena:ListTableMetadata", "athena:UpdateDataCatalog" ],
      "Resource":"arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
   } ] }
```

**Example Ejemplo de política para consultar un catálogo de datos especificado**  
En la siguiente política, un usuario puede ejecutar consultas en el especificado `datacatalogA`. El usuario no tiene permiso para realizar las tareas de administración para el catálogo de datos en sí, como, por ejemplo, actualizarlo o eliminarlo.     
****  

```
{ "Version":"2012-10-17",		 	 	  "Statement":[ { "Effect":"Allow", "Action":[
   "athena:StartQueryExecution" ], "Resource":[
      "arn:aws:athena:us-east-1:123456789012:workgroup/*"
   ] }, { "Effect":"Allow", "Action":[ "athena:GetDataCatalog" ], "Resource":[
      "arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
   ] } ] }
```

**Example Ejemplo de política para operaciones de administración en un catálogo de datos especificado**  
En la siguiente política, se permite a un usuario crear, eliminar, obtener detalles y actualizar un catálogo de datos `datacatalogA`.     
****  

```
{ "Version":"2012-10-17",		 	 	  "Statement": [ { "Effect": "Allow", "Action": [
    "athena:CreateDataCatalog", "athena:GetDataCatalog", "athena:DeleteDataCatalog",
    "athena:UpdateDataCatalog" ], "Resource": [
        "arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
    ] } ] }
```

**Example Ejemplo de política para generar listas de catálogos de datos**  
La siguiente política permite a todos los usuarios enumerar todos los catálogos de datos:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example Ejemplo de política para realizar operaciones de metadatos en catálogos de datos**  
La siguiente política permite operaciones de metadatos en catálogos de datos:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:GetDatabase",
                "athena:GetTableMetadata",
                "athena:ListDatabases",
                "athena:ListTableMetadata"
            ],
            "Resource": "*"
        }
    ]
}
```

# Utilice un formulario de la consola de Athena para agregar una tabla de AWS Glue
<a name="data-sources-glue-manual-table"></a>

En el procedimiento siguiente se muestra cómo utilizar la consola de Athena para agregar una tabla mediante el formulario **Create Table From S3 bucket data** (Crear tabla a partir de datos de buckets de S3).

**Para agregar una tabla e ingresar información del esquema mediante un formulario**

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

1. En el editor de consultas, junto a **Tables and views** (Tablas y vistas), elija **Create** (Crear) y, a continuación, **S3 bucket data** (Datos del bucket de S3).

1. En el formulario **Create Table From S3 bucket data** (Crear tabla a partir de datos de buckets de S3), en **Table name** (Nombre de la tabla), ingrese un nombre para la tabla. Para obtener información sobre los caracteres aceptables para los nombres de base de datos, los nombres de tablas y los nombres de columnas en Athena, consulte [Nombrar tablas, bases de datos y columnas](tables-databases-columns-names.md).

1. En **Database configuration** (Configuración de la base de datos), elija una base de datos existente o cree una nueva.

1. En **Location of Input Data Set** (Ubicación del conjunto de datos de entrada), especifique la ruta de acceso en Amazon S3 para la carpeta que contiene el conjunto de datos que desea procesar. No incluya ningún nombre de archivo en la ruta. Athena analiza todos los archivos de la carpeta que especifique. Si sus datos ya están particionados (por ejemplo, 

    s3://amzn-s3-demo-bucket/logs/year=2004/month=12/day=11/), ingrese únicamente la ruta base (por ejemplo, s3://amzn-s3-demo-bucket/logs/).

1. En **Data Format** (Formato de datos), elija una de las siguientes opciones:
   + Para **Table type** (Tipo de tabla), elija **Apache Hive**, **Apache Iceberg** o **Delta Lake**. Athena usa el tipo de tabla Apache Hive como tipo de tabla predeterminado. Para obtener información acerca de la consulta de tablas de Apache Iceberg en Athena, consulte [Consulta de tablas de Apache Iceberg](querying-iceberg.md). Para obtener información acerca del uso de tablas de Delta Lake en Athena, consulte [Consulta de las tablas de Linux Foundation Delta Lake](delta-lake-tables.md).
   + En **File format** (Formato de archivo), elija el formato de archivo o registro en el que se encuentran los datos.
     + Para la opción **Text File with Custom Delimiters** (Archivo de texto con delimitadores personalizados), especifique un **terminador de campo** (es decir, un delimitador de columna). Si lo desea, puede especificar un **Collection terminator** (Terminador de colección) que marque el final de un tipo de matriz o un **Collection terminator** (Terminador de colección) que marque el final de un tipo de datos de mapa.
   + **SerDe library** (Biblioteca SerDe): una biblioteca SerDe (serializador-deserializador) analiza un formato de datos determinado para que Athena pueda crearle una tabla. Para la mayoría de los formatos, se elige una biblioteca SerDe predeterminada. Para los siguientes formatos, elija una biblioteca según sus requisitos:
     + **Apache Web Logs** (Registros web de Apache): elija la biblioteca **RegexSerDe** o **GrokSerDe**. Para RegexSerDe, proporcione una expresión regular en el cuadro **Regex definition** (Definición de regex). Para GrokSerDe, proporcione una serie de expresiones regulares con nombre para la propiedad SerDe `input.format`. Las expresiones regulares nombradas son más fáciles de leer y mantener que las expresiones regulares. Para obtener más información, consulte [Consulta de registros de Apache almacenados en Amazon S3](querying-apache-logs.md).
     + **CSV**: elija **LazySimpleSerDe** si sus datos separados por comas no contienen valores entre comillas dobles o si utilizan el formato `java.sql.Timestamp`. Elija **OpenCSVSerDe** si los datos incluyen comillas o utilizan el formato numérico de UNIX de `TIMESTAMP` (por ejemplo, `1564610311`). Para obtener más información, consulte [Lazy Simple SerDe para CSV, TSV y archivos con delimitación personalizada](lazy-simple-serde.md) y [Open CSV SerDe para el procesamiento de CSV](csv-serde.md).
     + **JSON**: elija la biblioteca SerDe JSON de **OpenX** o **Hive**. Ambos formatos esperan que cada documento JSON esté en una sola línea de texto y que los campos no estén separados por caracteres de nueva línea. El SerDe de OpenX ofrece algunas propiedades adicionales. Para obtener más información sobre estas propiedades, consulte [El SerDe JSON de OpenX](openx-json-serde.md). Para obtener más información acerca de SerDe de Hive, consulte [El SerDe JSON de Hive](hive-json-serde.md).

     Para obtener más información sobre el uso de bibliotecas SerDe en Athena, consulte [Elección de un valor de SerDe para los datos](supported-serdes.md).

1. En **SerDe properties** (Propiedades de SerDe), agregue, edite o elimine propiedades y valores de acuerdo con la biblioteca de SerDe que esté utilizando y sus requisitos.
   + Para agregar una propiedad de SerDe, elija **Add SerDe property** (Agregar propiedad de SerDe).
   + En el campo **Name** (Nombre), ingrese el nombre de la propiedad. 
   + En el campo **Value** (Valor), ingrese un valor para la propiedad. 
   + Para eliminar una propiedad de SerDe, elija **Remove** (Eliminar).

1. En **Table properties** (Propiedades de la tabla), elija o edite las propiedades de la tabla según sus requisitos.
   + En **Write compression** (Compresión de escritura), elija una opción de compresión. La disponibilidad de la opción de compresión de escritura y de las opciones de compresión disponibles depende del formato de los datos. Para obtener más información, consulte [Uso de la compresión en Athena](compression-formats.md).
   + En **Encryption** (Cifrado), seleccione **Encrypted data set** (Conjunto de datos cifrados) si los datos subyacentes están cifrados en Amazon S3. Esta opción establece la propiedad de la tabla `has_encrypted_data` en True (Verdadero) en la instrucción `CREATE TABLE`.

1. En **Column details** (Detalles de la columna), ingrese los nombres y los tipos de datos de las columnas que desee agregar a la tabla.
   + Para agregar más columnas de una a la vez, elija **Add a column** (Agregar una columna).
   + Para agregar más columnas rápidamente, elija **Bulk add columns** (Agregar columnas en bloque). En el cuadro de texto, ingrese una lista de columnas separadas por comas con el formato *column\$1name* *data\$1type*, *column\$1name* *data\$1type*, […] y, a continuación, elija **Add** (Agregar).

1. (Opcional) En **Partition details** (Detalles de la partición), agregue uno o varios nombres y tipos de datos de columnas. La partición mantiene los datos relacionados juntos en función de los valores de las columnas y puede ayudar a reducir la cantidad de datos escaneados por consulta. Para obtener información sobre las particiones, consulte [Partición de datos](partitions.md).

1. (Opcional) En **Bucketing** (Agrupación en buckets), puede especificar una o más columnas que tengan filas que desee agrupar y, a continuación, colocarlas en varios buckets. Esto le permite consultar solo el bucket que desea leer cuando se especifica el valor de las columnas agrupadas en buckets.
   + En **Buckets**, seleccione una o más columnas que tengan un gran número de valores únicos (por ejemplo, una clave principal) y que se usen con frecuencia para filtrar los datos de las consultas.
   + En **Number of buckets** (Número de buckets), ingrese un número que permita que los archivos tengan un tamaño óptimo. Para obtener información, consulte [Top 10 Performance Tuning Tips for Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/) (Los 10 principales consejos de ajuste de rendimiento de Amazon Athena) en el Blog de macrodatos de AWS.
   + Para especificar las columnas agrupadas, la instrucción `CREATE TABLE` utilizará la siguiente sintaxis:

     ```
     CLUSTERED BY (bucketed_columns) INTO number_of_buckets BUCKETS
     ```
**nota**  
La opción **Bucketing** (Agrupación en buckets) no está disponible para los tipos de tablas de **Iceberg**.

1. El recuadro **Preview table query** (Vista previa de consulta de tablas) muestra la instrucción `CREATE TABLE` generada por la información ingresada en el formulario. La instrucción de vista previa no se puede editar directamente. Para cambiar la instrucción, modifique los campos del formulario o [cree la instrucción directamente](creating-tables-how-to.md#to-create-a-table-using-hive-ddl) en el editor de consultas en lugar de utilizar el formulario. 

1. Elija **Create table** (Crear tabla) para ejecutar la instrucción generada en el editor de consultas y crear la tabla.

# Utilice un rastreador para agregar una tabla
<a name="schema-crawlers"></a>

Los rastreadores de AWS Glue son útiles para detectar el esquema de conjuntos de datos y registrarlos como tablas en el catálogo de datos de AWS Glue. Los rastreadores revisan sus datos y establecen cuál es el esquema. Además, los rastreadores puede detectar y registrar particiones. Para obtener más información, consulte [Definición de rastreadores](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) en la *Guía para desarrolladores de AWS Glue*. Las tablas de datos que se han rastreado correctamente se pueden consultar desde Athena.

**nota**  
Athena no reconoce los [patrones de exclusión](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude) que especifica en un rastreador de AWS Glue. Por ejemplo, si tiene un bucket de Amazon S3 que contiene tanto `.csv` como `.json` y se excluyen los archivos `.json` desde el rastreador, Athena consulta ambos grupos de archivos. Para evitar esto, coloque los archivos que desea excluir en una ubicación diferente. 

## Creación de un rastreador de AWS Glue
<a name="data-sources-glue-crawler-setup"></a>

Para crear un rastreador, abra la consola de Athena y, a continuación, utilice la consola de AWS Glue de forma integrada. Al crear el rastreador, especifica una ubicación de datos en Amazon S3 para rastrearla.

**Para crear un rastreador en AWS Glue desde la consola de Athena**

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

1. En el editor de consultas, junto a **Tablas y vistas**, elija **Crear** y, a continuación, **Rastreador de AWS Glue**. 

1. En la página **Add crawler** (Agregar rastreador) de **AWS Glue**, siga los pasos para crear un rastreador. Para obtener más información, consulte [Uso de rastreadores de AWS Glue](#schema-crawlers) en esta guía y [Rellenar AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/populate-catalog-methods.html) en la *Guía para desarrolladores de AWS Glue*.

**nota**  
Athena no reconoce los [patrones de exclusión](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude) que especifica en un rastreador de AWS Glue. Por ejemplo, si tiene un bucket de Amazon S3 que contiene tanto `.csv` como `.json` y se excluyen los archivos `.json` desde el rastreador, Athena consulta ambos grupos de archivos. Para evitar esto, coloque los archivos que desea excluir en una ubicación diferente.

Después de un rastreo, el rastreador de AWS Glue asigna automáticamente determinados metadatos de tabla para hacerlos compatibles con otras tecnologías externas como Apache Hive, Presto y Spark. Ocasionalmente, el rastreador puede asignar incorrectamente las propiedades de los metadatos. Corrija manualmente las propiedades en AWS Glue antes de consultar la tabla con Athena. Para obtener más información, consulte [Visualización y edición de los detalles de una tabla](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html#console-tables-details) en la *Guía para desarrolladores de AWS Glue*.

AWS Glue puede asignar erróneamente metadatos cuando un archivo CSV tiene todos los campos de datos entre comillas, lo que hace que se interprete incorrectamente la propiedad `serializationLib`. Para obtener más información, consulte [Manejo de datos de archivos CSV entre comillas](schema-csv.md#schema-csv-quotes).

# Uso de varios orígenes de datos con un rastreador
<a name="schema-crawlers-data-sources"></a>

Cuando un rastreador de AWS Glue analiza Amazon S3 y detecta varios directorios, utiliza una heurística para determinar dónde se encuentra la raíz de una tabla en la estructura de directorios y qué directorios son particiones de tabla. En algunos casos en que el esquema detectado en dos o más directorios es similar, el rastreador puede tratarlos como si fueran particiones en vez de tablas diferentes. Una forma de ayudar al rastreador a detectar tablas individuales consiste en añadir el directorio raíz de cada tabla como almacén de datos para el rastreador.

Las siguientes particiones en Amazon S3 son un ejemplo:

```
s3://amzn-s3-demo-bucket/folder1/table1/partition1/file.txt
s3://amzn-s3-demo-bucket/folder1/table1/partition2/file.txt
s3://amzn-s3-demo-bucket/folder1/table1/partition3/file.txt
s3://amzn-s3-demo-bucket/folder1/table2/partition4/file.txt
s3://amzn-s3-demo-bucket/folder1/table2/partition5/file.txt
```

Si los esquemas de `table1` y `table2` son similares, y se ha establecido un único origen de datos para `s3://amzn-s3-demo-bucket/folder1/` en AWS Glue, el rastreador puede crear una única tabla con dos columnas de partición: una columna de partición que contenga `table1` y `table2`, y otra columna que contenga de `partition1` a `partition5`.

Para que el rastreador de AWS Glue cree dos tablas diferentes configure el rastreador con dos orígenes de datos, `s3://amzn-s3-demo-bucket/folder1/table1/` y `s3://amzn-s3-demo-bucket/folder1/table2`, tal y como se muestra en el siguiente procedimiento.

**Para agregar otro almacén de datos de S3 a un rastreador existente en 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, elija **Crawlers (Rastreadores)**.

1. Elija el enlace a su rastreador y, a continuación, elija **Edit** (Editar). 

1. Para**Step 2: Choose data sources and classifiers** (Paso 2: Elegir orígenes de datos y clasificadores), elija **Edit** (Editar). 

1. En **Orígenes de datos y catálogos**, seleccione **Agregar un origen de datos**.

1. En el cuadro de diálogo **Add data source** (Agregar origen de datos), en **S3 path** (Ruta de S3), elija **Browse** (Examinar). 

1. Elija el bucket que desee actualizar y, a continuación, elija **Choose** (Elegir).

   El origen de datos que ha agregado aparece en la lista **Data sources** (Orígenes de datos).

1. Elija **Siguiente**.

1. En la página **Configurar ajustes de seguridad**, cree o elija un rol de IAM para el rastreador y, a continuación, elija **Siguiente**.

1. Asegúrese de que la ruta de S3 termina en una barra diagonal y, a continuación, seleccione **Add an S3 data source** (Agregar un origen de datos de S3).

1. En la página **Set output and scheduling** (Definir la salida y la programación), en **Output configuration** (Configuración de salida), elija la base de datos de destino.

1. Elija **Siguiente**.

1. En la página **Review and update** (Revisar y actualizar), revise las elecciones que ha realizado. Para editar un paso, seleccione **Edit** (Editar).

1.  Elija **Actualizar**.

# Programar un rastreador para mantener la AWS Glue Data Catalog y Amazon S3 sincronizados
<a name="schema-crawlers-schedule"></a>

AWS GlueLos rastreadores de se pueden configurar para ejecutarse siguiendo una programación o bajo demanda. Para obtener más información, consulte [Programaciones basadas en el tiempo para trabajos y rastreadores](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html) en la *Guía para desarrolladores de AWS Glue*.

Si los datos para una tabla con particiones llegan a una hora establecida, puede configurar un rastreador de AWS Glue para que se ejecute a una hora programada y detecte y actualice las particiones de la tabla. De esta manera, puede eliminar la necesidad de ejecutar un comando `MSCK REPAIR` potencialmente largo y costoso, o ejecutar manualmente un comando `ALTER TABLE ADD PARTITION`. Para obtener más información, consulte [Particiones de tablas](https://docs.aws.amazon.com/glue/latest/dg/tables-described.html#tables-partition) en la *Guía para desarrolladores de AWS Glue*.

# Optimización de las consultas con indexación y filtrado de particiones de AWS Glue
<a name="glue-best-practices-partition-index"></a>

Cuando Athena consulta las tablas divididas, recupera y filtra las particiones de tabla disponibles en el subconjunto relevante para la consulta. A medida que se agregan nuevos datos y particiones, se necesita más tiempo para procesar las particiones y el tiempo de ejecución de consulta puede aumentar. Si tiene una tabla con un gran número de particiones que crece con el tiempo, considere la posibilidad de utilizar indexación y filtrado de particiones de AWS Glue. La indexación de particiones permite a Athena optimizar el procesamiento de particiones y mejorar el rendimiento de las consultas en tablas altamente particionadas. La configuración del filtrado de particiones en las propiedades de una tabla es un proceso de dos pasos:

1. Creación de un índice de particiones en AWS Glue.

1. Habilitación del filtrado de particiones para la tabla.

## Creación de un índice de particiones
<a name="glue-best-practices-partition-index-creating"></a>

A fin de conocer los pasos para crear un índice de particiones en AWS Glue, consulte [Trabajar con índices de partición](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html) en la Guía para desarrolladores de AWS Glue. Para conocer las limitaciones de los índices de particiones en AWS Glue, consulte [Acerca de los índices de particiones](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html#partition-index-1) de esa página.

## Habilitación del filtrado de particiones
<a name="glue-best-practices-partition-filtering-enabling"></a>

A fin de habilitar el filtrado de particiones para la tabla, debe configurar una nueva propiedad de tabla en AWS Glue. Para conocer los pasos sobre cómo configurar las propiedades de la tabla en AWS Glue, consulte la página [Configuración de proyección de particiones](https://docs.aws.amazon.com/athena/latest/ug/partition-projection-setting-up.html). Cuando edita los detalles de la tabla en AWS Glue, agregue el siguiente valor de clave a la sección **Table properties** (Propiedades de la tabla):
+ En **Key** (Clave), agregue `partition_filtering.enabled`.
+ En **Value** (Valor), agregue `true`.

Para desactivar el filtrado de particiones en esta tabla en cualquier momento, configure el valor `partition_filtering.enabled` como `false`.

Después de completar los pasos anteriores, puede volver a la consola de Athena para consultar los datos.

Para obtener más información sobre la creación de índices y filtros de particiones, consulte el artículo [Mejora del rendimiento de consultas de Amazon Athena con índices de particiones de AWS Glue Data Catalog](https://aws.amazon.com/blogs/big-data/improve-amazon-athena-query-performance-using-aws-glue-data-catalog-partition-indexes/) en el *Blog de macrodatos de AWS*.

# Usar la AWS CLI para recrear una base de datos de AWS Glue y sus tablas
<a name="glue-recreate-db-and-tables-cli"></a>

No es posible cambiar el nombre de una base de datos de AWS Glue directamente, pero puede copiar su definición, modificarla y utilizarla para volver a crear la base de datos con un nombre diferente. Del mismo modo, puede copiar las definiciones de las tablas en la base de datos antigua, modificarlas y utilizarlas para volver a crear las tablas en la base de datos nueva.

**nota**  
 Con el método presentado no se copian las particiones de las tablas. 

En el siguiente procedimiento para Windows se supone que la AWS CLI está configurada para la salida JSON. Para cambiar el formato de salida predeterminado en la AWS CLI, ejecute `aws configure`.

**Para copiar una base de datos de AWS Glue mediante la AWS CLI**

1. En el símbolo del sistema, ejecute el siguiente comando de la AWS CLI para recuperar la definición de la base de datos de AWS Glue que desea copiar.

   ```
   aws glue get-database --name database_name
   ```

   Para obtener más información acerca del comando `get-database`, consulte [get-database](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-database.html).

1. Guarde la salida JSON en un archivo con el nombre de la nueva base de datos (por ejemplo, `new_database_name.json`) en su escritorio.

1. Abra el archivo `new_database_name.json` en un editor de texto.

1. Siga los siguientes pasos en el archivo JSON:

   1. Elimina la entrada `{ "Database":` exterior y el corchete de cierre correspondiente `}` al final del archivo.

   1. Cambie la entrada `Name` por el nuevo nombre de la base de datos.

   1. Quite el campo `CatalogId`.

1. Guarde el archivo.

1. En el símbolo del sistema, ejecute el siguiente comando de la AWS CLI para usar el archivo de definición de base de datos modificado a fin de crear la base de datos con el nombre nuevo.

   ```
   aws glue create-database --database-input "file://~/Desktop\new_database_name.json"
   ```

   Para obtener más información acerca del comando `create-database`, consulte [create-database](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/create-database.html). Para obtener información acerca de cómo cargar los parámetros de la AWS CLI desde un archivo, consulte [Carga de los parámetros de la AWS CLI desde un archivo](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-file.html) en la *Guía del usuario de la AWS Command Line Interface*.

1. Para comprobar que la base de datos nueva se ha creado en AWS Glue, ejecute el siguiente comando:

   ```
   aws glue get-database --name new_database_name
   ```

Ahora está listo para obtener la definición de una tabla que desea copiar en la base de datos nueva, modificar la definición y usar la definición modificada para volver a crear la tabla en la base de datos nueva. Con este procedimiento no se cambia el nombre de la tabla.

**Para copiar una tabla de AWS Glue mediante la AWS CLI**

1. En el símbolo del sistema, ejecute el siguiente comando de la AWS CLI.

   ```
   aws glue get-table --database-name database_name --name table_name
   ```

   Para obtener más información acerca del comando `get-table`, consulte [get-table](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-table.html).

1. Guarde la salida JSON en un archivo con el nombre de la tabla (por ejemplo, *table\$1name*.json) en el escritorio de Windows.

1. Abra el archivo en un editor de texto.

1. En el archivo JSON, elimine la entrada exterior `{"Table": ` y el corchete de cierre correspondiente `}` al final del archivo.

1. En el archivo JSON, elimine las siguientes entradas y sus valores:
   + `DatabaseName`: esta entrada no es necesaria porque el comando de la CLI `create-table` usa el parámetro `--database-name`.
   + `CreateTime`
   + `UpdateTime`
   + `CreatedBy`
   + `IsRegisteredWithLakeFormation`
   + `CatalogId`
   + `VersionId`

1. Guarde el archivo de definición de la tabla.

1. En el símbolo del sistema, ejecute el siguiente comando de la AWS CLI para volver a crear la tabla en la base de datos nueva:

   ```
   aws glue create-table --database-name new_database_name --table-input "file://~/Desktop\table_name.json"     
   ```

   Para obtener más información acerca del comando `create-table`, consulte [create-table](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/create-table.html).

   La tabla aparece ahora en la base de datos nueva en AWS Glue y se puede consultar desde allí.

1. Repita los pasos para copiar cada tabla adicional a la base de datos nueva en AWS Glue.

# Creación de tablas para los trabajos de ETL
<a name="schema-classifier"></a>

Puede utilizar Athena para crear tablas que AWS Glue pueda utilizar para los trabajos de ETL. Los trabajos de AWS Glue realizan operaciones de ETL. Un trabajo de AWS Glue ejecuta un script que extrae datos de las fuentes, los transforma y los carga en los destinos. Para obtener más información, consulte la sección sobre [creación de trabajos en GlueAWS](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html) en la *Guía para desarrolladores de AWS Glue*.

## Creación de tablas en Athena para los trabajos de ETL de AWS Glue
<a name="schema-etl-tables"></a>

Es necesario agregar a las tablas que cree en Athena una propiedad denominada `classification`, que identifica el formato de los datos. Esto permite a AWS Glue utilizar las tablas para trabajos de ETL. Los valores de clasificación pueden ser `avro`, `csv`, `json`, `orc`, `parquet` o `xml`. A continuación, se muestra un ejemplo de instrucción `CREATE TABLE` en Athena:

```
CREATE EXTERNAL TABLE sampleTable (
  column1 INT,
  column2 INT
  ) STORED AS PARQUET
  TBLPROPERTIES (
  'classification'='parquet')
```

Si no se añadió la propiedad de `classification` al crear la tabla, puede hacerse ahora por medio de la consola de AWS Glue.

**Para agregar la propiedad de clasificación con 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 de la consola, elija **Tables** (Tablas).

1. Elija el enlace para la tabla que quiere editar y, a continuación, elija **Actions** (Acciones), **Edit table details** (Editar detalles de la tabla).

1. Desplácese hacia abajo hasta la sección **Table properties** (Propiedades de la tabla).

1. Elija **Agregar**.

1. En **Clave**, escriba **classification**.

1. En **Value** (Valor), especifique un tipo de datos (por ejemplo, **json**).

1. Seleccione **Save**.

   En la sección **Table details** (Detalles de la tabla), el tipo de datos que ha especificado aparecerá en el campo **Classification** (Clasificación) de la tabla.

Para obtener más información, consulte [Uso de tablas](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html) en la *Guía para desarrolladores de AWS Glue*.

## Uso de los trabajos de ETL para optimizar el rendimiento de las consultas
<a name="schema-etl-performance"></a>

AWS GlueLos trabajos de son útiles para transformar los datos a un formato que optimice el rendimiento de las consultas en Athena. Los formatos de datos tienen un gran impacto en el rendimiento y el costo de las consultas en Athena.

AWS Glue es compatible con la escritura en los formatos de datos Parquet y ORC. Se puede utilizar esta característica para transformar los datos y utilizarlos en Athena. Para obtener más información sobre el uso de Parquet y ORC, y otras formas de mejorar el rendimiento en Athena, consulte los [10 mejores consejos para ajustar el rendimiento de Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/).

**nota**  
Para reducir la probabilidad de que Athena no pueda leer los tipos de datos `SMALLINT` y `TINYINT` generados por un trabajo de ETL de AWS Glue, convierta `SMALLINT` y `TINYINT` a `INT` cuando crea un trabajo de ETL que convierte los datos en ORC.

## Automatización de trabajos de AWS Glue para ETL
<a name="schema-etl-automate"></a>

Puede configurar los trabajos de ETL de AWS Glue para que se ejecuten automáticamente basándose en desencadenadores. Esta característica es ideal cuando se insertan datos del exterior de AWS en un bucket de Amazon S3, en un formato que es ineficiente para realizar consultas en Athena. Para obtener más información, consulte [Desencadenar trabajos de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/trigger-job.html) en la *Guía para desarrolladores de AWS Glue*.

# Trabajar con datos CSV en AWS Glue
<a name="schema-csv"></a>

En esta página, se describe cómo utilizar AWS Glue para crear esquemas a partir de archivos CSV que contienen comillas alrededor de los valores de datos de cada columna o de archivos CSV que incluyen valores de encabezado.

## Manejo de datos de archivos CSV entre comillas
<a name="schema-csv-quotes"></a>

Piense en un archivo CSV que contenga campos de datos entre comillas dobles como en el siguiente ejemplo.

```
"John","Doe","123-555-1231","John said \"hello\""
"Jane","Doe","123-555-9876","Jane said \"hello\""
```

Para ejecutar una consulta en Athena en una tabla creada a partir de un archivo CSV que contiene valores entre comillas, debe modificar las propiedades de la tabla en AWS Glue para utilizar el OpenCSVSerDe. Para obtener más información acerca de SerDe de OpenCSV, consulte [Open CSV SerDe para el procesamiento de CSV](csv-serde.md).

**Para editar propiedades de tabla en la consola de AWS Glue**

1. En el panel de navegación de la consola de AWS Glue, elija **Tables**.

1. Elija el enlace para la tabla que quiere editar y, a continuación, elija **Actions** (Acciones), **Edit table details** (Editar detalles de la tabla).

1. En la página **Editar tabla**, realice los siguientes cambios:
   + En **Serialization lib** (Biblioteca de serialización), ingrese `org.apache.hadoop.hive.serde2.OpenCSVSerde`.
   + Para **Patrones de Serde**, ingrese los siguientes valores para las claves `escapeChar`, `quoteChar` y `separatorChar`: 
     + Para `escapeChar`, ingrese una barra diagonal inversa (**\$1**).
     + Para `quoteChar`, ingrese una comilla doble (**"**).
     + Para `separatorChar`, ingrese una coma (**,**).

1. Seleccione **Guardar**.

Para obtener más información, consulte [Visualización y edición de los detalles de una tabla](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html#console-tables-details) en la *Guía para desarrolladores de AWS Glue*.

También se pueden actualizar las propiedades de la tabla AWS Glue mediante programación. Puede utilizar la operación de la API [UpdateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateTable.html) de AWS Glue o el comando de AWS CLI [update-table](https://docs.aws.amazon.com/cli/latest/reference/glue/update-table.html) para modificar el bloque `SerDeInfo` en la definición de tabla, como en el siguiente ejemplo JSON.

```
"SerDeInfo": {
   "name": "",
   "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
   "parameters": {
      "separatorChar": ","
      "quoteChar": "\""
      "escapeChar": "\\"
      }
},
```

## Manejo de archivos CSV con encabezados
<a name="schema-csv-headers"></a>

Cuando define una tabla en Athena con una instrucción `CREATE TABLE`, puede utilizar la propiedad de tabla `skip.header.line.count` para ignorar los encabezados en los datos CSV, como en el siguiente ejemplo.

```
...
STORED AS TEXTFILE
LOCATION 's3://amzn-s3-demo-bucket/csvdata_folder/';
TBLPROPERTIES ("skip.header.line.count"="1")
```

También puede eliminar los encabezados de CSV de antemano para que la información de encabezado no se incluya en los resultados de la consulta de Athena. Una forma de hacerlo es utilizar trabajos de AWS Glue, que se encargan de las tareas de extracción, transformación y carga (ETL). Puede escribir scripts en AWS Glue en un lenguaje que es una extensión del dialecto PySpark Python. Para obtener más información, consulte la sección sobre [creación de trabajos en GlueAWS](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html) en la *Guía para desarrolladores de AWS Glue*.

En el siguiente ejemplo se muestra una función de un script de AWS Glue que escribe un marco dinámico utilizando `from_options` y establece la opción de formato `writeHeader` como "false", lo que elimina la información de encabezado:

```
glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://amzn-s3-demo-bucket/MYTABLEDATA/"}, format = "csv", format_options = {"writeHeader": False}, transformation_ctx = "datasink2")
```

# Uso de datos geoespaciales en AWS Glue
<a name="schema-geospatial"></a>

AWS Glue no admite de forma nativa Well-known Text (WKT), Well-Known Binary (WKB) u otros tipos de datos PostGIS. El clasificador AWS Glue analiza los datos geoespaciales y los clasifica utilizando los tipos de datos admitidos para el formato, como `varchar` para CSV. Al igual que ocurre con otras tablas de AWS Glue, es posible que tenga que actualizar las propiedades de las tablas creadas a partir de datos geoespaciales para permitir a Athena analizar estos tipos de datos tal y como están. Para obtener más información, consulte [Utilice un rastreador para agregar una tabla](schema-crawlers.md) y [Trabajar con datos CSV en AWS Glue](schema-csv.md). Es posible que Athena no pueda analizar algunos tipos de datos geoespaciales en las tablas de AWS Glue tal y como están. Para obtener más información acerca de cómo trabajar con datos geoespaciales en Athena, consulte [Consulta de datos geoespaciales](querying-geospatial-data.md).