JSONEachRow (NDJSON). Этот формат интерпретирует ключи в каждой строке JSON как столбцы. Например:
Чтение JSON как объекта
JSONEachRow читает JSON, разделённый символами новой строки: каждая строка интерпретируется как отдельный объект, сопоставляется со строкой таблицы, а каждый ключ — со столбцом. Это идеально подходит для случаев, когда структура JSON предсказуема и для каждого столбца используется только один тип.
В отличие от этого, JSONAsObject рассматривает каждую строку как отдельный объект JSON и сохраняет его в одном столбце типа JSON, поэтому этот формат лучше подходит для вложенной полезной нагрузки JSON и случаев, когда ключи являются динамическими и потенциально могут иметь более одного типа.
Используйте JSONEachRow для построчной вставки, а JSONAsObject — для хранения гибких или динамических данных JSON.
Сравните приведённый выше пример со следующим запросом, который читает те же данные как объект JSON в каждой строке:
JSONAsObject полезен для вставки строк в таблицу с помощью одного столбца с объектом JSON, например.
JSONAsObject также может быть полезен для чтения JSON, разделённого символами новой строки, в случаях, когда структура объектов непоследовательна. Например, если тип значения по одному и тому же ключу различается от строки к строке (иногда это строка, а в других случаях — объект). В таких случаях ClickHouse не может вывести стабильную схему с помощью JSONEachRow, а JSONAsObject позволяет выполнять приём данных без строгой типизации, сохраняя каждую JSON-строку целиком в одном столбце. Например, обратите внимание, как JSONEachRow выдаёт ошибку в следующем примере:
JSONAsObject, поскольку тип JSON поддерживает несколько типов для одного и того же подстолбца.
Массив объектов JSON
JSONEachRow (для вставки данных из файла list.json):
Ключи объектов JSON
JSONObjectEachRow:
Указание значений ключей родительского объекта
file():
id корректно заполнился значениями ключей.
JSON-массивы
JSONCompactEachRow:
Импорт отдельных столбцов из JSON-массивов
JSONColumns для разбора данных, представленных в таком виде:
JSONCompactColumns:
Сохранение объектов JSON вместо парсинга
String (или JSON), а не разбирать. Это может быть полезно при работе со списком объектов JSON с разной структурой. Возьмем для примера этот файл, где внутри родительского списка содержится несколько разных объектов JSON:
JSONAsString, чтобы сохранить объекты JSON вместо их парсинга:
JSONAsString отлично подходит для файлов в формате «один объект JSON на строку» (обычно используется с форматом JSONEachRow).
Схема для вложенных объектов
Array, JSON или Tuple) для загрузки данных:
Доступ к вложенным JSON-объектам
Игнорирование неизвестных столбцов
month:
BSON
out.bson.