AWS Amplify (AppSync)で、時系列データをある日付の範囲でList取得する方法を記します。
はじめに
おはよう。@bioerrorlogです。
例えば以下のようなGraphQL schemaでデータモデルTimeStamp
が定義されてるとします。
type TimeStamp @model @key(fields: ["id", "createdAt"]){ id: ID! createdAt: AWSDateTime! }
このようなモデルをcreatedAt
に対して一定の日付範囲で取得するやり方を備忘録に残します。
Amplify & AppSyncで時系列データを日付範囲でList取得する
ケース1: 全List取得に対する日付範囲での絞りこみ
全List取得に対してある一定の日付範囲で絞りこむには、以下のようにfilter
を用いたQueryが使えます:
query MyQuery { listTimeStamps(filter: {createdAt: {between: ["2020-09-14T00:00:00.000Z", "2020-09-16T00:00:00.000Z"]}}) { items { id createdAt } nextToken } }
上記Queryに対しては、以下のようにcreatedAt
が絞られたListデータが取得できます:
{ "data": { "listTimeStamps": { "items": [ { "id": "0001", "createdAt": "2020-09-14T22:12:30.461Z" }, { "id": "0001", "createdAt": "2020-09-15T22:11:30.461Z" }, { "id": "0002", "createdAt": "2020-09-14T22:10:30.461Z" }, { "id": "0002", "createdAt": "2020-09-15T22:10:30.461Z" } ], "nextToken": null } } }
[関連記事] Amplify & GraphQLでのデータモデル設計事例集
ケース2: Partition keyを指定した上での日付範囲の絞りこみ
特定のPartition key (今回はid
) を指定した上で日付範囲を絞ったデータを取得するには、以下のようなQueryが使えます:
query MyQuery { listTimeStamps(id: "0001", createdAt: {between: ["2020-09-14T00:00:00.000Z", "2020-09-16T00:00:00.000Z"]}) { items { id createdAt } nextToken } }
上記Queryに対して、以下のようにid
とcreatedAt
が絞られたListデータが取得できます:
{ "data": { "listTimeStamps": { "items": [ { "id": "0001", "createdAt": "2020-09-14T22:12:30.461Z" }, { "id": "0001", "createdAt": "2020-09-15T22:11:30.461Z" } ], "nextToken": null } } }
[関連記事] Amplifyプロジェクトのgitリポジトリを公開するときの注意点
使用データ
今回使用した全データは以下です:
{ "data": { "listTimeStamps": { "items": [ { "id": "0001", "createdAt": "2020-09-13T22:12:30.461Z" }, { "id": "0001", "createdAt": "2020-09-14T22:12:30.461Z" }, { "id": "0001", "createdAt": "2020-09-15T22:11:30.461Z" }, { "id": "0001", "createdAt": "2020-09-16T11:11:11.111Z" }, { "id": "0002", "createdAt": "2020-09-13T21:12:30.461Z" }, { "id": "0002", "createdAt": "2020-09-14T22:10:30.461Z" }, { "id": "0002", "createdAt": "2020-09-15T22:10:30.461Z" }, { "id": "0002", "createdAt": "2020-09-16T10:11:11.111Z" } ], "nextToken": null } } }
おわりに
以上、Amplify & AppSyncで時系列データを日付範囲でList取得する方法を記しました。
背景として、日付範囲を絞って取得するにはElasticSearchを噛ませる必要があるのか?などと色々迷った経緯があります。 結果としてElasticSearchを利用しなくとも日付範囲を絞った取得が出来たので、今回のメモを書くに至りました。
ただ、処理コスト面やfilter
を使う場合と使わない場合の違いなど、まだ理解していない部分はたくさんあります。
引き続き分からないところは調べていく所存です。
参考
Data Modeling in Depth with GraphQL & AWS Amplify - 17 Data Access Patterns - DEV Community
Amplify Framework Documentation
elasticsearch - AppSync - query for all items created within a date range? - Stack Overflow