Mejores prácticas al usar Athena con AWS Glue - Amazon Athena

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Mejores prácticas al usar Athena con AWS Glue

Si utiliza Athena con AWS Glue Data Catalog, puede utilizarla AWS Glue para crear bases de datos y tablas (esquema) para consultarlas en Athena, o puede utilizar Athena para crear un esquema y, a continuación, utilizarlos en servicios relacionados. AWS Glue Este tema contiene consideraciones y prácticas recomendadas para utilizar ambos métodos.

Desde el punto de vista tecnológico, Athena utiliza Trino para procesar instrucciones DML y Hive para procesar instrucciones DDL que se usan en la creación y modificación de esquemas. Con estas tecnologías, hay un par de convenciones a seguir para que Athena y Athena AWS Glue trabajen bien juntas.

En este tema

Nombres de base de datos, tablas y columnas

Al crear un esquema AWS Glue para consultar en Athena, tenga en cuenta lo siguiente:

  • El nombre de la base de datos no puede tener más de 255 caracteres.

  • El nombre de una tabla no puede tener más de 255 caracteres.

  • El nombre de una columna no puede tener más de 255 caracteres.

  • Los únicos caracteres aceptables para los nombres de base de datos, los nombres de tablas y los nombres de columnas son las letras minúsculas, los números y los guiones bajos.

Para obtener más información, consulte Bases de datos y Tablas en la Guía para desarrolladores deAWS Glue .

nota

Si utiliza una AWS::Glue::Database AWS CloudFormation plantilla para crear una base de AWS Glue datos y no especifica un nombre de base de datos, genera AWS Glue automáticamente un nombre de base de datos con el formato resource_name—random_string que no es compatible con Athena.

Puede usar el Gestor de AWS Glue Catálogos para cambiar el nombre de las columnas, pero no los nombres de las tablas o bases de datos. Para evitar esta limitación, debe usar una definición de la base de datos antigua para crear una base de datos con el nombre nuevo. A continuación, utilice las definiciones de las tablas de la base de datos antigua para volver a crear las tablas en la base de datos nueva. Para ello, puede utilizar el AWS CLI o el AWS Glue SDK. Para ver los pasos, consulte Uso de la AWS CLI para recrear una base de datos de AWS Glue y sus tablas.

Uso de AWS Glue rastreadores

AWS Glue Los rastreadores ayudan a descubrir el esquema de los conjuntos de datos y a registrarlos como tablas en el AWS Glue catálogo de datos. 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 en la Guía para desarrolladores deAWS Glue . Las tablas de datos que se han rastreado correctamente se pueden consultar desde Athena.

nota

Athena no reconoce los patrones de exclusión que especifiques para un AWS Glue rastreador. 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.

Programación de un rastreador para mantener AWS Glue Data Catalog y Simple Storage Service (Amazon S3) sincronizados

AWS Glue Los rastreadores se pueden configurar para que se ejecuten según una programación o bajo demanda. Para obtener más información, consulte Programaciones basadas en el tiempo para trabajos y rastreadores en la Guía para desarrolladores deAWS Glue .

Si tienes datos de una tabla particionada que llegan a una hora determinada, puedes configurar un AWS Glue rastreador para que se ejecute según lo programado a fin de detectar y actualizar 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 en la Guía para desarrolladores deAWS Glue .

Uso de varios orígenes de datos con rastreadores

Cuando un AWS Glue rastreador escanea 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 la 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://bucket01/folder1/table1/partition1/file.txt s3://bucket01/folder1/table1/partition2/file.txt s3://bucket01/folder1/table1/partition3/file.txt s3://bucket01/folder1/table2/partition4/file.txt s3://bucket01/folder1/table2/partition5/file.txt

Si el esquema es similar table1 y table2 una única fuente de datos está configurada como s3://bucket01/folder1/ in AWS Glue, el rastreador puede crear una sola tabla con dos columnas de partición: una columna de partición que contiene table1 y y table2 una segunda columna de partición que contiene entradas. partition1 partition5

Para que el AWS Glue rastreador cree dos tablas independientes, configúrelo para que tenga dos fuentes de datos s3://bucket01/folder1/table1/ ys3://bucket01/folder1/table2, tal como se muestra en el siguiente procedimiento.

