无法运行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
相关产品推荐
相关产品推荐

