跳至主要内容

对象数据类型 (已弃用)

此功能尚未投入生产,现已弃用。如果您需要处理 JSON 文档,请考虑使用本指南。一个新的实现来支持 JSON 对象正在进行中,可以追踪这里


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

JSON 可以在设置use_json_alias_for_old_object_type 时用作 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 系列表,排序键必须提取到其列中。例如,要插入压缩的 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]}}}