Nomi di attributi di espressione (alias) in DynamoDB
Un nome di attributo di espressione è un alias (o segnaposto) utilizzato in un’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. È consentito anche il carattere 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 AWS Command Line Interface (AWS CLI).
Argomenti
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, il seguente esempio di AWS CLI restituisce errore poiché 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'aspetto dell'esempio di AWS CLI è 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 Riferimento agli attributi degli elementi quando si utilizzano le espressioni in DynamoDB).
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
Si supponga di voler accedere all’attributo annidato ProductReviews.OneStar. In un nome di attributo di espressione, DynamoDB considera il punto (“.”) come carattere all’interno di un nome di attributo. Per fare riferimento all’attributo annidato, definisci 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.
Riferimento ripetuto ai nomi di attributo
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 #.