一种基于clickhouse的非结构化数据的处理方法和装置
技术领域
1.本发明属于大数据技术领域,具体涉及一种基于clickhouse的非结构化数据的处理方法和装置。
背景技术:
2.非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。包括所有格式的办公文档、文本、图片、xml, html、各类报表、图像和音频/视频信息等。
3.clickhouse为一个用于olap(online analytical processing,联机分析处理)的列式数据库管理系统,其作为计算密集型和存储密集型并重的数据分析引擎,以其轻量和易使用的特性而被越来越广泛地应用在大数据领域中。
4.在网约车领域,由于乘客端请求打车服务时会产生一个订单,该订单存储有乘客端的发起时间和发起地点,打车系统获取该订单的相关信息,并基于该发起地点获取周围司机端的相关信息,并将司机端的相关信息打包为一个json格式文件(javascript object notation, js 对象简谱是一种轻量级数据交换文件)发送给网约车系统,打包后的json格式文件为非结构化数据,其内部包含有多个嵌套层级,由于非结构化数据的文件不便于查询和分析,故需解析并转化为算法或二维表的形式,以方便技术人员查阅和提取。
5.现有相关技术中,由于嵌套数据的嵌套层级不稳定,需要通过实时计算引擎调用解析函数采用多重循环逐层解析嵌套结构,但嵌套数据的数量较多时,逐层解析的效率较低。且解析后的层级节点存在大量重复数据,存储于数据库后不方便技术人员查阅。
技术实现要素:
6.本发明的目的是要解决上述的技术问题,提供一种基于clickhouse的非结构化数据的处理方法和装置。
7.为了解决上述问题,本发明按以下技术方案予以实现的:第一方面,本发明提供了一种基于clickhouse的非结构化数据的处理方法,包括:获取非结构化数据;所述非结构数据为json数据格式,所述非结构数据含有若干层级节点,每一层级节点包括名称和数值;识别所述非结构化数据是否为嵌套数据;若所述非结构化数据为嵌套数据,则递归转换所述非结构化数据为非嵌套数据;若所述非结构化数据为非嵌套数据,则解析所述非结构化数据;提取解析后的所述非结构数据的每一层级节点的数值;基于所述非结构化数据的层级节点进行一致性哈希去重;将去重后存留的数值写入clickhouse中。
8.结合第一方面,本发明还提供了第一方面的第1种实施方式,递归转换所述非结构化数据为非嵌套数据,包括:
跳转至所述非结构化数据的数组;将所述数组map转换为多行数组对象;对每一行数组对象之间进行笛卡尔积;再次识别所述非结构化数据是否为嵌套数据;若是,则返回跳转所述非结构化数据的数组的步骤;若否,则解析所述非结构化数据。
9.结合第一方面,本发明还提供了第一方面的第2种实施方式,在解析所述非结构化数据时,取最近k层的父节点的名称作为前缀生成所述非结构数据的子节点的名称。
10.结合第一方面,本发明还提供了第一方面的第3种实施方式,基于所述非结构化数据的层级节点进行一致性哈希去重,具体为:将所述非结构化数据的层级节点全错位排列;将全错位排列后的层级节点按照顺序映射到预设的哈希环中;查找哈希值相同的层级节点;若存在相同哈希值的层级节点,则比较所述层级节点的地址值是否相同;若层级节点的地址值相同,则保留一个该哈希值的层级节点。
11.结合第一方面,本发明还提供了第一方面的第4种实施方式,将所述数值写入clickhouse中,具体为:将所述数值写入所述clickhouse的本地表中;基于所述本地表创建clickhouse的分布式表。
12.结合第一方面,本发明还提供了第一方面的第5种实施方式,在获取非结构化数据前,还包括:获取所述clickhouse的表引擎的主题分区数量;建立所述表引擎的表,并接收所述非结构化数据;所述非结构化数据存储于所述表引擎的某个分区中。
13.结合第一方面,本发明还提供了第一方面的第6种实施方式,建立所述表引擎的表接收所述非结构化数据后,还包括:识别所述非结构化数据是否为合法json数据;若为合法json数据,则识别所述非结构化数据是否嵌套;若为非法json数据,则查找并替换所述非结构化数据中的非法字符。
14.第二方面,本发明提供了一种基于clickhouse的非结构化数据的处理装置,包括:获取模块,所述获取模块用于获取非结构化数据;所述非结构数据为json数据格式,所述非结构数据含有若干层级节点,每一层级节点包括名称和数值;识别模块,所述识别模块用于识别所述非结构化数据是否为嵌套数据;递归转换模块,所述递归转换模块用于若所述非结构化数据为嵌套数据,则递归转换所述非结构化数据为非嵌套数据;解析模块,所述解析模块用于若所述非结构化数据为非嵌套数据,则解析所述非结构化数据;提取模块,所述提取模块用于提取解析后的所述非结构数据的每一层级节点的数值;去重模块,所述去重模块用于基于所述非结构化数据的层级节点进行一致性哈希
去重;写入模块,所述写入模块用于将去重后存留的数值写入clickhouse中。
15.第三方面,本发明提供了一种电子设备,包括至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,所述至少一个处理器执行指令时,具体执行如第一方面中任一项所述的一种基于clickhouse的非结构化数据的处理方法。
16.第四方面,本发明提供了一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时,具体执行如第一方面中任一项所述的一种基于clickhouse的非结构化数据的处理方法。
17.与现有技术相比,本发明的有益效果是:本技术实施例中,基于 clickhouse的表引擎实时接入解析后的数据,可以最低的计算资源保障吞吐最大化,可提高对非结构化数据中嵌套数据的解析效率,并通过一致性哈希实时去重,实时进行数据清洗,使嵌套数据解析过程满足幂等性。
附图说明
18.下面结合附图对本发明的具体实施方式作进一步详细的说明,其中:图1是本发明的一种基于clickhouse的非结构化数据的处理方法的流程示意图;图2是本发明的一种基于clickhouse的非结构化数据的处理装置的结构示意图。
具体实施方式
19.以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
20.下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
21.在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
22.在网约车领域,乘客端请求打车服务时会产生一个订单,该订单存储有乘客端的发起时间和发起地点,打车系统获取该订单的相关信息,并基于该发起地点获取周围司机端的相关信息,并将司机端的相关信息打包为一个json格式文件(javascript object notation, js 对象简谱是一种轻量级数据交换文件)发送给网约车系统,打包后的json格式文件为非结构化数据,其内部包含有多个嵌套层级,由于json格式文件不便于查询和分析,故需解析并转化为算法或二维表的形式,以方便技术人员查阅和提取。
23.由于非结构化数据的嵌套层级不固定,普通循环方法难以将所述非结构化数据完全解析,但设置多个循环会产生多个变量,且随着嵌套层级的增加,设置变量和维护变得愈
发困难。且解析后的层级节点容易出现大量重复数据,不方便技术人员查阅。
24.实施例1如图1所示,本发明所述的一种基于clickhouse的非结构化数据的处理方法,包括:获取非结构化数据;所述非结构数据为json数据格式,所述非结构数据含有若干层级节点,每一层级节点包括名称和数值;识别所述非结构化数据是否为嵌套数据;若所述非结构化数据为嵌套数据,则递归转换所述非结构化数据为非嵌套数据;若所述非结构化数据为非嵌套数据,则解析所述非结构化数据;提取解析后的所述非结构数据的每一层级节点的数值;基于所述非结构化数据的层级节点进行一致性哈希去重;将去重后存留的数值写入clickhouse中。
25.本实施例中,基于 clickhouse的表引擎实时接入解析后的数据,可以最低的计算资源保障吞吐最大化,可提高对非结构化数据中嵌套数据的解析效率,并通过一致性哈希实时去重,实时进行数据清洗,使嵌套数据解析过程满足幂等性。
26.步骤1:获取非结构化数据;所述非结构数据为json数据格式,所述非结构数据含有若干层级节点,每一层级节点包括名称和数值。
27.具体的,在网约车领域,乘客端发起打车请求时,网约车系统会基于乘客端的请求出发地址,搜集该请求出发地址附近的司机端的数据,并将这些数据打包为一个json格式文件,这个json格式文件嵌套有多个层级节点,每个层级节点包含有一个键值对,其中键对应于该层级节点的名称,值对应于该层级节点的数值。例如,打包的json格式文件包含有三个层级,第一层级名称为订单,对应的数值为该订单的编号,第二层级的名称为司机,对应的数值为该辆网约车对应的司机姓名,第三层级的名称为分数,对应的数值为网约车平台对该司机的具体评分。
28.步骤2:识别所述非结构化数据是否为嵌套数据;具体的,嵌套的json数据包括嵌套json对象和嵌套json数组,嵌套json对象和嵌套json数组都有其规定的数据格式,可通过识别该非结构化数据的数据格式来识别该该非结构化数据是否为嵌套数据。
29.步骤3:若所述非结构化数据为嵌套数据,则递归转换所述非结构化数据为非嵌套数据;具体的,当识别该非结构化数据为嵌套数据时,通过调用递归函数,逐层解析所述非结构化数据中层级节点的名称和数值,将非结构化数据中的多维数组转换为一维数组,实现数据的扁平化,便于后续解析过程。且采用递归的方式可保留原始数据,可实现数据重放解析的过程,便于技术人员查找解析过程中的问题。
30.在步骤3中,递归转换所述非结构化数据为非嵌套数据,具体包括以下步骤:步骤301:跳转至所述非结构化数据的数组;步骤302:将所述数组map转换为多行数组对象;步骤303:对每一行数组对象之间进行笛卡尔积;步骤304:再次识别所述非结构化数据是否为嵌套数据;若是,则返回跳转至所述
非结构化数据的数组的步骤;若否,则解析所述非结构化数据。
31.在步骤301~步骤304中,由于无法直接解析获得嵌套的非结构化数据中的数值,在网约车领域中,每个订单获得的数据种类和数据数量是一致的,进而使得打包好的json格式的非结构化数据的每一层级中每一层级节点对应的数据项的数量是一致的,通过这个特点,采用map转换将多维数组转换为多行数组对象,使得转换后的每一行数组对象的长度相等,并通过调用笛卡尔积函数对每一行数组对象进行笛卡尔积,采用递归的方式将嵌套数据转换为非嵌套数据,其中递归函数的终止条件是数据结构中不再存在嵌套的json数据结构。
32.步骤4:若所述非结构化数据为非嵌套数据,则解析所述非结构化数据;具体的,当识别该非结构化数据为非嵌套数据时,解析该非结构化数据,并提取该非结构化数据中每一层级节点的名称和数值。
33.在一优选实施例中,在解析所述非结构化数据时,取最近k层的父节点的名称作为前缀生成所述非结构数据的子节点的名称。给子节点命名时,取最近k层父节点的名称作为前缀,可避免不同层级节点出现重名的情况,便于筛选出解析后产生的重复的层级节点。例如,打包的json格式文件包含有三个层级,第一层级的名称为订单,第二层级的名称为司机,第三层级的名称为分数,首先解析第一层并产生第一层级节点,第一层级节点的名称为订单,再解析第二层级时,第一层级节点为第二层级节点的父节点,第二层级节点的名称为订单_司机,解析第三层级节点时,第一层级节点和第二层级节点均为第三层级节点的父节点,第三层级节点的名称为订单_司机_分数。
34.步骤5:提取解析后的所述非结构数据的每一层级节点的数值;具体的,解析后的数值可直接存储于clickhouse中,故按照键值对的方式将非结构化数据中每一层级节点的数值提取出来,便于直接转换为算法或二维表的形式。
35.步骤6:基于所述非结构化数据的层级节点进行一致性哈希去重;具体的,在将嵌套的非结构化数据转化为非嵌套的非结构化数据时,由于采用笛卡尔积递归转换的方式,在对每一行数组对象进行笛卡尔积时,产生了大量重复数据,这些数据在存储于数据库中后,对技术人员查阅和调用数据存在较大困难,故采用一致性哈希的方式对这些数据进行去重处理。
36.步骤6中一致性哈希的具体步骤为:步骤601:将所述非结构化数据的层级节点全错位排列;步骤602:将全错位排列后的层级节点按照顺序映射到预设的哈希环中;步骤603:查找哈希值相同的层级节点;步骤604:若存在相同哈希值的层级节点,则比较所述层级节点的地址值是否相同;步骤605:若层级节点的地址值相同,则保留一个该哈希值的层级节点。
37.具体的,一般来说,若两个层级节点的相同,则两个层级节点的哈希值相同,而哈希值相同的两个层级节点不一定相同,故先通过选出哈希值相同的层级节点,缩小需要比对的层级节点的范围,可提高去重的效率。而将层级节点全错位排列可降低层级节点之间名称的冲突概率,避免层级节点在哈希环上分布不均匀造成的数据倾斜的问题。
38.步骤7:将去重后存留的数值写入clickhouse中。
39.具体的,该数值为给定的clickhouse数据类型。
40.步骤7中写入clickhouse的具体步骤为:步骤701:将所述数值写入所述clickhouse的本地表中;步骤702:基于所述本地表创建clickhouse的分布式表。
41.具体的,由于分布式表本身不存储数据,但是采用分布式访问的方式查阅clickhouse中存储的数据时,需要分布式表提供的数据框架,而本地表中存储有相关数据,故在创建本地表后,基于本地表创建clickhouse的分布式表,便于分布式访问。
42.在步骤1之前,还包括以下步骤:步骤8:获取所述clickhouse的表引擎的主题分区数量;步骤9:建立所述表引擎的表,并接收所述非结构化数据;所述非结构化数据存储于所述表引擎的某个分区中。
43.具体的,基于 clickhouse中kafka表引擎实时接入解析后的数据,可以最低的计算资源保障吞吐最大化,快速接收解析后的非结构化数据,避免数据堆积,可提高对非结构化数据中嵌套数据的解析效率。
44.本实施例中,通过kafka(kafka是一种高吞吐量的分布式发布订阅消息系统)发送非结构化数据给clickhouse,实现数据同步,在clickhouse接收非结构化数据时,非结构化数据会自动分配kafka表引擎的主题的分区中,容易造成某个分区接收数据过多,而另外分区没有数据的问题,故为避免该问题,在clickhouse接收数据前,获取kafka表引擎的主题分区数量,并基于该分区数量创建一定的表,这些表会均分kafka表引擎的主题分区,表的数量应小于或等于分区数,避免出现空表的现象。
45.在步骤9之后,还包括步骤10:识别所述非结构化数据是否为合法json数据;若为合法json数据,则识别所述非结构化数据是否嵌套;若为非法json数据,则查找并替换所述非结构化数据中的非法字符。
46.具体的,当非结构化数据为非法json数据时,在解析过程中容易出现错误导致解析停止,故clickhouse接收非结构化数据后,对非结构化数据进行检测,识别非结构化数据中不满足json数据格式的非法json数据,并利用替换的方式替换掉非法json数据中的非法字符,在不停止解析的前提下,可对全部非结构化数据进行解析,提高了对脏数据的容忍性。
47.综上所述,本发明执行时,一方面,通过基于 clickhouse的表引擎实时接入解析后的数据,可以最低的计算资源保障吞吐最大化,可提高对非结构化数据中嵌套数据的解析效率,并通过一致性哈希实时去重,实时进行数据清洗,使嵌套数据解析过程满足幂等性;另一方面,当识别该非结构化数据为嵌套数据时,通过调用递归函数,逐层解析所述非结构化数据中层级节点的名称和数值,将非结构化数据中的多维数组转换为一维数组,实现数据的扁平化,便于后续解析过程。且采用递归的方式可保留原始数据,可实现数据重放解析的过程,便于技术人员查找解析过程中的问题。此外,在解析所述非结构化数据时,取最近k层的父节点的名称作为前缀生成所述非结构数据的子节点的名称,可避免不同层级节点出现重名的情况,便于筛选出解析后产生的重复的层级节点。
48.本实施例所述的基于clickhouse的非结构化数据的处理方法的其他步骤参见现
有技术。
49.实施例2如图2所示,第二方面,本发明公开了一种基于clickhouse的非结构化数据的处理装置,包括获取模块m1、识别模块m2、递归转换模块m3、解析模块m4、提取模块m5、去重模块m6、写入模块m7。
50.获取模块m1用于获取非结构化数据;所述非结构数据为json数据格式,所述非结构数据含有若干层级节点,每一层级节点包括名称和数值;识别模块m2用于识别所述非结构化数据是否为嵌套数据;递归转换模块m3用于若所述非结构化数据为嵌套数据,则递归转换所述非结构化数据为非嵌套数据;解析模块m4用于若所述非结构化数据为非嵌套数据,则解析所述非结构化数据;提取模块m5用于提取解析后的所述非结构数据的每一层级节点的数值;去重模块m6用于基于所述非结构化数据的层级节点进行一致性哈希去重;写入模块m7用于将去重后存留的数值写入clickhouse中。
51.综上所述,本实施例所述装置在运行时,能实现实施例1中所述的基于clickhouse的非结构化数据的处理方法的全部步骤,以实现实施例1中所达到的技术效果。
52.本实施例所述的基于clickhouse的非结构化数据的处理装置的其它结构参见现有技术。
53.实施例3本发明还公开一种电子设备,至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,所述至少一个处理器执行指令时,具体实现以下的步骤:获取非结构化数据;所述非结构数据为json数据格式,所述非结构数据含有若干层级节点,每一层级节点包括名称和数值;识别所述非结构化数据是否为嵌套数据;若所述非结构化数据为嵌套数据,则递归转换所述非结构化数据为非嵌套数据;若所述非结构化数据为非嵌套数据,则解析所述非结构化数据;提取解析后的所述非结构数据的每一层级节点的数值;基于所述非结构化数据的层级节点进行一致性哈希去重;将去重后存留的数值写入clickhouse中。
54.实施例4本发明还公开一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时,具体实现以下步骤:获取非结构化数据;所述非结构数据为json数据格式,所述非结构数据含有若干层级节点,每一层级节点包括名称和数值;识别所述非结构化数据是否为嵌套数据;若所述非结构化数据为嵌套数据,则递归转换所述非结构化数据为非嵌套数据;若所述非结构化数据为非嵌套数据,则解析所述非结构化数据;提取解析后的所述非结构数据的每一层级节点的数值;
基于所述非结构化数据的层级节点进行一致性哈希去重;将去重后存留的数值写入clickhouse中。
55.本公开可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。
56.计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
57.这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
58.用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,上述编程语言包括面向对象的编程语言—诸如smalltalk、c++、java等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
59.以上已经描述了本公开的各实施方式,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施方式。在不偏离所说明的各实施方式的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施方式的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其他普通技术人员能理解本文披露的各实施方式。
技术特征:
1.一种基于clickhouse的非结构化数据的处理方法,其特征在于,包括:获取非结构化数据;所述非结构数据为json数据格式,所述非结构数据含有若干层级节点,每一层级节点包括名称和数值;识别所述非结构化数据是否为嵌套数据;若所述非结构化数据为嵌套数据,则递归转换所述非结构化数据为非嵌套数据;若所述非结构化数据为非嵌套数据,则解析所述非结构化数据;提取解析后的所述非结构数据的每一层级节点的数值;基于所述非结构化数据的层级节点进行一致性哈希去重;将去重后存留的数值写入clickhouse中。2.根据权利要求1所述的一种基于clickhouse的非结构化数据的处理方法,其特征在于,递归转换所述非结构化数据为非嵌套数据,包括:跳转至所述非结构化数据的数组;将所述数组map转换为多行数组对象;对每一行数组对象之间进行笛卡尔积;再次识别所述非结构化数据是否为嵌套数据;若是,则返回跳转至所述非结构化数据的数组的步骤;若否,则解析所述非结构化数据。3.根据权利要求1所述的一种基于clickhouse的非结构化数据的处理方法,其特征在于:在解析所述非结构化数据时,取最近k层的父节点的名称作为前缀生成所述非结构数据的子节点的名称。4.根据权利要求1所述的一种基于clickhouse的非结构化数据的处理方法,其特征在于,基于所述非结构化数据的层级节点进行一致性哈希去重,具体为:将所述非结构化数据的层级节点全错位排列;将全错位排列后的层级节点按照顺序映射到预设的哈希环中;查找哈希值相同的层级节点;若存在相同哈希值的层级节点,则比较所述层级节点的地址值是否相同;若层级节点的地址值相同,则保留一个该哈希值的层级节点。5.根据权利要求1所述的一种基于clickhouse的非结构化数据的处理方法,其特征在于,将所述数值写入clickhouse中,具体为:将所述数值写入所述clickhouse的本地表中;基于所述本地表创建clickhouse的分布式表。6.根据权利要求1所述的一种基于clickhouse的非结构化数据的处理方法,其特征在于,在获取非结构化数据前,还包括:获取所述clickhouse的表引擎的主题分区数量;建立所述表引擎的表,并接收所述非结构化数据;所述非结构化数据存储于所述表引擎的某个分区中。7.根据权利要求6所述的一种基于clickhouse的非结构化数据的处理方法,其特征在于,建立所述表引擎的表接收所述非结构化数据后,还包括:识别所述非结构化数据是否为合法json数据;
若为合法json数据,则识别所述非结构化数据是否嵌套;若为非法json数据,则查找并替换所述非结构化数据中的非法字符。8.一种基于clickhouse的非结构化数据的处理装置,其特征在于,包括:获取模块,所述获取模块用于获取非结构化数据;所述非结构数据为json数据格式,所述非结构数据含有若干层级节点,每一层级节点包括名称和数值;识别模块,所述识别模块用于识别所述非结构化数据是否为嵌套数据;递归转换模块,所述递归转换模块用于若所述非结构化数据为嵌套数据,则递归转换所述非结构化数据为非嵌套数据;解析模块,所述解析模块用于若所述非结构化数据为非嵌套数据,则解析所述非结构化数据;提取模块,所述提取模块用于提取解析后的所述非结构数据的每一层级节点的数值;去重模块,所述去重模块用于基于所述非结构化数据的层级节点进行一致性哈希去重;写入模块,所述写入模块用于将去重后存留的数值写入clickhouse中。9.一种电子设备,包括至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,其特征在于:所述至少一个处理器执行指令时,具体执行如权利要求1至7中任一项所述的一种基于clickhouse的非结构化数据的处理方法。10.一种存储介质,存储有计算机程序,其特征在于:所述计算机程序被处理器执行时,具体执行如权利要求1至7中任一项所述的一种基于clickhouse的非结构化数据的处理方法。
技术总结
本发明公开了一种基于ClickHouse的非结构化数据的处理方法,包括:获取非结构化数据;识别非结构化数据是否为嵌套数据;若非结构化数据为嵌套数据,则递归转换所述非结构化数据为非嵌套数据;若非结构化数据为非嵌套数据,则解析非结构化数据;提取解析后的非结构数据的每一层级节点的数值;基于非结构化数据的层级节点进行一致性哈希去重;将去重后存留的数值写入ClickHouse中。基于ClickHouse的表引擎实时接入解析后的数据,可以最低的计算资源保障吞吐最大化,可提高对非结构化数据中嵌套数据的解析效率,并通过一致性哈希实时去重,实时进行数据清洗,使嵌套数据解析过程满足幂等性。性。性。
技术研发人员:冯沐强
受保护的技术使用者:广州宸祺出行科技有限公司
技术研发日:2022.03.10
技术公布日:2022/4/15
转载请注明原文地址:https://win.8miu.com/read-1144754.html