Nomi di attributi di espressione in DynamoDB - Amazon DynamoDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Nomi di attributi di espressione in DynamoDB

Un nome di attributo di espressione è un segnaposto utilizzato in una espressione Amazon DynamoDB in alternativa a un nome di attributo effettivo. Un nome di attributo di espressione deve iniziare con un simbolo di cancelletto (#) ed essere seguito da uno o più caratteri alfanumerici e dal trattino basso (_).

In questa sezione vengono descritte diverse situazioni in cui è necessario utilizzare i nomi di attributi di espressione.

Nota

Gli esempi in questa sezione utilizzano il AWS Command Line Interface (AWS CLI). Per ottenere esempi di codice specifici della lingua, consulta Guida introduttiva a DynamoDB e agli SDK AWS.

Parole riservate

A volte potrebbe essere necessario scrivere un'espressione contenente un nome di attributo in conflitto con una parola riservata di DynamoDB. Per un elenco completo delle parole riservate, consulta Parole riservate in DynamoDB.)

Ad esempio, l' AWS CLI esempio seguente non riuscirà perché COMMENT è una parola riservata.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "Comment"

Come soluzione alternativa, puoi sostituire Comment con un nome di attributo di espressione come #c. Il simbolo # (cancelletto) è obbligatorio e indica che si tratta di un segnaposto per un nome di attributo. L' AWS CLI esempio sarebbe ora simile al seguente.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#c" \ --expression-attribute-names '{"#c":"Comment"}'
Nota

Se un nome di attributo inizia con un numero, contiene uno spazio o una parola riservata, è necessario utilizzare un nome di attributo di espressione per sostituire il nome di tale attributo nell'espressione.

Nomi di attributi contenenti caratteri speciali

Un punto (".") in un'espressione viene interpretato come carattere separatore in un percorso di un documento. Tuttavia, DynamoDB consente anche di utilizzare un punto e altri caratteri speciali, ad esempio, un trattino ("-") come parte di un nome di attributo. In alcuni casi questo può portare ad ambiguità. A titolo illustrativo, supponi di voler recuperare l'attributo Safety.Warning da un elemento ProductCatalog (consulta Specificare gli attributi degli elementi quando si utilizzano le espressioni).

Supponi di voler accedere a Safety.Warning utilizzando un'espressione di proiezione.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "Safety.Warning"

DynamoDB restituisce un risultato vuoto, anziché la stringa prevista ("Always wear a helmet"). Ciò accade poiché DynamoDB interpreta un punto in un'espressione come separatore del percorso di un documento. In questo caso, occorre definire un nome di attributo di espressione (ad esempio #sw) come sostituto di Safety.Warning. Puoi quindi utilizzare l'espressione di proiezione seguente.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#sw" \ --expression-attribute-names '{"#sw":"Safety.Warning"}'

DynamoDB restituirebbe quindi il risultato corretto.

Nota

Se il nome di un attributo contiene un punto (".") o un trattino ("-"), è necessario utilizzare un nome di attributo di espressione per sostituire il nome di tale attributo nell'espressione.

Attributi nidificati

Supponi di voler accedere all'attributo nidificato ProductReviews.OneStar utilizzando la seguente espressione di proiezione.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "ProductReviews.OneStar"

Il risultato potrebbe contenere tutte le recensioni sui prodotti a una stella, come sarebbe previsto.

E se decidessi di utilizzare un nome di attributo di espressione? Ad esempio, cosa succederebbe se dovessi definire #pr1star come sostituto per ProductReviews.OneStar?

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#pr1star" \ --expression-attribute-names '{"#pr1star":"ProductReviews.OneStar"}'

DynamoDB restituisce un risultato vuoto anziché la mappa prevista delle recensioni sui prodotti a una stella. Ciò accade poiché DynamoDB interpreta un punto in un nome di attributo di espressione come carattere all'interno di un nome di attributo. Quando DynamoDB valuta il nome dell'attributo dell'espressione #pr1star, determina che ProductReviews.OneStar si riferisce a un attributo scalare, che non è ciò che era previsto.

L'approccio corretto sarebbe definire un nome di attributo di espressione per ogni elemento nel percorso del documento:

  • #pr — ProductReviews

  • #1star — OneStar

Puoi quindi utilizzare #pr.#1star per l'espressione di proiezione.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#pr.#1star" \ --expression-attribute-names '{"#pr":"ProductReviews", "#1star":"OneStar"}'

DynamoDB restituirebbe quindi il risultato corretto.

Ripetizione dei nomi di attributi

I nomi di attributo di espressione sono utili quando si vuole fare riferimento ripetutamente allo stesso nome di attributo. Ad esempio, considera la seguente espressione per recuperare alcune valutazioni da un elemento di ProductCatalog.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "ProductReviews.FiveStar, ProductReviews.ThreeStar, ProductReviews.OneStar"

Per renderlo più conciso, puoi sostituire ProductReviews con un nome di attributo di espressione come #pr. L'aspetto dell'espressione rivista è ora simile al seguente.

  • #pr.FiveStar, #pr.ThreeStar, #pr.OneStar

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#pr.FiveStar, #pr.ThreeStar, #pr.OneStar" \ --expression-attribute-names '{"#pr":"ProductReviews"}'

Se definisci un nome di attributo di espressione, è necessario usarlo in maniera uniforme nell'intera espressione. Inoltre, non puoi omettere il simbolo #.