マニュアル: DynamoDB

投稿日: 更新日:

DynamoDB ローカル

開発にはDynamoDB ローカルを使ってテスト可能。

DynamoDB ローカル (ダウンロード可能バージョン) のセットアップ - Amazon DynamoDB

  • S: 文字列
  • N: 数値
  • など

詳細はデータ型記述子に記載がある。

パーティションキー

プライマリキーと同じようなもの。 ただし、パーティションを分割するために使われるため、 複合プライマリキーを使うときは、ばらつきについて考慮したほうがいいです。

Rubyでの呼び出し方法

Module: Aws::DynamoDB — AWS SDK for Ruby V3

Number型はBigDecimal型に変換されるようです。

値の格納

以下のようにします。HashはMapとして格納されます。 取り出し時は文字列でアクセスします(シンボルにできないのかな?)。

require 'aws-sdk'

client = Aws::DynamoDB::Client.new

item = {Id: "1", Contents: {'key1' => 'value1'}}
client.put_item(table_name: 'test', item: item)

# クエリなどで取り出した時はこんな感じで参照
puts response.items[0]["Contents"]['key1']

スキャン

DynamoDB::Client#scan

全てのアイテムを走査します。

クエリ

DynamoDB::Client#query

以下のような感じです。

  • key_condition_expression: プライマリキーのwhere相当
  • :v1: プレースホルダ
  • expression_attribute_values: プレースホルダの値を指定するところ
  • filter_expression: フィルタ(プライマリキー以外のwhere相当)
require 'aws-sdk'

client = Aws::DynamoDB::Client.new

response = client.query(
    table_name: 'test',
    key_condition_expression: "Id = :v1",
    expression_attribute_values: {
        ":v1": "1"
    }
)

キーに予約語や日本語などを使う場合

キーに日本語を含める場合。追加の方は特に問題ないが、 フィルタの考慮が必要。

以下のように、 expression_attribute_values に入れる。

item = {Id: "1", Contents: {'key' => 'value1'}}
client.put_item(table_name: 'test', item: item)

response = client.query(
    table_name: 'test',
    key_condition_expression: "Id = :v1",
    filter_expression: "Contents.#key1 = :v2",
    expression_attribute_names: {
        "#key1": "key",
    },
    expression_attribute_values: {
        ":v1": "1",
        ":v2": "value1"
    },
    )