Hoja de trucos de consultas complejas de DynamoDB

Hoja de trucos de consultas complejas de DynamoDB

  • Orquestación
6 min de lectura Actualizado Oct 25, 2024

Puntos clave: La hoja de trucos de consultas complejas de DynamoDB proporciona técnicas avanzadas de consulta para Amazon DynamoDB, incluyendo expresiones de condición clave y filtro. Cubre consultas complejas como BETWEEN y begins_with, con ejemplos prácticos y orientación para cargar datos de muestra.

  • Incluye ejemplos para varios tipos de consultas y expresiones.
  • Proporciona orientación sobre cómo cargar datos de muestra y crear tablas para la práctica.

Este es un artículo sobre consultas complejas de Amazon DynamoDB y se basa en consultas básicas de DynamoDB.

Empezando

Recuerda las reglas básicas para consultar en DynamoDB:

  • La consulta incluye una condición clave y una expresión de filtro.
  • La condición de clave selecciona la clave de partición y, opcionalmente, una clave de ordenación.
  • La consulta de la clave de partición solo puede ser igual a (=). Así, si te quieres una clave primaria compuesta, entonces añade una clave de ordenación para que te pueda utiliza otros operadores que no sean la igualdad estricta.
  • Habiendo seleccionado un subconjunto de la base de datos con la condición de clave, te puede acotar esa opción escribiendo una expresión de filtro. Que pueda ejecutarse contra cualquier atributo.
  • Operadores lógicos (>, <, begins_with, etc.) son lo mismo para las condiciones clave y las expresiones de filtro, salvo que te no puede utiliza contiene como condición clave.

Uso de expresiones de filtro de DynamoDB para refinar los resultados de consultas

te puede aplicar una expresión de filtro de DynamoDB después de que termine una consulta, pero antes de que devuelva resultados. De ese modo, tu consulta consume la misma cantidad de capacidad de lectura, que están limitada a 1 MB de datos. Las expresiones de filtro de DynamoDB no contienen claves de partición ni atributos de ordenamiento—esos pertenecen a la expresión de condición clave. Sin embargo, la sintaxis están como una expresión de condición clave, usando los mismos comparadores, funciones y operadores lógicos.

¿Qué son las expresiones de condición clave de DynamoDB?

Expresiones de condición clave de DynamoDB.

utiliza una expresión de condición clave, una especificación de los elementos que se van a leer de una tabla o índice, para indicar criterios de búsqueda. te deberá incluir el nombre y el valor de la clave de partición como condición de igualdad. te también tienen la opción de usar una segunda condición de clave de ordenación. Sin embargo, te no puede utiliza atributos no relacionados con la clave. Al escribir expresiones clave de condiciones, te puede utiliza los siguientes operadores de comparación: a = b — verdadero si el atributo a están igual al valor b. a < b — verdadero si a están menor que b. a <= b — verdadero si un están menor o igual que b. a > b — verdadero si un están mayor que b. a >= b — verdadero si un están mayor o igual que b. a ENTRE b Y c — cierto si un están mayor o igual que b, y menor o igual que c. te también puede utiliza esta función: begins_with (a, substr)— verdadero si el valor del atributo a comienza con una subcadena particular.

Datos de muestra de carga

Para realizar estas complejas consultas de DynamoDB, necesitamos algunos datos con los que trabajar. Descarga estos datos de muestra de GitHub, que están datos de IMDB que he modificado ligeramente.

Crea una tabla

En este documento son usando DynamoDB en una máquina local. Así que especificamos la URL –endpoint http://localhost:8000. Crea la tabla del título así:

    aws dynamodb create-table 
--endpoint-url http://localhost:8000 
--table-name title 
--attribute-definitions AttributeName=tconst,AttributeType=S 
AttributeName=primaryTitle,AttributeType=S 
--key-schema AttributeName=tconst,KeyType=HASH 
AttributeName=primaryTitle,KeyType=RANGE 
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5

