在使用 Kafka 导入数据导 ByteHouse 时,如果遇到源数据有嵌套 JSON 的情况,希望对源数据进行解析并导入时,可以借助虚拟列和解析函数进行导入。本文将针对这种场景,对导入方式进行详细说明。
Kafka 表有一个虚拟列(Virtual Column)_content (String)。_content的内容就是每一行的JSON字符串。解析思路就是用 JSONExtract 函数,从完整的_content字符串信息根据 JSON path 提取单独的列。
{ "npc_info": { "npc": "bedok" }, "case_info": { "time_info": { "year":"2021" }, "offence": "stealing", "case_no": 123 } }
计划将数据通过如下格式导入到目标表
Column | Target Type | Expression | Value |
---|---|---|---|
npc | String | JSONExtract(_content, 'npc_info', 'npc', 'String') | "bedok" |
year | String | JSONExtract(_content, 'case_info', 'time_info', 'year', 'String') | "2021" |
offence | String | JSONExtract(_content, 'case_info', 'offence', 'String') | "stealing" |
case_no | Int64 | JSONExtract(_content, 'case_info', 'case_no', 'Int64') | 123 |
Kafka 数据导入和 JSON 解析完成。
JSONExtract 函数的用法和社区 ClickHouse 一致。
JSONExtract(json[, indices_or_keys…], Return_type) JSONExtractRaw(json[, indices_or_keys…])