特定のAttributionのみ取得

DynamoDBにおいて表題を行いたい。

■ 環境

  • AWS DynamoDB
  • awscli
  • macOS High Sierra

■ scan

`scan`で全件取得をしたいのだが、欲しい属性は1つだけである。その場合には下記のようにして取得することができた。

$ aws dynamodb scan --table-name example --projection-expression "attribute1"

複数の属性を取得したい場合には”,”で繋げれば良い。

$ aws dynamodb scan --table-name example --projection-expression "attribute1,attribute2"

以上。

■ 関連

DynamoDBで全件取得

DynamoDBで全件取得

表題の通り。

■ 環境

  • AWS DynamoDB
  • awscli
  • macOS High Sierra

■ scan

`scan`サブコマンドで全件取得することができる。

$ aws dynamodb scan --table-name example
  :
    ],
    "Count": 1200,
    "ScannedCount": 1200,
    "ConsumedCapacity": null
}
$

件数が多いともちろん全件取得すると出力も大きくなるので必要に絞ると良い。

$ aws dynamodb scan --table-name example --max-items 100
  :
    ],
    "Count": 1200,
    "ScannedCount": 1200,
    "ConsumedCapacity": null,
    "NextToken": "eyJFeGNsdXNpdmVTdGFydEtleSI6IG51bGwsICJib3RvX3RydW5jYXRlX2Ftb3VudCI6IDEwMXXX"
}
$

–max-items“を指定してみたところ、指定した100件が得られ、さらに”NextToken“が表示されていた。これを使えばpaging的に取得できるようだ。下記で試してみた。

$ aws dynamodb scan --table-name example --max-items 100 --starting-token 'eyJFeGNsdXNpdmVTdGFydEtleSI6IG51bGwsICJib3RvX3RydW5jYXRlX2Ftb3VudCI6IDEwMXXX'
  :
    ],
    "Count": 0,
    "ScannedCount": 0,
    "ConsumedCapacity": null,
    "NextToken": "eyJFeGNsdXNpdmVTdGFydEtleSI6IG51bGwsICJib3RvX3RydW5jYXRlX2Ftb3VudCI6IDIwMXXX"
}
$

内容を確認して行くと、ちょうど後続の100件が取得できたようである。”NextToken“の値が非常に似通っているが、よくよく見てみると異なっていることがわかる。

以上。

■ 関連

tableの件数を知りたい@DynamoDB

特定のAttributionのみ取得

tableの件数を知りたい@DynamoDB(2)

表題の件。昨日とは別手段。

■ 環境

  • DynamoDB
  • awscli 1.15.40
  • macOS High Sierra

■ DynamoDB

前回のエントリでは下記で取得した。

$ aws dynamodb scan --table-name example --select COUNT

しかし、`scan`サブコマンドであるからデータが少ない今だから即数値が取得できるのかな?他に手段はないのかな?と疑問に思い継続調査。

下記手段でも取得できることを確認した。

$ aws dynamodb describe-table --table-name example
{
    "Table": {
  :
        "TableName": "example",
  :
        "TableSizeBytes": 49594,
        "ItemCount": 600,
  :
    }
}
$

`describe-table`サブコマンドで取得することができていた。`scan`であると全データを一時的にでも検索しているのだろうか?となるとデータ量が増えた時に応答時間が遅くなるかもしれない?料金も掛かる?といったことが発生するのかと疑問に思うことがいくつか。

とりあえず今後は`describe-table`サブコマンドで取得することにする。

以上。

■ 関連

tableの件数を知りたい@DynamoDB

tableの件数を知りたい@DynamoDB

表題の通り。DynamoDBをまだまともに触ったことがないので勉強中。

■ 環境

  • DynamoDB
  • awscli 1.15.40
  • macOS High Sierra

■ DynamoDB

tableに毎日100件ずつ新規にデータを投入している。正しく入っているか件数をとりあえず把握したいのだがどうやったら良いのかな?と思ったのがきっかけである。

ManagementConsoleからテーブルを選択し、”概要“や”容量“の項目を確認するも目当ての数値は得られず。項目から全スキャンしてページングで先に進んで行けば最終的に欲しい数値は得られるもののこんなやり方はナンセンスだ。というわけで`aws`コマンドで取得できないか確認。

$ aws dynamodb help

サブコマンドを確認し、とりあえず何かしら情報が得られそうなものをリストアップ。

  • list-tables
  • scan

`list-tables`サブコマンドで何かしらテーブルの詳細を表記するオプションがあるかと思ったが特になし。

`scan`サブコマンドのヘルプを見ると、下記のような記載が。

--select (string)
   The  attributes  to  be returned in the result. You can retrieve all
   item attributes, specific item attributes,  the  count  of  matching
   items,  or  in  the  case of an index, some or all of the attributes
   projected into the index.
  :
  o COUNT - Returns the number of  matching  items,  rather  than  the
    matching items themselves.
  :

求めていたもののような感じがする。早速実行してみる。

$ aws dynamodb scan --table-name example --select COUNT
{
    "Count": 500,
    "ScannedCount": 500,
    "ConsumedCapacity": null
}
$

欲しい情報が得られた。”500“件がまさに想定していたものと同値である。

以上。

■ 関連

tableの件数を知りたい@DynamoDB(2)

DynamoDBで全件取得

DynamoDB.batchWriteItem()

AWS Lambdaを使っていて、node.jsからDynamoDBの値を更新しようとしたところちょっとハマったのでメモ。

■ 環境

  • Node.js 8.10
  • AWS Lambda
  • AWS DynamoDB

■ batchWriteItem()

マニュアルを見ていて、`batchWriteItem()`を知った。複数件を操作できるので便利そうだ、と思い早速やってみた。試しに10件更新はうまくいったので100件更新をしようとしたところエラー…。何か間違えたかな?とソースを確認するも問題はなさそう。

マニュアルを再度確認すると下記の記載があった。

* There are more than 25 requests in the batch.

これに引っかかっていたようである。

25件毎の実行に修正したところ問題なく操作ができた。

以上。