Conector para DynamoDB de Amazon Athena - Amazon Athena

Conector para DynamoDB de Amazon Athena

El conector Amazon Athena DynamoDB permite que Amazon Athena se comunique con DynamoDB para que pueda consultar las tablas con SQL. Las operaciones de escritura como INSERT INTO no son compatibles.

Este conector se puede registrar en el Catálogo de datos de Glue como un catálogo federado. Admite los controles de acceso a los datos definidos en Lake Formation a nivel de catálogo, base de datos, tabla, columna, fila y etiqueta. Este conector utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue.

Si Lake Formation está habilitado en la cuenta, el rol de IAM del conector de Lambda federado de Athena que haya implementado en AWS Serverless Application Repository debe tener acceso de lectura en Lake Formation para AWS Glue Data Catalog.

Requisitos previos

Limitaciones

Si migra las conexiones de DynamoDB al Catálogo de Glue y Lake Formation, solo se reconocerán los nombres de tabla y columna en minúsculas.

Parámetros

Utilice los parámetros de esta sección para configurar el conector de DynamoDB.

nota

Los conectores de orígenes de datos de Athena creados a partir del 3 de diciembre de 2024 utilizan conexiones de AWS Glue.

Los nombres y definiciones de los parámetros que se indican a continuación corresponden a conectores de orígenes de datos de Athena creados antes del 3 de diciembre de 2024. Estos pueden variar respecto a las propiedades de conexión de AWS Glue correspondientes. A partir del 3 de diciembre de 2024, utilice los parámetros que se indican a continuación únicamente al implementar manualmente una versión anterior de un conector de origen de datos de Athena.

  • spill_bucket: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.

  • spill_prefix: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada spill_bucket llamada athena-federation-spill. Le recomendamos configurar un ciclo de vida de almacenamiento de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.

  • spill_put_request_headers: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud putObject de Amazon S3 que se usa para el vertidos (por ejemplo, {"x-amz-server-side-encryption" : "AES256"}). Para ver otros encabezados posibles, consulte PutObject en la referencia de la API de Amazon Simple Storage Service.

  • kms_key_id: (opcional) de forma predeterminada, los datos que se vierten a Amazon S3 se cifran mediante el modo de cifrado autenticado AES-GCM y una clave generada aleatoriamente. Para que la función de Lambda use claves de cifrado más seguras generadas por KMS, como a7e63k4b-8loc-40db-a2a1-4d0en2cd8331, puede especificar un ID de clave de KMS.

  • disable_spill_encryption: (opcional) cuando se establece en True, desactiva el cifrado del vertido. El valor predeterminado es False, de modo que los datos que se vierten a S3 se cifran mediante AES-GCM, ya sea mediante una clave generada aleatoriamente o KMS para generar claves. La desactivación del cifrado de vertido puede mejorar el rendimiento, especialmente si su ubicación de vertido usa cifrado del servidor.

  • disable_glue: (opcional) si está presente y se establece en true (verdadero), el conector no intentará recuperar metadatos complementarios de AWS Glue.

  • glue_catalog: (opcional) use esta opción para especificar un catálogo de AWS Glue entre cuentas. De forma predeterminada, el conector intenta obtener los metadatos de su propia cuenta de AWS Glue.

  • disable_projection_and_casing: (opcional) desactiva la proyección y la distinción entre mayúsculas y minúsculas. Use esta opción si quiere consultar las tablas de DynamoDB que distinguen entre mayúsculas y minúsculas en sus nombres de columna y no desea especificar ninguna propiedad columnMapping en la tabla de AWS Glue.

    El parámetro disable_projection_and_casing utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas y la asignación de columnas:

    • auto: desactiva la proyección y la distinción entre mayúsculas y minúsculas cuando se detecta un tipo no admitido con anterioridad y la asignación de nombres de columnas no se establece en la tabla. Este es el valor predeterminado.

    • always: desactiva la proyección y la distinción entre mayúsculas y minúsculas de forma incondicional. Esta opción resulta útil cuando en los nombres de las columnas de DynamoDB se distingue entre mayúsculas y minúsculas, pero no desea especificar ninguna asignación de nombres de columna.

    Al usar la el parámetro disable_projection_and_casing, tenga en cuenta los siguientes puntos:

    • El uso del parámetro puede dar lugar a un mayor uso del ancho de banda. Además, si su función de Lambda no está en la misma Región de AWS que su origen de datos, se generarán mayores costos por transferencia estándar entre regiones de AWS como resultado del mayor uso del ancho de banda. Para obtener más información sobre los costos por transferencia entre regiones, consulte AWS Data Transfer Charges for Server and Serverless Architectures en el blog de la Red de socios de AWS.

    • Debido a que se transfiere una mayor cantidad de bytes y a que esta requiere un mayor tiempo de deserialización, la latencia general puede aumentar.

Configuración de bases de datos y tablas en AWS Glue

