Поделиться через


Как отличается от строк 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и keyvalue столбцы. При взрыве массива выходной ключ всегда имеет значение NULL.
variant_explode_outer explode_outer Выходные данные posи keyvalue столбцы. При взрыве массива выходной ключ всегда имеет значение NULL.

Варианты обрабатывают приведение и NULLотличаются от строк JSON. См . правила приведения типов variant и правила null variant.