CN110968634B - 大数据场景下基于xml描述实现利用可编程函数式进行etl转换处理的方法 - Google Patents
大数据场景下基于xml描述实现利用可编程函数式进行etl转换处理的方法 Download PDFInfo
- Publication number
- CN110968634B CN110968634B CN201911221164.6A CN201911221164A CN110968634B CN 110968634 B CN110968634 B CN 110968634B CN 201911221164 A CN201911221164 A CN 201911221164A CN 110968634 B CN110968634 B CN 110968634B
- Authority
- CN
- China
- Prior art keywords
- data
- function
- type
- field
- analysis
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012545 processing Methods 0.000 title claims abstract description 40
- 238000000034 method Methods 0.000 title claims abstract description 35
- 238000006243 chemical reaction Methods 0.000 title claims abstract description 34
- 230000006870 function Effects 0.000 claims abstract description 119
- 238000004458 analytical method Methods 0.000 claims abstract description 29
- 238000011068 loading method Methods 0.000 claims abstract description 16
- 238000003860 storage Methods 0.000 claims abstract description 9
- 238000007405 data analysis Methods 0.000 claims abstract description 8
- 238000012795 verification Methods 0.000 claims abstract description 7
- 238000010195 expression analysis Methods 0.000 claims description 6
- 238000004364 calculation method Methods 0.000 claims description 4
- 238000004140 cleaning Methods 0.000 description 14
- 230000014509 gene expression Effects 0.000 description 11
- 238000011161 development Methods 0.000 description 8
- 230000018109 developmental process Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 4
- 101150026173 ARG2 gene Proteins 0.000 description 2
- 101100005166 Hypocrea virens cpa1 gene Proteins 0.000 description 2
- 101100379634 Xenopus laevis arg2-b gene Proteins 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 238000012885 constant function Methods 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 238000012384 transportation and delivery Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/254—Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/81—Indexing, e.g. XML tags; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法,包括以下步骤:加载控制文件,进行数据文件类型切分;按照预设的批次量加载数据文件,遍历数据行,逐条进行处理;进行数据解析;进行字段类型校验;选择控制文件并运行数据输出数据,并存储到多种存储系统中。采用了本发明的大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法,数据解析工作交给XML解析控制,根据物流企业不同加载不同配置文件,能把不同物流数据清洗为统一的规范数据。该技术方案减少了大量的程序编码工作,且对不同数据可控可维护,且接近原生性能优异,提高了数据处理性能。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及大数据处理领域,具体是指一种大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法。
背景技术
ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗和加工,最终按照预先定义好的模型,将数据加载到目的数据仓库中去,做各种商业智能分析或者用于主数据管理体系。
具体来讲:
数据抽取:将数据从各种原始的业务系统或者非结构化文档中读取出来;
数据转换:按照预先设计好的规则将抽取得数据进行转换、清洗、加工,统一抽取的数据格式。如数据值缺失、默认值处理、非法格式、单位转化等;
数据装载:将转换完的数据按制定的规则增量或全部导入到目的数据仓库。
现有ETL技术实现主要有以下几种方式:
1、借助特定数据库提供的ETL工具(如Oracle的OWB、SQLServer DTS、Informatic、Hive Load等)实现,完全采用SQL的方式;
2、ETL工具和SQL相结合的方式。如Kettle,采用内置的加载和转换动作,把加载数据到数据仓库,再通过内置的SQL执行能力,执行清洗和转换操作完成ETL的业务逻辑;
3、完全采用编码的方式,通过高级编程语言的数据结构再结合编写的特定业务的函数完成数据加载、清洗、和转换操作;
采用编码实现的ETL实现方式各异不具有代表性,因此无法参照。但以SQL为主要技术手段,一般的数据逻辑架构如图1所示。
实现上主要通过部分数据库提供的工具把数据加载到数据仓库,如OracleSQLLoader、Hive Load、SparkSQL Beeline等。再通过SQL能力执行清洗和转换,之后加载到主题库。清洗和转换操作一般都需要把待执行的业务单元编写到“.sql”为后缀的过程文件中,然后通过命令如:hive-f trans_file.sql的方式执行该过程。
在如今移动互联网大力发展的场景下,产生大量碎片化和不规则的数据,无法(或者很难)直接把数据文件按照统一的格式导入到数据库中。数据通过工具导入到基础数据仓库,再通过SQL把目标数据提取到主题库中,采用传统的ETL技术实现,存在以下几个方面的不足:
1、数据的导入和SQLETL的提取的过程,大量消耗IO性能和计算资源;
2、无法适应大数据场景,大部分数据库分库分表存储,当面对存储数十亿或更大的数据需求时,往往无法胜任;
3、SQL的表达力不足,不能处理部分比较复杂的逻辑;
4、基础数据仓库到主题库往往需要经过多个关联、多种清洗业务,中间表较多占用较大存储空间;通过高级编程语言实现的特殊架构无法复用,只能解决特定的场景下的ETL需求。
发明内容
本发明的目的是克服了上述现有技术的缺点,提供了一种满足数据处理效率高、开发难度低、适用范围广泛的大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法。
为了实现上述目的,本发明的大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法如下:
该大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法,其主要特点是,所述的方法包括以下步骤:
(1)加载控制文件,进行数据文件类型切分;
(2)按照预设的批次量加载数据文件,遍历数据行,逐条进行处理;
(3)进行数据解析;
(4)进行字段类型校验;
(5)选择控制文件并运行数据
(6)输出数据,并存储到多种存储系统中。
较佳地,所述的步骤(3)具体包括以下步骤:
(3.1)进行基本类型解析;
(3.2)进行表达式解析;
(3.3)进行用户自定义函数类型解析。
较佳地,所述的步骤(3.1)中的基本类型解析具体包括以下步骤:
进行赋值操作。
较佳地,所述的步骤(3.2)中的表达式解析具体包括以下步骤:
进行两个基本类型变量之间的运算或基本类型变量和基本类型常量之间的运算。
较佳地,所述的步骤(3.3)中的用户自定义函数类型解析具体包括以下步骤:
(3.3.1)判断外层是否为函数,如果是,则继续步骤(3.3.2);否则,继续步骤(3.3.3);
(3.3.2)判断参数是否为函数形参,如果是,则继续步骤(3.3.1);否则,继续步骤(3.3.3);
(3.3.3)判断参数是否为常量型形参,如果是,则直接赋值给字段;否则,在数据中取值,再赋值给字段;
(3.3.4)判断内层函数中参数是否有函数类型形参,如果是,则继续步骤(3.3.1);否则,计算内层函数的返回值,外层函数的形参即为计算后的值,进行后续计算。
较佳地,所述的步骤(4)具体包括以下步骤:
(4.1)判断字段的属性,如果是取值,则继续步骤(4.2);如果是函数,继续步骤(4.3);
(4.2)校验字段值与定义的字段类型的匹配性;
(4.3)校验函数的返回值与定义的字段类型的匹配性,并校验函数的形参与实参类型的匹配性。
较佳地,所述的步骤(5)具体包括以下步骤:
(5.1)按照单个批次处理数据文件;
(5.2)通过配置方式选择控制文件并运行数据。
采用了本发明的大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法,解决了由于各家物流企业技术标准、数据格式和规范不同,开发量巨大并且难以维护的问题。采用本技术方案,数据解析工作交给XML解析控制,根据物流企业不同加载不同配置文件,能把不同物流数据清洗为统一的规范数据。该技术方案减少了大量的程序编码工作,且对不同数据可控可维护,且接近原生性能优异,提高了数据处理性能。
附图说明
图1为现有技术的ETL数据架构图。
图2为本发明的大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法的流程图。
图3为本发明的大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法的函数解析和赋值流程图。
具体实施方式
为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。
本发明的该大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法,其中包括以下步骤:
(1)加载控制文件,进行数据文件类型切分;
(2)按照预设的批次量加载数据文件,遍历数据行,逐条进行处理;
(3)进行数据解析;
(3.1)进行基本类型解析;
进行赋值操作;
(3.2)进行表达式解析;
进行两个基本类型变量之间的运算或基本类型变量和基本类型常量之间的运算;
(3.3)进行用户自定义函数类型解析;
(3.3.1)判断外层是否为函数,如果是,则继续步骤(3.3.2);否则,继续步骤(3.3.3);
(3.3.2)判断参数是否为函数形参,如果是,则继续步骤(3.3.1);否则,继续步骤(3.3.3);
(3.3.3)判断参数是否为常量型形参,如果是,则直接赋值给字段;否则,在数据中取值,再赋值给字段;
(3.3.4)判断内层函数中参数是否有函数类型形参,如果是,则继续步骤(3.3.1);否则,计算内层函数的返回值,外层函数的形参即为计算后的值,进行后续计算;
(4)进行字段类型校验;
(4.1)判断字段的属性,如果是取值,则继续步骤(4.2);如果是函数,继续步骤(4.3);
(4.2)校验字段值与定义的字段类型的匹配性;
(4.3)校验函数的返回值与定义的字段类型的匹配性,并校验函数的形参与实参类型的匹配性;
(5)选择控制文件并运行数据;
(5.1)按照单个批次处理数据文件;
(5.2)通过配置方式选择控制文件并运行数据;
(6)输出数据,并存储到多种存储系统中。
本发明的具体实施方式中,开发出了一种基于XML描述的可编程函数式的ETL转换方法。主要用于大数据处理领域,能从原始数据文件直接、快速加载到主题库的技术手段。本发明主要解决了用XML的技术手段描述数据文件的格式,包含文件字段切分、字段类型、默认值、异常值校验、时间格式校验。在处理时可添加自行开发的JAVA UDF函数,函数实参支持变量、常量、表达式、函数和运算符重载。同时函数支持多层嵌套,即内部函数的返回值作为外部函数的实参。本发明实现了XML内函数体的语法解析并在运行过程中直接编译为Java字节码的技术。有效的解决了政府、公安、电信行业巨量的数据处理需要的大量计算资源和IO性能瓶颈,有效的提高了数据处理效率和降低了数据处理开发难度。具体是指一种基于XML定义的数据解析和转换语法,使用可编程的函数完成字段描述、转换规则和具体业务逻辑,并按照预定义的规则逻辑执行的一系列技术规范。
本技术方案提出了一种基于函数式数据解析规范,通过特定语法的XML配置完成由原始数据文件直接转换为目标结果的一种技术能力。本技术方案通过定义XML控制文件描述ETL过程,再加载数据文件并应用XML中的转换逻辑。采用基于Java表达式(Expl)和用户自定义函数(UDF)的形式,充分扩展转换能力。从原始数据文件直接加载、执行清洗、转换并持久化到主题库,充分利用编程语言JIT等技术,有效提高ETL效率。采用基于Java实现的UDF,实现灵活、充分模块化,远超过SQL的函数表达能力。
如图2所示,本技术方案实现共有6个主要的技术环节,依次为:“控制文件加载”、“数据文件加载”、“解析阶段”、“类型校验”、“运行数据”、“输出数据”。而“解析阶段”包含三个解析子流程“基本类型解析”、“表达式解析”、“UDF函数类型解析”。
一、控制文件加载
控制文件的部分实施例如下:
如上XML控制文件描述了数据文件类型及该类型的数据切分方法,数据每行经过程序切分后,切分的多个字段(fields)描述了切分产生的多个数据列的转换方法。
本技术方案采用了Dom4j技术实现控制文件的XML解析。如下:
二、数据文件加载
数据文件即ETL运行所需的原始数据构成的文件。数据文件可以是TXT File、CSVFile、JSON File、Avro File等数据格式。
本技术方案实现了读取大文件可以按照设置的批次量读取,防止大文件一次性读取内存,消耗内存过大。并且在大数据场景下,单个数据文件往往较大,并不能完全放入到内存中。
读取一个Batch的实现:
读入数据,并遍历每个Batch,从batch的getEvents()获取文件内的数据行,逐条进行处理。
三、解析阶段
解析阶段分为一下几个重要的步骤:基本类型解析、表达式解析、UDF函数解析。
1)基本类型解析:
基本类型支持如下:
基本类型解析一般为简单类型的赋值操作。如:
<field type="string"default="true"value="primeton">data_vendor</field>
<field type="string">caller_number</field>
<field type="int">call_duration</field>
<field type="date"pattern="dd/MM/yy HH:mm:ss">start_time</field>
清洗时也需要部分字段有默认值,语法分析时字段field的value属性值没有以英文小括号闭合的实体。如下示例中的primeton字符串值赋值到data_vendor这个变量中。
<field type="string"default="true"value="primeton">data_vendor</field>
2)表达式解析:
表达式类型一般为两个基本类型变量或基本类型变量和基本类型常量进行的运算。如两个字符串类型相加、两个整数类型相加、整数类型和浮点数类型运算。
语法分析时字段(field)的value属性中没有小括号存在,但存在“+”(加)、“-”(减)、“*”(乘)、“/”(除)、“%”(取模)的情况。
<field type="string"default="true"value="primeton">data_vendor</field>
<field type="string"default="true"value="data_vendor+‘-’+‘subfix’">data_describe</field>//给data_vendor追加固定的后缀组成新的字段
<field type="double">user_salary</field>//用户月薪水
<field type="double">work_months</field>//工作的总月份
<field type="double"default="true"value=”user_salary*work_months”>total_salary</field>//实际的总薪水
本技术方案支持的表达式类型为Java基本的算术运算,取模运算。运算优先级遵从Java的运算表达式,并且不同类型之间运算符合Java的语法标准。表达式不支持开方运算、绝对值等运算,因为这类运算由函数实现,可使用UDF函数来实现比较复杂的表达式运算。
3)UDF函数解析:
UDF全称为:用户自定义函数(User Defined Function)。
语法分析时字段(field)的value属性中存在一个以字符串为名称(函数名称需符合Java的函数命名规范)并且有小括号包括的情况。
UDF函数实现抽象定义:
UDF函数体分析:主要解析UDF的函数名称和形式参数。形式参数可包含:无参、变量参数、常量参数、嵌套UDF函数(内部UDF函数的返回值为外层UDF函数的参数)。
函数名:
函数体小括号前面的部分。一般由字符串、数字、下划线组成的一组特定的名称。如location(receiver_tel),location即为该函数的函数名称。
函数的形式参数:
1、无参数
词法分析时value的值满足函数条件且函数体内无参数。如下示例中:unix_timestamp()获得当前系统内的Unix时间戳;
<field type="string"default="true"value="unix_timestamp()">curr_time</field>
2、常量型形参
词法分析时函数体内以英文单引号引用的值为函数体的常量型形参。如’100’,函数示例为:random_int(‘100’),生成0-100以内的随机整形数值;
<field type="string"default="true"value="random_int(‘100’)">rand_num</field>
3、变量型形参
词法分析时函数体内参数没有英文单引号引用并且不以英文小括号闭合的为函数体的变量型形参。如下示例中的receiver_tel;
<field type="string"default="true"value="location(receiver_tel)">r_num_loc</field>
4、UDF函数型形参
词法分析时函数体内没有英文单引号并且以英文小括号闭合的参数类型参数为函数体的函数型参数。如下示例中的:none(sender_num)和none(receiver_num);
<field type="string"default="true"value="yn(all_true(none(sender_num),none(receiver_num)))">all_num_null</field>
解析阶段获得到函数体的同时,使用函数名调用UdfRegistors.getUdf(udfName)函数,以检验当前系统是否已经注册并存在该函数,否则则抛出无法识别的函数异常。
递归函数处理:
在编程时,内层函数的返回值需要作为外层函数的形式参数。在词法分析时,需要判断形参是否是函数,如是函数,则需要递归处理直到内层函数的形参全部是常量和变量形参。
外层函数:
method_for(“arg0”,method_bar(“X”,Y),arg2)
其中,arg0为常量函数,method_bar(“X”,Y)为函数形参,arg2为变量形参。
如图3所示,当判断外层为函数时,则需要:
1、判断参数是否是常量型形参,是则可以直接赋值给字段;
2、判断参数是否是变量型形参,是则可在数据中取值,然后赋值给字段;
3、判断参数是否是函数形参(内层函数),是则继续校验该内层函数的形参,继续第1步;
4、直到内层函数中参数无函数类型形参,则计算该内层函数的返回值,作为外层函数的形参带入运算;
四、类型校验
上一步骤的解析阶段词法分析过程获得了字段field的属性是取值或者函数,本步骤需校验其值或函数的返回值是否能和定义的字段类型相匹配。如果是函数同时校验函数的形参和实参类型是否相匹配。
取值类型校验:
<field type="string"default="true"value="primeton">data_vendor</field>
<field type="int"default="true"value="2">call_flag</field>
如上示例中的primeton需能转换为string类型,call_flag需能转换为int类型。如果类型不能转换,则会抛出类型无法转换异常。
函数类型校验:
<field type="string"default="true"value="location(receiver_tel)">r_num_loc</field>
如上代码,需从UdfRegistors中获得location的UDF,验证其returnType是否和该字段定义type类型匹配(或者为type类型的子类型)。
五、运行数据
经过上述步骤,确保了控制文件的语法正确性,可进行完整的运行。
本技术方案,实现EventProcesser用于按照单个批次和数据文件的处理。如下:
通过配置Main方法,可选择控制文件并运行数据。如下:
六、输出数据
本技术方案实现了基本的输出数据抽象接口(Storage),具体使用可参考实现存储到多种存储系统中。抽象接口如下:
public interface Storage{
/**
*所有存储的批次
*@param events该批次的数据
*/
public void preview(List<String>events);
/**
*ETL运行后的数据
*
*@param data数据对象
*@param cxf Schema配置信息
*@return存储成功返回大于0的整数,否则返回0或负数会任务无法存储
*/
public int storeTo(JSONObject data,ControlConfiguration cxf);
/**
*结束该批次抛出的异常
*@param e可能发生的异常,e==null则正常完成
*/
public void afterSegment(Throwable e);
}
本发明以某地的寄递数据实施项目的真实场景作为具体实施例。本案例为某地寄递数据清洗的项目,通过分析寄递包裹发往的目的地、频率等分析指标分析本地区各类型企业的商业活动程度。
本案例获得的数据为某地区各家物流企业的寄递数据,由于涉及的物流企业众多,本案例只选取其中比较代表性的企业数据作为举例。部分数据如下:
上述数据对手机号码和姓名做了脱敏处理。
对于如上数据,需要做如下清洗和转换转换:
1、时间为13位时间戳,需要转换为yyyy-MM-dd HH:mm(精确到分钟)格式;
2、发件人、收件人的省市区字段需要转为编码的格式;
3、识别名字只有一个字符的情况(不符合寄递规定的实名制)。
完成上述清洗需求,我们需要下面几个步骤:
1、控制文件
控制文件,命名为:JD_EXP_ZTO.xml采用UTF-8编码,内容如下:
保存控制文件,存储地址相对目录为:manual/xml。
2、读入数据文件
实现FileEventProcessor从manual/xml加载控制文件,并从data/ZTO读取数据文件。将表格中数据存储为csv格式,地址为:data/ZTO/
String dataFile="data/ZTO/zto-2018.txt";
FileEventProcessor eventProcessor=new FileEventProcessor(
new File("manual/xml"),"JD_EXP","ZTO");
eventProcessor.setBatchLimit(20);
Iterator<Batch>batchs=eventProcessor.readEvent(new File(dataFile));
每个批次读取20条,batchs即为该文件的多个批次数据。
3、实现UDF
实现从Long类型转换为Java Date的UDF:
LongToDateUDF UDF在UDF_CACHED.put("long2date",new LongToDateUDF());中注册函数名为long2date。并且在控制文件中加入:
<field type="string"default="true"value="long2date(sender_time)">sender_collect_time</field>
编写中文省、市、区名称对应的CODE字典编码的UDF。
本案例中通过“省”、“市”、“区”获得字典编码,具体的转码函数不是本方案内容。可通过如下函数实现:
分别添加发件人和收件人的“省”、“市”、“区”编码转换,UDF函数分别为:“province_code”、“city_code”、“county_code”。并分别把UDF转换逻辑加入到控制文件中:
<field type="string"default="true"value="province_code(sender_province)">sender_province_code</field>
<field type="string"default="true"value="city_code(sender_city)">sender_city_code</field>
<field type="string"default="true"value="county_code(sender_county)">sender_county_code</field>
<field type="string"default="true"value="province_code(receiver_province)">receiver_province_code</field>
<field type="string"default="true"value="city_code(receiver_city)">receiver_city_code</field>
<field type="string"default="true"value="county_code(receiver_county)">receiver_county_code</field>
编写名字只有一个字符的检验逻辑,识别中文只有一个字符的UDF:
在UdfRegistors注册名为check_name的UDF函数,并在控制文件中添加:<fieldtype="boolean"default="true"value="check_name(receiver_name)">invalid_name_flag</field>
4、运行数据
完整的程序代码:
5、输出结果
运行程序,输出结果:
程序运行后,输出上述结果。从结果中可以看到,“发件时间”、“省”、“市”、“区”、“姓名检查”都经过了转码,完成了基本的转换逻辑。
本技术方案在不需要把数据文件导入到数据库,直接读取数据文件并加载控制文件中的UDF函数实现转换逻辑,可实现基本的ETL转换操作。本方案减少了大量的中间数据操作,采用了JAVA实现的UDF方式实现转换逻辑,并且对于多种数据接入编写对应的控制文件即可实现ETL的清洗转换操作。本技术方案简化了传统的ETL开发,提高函数式开发灵活性,并且代码便于管理,是对于传统ETL开发手段的另辟蹊径。
采用了本发明的大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法,解决了由于各家物流企业技术标准、数据格式和规范不同,开发量巨大并且难以维护的问题。采用本技术方案,数据解析工作交给XML解析控制,根据物流企业不同加载不同配置文件,能把不同物流数据清洗为统一的规范数据。该技术方案减少了大量的程序编码工作,且对不同数据可控可维护,且接近原生性能优异,提高了数据处理性能。
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。
Claims (3)
1.一种大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法,其特征在于,所述的方法包括以下步骤:
(1)加载控制文件,进行数据文件类型切分;
(2)按照预设的批次量加载数据文件,遍历数据行,逐条进行处理;
(3)进行数据解析;
(4)进行字段类型校验;
(5)选择控制文件并运行数据
(6)输出数据,并存储到多种存储系统中;
所述的步骤(3)具体包括以下步骤:
(3.1)进行基本类型解析;
(3.2)进行表达式解析;
(3.3)进行用户自定义函数类型解析;
所述的步骤(3.1)中的基本类型解析具体包括以下步骤:
进行赋值操作;
所述的步骤(3.2)中的表达式解析具体包括以下步骤:
进行两个基本类型变量之间的运算或基本类型变量和基本类型常量之间的运算;
所述的步骤(3.3)中的用户自定义函数类型解析具体包括以下步骤:
(3.3.1)判断外层是否为函数,如果是,则继续步骤(3.3.2);否则,继续步骤(3.3.3);
(3.3.2)判断参数是否为函数形参,如果是,则继续步骤(3.3.1);否则,继续步骤(3.3.3);
(3.3.3)判断参数是否为常量型形参,如果是,则直接赋值给字段;否则,在数据中取值,再赋值给字段;
(3.3.4)判断内层函数中参数是否有函数类型形参,如果是,则继续步骤(3.3.1);否则,计算内层函数的返回值,外层函数的形参即为计算后的值,进行后续计算。
2.根据权利要求1所述的大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法,其特征在于,所述的步骤(4)具体包括以下步骤:
(4.1)判断字段的属性,如果是取值,则继续步骤(4.2);如果是函数,继续步骤(4.3);
(4.2)校验字段值与定义的字段类型的匹配性;
(4.3)校验函数的返回值与定义的字段类型的匹配性,并校验函数的形参与实参类型的匹配性。
3.根据权利要求1所述的大数据场景下基于XML描述实现利用可编程函数式进行ETL转换处理的方法,其特征在于,所述的步骤(5)具体包括以下步骤:
(5.1)按照单个批次处理数据文件;
(5.2)通过配置方式选择控制文件并运行数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911221164.6A CN110968634B (zh) | 2019-12-03 | 2019-12-03 | 大数据场景下基于xml描述实现利用可编程函数式进行etl转换处理的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911221164.6A CN110968634B (zh) | 2019-12-03 | 2019-12-03 | 大数据场景下基于xml描述实现利用可编程函数式进行etl转换处理的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110968634A CN110968634A (zh) | 2020-04-07 |
CN110968634B true CN110968634B (zh) | 2024-02-02 |
Family
ID=70032775
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911221164.6A Active CN110968634B (zh) | 2019-12-03 | 2019-12-03 | 大数据场景下基于xml描述实现利用可编程函数式进行etl转换处理的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110968634B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014190901A1 (zh) * | 2013-05-28 | 2014-12-04 | 百度在线网络技术(北京)有限公司 | 语法编译方法、语义解析方法、装置、计算机存储介质和设备 |
CN104933160A (zh) * | 2015-06-26 | 2015-09-23 | 河海大学 | 一种面向安全监测业务分析的etl框架设计方法 |
CN109739512A (zh) * | 2018-12-28 | 2019-05-10 | 江苏极光网络技术有限公司 | 一种解析型语言文本式分析转换方法 |
CN110222318A (zh) * | 2019-06-05 | 2019-09-10 | 卡斯柯信号(成都)有限公司 | 基于xml的数据生成工具开发方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10942943B2 (en) * | 2015-10-29 | 2021-03-09 | Ip Reservoir, Llc | Dynamic field data translation to support high performance stream data processing |
-
2019
- 2019-12-03 CN CN201911221164.6A patent/CN110968634B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014190901A1 (zh) * | 2013-05-28 | 2014-12-04 | 百度在线网络技术(北京)有限公司 | 语法编译方法、语义解析方法、装置、计算机存储介质和设备 |
CN104933160A (zh) * | 2015-06-26 | 2015-09-23 | 河海大学 | 一种面向安全监测业务分析的etl框架设计方法 |
CN109739512A (zh) * | 2018-12-28 | 2019-05-10 | 江苏极光网络技术有限公司 | 一种解析型语言文本式分析转换方法 |
CN110222318A (zh) * | 2019-06-05 | 2019-09-10 | 卡斯柯信号(成都)有限公司 | 基于xml的数据生成工具开发方法 |
Non-Patent Citations (1)
Title |
---|
刘婧妍 ; 廖湖声 ; 高红雨 ; .一种复杂事件处理语言的自定义函数功能扩展.计算机与现代化.2018,(10),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN110968634A (zh) | 2020-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9280569B2 (en) | Schema matching for data migration | |
US6240422B1 (en) | Object to relational database mapping infrastructure in a customer care and billing system | |
CN109033410B (zh) | 一种基于正则与字符串切割的sql解析方法 | |
CN111712809A (zh) | 通过示例来学习etl规则 | |
US11693912B2 (en) | Adapting database queries for data virtualization over combined database stores | |
WO2019237333A1 (en) | Converting database language statements between dialects | |
CN105868204A (zh) | 一种转换Oracle脚本语言SQL的方法及装置 | |
US9053207B2 (en) | Adaptive query expression builder for an on-demand data service | |
CN108536728A (zh) | 一种数据查询方法和装置 | |
CN110879710A (zh) | 一种rpg程序自动转成java程序的方法 | |
CN113934786A (zh) | 一种构建统一etl的实施方法 | |
CN110968634B (zh) | 大数据场景下基于xml描述实现利用可编程函数式进行etl转换处理的方法 | |
CN114610385B (zh) | 一种运行环境适配系统及方法 | |
CN116049193A (zh) | 数据存储方法及装置 | |
CN115525671A (zh) | 数据查询方法、装置、设备及存储介质 | |
CN114385145A (zh) | 一种Web系统后端架构设计方法及计算机设备 | |
CN109857390B (zh) | 一种Git仓库文件注解系统的注解传递方法 | |
CN112631567A (zh) | 一种生成数据库操作文件的方法及装置 | |
CN113868138A (zh) | 测试数据的获取方法、系统、设备及存储介质 | |
CN108052522B (zh) | 一种对olap预计算模型进行动态优化的方法及系统 | |
CN112883044A (zh) | 用于数据库的数据处理方法、装置及计算机可读介质 | |
CN117251472B (zh) | 跨源数据处理方法、装置、设备及存储介质 | |
CN111221846B (zh) | 一种sql语句的自动翻译方法及装置 | |
CN114357051B (zh) | 基于原生JSON的SQL与NoSQL数据转换方法 | |
KR20240105826A (ko) | 메타데이터 표준을 준용한 메타데이터 제공 에이피아이 자동생성 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |