メニュー
Amazon DynamoDB
開発者ガイド (API Version 2012-08-10)

命名ルールおよびデータ型

このセクションでは、DynamoDB の命名規則と、DynamoDB がサポートするさまざまなデータ型について説明します。データタイプに適用される制限があります。詳細については、「データ型」を参照してください。

名前付けルール

DynamoDB のテーブル、属性、および他のオブジェクトには名前が必要です。名前は有意義で簡潔である必要があります。たとえば、ProductsBooksAuthors などの名前は見ればすぐわかります。

DynamoDB の命名規則は次のとおりです。

  • すべての名前は UTF-8 を使用してエンコードする必要があり、大文字と小文字が区別されます。

  • テーブル名とインデックス名の長さは 3~255 文字で、次の文字のみを含めることができます。

    • a-z

    • A-Z

    • 0-9

    • _ (下線)

    • - (ダッシュ)

    • . (ドット)

  • 属性名の長さは 1~255 文字である必要があります。

予約語と特殊文字

DynamoDB には予約語と特殊文字のリストもあります。DynamoDB の予約語の一覧については、「DynamoDB の予約語」を参照してください。DynamoDB では、# (ハッシュ) および: (コロン) に特別な意味があります。

DynamoDB では、命名目的でこれらの予約語と特殊文字を使用することができますが、お勧めしません。これは、式でこれらの名前を使用するたびに、プレースホルダー変数を定義する必要があるためです。詳細については、「式の属性名」を参照してください。

データ型

DynamoDB では、テーブル内の属性に対してさまざまなデータ型がサポートされています。データ型は次のように分類できます。

  • スカラー型 – スカラー型は 1 つの値を表すことができます。スカラー型は、数値、文字列、バイナリ、ブール、および null です。

  • ドキュメント型 – ドキュメント型は、JSON ドキュメントで見られるもののように、入れ子の属性を持つ複雑な構造を表すことができます。ドキュメント型は、リストとマップです。

  • セット型 – セット型は複数のスカラー値を表すことができます。セット型は、文字セット、数値セット、およびバイナリセットです。

テーブルまたは セカンダリインデックス を作成するときは、各プライマリキー属性 (パーティションキーとソートキー) の名前とデータ型を指定する必要があります。さらに、各プライマリキー属性は、文字列、数値、またはバイナリとして定義する必要があります。

DynamoDB は NoSQL データベースであり、スキーマレスです。つまり、テーブルを作成する際は、プライマリキー属性を除き、属性やデータ型を定義する必要はありません。これに対して、リレーショナルデータベースでは、テーブルの作成時に各列の名前とデータ型を定義する必要があります。

ここでは、各データ型についてJSON 形式の例を挙げて説明します。

スカラー型

スカラー型は、数値、文字列、バイナリ、ブール、および null です。

文字列

文字列は、UTF-8 バイナリエンコードの Unicode です。文字列の長さは、0 より大きい必要があり、DynamoDB 項目の最大サイズ 400 KB によって制限されます。

プライマリキー属性を文字列型属性として定義する場合、以下の制約がさらに適用されます。

  • シンプルなプライマリキーの場合、最初の属性値 (パーティションキー) の最大長は 2048 バイト です。

  • 複合プライマリキーの場合、2 番目の属性値 (ソートキー) の最大長は 1024 バイト です。

DynamoDB は、基礎となる UTF-8 文字列エンコードのバイトを使用して文字列を照合し、比較します。たとえば、「a」 (0x61) は「A」 (0x41) より大きく、「¿」 (0xC2BF) は 「z」 (0x7A) より大きいです。

文字列データ型を使用して、日付またはタイムスタンプを表すことができます。これを行う 1 つの方法は、これらの例に示すように、ISO 8601 文字列を使用することです。

  • 2016-02-15

  • 2015-12-21T17:42:34Z

  • 20150311T122706Z

詳細については、http://en.wikipedia.org/wiki/ISO_8601 を参照してください。

数値

数値は、正、負、または 0 とすることができます。数値は最大 38 桁の精度を持つことができます。これを超えると例外が発生します。

  • 正の範囲: 1E-130~9.9999999999999999999999999999999999999E+125

  • 負の範囲: -9.9999999999999999999999999999999999999E+125~-1E-130

DynamoDB では、数値は可変長で表されます。先頭と末尾の 0 は切り捨てられます。

すべての数値はネットワーク経由で文字列として DynamoDB に送信され、言語やライブラリ間の互換性が最大になります。ただし、DynamoDB は算術演算では数値を数値型属性として扱います。

注記

数値の精度が重要な場合は、数値型から変換する文字列を使用して、DynamoDB に数値を渡します。

数値データ型を使用して、日付またはタイムスタンプを表すことができます。これを行う 1 つの方法は、エポック時間 (1970 年 1 月 1 日の 00:00:00 UTC 以降の秒数) を使用することです。たとえば、エポック時間 1437136300 は、2015 年 7 月 17 日の 12:31:40 UTC を表します。

詳細については、http://en.wikipedia.org/wiki/Unix_time を参照してください。

バイナリ

バイナリ型の属性には、圧縮テキスト、暗号化データ、イメージなど、任意のバイナリデータが保存されます。DynamoDB は、バイナリ値を比較するたびに、各バイナリデータを符号なしとして扱います。

バイナリ属性の長さは 0 より大きい必要があり、DynamoDB 項目の最大サイズ 400 KB によって制限されます。

プライマリキー属性をバイナリ型属性として定義する場合、以下の制約がさらに適用されます。

  • シンプルなプライマリキーの場合、最初の属性値 (パーティションキー) の最大長は 2048 バイト です。

  • 複合プライマリキーの場合、2 番目の属性値 (ソートキー) の最大長は 1024 バイト です。

アプリケーションは、DynamoDB に送信する前に、base64 エンコード形式のバイナリ値をエンコードする必要があります。DynamoDB は、これらの値を受信すると、データを符号なしバイト配列にデコードし、それをバイナリ属性の長さとして使用します。

次はバイナリ属性の例であり、Base64 でエンコードされたテキストを使用しています。

Copy
dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk

Boolean

ブール型の属性には、true または false が格納されます。

Null

Null は不明または未定義の状態の属性を表します。

ドキュメント型

ドキュメント型は、リストとマップです。これらのデータ型は、相互に入れ子にして、最大 32 レベルの深さまで複雑なデータ構造を表すことができます。

値を含む項目が DynamoDB のサイズ制限 (400 KB) 内である限り、リストまたはマップの値の最大数の制限はありません。

属性値は空の文字列または空のセット (文字列セット、数値セット、またはバイナリセット) にすることはできません。ただし、空のリストおよびマップは許可されます。詳細については、「属性」を参照してください。

リスト

リスト型の属性には、順序付きの値のコレクションを保存できます。リストは角括弧で囲まれます: [ ... ]

リストは JSON 配列に似ています。リスト要素に保存できるデータ型に制限はなく、リスト要素の要素が同じ型である必要はありません。

次の例は、2 つの文字列と数が含まれるリストを示します。

Copy
FavoriteThings: ["Cookies", "Coffee", 3.14159]

注記

DynamoDB では、要素が深い入れ子になっていても、リスト内の個々の要素を操作できます。詳細については、「DynamoDB での式の使用」を参照してください。

マップ

マップ型属性は、順序なしの名前と値のペアのコレクションを保存できます。マップは中括弧で囲まれます: { ... }

マップは、JSON オブジェクトと同様です。マップの要素に保存できるデータ型に制限はなく、マップの要素が同じ型である必要はありません。

マップは DynamoDB で JSON ドキュメントを保存するのに最適です。以下の例は、文字列、数値、別のマップを含む入れ子のリストを要素とするマップを示しています。

Copy
{ Day: "Monday", UnreadEmails: 42, ItemsOnMyDesk: [ "Coffee Cup", "Telephone", { Pens: { Quantity : 3}, Pencils: { Quantity : 2}, Erasers: { Quantity : 1} } ] }

注記

DynamoDB では、要素が深い入れ子になっていても、マップ内の個々の要素を操作できます。詳細については、「DynamoDB での式の使用」を参照してください。

セット

DynamoDB は、数値、文字列、またはバイナリ値のセットを表す型をサポートします。セット内のすべての要素は、同じ型である必要があります。たとえば、数値セット型の属性は数値のみを含むことができ、文字列セットは文字列のみを含むことができるなどです。

値を含む項目が DynamoDB のサイズ制限 (400 KB) 内である限り、セットの値の最大数の制限はありません。

設定内の各値は一意である必要があります。設定内の値の順序は保持されません。したがって、アプリケーションは、設定内の要素の特定の順序に依存することはできません。最後に、DynamoDB では空白のセットはサポートされていません。

次の例では、文字列セット、設定された numbet とバイナリ設定を示します:

Copy
["Black", "Green" ,"Red"] [42.2, -19, 7.5, 3.14] ["U3Vubnk=", "UmFpbnk=", "U25vd3k="]

このページの内容: