一种数据处理方法、系统及服务器
技术领域
本发明涉及数据处理领域,尤其涉及一种数据处理方法、系统及服务器。
背景技术
Sqoop是一个用来将关系型数据库和Hadoop中的数据进行相互转移的工具,可以将一个关系型数据库(例如MYSQL、Oracle)中的数据导入到Hadoop(例如HDFS、Hive、HBase)中,也可以将Hadoop(例如HDFS、Hive、HBase)中的数据导入到关系型数据库(例如MYSQL、Oracle)中。
目前从数据库导入到Hive的主要技术是通过Sqoop框架导入,但是Sqoop导入到Hive只能单表导入,多表导入的功能还不支持,如需要多表导入,只能通过每个表配置一个Sqoop配置文件然后才能通过Sqoop导入到hive。一个系统中的数据库表有很多,如果每个表需要配置一个Sqoop,那么会耗费很长的时间来配置Sqoop,影响数据传输的效率。
发明内容
为了克服现有技术中多表导入的方式影响数据传输效率的问题,本发明的目的在于提供一种数据处理方法、系统及服务器。
为实现上述目的,本发明提供一种数据处理方法,包括:
获取流传输平台发送的数据流,其中,所述数据流由客户端的数据库中的原始数据表信息生成并发送至所述流传输平台,所述原始数据表信息包括数据库的配置信息、原始数据表的表标识、字段信息和记录信息,所述数据库包括若干原始数据表和所述表标识,所述原始数据表包括若干条记录信息,每条所述记录信息包括与所述字段信息一一对应的数据记录;
根据所述配置信息和所述字段信息创建与所述表标识一一对应的目标数据表,其中,所述目标数据表包括若干分区;
根据所述字段信息识别出每条所述记录信息的分区标识;
根据所述分区标识将所述记录信息读取至对应的目标数据表中对应的分区中。
进一步地,所述根据所述配置信息和所述字段信息创建与所述表标识一一对应的目标数据表之前,所述方法还包括:
判断是否存在与所述表标识对应的目标数据表;
若不存在,则根据所述配置信息和所述字段信息创建与所述表标识一一对应的目标数据表。
进一步地,所述根据所述字段信息识别出每条所述记录信息的分区标识,具体包括:
读取所述字段信息中的日期字段;
将每条所述记录信息中与所述日期字段对应的数据记录作为所述分区标识。
进一步地,所述将每条所述记录信息中与所述日期字段对应的数据记录作为所述分区标识,具体包括:
识别出每条所述记录信息中与所述日期字段对应的数据记录;
将与当前日期最接近的数据记录作为所述分区标识。
进一步地,所述方法还包括:
判断是否获取到所述数据流;
若未获取到所述数据流,在预设时间间隔后重新读取数据流;
若获取到所述数据流,依次将所述记录信息读取至对应的目标数据表中对应的分区中。
进一步地,所述根据所述分区标识将所述记录信息读取至对应的目标数据表中对应的分区中,具体包括:
根据所述分区标识将所述记录信息读取至不同的文件中;
将读取完成的文件上传至Hadoop HDFS中,并加载至Hive表分区中。
本发明还提供一种服务器,包括处理器和存储器,所述存储器中存储有数据处理程序,所述数据处理程序被配置成由所述处理器执行,所述数据处理程序被所述处理器执行时实现上述的数据处理方法。
本发明还提供一种数据处理系统,包括客户端、流传输平台及服务器;
所述客户端用于读取数据库中的原始数据表信息并生成数据流,将所述数据流发送至所述流传输平台,其中,所述原始数据表信息包括数据库的配置信息、原始数据表的表标识、字段信息和记录信息,所述数据库包括若干原始数据表和所述表标识,所述原始数据表包括若干条记录信息,每条所述记录信息包括与所述字段信息一一对应的数据记录;
所述流传输平台用于将所述数据流发送至所述服务器;
所述服务器用于根据所述配置信息和所述字段信息创建与所述表标识一一对应的目标数据表,根据所述字段信息识别出每条所述记录信息的分区标识;根据所述分区标识将所述记录信息读取至对应的目标数据表中对应的分区中,其中,所述目标数据表包括若干分区。
进一步地,所述流传输平台还用于为每个所述数据流创建与所述表标识对应的流名称。
进一步地,所述流传输平台为Kafka服务器或者Redis服务器。
相比现有技术,本发明的有益效果在于:通过获取原始数据表信息生成的数据流,根据配置信息和字段信息创建与表标识一一对应的目标数据表,根据字段信息识别出每条记录信息的分区标识,根据分区标识将记录信息读取至对应的目标数据表中对应的分区中,从而实现数据库的多表导入,且数据传输效率高。
附图说明
图1为本发明实施例提供的应用场景图;
图2为本发明第一实施例提供的数据处理方法流程图;
图3为本发明实施例提供的Hive数据库示意图;
图4为本发明第二实施例提供的数据处理方法流程图;
图5为本发明实施例提供的服务器的内部结构示意图。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。
如图1所示,本发明实施例提供的数据处理方法应用于数据处理系统,数据处理系统包括客户端1、流传输平台2及服务器3。客户端1用于读取数据库中的原始数据表信息并生成数据流,将数据流发送至流传输平台2,其中,原始数据表信息包括数据库的配置信息、原始数据表的表标识、字段信息和记录信息,数据库包括若干原始数据表和表标识,原始数据表包括若干条记录信息,每条记录信息包括与字段信息一一对应的数据记录。流传输平台2用于将数据流发送至服务器3。服务器3用于根据配置信息和字段信息创建与表标识一一对应的目标数据表,根据字段信息识别出每条记录信息的分区标识;根据分区标识将记录信息读取至对应的目标数据表中对应的分区中,其中,目标数据表包括若干分区。从而实现将数据库中的原始数据表按照分区读取至目标数据表的分区中,实现多表导入。
如图2所示,本发明第一实施例提供的数据处理方法,执行于数据处理系统,方法包括:
步骤S101:客户端读取数据库中的原始数据表信息并生成数据流,将所述数据流发送至流传输平台。
其中,所述原始数据表信息包括数据库的配置信息、原始数据表的表标识、字段信息和记录信息,所述数据库包括若干原始数据表和所述表标识,所述原始数据表包括若干条记录信息,每条所述记录信息包括与所述字段信息一一对应的数据记录。
在一种实施方式中,客户端通过JDBC(Java DataBase Connectivity,java数据库连接)方式连接数据库,首先读取数据库的配置信息、原始数据表的表标识和字段信息,拼接Hive建库和建表语句,生成数据流并发送至流传输平台,然后读取记录信息并将每个原始数据表的记录信息生成数据流发送至流传输平台。客户端根据表中的日期字段和同步周期,拼接SQL语句,通过JDBC方式查询数据,将原始数据表信息写入缓存队列中,启动多线程读取缓存数据并发送至流传输平台。其中,配置信息可以是数据库的链接或者存储路径等信息,一个原始数据表对应若干个数据流。例如,若数据表的数量为10个,每个原始数据表生成20个数据流,则共用200个数据流传输至流传输平台。
步骤S102:流传输平台将所述数据流发送至所述服务器。
其中,流传输平台为Kafka服务器或者Redis服务器,用于实时传输数据流,当流传输平台接收到数据流时,为每个数据流创建与表标识对应的流名称。
步骤S103:服务器根据所述配置信息和所述字段信息创建与所述表标识一一对应的目标数据表。
具体的,服务器首先接收流传输平台发送的配置信息、原始数据表的表标识和字段信息,首先判定是否存在与表标识对应的数据表,若不存在,则根据配置信息和字段信息创建与表标识对应的目标数据表。
步骤S104:服务器根据所述字段信息识别出每条所述记录信息的分区标识;根据所述分区标识将所述记录信息读取至对应的目标数据表中对应的分区中。
具体的,服务器创建数据表后,接收记录信息,根据记录信息中与字段信息对应的数据记录识别出分区标识,根据记录信息所在的原始数据表识别出对应的表标识,根据分区标识将记录信息读取至与表标识和分区标识对应的文件中;将读取完成的文件上传至Hadoop HDFS中,并加载至Hive表分区中。如图3所示,Hive数据库中有多个目标数据表,每个目标数据表有多个分区。
其中,分区标识可以为日期,例如,将日期作为分区标识,将同一天的数据放入一个分区内。
上述实施例中,客户端将读取的原始数据表信息通过流传输平台发送至服务器,服务器根据配置信息和字段信息创建与表标识一一对应的目标数据表,根据字段信息识别出每条记录信息的分区标识,根据分区标识将记录信息读取至对应的目标数据表中对应的分区中,从而实现数据库的多表导入,且数据传输效率高。
如图4所示,本发明第二实施例提供的数据处理方法,执行于服务器,方法包括:
步骤S201:获取流传输平台发送的数据流,其中,所述数据流由客户端的数据库中的原始数据表信息生成并发送至所述流传输平台,所述原始数据表信息包括数据库的配置信息、原始数据表的表标识、字段信息和记录信息,所述数据库包括若干原始数据表和所述表标识,所述原始数据表包括若干条记录信息,每条所述记录信息包括与所述字段信息一一对应的数据记录。
在一种实施方式中,服务器首先获取到流传输平台发送的数据库的配置信息、原始数据表的表标识和字段信息,然后获取记录信息。
在一种实施方式中,服务器判断是否获取到数据流,若未获取到数据流,在预设时间间隔后重新读取数据流;若获取到数据流,启动一个线程,依次将记录信息读取至对应的目标数据表中对应的分区中。例如,服务器实时读取数据流,若未获取到数据流,休眠1秒后再反复读取数据流。
步骤S202:根据所述配置信息和所述字段信息创建与所述表标识一一对应的目标数据表,其中,所述目标数据表包括若干分区。
在一种实施方式中,首先判断是否存在与表标识对应的目标数据表;若不存在,则根据配置信息和字段信息创建与表标识一一对应的目标数据表;若存在与表标识对应的目标数据表,则不用创建目标数据表。
步骤S203:根据所述字段信息识别出每条所述记录信息的分区标识。
在一种实施方式中,服务器读取字段信息中的日期字段;将每条记录信息中与日期字段对应的数据记录作为分区标识。具体的,服务器识别出每条记录信息中与日期字段对应的数据记录;将与当前日期最接近的数据记录作为分区标识。例如,数据表包括多个日期字段,例如创建日期、更新日期等,将与当前日期最接近的日期作为分区标识。
步骤S204:根据所述分区标识将所述记录信息读取至对应的目标数据表中对应的分区中。
继续上述实施方式,目标数据表中每个分区对应一个日期,数据记录的分区标识为日期字段,根据日期字段对应的日期将记录信息读取至对应的分区中。
在一种实施方式中,服务器根据分区标识将记录信息读取至不同的文件中,
将读取完成的文件上传至Hadoop HDFS中,并加载至Hive表分区中。
上述实施例中,服务器根据配置信息和字段信息创建与表标识一一对应的目标数据表,根据字段信息识别出每条记录信息的分区标识,根据分区标识将记录信息读取至对应的目标数据表的分区中,实现多表导入,且数据传输效率高。
本发明还提供一种服务器,图5为本发明提供的服务器的内部结构图。在本实施例中,服务器可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、便携计算机等终端设备。该服务器至少包括存储器11、处理器12、通信总线13以及网络接口14。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是服务器的内部存储服务器,例如该服务器的硬盘。存储器11在另一些实施例中也可以是服务器的外部存储设备,例如服务器上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括服务器的内部存储服务器也包括外部存储设备。存储器11不仅可以用于存储安装于服务器的应用软件及各类数据,例如数据处理程序01的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行数据处理程序01等。
该总线13可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
进一步地,服务器还可以包括网络接口14,网络接口14可选的可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该服务器与其他电子设备之间建立通信连接。
图5仅示出了具有组件11-14以及数据处理程序01的服务器,本领域技术人员可以理解的是,图5示出的结构并不构成对服务器的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来。本发明还涉及一种计算机可读存储介质,如ROM/RAM、磁碟、光盘等,其上存储有计算机程序,计算机程序被处理器执行时实现数据处理方法。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。