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

Объектный тип данных

Deprecated feature

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


Хранит документы 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]}}}