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

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