Debido a que la capacidad de inferencia de esquemas integrada del conector es limitada, es posible que quiera usar AWS Glue para obtener metadatos. Para ello, debe tener una base de datos y una tabla en AWS Glue. Para habilitar su uso con DynamoDB, debe editar sus propiedades.

Para editar propiedades de base de datos en la consola de AWS Glue
  1. Inicie sesión en la AWS Management Console y abra la consola de AWS Glue en https://console.aws.amazon.com/glue/.

  2. En el panel de navegación, amplíe Catálogo de datos y, a continuación, seleccione Bases de datos.

    En la página Databases (Bases de datos), puede editar una base de datos existente o seleccionar Add database (Agregar base de datos) para crear una.

  3. En la lista de bases de datos, seleccione el enlace de la base de datos que desee editar.

  4. Elija Editar.

  5. En la página Actualizar una base de datos, en Configuración de la base de datos, en Ubicación, agregue la cadena dynamo-db-flag. Esta palabra clave indica que la base de datos contiene tablas que el conector de DynamoDB de Athena utiliza para metadatos suplementarios y se requiere para bases de datos de AWS Glue que no sean default. La propiedad dynamo-db-flag resulta útil para filtrar las bases de datos de cuentas con muchas bases de datos.

  6. Elija Update Database (Actualizar base de datos).

Para editar propiedades de tabla en la consola de AWS Glue
  1. Inicie sesión en la AWS Management Console y abra la consola de AWS Glue en https://console.aws.amazon.com/glue/.

  2. En el panel de navegación, amplíe Catálogo de datos y, a continuación, seleccione Tablas.

  3. En la página Tablas, en la lista de tablas, seleccione el nombre vinculado de la tabla que desea editar.

  4. Seleccione Actions (Acciones), Edit queue (Editar cola).

  5. En la página Editar tabla, en la sección Propiedades de la tabla , agregue las siguientes propiedades de tabla según corresponda. Si utiliza el rastreador de DynamoDB de AWS Glue, estas propiedades se configuran automáticamente.

    • dynamodb: cadena que indica al conector de DynamoDB de Athena que la tabla se puede usar para metadatos adicionales. Ingrese la cadena dynamodb en las propiedades de tabla en un campo denominado classification (clasificación) (coincidencia exacta).

      nota

      La página Definir propiedades de la tabla, que forma parte del proceso de creación de la tabla en la consola AWS Glue, tiene una sección de Formato de datos con un campo de Clasificación. No se puede entrar ni elegir dynamodb aquí. En su lugar, después de crear la tabla, siga los pasos para editarla e introducir classification y dynamodb como un par clave-valor en la sección Propiedades de la tablas.

    • sourceTable: propiedad de tabla opcional que define el nombre de la tabla de origen en DynamoDB. Use esta opción si las reglas de denominación de tablas de AWS Glue le impiden crear una tabla de AWS Glue con el mismo nombre que la de DynamoDB. Por ejemplo, no se permiten mayúsculas en nombres de tablas de AWS Glue, pero se permiten en los de tablas de DynamoDB.

    • columnMapping: propiedad de tabla opcional que define las asignaciones de los nombres de columna. Use esta opción si las reglas de denominación de columnas de AWS Glue le impiden crear una tabla de AWS Glue con los mismos nombres de columnas que la de DynamoDB. Por ejemplo, no se permiten mayúsculas en nombres de columnas de AWS Glue, pero se permiten en los de columnas de DynamoDB. Se espera que el valor de la propiedad tenga el formato col1=Col1, col2=Col2. Tenga en cuenta que la asignación de columnas solo se aplica a los nombres de las columnas de nivel superior y no a los campos anidados.

    • defaultTimeZone: propiedad de tabla opcional que se aplica a los valores date o datetime que no tienen una zona horaria explícita. Establecer este valor es una práctica recomendada para evitar discrepancias entre la zona horaria predeterminada del origen de datos y la zona horaria de la sesión de Athena.

    • datetimeFormatMapping: propiedad de tabla opcional que especifica el formato de date o datetime que se utilizará al analizar datos de una columna del tipo de datos date o timestamp de AWS Glue. Si no se especifica esta propiedad, el conector intenta inferir un formato ISO-8601. Si el conector no puede inferir el formato de date o datetime o analizar la cadena sin procesar, el valor se omite del resultado.

      El formato del valor datetimeFormatMapping debe ser col1=someformat1,col2=someformat2. A continuación, se muestran ejemplos de formatos:

      yyyyMMdd'T'HHmmss ddMMyyyy'T'HH:mm:ss

      Si tu columna tiene los valores de date o datetime sin zona horaria y desea utilizar la columna de la cláusula WHERE, defina la propiedad datetimeFormatMapping de la columna.

  6. Si define las columnas manualmente, asegúrese de utilizar los tipos de datos adecuados. Si usó un rastreador, valide las columnas y los tipos que este descubra.

  7. Seleccione Guardar.

