Expresiones, operadores y funciones de condición y filtro en DynamoDB - Amazon DynamoDB

Expresiones, operadores y funciones de condición y filtro en DynamoDB

Para manipular datos en una tabla de DynamoDB, se usan las operaciones PutItem, UpdateItem y DeleteItem. Para estas operaciones de manipulación de datos, puede especificar una expresión de condición con el fin de determinar qué elementos deben modificarse. Si la expresión de condición se evalúa en true, entonces la operación se realiza correctamente. De lo contrario, la operación no se llevará a cabo correctamente.

En esta sección se describen las funciones y las palabras clave integradas para escribir expresiones de filtro y condición en Amazon DynamoDB. Para obtener más información sobre las funciones y la programación con DynamoDB, consulte Programación con DynamoDB y los SDK de AWS y la Referencia de la API de DynamoDB.

Sintaxis de las expresiones de filtro y condición

En el siguiente resumen de sintaxis, el componente operand puede ser uno de los siguientes:

  • Un nombre de atributo de nivel superior, como por ejemplo Id, Title, Description o ProductCategory

  • Una ruta de documento que hace referencia a un atributo anidado

condition-expression ::= operand comparator operand | operand BETWEEN operand AND operand | operand IN ( operand (',' operand (, ...) )) | function | condition AND condition | condition OR condition | NOT condition | ( condition ) comparator ::= = | <> | < | <= | > | >= function ::= attribute_exists (path) | attribute_not_exists (path) | attribute_type (path, type) | begins_with (path, substr) | contains (path, operand) | size (path)

Realización de comparaciones

Utilice estos comparadores para comparar un operando con un solo valor:

  • a = b: es true si a es igual que b.

  • a <> b: es true si a es distinto de b.

  • a < b: es true si a es menor que b.

  • a <= b: es true si a es menor o igual que b.

  • a > b: es true si a es mayor que b.

  • a >= b: es true si a es mayor o igual que b.

Use las palabras clave BETWEEN e IN para comparar un operando con un rango o una lista de valores:

  • a BETWEEN b AND c: es true si a es mayor o igual que b y menor o igual que c.

  • a IN (b, c, d) : es true si a es igual a cualquiera de los valores de la lista; por ejemplo, en este caso, a b, c o d. La lista puede contener hasta 100 valores separadas por comas.

Funciones

Utilice las siguientes funciones para determinar si un atributo existe en un elemento o evaluar el valor de un atributo. Los nombres de estas funciones distinguen entre mayúsculas y minúsculas. En el caso de los atributos anidados, debe proporcionar su ruta de documento completa.

Función Descripción

attribute_exists (path)

Es true si el elemento contiene el atributo especificado por path.

