質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

1回答

7199閲覧

DynamoDBの条件検索で複数取得したい

kozica

総合スコア58

Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/01/28 07:24

編集2022/01/12 10:55

DynamoDBの条件検索で複数取得する方法がわかりません。
取得方法としては3つあり下記の認識です。
・get-item → 1件取得
・query → 条件検索
・scan → 全件検索
今回は複数取得のためqueryを使用したいと思ってます。
scanは負荷が高く使用は控えたいです。

テーブル構成は以下のようになってます。
table:Admin-User
column:userId(プライマリパーティションキー、"S"),createdAt("N" エポックミリ秒)
(ソートキー指定なし)

やりたい事:テーブルからcreatedAtの値を比較して、ある日時から以前のデータを取得したい
躓いてる事:queryで実現しようとしたが、パーディションキーを絶対にイコールで指定が必要のようで、そうするとこのテーブルはuserIdはプライマリキーでもあるため1件しか取得できず詰まっています。

userIdを指定せずにcreatedAtの比較のみで取得できないでしょうか?

どうかご教授お願いします。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

DynamoDBのQueryは必ずプライマリーキーを指定した上でレンジキーに対して何かしらの条件を指定することができます。

userIdを指定せずにcreatedAtの比較のみで取得できないでしょうか?

これを実現するためにはScanを使ってフィルターをかける方法が簡単なんじゃないかなと思います。
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Scan.html#Scan.FilterExpression
ただこの方法だと質問で書いていただいている通りQueryよりはキャパシティを消費するので、ある程度のキャパシティを設定しておく必要があります。

DynamoDBはこういった検索に弱いので、RDSなどを使うということも検討したほうが良いかもしれません。

投稿2020/01/28 07:40

編集2020/01/28 07:41
ryo-is

総合スコア152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kozica

2020/01/28 08:49

やはりそうなってきますか、、、 scanだとデータ量が多すぎてスループット値が足りずにエラーになるので、全テーブルのスループット値を上げる必要が出てきてしまうんですよね、、、 テーブルごとにどの程度上げる必要があるか調査するのもかなり大変になるので他の方法を模索してみます。
kozica

2020/01/30 09:41

--max-itemを使用するとスループット値上げずに取得できました。 ただ疑問なのが、80000件Itemがあるテーブルで"scan --max-item 5000"して "ScannedCount":4456というレスポンスが返ってきたのですが、これだとただのscanと変わらないのでは?と思った点です。 --max-itemがどういうものなのか知りたいのですが調べても見つからずなんか上手くいってしまってる状態です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問