Последнее обновление
TRY_PARSE_TO_VARIANT
Описание
TRY_PARSE_TO_VARIANT пытается разобрать одно полное значение JSON и преобразовать его в VARIANT. Префикс TRY_ означает, что при ошибке разбора возвращается SQL NULL, а запрос не завершается ошибкой. По умолчанию текст, не являющийся корректным JSON, не считается ошибкой разбора; см. раздел «Возвращаемое значение». Эта функция доступна в Doris 4.1.4 и более поздних версиях; на этой странице описано её поведение в Doris 5.0.0 и более поздних версиях.
Синтаксис
TRY_PARSE_TO_VARIANT(<json_value>)
Параметры
| Параметр | Описание |
|---|---|
<json_value> | Выражение типа CHAR, VARCHAR или STRING, содержащее одно полное значение JSON, либо выражение типа JSON/JSONB. Входные данные JSON/JSONB преобразуются в текст JSON, который затем разбирается для получения VARIANT. |
Возвращаемое значение
Возвращает значение типа VARIANT, допускающее NULL.
- При корректных входных данных возвращается полученное в результате разбора значение VARIANT.
- Следующие ошибки разбора приводят к возврату SQL
NULL: ключ объекта длиннееvariant_max_json_key_lengthбайт (параметр конфигурации BE, по умолчанию 255), повторяющиеся ключи в одном объекте (кроме случая, когда параметр конфигурации BEvariant_enable_duplicate_json_path_checkимеет значениеtrue: тогда сохраняется первое значение), глубина вложенности более 128 уровней и строка, не соответствующая UTF-8. - Текст, не являющийся корректным JSON, а также JSON, содержащий целое число вне диапазона [-2^63, 2^64 - 1] или число вне диапазона
DOUBLE, возвращаются как строка VARIANT, как и в PARSE_TO_VARIANT. В этих случаях SQLNULLвозвращается только тогда, когда параметр конфигурации BEvariant_throw_exeception_on_invalid_jsonимеет значениеtrue(по умолчаниюfalse). - Для пустой строки возвращается пустой объект
{}. - Если на вход подан SQL
NULL, возвращается SQLNULL. - Для литерала JSON
nullвозвращается VARIANTnull, а не SQLNULL.
Пример
Корректные значения сохраняются, а ошибки разбора преобразуются в SQL NULL:
SELECT CAST(
TRY_PARSE_TO_VARIANT('{"id": 1}')
AS STRING
) AS valid_value,
TRY_PARSE_TO_VARIANT('{"id": 1, "id": 2}') IS NULL AS duplicate_is_null,
TRY_PARSE_TO_VARIANT(NULL) IS NULL AS input_is_null;
+-------------+-------------------+---------------+
| valid_value | duplicate_is_null | input_is_null |
+-------------+-------------------+---------------+
| {"id":1} | 1 | 1 |
+-------------+-------------------+---------------+
Разбор входных данных JSON/JSONB:
SELECT CAST(
TRY_PARSE_TO_VARIANT(CAST('[10, 20, 30]' AS JSON))
AS STRING
) AS value;
+------------+
| value |
+------------+
| [10,20,30] |
+------------+
Значение JSON null не является SQL NULL, а текст, не являющийся корректным JSON, сохраняется как строка:
SELECT TRY_PARSE_TO_VARIANT('null') IS NULL AS json_null_is_sql_null,
VARIANT_TYPE(TRY_PARSE_TO_VARIANT('{"id":')) AS invalid_json_type;
+-----------------------+-------------------+
| json_null_is_sql_null | invalid_json_type |
+-----------------------+-------------------+
| 0 | string |
+-----------------------+-------------------+
Примечания по использованию
- Используйте PARSE_TO_VARIANT, если ошибка разбора должна приводить к завершению запроса с ошибкой и выявлять проблему с качеством данных.
- Эта функция преобразует в SQL
NULLтолько ошибки разбора; она не меняет смысл корректного значения JSONnull. - Задания загрузки, такие как Stream Load, разбирают текст JSON по тем же правилам, что и эта функция. См. раздел Ошибки разбора.