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 |