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 |