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
Implemente el conector en su Cuenta de AWS mediante la consola de Athena o AWS Serverless Application Repository. Para obtener más información, consulte Cómo crear una conexión de origen de datos o Uso del AWS Serverless Application Repository para implementar un conector de origen de datos.
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
llamadaathena-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 esFalse
, 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
Inicie sesión en la AWS Management Console y abra la consola de AWS Glue en https://console.aws.amazon.com/glue/
. -
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.
-
En la lista de bases de datos, seleccione el enlace de la base de datos que desee editar.
-
Elija Editar.
-
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 seandefault
. La propiedaddynamo-db-flag
resulta útil para filtrar las bases de datos de cuentas con muchas bases de datos. -
Elija Update Database (Actualizar base de datos).
Para editar propiedades de tabla en la consola de AWS Glue
Inicie sesión en la AWS Management Console y abra la consola de AWS Glue en https://console.aws.amazon.com/glue/
. -
En el panel de navegación, amplíe Catálogo de datos y, a continuación, seleccione Tablas.
-
En la página Tablas, en la lista de tablas, seleccione el nombre vinculado de la tabla que desea editar.
-
Seleccione Actions (Acciones), Edit queue (Editar cola).
-
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 introducirclassification
ydynamodb
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
odatetime
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
odatetime
que se utilizará al analizar datos de una columna del tipo de datosdate
otimestamp
de AWS Glue. Si no se especifica esta propiedad, el conector intenta inferirun formato ISO-8601. Si el conector no puede inferir el formato de date
odatetime
o analizar la cadena sin procesar, el valor se omite del resultado.El formato del valor
datetimeFormatMapping
debe sercol1=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
odatetime
sin zona horaria y desea utilizar la columna de la cláusulaWHERE
, defina la propiedaddatetimeFormatMapping
de la columna.
-
-
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.
-
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
-
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
yScan
.
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
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)
Recursos adicionales
-
Para obtener una introducción sobre cómo usar el conector DynamoDB de Amazon Athena, consulte Acceder, consultar y unirse a las tablas de Amazon DynamoDB con Athena en la guía Patrones de orientación prescriptiva de AWS.
-
Para consultar un artículo sobre cómo utilizar el conector de DynamoDB de Athena para consultar datos en DynamoDB con SQL y visualizar información en Amazon QuickSight, consulte la AWSpublicación en el blog de Big Data Visualize información de Amazon DynamoDB en Amazon QuickSight mediante el conector de DynamoDB de Amazon Athena y AWS Glue
. -
Para consultar un artículo sobre el uso del conector de DynamoDB de Amazon Athena con Amazon DynamoDB, Athena y Amazon QuickSight para crear un sencillo panel de gobernanza, consulte la publicación en el blog de Big Data de AWS Consultar tablas de Amazon DynamoDB entre cuentas con consultas federadas de Amazon Athena
. Para obtener más información acerca de este conector, consulte el sitio correspondiente
en GitHub.com.