Загрузка структурированного JSON
NDJSON (Newline delimited JSON), известном в ClickHouse как JSONEachRow, и имеют чёткую структуру, то есть имена столбцов и их типы фиксированы. NDJSON является предпочтительным форматом для загрузки JSON благодаря компактности и экономному использованию пространства, однако для ввода и вывода поддерживаются и другие форматы.
Рассмотрим следующий пример JSON, представляющий строку из набора данных Python PyPI:
По возможности отдавайте предпочтение статическим схемамЕсли ваши столбцы имеют фиксированные имена и типы и появления новых столбцов не ожидается, в продакшене всегда предпочитайте статически определённую схему.тип JSON предпочтителен для сильно динамичных данных, где имена и типы столбцов могут меняться. Этот тип также полезен на этапе прототипирования и исследования данных.
Ключи сортировкиЗдесь мы выбрали ключ сортировки с помощью предложения
ORDER BY. Подробнее о ключах сортировки и о том, как их выбирать, см. здесь.*.json.gz из бакета. ClickHouse автоматически определяет формат JSONEachRow (ndjson) по расширению и содержимому файла. Если ClickHouse не может определить формат автоматически, его можно указать вручную через параметры функций.
Сжатые файлыУказанные выше файлы также находятся в сжатом виде. ClickHouse автоматически распознаёт это и корректно их обрабатывает.
INSERT INTO SELECT:
FORMAT, например.
JSONEachRow. Также поддерживаются другие распространённые JSON-форматы; примеры их использования приведены здесь.
Загрузка полуструктурированного JSON
JSON.
Рассмотрим следующий пример из расширенной версии приведённого выше набора данных Python PyPI. Здесь мы добавили произвольный столбец tags со случайными парами «ключ — значение».
tags типа JSON:
Когда использовать тип JSON
- Содержат непредсказуемые ключи, которые со временем могут меняться.
- Содержат значения разных типов (например,
pathиногда может быть строкой, а иногда — числом). - Требуют гибкости схемы, когда строгая типизация нецелесообразна.
- Плоскую структуру с известными ключами: используйте стандартные типы столбцов, например String.
- Предсказуемую вложенность: используйте для таких структур типы Tuple, Array или Nested.
- Предсказуемую структуру с меняющимися типами: вместо этого рассмотрите типы Dynamic или Variant.