Permisos necesarios

Para obtener información completa sobre las políticas de IAM que requiere este conector, consulte la sección Policies del archivo athena-dynamodb.yaml. En la siguiente lista se resumen los permisos requeridos.

  • Acceso de escritura a Amazon S3: el conector requiere acceso de escritura a una ubicación de Amazon S3 para volcar los resultados de consultas de gran tamaño.

  • Athena GetQueryExecution: el conector usa este permiso para fallar rápidamente cuando finaliza la consulta ascendente de Athena.

  • AWS Glue Data Catalog: el conector de DynamoDB requiere acceso de solo lectura al AWS Glue Data Catalog para obtener información sobre el esquema.

  • Registros de CloudWatch: el conector requiere acceso a Registros de CloudWatch para almacenar registros.

  • Acceso de lectura de DynamoDB: el conector utiliza las operaciones de la API: DescribeTable, ListSchemas, ListTables, Query y Scan.

Rendimiento

El conector de DynamoDB de Athena admite análisis paralelos e intenta insertar predicados como parte de sus consultas de DynamoDB. Un predicado de clave hash con valores distintos X da como resultado llamadas de consulta X a DynamoDB. Todos los demás escenarios de predicados dan como resultado un número Y de llamadas de escaneo, donde Y se determina heurísticamente en función del tamaño de la tabla y su rendimiento aprovisionado. Sin embargo, seleccionar un subconjunto de columnas da como resultado que en ocasiones se prolongue el tiempo de ejecución de las consultas.

Las cláusulas LIMIT y los predicados simples se insertan y pueden reducir la cantidad de datos analizados, lo que permite disminuir el tiempo de ejecución de las consultas.

Cláusulas LIMIT

Una instrucción LIMIT N reduce los datos analizados en la consulta. Con la inserción LIMIT N, el conector devuelve solo las filas N a Athena.

Predicados

Un predicado es una expresión de la cláusula WHERE de una consulta SQL que da como resultado un valor booleano y filtra las filas en función de varias condiciones. Para mejorar la funcionalidad y reducir la cantidad de datos analizados, el conector DynamoDB de Athena puede combinar estas expresiones e insertarlas directamente en DynamoDB.

Los siguientes operadores del conector DynamoDB de Athena admiten la inserción de predicados:

  • Booleano: Y

  • Igualdad: EQUAL, NOT_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, IS_NULL.

Ejemplo de inserción combinada

Para mejorar las capacidades de consulta, combine los tipos de inserciones, como en el siguiente ejemplo:

SELECT * FROM my_table WHERE col_a > 10 and col_b < 10 LIMIT 10

Para obtener información sobre cómo usar la inserción de predicados a fin de mejorar el rendimiento en las consultas federadas, incluida DynamoDB, consulte el artículo Improve federated queries with predicate pushdown in Amazon Athena (Mejorar las consultas federadas con la inserción de predicados en Amazon Athena) en el Blog de macrodatos de AWS.

Consultas de acceso directo

El conector de DynamoDB admite consultas de acceso directo y utiliza la sintaxis PartiQL. No se admite la operación de la API de GetItem de DynamoDB. Para obtener más información sobre las consultas en DynamoDB mediante PartiQL, consulte PartiQL select statements for DynamoDB en la Guía para desarrolladores de Amazon DynamoDB.

Para usar consultas de acceso directo con DynamoDB, utilice la siguiente sintaxis:

SELECT * FROM TABLE( system.query( query => 'query_string' ))

En el siguiente ejemplo de consulta de acceso directo de DynamoDB, se usa PartiQL para devolver una lista de dispositivos Fire TV Stick que tienen una propiedad DateWatched posterior al 24/12/22.

SELECT * FROM TABLE( system.query( query => 'SELECT Devices FROM WatchList WHERE Devices.FireStick.DateWatched[0] > '12/24/22'' ))

Resolución de problemas

Varios filtros en una columna de claves de clasificación

Mensaje de error: KeyConditionExpressions solo debe contener una condición por clave

Causa: este problema puede producirse en la versión 3 del motor de Athena en consultas que tienen un filtro de límite inferior y uno superior en una columna de claves de clasificación de DynamoDB. Como DynamoDB no admite más de una condición de filtro en una clave de clasificación, se produce un error cuando el conector intenta insertar una consulta que tiene ambas condiciones aplicadas.

Solución: actualice el conector a la versión 2023.11.1 o una versión posterior. Para obtener instrucciones sobre cómo actualizar un conector, consulte Actualización de un conector de origen de datos.

Costos

Los costos de uso del conector dependen de los recursos de AWS subyacentes que se utilicen. Dado que las consultas que utilizan exploraciones pueden consumir una gran cantidad de unidades de capacidad de lectura (RCU), considere cuidadosamente la información de precios de Amazon DynamoDB.

Recursos adicionales