Перейти к основному содержимому
Перейти к основному содержимому

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