Para añadir un banco de datos de S3 a un rastreador existente en AWS Glue

  1. Inicie sesión en la AWS Glue consola AWS Management Console y ábrala en https://console.aws.amazon.com/glue/.

  2. En el panel de navegación, elija Crawlers (Rastreadores).

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

  4. ParaStep 2: Choose data sources and classifiers (Paso 2: Elegir orígenes de datos y clasificadores), elija Edit (Editar).

  5. En Data sources (Orígenes de datos), elija Add a data source (Agregar un origen de datos).

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

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

  8. Elija Siguiente.

  9. En la página Configure security settings (Configurar ajustes de seguridad), cree o elija un rol de IAM para el rastreador y, a continuación, elija Next (Siguiente).

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

  11. 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.

  12. Elija Siguiente.

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

  14. Seleccione Actualizar.

Sincronización de un esquema de partición para evitar "HIVE_PARTITION_SCHEMA_MISMATCH"

Para cada tabla del catálogo de AWS Glue datos que tenga columnas de partición, el esquema se almacena en el nivel de tabla y para cada partición individual de la tabla. Un AWS Glue rastreador rellena el esquema de las particiones en función de la muestra de datos que lee dentro de la partición. Para obtener más información, consulte Uso de varios orígenes de datos con rastreadores.

Cuando Athena ejecuta una consulta, valida el esquema de la tabla y el esquema de las particiones necesarias para la consulta. En la validación se comparan los tipos de datos de la columna en orden y se confirma que estos tipos de datos coinciden en el caso de las columnas que se solapan. De esta forma, se evita que se produzcan operaciones imprevistas como añadir o eliminar columnas del medio de una tabla. Si Athena detecta que el esquema de una partición es diferente del esquema de la tabla, es posible que Athena no pueda procesar la consulta y genere el error HIVE_PARTITION_SCHEMA_MISMATCH.

Existen varias maneras de resolver este problema. En primer lugar, si los datos se añadieron por error, puede eliminar los archivos de datos que generan la diferencia en el esquema, anular la partición y volver a rastrear los datos. En segundo lugar, puede anular la partición individual y, a continuación, ejecutar MSCK REPAIR en Athena para volver a crear la partición utilizando el esquema de la tabla. Esta segunda opción solo funciona si está convencido de que el esquema aplicado continuará leyendo los datos correctamente.

Actualización de los metadatos de una tabla

Tras un rastreo, el AWS Glue rastreador asigna automáticamente determinados metadatos de la tabla para que sean 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 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 en la Guía para desarrolladores deAWS Glue .

AWS Glue puede asignar mal los metadatos cuando un archivo CSV tiene comillas alrededor de cada campo de datos, lo que hace que la propiedad sea incorrecta. serializationLib Para obtener más información, consulte Datos de archivos CSV entre comillas.

Trabajo con archivos CSV

Los archivos CSV ponen ocasionalmente los valores de datos destinados a cada columna entre comillas y es posible que los archivos CSV contengan valores de encabezado que no formen parte de los datos que se van a analizar. Al crear esquemas AWS Glue a partir de estos archivos, sigue las instrucciones de esta sección.

Datos de archivos CSV entre comillas

Puede tener un archivo CSV que contenga campos de datos entre comillas dobles como el ejemplo siguiente:

"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 tiene valores entre comillas, debe modificar las propiedades de la tabla AWS Glue para usar OpenCSV. SerDe Para obtener más información sobre SerDe OpenCSV, consulte. OpenCSVSerDe para el procesamiento de CSV

