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 |