本发明涉及数据etl性能领域,尤其是一种提升数据etl性能的方法及装置。
背景技术:
1、传统使用spark或者flink进行数据etl的操作,存在的主要性能瓶颈如下:
2、(1)基于java/scala语言的jvm语言,进行转换、清洗和解析数据(例如json)等,相对于c/c++耗时,占用内存高,当处理超大记录时,容易oom。
3、(2)传统的数据处理、数据转换或者函数调用,是拆分成一个个的操作符,然后进行分支的判断和计算,每条数据都要调用一次操作符,数据量大时,非常耗时。
4、如图1所示,计算机不同的存储介质,计算性能的对比。从左往右,计算响应的速度是越来越慢。在cpu(寄存器)中数据处理的性能是最高的。在cpu(寄存器)中访问数据的速度是在内存中访问数据的速度的300倍,是在磁盘中访问数据的速度的3000万倍。
5、(3)传统的数据处理,不能实现运行时代码自动生成
6、如图2所示,左边是传统的数据库管理系统中对函数调用的底层的数据处理的模型。这里是将函数的表达式拆分成一个个的操作符,然后进行分支的判断和计算。右边是运行时代码自动生成,首先将表达式转换成对应的代码,然后编译执行。通过代码自动生成的方式,可以消除大量操作符的调用,并且是没有ifelse的分支。
技术实现思路
1、为了解决现有技术存在的上述问题,本发明提供一种提升数据etl性能的方法及装置,通过clickhouse提供的clickhouse-local的二进制工具,并在该工具源码的基础之上进行自定义函数的扩展,实现对数据的处理和异常容错,并利用其向量化执行引擎和代码自动生成能力,对数据进行处理处理,在hdfs生成大数据平台hive表格式的文件,并移动至hive表,刷新hive表分区(如果存在分区);向量化执行引擎就是利用simd指令集,能够执行并行的操作,对于执行相同操作的数据,一条simd指令可以同时处理多条数据,在cpu(寄存器)层面做了大量的优化,具备高性能的数据处理能力。
2、为实现上述目的,本发明采用下述技术方案:
3、在本发明一实施例中,提出了一种提升数据etl性能的方法,该方法包括:
4、通过clickhouse提供的clickhouse-local工具,并在该工具源码的基础之上自定义数据处理函数;
5、通过自定义的数据处理函数,利用cpu的simd指令集,对数据进行处理和异常容错,生成大数据平台格式的数据文件写入目标存储,并移动至hive表,如果hive表存在分区,则刷新hive表分区。
6、进一步地,对于异常无法处理的数据,通过自定义的数据处理函数,执行过滤或者使用单独的字段专门存储。
7、进一步地,每个分布式数据集的分区创建一条利用cpu的simd指令集来处理数据的管道,并在每个分区的管道中创建物化视图,并指定hdfs引擎基表;每个分布式数据集的分区中的数据以迭代器的形式存在。
8、进一步地,物化视图的创建规则如下:
9、物化视图的创建语句,在as关键字的后面通过sql实现数据处理;
10、自定义的数据处理函数,对传入的数据进行处理,返回两列:第一列为无法处理的异常数据,第二列为正常处理数据,以嵌套类型返回。;
11、通过where条件对数据进行过滤;
12、在select语句的后面,对嵌套字段的数据进行展开,同时对展开的嵌套字段的数据使用任意的clickhouse函数进行处理,处理后的数据返回,并存入hdfs引擎基表;
13、临时表的数据来源为标准输入的数据;
14、当数据插入临时表,物化视图自动执行数据处理,将处理后的数据写入hdfs引擎基表。
15、进一步地,hdfs引擎基表的创建规则如下:
16、基表的表引擎为hdfs,hdfs引擎可指定数据存储的hdfs路径以及文件格式;
17、创建基表时,字段名称和字段数据类型与物化视图的sql逻辑返回的字段和字段数据类型保持一致;
18、数据存储的hdfs路径作为临时目录,通过分区编号进行标识,分区编号根据所在的分区进行动态调整。
19、在本发明一实施例中,还提出了一种提升数据etl性能的装置,该装置包括:
20、函数定义模块,用于通过clickhouse提供的clickhouse-local工具,并在该工具源码的基础之上自定义数据处理函数;
21、数据处理模块,用于通过自定义的数据处理函数,利用cpu的simd指令集,对数据进行处理和异常容错,生成大数据平台格式的数据文件写入目标存储,并移动至hive表,如果hive表存在分区,则刷新hive表分区。
22、进一步地,对于异常无法处理的数据,通过自定义的数据处理函数,执行过滤或者使用单独的字段专门存储。
23、进一步地,每个分布式数据集的分区创建一条利用cpu的simd指令集来处理数据的管道,并在每个分区的管道中创建物化视图,并指定hdfs引擎基表;每个分布式数据集的分区中的数据以迭代器的形式存在。
24、进一步地,物化视图的创建规则如下:
25、物化视图的创建语句,在as关键字的后面通过sql实现数据处理;
26、自定义的数据处理函数,对传入的数据进行处理,返回两列:第一列为无法处理的异常数据,第二列为正常处理数据,以嵌套类型返回。;
27、通过where条件对数据进行过滤;
28、在select语句的后面,对嵌套字段的数据进行展开,同时对展开的嵌套字段的数据使用任意的clickhouse函数进行处理,处理后的数据返回,并存入hdfs引擎基表;
29、临时表的数据来源为标准输入的数据;
30、当数据插入临时表,物化视图自动执行数据处理,将处理后的数据写入hdfs引擎基表。
31、进一步地,hdfs引擎基表的创建规则如下:
32、基表的表引擎为hdfs,hdfs引擎可指定数据存储的hdfs路径以及文件格式;
33、创建基表时,字段名称和字段数据类型与物化视图的sql逻辑返回的字段和字段数据类型保持一致;
34、数据存储的hdfs路径作为临时目录,通过分区编号进行标识,分区编号根据所在的分区进行动态调整。
35、在本发明一实施例中,还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现前述提升数据etl性能的。
36、在本发明一实施例中,还提出了一种计算机可读存储介质,计算机可读存储介质存储有执行提升数据etl性能的计算机程序。
37、有益效果:
38、1、本发明利用spark或者flink丰富的生态系统,接入数据源,数据处理通过向量化执行引擎,实现了高性能的数据处理。
39、2、本发明对于无法处理的数据,具备容错功能。
40、3、本发明轻量级,使用简单,无需部署clickhouse-server,数据处理逻辑通过clickhouse-local工具自定义的函数实现,在spark/flink代码中,只需要将数据通过标准输入传递给clickhouse-local工具即可完成处理。