すべてのプロダクト
Search
ドキュメントセンター

Lindorm:SELECT

最終更新日:Feb 12, 2026

テーブルからデータをクエリします。

適用エンジン

SELECT 構文は、LindormTable と LindormTSDB に適用されます。

制限事項

Lindorm の SELECT 文は、フラット化されたクエリのみをサポートします。複数テーブル結合クエリ (JOIN) やセットクエリ (UNION や INTERSECT など) はサポートしていません。

構文

SELECT [hint_clause] ( select_clause | '*' )
    FROM table_name
    [ WHERE where_clause ]
    [ GROUP BY group_by_clause ]
    [ ORDER BY ordering_clause ]
    [ LIMIT integer [OFFSET integer] ] | [LIMIT integer, integer]
select_clause    ::=  selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector         ::=  column_name
                      | term
                      | function_name '(' [ selector ( ',' selector )* ] ')'
where_clause     ::=  relation ( AND|OR relation )*
relation         ::=  column_name operator term
                      |'(' column_name ( ',' column_name )* ')' operator tuple_literal
operator         ::=  '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | IS NOT? NULL | LIKE
group_by_clause  ::=  column_name ( ',' column_name )*
ordering_clause  ::=  column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*

hint_clause::=/*+hint_items*/
hint_items::=hint_item(','hint_item)*
hint_item::=identifier('('hint_option(','hint_option)*')')
hint_option::=expression

注意事項

SELECT句

SELECT句は、クエリで出力するカラム、定数、関数式を指定します。ASキーワードを使用して、結果セット内のカラムに一時的なエイリアスを定義します。

WHERE句

WHERE句は、クエリ条件を指定します。

ワイドテーブルで WHERE句 を使用してデータをクエリする場合、次の点を考慮してください。

  • 非効率なクエリを回避するには、次のルールに基づいてクエリ条件を定義します。

    • テーブルの最初のプライマリキー列、またはインデックステーブルの最初のインデックスキー列のみをクエリ条件として使用します。

    • クエリ条件に最初のプライマリキー列または最初のインデックスキー列以外のカラムが含まれる場合は、テーブルの最初のプライマリキー列またはインデックステーブルの最初のインデックスキー列の上限と下限を定義します。

    クエリ条件がこれらのルールに従わない場合、非効率なクエリの実行を強制するために /*+ _l_allow_filtering_ */ を使用する必要があります。例については、「非効率なクエリの強制実行」をご参照ください。

  • ワイドテーブルで動的カラムが有効になっている場合:

    • クエリパフォーマンスを確保するには、WHERE句にプライマリキーまたはインデックスキー列を含めます。

    • WHERE句内の動的カラムの条件は HexStrings である必要があります。

    動的カラムの詳細については、「動的カラム」をご参照ください。

GROUP BY句

LindormTable と LindormTSDB は、グループ化と集約のために GROUP BY句 をサポートしています。時空間関数は GROUP BY句 をサポートしていないことに注意してください。

ORDER BY句

クエリの結果セットをソートするために、1つ以上のカラムを指定します。

重要
  • ORDER BY句 のカラム名が SELECT句 にも表示されていることを確認してください。そうでない場合、セマンティックチェックエラーが発生します。

  • ORDER BY句 はエイリアスをサポートしていません。

LIMIT句

