此功能尚未准备好投入生产并已被弃用。 如果您需要处理 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]}}}
相关内容