LoginSignup
5
3

More than 5 years have passed since last update.

AWS CLIでCUIからSQLちっくにDynamoDBを参照する冴えた?方法

Posted at

株式会社オズビジョン@terra_yuccoです。

現在、バックエンド寄りのなんでもエンジニアのため、基本的にputtyを利用してデータを集計したり、お問い合わせのデータを参照したりしています。
MySQLのデータであればSQLを使えばいいのですが、DynamoDBは参照が面倒。SQL感覚で(条件のjsonを外部ファイルとかにしないで)データをひっぱりたい。
わかってしまえば楽なのですが、検索した範囲ではあまりわかりやすいものがひっかからなかったので、メモしておきます。

結論

aws dynamodb query \
  --table-name udata \
  --projection-expression "uid,name" \
  --key-conditions '{"uid":{"ComparisonOperator":"EQ", "AttributeValueList":[{"N":"1234"}]}}'
  • udata テーブルから
  • uid = 1234 のレコードの
  • uid と name を取得する。

取得結果

$ aws dynamodb query \
> --table-name udata \
> --projection-expression "uid,name" \
> --key-conditions '{"uid":{"ComparisonOperator":"EQ", "AttributeValueList":[{"N":"1234"}]}}'
{
    "Count": 1,
    "Items": [
        {
            "name": {
                "S": "hoge"
            },
            "uid": {
                "N": "1234"
            }
        }
    ],
    "ScannedCount": 1,
    "ConsumedCapacity": null
}

テーブル構造

以下のようになっており、今回参照したいattributeはstring型のnameです。

$ aws dynamodb describe-table --table-name udata
{
    "Table": {
        "AttributeDefinitions": [
            {
                "AttributeName": "uid",
                "AttributeType": "N"
            },
            {
                "AttributeName": "rday",
                "AttributeType": "S"
            }
        ],
        "KeySchema": [
            {
                "KeyType": "HASH",
                "AttributeName": "uid"
            },
            {
                "KeyType": "RANGE",
                "AttributeName": "rday"
            }
        ],
        # 関係ない項目については省略
    }
}

嵌った場所

とにかく --key-conditions の書き方に尽きます。
公式リファレンスちゃんと読めばもう少し早かったかもしれません。

終わりに

何度もCUIからDynamoDBを参照しようと調べて実現しては忘れてを繰り返しているので、私的な備忘録代わりに。
bashのライトなスクリプトでリスト食わせてDynamoDB見るような時にも役に立ちます。

それではまた次の投稿でお会いしましょう。
おしまい。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3