Docker | Dockerコンテナを作成しよう(TimescaleDB)

Docker | Dockerコンテナを作成しよう(TimescaleDB)

みなさん、こんにちは!

今回はIoTデータの蓄積で注目されている「TimescaleDB」のコンテナを取り扱ってみます。

Dockerコンテナ生成までの流れ

以下に手順を整理します。

1)Docker HubからDocker ImageをPullする

DockerHubからDocker ImageをPullします。

→ TimescaleDBのページはこちら

公式ドキュメントでもやり方が公開されています。

docker pull timescale/timescaledb-ha:pg14-latest

2)Docker Imageを起動する

コンテナをまだ作成していない場合は、以下のコマンドです。

※ 今回はルートパスワードを「passw0rd 」としています。

docker run -d --name miseruIT_timescaledb -p 5432:5432 -e POSTGRES_PASSWORD=passw0rd timescale/timescaledb-ha:pg14-latest

3)接続確認

デフォルトユーザは「postgres」です。

試しに使ってみる

以下のサンプルデータを取り込んで、いろいろと触ってみます。

気象庁:羽田(東京都) 2023年1月1日(10分ごとの値)

1)時間と温度データの作成

以下のようにデータを作成しました。

2)取り込み用のテーブル作成

以下のクエリを実行し、データ取り込み用のテーブルを作成します。

create table temp( time timestamp,temp float )

3)CSVデータの取り込み

以下の記事に基づいてCSVデータを取り込みます。(A5SQLを用いてインポートするのが楽です)

4)集計クエリを実行してみる

データが準備できましたので、集計を行ってみます。

① 1時間毎に気温データをまるめる

現在10分毎のデータとなっているので、1時間毎にまるめてみます。

time_bucket関数を用いることで、簡単にまるめ処理が行えます。

SELECT
    time_bucket ('1 hour', time)  AS bucket,
    avg(temp) as avg_temp
FROM temp
Group by bucket
ORDER BY bucket ASC ; 

2時間毎でもまるめることができます。

SELECT
    time_bucket ('2 hour', time)  AS bucket,
    avg(temp) as avg_temp
FROM temp
Group by bucket
ORDER BY bucket ASC ; 

ちなみに、PostgreSQLには date_trunc関数がありますが、こちらは「1時間」や「1日」など固定時間のみ丸めが可能で、2時間とかは設定できません。

TimescaleDBを用いる場合は「time_bucket」を用いることを覚えておくと良いですね。

②値を補完する

例えば、8時~9時30分のデータをDeleteしてみます。

delete from temp where time between '2023/01/01 08:00' and '2023/01/01 09:30'

この状態で1時間ごとにデータをまるめると、以下のように8時のデータが無くなってしまいます。

間が抜けてしまったデータを、NULLで補完するには、「time_bucket_gapfill」関数を用いて以下のように記載します。

SELECT
    time_bucket_gapfill('1 hour', time)  AS bucket,
    avg(temp) as avg_temp
FROM temp

WHERE time >= '2023-01-01 00:00:00' AND time < '2023-01-01 23:59:59'
Group by bucket
ORDER BY bucket ASC ; 

今回は以上です。

ではまた!

本日のAmazonおすすめ_Top10

2024-04-19 05:07:29時点