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

Тип данных Object

Deprecated feature

Эта функция не готова к производству и устарела. Если вам нужно работать с JSON-документами, рассмотрите возможность использования этого руководства. Новая реализация для поддержки JSON-объектов находится в бета-версии. Подробности здесь.


Хранит документы в формате JavaScript Object Notation (JSON) в одной колонке.

JSON может использоваться как псевдоним для Object('json'), когда включен параметр use_json_alias_for_old_object_type.

Пример

Пример 1

Создание таблицы с колонкой JSON и вставка данных в нее:

CREATE TABLE json
(
    o JSON
)
ENGINE = Memory
INSERT INTO json VALUES ('{"a": 1, "b": { "c": 2, "d": [1, 2, 3] }}')
SELECT o.a, o.b.c, o.b.d[3] FROM json
┌─o.a─┬─o.b.c─┬─arrayElement(o.b.d, 3)─┐
│   1 │     2 │                      3 │
└─────┴───────┴────────────────────────┘

Пример 2

Чтобы иметь возможность создать упорядоченную таблицу семейства MergeTree, ключ сортировки должен быть извлечен в свою колонку. Например, для вставки файла сжатых логов HTTP доступа в формате JSON:

CREATE TABLE logs
(
    timestamp DateTime,
    message JSON
)
ENGINE = MergeTree
ORDER BY timestamp
INSERT INTO logs
SELECT parseDateTimeBestEffort(JSONExtractString(json, 'timestamp')), json
FROM file('access.json.gz', JSONAsString)

Отображение JSON колонок

При отображении колонки JSON ClickHouse по умолчанию показывает только значения полей (поскольку внутренне она представлена как кортеж). Вы также можете отображать имена полей, установив output_format_json_named_tuples_as_objects = 1:

SET output_format_json_named_tuples_as_objects = 1

SELECT * FROM json FORMAT JSONEachRow
{"o":{"a":1,"b":{"c":2,"d":[1,2,3]}}}