Nomes (aliases) de atributo de expressão no DynamoDB
Um nome de atributo de expressão é um alias (ou espaço reservado) usado em uma expressão do Amazon DynamoDB como alternativa ao nome de atributo real. Um nome de atributo de expressão deve começar com um sinal de cerquilha (#
) seguido de um ou mais caracteres alfanuméricos. O sublinhado (_
) também é permitido.
Esta seção descreve várias situações em que você precisa usar nomes de atributos de expressão.
nota
Os exemplos desta seção usam a AWS Command Line Interface (AWS CLI).
Tópicos
Palavras reservadas
Algumas vezes, pode ser necessário escrever uma expressão que contém um nome de atributo que está em conflito com uma palavra reservada do DynamoDB. (Para obter uma lista completa de palavras reservadas, consulte Palavras reservadas no DynamoDB.)
Por exemplo, haveria falha no seguinte exemplo da AWS CLI porque COMMENT
é uma palavra reservada.
aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "Comment"
Para resolver esse problema, substitua Comment
por um nome de atributo de expressão, como #c
. A #
(cerquilha) é obrigatória e indica que esse é um espaço reservado para um nome de atributo. O exemplo da AWS CLI agora deve ter a seguinte aparência.
aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#c" \ --expression-attribute-names '{"#c":"Comment"}'
nota
Se o nome de um atributo começar com um número, contiver um espaço ou incluir uma palavra reservada, você deverá usar um nome de atributo de expressão para substituir esse nome de atributo na expressão.
Nomes de atributos com caracteres especiais
Em uma expressão, um ponto (“.”) é interpretado como um caractere de separação em um caminho de documento. No entanto, o DynamoDB também permite que você use um ponto e outros caracteres especiais, como um hífen (“-”) como parte do nome de um atributo. Isso pode ser ambíguo em alguns casos. Para ilustrar, vamos supor que você queira recuperar o atributo Safety.Warning
de um item do ProductCatalog
(consulte Referir-se a atributos de item ao usar expressões no DynamoDB).
Suponha que você queira acessar Safety.Warning
usando uma expressão de projeção.
aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "Safety.Warning"
O DynamoDB retorna um resultado vazio, em vez da string esperada (“Always
wear a helmet
”). Isso ocorre porque o DynamoDB interpreta um ponto em uma expressão como um separador de caminho de documento. Neste caso, defina um nome de atributo de expressão (por exemplo, #sw
) como um substituto para Safety.Warning
. Você poderia usar a seguinte expressão de projeção.
aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#sw" \ --expression-attribute-names '{"#sw":"Safety.Warning"}'
Em seguida, o DynamoDB deverá retornar o resultado correto.
nota
Se o nome de um atributo contiver um ponto (“.”) ou um hífen (“-”), você deverá usar um nome de atributo de expressão para substituir o nome desse atributo na expressão.
Atributos aninhados
Suponha que você queira acessar o atributo ProductReviews.OneStar
aninhado. No nome de atributo de expressão, o DynamoDB trata o ponto (“.”) como um caractere no nome de um atributo. Para consultar o atributo aninhado, defina um nome de atributo de expressão para cada elemento no caminho do documento:
-
#pr — ProductReviews
-
#1star — OneStar
Você poderia usar #pr.#1star
para a expressão de projeção.
aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#pr.#1star" \ --expression-attribute-names '{"#pr":"ProductReviews", "#1star":"OneStar"}'
Em seguida, o DynamoDB deverá retornar o resultado correto.
Consultar nomes de atributo de forma repetida
Os nomes de atributo de expressão são úteis quando você precisa consultar o mesmo nome de atributo repetidamente. Por exemplo, considere a seguinte expressão para recuperar algumas das revisões de um item do ProductCatalog
.
aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "ProductReviews.FiveStar, ProductReviews.ThreeStar, ProductReviews.OneStar"
Para tornar isso mais conciso, você pode substituir ProductReviews
por um nome de atributo de expressão, como #pr
. A expressão revisada agora teria a seguinte aparência.
-
#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"}'
Caso defina um nome de atributo de expressão, você deverá usá-lo de forma consistente na expressão inteira. Além disso, não é possível omitir o símbolo #
.