一种基于FlinkSQL的数据处理方法、装置、存储介质与流程

文档序号:20440778发布日期:2020-04-17 22:23阅读:282来源:国知局
本发明涉及数据库处理
技术领域
:,一种基于flinksql的数据处理方法、装置、存储介质。
背景技术
::大数据系统中的数据通常具有一个或多个数据源,这些数据源可以包括同构/异构的(大)数据库、文件系统、服务接口等。这些数据源中的数据来源现实世界,容易受到噪声数据、数据值缺失与数据冲突等的影响。数据治理、分析、可视化过程中的算法与实现技术复杂多样,往往需要对数据的组织、数据的表达形式、数据的位置等进行一系列前置处理。这就对研发提出了较高的要求,不仅需要了解业务、数据标准、较高的代码水平,而现实中研发的能力往往参差不齐,这就造就了数据治理质量有好有坏。而数据治理的好坏直接影响到整套系统的可用性、准确性、完整性、时效性、可信性与可解释性等。可见,在现有技术中,多源数据处理的效率较低、准确性差,且界面不够友好,不方便工作人员进行多源数据的处理。技术实现要素:本发明针对上述现有技术中的缺陷,提出了如下技术方案。一种基于flinksql的数据处理方法,该方法包括:获取步骤,获取数据源中的待处理的数据并发送至sql任务提交平台;编写步骤,在sql任务提交平台中编写sql语句对数据进行标准化的映射,并在sql语句中定义数据源表、数据目标表,并为数据选择udf函数;处理步骤,sql任务提交平台将编写好的sql语句提交至flink集群,flink集群对所述sql语句进行解析获得udf函数、数据源表和数据目标表,所述flink集群基于udf函数、数据源表和数据目标表进行数据处理,并将处理后的数据输出。更进一步地,所述数据源为分布式发布订阅消息系统kafka。更进一步地,所述sql任务提交平台还用于:查看所述kafka上汇集的实时推送和离线推送的数据并计算某个范围内数据的空值率及校验数据的准确率;在编写的sql语句中定义sql任务的并行度、检查点及备份点;以及用于查看sql任务的执行情况、执行统计和取消sql任务。更进一步地,所述flink集群对所述sql语句进行解析的操作为:所述flink集群采用apachecalcite解析sql语句,通过sqlparser解析sql语句,并基于正则表达式判定sql语句的类型,并通过javacc将sql语句解析成ast语法树sqlnode,并且结合元数据验证sql语句是否符合规范;通过对解析出来的语法树sqlnode再进行解析获得udf函数、数据源表和数据目标表的集合。更进一步地,所述flink集群基于udf函数、数据源表和数据目标表进行数据处理的操作为:对获得的udf函数集合进行遍历,通过class.forname方法动态加载class对象注册到flinktableenvironment,使用scalarfunctions对字段进行数据清洗、数据校验、数据去重、数据归一化、数据比对和数据标识;对获得的源表集合进行遍历,然后根据解析出来的field字段和type类型转换成flinktable可识别的internaltype类型然后注册到flinktableenvironment,通过flinktableenvironment执行sqlquery获得flinktable结果集,通过flinktableenvironment将flinktable结果集转换成flinkdatastream。本发明还提出了一种基于flinksql的数据处理装置,该装置包括:获取单元,获取数据源中的待处理的数据并发送至sql任务提交平台;编写单元,在sql任务提交平台中编写sql语句对数据进行标准化的映射,并在sql语句中定义数据源表、数据目标表,并为数据选择udf函数;处理单元,sql任务提交平台将编写好的sql语句提交至flink集群,flink集群对所述sql语句进行解析获得udf函数、数据源表和数据目标表,所述flink集群基于udf函数、数据源表和数据目标表进行数据处理,并将处理后的数据输出。更进一步地,所述数据源为分布式发布订阅消息系统kafka。更进一步地,所述sql任务提交平台还用于:查看所述kafka上汇集的实时推送和离线推送的数据并计算某个范围内数据的空值率及校验数据的准确率;在编写的sql语句中定义sql任务的并行度、检查点及备份点;以及用于查看sql任务的执行情况、执行统计和取消sql任务。更进一步地,所述flink集群对所述sql语句进行解析的操作为:所述flink集群采用apachecalcite解析sql语句,通过sqlparser解析sql语句,并基于正则表达式判定sql语句的类型,并通过javacc将sql语句解析成ast语法树sqlnode,并且结合元数据验证sql语句是否符合规范;通过对解析出来的语法树sqlnode再进行解析获得udf函数、数据源表和数据目标表的集合。更进一步地,所述flink集群基于udf函数、数据源表和数据目标表进行数据处理的操作为:对获得的udf函数集合进行遍历,通过class.forname方法动态加载class对象注册到flinktableenvironment,使用scalarfunctions对字段进行数据清洗、数据校验、数据去重、数据归一化、数据比对和数据标识;对获得的源表集合进行遍历,然后根据解析出来的field字段和type类型转换成flinktable可识别的internaltype类型然后注册到flinktableenvironment,通过flinktableenvironment执行sqlquery获得flinktable结果集,通过flinktableenvironment将flinktable结果集转换成flinkdatastream。本发明还提出了一种计算机可读存储介质,所述存储介质上存储有计算机程序代码,当所述计算机程序代码被计算机执行时执行上述之任一的装置。本发明的技术效果在于:本发明的一种基于flinksql的数据处理方法,该方法包括:获取步骤,获取数据源中的待处理的数据并发送至sql任务提交平台;编写步骤,在sql任务提交平台中编写sql语句对数据进行标准化的映射,并在sql语句中定义数据源表、数据目标表,并为数据选择udf函数;处理步骤,sql任务提交平台将编写好的sql语句提交至flink集群,flink集群对所述sql语句进行解析获得udf函数、数据源表和数据目标表,所述flink集群基于udf函数、数据源表和数据目标表进行数据处理,并将处理后的数据输出。本发明提出了风格统一的sql任务提交平台,使用语法简洁、易学易用的sql语句来完成数据处理过程中的数据清洗、数据校验、数据去重、数据归一化、数据比对和数据标识,且在数据处理过程中可以实时查看任务的执行情况、并进行执行统计等,该方法界面友好,方便非专业的工作人员进行数据处理,提高了用户体验。附图说明通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显。图1是根据本发明的实施例的一种基于flinksql的数据处理方法流程图。图2是根据本发明的实施例的一种基于flinksql的数据处理装置的结构图。具体实施方式下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。图1示出了本发明的一种基于flinksql的数据处理方法,该方法包括:获取步骤s101,获取数据源中的待处理的数据并发送至sql任务提交平台;更进一步地,所述数据源为分布式发布订阅消息系统kafka,kafka具有高吞吐量、持久化、多副本备份、横向扩展能力的优点,当然也可以是其他数据源。编写步骤s102,在sql任务提交平台中编写sql语句对数据进行标准化的映射,并在sql语句中定义数据源表、数据目标表,并为数据选择udf函数;选择的合适udf函数用于对数据字段进行清洗、校验、去重、归一化、比对、标识等动作。本发明构建的sql语句(也称为sql任务)提交平台为一个web应用,这样方便用户这样可以联网便可以进行数据的处理,且web的界面统一,方便用户的使用,提高了用户体验。处理步骤s103,sql任务提交平台将编写好的sql语句提交至flink集群,flink集群对所述sql语句进行解析获得udf函数、数据源表和数据目标表,所述flink集群基于udf函数、数据源表和数据目标表进行数据处理,并将处理后的数据输出。flinksql是flink实时计算为简化计算模型,降低用户使用实时计算门槛而设计的一套符合标准sql语义的开发语言。在一个实施例中,所述sql任务提交平台还提供以下功能:查看所述kafka上汇集的实时推送和离线推送的数据并计算某个范围内数据的空值率及校验数据的准确率;即通过查看消息队列kafka上汇集了哪些实时推送和离线推送上来的数据(数据探查)。计算某个范围内数据的空值率、校验数据的准确率。在编写的sql语句中定义sql任务的并行度、检查点(checkpoint)、备份点(savepoint)等参数。以及用于查看sql任务的执行情况、执行统计和取消sql任务。例如,通过调用flink/overview接口查看集群的taskmanager数量、使用资源slot数量、耗费资源slot数量、集群cpu使用情况、集群内存使用情况、集群job执行情况。通过调用flink/jobs/jobid接口查看任务的执行时间、执行状态、任务的并行度、拉取数据源的数量、已经处理的数据量等等情况。通过调用flink/plan接口查看待执行sql的执行计划。通过调用flink/yarn-cancel接口取消sql任务。通过调用flink/run接口提交sql启动flinksql数据处理程序,即sql任务提交平台将编写好的sql语句提交至flink集群是调用flink/run接口提交sql启动flinksql数据处理程序实现的。在一个实施例中,所述flink集群对所述sql语句进行解析的操作为:所述flink集群采用apachecalcite解析sql语句,通过sqlparser解析sql语句,并基于正则表达式判定sql语句的类型,并通过javacc将sql语句解析成ast语法树sqlnode,并且结合元数据验证sql语句是否符合规范;通过对解析出来的语法树sqlnode再进行解析获得udf函数、数据源表和数据目标表的集合。在一个实施例中,所述flink集群基于udf函数、数据源表和数据目标表进行数据处理的操作为:对获得的udf函数集合进行遍历,通过class.forname方法动态加载class对象注册到flinktableenvironment,使用scalarfunctions对字段进行数据清洗、数据校验、数据去重、数据归一化、数据比对和数据标识;对获得的源表集合进行遍历,然后根据解析出来的field字段和type类型转换成flinktable可识别的internaltype类型然后注册到flinktableenvironment,通过flinktableenvironment执行sqlquery获得flinktable结果集,通过flinktableenvironment将flinktable结果集转换成flinkdatastream。目前flink主要支持scalarfunctions标量函数、tablefunctions表函数和aggregationfunctions聚合函数三种。实现一个scalarfunctions标量函数需要继承scalarfunction,并且实现一个或者多个evaluation方法。标量函数的行为就是通过evaluation方法来实现的。evaluation方法必须定义为public,命名为eval。通过scalarfunctions可以对字段进行数据清洗、数据校验、数据去重、数据归一化、数据比对和数据标识。实现一个tablefunctions表函数需要继承tablefunction,实现一个或者多个evaluation方法。表函数的行为定义在这些evaluation方法内部,函数名为eval并且必须是public。通过tablefunctions表函数我们可以实现表的join获得结果集。实现一个聚合函数需要继承aggregatefunction,通过调用aggregatefunction函数的createaccumulator()方法来创建一个空accumulator。随后,每个输入行都会调用accumulate()方法来更新accumulator。一旦所有的行被处理了,getvalue()方法就会被调用,计算和返回最终的结果。通过聚合函数我们可以实现数据的实时统计。对获得的源表集合进行遍历,然后根据解析出来的field字段和type类型转换成flinktable可识别的internaltype类型然后注册到flinktableenvironment。对获得的源表集合进行遍历,通过flinktableenvironment执行sqlquery获得flinktable结果集。通过flinktableenvironment将flinktable结果集转换成flinkdatastream,即完成了数据的处理。在一个实施例中,需要将处理后的数据输出,是通过继承org.apache.flink.streaming.api.functions.sink.richsinkfunction实现flink自定义sink(结果输出),通过重写richsinkfunction的open方法初始化下游系统(数据库)接口实例,通过重写richsinkfunction的invoke方法对flink从数据源获取到的每条数据进行组装和储存处理(输出到数据库),通过重写richsinkfunction的close方法关闭下游系统(数据库)的接口实例。从而完成了将处理后的数据写入到下游数据库。本发明的方法通过风格统一的sql任务提交平台,使用语法简洁、易学易用的sql语句来完成数据处理过程中的数据清洗、数据校验、数据去重、数据归一化、数据比对和数据标识,且在数据处理过程中可以实时查看任务的执行情况、并进行执行统计等,该方法界面友好,方便非专业的工作人员进行数据处理,提高了用户体验,这是本发明的重要发明点。图2示出了本发明的一种基于flinksql的数据处理装置,该装置包括:获取单元201,获取数据源中的待处理的数据并发送至sql任务提交平台;更进一步地,所述数据源为分布式发布订阅消息系统kafka,kafka具有高吞吐量、持久化、多副本备份、横向扩展能力的优点,当然也可以是其他数据源。编写单元202,在sql任务提交平台中编写sql语句对数据进行标准化的映射,并在sql语句中定义数据源表、数据目标表,并为数据选择udf函数;选择的合适udf函数用于对数据字段进行清洗、校验、去重、归一化、比对、标识等动作。本发明构建的sql语句(也称为sql任务)提交平台为一个web应用,这样方便用户这样可以联网便可以进行数据的处理,且web的界面统一,方便用户的使用,提高了用户体验。处理单元203,sql任务提交平台将编写好的sql语句提交至flink集群,flink集群对所述sql语句进行解析获得udf函数、数据源表和数据目标表,所述flink集群基于udf函数、数据源表和数据目标表进行数据处理,并将处理后的数据输出。flinksql是flink实时计算为简化计算模型,降低用户使用实时计算门槛而设计的一套符合标准sql语义的开发语言。在一个实施例中,所述sql任务提交平台还提供以下功能:查看所述kafka上汇集的实时推送和离线推送的数据并计算某个范围内数据的空值率及校验数据的准确率;即通过查看消息队列kafka上汇集了哪些实时推送和离线推送上来的数据(数据探查)。计算某个范围内数据的空值率、校验数据的准确率。在编写的sql语句中定义sql任务的并行度、检查点(checkpoint)、备份点(savepoint)等参数。以及用于查看sql任务的执行情况、执行统计和取消sql任务。例如,通过调用flink/overview接口查看集群的taskmanager数量、使用资源slot数量、耗费资源slot数量、集群cpu使用情况、集群内存使用情况、集群job执行情况。通过调用flink/jobs/jobid接口查看任务的执行时间、执行状态、任务的并行度、拉取数据源的数量、已经处理的数据量等等情况。通过调用flink/plan接口查看待执行sql的执行计划。通过调用flink/yarn-cancel接口取消sql任务。通过调用flink/run接口提交sql启动flinksql数据处理程序,即sql任务提交平台将编写好的sql语句提交至flink集群是调用flink/run接口提交sql启动flinksql数据处理程序实现的。在一个实施例中,所述flink集群对所述sql语句进行解析的操作为:所述flink集群采用apachecalcite解析sql语句,通过sqlparser解析sql语句,并基于正则表达式判定sql语句的类型,并通过javacc将sql语句解析成ast语法树sqlnode,并且结合元数据验证sql(也可以写作sql)语句是否符合规范;通过对解析出来的语法树sqlnode再进行解析获得udf函数、数据源表和数据目标表的集合。在一个实施例中,所述flink集群基于udf函数、数据源表和数据目标表进行数据处理的操作为:对获得的udf函数集合进行遍历,通过class.forname方法动态加载class对象注册到flinktableenvironment,使用scalarfunctions对字段进行数据清洗、数据校验、数据去重、数据归一化、数据比对和数据标识;对获得的源表集合进行遍历,然后根据解析出来的field字段和type类型转换成flinktable可识别的internaltype类型然后注册到flinktableenvironment,通过flinktableenvironment执行sqlquery获得flinktable结果集,通过flinktableenvironment将flinktable结果集转换成flinkdatastream。目前flink主要支持scalarfunctions标量函数、tablefunctions表函数和aggregationfunctions聚合函数三种。实现一个scalarfunctions标量函数需要继承scalarfunction,并且实现一个或者多个evaluation方法。标量函数的行为就是通过evaluation方法来实现的。evaluation方法必须定义为public,命名为eval。通过scalarfunctions可以对字段进行数据清洗、数据校验、数据去重、数据归一化、数据比对和数据标识。实现一个tablefunctions表函数需要继承tablefunction,实现一个或者多个evaluation方法。表函数的行为定义在这些evaluation方法内部,函数名为eval并且必须是public。通过tablefunctions表函数我们可以实现表的join获得结果集。实现一个聚合函数需要继承aggregatefunction,通过调用aggregatefunction函数的createaccumulator()方法来创建一个空accumulator。随后,每个输入行都会调用accumulate()方法来更新accumulator。一旦所有的行被处理了,getvalue()方法就会被调用,计算和返回最终的结果。通过聚合函数我们可以实现数据的实时统计。实现一个聚合函数需要继承aggregatefunction,通过调用aggregatefunction函数的createaccumulator()方法来创建一个空accumulator。随后,每个输入行都会调用accumulate()方法来更新accumulator。一旦所有的行被处理了,getvalue()方法就会被调用,计算和返回最终的结果。通过聚合函数我们可以实现数据的实时统计。对获得的源表集合进行遍历,然后根据解析出来的field字段和type类型转换成flinktable可识别的internaltype类型然后注册到flinktableenvironment。对获得的源表集合进行遍历,通过flinktableenvironment执行sqlquery获得flinktable结果集。通过flinktableenvironment将flinktable结果集转换成flinkdatastream,即完成了数据的处理。在一个实施例中,需要将处理后的数据输出,是通过继承org.apache.flink.streaming.api.functions.sink.richsinkfunction实现flink自定义sink(结果输出),通过重写richsinkfunction的open方法初始化下游系统(数据库)接口实例,通过重写richsinkfunction的invoke方法对flink从数据源获取到的每条数据进行组装和储存处理(输出到数据库),通过重写richsinkfunction的close方法关闭下游系统(数据库)的接口实例。从而完成了将处理后的数据写入到下游数据库。本发明的装置通过风格统一的sql任务提交平台,使用语法简洁、易学易用的sql语句来完成数据处理过程中的数据清洗、数据校验、数据去重、数据归一化、数据比对和数据标识,且在数据处理过程中可以实时查看任务的执行情况、并进行执行统计等,该方法界面友好,方便非专业的工作人员进行数据处理,提高了用户体验,这是本发明的重要发明点。为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的装置。最后所应说明的是:以上实施例仅以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1