コンテンツにスキップ

9.5 クエリと分析

LOOKUPテーブルのキー検索、一般条件検索、TAGデータとのJOINを実行可能な例で説明します。

サンプルデータの準備

次のLOOKUPテーブルとTAGテーブルを準備します。

CREATE LOOKUP TABLE ch9_query_master (
    sensor_id VARCHAR(32) PRIMARY KEY,
    site      VARCHAR(32),
    unit      VARCHAR(16),
    status    VARCHAR(16)
);

INSERT INTO ch9_query_master VALUES ('TEMP-01', 'SEOUL', 'C', 'ACTIVE');
INSERT INTO ch9_query_master VALUES ('TEMP-02', 'BUSAN', 'C', 'INACTIVE');

CREATE TAG TABLE ch9_query_data (
    name  VARCHAR(32) PRIMARY KEY,
    time  DATETIME BASETIME,
    value DOUBLE SUMMARIZED
);

INSERT INTO ch9_query_data VALUES ('TEMP-01', TO_DATE('2026-01-01 00:00:00'), 23.5);
INSERT INTO ch9_query_data VALUES ('TEMP-02', TO_DATE('2026-01-01 00:00:00'), 19.0);

PRIMARY KEYによる検索

単一行の検索にはPRIMARY KEY条件を使用します。

SELECT sensor_id, site, unit, status
FROM ch9_query_master
WHERE sensor_id = 'TEMP-01';

一般条件による検索

LOOKUPテーブルは、一般列の条件でも検索できます。頻繁に使用する条件列にはインデックスを追加します。

SELECT sensor_id, site, unit
FROM ch9_query_master
WHERE site = 'SEOUL'
  AND status = 'ACTIVE';

頻繁に使用する一般条件列には、インデックスを追加できます。 インデックスの設計と作成方法は、インデックスを参照してください。

TAG・LOGテーブルとのJOIN

LOOKUPテーブルは、TAGまたはLOGテーブルの元データに説明情報を付加する用途でよく使用します。

SELECT d.name, m.site, m.unit, d.time, d.value
FROM ch9_query_data d
JOIN ch9_query_master m ON d.name = m.sensor_id
WHERE m.status = 'ACTIVE';

分析パターン

LOOKUPテーブルは元データを保存するより、分析の基準を提供します。次のパターンに適しています。

パターン説明
コード変換状態コード、アラームコード、機器タイプをラベルに変換
基準値との比較センサー値をしきい値テーブルとJOINし、超過を判定
グループ基準の提供場所、部門、ラインなどの集計基準を提供
最新設定の反映運用中に変更される設定値を検索時点で反映

同じ方法で、しきい値のLOOKUPテーブルとTAGの元データをJOINし、基準値を超えたか判定できます。 時間範囲が広いTAGまたはLOGテーブルでは、JOIN前に時間条件で検索範囲を制限します。

DROP TABLE ch9_query_data CASCADE;
DROP TABLE ch9_query_master;

クエリ性能の基準

  • 単一行検索とJOINの基準列には、PRIMARY KEYまたはインデックス列を使用します。
  • 条件に頻繁に使う一般列には、別のインデックスを検討します。
  • 大量の元データとJOINする場合は、元テーブルの時間範囲を先に絞ります。
  • LOOKUPにはマスターデータ、長期の元データはTAGまたはLOGに保存します。
最終更新日