Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
Эта функция предоставляется в режиме общедоступной предварительной версии.
В этой статье описываются изменения поведения и различия в синтаксисе и семантике при работе с типом данных variant. В этой статье предполагается, что вы знакомы с данными строки JSON в Azure Databricks. Для пользователей, которые новички в Azure Databricks, рекомендуется использовать альтернативу вместо строк JSON при хранении полуструктурированных данных, для которых требуется гибкость из-за изменяющейся или неизвестной схемы. См . полуструктурированные данные модели.
В Databricks Runtime 15.3 и более поздних версиях можно использовать тип данных variant для кодирования и запроса полуструктурированных данных. Databricks рекомендует вариант в качестве замены для хранения полуструктурированных данных с помощью строк JSON. Улучшенная производительность чтения и записи для variant позволяет заменить собственные сложные типы Spark, такие как структуры и массивы в некоторых случаях использования.
Как запрашивать вариантные данные?
Вариантные данные используют те же операторы для запроса полей, подфилдов и элементов массива.
Чтобы запросить поле, используйте :. Например, column_name:field_name.
Чтобы запросить подфилд, используйте .. Например, column_name:field_name.subfield_name.
Чтобы запросить элемент массива, используйте [n], где n — это значение целочисленного индекса элемента. Например, чтобы запросить первое значение в массиве, column_name:array_name[0]выполните запрос.
Следующие различия могут нарушить существующие запросы при обновлении строк JSON до варианта:
- Все элементы пути варианта соответствуют регистру с учетом регистра. Строки JSON не учитывает регистр. Это означает, что для варианта
column_name:FIELD_NAMEиcolumn_name:field_nameпоиск различных полей в хранимых данных. - Синтаксис
[*]не поддерживает идентификацию или распаковку всех элементов в массиве. - Variant кодирует
NULLзначения, отличные от строк JSON. См . правила null variant. - Столбцы типа Variant имеют ограничения для некоторых операций. См. ограничения.
Преобразование строк JSON в вариант и из варианта
В Databricks Runtime 15.3 и выше to_json функция имеет дополнительные функции для приведения VARIANT типов к строкам JSON. Параметры игнорируются при преобразовании VARIANT в строку JSON. См . to_json.
Функция parse_json (SQL или Python) преобразует строку JSON в VARIANT тип. Хотя parse_json(json_string_column) это логическая обратная часть to_json(variant_column), следующие правила преобразования описывают, почему это не точное обратное:
- Пробелы не сохраняются совершенно.
- Порядок ключей является произвольным.
- Конечные нули чисел могут быть усечены.
SQL
SELECT parse_json('{"key": 1, "data": [2, 3, "str"]}');
Питон
spark.range(1).select(parse_json(lit('{"key": 1, "data": [2, 3, "str"]}'))).display()
Функция parse_json возвращает ошибку, если строка JSON неправильно сформирована, превышает предел размера варианта или является недопустимым. Используйте функцию try_parse_json (SQL или Python), чтобы вернуть NULL при ошибке синтаксического анализа.
SQL
SELECT try_parse_json('{"a" : invalid, "b" : 2}');
Питон
spark.range(1).select(try_parse_json(lit('{"a" : invalid, "b" : 2}'))).display()
Что такое функции SQL для работы с вариантами?
Функции Apache Spark SQL, доступные в Databricks Runtime 15.3 и выше, предоставляют методы взаимодействия с вариантными данными. В следующей таблице приведена новая функция, соответствующая строковая функция JSON и заметки о различиях в поведении.
Варианты обрабатывают приведение и NULLотличаются от строк JSON. См . правила приведения типов variant и правила null variant.
Примечание.
Чтобы использовать эти функции с Кадрами данных PySpark, импортируйте их из pyspark.sql.functions.
| Вариантная функция | Строка JSON | Примечания. |
|---|---|---|
| variant_get | приведение и get_json_object | Принимает выражение, путь и тип. Выполняет все правила для путей вариантов, приведения и значений NULL. |
| try_variant_get | try_cast и get_json_object | Принимает выражение, путь и тип. Выполняет все правила для путей вариантов, приведения и значений NULL. |
| is_variant_null | имеет значение NULL | Проверяет, хранится ли выражение в кодировке VARIANTNULL. Используется is null для проверки наличия входного выражения NULL. |
| schema_of_variant | schema_of_json | При определении схемы для объекта ARRAY<elementType>, elementType может быть выведено как VARIANT, если в данных есть конфликтующие типы. |
| schema_of_variant_agg | schema_of_json_agg | Если не определен минимальный распространенный тип, тип является производным VARIANTот имени. |
| variant_explode | explode | Выходные данные столбцы pos, key и value. При взрыве массива выходной ключ всегда имеет значение NULL. |
| variant_explode_outer | explode_outer | Выходные данные столбцы pos, key и value. При взрыве массива выходной ключ всегда имеет значение NULL. |