Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
L'API client améliorée DynamoDB utilise trois types d'expressions :
- Expression
-
La
Expression
classe est utilisée lorsque vous définissez des conditions et des filtres. QueryConditional
-
Ce type d'expression représente les conditions clés pour les opérations de requête.
UpdateExpression
-
Cette classe vous aide à écrire des expressions de mise à jour DynamoDB et est actuellement utilisée dans le framework d'extension lorsque vous mettez à jour un élément.
Anatomie de l'expression
Une expression est composée des éléments suivants :
-
Une expression sous forme de chaîne (obligatoire). La chaîne contient une expression logique DynamoDB avec des noms d'espaces réservés pour les noms d'attributs et les valeurs d'attribut.
-
Une carte des valeurs d'expression (généralement obligatoire).
-
Carte des noms d'expressions (facultatif).
Utilisez un générateur pour générer un Expression
objet qui prend la forme générale suivante.
Expression expression = Expression.builder() .expression(
<String>
) .expressionNames(<Map>
) .expressionValues(<Map>
) .build()
Expression
s nécessitent généralement une carte des valeurs d'expression. La carte fournit les valeurs des espaces réservés dans l'expression sous forme de chaîne. La clé de carte se compose du nom de l'espace réservé précédé de deux points (:
) et la valeur de la carte est une instance de AttributeValueAttributeValue
instance à partir d'un littéral. Vous pouvez également utiliser le AttributeValue.Builder
pour générer une AttributeValue
instance.
L'extrait suivant montre une carte avec deux entrées après la ligne de commentaire 2. La chaîne transmise à la expression()
méthode, affichée après la ligne de commentaire 1, contient les espaces réservés que DynamoDB résout avant d'effectuer l'opération. Cet extrait ne contient pas de carte des noms d'expressions, car le prix est un nom d'attribut autorisé.
public static void scanAsync(DynamoDbAsyncTable productCatalog) {
ScanEnhancedRequest request = ScanEnhancedRequest.builder()
.consistentRead(true)
.attributesToProject("id", "title", "authors", "price")
.filterExpression(Expression.builder()
// 1. :min_value and :max_value are placeholders for the values provided by the map
.expression("price >= :min_value AND price <= :max_value")
// 2. Two values are needed for the expression and each is supplied as a map entry.
.expressionValues(
Map.of( ":min_value", numberValue(8.00),
":max_value", numberValue(400_000.00)))
.build())
.build();
Si un nom d'attribut dans la table DynamoDB est un mot réservé, commence par un chiffre ou contient un espace, une carte des noms d'expressions est requise pour le. Expression
Par exemple, si le nom de l'attribut ne figurait 1price
pas price
dans l'exemple de code précédent, celui-ci devra être modifié comme indiqué dans l'exemple suivant.
ScanEnhancedRequest request = ScanEnhancedRequest.builder()
.filterExpression(Expression.builder()
.expression("#price >= :min_value AND #price <= :max_value")
.expressionNames( Map.of("#price", "1price") )
.expressionValues(
Map.of(":min_value", numberValue(8.00),
":max_value", numberValue(400_000.00)))
.build())
.build();
Un espace réservé pour le nom d'une expression commence par le signe dièse (#
). Une entrée pour la carte des noms d'expressions utilise l'espace réservé comme clé et le nom de l'attribut comme valeur. La carte est ajoutée au générateur d'expressions avec la expressionNames()
méthode. DynamoDB résout le nom de l'attribut avant d'effectuer l'opération.
Les valeurs d'expression ne sont pas obligatoires si une fonction est utilisée dans l'expression sous forme de chaîne. Voici un exemple de fonction d'expressionattribute_exists(
.<attribute_name>
)
L'exemple suivant crée un fichier Expression
qui utilise une fonction DynamoDB. Dans cet exemple, la chaîne d'expression n'utilise aucun espace réservé. Cette expression peut être utilisée lors d'une putItem
opération visant à vérifier si un élément existe déjà dans la base de données avec une valeur d'movie
attribut égale à celle de l'movie
attribut de l'objet de données.
Expression exp = Expression.builder().expression("attribute_not_exists (movie)").build();
Le guide du développeur DynamoDB contient des informations complètes sur les expressions de bas niveau utilisées avec DynamoDB.
Expressions de conditions et conditions
Lorsque vous utilisez les deleteItem()
méthodesputItem()
, etupdateItem()
, ainsi que lorsque vous utilisez des opérations de transaction et de traitement par lots, vous utilisez Expression
des objets pour spécifier les conditions que DynamoDB doit respecter pour poursuivre l'opération. Ces expressions sont appelées expressions de condition. Pour un exemple, consultez l'expression de condition utilisée dans la addDeleteItem()
méthode (après la ligne de commentaire 1) de l'exemple de transaction présenté dans ce guide.
Lorsque vous utilisez les query()
méthodes, une condition est exprimée sous la forme d'un QueryConditional
QueryConditional
classe dispose de plusieurs méthodes pratiques statiques qui vous aident à écrire les critères qui déterminent les éléments à lire dans DynamoDB.
Pour des exemplesQueryConditionals
, consultez le premier exemple de code de la Queryexemples de méthodes section de ce guide.
Expressions de filtrage
Les expressions de filtre sont utilisées dans les opérations de numérisation et de requête pour filtrer les éléments renvoyés.
Une expression de filtre est appliquée une fois que toutes les données ont été lues dans la base de données. Le coût de lecture est donc le même que s'il n'y avait pas de filtre. Le guide du développeur Amazon DynamoDB contient plus d'informations sur l'utilisation d'expressions de filtre pour les opérations de requête et de numérisation.
L'exemple suivant montre une expression de filtre ajoutée à une demande d'analyse. Les critères limitent les articles retournés aux articles dont le prix se situe entre 8,00 et 80,00€ inclus.
Map<String, AttributeValue> expressionValues = Map.of(
":min_value", numberValue(8.00),
":max_value", numberValue(80.00));
ScanEnhancedRequest request = ScanEnhancedRequest.builder()
.consistentRead(true)
// 1. the 'attributesToProject()' method allows you to specify which values you want returned.
.attributesToProject("id", "title", "authors", "price")
// 2. Filter expression limits the items returned that match the provided criteria.
.filterExpression(Expression.builder()
.expression("price >= :min_value AND price <= :max_value")
.expressionValues(expressionValues)
.build())
.build();
Expressions de mise à jour
La méthode du client updateItem()
DynamoDB Enhanced fournit une méthode standard pour mettre à jour des éléments dans DynamoDB. Toutefois, lorsque vous avez besoin de fonctionnalités supplémentaires, UpdateExpressionsUpdateExpressions
pour augmenter les valeurs sans lire au préalable les éléments de DynamoDB, ou pour ajouter des membres individuels à une liste. Les expressions de mise à jour sont actuellement disponibles dans les extensions personnalisées de la updateItem()
méthode.
Pour un exemple utilisant des expressions de mise à jour, consultez l'exemple d'extension personnalisée présenté dans ce guide.
De plus amples informations sur les expressions de mise à jour sont disponibles dans le manuel du développeur Amazon DynamoDB.