JSONObjectEachRow
| Входные данные | Выходные данные | Псевдоним |
|---|---|---|
| ✔ | ✔ |
Описание
В этом формате все данные представлены в виде одного JSON-объекта, при этом каждая строка представляется как отдельное поле этого объекта, аналогично формату JSONEachRow.
Пример использования
Основной пример
Дано некоторый JSON:
Чтобы использовать имя объекта в качестве значения колонки, вы можете использовать специальную настройку format_json_object_each_row_column_for_object_name. Значение этой настройки устанавливается на имя колонки, которое используется в качестве ключа JSON для строки в результирующем объекте.
Выходные данные
Допустим, у нас есть таблица test с двумя колонками:
Выведем это в формате JSONObjectEachRow и используем настройку format_json_object_each_row_column_for_object_name:
Входные данные
Допустим, мы сохранили выходные данные из предыдущего примера в файл с именем data.json:
Это также работает для вывода схемы:
Вставка данных
ClickHouse позволяет:
- Произвольный порядок пар ключ-значение в объекте.
- Пропускать некоторые значения.
ClickHouse игнорирует пробелы между элементами и запятые после объектов. Вы можете передавать все объекты в одной строке. Вам не нужно разделять их переносами строк.
Обработка пропущенных значений
ClickHouse заменяет пропущенные значения на значения по умолчанию для соответствующих типов данных.
Если указан DEFAULT expr, ClickHouse использует разные правила замены в зависимости от настройки input_format_defaults_for_omitted_fields.
Рассмотрим следующую таблицу:
- Если
input_format_defaults_for_omitted_fields = 0, то значение по умолчанию дляxиaравно0(как значение по умолчанию для типа данныхUInt32). - Если
input_format_defaults_for_omitted_fields = 1, то значение по умолчанию дляxравно0, но значение по умолчанию дляaравноx * 2.
При вставке данных с input_format_defaults_for_omitted_fields = 1 ClickHouse потребляет больше вычислительных ресурсов, по сравнению с вставкой с input_format_defaults_for_omitted_fields = 0.
Выбор данных
Рассмотрим таблицу UserActivity в качестве примера:
Запрос SELECT * FROM UserActivity FORMAT JSONEachRow возвращает:
В отличие от формата JSON, нет замены невалидных последовательностей UTF-8. Значения экранируются так же, как и для JSON.
Любой набор байт может выводиться в строках. Используйте формат JSONEachRow, если уверены, что данные в таблице могут быть отформатированы как JSON без потери какой-либо информации.
Использование вложенных структур
Если у вас есть таблица с колонками типа Nested, вы можете вставлять данные JSON с той же структурой. Включите эту функцию с помощью настройки input_format_import_nested_json.
Например, рассмотрим следующую таблицу:
Как видно из описания типа данных Nested, ClickHouse обрабатывает каждый компонент вложенной структуры как отдельную колонку (n.s и n.i для нашей таблицы). Вы можете вставить данные следующим образом:
Чтобы вставить данные как иерархический JSON-объект, установите input_format_import_nested_json=1.
Без этой настройки ClickHouse выбросит исключение.
Настройки формата
| Настройка | Описание | Значение по умолчанию | Примечания |
|---|---|---|---|
input_format_import_nested_json | сопоставить вложенные данные JSON с вложенными таблицами (работает для формата JSONEachRow). | false | |
input_format_json_read_bools_as_numbers | позволяет анализировать логические значения как числа в форматах ввода JSON. | true | |
input_format_json_read_bools_as_strings | позволяет анализировать логические значения как строки в форматах ввода JSON. | true | |
input_format_json_read_numbers_as_strings | позволяет анализировать числа как строки в форматах ввода JSON. | true | |
input_format_json_read_arrays_as_strings | позволяет анализировать массивы JSON как строки в форматах ввода JSON. | true | |
input_format_json_read_objects_as_strings | позволяет анализировать объекты JSON как строки в форматах ввода JSON. | true | |
input_format_json_named_tuples_as_objects | анализировать столбцы именованных кортежей как объекты JSON. | true | |
input_format_json_try_infer_numbers_from_strings | пытаться выводить числа из строковых полей во время вывода схемы. | false | |
input_format_json_try_infer_named_tuples_from_objects | пытаться извлекать именованные кортежи из объектов JSON во время вывода схемы. | true | |
input_format_json_infer_incomplete_types_as_strings | использовать тип String для ключей, которые содержат только Null или пустые объекты/массивы во время вывода схемы в форматах ввода JSON. | true | |
input_format_json_defaults_for_missing_elements_in_named_tuple | вставлять значения по умолчанию для отсутствующих элементов в объекте JSON при разборе именованного кортежа. | true | |
input_format_json_ignore_unknown_keys_in_named_tuple | игнорировать неизвестные ключи в объекте JSON для именованных кортежей. | false | |
input_format_json_compact_allow_variable_number_of_columns | позволяет переменное количество колонок в формате JSONCompact/JSONCompactEachRow, игнорирует лишние колонки и использует значения по умолчанию для отсутствующих колонок. | false | |
input_format_json_throw_on_bad_escape_sequence | выбрасывать исключение, если строка JSON содержит неправильную экранированную последовательность. Если отключить, неправильные экранированные последовательности останутся как есть в данных. | true | |
input_format_json_empty_as_default | рассматривать пустые поля в JSON-входе как значения по умолчанию. | false. | Для сложных значений по умолчанию input_format_defaults_for_omitted_fields также должны быть включены. |
output_format_json_quote_64bit_integers | управляет экранированием 64-битных целых чисел в формате вывода JSON. | true | |
output_format_json_quote_64bit_floats | управляет экранированием 64-битных чисел с плавающей запятой в формате вывода JSON. | false | |
output_format_json_quote_denormals | включает выводы '+nan', '-nan', '+inf', '-inf' в формате вывода JSON. | false | |
output_format_json_quote_decimals | управляет экранированием десятичных значений в формате вывода JSON. | false | |
output_format_json_escape_forward_slashes | управляет экранированием косых черт в строковых выходах в формате вывода JSON. | true | |
output_format_json_named_tuples_as_objects | сериализовать столбцы именованных кортежей как объекты JSON. | true | |
output_format_json_array_of_rows | выводить массив JSON всех строк в формате JSONEachRow(Compact). | false | |
output_format_json_validate_utf8 | включает проверку последовательностей UTF-8 в форматах вывода JSON (обратите внимание, что это не влияет на форматы JSON/JSONCompact/JSONColumnsWithMetadata, они всегда проверяют utf8). | false |