特定の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 local

表題の件について。使うようになって開発環境としてローカルにあると嬉しい。

■ 環境

  • Java 1.8.0_101
  • awscli 1.15.50
  • AWS DynamoDB
  • macOS High Sierra

■ DynamoDB local

DynamoDB ローカル(ダウンロード可能バージョン)のセットアップ
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.html

上記のページからダウンロードする。東京リージョンの”tar.gz“をダウンロードした。

適切なディレクトリでダウンロードした”dynamodb_local_latest.tar.gz“を展開する。

$ tar zxf dynamodb_local_latest.tar.gz

展開して出て来た”README.txt“を参照し、下記の通り実行する。

$ java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar
Initializing DynamoDB Local with the following configuration:
Port:    8000
InMemory:    false
DbPath:    null
SharedDb:    false
shouldDelayTransientStatuses:    false
CorsParams:    *

実行できたようなので、`awscli`で繋いでみる。接続については下記を参照した。

ローカルエンドポイントの設定
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.Endpoint.html

$ aws dynamodb list-tables --endpoint-url http://localhost:8000
{
    "TableNames": []
}
$

テーブルが空っぽで返ってきた。デフォルトの接続先として設定してある東京リージョンには既存のテーブルがいくつか存在しているはずなので、確かにローカルにアクセスされているようだ。これでいろいろ実験が捗るかもしれない。

以上。

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で全件取得