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 |