[go: up one dir, main page]

跳到主要内容
跳到主要内容

对象数据类型

Deprecated feature

此功能尚未准备好投入生产并已被弃用。 如果您需要处理 JSON 文档,请考虑使用 本指南。支持 JSON 对象的新实现处于测试阶段。更多详情请见 这里


将 JavaScript 对象表示法 (JSON) 文档存储在单个列中。

当启用 use_json_alias_for_old_object_type 时,JSON 可以作为 Object('json') 的别名。

示例

示例 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 家族表,排序键必须提取到其列中。例如,要插入一个以 JSON 格式压缩的 HTTP 访问日志文件:

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]}}}