LindormTSDB では、標準 SQL 構文、PromQL、および時系列データベース(TSDB)と互換性のある API と SDK を使用してデータをクエリできます。このトピックでは、LindormTSDB で時空間データをクエリする方法について説明します。
標準 SQL 構文を使用してデータをクエリする
LindormTSDB では、標準 SQL 構文を使用してデータをクエリすることをお勧めします。 LindormTSDB は、時系列データ用に SQL 構文を最適化し、ほとんどのシナリオでクエリのパフォーマンスを向上させます。このようにして、より少ないリソース使用量で LindormTSDB サーバーの安定性を向上させることができます。
機能
ダウンサンプリングクエリ、集計クエリ、最新値クエリなど、時系列データに固有の機能がサポートされています。詳細については、「ダウンサンプリングクエリ」および「最新値のクエリ」をご参照ください。
時系列データ用のさまざまな関数演算子が提供されています。詳細については、「一般的な時系列関数」をご参照ください。
Apache Calcite に基づいて、さまざまな SQL 計算および分析機能が提供されています。詳細については、「Calcite 公式ドキュメント」をご参照ください。
LindormTSDB の標準 SQL 構文で提供される機能の詳細については、「SQL 構文」をご参照ください。
SQL クエリでサポートされているアクセス方法
Java Native SDK、Java Database Connectivity(JDBC)ドライバー、および HTTP SQL API 操作を使用して SQL クエリを実行できます。次の表に、3 つの方法を示します。
アクセス方法 | シナリオ | 説明 | 参照 |
Java Native SDK | Java アプリケーション開発 | Java Native SDK はストリーミングデータ転送をサポートし、API 呼び出し用のセキュアなスレッドを提供します。したがって、基盤となる接続を管理する必要はありません。 | |
JDBC ドライバー | フレームワークを必要とする Java アプリケーション開発 | アプリケーションでコードを開発するか、Druid を使用して接続プールを管理する必要があります。 JDBC は、Object-Relational Mapping(ORM)フレームワークと組み合わせて使用する必要があります。 | |
HTTP SQL API | Java 以外のプログラミング言語を使用したアプリケーション開発 | LindormTSDB は、HTTP ベースの API 操作を提供して SQL クエリを実行します。結果はストリーミングモードで返すことができます。 |
例
LindormTSDB は、SAMPLE BY 句を使用して、クエリで時系列機能を実装します。SAMPLE BY 句は、単一の時系列でダウンサンプリングを実行するために使用されます。GROUP BY 句は、複数の時系列を集計するために使用されます。SAMPLE BY と GROUP BY を同じ句で一緒に使用することはできません。ただし、異なるサブクエリで個別に使用することはできます。次の例は、SAMPLE BY 句と GROUP BY 句の使用方法を示しています。
SAMPLE BYを使用して単一の時系列でダウンサンプリングクエリを実行し、ダウンサンプリング間隔を 8 時間として指定します。SELECT device_id,region,time,count(humidity) AS count_humidity FROM sensor WHERE device_id='F07A1260' sample by 8h; // デバイスIDが 'F07A1260' のセンサーデータから、8時間ごとに湿度データの件数を取得SAMPLE BYを使用して複数の時系列でダウンサンプリングクエリを実行し、次にGROUP BYを使用して、デバイス ID に基づいてダウンサンプリングされたデータを集計します。SELECT device_id, max(avg_humidity) AS max_humidity FROM (SELECT device_id,region,time,avg(humidity) AS avg_humidity FROM sensor sample by 8h) group by device_id; // 8時間ごとに平均湿度を計算し、デバイスIDごとに最大の平均湿度を取得
TSDB と互換性のある API と SDK を使用してデータをクエリする
LindormTSDB は、TSDB が提供する機能の 90% と互換性があります。したがって、アプリケーションで TSDB を使用してデータを格納している場合、アプリケーションを変更することなく、LindormTSDB でサポートされている SQL 構文を直接使用してデータをクエリできます。アプリケーションを変更して SQL クエリを許可することをお勧めします。
TSDB 互換操作を使用して複数値データをクエリする
TSDB 互換操作、HTTP SQL API、Java Native SDK、および InfluxDB ラインプロトコルを使用して書き込まれた複数値データをクエリできます。
TSDB のメトリックは、LindormTSDB のテーブルに対応します。
複数値データをクエリする方法の詳細については、次のトピックをご参照ください。
API 操作を使用して複数値データをクエリする: 複数値データポイントをクエリする。
SDK を使用して複数値データをクエリする: SDK 複数値データモデルを使用してデータを読み取る。
TSDB 互換操作を使用して単一値データをクエリする
TSDB と互換性のある API 操作によって書き込まれた単一値データをクエリできます。この方法でデータをクエリすることはお勧めしません。
HTTP SQL API、Java Native SDK、および InfluxDB ラインプロトコル、または TSDB 互換操作を使用して書き込まれた複数値データをクエリする場合、クエリを複数値データに適合させるために、メトリックを metric@field 形式で設定する必要があります。この形式では、メトリックをテーブルの名前に設定し、フィールドをクエリするデータを格納する列の名前に設定します。
単一値データをクエリする方法の詳細については、次のトピックをご参照ください。
API 操作を使用して単一値データをクエリする: 単一値データポイントをクエリする。
SDK を使用して単一値データをクエリする: データをクエリする。
Grafana プラグインを使用してデータをクエリする
Grafana は、大量の測定データを視覚化された方法で表示するために使用できるオープンソースツールです。 Grafana が提供する Alibaba Cloud Lindorm データソースプラグインを使用して、LindormTSDB の時系列データにアクセスできます。
Lindorm 用 Grafana プラグインを使用してデータをクエリする
Grafana が提供する Alibaba Cloud Lindorm データソースプラグインを使用することで、エディターで自動的に生成される SQL ステートメントを使用するか、カスタム SQL ステートメントを作成してデータをクエリできます。詳細については、「Grafana を使用して LindormTSDB にアクセスする」をご参照ください。
OpenTSDB 用 Grafana プラグインを使用してデータをクエリする
LindormTSDB は、OpenTSDB と互換性のある API 操作を提供してデータをクエリします。 Grafana が提供する OpenTSDB データソースプラグインを使用して、Lindorm の時系列データをクエリできます。
HTTP SQL API、Java Native SDK、および InfluxDB ラインプロトコル、または TSDB 互換操作を使用して書き込まれた複数値データをクエリする場合、クエリを複数値データに適合させるために、メトリックを metric@field 形式で設定する必要があります。この形式では、メトリックをテーブルの名前に設定し、フィールドをクエリするデータを格納する列の名前に設定します。
クエリのパフォーマンスを向上させる
方法 | シナリオ | 説明 | 違い |
事前集計 | リアルタイムで多数の時系列を集計およびクエリする。 | 事前集計では、LindormTSDB が提供する連続クエリ機能を使用して、クエリ対象のデータを事前に計算し、結果を結果テーブルに保存します。このようにして、結果テーブルのデータのみをクエリする必要があるため、クエリが高速化されます。連続クエリの詳細については、「連続クエリ」をご参照ください。 | 事前集計では、データは実際にクエリされる前に事前に計算されます。計算結果を格納する結果テーブルは元のテーブルとは異なります。したがって、事前集計を使用する場合は、クエリで元のテーブルと結果テーブルを指定する必要があります。 |
事前ダウンサンプリング | 広い時間範囲内で時系列をクエリする。 | 事前ダウンサンプリングでは、LindormDFS を使用して書き込まれたデータをダウンサンプリングし、個別に格納します。書き込まれたデータをクエリすると、クエリ条件で指定されたダウンサンプリング比率に最も近い事前ダウンサンプリング比率でダウンサンプリングされたデータがクエリされます。次に、クエリされたデータが集計および計算されます。このようにして、リアルタイムでクエリおよび計算する必要があるデータ量が削減され、クエリのレイテンシが短縮されます。事前ダウンサンプリングの詳細については、「事前ダウンサンプリング」をご参照ください。 | 事前ダウンサンプリングでは、元のデータの時間精度は低下します。ダウンサンプリングされたデータと元のデータは同じテーブルに格納されます。したがって、事前ダウンサンプリングを使用する場合は、クエリで異なるテーブルを指定する必要はありません。 |