に最終更新
PARSE_TO_VARIANT
説明
PARSE_TO_VARIANT は、完全な JSON 値を一つ解析して VARIANT に変換します。JSON オブジェクト、配列、文字列、数値、真偽値、および JSON リテラルの null を受け付けます。この関数は Doris 4.1.4 以降で使用できます。このページでは、Doris 5.0.0 以降の動作を説明します。
構文
PARSE_TO_VARIANT(<json_value>)
パラメータ
| パラメータ | 説明 |
|---|---|
<json_value> | 完全な JSON 値を一つ含む CHAR、VARCHAR、STRING 式、または JSON/JSONB 式。JSON/JSONB 入力は JSON テキストに変換されてから VARIANT として解析されます。 |
戻り値
VARIANT 値を返します。
- SQL の
NULLを入力すると、SQL のNULLを返します。 - JSON リテラルの
nullを入力すると、VARIANT のnullを返します。これは SQL のNULLとは異なります。 - 有効な JSON ではないテキストは、VARIANT 文字列として返されます。[-2^63, 2^64 - 1] の範囲外の整数、または
DOUBLEの範囲外の数値を含む JSON も同様に、テキスト全体が一つの文字列になります。この動作は BE 設定variant_throw_exeception_on_invalid_json(デフォルトはfalse)で制御します。trueの場合、このような入力によってクエリが失敗します。 - 空文字列を入力すると、空のオブジェクト
{}を返します。 - JSON パーサー自体が拒否するほど深くネストされたドキュメント(約 1,000 階層)は無効な JSON とみなされ、文字列として返されます。
- オブジェクトのキーが
variant_max_json_key_lengthバイト(BE 設定、デフォルトは 255)より長い場合、オブジェクトに重複するキーが含まれる場合(ただし、BE 設定variant_enable_duplicate_json_path_checkがtrueの場合は最初の値が保持されます)、ネストが 128 階層を超える場合、または文字列が有効な UTF-8 ではない場合、クエリは失敗します。
例
JSON テキストを解析します。
SELECT CAST(
PARSE_TO_VARIANT('{"id": 42, "tags": ["doris", "sql"]}')
AS STRING
) AS value;
+----------------------------------+
| value |
+----------------------------------+
| {"id":42,"tags":["doris","sql"]} |
+----------------------------------+
JSON/JSONB 式を解析します。
SELECT CAST(
PARSE_TO_VARIANT(CAST('{"id": 42}' AS JSON))
AS STRING
) AS value;
+-----------+
| value |
+-----------+
| {"id":42} |
+-----------+
値を取り出し、具体的な SQL 型に CAST します。
SELECT CAST(
PARSE_TO_VARIANT('{"user": {"id": 42}}')['user']['id']
AS BIGINT
) AS user_id;
+---------+
| user_id |
+---------+
| 42 |
+---------+
SQL の NULL は SQL の NULL のままです。
SELECT PARSE_TO_VARIANT(NULL) IS NULL AS is_sql_null;
+-------------+
| is_sql_null |
+-------------+
| 1 |
+-------------+
有効な JSON ではないテキストは文字列として保持されます。
SELECT CAST(PARSE_TO_VARIANT('{"id":') AS STRING) AS value,
VARIANT_TYPE(PARSE_TO_VARIANT('{"id":')) AS type;
+--------+--------+
| value | type |
+--------+--------+
| {"id": | string |
+--------+--------+
キーが重複している場合はエラーを返します。
SELECT PARSE_TO_VARIANT('{"id": 1, "id": 2}');
ERROR 1105 (HY000): errCode = 2, detailMessage = [INVALID_ARGUMENT]Parse json document failed at row 0, error: [INVALID_ARGUMENT]Duplicate Variant object key
使用上の注意
- TRY_PARSE_TO_VARIANT は、解析エラー時にクエリを失敗させず、SQL の
NULLを返したい場合に使用してください。 PARSE_TO_VARIANTは JSON を明示的に解析します。一方、CAST(string AS VARIANT)と、文字列を VARIANT カラムにINSERTする操作では、入力は JSON として解析されず、VARIANT 文字列として保持されます。JSON テキストをINSERTで書き込むには、PARSE_TO_VARIANTで囲んでください。データの書き込みとVARIANT への CASTを参照してください。