Para editar las propiedades de la tabla en la consola AWS Glue
  1. En el panel de navegación de la AWS Glue consola, elija Tablas.

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

  3. En la página Edit table (Editar tabla), realice los cambios siguientes:

    • En Serialization lib (Biblioteca de serialización), ingrese org.apache.hadoop.hive.serde2.OpenCSVSerde.

    • Para Serde parameters (Parámetros de Serde), ingrese los siguientes valores para las claves escapeChar, quoteChar y separatorChar:

      • Para escapeChar, ingrese una barra diagonal inversa (\).

      • Para quoteChar, ingrese una comilla doble (").

      • Para separatorChar, ingrese una coma (,).

  4. Seleccione Guardar.

Para obtener más información, consulte Visualización y edición de los detalles de una tabla en la Guía para desarrolladores deAWS Glue .

Actualizar las propiedades AWS Glue de la tabla mediante programación

Puedes usar la operación AWS Glue UpdateTableAPI o el comando CLI update-table para modificar el SerDeInfo bloque en la definición de la tabla, como en el siguiente ejemplo de JSON.

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

Archivos CSV con encabezados

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://my_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 lograrlo es utilizar AWS Glue trabajos, que realizan tareas de extracción, transformación y carga (ETL). Puede escribir scripts en un AWS Glue lenguaje que sea una extensión del dialecto de PySpark Python. Para obtener más información, consulte Creación de trabajos en AWS Glue en la Guía paraAWS Glue desarrolladores.

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

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

AWS Glue indexación y filtrado de particiones

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.

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

Creación de un índice de particiones

Para obtener información sobre cómo crear un índice de particiones en AWS Glue, consulte Trabajar con índices de particiones en la Guía para AWS Glue desarrolladores. Para conocer las limitaciones de los índices de partición AWS Glue, consulte la sección Acerca de los índices de partición de esa página.

Habilitación del filtrado de particiones

A fin de habilitar el filtrado de particiones para la tabla, debe configurar una nueva propiedad de tabla en AWS Glue. Para obtener información sobre cómo configurar las propiedades de la tabla AWS Glue, consulte la página Configuración de la proyección de particiones. Al editar los detalles de la tabla AWS Glue, añada el siguiente par clave-valor a la sección de 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 el uso de la indexación y el filtrado de particiones, consulte Mejorar el rendimiento de las consultas de Amazon Athena AWS Glue Data Catalog mediante índices de particiones en AWS el blog Big Data.

Uso de datos geoespaciales

AWS Glue no admite de forma nativa textos conocidos (WKT), binarios conocidos (WKB) ni otros tipos de datos PostGIS. El AWS Glue clasificador analiza los datos geoespaciales y los clasifica utilizando los tipos de datos compatibles con el formato, como el CSV. varchar Al igual que con otras AWS Glue tablas, es posible que deba actualizar las propiedades de las tablas creadas a partir de datos geoespaciales para que Athena pueda analizar estos tipos de datos tal como están. Para obtener más información, consulte Uso de AWS Glue rastreadores y Trabajo con archivos CSV. Es posible que Athena no pueda analizar algunos tipos de datos geoespaciales en AWS Glue las tablas tal como están. Para obtener más información acerca de cómo trabajar con datos geoespaciales en Athena, consulte Consulta de datos geoespaciales.

Uso AWS Glue de trabajos para ETL con Athena

AWS Glue los trabajos realizan operaciones de ETL. Un AWS Glue trabajo ejecuta un script que extrae datos de las fuentes, los transforma y los carga en los destinos. Para obtener más información, consulte Creación de trabajos en AWS Glue en la Guía paraAWS Glue desarrolladores.

Creación de tablas con Athena para AWS Glue trabajos de ETL

Es necesario agregar a las tablas que cree en Athena una propiedad denominada classification, que identifica el formato de los datos. Esto permite utilizar AWS Glue las tablas para los 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 la propiedad de la tabla no se agregó cuando se creó la tabla, puede agregarla mediante la AWS Glue consola.

Para añadir la propiedad de la tabla de clasificación mediante la AWS Glue consola

  1. Inicie sesión en la AWS Glue consola AWS Management Console y ábrala en https://console.aws.amazon.com/glue/.

  2. En el panel de navegación de la consola, elija Tables (Tablas).

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

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

  5. Elija Añadir.

  6. En Clave, escriba classification.

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

  8. Seleccione Guardar.

    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 en la Guía para desarrolladores deAWS Glue .

Uso de trabajos de ETL para optimizar el rendimiento de las consultas

AWS Glue Los trabajos pueden ayudarle a 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.

Se recomienda utilizar los formatos de datos Parquet y ORC. AWS Glue admite la escritura en estos dos formatos de datos, lo que puede facilitar y acelerar la transformación de los datos a un formato óptimo para Athena. Para obtener más información sobre estos formatos y otras formas de mejorar el rendimiento, consulte los 10 mejores consejos para ajustar el rendimiento de Amazon Athena.

Conversión de los tipos de datos SMALLINT y TINYINT en INT cuando realiza conversiones a ORC

Para reducir la probabilidad de que Athena no pueda leer los tipos de TINYINT datos SMALLINT generados por un trabajo de AWS Glue ETL, convierta SMALLINT y TINYINT a INT cuando utilice el asistente o escriba un script para un trabajo de ETL.

Automatizar los AWS Glue trabajos para ETL

Puede configurar los trabajos de AWS Glue ETL para que se ejecuten automáticamente en función de los activadores. Esta función es ideal cuando los datos del exterior AWS se envían a un bucket de Amazon S3 en un formato subóptimo para realizar consultas en Athena. Para obtener más información, consulte Desencadenar trabajos de AWS Glue en la Guía para desarrolladores deAWS Glue .