10.5 クエリと分析
VOLATILEテーブルのキー検索、一般条件検索、一時集計を実行可能な例で説明します。
サンプルデータの準備
VOLATILEテーブルは、他のテーブルタイプと同様にSELECT文で検索します。
次の例は、最後のクリーンアップ文まで順に実行できます。
CREATE VOLATILE TABLE ch10_query (
device_id VARCHAR(64) PRIMARY KEY,
status VARCHAR(16),
value DOUBLE,
updated_at DATETIME
);
INSERT INTO ch10_query VALUES ('DEV-01', 'RUNNING', 42.5, NOW);
INSERT INTO ch10_query VALUES ('DEV-02', 'STOPPED', 0, NOW);PRIMARY KEYによる検索
キー条件は、最新状態キャッシュの単一行検索に適しています。
SELECT device_id, status, value, updated_at
FROM ch10_query
WHERE device_id = 'DEV-01';一般条件による検索
PRIMARY KEY以外の列で繰り返し検索する場合は、セカンダリインデックスを検討します。
CREATE INDEX ch10_query_status_idx ON ch10_query(status);
SELECT device_id, value, updated_at
FROM ch10_query
WHERE status = 'RUNNING';インデックスもメモリを使用するため、実際の検索に必要な列だけに作成します。
一時集計の検索
短周期の集計結果を保存すると、ダッシュボードやアラーム判定の繰り返し計算を減らせます。
CREATE VOLATILE TABLE ch10_query_summary (
summary_key VARCHAR(96) PRIMARY KEY,
sensor_id VARCHAR(64),
bucket_time DATETIME,
avg_value DOUBLE,
max_value DOUBLE,
sample_cnt LONG
);
INSERT INTO ch10_query_summary
VALUES ('TEMP-01:2026-01-01T00:00', 'TEMP-01', TO_DATE('2026-01-01 00:00:00'),
21.5, 23.0, 60);
SELECT sensor_id, bucket_time, avg_value, max_value
FROM ch10_query_summary
WHERE sensor_id = 'TEMP-01'
ORDER BY bucket_time DESC
LIMIT 10;
DROP TABLE ch10_query_summary;
DROP TABLE ch10_query;集計結果を長期保持する必要がある場合は、LOGまたはTRANSACTIONテーブルに定期的にコピーします。
クエリの注意事項
- サーバー再起動後はデータが空になるため、初期ロードの実施を先に確認します。
- キー検索が中心なら
PRIMARY KEYを指定します。 - 範囲検索やソートで頻繁に使用する列には、セカンダリインデックスを検討します。
- 重要な元データは永続テーブルに保存し、VOLATILEはキャッシュとして使用します。
最終更新日