このドキュメントでは、クエリタイプおよび操作タイプの API の SQL スクリプトを作成する方法について説明します。
Get/List (クエリタイプ)
サポートされているクエリ機能:
同一のデータソース内で、単一テーブルのクエリ、複数テーブルの結合 (JOIN)、およびネストされたクエリ (サブクエリ) を実行できます。
高度な SQL モード (MyBatis スタイル) を使用できます。
SELECTステートメントでパラメーターを使用できます。 例:SELECT id_card, SUM(CASE WHEN id_card LIKE ${id_card} THEN 1 ELSE 0 END) AS proj_score FROM table WHERE c LIKE ${id_card} GROUP BY id_card。
サポートされていない構文と使用法:
複数の SQL クエリステートメント:1 つの API で
SELECT ...; SELECT ...;のように複数の SQL ステートメントを実行することはできません。非 DQL ステートメント:
ListまたはGetAPI では、INSERT、UPDATE、CREATE、DELETEなどの非 DQL ステートメントを使用することはできません。SELECT *:
SELECT *クエリは使用しないでください。 クエリする列を明示的に指定する必要があります。列名のプレフィックス:列名にテーブルのプレフィックス (例:
t.name) が含まれる場合、SELECT t.name AS name FROM tableのように、レスポンスパラメーター名としてエイリアスを使用する必要があります。集計関数:
SUM()、COUNT()、MAX()、MIN()などの集計関数を使用する場合、レスポンスパラメーター名としてエイリアスを使用する必要があります。 例:SELECT SUM(num) AS total_num FROM table。SQL スクリプトではページネーションステートメントを使用しないでください。 代わりに、ページネーションパラメーターを使用してページネーションを実装します。
説明データソースが SAP HANA の場合、ページネーションを実装するには、SQL でページネーションステートメントを使用し、ページネーションパラメーターを定義します。
TDengine データソースの場合、SQL スクリプトでページネーションステートメントを使用する必要があります。
PageStartやPageSizeなどのページネーションパラメーターが提供されていない場合は、すべてのデータが返されます。 提供されている場合は、指定された値に従ってデータがページ分割されます。
高度な SQL モードでは、動的フィールドクエリにより、パラメーターを使用してレスポンスフィールドを動的に指定できます。
パラメーターの形式:パラメーター名は
var_cols_で始まり、var_cols_xxx(例:var_cols_args) の形式に従う必要があります。 例:SELECT id, ${var_cols_args} FROM table1。レスポンスパラメーター:サポートされているすべての動的クエリフィールドをレスポンスパラメーターとして宣言する必要があります。
API の呼び出し:API を呼び出す際に、クエリしたいフィールドを動的パラメーターで渡します。 渡されなかったフィールドは、レスポンスで null 値になります。 例:
var_cols_args=name,age,dept。実際の実行:結果の SQL ステートメントは次のようになります:
SELECT id, name, age, dept FROM table1。
高度な SQL モードでは、MyBatis SQL の比較演算子はエスケープする必要があります。
元の演算子
エスケープされた演算子
<<>><=<=>=>=データソース固有の制限事項:
データソース
制限事項
TDengine
SQL で
LIMIT/OFFSETを使用してページネーションを実装する必要があります。オプションのパラメーターはサポートされていません。
SAP HANA
ページネーションはサポートされていません。
PageStartおよびPageSizeパラメーターは効果がありません。オプションのパラメーターはサポートされていません。
Elasticsearch
Elasticsearch は、ディープページネーションに
ScrollIdを使用します。ScrollIdがない場合、PageStartおよびPageSizeパラメーターを使用して取得できるのは最初の 10,000 レコードのみです。 この制限を超えてレコードを取得しようとすると、API 呼び出しが失敗します。たとえば、
PageStartが9998に設定されている場合、PageSizeの最大値は2です。最初の 10,000 レコードを超えるデータをクエリするには、
WHERE句でscrollIdを指定する必要があります。 API を開発する際にscrollIdリクエストパラメーターを定義し、リクエストに対応するscrollId値を渡すことができます。説明scrollIdを使用してクエリを実行する場合、標準のページネーションは使用できません。PageStartとPageSizeの値を渡さないでください。渡すと呼び出しは失敗します。WHERE句は条件としてscrollIdのみをサポートします。 句内の他のフィールドは無視されます。例:
select a from table where scrollId=${scrollId}。サブクエリはサポートされていません。
HBase
単一の
rowkeyクエリのみがサポートされており、rowkeyは必須のリクエストパラメーターです。 クエリ構文は次のとおりです:select info1.id as name from table where rowkey = ${rowkey}ORDER BY句はサポートされていません。ページネーションはサポートされていません。
PageStartおよびPageSizeパラメーターは効果がありません。JOINステートメントはサポートされていません。
PostgreSQL
クロススキーマクエリはサポートされていません。 現在の接続のスキーマ内でのみデータをクエリできます。
Impala
高度な SQL モード (MyBatis スタイル) はサポートされていません。
Lindorm
JOINステートメントはサポートされていません。DolphinDB
ネイティブの DolphinDB モードはサポートされていません。 DolphinDB を使用するには、データソースを作成し、その SQL 互換モードを Oracle または MySQL のいずれかに設定する必要があります。
重要データソースの互換モードを変更すると、既存の API に予期しないエラーが発生する可能性があります。 ビジネス要件に基づいてこの設定を調整してください。
GBase 8a
QUALIFY句は基本的な SQL モードではサポートされていません。OpenSearch
単純なサブクエリはサポートされていますが、複数レベルにネストされた
INサブクエリは正しく実行されない場合があります。例:
SELECT ... WHERE age IN (SELECT age FROM ... WHERE age IN (18,39));。JDBC を使用してクエリを実行する場合、
JOINを含むサブクエリが原因でクエリ結果が空になることがあります。例:
SELECT ... FROM (SELECT ... FROM t1 LEFT JOIN t2 ON ...) e1 WHERE ...;。共通テーブル式の
WITH構文はサポートされていません。例:
WITH test_with AS (...) SELECT ...;。UNIONおよびUNION ALLステートメントは、サブクエリに含まれている場合でもサポートされていません。例:
SELECT id FROM (SELECT id FROM t1 UNION SELECT id FROM t2) t;。COALESCE構文には、現在の JDBC ドライバーとの互換性の問題があります。 代替としてCASE WHEN構文を使用することを推奨します。SELECT COALESCE(id, 0) FROM ...;をSELECT CASE WHEN id IS NULL THEN 0 ELSE id END FROM ...;に置き換えます。CASE WHEN式をJOIN句とともに使用すると、フィールドの解析が失敗したり、列が見つからなかったりすることがあります。 複雑なクエリを構築する前に、構文の互換性を確認することを推奨します。例:
SELECT CASE WHEN a.id= ... END FROM t1 a JOIN t2 b ON ...;。
Hive
Hive テーブルのクエリエンジンはテーブル形式に依存します。Spark エンジンはデータレイクテーブル (Iceberg や Hudi など) をクエリし、Hive エンジンは通常のテーブル (ORC、Parquet、TextFile など) をクエリします。
Create/Update/Delete (操作タイプ)
サポートされている SQL モード:
基本的な SQL モード:標準の
INSERT、UPDATE、およびDELETEステートメントをサポートします。 このモードは${param}プレースホルダーを使用してパラメーターを渡し、単純なシナリオに適しています。高度な SQL モード (MyBatis スタイル) :条件付きステートメント、動的フィールド、バッチ操作などの複雑なロジックには、このモードを使用します。 次のタグがサポートされています:
<if>, <choose>, <when>, <otherwise>, <trim>, <foreach>
高度な SQL モードでのバッチ操作はレコードを個別に処理するため、パフォーマンスが低下する可能性があります。 したがって、可能な限り、バッチでの作成、更新、または削除の API にこのモードを使用することは避けてください。
SQL ステートメントに
in条件パラメーターが含まれている場合、各レコードが個別に実行されるため、パフォーマンスが低下します。in条件パラメーターの使用は避けることを推奨します。PostgreSQL のみが
RETURNING 句をサポートしています。