Ejemplo: Comprobación de si un elemento de la tabla Product tiene una imagen de vista lateral.

  • attribute_exists (#Pictures.#SideView)

attribute_not_exists (path)

Es true si el atributo especificado en path no está presente en el elemento.

Ejemplo: Comprobación de si un elemento tiene el atributo Manufacturer.

  • attribute_not_exists (Manufacturer)

attribute_type (path, type)

Es true si el atributo de la ruta especificada es de un tipo de datos determinado. El parámetro type debe ser uno de los siguientes:

  • S: String

  • SS: conjunto de cadenas

  • N: Number

  • NS: conjunto de números

  • B: Binary

  • BS: conjunto de binarios

  • BOOL: Boolean

  • NULL: Null

  • L: List

  • M: Map

Debe utilizar un valor de atributo de expresión para el parámetro type.

Ejemplo: Comprobación de si el atributo QuantityOnHand es del tipo List. En este ejemplo, :v_sub es un marcador de posición para la L.

  • attribute_type (ProductReviews.FiveStar, :v_sub)

Debe utilizar un valor de atributo de expresión para el parámetro type.

begins_with (path, substr)

Es true si el atributo especificado por path comienza por una subcadena determinada.

Ejemplo: Comprobación de si los primeros caracteres de la URL de la imagen de vista frontal son http://.

  • begins_with (Pictures.FrontView, :v_sub)

El valor de atributo de expresión :v_sub es un marcador de posición para http://.

contains (path, operand)

Es true si el atributo especificado por path es uno de los siguientes:

  • Un valor de tipo String que contiene una determinada subcadena.

  • Un valor de tipo Set que contiene un componente determinado perteneciente al conjunto.

  • Un valor de tipo List que contiene un componente determinado perteneciente a la lista.

Si el atributo especificado por path es un String, el operand debe ser un String. Si el atributo especificado por path es un Set, el operand debe ser el tipo de elemento del conjunto.

La ruta y el operando deben ser distintos. Es decir, contains (a, a) devuelve un error.

Ejemplo: Comprobación de si el atributo Brand contiene la subcadena Company.

  • contains (Brand, :v_sub)

El valor de atributo de expresión :v_sub es un marcador de posición para Company.

Ejemplo: Comprobación de si el producto está disponible en color rojo.

  • contains (Color, :v_sub)

El valor de atributo de expresión :v_sub es un marcador de posición para Red.

size (path)

Devuelve un número que representa el tamaño de un atributo. A continuación se muestran los tipos de datos válidos para usarlos con size.

Si el atributo es de tipo String, size devuelve la longitud de la cadena.

Ejemplo: Comprobación de si la cadena Brand es menor o igual que 20 caracteres. El valor de atributo de expresión :v_sub es un marcador de posición para 20.

  • size (Brand) <= :v_sub

Si el atributo es de tipo Binary, size devuelve el número de bytes del valor del atributo.

Ejemplo: supongamos que el elemento ProductCatalog tiene un atributo binario denominado VideoClip que contiene vídeo breve sobre el uso del producto. En la siguiente expresión se comprueba si VideoClip supera los 64 000 bytes. El valor de atributo de expresión :v_sub es un marcador de posición para 64000.

  • size(VideoClip) > :v_sub

Si el tipo de datos del atributo es Set, size devuelve el número de componentes del conjunto.

Ejemplo: Comprobación de si el producto está disponible en más de un color. El valor de atributo de expresión :v_sub es un marcador de posición para 1.

  • size (Color) < :v_sub

Si el atributo es de tipo List o Map, size devuelve el número de componentes secundarios.

Ejemplo: Comprobación de si el número de opiniones OneStar ha superado un umbral determinado. El valor de atributo de expresión :v_sub es un marcador de posición para 3.

  • size(ProductReviews.OneStar) > :v_sub

Evaluaciones lógicas

Utilice las palabras clave AND, OR y NOT para llevar a cabo evaluaciones lógicas. En la lista siguiente, a y b representan las condiciones que se van a evaluar.

  • a AND b: es true si a y b son true.

  • a OR b: es true si a o b (o ambas) son true.

  • NOT a: es true si a es false. False si a es true.

A continuación se muestra un ejemplo de código de AND en una operación.

dynamodb-local (*)> select * from exprtest where a > 3 and a < 5;

Paréntesis

Los paréntesis se utilizan para cambiar la preferencia de una evaluación lógica. Por ejemplo, supongamos que las condiciones a y b son true y que la condición c es false. La siguiente expresión se evalúa en true:

  • a OR b AND c

Sin embargo, si se incluye una condición entre paréntesis, esta se evalúa antes. Por ejemplo, lo siguiente se evalúa en false:

  • (a OR b) AND c

nota

En una expresión se pueden utilizar paréntesis anidados. En este caso, se evalúan primero los más internos.

A continuación se muestra un ejemplo de código con paréntesis en una evaluación lógica.

dynamodb-local (*)> select * from exprtest where attribute_type(b, string) or ( a = 5 and c = “coffee”);

Precedencia en las condiciones

DynamoDB evalúa las condiciones de izquierda a derecha aplicando las siguientes normas de prioridad:

  • = <> < <= > >=

  • IN

  • BETWEEN

  • attribute_exists attribute_not_exists begins_with contains

  • Paréntesis

  • NOT

  • AND

  • OR