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.

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

Parámetros

Use las variables de entorno de Lambda de esta sección para configurar el conector de DynamoDB.

  • 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 (Cargos por transferencia de datos en AWS para arquitecturas con servidor y sin servidor) 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 AWS Management Console y abra la consola de AWS Glue en https://console.aws.amazon.com/glue/.

  2. Seleccione la pestaña Databases (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 Edit (Editar).

  5. En la página Update a database (Actualizar una base de datos), en Location (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.

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

  2. Seleccione la pestaña Tables (Tablas).

    En la pestaña Tables (Tablas), puede editar una tabla existente o seleccionar Add table (Agregar tabla) para crear una nueva. Para obtener información sobre cómo agregar tablas manualmente o con un rastreador, consulte Trabajo con tablas en la consola de AWS Glue en la Guía para desarrolladores de AWS Glue.

  3. En la lista de tablas, elija el vínculo de la tabla que desea editar.

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

  5. En la página Edit table (Editar tabla), en la sección Table properties (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).

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

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 siguientes: DescribeTable, ListSchemas, ListTables, Query y Scan.

Desempeño

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 X valores distintos da como resultado X llamadas de consulta 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.

La función de Lambda inserta predicados para reducir los datos analizados por la consulta. Sin embargo, a veces, la selección de un subconjunto de columnas provoca un tiempo de ejecución de consultas más prolongado. Las cláusulas LIMIT reducen la cantidad de datos analizados; sin embargo, si no proporciona un predicado, es probable que las consultas SELECT con una cláusula LIMIT analicen al menos 16 MB de datos.

El conector de DynamoDB analiza más datos para conjuntos de datos más grandes que para conjuntos más pequeños, independientemente de la cláusula LIMIT aplicada. Por ejemplo, la consulta SELECT * LIMIT 10000 analiza más datos para un conjunto de datos subyacente más grande que para uno más pequeño.

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.

Véase también

Para obtener más información acerca de este conector, consulte el sitio correspondiente en GitHub.com.