一种基于ETL的文件处理方法及系统与流程

文档序号:12157792阅读:446来源:国知局
一种基于ETL的文件处理方法及系统与流程
本申请涉及数据处理
技术领域
,特别是涉及一种基于ETL的文件处理方法,以及一种基于ETL的文件处理系统。
背景技术
:随着企业信息化建设的发展,越来越多的企业建立了众多的信息系统,以帮助企业进行内外部业务的处理和管理工作。但是随着信息系统的增加,各自孤立工作的信息系统造成了大量的冗余数据和业务人员的重复劳动。企业应用集成(EAI,EnterpriseApplicationIntegration)应运而生,而ETL是实现数据集成的主要技术。ETL,Extraction-Transformation-Loading的缩写,即数据抽取(Extract)、转换(Transform)、加载(Load)的过程,它是构建数据仓库的重要环节。ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。目前,针对文件系统的同步工具如同步盘类应用,是以文件为单位,主要完成各个终端间的文件到文件的同步,并不适应数据仓库ETL的需要。因此,目前需要本领域技术人员迫切解决的一个技术问题就是:如何提出一种基于ETL的文件处理机制,用以提高ETL过程中文件同步的速度,最大化数据同步效率。技术实现要素:本申请实施例所要解决的技术问题是提供一种基于ETL的文件处理方法,用以提高ETL过程中文件同步的速度,最大化数据同步效率。相应的,本申请实施例还提供了一种基于ETL的文件处理系统,用以保证上述方法的实现及应用。为了解决上述问题,本申请实施例公开了一种基于ETL的文件处理方法,所述的方法包括:从源端获取多个文件对象;针对每个文件对象,进行文件内的数据切分,得到多个文本数据块;当所述多个文件对象切分完成后,将所述多个文件对象对应的所有文本数据块并发写入目的端。优选地,所述从源端获取多个文件对象的步骤包括:从源端读取结构化信息,所述结构化信息包括多个文件对象;将所述结构化信息以单个文件对象为单位进行切分,得到多个文件对象。优选地,所述针对每个文件对象,进行文件内的数据切分,得到多个文本数据块的步骤包括:针对每个文件对象,确定多个切分位置;按照所述多个切分位置对所述文件对象进行切分,得到多个文本数据块。优选地,所述文件对象包括多个行数据记录,所述针对每个文件对象,确定多个切分位置的步骤包括:针对每个文件对象,获取所述文件对象的大小;确定所述行数据记录的平均大小;计算所述文件对象大小与所述行数据记录的平均大小的商值,得到所述行数据记录的数量;计算预设的文本数据块的数量与所述行数据记录的数量的商值,得到每个文本数据块所拥有的行数据记录的数量;依据所述文本数据块所具有的行数据记录的数量,确定所述文件对象的多个初始切分位置;若所述初始切分位置不是行分隔符所在的位置,则将所述切分位置调整为行分隔符所在的位置;对所述调整后的初始切分位置进行去重处理,得到多个切分位置。优选地,所述若所述初始切分位置不是行分隔符所在的位置,则将所述切分位置调整为行分隔符所在的位置的步骤包括:若所述初始切分位置不是行分隔符所在的位置,则向前探测或向后回退到与所述初始切分位置最接近的行分隔符的位置;将所述切分位置确定为所述最接近的行分隔符的位置。优选地,所述确定所述行数据记录的平均大小的步骤包括:将第一个行数据记录的大小作为所述行数据记录的平均大小;或者,将最后一个行数据记录的大小作为所述行数据记录的平均大小;或者,随机选取一个行数据记录的大小作为所述行数据记录的平均大小;或者,计算前N行的行数据记录的大小平均值作为所述行数据记录的平均大小。优选地,所述当所述多个文件对象切分完成后,将所述多个文件对象对应的所有文本数据块文本数据块并发写入目的端的步骤包括:当所述多个文件对象切分完成后,分别将所述文本数据块的格式转换为中间态格式;采用多线程或者多进程或者分布式多机分别将对应的中间态格式的文本数据块写入目的端;在所述目的端中,将所述中间态的文本数据块转换为所述目的端所需的格式。优选地,所述文本数据块包括一条或多条行数据记录,所述行数据记录包括列分隔符,所述当所述多个文件对象切分完成后,分别将所述文本数据块的格式转换为中间态格式的步骤包括:当所述多个文件对象切分完成后,针对每个文本数据块的每条行数据记录,按照所述列分隔符进行切割,得到一个或多个列记录;分别为所述列记录添加对应的预设数据类型,得到所述中间态格式。优选地,所述预设数据类型至少包括如下类型的一种或多种:字符串STRING,长整型LONG,布尔型BOOLEAN,双精度浮点型DOUBLE,日期DATE。优选地,所述方法还包括:若所述文本数据块的格式转换所述中间态格式不成功,或者,所述中间态的文本数据块转换所述目的端所需的格式不成功,则产生脏数据;若所述脏数据超出预设阈值,则生成错误报告。优选地,所述文件对象为能够进行随机读写的文件对象,所述文件对象至少可以包括如下对象的一种或多种:本地文件、开放存储服务OSS文件、安全文件传送协议SFTP文件、分布式文件系统HDFS文件。本申请实施例还提供了一种基于ETL的文件处理系统,所述的系统包括:文件对象获取模块,用于从源端获取多个文件对象;文件切分模块,用于针对每个文件对象,进行文件内的数据切分,得到多个文本数据块;写入模块,用于在所述多个文件对象切分完成后,将所述多个文件对象对应的所有文本数据块并发写入目的端。优选地,所述文件对象获取模块包括:结构化信息读取子模块,用于从源端读取结构化信息,所述结构化信息包括多个文件对象;结构化信息切分子模块,用于将所述结构化信息以单个文件对象为单位进行切分,得到多个文件对象。优选地,所述文件切分模块包括:切分位置确定子模块,用于针对每个文件对象,确定多个切分位置;切分子模块,用于按照所述多个切分位置对所述文件对象进行切分,得到多个文本数据块。优选地,所述文件对象包括多个行数据记录,所述切分位置确定子模块包括:文件大小获取单元,用于针对每个文件对象,获取所述文件对象的大小;行大小确定单元,用于确定所述行数据记录的平均大小;第一计算单元,用于计算所述文件对象大小与所述行数据记录的平均大小的商值,得到所述行数据记录的数量;第二计算单元,用于计算预设的文本数据块的数量与所述行数据记录的数量的商值,得到每个文本数据块所拥有的行数据记录的数量;初始切分位置确定单元,用于依据所述文本数据块所具有的行数据记录的数量,确定所述文件对象的多个初始切分位置;调整单元,用于在所述初始切分位置不是行分隔符所在的位置时,则将所述切分位置调整为行分隔符所在的位置;去重单元,用于对所述调整后的初始切分位置进行去重处理,得到多个切分位置。优选地,所述调整单元还用于:若所述初始切分位置不是行分隔符所在的位置,则向前探测或向后回退到与所述初始切分位置最接近的行分隔符的位置;将所述切分位置确定为所述最接近的行分隔符的位置。优选地,所述行大小确定单元还用于:将第一个行数据记录的大小作为所述行数据记录的平均大小;或者,将最后一个行数据记录的大小作为所述行数据记录的平均大小;或者,随机选取一个行数据记录的大小作为所述行数据记录的平均大小;或者,计算前N行的行数据记录的大小平均值作为所述行数据记录的平均大小。优选地,所述写入模块包括:第一格式转换子模块,用于在所述多个文件对象切分完成后,分别将所述文本数据块的格式转换为中间态格式;数据写入子模块,用于采用多线程或者多进程或者分布式多机分别将对应的中间态格式的文本数据块写入目的端;第二格式转换子模块,用于在所述目的端中,将所述中间态的文本数据块转换为所述目的端所需的格式。优选地,所述文本数据块包括一条或多条行数据记录,所述行数据记录包括列分隔符,所述第一格式转换子模块包括:切割单元,用于在所述多个文件对象切分完成后,针对每个文本数据块的每条行数据记录,按照所述列分隔符进行切割,得到一个或多个列记录;数据类型添加单元,用于分别为所述列记录添加对应的预设数据类型,得到所述中间态格式。优选地,所述预设数据类型至少包括如下类型的一种或多种:字符串STRING,长整型LONG,布尔型BOOLEAN,双精度浮点型DOUBLE,日期DATE。优选地,所述系统还包括:脏数据产生模块,用于在所述文本数据块的格式转换所述中间态格式不成功时,或者,所述中间态的文本数据块转换所述目的端所需的格式不成功时,产生脏数据;错误报告生成模块,用于在所述脏数据超出预设阈值时,生成错误报告。优选地,所述文件对象为能够进行随机读写的文件对象,所述文件对象至少可以包括如下对象的一种或多种:本地文件、开放存储服务OSS文件、安全文件传送协议SFTP文件、分布式文件系统HDFS文件。与
背景技术
相比,本申请实施例包括以下优点:在本申请实施例中,当从源端获取多个文件对象时,以文件对象为单位,进行文件内部的数据切分,得到文本数据块,并在所有文件对象内部切分完成后,将所有的文本数据块并发写入目的端中,切分粒度为文件内部的细粒度切分,则进行并发写入时,能够提高ETL过程中文件同步的速度,最大化数据同步效率。另外,由于本申请实施例是以文件内部的结构进行切分,并不限于某种文件系统,能够完成多种文件系统的数据同步,通用性强。附图说明图1是本申请的一种基于ETL的文件处理方法实施例一的步骤流程图;图2是本申请的一种基于ETL的文件处理方法实施例二的步骤流程图;图3a是本申请的一种基于ETL的文件处理方法实施例二的切分位置示意图;图3b是本申请的一种基于ETL的文件处理方法实施例二的切分位置调整示意图一;图4a是本申请的一种基于ETL的文件处理方法实施例二的切分位置调整示意图二;图4b是本申请的一种基于ETL的文件处理方法实施例二的去重结果示意图;图5是本申请的一种基于ETL的文件处理方法实施例二的文本数据块示意图;图6是本申请的一种基于ETL的文件处理系统实施例的结构框图。具体实施方式为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。参照图1,示出了本申请的一种基于ETL的文件处理方法实施例一 的步骤流程图,可以包括如下步骤:步骤101,从源端获取多个文件对象;步骤102,针对每个文件对象,进行文件内的数据切分,得到多个文本数据块;步骤103,当所述多个文件对象切分完成后,将所述多个文件对象对应的所有文本数据块并发写入目的端。在本申请实施例中,当从源端获取多个文件对象时,以文件对象为单位,进行文件内部的数据切分,得到文本数据块,并在所有文件对象内部切分完成后,将所有的文本数据块并发写入目的端中,切分粒度为文件内部的细粒度切分,则进行并发写入时,能够提高ETL过程中文件同步的速度,最大化数据同步效率。另外,由于本申请实施例是以文件内部的结构进行切分,并不限于某种文件系统,能够完成多种文件系统的数据同步,通用性强。参照图2,示出了本申请的一种基于ETL的文本数据处理方法实施例二的步骤流程图,可以包括如下步骤:步骤201,从源端读取结构化信息,所述结构化信息包括多个文件对象;本申请实施例可以应用于ETL的场景,源端可以有多个,例如,可以包括但不限于:SFTP(SecureFileTransferProtocol,安全文件传送协议)、本地文件系统LocalFile、OSS(openstorageservices,开放存储服务,可理解为存储盘)、HDFS(HadoopDistributedFileSystem,分布式文件系统)等。需要说明的是,本申请的源端系统一般不具有数据库事务相关的保证,需要用户自己保证数据读取时的数据一致性(数据的增、删、改等)问题,即用户尽量保证在数据同步过程中,不要修改结构化信息的内容。从源端读取的非结构化信息可以包括结构化数据和/或半结构化数据,其中,结构化数据可以为数据库,其数据行列有严格的预定义,有 明确的Schema约束;半结构化数据是指有明确行分隔符、列分隔符的字符数据,可抽象为一个二维表结构,每个记录行包括1到多列数据,每行数据的列数目是相同的。在本申请实施例中,结构化信息可以包括多个文件对象,其中,文件对象可以为能够构建出文件模型的对象。另外,为了使得后续的数据切分和并发写入能够顺利执行,本申请实施例的文件对象可以为能够进行随机读写的文件对象,也即,本申请的文件对象可以从任意字节开始读取,对于文件对象的写入操作,可以在文件对象的最后逐渐追加。作为本申请实施例的一种示例,文件对象至少可以包括如下对象的一种或多种:本地文件、OSS文件、SFTP文件、HDFS文件。需要说明的是,本申请实施例的文件对象可以支持不同的编码类型,以及不同的压缩类型。步骤202,将所述结构化信息以单个文件对象为单位进行切分,得到多个文件对象;从源端获取结构化信息以后,本申请实施例可以进行第一层次粗粒度的文件切分,该切分是文件级别的切分,切分的方式可以为以单个文件对象为单位进行切分,得到多个文件对象。其中,切分是指将一个任务划分成多个子任务,可以并发执行多个子任务,所有子任务完成后整体任务也完成了,通过切分并发执行子任务可以缩短作业的运行时间。例如,从源端读取的结构化信息包括10个文件对象,以单个文件对象为单位,则可以切分成10份文件对象。再如,从源端获取一天的结构化信息,该结构化信息以小时为单位进行数据存储,则一天可以切分成24个文件对象。需要说明的是,如果从源端读取的结构化信息的大小过小,则可以不执行本申请的切分逻辑,比如读取一个100KB的文件对象,没有必要对其进行切分。本申请的切分逻辑针对的是结构化信息的大小超时设定阈值的源端数据,因此,在执行步骤202之前,可以首先判断结构化信息的大小是否大于设定阈值,若大于或等于设定阈值,则可以执行步骤 202,否则,不执行步骤202。步骤203,针对每个文件对象,进行文件内的数据切分,得到多个文本数据块;从源端获得的数据经过第一层次粗粒度的切分,得到多个文件对象以后,本申请实施例针对每个文件对象,进一步执行第二层次细粒度的文件切分,该切分是文件内部的切分,该切分完成后,每个文件对象可以得到多个文本数据块。在本申请实施例的一种优选实施例中,步骤203可以包括如下子步骤:子步骤S11,针对每个文件对象,确定多个切分位置;在对文件对象进行切分前,首先需要确定切分位置,在本申请实施例的一种优选实施例中,子步骤S11进一步包括如下子步骤:子步骤S111,针对每个文件对象,获取所述文件对象大小;对于每个单独的文件对象,可以获得该文件对象的属性信息,其中,属性信息可以包括文件对象大小totalSize。子步骤S112,确定所述行数据记录的平均大小;对于结构化数据和/或半结构化数据而言,其都可以包括行数据记录,其中,行数据记录每一行的数据记录,则对结构化信息进行切分后的文件对象也是由行数据记录组成的,该行数据记录具有行分隔符、列分隔符等信息。然而,文件对象中的每条行数据记录可能存在大小不一的情况,为了尽量保障后续切分的行数据记录的完整,本申请实施例可以获取行数据记录的平均大小lineSize,以该平均大小lineSize作为切分的依据之一。在具体实现中,lineSize可以根据文件对象中的行数据记录的大小分布等特点来确定。在一种实施方式中,可以参考如下几种方式来确定行数据记录的平均大小:将第一个行数据记录的大小作为所述行数据记录的平均大小;或者,将最后一个行数据记录的大小作为所述行数据记录的平均大小;或者,随机选取一个行数据记录的大小作为所述行数据记录的平均大小;或者,计算前N行的行数据记录的大小平均值作为所述行数据记录的平均大小。具体来说,如果文件对象中每条行数据记录的大小都是相同的,或者基本相同,则可以直接选取第一行数据或最后一行数据或者随机一行数据的大小作为行数据记录的平均大小。如果文件对象中的行数据记录的大小分布是周期变化的,比如变化周期是50行,则取每50行数据的大小平均值作为行数据记录的平均大小,当然,除了可以取大小平均值作为行数据记录的平均大小以外,还可以取该变化周期内的行数据记录的大小的最大值,或者,最小值,或者,中位数等作为行数据记录的平均大小。另外,本申请实施例述及的前N行除了上述变化周期外,还可以是用户预先配置的行数,或随机读取的行数,本申请实施例对此无需加以限制。需要说明的是,上述确定行数据记录的平均大小的几种方式仅仅是本申请实施例的示例,本领域技术人员根据需要采用其他方式来确定行数据记录的平均大小来达到本申请的目的均是可以的。子步骤S113,计算所述文件对象大小与所述行数据记录的平均大小的商值,得到所述行数据记录的数量;可以根据totalSize及lineSize估算出文件对象中所拥有的行数据记录的数量number=totalSize/lineSize。子步骤S114,计算预设的文本数据块的数量与所述行数据记录的数量的商值,得到每个文本数据块所拥有的行数据记录的数量;在本申请实施例中,可以预先配置用户想要切分获得的文本数据块的数量m,在一种优选实施方式中,配置的方式可以为:用户直接输入 需要配置的文本数据块的数量;或者,若文本数据块的流速是1Mbps,用户需要10Mbps,那么切分成10份。根据文本数据块的数量m与行数据记录的数量number,可以得到每个文本数据块所拥有的行数据记录的数量为number/m。子步骤S115,依据所述文本数据块所拥有的行数据记录的数量,确定所述文件对象的多个初始切分位置;当确定每个文本数据块所拥有的行数据记录的数量以后,则可以确定文件对象的多个初始切分位置point,该初始切分位置point可以为:0,1*number/m,2*number/m,3*number/m,依次类推。子步骤S116,若所述初始切分位置不是行分隔符所在的位置,则将所述切分位置调整为行分隔符所在的位置;为了避免按照初始切分位置point进行切分时将一个完整的行数据记录隔断,本申请实施例可以对切分位置进行微调,以保证切分位置是在行尾或行首。在具体实现中,对初始切分位置调整的方式可以为:若初始切分位置不是行分隔符所在的位置,则将所述切分位置调整为行分隔符所在的位置。在本申请实施例的一种优选实施例中,子步骤S116进一步可以为:若所述初始切分位置不是行分隔符所在的位置,则向前探测或向后回退到与所述初始切分位置最接近的行分隔符的位置;将所述切分位置确定为所述最接近的行分隔符的位置。如图3a的切分位置示意图所示,根据子步骤S115得到的初始切分位置可能会位于行数据记录的中部,如果按照此初始切分位置进行切分,会把行数据记录隔断,导致行数据记录不完整。因此,在一种实施方式中,本申请实施例可以采用向前探测的方式,向前探测行分隔符,直到到达行尾或者文件结束,若探测到行分隔符,则将该初始切分位置更新为行分隔符所在的位置,如图3b所示的切分位置调整示意图一所示。在另一种实施方式中,与前述向前探测类似,本申请实施例还可以采用向后回退的方式来探测行分隔符,直到回退到行首或者文件开始, 若探测到行分隔符,则将该初始切分位置更新为行分隔符所在的位置。需要说明的是,向后回退的方式是较于向前探测的方式要求会更高一点,并且,其只提供给能够支持向后回退的文件系统使用。子步骤S117,对所述调整后的初始切分位置进行去重处理,得到多个切分位置。如图4a所示的切分位置调整示意图二所示,在具体实现中,可能会出现超长的行数据记录跨越多个文本数据块的情况,这种情况按照子步骤S116的处理后可以得到多个重复的切分位置,此时,可以只保留一个该重复的切分位置,删除其他重复的切分位置,去重结果如图4b的去重结果示意图所示。子步骤S12,按照所述多个切分位置对所述文件对象进行切分,得到多个文本数据块。获得多个切分位置以后,可以按照该多个切分位置进行文件对象的切分,得到对应的多个文本数据块。例如,按照步骤203进行文件内部切分后,可以得到如图5的文本数据块示意图所示的多个文本数据块。步骤204,当所述多个文件对象切分完成后,将所述多个文件对象对应的所有文本数据块并发写入目的端。第二层次细粒度的切分获得全部文本数据块以后,可以将所有文本数据块并发写入目的端。在具体实现中,可以采取分布式多机,和/或,多进程,和/或,多线程的方式并行读取多个文本数据块,从而提高了数据同步速度和效率。在具体实现中,由于分布式系统需要处理的数据量是庞大的,但是系统能够容纳的分布式机器或进程或线程数量是有限的,因此,可以使用一个进程或线程或分布式机器来处理多个文本数据块,并限定该进程或线程或分布式机器处理一个文本数据块的数据流量,以达到流量控制的目的。在本申请实施例的一种优选实施例中,步骤204可以包括如下子步骤:子步骤S21,分别将所述文本数据块的格式转换为中间态格式;应用于本申请实施例,定义了一种中转机制,源端数据与目的端数据通过该中转机制进行数据同步。该中转机制首先是将从源端数据切分得到的文本数据块的格式转换成中间态的格式,其中,中间态的格式既不是源端数据的格式,也不是目的端数据的格式,其是源端数据格式到目的端数据格式的一种过渡状态。在本申请实施例的一种优选实施例中,子步骤S21可以包括如下子步骤:子步骤S211,针对每个文本数据块的每条行数据记录,按照所述列分隔符进行切割,得到一个或多个列记录;本申请实施例可以根据结构化信息的特点,将行数据记录按照列分隔符进行分割,得到一个或多个列记录。例如,行数据记录为:1,2,3,abc,2015-07-1600:00:00,中国;其按照列分隔符“,”进行切割后,得到的列记录切割结果为:123abc2015-07-1600:00:00中国,共6列。子步骤S212,分别为所述列记录添加对应的预设数据类型,得到所述中间态格式。由于行数据记录内存储的都是字符数据,每一列数据已经丢失了具体的类型(整数、浮点数、日期、null)等,因此,当通过子步骤S211获得多个列记录后,可以根据用户预先的配置信息,为该多个列记录添加预设数据类型。作为本申请实施例的一种优选示例,预设数据类型至少可以包括如下类型的一种或多种:字符串STRING,长整型LONG,布尔型BOOLEAN,双精度浮点型DOUBLE,日期DATE,当然,该数据类型还可以包括字节类型Bytes,只是在文本读取过程中,不涉及该类型该预设数据类型可类比于关系数据库表,表的每一列有一个类型,如下表1所示。第一列第二列第三列第四列第五列STRINGLONGBOOLEANDOUBLEDATEAbc123true1.0011989-04-27abc456false2.0022007-09-01Abc123789true3.0032014-07-07表1作为一种示例,一个数据类型的配置实例如下代码所示:其中,index表示列在一行数据的索引,下标从0开始,type表示类型,对于date类型可配置format表示日期格式。需要说明的是,本申请实施例中涉及的都是字符数据的读取,而不是二进制数据(例如,mp3、图片)的读取,针对二进制数据的情况,可以使用Base64编码,转换为字符串类型STRING进行处理。子步骤S22,将所述中间态格式的文本数据块写入目的端;子步骤S23,在所述目的端中,将所述中间态的文本数据块转换为所述目的端所需的格式。获得文本数据块的中间态格式后,可以将该中间态格式的文本数据块写入目的端,则在目的端,可以将该中间态的文本数据块转换为目的端所需的数据格式类型,即,上述的预设数据类型作为一种中间态的数 据类型,起到了中转作用,则源端、目的端和预设数据类型的关系是:多种源端数据类型->5种预设数据类型->多种目的端类型。根据本申请实施例的中转机制,同步框架可以采用插件式的模式,无论是增加了源端的数据类型还是目的端的数据类型,都可以采用本申请实施例的中转机制快捷的完成数据类型的转换,丰富了不同存储系统间数据交换的形式,并且具有很强的拓展性。在一种实施方式中,在上述采用中转机制的格式转换过程中,本申请实施例还可以包括如下步骤:若所述文本数据块的格式转换所述中间态格式不成功,或者,所述中间态的文本数据块转换所述目的端所需的格式不成功,则产生脏数据;若所述脏数据超出预设阈值,则生成错误报告。具体来说,若上述子步骤S21和/或子步骤S23的格式转换失败,则对应的列记录可以作为脏数据处理,比如abc转换为数字、abc转换为日期等错误情况,若脏数据的数量超出脏数据限制后,可以报告错误,该文本数据块的同步任务结束。其中,作为一种示例,脏数据限制可以包括:1、脏数据条数,即超出指定条数的脏数据时任务报错;2、脏数据百分比,即超出指定百分比的脏数据时,任务报告错误。进一步的,当多个文本数据块写入目的端后,在目的端,若只建立一个文件用于存储多个文本数据块,则不能够做到多个线程(进程)并发写入同一个文件,导致数据互斥问题的产生。为了避免数据互斥,目的端可以建立与文本数据块一一对应的文件,用于进行文本数据块的存储和处理,即一个文本数据块对应目的端中的一个文件,每个文本数据块写入目的端不同的文件中。目的端中的文件可以包括文件标识,在一种实施方式中,该文件标识的命名方式可以为:用户指定一个文件前缀(即指定前缀),本申请实施例生产一个随机的32位UUID(UniversallyUniqueIdentifier,通用唯一识别码),该指定前缀与UUID拼接在一起形成文件标识。在具体实现中,向目的端写入文本数据块的写入方式可以有3种,第一种写入方式是truncate:表示写入文本数据块前,清理有相同指定前缀的历史数据;第二种写入方式是noConflict:表示写入文本数据块时,如果发现有相同指定前缀的历史数据,则生成错误报告,并退出数据同步;第三种写入方式是append:表示追加数据,不管是否有相同指定前缀的历史数据,都正常写入文本数据块。在本申请实施例中,通过粗粒度的文件级别切分以及细粒度的文件内部切分,将结构化信息切分成多个文本数据块,切分是关注文件内部的逻辑二维表结构,是一种通用的半结构化文件数据的通用同步解决方案另外,本申请实施例可以支持多种源端数据类型,通用性及拓展性强。需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。参照图6,示出了本申请一种基于ETL的文件处理系统的结构框图,具体可以包括如下模块:文件对象获取模块601,用于从源端获取多个文件对象;文件切分模块602,用于针对每个文件对象,进行文件内的数据切分,得到多个文本数据块;写入模块603,用于在所述多个文件对象切分完成后,将所述多个文件对象对应的所有文本数据块并发写入目的端。在本申请实施例的一种优选实施例中,所述文件对象获取模块601 可以包括如下子模块:结构化信息读取子模块,用于从源端读取结构化信息,所述结构化信息包括多个文件对象;结构化信息切分子模块,用于将所述结构化信息以单个文件对象为单位进行切分,得到多个文件对象。在本申请实施例的一种优选实施例中,所述文件切分模块602可以包括如下子模块:切分位置确定子模块,用于针对每个文件对象,确定多个切分位置;切分子模块,用于按照所述多个切分位置对所述文件对象进行切分,得到多个文本数据块。在本申请实施例的一种优选实施例中,所述文件对象包括多个行数据记录,所述切分位置确定子模块包括:文件大小获取单元,用于针对每个文件对象,获取所述文件对象的大小;行大小确定单元,用于确定所述行数据记录的平均大小;第一计算单元,用于计算所述文件对象大小与所述行数据记录的平均大小的商值,得到所述行数据记录的数量;第二计算单元,用于计算预设的文本数据块的数量与所述行数据记录的数量的商值,得到每个文本数据块所拥有的行数据记录的数量;初始切分位置确定单元,用于依据所述文本数据块所具有的行数据记录的数量,确定所述文件对象的多个初始切分位置;调整单元,用于在所述初始切分位置不是行分隔符所在的位置时,则将所述切分位置调整为行分隔符所在的位置;去重单元,用于对所述调整后的初始切分位置进行去重处理,得到多个切分位置。在本申请实施例的一种优选实施例中,所述调整单元还用于:若所述初始切分位置不是行分隔符所在的位置,则向前探测或向后回退到与所述初始切分位置最接近的行分隔符的位置;将所述切分位置确定为所述最接近的行分隔符的位置。在本申请实施例的一种优选实施例中,所述行大小确定单元还用于:将第一个行数据记录的大小作为所述行数据记录的平均大小;或者,将最后一个行数据记录的大小作为所述行数据记录的平均大小;或者,随机选取一个行数据记录的大小作为所述行数据记录的平均大小;或者,计算前N行的行数据记录的大小平均值作为所述行数据记录的平均大小。在本申请实施例的一种优选实施例中,所述写入模块603可以包括如下子模块:第一格式转换子模块,用于在所述多个文件对象切分完成后,分别将所述文本数据块的格式转换为中间态格式;数据写入子模块,用于采用多线程或者多进程或者分布式多机分别将对应的中间态格式的文本数据块写入目的端;第二格式转换子模块,用于在所述目的端中,将所述中间态的文本数据块转换为所述目的端所需的格式。在本申请实施例的一种优选实施例中,所述文本数据块包括一条或多条行数据记录,所述行数据记录包括列分隔符,所述第一格式转换子模块包括:切割单元,用于在所述多个文件对象切分完成后,针对每个文本数据块的每条行数据记录,按照所述列分隔符进行切割,得到一个或多个列记录;数据类型添加单元,用于分别为所述列记录添加对应的预设数据类型,得到所述中间态格式。在本申请实施例的一种优选实施例中,所述预设数据类型至少包括如下类型的一种或多种:字符串STRING,长整型LONG,布尔型 BOOLEAN,双精度浮点型DOUBLE,日期DATE。在本申请实施例的一种优选实施例中,所述系统还包括:脏数据产生模块,用于在所述文本数据块的格式转换所述中间态格式不成功时,或者,所述中间态的文本数据块转换所述目的端所需的格式不成功时,产生脏数据;错误报告生成模块,用于在所述脏数据超出预设阈值时,生成错误报告。在本申请实施例的一种优选实施例中,所述文件对象为能够进行随机读写的文件对象,所述文件对象至少可以包括如下对象的一种或多种:本地文件、OSS文件、SFTP文件、HDFS文件。对于系统实施例而言,由于其与上述方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序操作指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序操作指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编 程数据处理终端设备的处理器执行的操作指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序操作指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的操作指令产生包括操作指令装置的制造品,该操作指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序操作指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的操作指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。以上对本申请所提供的一种基于ETL的文件处理方法及系统进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐 述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1