DynamoDB の式の属性名 - Amazon DynamoDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

DynamoDB の式の属性名

式の属性名は、実際の属性名の代わりとして Amazon DynamoDB 式で使用するプレースホルダーです。式の属性名はシャープ記号 (#) で始まり、1 つ以上の英数字とアンダースコア (_) 文字が続きます。

このセクションでは、式の属性名を使用する必要があるいくつかの状況について説明します。

注記

このセクションの例では AWS Command Line Interface (AWS CLI) を使用しています。プログラミング言語別のコード例については、「DynamoDB および AWS SDK の使用開始」を参照してください。

予約語

DynamoDB 予約語と競合する属性名を含む式を書く必要が生じることもあります。予約語の一覧については、「DynamoDB の予約語」を参照してください。

たとえば、 AWS CLI COMMENT次の例ではが予約語であるため失敗します。

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

この問題に対処するには、Comment を、#c などの式の属性名で置き換えることができます。#(シャープ記号)は必須であり、これが属性名のプレースホルダーであることを示します。 AWS CLI この例は次のようになります。

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

属性名が数値で始まるか、スペースまたは予約語を含む場合、式の属性名を使用して式のその属性名を置き換える必要があります

特殊文字を含む属性名

式では、ドット (".") はドキュメントパスの区切り文字として解釈されます。ただし、DynamoDB では属性名の一部としてドット文字や、ハイフン (「-」) などの特殊文字を使用することもできます。これは、あいまいな意味を持つことがあります。例として、ProductCatalog 項目から Safety.Warning 属性を取得するとします (式を使用する時の項目属性の指定 を参照してください)。

プロジェクション式を使用して、Safety.Warning にアクセスするとします。

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

DynamoDB は、予想される文字列 ("Always wear a helmet") ではなく空の結果を返します。これは、DynamoDB が式のドットをドキュメントパスの区切り文字として解釈するためです。この場合、#sw の置換として式の属性名 (Safety.Warning など) を定義する必要があります。その後、次のプロジェクション式を使用します。

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

次に、DynamoDB が正しい結果を返します。

注記

属性名にドット (「.」) またはハイフン (「-」) が含まれている場合は、式の属性名を使用して、式でその属性名を置き換える必要があります

入れ子の属性

ここでは、次のプロジェクション式を使用して、入れ子の属性 ProductReviews.OneStar にアクセスするとします。

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

結果は、1 つ星の製品レビューすべてを含みます (正常です)。

ただし、代わりに式属性名を使用することにした場合はどうなるでしょうか。たとえば、#pr1star の置換として ProductReviews.OneStar を定義した場合はどうなるでしょうか。

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

DynamoDB は予想される 1 つ星の評価のマップの代わりに空の結果を返します。これは、DynamoDB が式属性名のドットを属性名内の文字として解釈するためです。DynamoDB が式の属性名 #pr1star を評価すると、ProductReviews.OneStar がスカラー属性を参照していると判断します。これは意図したものではありません。

ドキュメントパス内の要素ごとに式の属性名を定義するのが正しい方法です。

  • #pr — ProductReviews

  • #1star — OneStar

その後、プロジェクション式として #pr.#1star を使用します。

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

次に、DynamoDB が正しい結果を返します。

属性名の繰り返し

式の属性名は、同じ属性名を繰り返し参照する必要がある場合に役立ちます。たとえば、ProductCatalog 項目からいくつかの評価を取得する次の式を考えてみます。

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

これをより簡潔にするために、ProductReviews を、#pr などの式の属性名で置き換えることができます。変更された式は次のようになります。

  • #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"}'

式属性名を定義した場合、式全体で一貫して使用する必要があります。さらに、# 記号を省略することはできません。