Как отличается от строк JSON?
Внимание
Эта функция предоставляется в режиме общедоступной предварительной версии.
В этой статье описываются изменения поведения и различия в синтаксисе и семантике при работе с типом данных 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.
Преобразование строк JSON в вариант и из варианта
В Databricks Runtime 15.3 и выше to_json
функция имеет дополнительные функции для приведения VARIANT
типов к строкам JSON. Параметры игнорируются при преобразовании VARIANT
в строку JSON. См . to_json.
Функция parse_json
преобразует строку JSON в VARIANT
тип. Хотя parse_json(json_string_column)
это логическая обратная часть to_json(variant_column)
, следующие правила преобразования описывают, почему это не точное обратное:
- Пробелы не сохраняются совершенно.
- Порядок ключей является произвольным.
- Конечные нули чисел могут быть усечены.
Функция parse_json
возвращает ошибку, если строка JSON неправильно сформирована или превышает предел размера варианта. Используйте функцию try_parse_json
, чтобы вместо этого возвращать NULL
ошибку при синтаксическом анализе.
Что такое функции SQL для работы с вариантами?
Функции Apache Spark SQL, доступные в Databricks Runtime 15.3 и выше, предоставляют методы взаимодействия с вариантными данными. В следующей таблице приведена новая функция, соответствующая строковая функция JSON и заметки о различиях в поведении.
Примечание.
Чтобы использовать эти функции с Кадрами данных PySpark, импортируйте их из pyspark.sql.functions
. variant_explode
и variant_explode_outer
не поддерживаются в PySpark.
Вариантная функция | Строка JSON | Примечания. |
---|---|---|
variant_get | приведение и get_json_object | Принимает выражение, путь и тип. Выполняет все правила для путей вариантов, приведения и значений NULL. |
try_variant_get | try_cast и get_json_object | Принимает выражение, путь и тип. Выполняет все правила для путей вариантов, приведения и значений NULL. |
is_variant_null | is null | Проверяет, хранится ли выражение в кодировке VARIANT NULL . Используется 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. |
Варианты обрабатывают приведение и NULL
отличаются от строк JSON. См . правила приведения типов variant и правила null variant.