对象数据类型
已弃用的功能
此功能尚未投入生产环境且已弃用。如果您需要处理 JSON 文档,请考虑使用此指南。支持 JSON 对象的新实现正在 Beta 测试中。更多详情请点击此处。
在单个列中存储 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]}}}