Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рекомендуется хранить полуструктурированные данные в зависимости от того, как ваша организация использует данные. Azure Databricks предоставляет функции, собственные типы данных и синтаксис запросов для работы с полуструктурированных, вложенными и сложными данными.
Следующие рекомендации влияют на то, какой шаблон следует использовать:
- Часто ли изменяются поля или типы в источнике данных?
- Сколько уникальных полей содержится в источнике данных?
- Нужно ли оптимизировать рабочие нагрузки для операций записи или чтения?
Databricks рекомендует хранить данные в виде таблиц Delta для подчиненных запросов.
Использовать вариант
Начиная с Databricks Runtime 15.3 можно использовать тип VARIANT для хранения полуструктурированных данных JSON с использованием оптимизированного кодирования, которое обеспечивает более высокую производительность чтения и записи по сравнению со строками JSON.
Тип VARIANT имеет аналогичные приложения, как строки JSON. Для некоторых рабочих нагрузок по-прежнему полезно использовать структуры, ассоциативные массивы и массивы, особенно для данных с заранее известной схемой, для которых полезны оптимизированная организация данных и сбор статистики.
Дополнительные сведения см. в следующих статьях:
- Данные о вариантах запроса
- Чем variant отличается от строк JSON?
- Прием данных в виде полуструктурированного типа варианта
Использование строк JSON
Данные можно хранить в одном строковом столбце с помощью стандартного форматирования JSON, а затем запрашивать поля в формате JSON с помощью : нотации.
Многие системы выводят записи JSON в виде строк или байтовых последовательностей. Прием и хранение этих записей в виде строк имеет очень низкую нагрузку на обработку. Вы также можете использовать функцию to_json , чтобы превратить любую структуру данных в строку JSON.
При выборе хранения данных в виде строк JSON следует учитывать следующие сильные стороны и недостатки:
- Все значения хранятся в виде строк без сведений о типе.
- JSON поддерживает все типы данных, которые можно представить с помощью текста.
- JSON поддерживает строки произвольной длины.
- Нет ограничений на количество полей, которые можно представить в одном столбце данных JSON.
- Данные не требуют предварительной обработки перед записью в таблицу.
- Вы можете устранить имеющиеся в данных проблемы с типами в последующих рабочих нагрузках.
- JSON обеспечивает наихудшую производительность при чтении, так как необходимо проанализировать всю строку для каждого запроса.
Строки JSON обеспечивают большую гибкость и простое решение для получения необработанных данных в таблицу Lakehouse. Вы можете использовать строки JSON для многих приложений, но они особенно полезны, если наиболее важный результат рабочей нагрузки сохраняет полное и точное представление источника данных для последующей обработки. Некоторые варианты использования могут включать:
- Прием потоковых данных из службы очередей, например Kafka.
- Запись ответов на запросы REST API
- Хранение необработанных записей из вышестоящего источника данных, не контролируемого командой.
Предполагая, что логика приема является гибкой, хранение данных в виде строки JSON должно быть устойчивым, даже если вы столкнулись с новыми полями, изменениями структуры данных или типом изменений в источнике данных. Хотя последующие рабочие нагрузки могут завершиться ошибкой из-за этих изменений, ваша таблица содержит полную историю исходных данных, а это значит, что вы можете устранить проблемы без необходимости возвращаться к источнику данных.
Использование структур
Вы можете хранить полуструктурированные данные с структурами и включить все собственные функциональные возможности столбцов при сохранении вложенной структуры источника данных.
Delta Lake позволяет использовать структуры таким же образом, как столбцы. В таблице Delta Lake файлы данных Parquet создают столбец для каждого поля в структуре. Поля структуры можно использовать в качестве ключей кластеризации, и вы можете собирать статистику по структурым для пропуска данных. Невозможно секционировать таблицу по полю структуры. Вместо этого используйте кластеризацию жидкости. См. раздел "Использование кластеризации жидкости" для таблиц.
Структуры обычно обеспечивают наилучшую производительность при чтении, так как поддерживают все оптимизации пропуска данных и хранят отдельные поля в виде столбцов. Производительность может начать снижаться, когда количество столбцов достигает нескольких сотен.
Каждое поле в структуре имеет тип данных, который проверяется при записи, как и для столбцов. Таким образом, структуры требуют полной предварительной обработки данных. Это может быть полезно, если требуется только проверенные данные, зафиксированные в таблице, но могут привести к удалению данных или сбою заданий при обработке неправильно сформированных записей из вышестоящих систем.
Структуры менее гибки, чем потоки JSON для эволюции схемы, будь то для развития типов данных или добавления новых полей.
Использование карт и массивов
Для репликации полуструктурированных форматов данных в Delta Lake можно использовать сочетание карт и массивов. Статистические данные нельзя собирать в полях, определенных этими типами, но они обеспечивают сбалансированную производительность как для чтения, так и для записи для полуструктурированных наборов данных, имеющих около 500 полей.
И ключ, и значение отображений типизированы, поэтому данные предварительно обрабатываются, а соблюдение схемы обеспечивается при записи.
Для ускорения запросов Databricks рекомендует хранить поля, которые часто используются для фильтрации данных в виде отдельных столбцов.
Нужно ли преобразовывать мои данные в плоский вид?
Если данные хранятся с помощью JSON или карт, рассмотрите возможность хранения полей, часто используемых для фильтрации запросов в качестве столбцов. Коллекция статистики, секционирование и кластеризация недоступны для полей в строках ИЛИ картах JSON. Это не нужно делать для данных, хранящихся в виде структур.
Синтаксис для работы с вложенными данными
Ознакомьтесь со следующими ресурсами, чтобы получить сведения о работе с вложенными данными: