You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法运行Clickhouse文档中JSON临时列示例,报错求助

问题原因分析

错误提示显示无法解析对象,根源在于message列定义为JSON类型且默认值直接赋值为message_raw(字符串类型),ClickHouse会自动尝试将字符串转为JSON对象,但插入的message_raw内容包含未正确处理的换行符(\n),且未显式调用JSON解析函数,导致解析失败。

解决方案

提供两种可行的修复方案:

方案1:修改表定义,显式解析JSON字符串

将message列的默认值改为用JSONParseRaw函数解析message_raw,确保字符串被正确转为JSON对象:

DROP TABLE IF EXISTS github_json;

SET allow_experimental_object_type = 1;
CREATE table github_json
(
   event_type LowCardinality(String) DEFAULT JSONExtractString(message_raw, 'type'),
   repo_name LowCardinality(String) DEFAULT JSONExtractString(message_raw, 'repo.name'),
   message JSON DEFAULT JSONParseRaw(message_raw), -- 显式调用解析函数
   message_raw String EPHEMERAL
) ENGINE = MergeTree ORDER BY (event_type, repo_name);

插入语句保持不变,此时ClickHouse会正确解析message_raw中的JSON字符串。

方案2:调整插入语句,移除字符串内的换行符

如果不想修改表定义,可以将插入的JSON字符串中的\n移除,确保JSON格式完全合法:

INSERT INTO github_json (message_raw) FORMAT JSONEachRow {"message_raw": "{\"type\":\"PushEvent\",\"created_at\": \"2022-01-04 07:00:00\", \"actor\":{\"avatar_url\":\"https://avatars.githubusercontent.com/u/41898282?\",\"display_login\":\"github-actions\",\"gravatar_id\":\"\",\"id\":41898282,\"login\":\"github-actions[bot]\",\"url\":\"https://api.github.com/users/github-actions[bot]\"},\"repo\":{\"id\":410071248,\"name\":\"pioug/yield-data\",\"url\":\"https://api.github.com/repos/pioug/yield-data\"}}"}

这种方式避免了未转义换行符导致的JSON解析失败问题。

内容的提问来源于stack exchange,提问作者cjroebuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:22:39