JSON関数と演算子

SQL標準は、JSONデータを処理するための関数と演算子を説明しています。これらは、JSONデータの構造に従ってアクセスし、JSONデータを生成し、SQLテーブルに永続的に保存することを可能にします。

重要なことに、SQL標準ではJSONデータを表す専用のデータ型は存在せず、JSONデータは文字列またはバイナリ文字列として表されます。TrinoはJSON型をサポートしていますが、以下の関数では使用されません。

TrinoはJSONデータをクエリするために、json_existsjson_queryjson_valueの3つの関数をサポートしています。これらの関数はすべて、JSONパスを使用してJSON入力を探索および処理する同じメカニズムに基づいています。

Trinoはまた、JSONデータを生成するための2つの関数、json_arrayおよびjson_objectをサポートしています。

JSONパス言語

JSONパス言語は、特定のSQL演算子によってのみ使用される特別な言語で、JSON入力に対して実行するクエリを指定します。JSONパス式はSQLクエリに埋め込まれていますが、その構文はSQLとは大きく異なります。JSONパス式の述語、演算子などの意味論は一般的にSQLの意味論に従います。JSONパス言語は、キーワードと識別子に対して大文字小文字を区別します。

JSONパスの構文と意味論

JSONパス式は再帰的な構造です。「パス」という名前は、JSON構造内を段階的に深く進む線形シーケンスの操作を示唆しますが、JSONパス式はツリー構造です。入力JSONアイテムに複数回、複数の方法でアクセスし、結果を組み合わせることができます。さらに、JSONパス式の結果は単一のアイテムではなく、順序付けられたアイテムのシーケンスです。各サブ式は1つ以上の入力シーケンスを受け取り、シーケンスを結果として返します。

<aside> 💡 緩やかなモード(laxモード)では、ほとんどのパス操作が最初に入力シーケンス内のすべてのJSON配列を展開します。この規則からの逸脱は、以下のリストで言及されています。パスモードの詳細はjson-path-modesで説明されています。

</aside>

JSONパス言語の機能は、リテラル、変数、算術バイナリ式、算術単項式、および一括してアクセサと呼ばれる演算子群に分けられます。

リテラル

数値リテラル

これには、正確な数値と近似数値が含まれます。これらは、SQLの値であるかのように解釈されます。

1, 1.2e3, NaN

文字列リテラル

これらは二重引用符で囲まれています。

"Some text"

ブール型リテラル

true, false