事业单位网站建设工作方案,windows优化大师好不好,个人商城系统,皖icp网站建设Clickhouse新版本JSON字段数据写入方式
在Clickhouse版本22.3.1版本以上#xff0c;提供了针对JSON格式数据的新的数据类型#xff1a;JSON#xff0c;从而实现了存储此类数据由原先的结构化表结构#xff0c;更新为现在的半结构化表存储。对于新增字段#xff0c;某些同…Clickhouse新版本JSON字段数据写入方式
在Clickhouse版本22.3.1版本以上提供了针对JSON格式数据的新的数据类型JSON从而实现了存储此类数据由原先的结构化表结构更新为现在的半结构化表存储。对于新增字段某些同学刚接触可能会比较陌生这里介绍一些基本的原理和操作相关的介绍。
更多的关于clickhouse新版本的JSON字段类型介绍可以参考下面这篇博文
Clickhouse JSON表字段方法详解处理半结构化/结构化数据方法
本文主要介绍当表字段类型定义为JSON格式后数据插入的多种方法
准备工作
创建一张数据表json_test其中建表语句如下所示
CREATE TABLE test.mail_ods.json_test
(repo_name String,event String,data Object(json),accounts Array(String)
)
ENGINE MergeTree
ORDER BY tuple()一、以INSERT VALUES方式插入
利用Clickhouse的HTTP请求方式进行数据插入
echo INSERT INTO test.json_test values (pioug/yield-data, PushEvent, {\os\: \android\, \carrier\: \5G\}, [{\account\:\lisi\, \active\:false}]) | curl -u default:123 http://localhost:8123/ --data-binary -这里需要注意的是以values方式插入时要记得在对应JSON字段的值前后加上单引号否则会报错
cho INSERT INTO mail_ods.json_test values (pioug/yield-data, PushEvent, {\os\: \android\, \carrier\: \5G\}, [{\account\:\lisi\, \active\:false}]) | curl -u default:123 http://localhost:8123/ --data-binary -
Code: 62. DB::Exception: Cannot parse expression of type Object(json) here: {os: android, carrier: 5G}, [{account:lisi, active:false}])
: While executing ValuesBlockInputFormat. (SYNTAX_ERROR) (version 22.4.6.53 (official build))
同时要记得对字段内的key-value值加反斜杠进行转义。
二、指定Format格式插入
Clickhouse支持的多种Format输入输出格式包括
Formats for Input and Output Data
对于JSON类型格式的输入输出可以参考
Importing and exporting JSON data in ClickHouse
这里我们给出示例对于JSON数据如果想要实现每个key对应表中的字段value值作为表中的字段值存入的话需要使用Format JSONEachRow格式来插入数据
JSON数据
{repo_name: pioug/yield-data,event: PushEvent,data: {os: android,carrier: 5G},accounts: [{\account\:\lisi\, \active\:false}]
}使用Format JSONEachRow格式插入方式如下所示
echo INSERT INTO mail_ods.json_test Format JSONEachRow {repo_name: pioug/yield-data, event:PushEvent, data: {os: android, carrier: 5G}, accounts: [{\account\:\lisi\, \active\:false}]} | curl -u default:123 http://localhost:8123/ --data-binary -此时需要注意的是JSONEachRow后面紧跟着的是一个完整的JSON结构的数据不需要再像insert values时那样加单引号。比如对于accounts中括号[]里为了表示String用的是双引号而不是之前的单引号。
插入时会根据key对应表中的字段value写入表中对应字段的值。