JSONObjectEachRow
| Input | Output | Alias |
|---|---|---|
| ✔ | ✔ |
Описание
В этом формате все данные представлены как один 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 |