Перейти к основному содержимому
Перейти к основному содержимому

Загрузка JSON

В этом разделе мы предполагаем, что данные JSON находятся в формате NDJSON (JSON формата, разделенного новой строкой), известным как JSONEachRow в ClickHouse. Это предпочтительный формат для загрузки JSON из-за его компактности и эффективного использования пространства, однако поддерживаются и другие форматы как для входа, так и выхода.

Рассмотрим следующий пример JSON, представляющий строку из набора данных Python PyPI:

Для того чтобы загрузить этот объект JSON в ClickHouse, необходимо определить схему таблицы. Простой пример схемы показан ниже, где ключи JSON сопоставлены с именами колонок:

Ключи сортировки

Мы выбрали ключ сортировки здесь через оператор ORDER BY. Для получения дополнительной информации о ключах сортировки и о том, как их выбирать, смотрите здесь.

ClickHouse может загружать данные JSON в нескольких форматах, автоматически определяя тип по расширению и содержимому. Мы можем читать JSON-файлы для указанной таблицы, используя S3 функцию:

Обратите внимание, что нам не требуется указывать формат файла. Вместо этого мы используем образец glob для чтения всех *.json.gz файлов в бакете. ClickHouse автоматически определяет формат как JSONEachRow (ndjson) на основе расширения файла и содержания. Формат можно указать вручную через параметры функций, в случае если ClickHouse не в состоянии его обнаружить.

Сжатые файлы

Вышеуказанные файлы также сжаты. Это автоматически обнаруживается и обрабатывается ClickHouse.

Чтобы загрузить строки из этих файлов, мы можем использовать INSERT INTO SELECT:

Строки также могут быть загружены встраиваемым способом с использованием FORMAT клаузулы, например:

Эти примеры предполагают использование формата JSONEachRow. Поддерживаются и другие общие форматы JSON, с примерами загрузки которых можно ознакомиться здесь.

Предоставленный выше пример является очень простым примером загрузки данных JSON. Для более сложного JSON, включая вложенные структуры, смотрите руководство Проектирование схемы JSON.