目的
- AWS Timestreamを触ってみる(本当にさわりだけでも)
お断り
- 間違っている部分あったらごめんなさい。
AWS Timesteramとは
- AWSマネージドな時系列DBのサービス
- 一日一兆をこえるデータ投入をさばけるとか
- マネージドなだけあってAWSのいろんなサービスと連携しやすいらしい
- 動画で紹介されていたのは
AWS IoT Core
を介してデータをTimestreamに入れる方法(クリックだけで可能)
- 動画で紹介されていたのは
- SQLのような記述でデータのクエリが記載可能
まずは動画を確認して概要を確認
ざっくり使い方解説
公式の説明動画
基礎知識
用語
Database
- その名の通りデータベース。
Table
- データベース内のテーブル。SQLでいうところのテーブルと同義
Record
- データ1つ1つのこと
Dimension
- タグのようなイメージか(各データレコードにつけることができる)
- レコード登録するときに好き勝手つけられるんだろうか?
Measures
- 時系列のデータそのもの(数値、bool等)
サンプルデータの準備
- サンプルデータが用意されているので、それを使ってみます
sample databaseを選んで作成
sample dataを選択する
IoT
とDevOps
両方選びました
テーブルを見てみる
作られてます
簡単なクエリを実行してみる
クエリエディタみたいなのが標準装備。
ここで好きにクエリを実行できるみたいですね
試しに以下のクエリを実行(sampledb
は作ったDBの名前)
select count(*) as count from "sampledb".IoT
結果は
count 1600
適当にデータを取る
select * from "sampledb".IoT limit 5
結果
時系列なので、1分ごとの平均とかとってみる
select bin(time, 1m) as binned_time, avg(measure_value::double) as avg from "sampledb".IoT group by bin(time, 1m) order by binned_time desc limit 5
binned_time avg 2020-10-24 05:55:00.000000000 39.0 2020-10-24 05:54:00.000000000 110.0 2020-10-24 05:53:00.000000000 25.0 2020-10-24 05:52:00.000000000 159.5 2020-10-24 05:51:00.000000000 213.0
うーん・・あってるんだろうか。
検証
select time, measure_value::double from "sampledb".IoT where time between '2020-10-24 05:53:00.000000000' and '2020-10-24 05:56:00.000000000' order by time desc
この結果(53分〜56分くらいを出力してみた)
05:55:00.000000000
代のデータ
2020-10-24 05:55:00.000000000 39.0
計算された平均値は39.0
実際の生データ(平均取る前のデータ)
2020-10-24 05:55:26.124000000 42.0 2020-10-24 05:55:25.890000000 36.0
平均39.0と計算できます。あってそう
2020-10-24 05:54:00.000000000
代のデータ
2020-10-24 05:54:00.000000000 110.0
54分代の平均は110.0
実際の生データ(平均取る前のデータ)
2020-10-24 05:54:58.994000000 322.0 2020-10-24 05:54:57.316000000 - 2020-10-24 05:54:48.847000000 1.0 2020-10-24 05:54:30.635000000 7.0 2020-10-24 05:54:16.049000000 -
デーが5件あって、2件はデータナシ(0ではない)ということで、データ3件の平均を求めると110
になってぴったり
まとめ
感想
- これは便利そう。何よりマネージドなサービスはやっぱいい