Fíjate que la clave primaria están la combinación de los atributos tconst (clave de partición) y primaryTitle (clave de ordenación). Para nuestros datos de ejemplo tenemos datos como los que se muestran a continuación. Todas las claves de partición son configuradas al mismo valor movie. Luego la clave primaria de película están la clave de ordenación.

    {
"tconst": {
"S": "movie"
},
"primaryTitle": {
"S": "Travel Daze"
},

Luego carga los datos así:

    aws dynamodb batch-write-item 
--endpoint-url http://localhost:8000 
--request-items file:////Users/walkerrowe/Documents/imdb/movies.json 
--return-consumed-capacity  TOTAL 
--return-item-collection-metrics  SIZE

Consultas avanzadas en DynamoDB

Consulta entre

A continuación están un ejemplo de consulta entre consultas de DynamoDB. Utilizamos el primer (espacio) y el último (ÿ) caracteres del conjunto de caracteres UTF-8 para seleccionar todos los títulos.

    aws dynamodb query  
--endpoint-url http://localhost:8000 
--table-name title    
--key-condition-expression "tconst = :tconst and primaryTitle BETWEEN :fromTitle AND :toTitle" 
--expression-attribute-values  '{ 
":tconst":{"S":"movie"},
":fromTitle":{"S":" "},
":toTitle":{"S":"ÿ"}
}'

Comienza con la consulta

A continuación se están un ejemplo de consulta de begins_with DynamoDB.

    aws dynamodb query  
--endpoint-url http://localhost:8000 
--table-name title    
--key-condition-expression "tconst = :tconst and begins_with(primaryTitle, :beginsWith)" 
--expression-attribute-values  '{ 
":tconst":{"S":"movie"},
":beginsWith":{"S":"A"} 
}'

Contiene la consulta

En el ejemplo de consulta de DynamoDB contiene a continuación, escribimos una expresión de filtro en lugar de una condición de clave. Esto están solo para mostrar cómo escribir una expresión de filtro de DynamoDB, en lugar de una condición de clave. Como mencionamos antes, los operadores son iguales, salvo te no pueden utiliza el operador contiene como condición clave.

    aws dynamodb query  
--endpoint-url http://localhost:8000 
--table-name title    
--key-condition-expression "tconst = :tconst" 
--filter-expression 'contains(originalTitle, :containsStr)' 
--expression-attribute-values  '{ 
":tconst":{"S":"movie"},
":containsStr":{"S":"Brooklyn"} 
}'

Consulta de atributos existe

Para saber si existe un atributo, utiliza la consulta de atributo existe de DynamoDB:

    aws dynamodb query  
--endpoint-url http://localhost:8000 
--table-name title    
--key-condition-expression "tconst = :tconst" 
--filter-expression 'attribute_exists(genres)' 
--expression-attribute-values  '{ 
":tconst":{"S":"movie"}
}'

Consulta de atributo no existe

Para verificar que un atributo no existe, utiliza la consulta de DynamoDB que no existe el atributo:

    aws dynamodb query  
--endpoint-url http://localhost:8000 
--table-name title    
--key-condition-expression "tconst = :tconst" 
--filter-expression 'attribute_not_exists(genres)' 
--expression-attribute-values  '{ 
":tconst":{"S":"movie"}
}'

IN consulta

Para probar un valor de pertenencia a un conjunto, te puede escribir una consulta IN o una condición IN. La sintaxis de los argumentos incluye una expresión numérica, de carácter o de fecha y hora, con un expr_ist de expresiones delimitadas por paréntesis y delimitadas por comas, una subconsulta de tabla y, por supuesto, una consulta IN o NOT IN.

    aws dynamodb query  
--endpoint-url http://localhost:8000 
--table-name title    
--key-condition-expression "tconst = :tconst" 
--filter-expression "genres IN (:inDrama, :inComedy)" 
--expression-attribute-values  '{ 
":tconst":{"S":"movie"},
":inDrama":{"S":"Drama"},
":inComedy":{"S":"Comedy"}
}'

Consulta de conjuntos de cadenas

