当前位置: 首页 > news >正文

Clickhouse新版本JSON字段数据写入方式

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写入表中对应字段的值。

http://www.lryc.cn/news/33868.html

相关文章:

  • HNU-电路与电子学-实验2
  • 从0开始学python -49
  • Spring MVC 详解(连接、获取参数、返回数据)
  • IT女神节(致敬中国IT界永远的女神严蔚敏-数据结构)
  • Java 集合分页
  • 代码随想录之哈希表(力扣题号)
  • 如何在知行之桥EDI系统中定时自动更换交易伙伴AS2证书?
  • 辽宁千圣文化:抖音店铺怎么做二次优化?
  • 检测js代码中可能导致内存泄漏的工具
  • linux和centos读写日期到文件并对日期进行比较
  • Espressif-IDE v2.8.0 新增功能及开发方向
  • C++学习笔记之基础
  • 博弈论小课堂:零和博弈(找到双方的平衡点)
  • Redisson 分布式锁(基于v1.3.1)
  • go并发之美·多个channel合并/多个数据流合并
  • 数据库多租户实现三种方式
  • 单协议 2.4GHz CC2651R31T0RGZR/CC2651R31T0RKPR无线MCU 802.15.4,蓝牙5.2
  • 【项目精选】基于struts+hibernate的采购管理系统
  • 在找docker命令和部署?看这一篇文章就够了。
  • NTLM协议原理分析
  • SOC计算方法:电流积分+开路电压
  • linux mysql启动报错处理方案
  • Qt配置VS的编译环境(以MSVC2015 64bit为例)
  • iOS 9.3.5越狱环境安装配置
  • mac电脑解决Error: command failed: npm install --loglevel error --legacy-peer-deps
  • Java中对象的finalization机制
  • proteus光敏电阻电路的arduino仿真
  • MySql面试精选—慢查询如何优化
  • 一款OutLook信息收集工具
  • java多线程(二一)并发协作生产者消费者设计模式