CN114936026B - 一种半结构化数据的解析方法、系统、存储介质和设备 - Google Patents
一种半结构化数据的解析方法、系统、存储介质和设备 Download PDFInfo
- Publication number
- CN114936026B CN114936026B CN202210859451.5A CN202210859451A CN114936026B CN 114936026 B CN114936026 B CN 114936026B CN 202210859451 A CN202210859451 A CN 202210859451A CN 114936026 B CN114936026 B CN 114936026B
- Authority
- CN
- China
- Prior art keywords
- structured data
- semi
- component
- file
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- 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/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- 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/84—Mapping; Conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
Abstract
本发明公开了一种半结构化数据的解析方法、系统、存储介质和设备,其中一个实施例提供的解析方法包括,通过上传组件识别半结构化数据文件的类型和版本,并上传待解析的半结构化数据文件;根据类型和版本,通过解析组件从预设置的解析库中获取并加载对应的可修改的脚本代码片段;通过解析组件对半结构化数据文件进行解析以生成结构化数据;通过数据对象组件呈现、存储并输出结构化数据。本发明通过在解析半结构化数据的有向无环图中设置上传组件、解析组件和数据对象组件实现对半结构化数据的识别、解析和输出,尤其是通过解析组件中设置的可修改的脚本代码片段实现对不同的半结构化数据的解析,具备较高的灵活性,具有广泛的应用前景。
Description
技术领域
本发明涉及信息技术领域,特别是涉及一种半结构化数据的解析方法、系统存储介质和设备。
背景技术
伴随企业数字化的转型,企业业务的快速发展产生大量半结构化数据文件,这些半结构化的数据文件包括企业核心数据资产,具有较高应用价值。如何解析与管理这些非结构化数据成为亟待解决的技术问题。
中国专利公开号CN111930357A,名称《一种可视化建模作业流调度引擎的构建方法》的发明专利中公开了一种结合可视化建模工具需求,以组件化、可视化的方式,按照大数据建模分析流程,提供从数据读取、数据清洗、数据处理、模型构建、模型固化、模型评估、模型部署等数据建模分析全流程、一体式可闭环组件。该专利的特点是基于大数据算法,通过构建作业流程进行实现半结构化数据文件的解析,然而,当半结构化数据文件的嵌套层次结构较为复杂时,存在作业流程构建复杂的问题,并且存在适应性较差的问题。
中国专利公开号CN111698306A,名称《一种基于物联网的水文实时流数据采集处理方法》的发明专利中公开了一种利用智能解析技术对物联网传感器采集的结构化数据进行智能解析,只需采集人员配置采集参数,无需重新开发,就可以部署采集,具有更高的自动化采集水平。然而,该专利的应用场景主要集中在水文数据方面,数据主要为实时流数据的处理,存在数据类型单一的问题,并且对离线数据的处理能力不足。
中国专利公开号CN113012009A,名称《一种智能政策信息采集与分析系统》的发明专利中公开了一种智能政策信息采集与分析系统,涉及政策信息服务技术领域,为解决现有的不能够及时采集最新政策信息进行分析处理以及处理分析的过程中效率较低的问题。但是,该专利局限于政策相关内容,存在政策文件格式统一的问题,不适合推广至文件格式复杂的工业领域。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
为了解决上述问题至少之一,本发明第一个实施例提供一种半结构化数据的解析方法,包括步骤:
S1:通过上传组件识别半结构化数据文件的类型和版本,并上传待解析的半结构化数据文件;
S2:根据所述类型和版本,通过解析组件从预设置的解析库中获取并加载对应的可修改的脚本代码片段;
S3:通过所述解析组件对所述半结构化数据文件进行解析以生成结构化数据;
S4:通过数据对象组件呈现、存储并输出所述结构化数据,所述上传组件、解析组件和数据对象组件形成有向无环图。
进一步地,步骤S1进一步包括步骤:
S11:通过所述上传组件识别所述半结构化数据文件的名称、类型、版本和文件大小,根据预设置的传输阈值对所述半结构化数据文件进行分片并对各分片文件进行标识;
S12:所述上传组件根据预设置的存储地址将所述各分片文件分别上传对象服务器,以使得对象服务器根据各分片文件的标识进行文件合成以获取所述半结构化数据文件。
进一步地,步骤S12进一步包括:所述对象服务器将已合成的所述半结构化数据文件、以及未合成的各分片文件存储在所述对象服务器的临时缓存区,使得所述上传组件根据所述半结构化数据文件的名称、以及各分片文件的标识向所述对象服务器发送查询请求,以查询所述临时缓存区是否存储有所述半结构化数据文件或各分片文件,所述上传组件根据预设置的存储地址将未上传的各分片文件分别上传所述对象服务器。
进一步地,所述上传组件基于MinIO对象存储技术。
进一步地,在步骤S2之前,所述解析方法还包括:
根据待解析的半结构化数据文件构建脚本代码片段并存储在所述解析库中。
进一步地,所述脚本代码片段基于定制的解析规则设置多个解析参数,步骤S3进一步包括:
所述解析组件运行所述脚本代码片段,利用所述多个解析参数实现对所述半结构化数据文件的解析。
进一步地,所述有向无环图还包括数据清洗组件,在步骤S3之后且在步骤S4之前,所述解析方法还包括:
通过数据清洗组件对所述结构化数据进行数据清洗、过滤、加工、转换和计算。
进一步地,所述半结构化数据文件包括JSON、XML、YMAL、以及DAT中的任意一个;
和/或
所述脚本代码片段的脚本语言包括Java语言、Python语言、以及Groovy语言中的任意一个。
本发明的第二个实施例提供一种半结构化数据的解析系统,包括上传组件、解析组件、数据对象组件和控制器,其中,所述控制器被配置为:
通过上传组件识别半结构化数据文件的类型和版本,并上传待解析的半结构化数据文件;
根据所述类型和版本,通过解析组件从预设置的解析库中获取并加载对应的可修改的脚本代码片段;
通过所述解析组件对所述半结构化数据文件进行解析以生成结构化数据;
通过数据对象组件呈现、存储并输出所述结构化数据,所述上传组件、解析组件和数据对象组件形成有向无环图。
本发明的第三个实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明第一个实施例所述的方法。
本发明的第四个实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明的第一个实施例所述的方法。
本发明的有益效果如下:
本发明针对目前现有的问题,本发明提供一种半结构化数据的解析方法和解析系统,通过在解析半结构化数据的有向无环图中设置上传组件、解析组件和数据对象组件实现对半结构化数据的识别、解析和输出,尤其是通过解析组件中设置的可修改的脚本代码片段实现对不同的半结构化数据的解析,具体的,解析组件支持多种脚本代码片段和自定义参数,脚本代码片段是基于实际业务数据的半结构化规则编写,整个组件运行于平台提供的环境中以实现脚本的正常运行。本发明提供的解析组件的脚本代码片段具有易修改、易更新的灵活性能,具有广泛的应用前景。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本发明的一个实施例所述一种半结构化数据的解析方法流程图;
图2示出本发明的另一个实施例所述一种半结构化数据的解析系统框架图;
图3示出本发明的另一个实施例所述上传脚本代码片段界面示意图;
图4示出本发明的另一个实施例所述的一种计算机设备的结构示意图。
具体实施方式
为了更清楚地说明本发明,下面结合优选实施例和附图对本发明做进一步的说明。附图中相似的部件以相同的附图标记进行表示。本领域技术人员应当理解,下面所具体描述的内容是说明性的而非限制性的,不应以此限制本发明的保护范围。
针对上述情况,发明人经过经大量研究和试验提出,现有技术中半结构化数据解析的方法存在缺点的原因在于存在通用性差的问题,面对复杂多变的应用场景,存在多种不同的半结构化数据文件。另一方面,半结构化数据不易被计算机程序理解和处理,需要程序开发人员根据具体的需求完成相应处理程序的开发转化成结构化数据,并将所述处理程序集成进所述信息系统,考虑到实际应用场景下所述半结构化数据往往相对复杂和多变,依靠传统的单独开发解析程序,再集成进所述信息系统中的方式,开发效率较低且伴随每次业务逻辑的改变,都要进行相应的单元测试和整个所述信息系统的集成测试,极大的提高开发成本,并降低所述信息系统的灵活性。
根据上述问题和导致该问题的原因,如图1所示,本发明的一个实施例提供了一种半结构化数据的解析方法,包括步骤:
S1:通过上传组件识别半结构化数据文件的类型和版本,并上传待解析的半结构化数据文件;
S2:根据所述类型和版本,通过解析组件从预设置的解析库中获取并加载对应的可修改的脚本代码片段;
S3:通过所述解析组件对所述半结构化数据文件进行解析以生成结构化数据;
S4:通过数据对象组件呈现、存储并输出所述结构化数据,所述上传组件、解析组件和数据对象组件形成有向无环图。
针对现有技术中存在通用性较差的问题,本实施例利用脚本技术具有的轻量化、易修改、易理解的优点,将每一种半结构化数据和与之相对应的脚本代码片段进行整合,将核心的半结构化数据解析逻辑封装在所述脚本代码片段中,并设置在解析组件中,再通过包括上传组件、解析组件和数据对象组件的有向无环图中实现对半结构化数据的识别、解析和输出,有效弥补现有技术中存在的问题,且具有较高的实用性,能够显著降低开发成本,有效提高系统灵活性。
在一个可选的实施例中,所述半结构化数据文件包括但不限定于JS对象符号(JavaScript Object Notation, JSON)、XML、YMAL以及DAT,本发明对半结构化数据文件的格式不做具体的限定。
在一个可选的实施例中, 所述脚本代码片段的脚本语言包括但不限定于Java语言、Python语言以及Groovy语言,本发明对使用的脚本语言不做具体的限定。
本发明还提供一种半结构化数据的解析系统,如图2所示,包括上传组件100、解析组件200、数据对象组件300和控制器400,其中,上传组件100用于识别半结构化数据文件,例如识别半结构化数据文件的名称、类型、版本和文件大小;解析组件200包括可修改的脚本代码片段,用于将半结构化数据文件解析为结构化数据文件;数据对象组件用于展示和存储解析后的结构化数据文件。在本实施例中,上传组件100、解析组件200和数据对象组件300形成有向无环图,即三种组件通过有向无环图的拓扑结构形成最高效的约束条件和关键路径,以实现工程应用。
本发明所述半结构化数据的解析系统应用组件化的设计思想,将系统按照逻辑功能拆分并封装成若干具备某一独立功能的组件,组件之间通过通用、标准的接口进行交互,遵循高内聚低耦合的设计原则,能够实现各功能组件的拼接和修改,首先从底层基础架构层面针对通用性进行优化。
在一个具体的示例中,某银行需要将大量半结构化的JSON文件数据,通过所述半结构化数据的解析系统进行上传、解析、清洗以及转化成结构化数据,并进行数据保存、数据分析和数据展示。 具体来讲,包含如下步骤:
第一步:通过上传组件100识别半结构化数据文件的类型和版本,并上传待解析的半结构化数据文件。
在本实施例中,所述半结构化数据具体为JSON文件,该文件格式是一种轻量级的数据交换格式,广泛应用于信息系统之间的数据传递操作,为了实现将所述半结构化的JSON文件导入所述半结构化数据的解析系统,具体来讲在所述上传组件100的前端用户界面中,响应于用户的第一操作,用户选择一个待解析的JSON文件并点击上传按钮,所述上传组件100的前端程序对该文件进行初步的分析,确定待解析文件的名称、大小、类型、版本以及哈希(Hash)值,根据待解析文件的类型和大小等信息进行初步的校验,并调用所述上传组件100的接口,将待解析文件上传至对象服务器,实现将待解析文件导入所述半结构化数据的解析系统。
在本实施例中,将待解析的半结构化数据文件导入所述半结构化数据解析系统的过程,具有较强的通用性和易用性。具体体现在对于所述半结构化数据解析系统的用户而言,无需考虑所述半结构化数据文件的大小和类型,也无需关心网络带宽、传输速率和连接稳定性等因素,只需进行所述用户的第一操作,选择待解析半结构化数据文件并点击上传按钮即可,所述半结构化数据解析系统的所述上传组件100将上述具体的技术细节问题的解决方案封装在所述上传组件100内部,体现出较高的通用性和易用性。
在一个可选的实施例中,所述步骤S1进一步包括步骤:
S11:通过所述上传组件识别所述半结构化数据文件的名称、类型、版本和文件大小,根据预设置的传输阈值对所述半结构化数据文件进行分片并对各分片文件进行标识;
S12:所述上传组件根据预设置的存储地址将所述各分片文件分别上传对象服务器,以使得对象服务器根据各分片文件的标识进行文件合成以获取所述半结构化数据文件。
在本实施例中,所述对文件进行标识,在本发明中是指对一个文件进行Hash操作,计算出该文件的Hash值,并以该Hash值做为所述文件的文件标识。所述Hash操作的算法包括但不限定于MD5,即本发明中所述文件标识为根据所述文件内容生成MD5的Hash值,所述文件包括待解析的半结构化数据文件和所述分片文件。根据Hash算法的特点,本发明所述文件标识能够确保唯一性和安全性,当所述文件的内容有任何微小的改变时,所述文件的Hash值必然会随之发生改变,因此能够保证内容不同的所述文件拥有不同的文件标识,即能够避免文件标识冲突;另一方面,所述文件的内容发生改变,例如在传输过程中被篡改或者在组合分片时有遗漏,必然会导致所述文件标识随之改变,确保所述文件内容的完整和安全。
所述预设置的传输阈值为一个预设值的系统参数,具体含义为所述文件的文件大小,例如500M。所述待解析半结构化数据,来源与具体的某个应用场景,其文件大小和文件数量未做具体的限定。
例如在一个可选的实施例中,所述待解析的半结构化数据文件为2G,考虑到所述上传组件100的前端对上传文件大小的限制以及超大体积文件在传输时的速度较慢,且有更高的概率发生传输错误并导致传输失败,因此所述上传组件100的前端对所述待解析的半结构化数据文件进行分片,并对每一个分片文件进行标识,即计算其文件的MD5的Hash值。对所述文件进行分片,能够确保所述待解析的半结构化数据文件能够符合所述上传组件100的前端对上传文件大小的限制要求,并且缩小单个上传文件的体积能够显著提高文件上传的成功率和效率;另一方面,每个分片文件分别进行文件标识,能够使得所述上传组件能够并行进行多个文件的上传,能够充分利用网络带宽,并显著提高整个文件的上传速度。当所有分片都上传至所述对象服务器后,所述上传组件100的前端程序感知用户指定文件上传完毕,立即通知所述上传组件100的后端服务,并上报所述半结构化数据文件的元数据(包含MD5值、版本号、原始文件名称等),所述后端服务根据所述半结构化数据文件的元数据,将分片文件进行合成,以获取所述半结构化数据文件,并在合成完毕后,通知所述上传组件100的前端程序,所述前端程序通知用户文件上传成功。
在一个可选的实施例中,还可以在上传分片文件时附加原始文件的文件标识,当所述对象服务器接收所有分片文件并将其重新合并成所述半结构化数据文件后,对合并后的文件进行文件标识,并与所述附加的原始文件标识进行比对,从而确保合并后的文件与原始文件完全一致,使得所述半结构化数据解析系统具有较高的安全性。
进一步地,在另一个可选的实施例中,所述待解析半结构化数据文件的体积较小但数量众多,例如按照日期划分,每天有上万个所述半结构化数据文件,本实施例所述半结构化数据解析系统还能够将大量所述待解析半结构化数据文件进行打包压缩,即将上万个较小的数据文件压缩合并成一个压缩文件,并调用所述上传组件100的接口将所述压缩文件上传至所述对象服务器,然后再调用所述上传组件100的接口在所述对象服务器上将接收到的所述压缩文件进行解压缩,还原成所述上万个半结构化数据文件。本实施例通过将数万个文件压缩合并成一个文件的操作,显著的提升了所述上传组件100的速度、效率和安全性。具体来讲,因为每次上传文件都要经过创建连接、确认连接、传输数据、断开链接四个步骤,虽然相对于传输数据本身的时间开销而言,关于连接的创建、确认和断开操作本身消耗的时间较少,但是考虑到当需要传输的文件数量众多时,积少成多,会消耗较多的时间来完成与网络连接相关的操作。所以本实施例中将数万个文件合并成一个文件后能够有效的提高所述上传组件100的上传速度;另一方面,考虑到数据文件通过网络传输时,经常会遇到网络阻塞的情况,导致该文件传输失败,需要进行异常处理,并重新传输该文件,当文件数量较多时,会有更大的概率发生传输失败重新传输的情况,将消耗更多的传输时间,并且当文件上传到所述对象服务器后,需要对文件进行校验操作,文件数量越多消耗的校验时间越长,所以本实施例中将数万个文件合并成一个文件后能够有效的提高所述上传组件100的上传效率;另一方面,本实施例中将数万个文件合并成一个文件后,还能够对压缩文件进行加密保护,能够有效的提高所述上传组件100的安全性。
在一个可选的实施例中,所述S12进一步包括:所述对象服务器将已合成的所述半结构化数据文件、以及未合成的各分片文件存储在所述对象服务器的临时缓存区,使得所述上传组件根据所述半结构化数据文件的名称、以及各分片文件的标识向所述对象服务器发送查询请求,以查询所述临时缓存区是否存储有所述半结构化数据文件或各分片文件,所述上传组件根据预设置的存储地址将未上传的各分片文件分别上传所述对象服务器。
在本实施例中,通过在所述对象服务器上创建临时缓存区,并通过所述文件标识确保缓存区内文件或者分片文件命名不冲突,存储在所述临时缓存区中的临时文件或分片文件只存储7天,过期将自动被删除,为所述上传组件100提供断点续传、不匹配报错呈现解析结果和异常重传功能。在对象服务器建立临时缓存区缓存临时文件或分片文件的基础上,所述上传组件在上传前可以先向对象服务器发送查询请求以查询所述临时缓存区是否存储有所述半结构化数据文件或各分片文件,若存在则不再上传文件并表征出文件秒传的功能,即对于对象服务器中已有的半结构化数据或分片文件,在解析系统的前端界面呈现出快速完成上传。具体的,针对所述临时缓冲区中存在的文件,根据所述MD5值和所述元数据中的MD5值进行比较,如完全相同,则能够实现秒传功能,能够有效的提升所述上传组件100的稳定性和安全性。并且,上传组件基于查询结果,能够按照预设置的存储地址将未上传的文件进行上传,从而提高了上传组件的上传效率,节省网络资源,加快上传速度。
在一个可选的实施例中,所述上传组件100还能够基于MinIO对象存储技术,实现对象存储集群,提供完善的API支持;对于JSON和CSV文件,支持SQL脚本直接获取文件数据而无需下载文件;能够直传文件到服务器,无需经过中转。因此能够提供高可用、分布式对象存储服务,实现高可靠、高可用的资源存储,具有较高的读写性能,并且操作简单易用。
第二步:根据所述类型和版本,通过解析组件从预设置的解析库中获取并加载对应的可修改的脚本代码片段。
在本实施例中,所述脚本代码片段使用的开发语言为Python语言,所述Python语言提供了高效的高级数据结构,能够简单有效地实现面向对象编程。Python语言作为一种解释型语言,语法灵活且支持动态类型,是一门应用广泛、功能强大的脚本语言。Python语言的特性刚好满足本实施例中所述可修改的脚本代码片段的要求。具体来讲,针对现有技术中解析半结构化数据存在的通用性差的问题,本方法将最为核心的半结构化数据解析部分单独进行处理,利用脚本技术具有的轻量化、易修改、易理解的优点,将每一种半结构化数据和与之相对应的脚本代码片段进行整合,将核心的半结构化数据解析逻辑封装在所述脚本代码片段中,并设置在解析组件中,再通过包括上传组件、解析组件和数据对象组件的有向无环图中实现对半结构化数据的识别、解析和输出,有效弥补现有技术中存在的问题,且具有较高的实用性,能够显著降低开发成本,有效提高系统灵活性。
在本实施例中,所述脚本代码片段具有轻量化、易修改和易理解的特点,在语法层面相对于传统编译型语言的强数据类型,脚本语言采用动态类型并且弱化指针、内存管理等概念,大幅降低开发难度和代码量,用较少的代码能够实现相对强大的功能;另一方面,利用解释型语言无需编译的特点,无需重新打包和发布整个工程,也无需重新启动服务器,就能够实现代码的动态热更新。因此本实施例所述解析组件200,利用所述脚本代码片段,将复杂、灵活、多变的半结构化数据的解析逻辑封装在所述解析组件内部,再通过所述控制器400,使用通用的数据接口,实现统一的数据处理流程,具备较高的灵活性、稳定性以及可扩展性。
在一个可选的实施例中,在所述S2之前,所述解析方法还包括:根据待解析的半结构化数据文件构建脚本代码片段并存储在所述解析库中。
具体来讲,所述控制器400,根据所述上传组件100上报的所述待解析半结构化数据的类型和版本,查询所述解析库,由所述解析组件200从预设置的解析库中获取并加载对应的可修改的脚本代码片段。在一个可选的实施例中,如图3所述,响应于用户的第二操作,将应对于某类特征的所述半结构化数据的所述可修改的脚本代码片段存储在所述解析库中,所述脚本代码片段文件的文件名为JSONParser.py。所述某类型特征包括但不限定于所述半结构化数据的类型和版本号,本领域技术人员应当根据具体的需求自行定义所述半结构化数据类别的唯一标识,即通过一个唯一标识将所述待解析的半结构化数据文件和与之匹配的脚本代码片段对应起来。在本实施例中,所述待解析半结构化数据文件为name.json,版本号为1.0.0,由文件名称和版本号组合起来得到所述脚本代码片段的唯一标识为:name_json_1.0.0.0,在所述解析库中,保存有与之相对应的脚本代码片段。
本实施例所述的脚本代码片段的加载方法,还具有较高的通用性、易用性、稳定性和安全性。在一个可选的实施例中,所述脚本代码片段的脚本语言包括Java语言、Python语言以及Groovy语言中的任意一种,针对每一种半结构化的数据文件,都能够与之匹配一段所述脚本语言片段,由所述控制器400采用统一的接口进行调用和管理,由所述解析组件统一控制脚本代码片段的加载、执行和卸载过程,对于每一种半结构化的数据文件,能够使用统一的管理流程进行内存管理、进程调度、进程通信、缓存管理、共享数据以及沙盒管理等,具有较高的通用性。
另一方面,本实施例所述的脚本代码片段的加载方法具有较高的易用性,具体体现在:开发阶段:得益于脚本语言的特点,相对于传统编译型编程语言,具有动态弱数据类型、自动内存管理、自动垃圾回收等特性,语法清晰简明、功能完善全面;部署阶段:因脚本语言本身解释执行,能够动态加载,支持热更新无需重启服务,因此具有较高的易用性;测试阶段:所述脚本代码片段只针对某个具体的业务逻辑进行封装,相对功能单一,且参考上述通用性的描述,能够让开发人员专注于业务逻辑本身的开发,对于统一通用的技术细节处理,能够由所述控制器和所述解析组件统一完成,因此相对易于测试,具有较高的易用性。
另一方面,本实施例所述的脚本代码片段的加载方法具有较高的稳定性,具体体现在:所述业务逻辑一旦完成开发,就无需考虑后续的需求变化,对于每个版本的所述半结构化的数据文件,都有一个所述脚本代码片段与之相对应,能够随时实现版本的回滚或者替换,在上述易于开发、易于部署、易于测试的基础上,基于统一、通用的控制器400管理相关技术细节前提下,所述脚本代码片段具有较高的稳定性。
另一方面,本实施例所述的脚本代码片段的加载方法具有较高的安全性,具体体现在所有的脚本代码片段都由所述控制器400统一管理,由所述解析组件200负责加载与运行,因此能够通过底层框架确保所述脚本代码片段的安全性,能够通过统一的内存管理机制防止某一个脚本代码片段占用过多的硬件资源,如内存泄露、内存溢出攻击、无限循环占用CPU资源等;另一方面,能够通过统一的脚本源码安全检测机制,防止所述脚本代码片段中包含有破坏性的调用语句,甚至能够设定不同的安全级别限制脚本中API使用的权限;另外还能够通过统一的日志管理,实现快速定位热点区域,记录系统崩溃调用堆栈等方式协助排查在脚本运行过程当中出现的异常情况,具有较高的安全性。
第三步:通过所述解析组件对所述半结构化数据文件进行解析以生成结构化数据。
本实施例所述对半结构化数据文件进行解析以生成结构化数据的具体过程是基于数据处理引擎来实现,包括但不限定于Apache NiFi引擎,所述Apache NiFi是基于Java开发,使用Maven支持包的构建管理。Apache NiFi基于Web方式工作,后台在服务器上进行调度。能够为数据处理定义一个流程并进行相应的处理,后台具有数据处理引擎、任务调度等组件,能够实现数据的并行处理具有较高的调度能力。
在一个可选的实施例中,所述脚本代码片段基于定制的解析规则设置多个解析参数,所述S3进一步包括:
通过所述解析组件运行所述脚本代码片段,通过所述多个解析参数实现对所述半结构化数据文件的解析。
在本实施例中,所述解析参数包含但不限定于系统公共参数和针对某个具体的半结构化数据文件专用的私有参数。使用所述解析参数,能够在解析所述半结构化数据的同时,对所述半结构化数据进行数据清洗、过滤、加工、转换和计算。
在一个可选的实施例中,所述有向无环图还包括数据清洗组件,在所述S3之后,在所述S4之前,所述解析方法还包括:通过数据清洗组件对所述结构化数据进行数据清洗、过滤、加工、转换和计算。
在本实施例中,结合所述多个解析参数的限定,基于所述数据处理引擎NiFi,对所述半结构化数据文件中的数据进行清洗和过滤,从而实现清洗后的数据符合数据对象组件300的输出要求。
在一个具体的示例中,以Python程序解析JSON数据文件为例来说明所述数据处理引擎实现数据处理流程流程的实现情况,首先,构建由Python程序解析JSON数据文件的作业流程,具体包含一个JSON数据文件上传组件、一个支持Python脚本代码片段的解析组件、一个数据清洗组件和一个对象输出组件,上述组件通过所述控制器的调度形成一个有向无环图。所述解析组件200的Python脚本运行时对上游节点的传递过来的JSON数据文件进行识别,判断当前数据文件类型是否为JSON,如是JSON类则开始解析JSON数据文件,否则提示告知用户进行重新上传。解析JSON数据过程则依据数据文件的逻辑进行解析,支持将JSON数据文件中逻辑对象解析为数据对象;另一方面解析组件支持录入参数,使用Python语言开发的脚本代码片段读取解析参数,例如限定只获取2000年以后的相关数据,在所述数据清洗组件中,读取该解析参数将2000年以前的订单数据过滤掉,通过解析参数和所述脚本代码片段的结合,能够灵活准确的实现对所述半结构化数据文件进行数据清洗、过滤、加工、转换和计算,整个流程具有较高的实用性。
进一步地,在一个可选的实施例中借助所述清洗组件可以预览输出的清洗后的数据,能够了解数据的关键属性是否符合用户要求。然后结合JSON数据文件中的数据,将数据清洗组件处理之后的数据按照条件进行分类输出,将不同数据集合输出到对应的所述数据对象300中。
第四步:通过数据对象组件呈现、存储并输出所述结构化数据。
本实施例所述数据对象300,能够读取所述解析组件获取的数据,或者经过所述数据清洗组件对所述结构化数据进行数据清洗、过滤、加工、转换和计算后的结构化数据进行存储和展示。具体来讲用于存储结构化数据的数据库包含但不限于关系型数据库、列式数据等。
至此所述半结构化数据的解析系统完成对所述半结构化数据文件的解析、处理和展示。针对现有技术存在的解析半结构化数据通用性较差的问题,本发明设计一种支持脚本代码片段的解析组件来解析半结构化的数据文件,解析组件支持多种脚本代码片段以及自定义参数,脚本代码片段是用户基于实际业务数据的规则编写,整个组件运行于平台提供的环境中实现脚本的正常运行。由于脚本代码片段是基于业务进行编写并随业务变化而变化,具有特殊业务场景的适应支持能力。解析组件解析完成之后支持多个数据对象的输出,具备较高的灵活性,具有广泛的应用前景。
本发明的另一个实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现:本发明的第一个实施例所示的一种半结构化数据的解析方法,包括:
S1:通过上传组件识别所述半结构化数据文件的类型和版本,并上传待解析的半结构化数据文件;
S2:根据所述类型和版本,通过解析组件从预设置的解析库中获取并加载对应的可修改的脚本代码片段;
S3:通过所述解析组件对所述半结构化数据文件进行解析以生成结构化数据;
S4:通过数据对象组件呈现、存储并输出所述结构化数据,所述上传组件、解析组件和数据对象组件形成有向无环图。
在实际应用中,所述计算机可读存储介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
如图4所示,本发明的另一个实施例提供的一种计算机设备的结构示意图。图4显示的计算机设备12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图4所示,计算机设备12以通用计算设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图4未显示,通常称为“硬盘驱动器”)。尽管图4中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机设备12交互的设备通信,和/或与使得该计算机设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图4所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图4中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理器单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的一种半结构化数据的解析方法方法。
需要说明的是,本发明实施例提供的解析方法的步骤的先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易获得的变化的方法,都应涵盖在本发明的保护范围之内,因此不再赘述。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定,对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动,这里无法对所有的实施方式予以穷举,凡是属于本发明的技术方案所引伸出的显而易见的变化或变动仍处于本发明的保护范围之列。
Claims (10)
1.一种半结构化数据的解析方法,其特征在于,包括步骤:
S1:通过上传组件识别半结构化数据文件的类型和版本,并上传待解析的半结构化数据文件;
S2:根据所述类型和版本,通过解析组件从预设置的解析库中获取并加载对应的可修改的脚本代码片段,每个脚本代码片段对应一种半结构化数据文件,所述半结构化数据文件的半结构化数据解析逻辑封装在对应的脚本代码片段中,所述解析组件统一控制所述脚本代码片段的加载、执行和卸载过程;
S3:通过所述解析组件对所述半结构化数据文件进行解析以生成结构化数据;
S4:通过数据对象组件呈现、存储并输出所述结构化数据;
所述上传组件、解析组件和数据对象组件形成有向无环图,每个组件包括封装的不同逻辑功能,各组件通过有向无环图的拓扑结构形成约束条件和关键路径,各组件之间通过通用、标准的接口进行交互。
2.根据权利要求1所述的解析方法,其特征在于,步骤S1进一步包括步骤:
S11:通过所述上传组件识别所述半结构化数据文件的名称、类型、版本和文件大小,根据预设置的传输阈值对所述半结构化数据文件进行分片并对各分片文件进行标识;
S12:所述上传组件根据预设置的存储地址将所述各分片文件分别上传对象服务器,以使得对象服务器根据各分片文件的标识进行文件合成以获取所述半结构化数据文件。
3.根据权利要求2所述的解析方法,其特征在于,
步骤S12进一步包括:所述对象服务器将已合成的所述半结构化数据文件、以及未合成的各分片文件存储在所述对象服务器的临时缓存区,使得所述上传组件根据所述半结构化数据文件的名称、以及各分片文件的标识向所述对象服务器发送查询请求,以查询所述临时缓存区是否存储有所述半结构化数据文件或各分片文件,所述上传组件根据预设置的存储地址将未上传的各分片文件分别上传所述对象服务器。
4.根据权利要求1所述的解析方法,其特征在于,在步骤S2之前,所述解析方法还包括:
根据待解析的半结构化数据文件构建脚本代码片段并存储在所述解析库中。
5.根据权利要求4所述的解析方法,其特征在于,所述脚本代码片段基于定制的解析规则设置多个解析参数,步骤S3进一步包括:
所述解析组件运行所述脚本代码片段,利用所述多个解析参数实现对所述半结构化数据文件的解析。
6.根据权利要求1所述的解析方法,其特征在于,所述有向无环图还包括数据清洗组件,在步骤S3之后且在步骤S4之前,所述解析方法还包括:
通过数据清洗组件对所述结构化数据进行数据清洗、过滤、加工、转换和计算。
7.根据权利要求1-6中任一项所述的解析方法,其特征在于,
所述半结构化数据文件包括JSON、XML、YMAL、以及DAT中的任意一个;
和/或
所述脚本代码片段的脚本语言包括Java语言、Python语言、以及Groovy语言中的任意一个。
8.一种半结构化数据的解析系统,其特征在于,所述解析系统包括上传组件、解析组件、数据对象组件和控制器,其中,所述控制器被配置为:
通过上传组件识别半结构化数据文件的类型和版本,并上传待解析的半结构化数据文件;
根据所述类型和版本,通过解析组件从预设置的解析库中获取并加载对应的可修改的脚本代码片段,每个脚本代码片段对应一种半结构化数据文件,所述半结构化数据文件的半结构化数据解析逻辑封装在对应的脚本代码片段中,所述解析组件统一控制所述脚本代码片段的加载、执行和卸载过程;
通过所述解析组件对所述半结构化数据文件进行解析以生成结构化数据;
通过数据对象组件呈现、存储并输出所述结构化数据;
所述上传组件、解析组件和数据对象组件形成有向无环图,每个组件包括封装的不同逻辑功能,各组件通过有向无环图的拓扑结构形成约束条件和关键路径,各组件之间通过通用、标准的接口进行交互。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一项所述的方法。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210859451.5A CN114936026B (zh) | 2022-07-22 | 2022-07-22 | 一种半结构化数据的解析方法、系统、存储介质和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210859451.5A CN114936026B (zh) | 2022-07-22 | 2022-07-22 | 一种半结构化数据的解析方法、系统、存储介质和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114936026A CN114936026A (zh) | 2022-08-23 |
CN114936026B true CN114936026B (zh) | 2022-11-11 |
Family
ID=82868154
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210859451.5A Active CN114936026B (zh) | 2022-07-22 | 2022-07-22 | 一种半结构化数据的解析方法、系统、存储介质和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114936026B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110377291A (zh) * | 2019-06-19 | 2019-10-25 | 深圳壹账通智能科技有限公司 | 结构化数据转换方法、装置、计算机设备和存储介质 |
CN111698306A (zh) * | 2020-06-04 | 2020-09-22 | 中国科学院地理科学与资源研究所 | 一种基于物联网的水文实时流数据采集处理方法 |
CN111930357A (zh) * | 2020-09-17 | 2020-11-13 | 国网浙江省电力有限公司营销服务中心 | 一种可视化建模作业流调度引擎的构建方法 |
CN113012009A (zh) * | 2021-01-26 | 2021-06-22 | 南京畅丰信息科技有限公司 | 一种智能政策信息采集与分析系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9984428B2 (en) * | 2015-09-04 | 2018-05-29 | Palantir Technologies Inc. | Systems and methods for structuring data from unstructured electronic data files |
WO2022077222A1 (zh) * | 2020-10-13 | 2022-04-21 | 深圳晶泰科技有限公司 | 一种有向无环图式自动任务流的通用描述语言数据系统 |
-
2022
- 2022-07-22 CN CN202210859451.5A patent/CN114936026B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110377291A (zh) * | 2019-06-19 | 2019-10-25 | 深圳壹账通智能科技有限公司 | 结构化数据转换方法、装置、计算机设备和存储介质 |
CN111698306A (zh) * | 2020-06-04 | 2020-09-22 | 中国科学院地理科学与资源研究所 | 一种基于物联网的水文实时流数据采集处理方法 |
CN111930357A (zh) * | 2020-09-17 | 2020-11-13 | 国网浙江省电力有限公司营销服务中心 | 一种可视化建模作业流调度引擎的构建方法 |
CN113012009A (zh) * | 2021-01-26 | 2021-06-22 | 南京畅丰信息科技有限公司 | 一种智能政策信息采集与分析系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114936026A (zh) | 2022-08-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107506451B (zh) | 用于数据交互的异常信息监控方法及装置 | |
US10481884B2 (en) | Systems and methods for dynamically replacing code objects for code pushdown | |
US20100162225A1 (en) | Cross-product refactoring apparatus and method | |
US7765293B2 (en) | System and algorithm for monitoring event specification and event subscription models | |
CN110489310B (zh) | 一种记录用户操作的方法、装置、存储介质及计算机设备 | |
CN111324619B (zh) | 微服务系统中的对象更新方法、装置、设备和存储介质 | |
WO2023061874A1 (en) | Checking source code validity at time of code update | |
US20230259358A1 (en) | Documentation enforcement during compilation | |
CN111240940A (zh) | 实时业务监控方法、装置、电子设备、存储介质 | |
CN110716804A (zh) | 无用资源的自动删除方法、装置、存储介质及电子设备 | |
CN110188308B (zh) | 客户端自动打点上报方法、存储介质、设备及系统 | |
CN110889013B (zh) | 一种基于xml的数据关联方法、装置、服务器及存储介质 | |
CN114936026B (zh) | 一种半结构化数据的解析方法、系统、存储介质和设备 | |
WO2024001240A1 (zh) | 多种技术栈的任务集成方法及装置 | |
US8607201B2 (en) | Augmenting visualization of a call stack | |
CN112346774A (zh) | 一种应用安装包的生成方法和装置 | |
US10534694B2 (en) | Problem diagnosis technique of memory corruption based on regular expression generated during application compiling | |
CN112394920B (zh) | 一种应用软件开发方法、平台和电子设备 | |
CN114090514A (zh) | 分布式系统的日志检索方法及装置 | |
CN116069744A (zh) | 数据处理方法、装置、设备、存储介质及产品 | |
CN111880775A (zh) | 多模块分层架构实现方法、装置、电子设备、存储介质 | |
CN111290758A (zh) | 模块解耦方法及装置、计算机可读存储介质、电子设备 | |
Koyama et al. | Log message with JSON item count for root cause analysis in microservices | |
CN113986322B (zh) | 一种动态修改页面代码的方法、装置及存储介质 | |
CN115080105A (zh) | 数据请求处理方法和电子设备 |
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 |