Un conjunto de cadenas se refiere a atributos específicos asociados a elementos en un conjunto de datos. Si te quieres consultar elementos en una tabla de datos, por ejemplo, para encontrar a todas las personas en una tabla que son identificadas como "actores", te escribiría una consulta por conjunto de cadenas. Nuestra consulta contiene datos como estos:

    "actors": {
"SS": ["Anthony Quinn", "Marcel Marciano", "David Niven", "Peter Sellers"]
},

Así que, una condición de igualdad en ese elemento del conjunto de cadenas (SS) necesariamente contendría todas esas cadenas.

    aws dynamodb query  
--endpoint-url http://localhost:8000 
--table-name title    
--key-condition-expression "tconst = :tconst" 
--filter-expression "actors =  :actors" 
--expression-attribute-values  '{ 
":tconst":{"S":"movie"},
":actors":{"SS": ["Anthony Quinn", "Marcel Marciano", "David Niven", "Peter Sellers"]}
}'

Consulta booleana

Los datos booleanos se están almacenados así:

    "isComedy": {
"BOOL": false
}

Así que, te consultalo así:

    aws dynamodb query  
--endpoint-url http://localhost:8000 
--table-name title    
--key-condition-expression "tconst = :tconst" 
--filter-expression "isComedy = :isComedy" 
--expression-attribute-values  '{ 
":tconst":{"S":"movie"},
":isComedy":{"BOOL":true}
}'

Tipo de mapa de consulta

La consulta de mapa de DynamoDB está similar a la consulta anidada (Ve el siguiente punto).

    aws dynamodb query  
--endpoint-url http://localhost:8000 
--table-name title    
--key-condition-expression "tconst = :tconst" 
--filter-expression "aditionalInfo = :aditionalInfo" 
--expression-attribute-values  '{ 
":tconst":{"S":"movie"},
":aditionalInfo": {
"M": {"Location": {"S": "Bost"}, "Language": {"S": "FR"}}
}
}'

Consulta anidada

Un objeto anidado de DynamoDB está aquel que contiene un mapa. Tú te refieres al elemento usando la notación de puntos parent.child, por ejemplo para estos datos te escribirías aditionalInfo.Location.

    "aditionalInfo": {
"M": {"Location": {"S": "Bost"}, "Language": {"S": "FR"}}
},

Ubicación están una palabra reservada, así que tenemos que darle un alias usando:

    --expression-attribute-names '{"#loc": "Location"}'

Y aquí están el ejemplo de consulta anidada de DynamoDB:

    aws dynamodb query  
--endpoint-url http://localhost:8000 
--table-name title    
--key-condition-expression "tconst = :tconst" 
--filter-expression "aditionalInfo.#loc = :loc" 
--expression-attribute-names '{"#loc": "Location"}'     
--expression-attribute-values  '{ 
":tconst":{"S":"movie"},
":loc": {"S": "Bost"}
}'

Expresión de proyección

Cuando tú quieres leer algunos atributos frente a todos los de una tabla, tú puedes utilizar una expresión de proyección. Esta te permite especificar los elementos que tú quieres, según los atributos que tú especifiques por nombre. Tú puedes especificar varios atributos si tú separa los nombres de los atributos con una coma. Utiliza esta expresión de proyección para limitar los atributos que devuelve DynamoDB, ya que por defecto devuelve todos los atributos.

    aws dynamodb query  
--endpoint-url http://localhost:8000 
--table-name title    
--key-condition-expression "tconst = :tconst" 
--filter-expression "aditionalInfo = :aditionalInfo" 
--expression-attribute-values  '{ 
":tconst":{"S":"movie"},
":aditionalInfo": {
"M": {"Location": {"S": "Bost"}, "Language": {"S": "FR"}}
}
}' 
--projection-expression "originalTitle, runtimeMinutes"

Recursos adicionales

Para más información sobre este tema, explora el blog de Big Data y Machine Learning de BMC o consulta estos recursos:

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Orquestación

¿Te interesa saber más de BMC?

El Brief están nuestro correo mensual sobre el mainframe y la orquestación empresarial: investigación, historias de clientes, noticias de productos, eventos.

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Tú te has suscrito a The Brief

El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.