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 |