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 | разбирать столбцы типа NamedTuple как JSON-объекты. | true | |
input_format_json_try_infer_numbers_from_strings | пытаться распознавать числа в строковых полях при автоматическом определении схемы. | false | |
input_format_json_try_infer_named_tuples_from_objects | пытаться выводить тип NamedTuple из 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-строка содержит некорректную escape-последовательность. Если параметр отключен, некорректные escape-последовательности останутся в данных как есть. | 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 — они всегда проверяют UTF-8). | false |