Expressions de condition et de filtre, opérateurs et fonctions dans DynamoDB - Amazon DynamoDB

Expressions de condition et de filtre, opérateurs et fonctions dans DynamoDB

Manipulez les données d’une table DynamoDB à l’aide des opérations PutItem, UpdateItem et DeleteItem. Pour ces opérations de manipulation de données, vous pouvez préciser une expression de condition afin de déterminer les éléments à modifier. Si l’expression de condition a la valeur true, l’opération aboutit. Sinon, l’opération échoue.

Cette section traite des fonctions et mots clés intégrés pour l’écriture des expressions de filtre et de condition dans Amazon DynamoDB. Pour en savoir plus sur les fonctions et la programmation avec DynamoDB, consultez Programmation avec DynamoDB et les kits AWS SDK et le guide de référence de l’API DynamoDB.

Syntaxe des expressions de filtre et de condition

Dans le résumé de syntaxe suivant, un opérande peut avoir l’une des valeurs suivantes :

  • Nom d’attribut de niveau supérieur, par exemple Id, Title, Description ou ProductCategory

  • Chemin d’accès au document référençant un attribut imbriqué

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)

Comparaisons

Comparez un opérande à une valeur unique à l’aide de ces comparateurs :

  • a = b – True si a est égal à b.

  • a <> b – True si a est différent de b.

  • a < b – True si a est inférieur à b.

  • a <= b – True si a est inférieur ou égal à b.

  • a > b – True si a est supérieur à b.

  • a >= b – True si a est supérieur ou égal à b.

Comparez un opérande à une plage de valeurs ou une liste énumérée de valeurs à l’aide des mots clés BETWEEN et IN :

  • a BETWEEN b AND c – True si a est supérieur ou égal à b, et inférieur ou égal à c.

  • a IN (b, c, d) – True si a est égal à toute valeur figurant dans la liste, par exemple b, c ou d. La liste peut comporter jusqu’à 100 valeurs séparées par des virgules.

Fonctions

Déterminez si un attribut existe dans un élément ou évaluez la valeur d’un attribut à l’aide des fonctions suivantes. Ces noms de fonction respectent la casse. Pour un attribut imbriqué, vous devez fournir le chemin d’accès au document complet.

Fonction Description

attribute_exists (path)

True si l’élément comporte l’attribut spécifié par path.

Exemple : Vérifier si un élément de la table Product a une image de vue de côté.

  • attribute_exists (#Pictures.#SideView)

attribute_not_exists (path)

True si l’attribut spécifié par path n’existe pas dans l’élément.

Exemple : Vérifier si un élément possède un attribut Manufacturer.

  • attribute_not_exists (Manufacturer)

attribute_type (path, type)

True si l’attribut à l’emplacement spécifié est d’un type de données particulier. Le paramètre type doit avoir l’une des valeurs suivantes :

  • S – String (chaîne)

  • SS – String set (ensemble de chaînes)

  • N – Number (nombre)

  • NS – Number set (ensemble de nombres)

  • B – Binary (binaire)

  • BS – Binary set (ensemble de binaires)

  • BOOL – Boolean (booléen)

  • NULL – Null

  • L – List (liste)

  • M – Map (mappage)

Vous devez utiliser une valeur d’attribut d’expression pour le paramètre type.

Exemple : Vérifier si l’attribut QuantityOnHand est de type List (liste). Dans cet exemple, :v_sub est un espace réservé pour la chaîne L.

  • attribute_type (ProductReviews.FiveStar, :v_sub)

Vous devez utiliser une valeur d’attribut d’expression pour le paramètre type.

begins_with (path, substr)

True si l’attribut spécifié par path commence par une sous-chaîne particulière.

Exemple : Vérifier si les tout premiers caractères de l’URL de l’image de vue avant sont http://.

  • begins_with (Pictures.FrontView, :v_sub)

La valeur d’attribut d’expression :v_sub est un espace réservé pour http://.

contains (path, operand)

True si l’attribut spécifié par path est l’un des attributs suivants :

  • Une String qui comporte une sous-chaîne particulière

  • Un Set qui comporte un élément particulier au sein de l’ensemble

  • Une List qui comporte un élément particulier

Si l’attribut spécifié par path est de type String, operand doit être de type String. Si l’attribut spécifié par path est de type Set, l’operand doit être le type d’élément de l’ensemble.

Le chemin d’accès et l’opérande doivent être distincts. Autrement dit, contains (a, a) renvoie une erreur.

Exemple : Vérifier si l’attribut Brand comporte la sous-chaîne Company.

  • contains (Brand, :v_sub)

La valeur d’attribut d’expression :v_sub est un espace réservé pour Company.

Exemple : Vérifier si le produit est disponible en rouge.

  • contains (Color, :v_sub)

La valeur d’attribut d’expression :v_sub est un espace réservé pour Red.

size (path)

Renvoie un nombre qui représente la taille d’un attribut. Voici les types de données valides à utiliser avec size.

Si l’attribut est de type String, size renvoie la longueur de la chaîne.

Exemple : Vérifier si la longueur de la chaîne Brand est inférieure ou égale à 20 caractères. La valeur d’attribut d’expression :v_sub est un espace réservé pour 20.

  • size (Brand) <= :v_sub

Si l’attribut est de type Binary, size renvoie le nombre d’octets de la valeur d’attribut.

Exemple : supposez que l’élément ProductCatalog comporte un binary attribute nommé VideoClip qui comporte une courte vidéo du produit utilisé. L’expression suivante vérifie si VideoClip dépasse 64 000 octets. La valeur d’attribut d’expression :v_sub est un espace réservé pour 64000.

  • size(VideoClip) > :v_sub

Si l’attribut est un type de données Set, size renvoie le nombre d’éléments dans l’ensemble.

Exemple : Vérifier si le produit est disponible dans plusieurs couleurs. La valeur d’attribut d’expression :v_sub est un espace réservé pour 1.

  • size (Color) < :v_sub

Si l’attribut est de type List ou Map, size renvoie le nombre d’éléments enfants.

Exemple : Vérifier si le nombre de révisions OneStar a dépassé un certain seuil. La valeur d’attribut d’expression :v_sub est un espace réservé pour 3.

  • size(ProductReviews.OneStar) > :v_sub

Évaluations logiques

Effectuez les évaluations logiques à l’aide des mots clés AND, OR et NOT. Dans la liste suivante, a et b représentent les conditions à évaluer.

  • a AND b – True si a et b ont tous deux la valeur true.

  • a OR b – True si a ou b (ou les deux) a (ou ont) la valeur true.

  • NOT a – True si a a la valeur false. False si a a la valeur true.

Voici un exemple de code avec AND dans une opération.

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

Parenthèses

Modifiez la priorité d’une évaluation logique à l’aide de parenthèses. Par exemple, supposons que les conditions a et b sont true et que la condition c a la valeur false. L’expression suivante a la valeur true :

  • a OR b AND c

Toutefois, si vous placez une condition entre parenthèses, elle est évaluée en premier. Par exemple, l’expression suivante a la valeur false :

  • (a OR b) AND c

Note

Vous pouvez imbriquer des parenthèses dans une expression. Les parenthèses les plus intérieures sont évaluées en premier.

Voici un exemple de code avec des parenthèses dans une évaluation logique.

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

Priorité des conditions

DynamoDB évalue les conditions de gauche à droite à l’aide des règles de priorité suivantes :

  • = <> < <= > >=

  • IN

  • BETWEEN

  • attribute_exists attribute_not_exists begins_with contains

  • Parenthèses

  • NOT

  • AND

  • OR