LIMIT句 は、ページングクエリに使用されます。LIMIT の後に単一の数値が続く場合、その数値は返される行数を示します。LIMIT の後にコンマ (,) で区切られた2つの数値 (例: LIMIT n, m) が続く場合、文は n行をスキップし、m行のデータを返します。[ LIMIT integer [OFFSET integer][LIMIT integer, integer] と同等です。

重要
  • LIMIT句 で OFFSET を指定した場合でも、クエリは OFFSET によってスキップされたデータを取得します。過剰なクエリペイロードを回避するために、OFFSET 値を 5000 以下に設定してください。

  • ワイドテーブルで動的カラムが有効になっている場合、次の点に注意してください。

    • 動的カラムを持つテーブルを SELECT * でクエリする場合、文に LIMIT句 を追加する必要があります。これにより、結果セット内のメタデータの正確性が保証されます。

    • 動的カラムを持つテーブルに対する SELECT * クエリの場合、LIMIT のデフォルトの最大値は 5000 です。値が最大値を超えると、エラーが報告されます。

HINT

LindormTable と LindormTSDB は、クエリプランを最適化したり、特定のクエリ機能を有効にしたりするためのヒントワードをサポートしています。詳細については、「HINTの概要」をご参照ください。

このトピックの例は、CREATE TABLE および UPSERT トピックのサンプルステートメントに基づいています。

CREATE TABLE sensor (
    device_id VARCHAR NOT NULL,
    region VARCHAR NOT NULL,
    time BIGINT NOT NULL,
    temperature DOUBLE,
    humidity BIGINT,
    PRIMARY KEY(device_id, region, time)
);

シンプルクエリ

  • sensor テーブルをクエリします。

    SELECT * FROM sensor; --全てのカラムを選択。
    SELECT device_id,region,humidity FROM senor;  --特定カラムを選択。
    SELECT * FROM sensor WHERE device_id = 'F07A1260' LIMIT 20 OFFSET 5; --LIMIT 5,20 と同等。
    SELECT count(*) AS countRow FROM sensor; --エイリアスを定義。
  • 時空間関数を呼び出してシンプルクエリを実行します。時空間関数のカテゴリと説明の詳細については、「時空間関数」をご参照ください。

    SELECT id, ST_AsText(g) FROM gps_data;
    SELECT id, ST_Buffer(g, 1.0) AS buffer FROM gps_data;

集計クエリ

  • ID が F07A1260 のデバイスによって特定の時点に報告されたデータレコードの総数をカウントします。

SELECT count(*) FROM sensor WHERE device_id = 'F07A1260' AND time = '2021-04-22 15:33:00';
  • ID が F07A1260 のデバイスの最大温度を一定期間内にクエリします。

SELECT max(temperature) AS max_temp FROM sensor WHERE device_id = 'F07A1260' AND time >= '2021-04-22 15:33:00' AND time < '2021-04-22 15:33:20';

条件付きクエリ

  • ID が F07A1260 のデバイスについて、リージョンが 'north-cn' で温度が 15度より高い場合、またはリージョンが 'south-cn' で温度が 10度より高く、湿度が NULL ではない場合の湿度をクエリします。

SELECT device_id, humidity FROM sensor WHERE ((region='north-cn' AND temperature >15) OR (region='south-cn' AND temperature >10)) 
AND device_id = 'F07A1260' AND humidity is not null;
  • ID が F07A1260 または F07A1261 のデバイスのデータをクエリします。

SELECT * FROM sensor WHERE device_id IN ('F07A1260', 'F07A1261');
  • 時空間関数を呼び出して条件付きクエリを実行します。次の3つの空間条件 (ST_ContainsST_DWithinST_DWithinSphere) については、効率的な実行がサポートされています。

    • ST_Contains 関数を使用して、指定された空間範囲内の点に対応するデータをクエリします。

      SELECT id FROM gps_data WHERE ST_Contains(ST_GeomFromText('POLYGON((...))'), g);
    • ST_DWithin 関数を使用して、重心から指定された平面距離内の点に対応するデータをクエリします。単位: 度。

      SELECT id FROM gps_data WHERE ST_DWithin(ST_GeomFromText('POINT(0 0)'), g, 100);
    • ST_DWithinSphere 関数を使用して、重心から指定された球面距離内の点に対応するデータをクエリします。単位: メートル。

      SELECT id FROM gps_data WHERE ST_DWithinSphere(ST_GeomFromText('POINT(0 0)'), g, 100);

非効率なクエリの強制実行

LindormTable が SELECT文 を非効率なクエリとして識別した場合、LindormTable はデフォルトではクエリを実行せず、例外をスローします。これにより、クエリが Lindorm のパフォーマンスと安定性に影響を与えるのを防ぎます。

非効率なクエリチェックをスキップし、クエリの実行を強制するには、クエリ文に /*+ _l_allow_filtering_ */ を追加します。

SELECT /*+ _l_allow_filtering_ */ * FROM sensor WHERE humidity=20; 
説明

SELECT クエリは、次のすべての条件を満たす場合に非効率と見なされます。

  • WHERE句 が、テーブルの最初のプライマリキーの上限と下限を指定していない。

  • WHERE句 が、インデックステーブルの最初のインデックスキー列の上限と下限を指定していない。

  • WHERE句 が、最初のプライマリキーまたは最初のインデックスキー列ではないカラムに対する条件を含んでいる。

非効率なクエリに関連する問題の解決方法については、「非効率なクエリの解決または回避方法」をご参照ください。