CN117421302A - 一种数据处理方法及相关设备 - Google Patents

一种数据处理方法及相关设备 Download PDF

Info

Publication number
CN117421302A
CN117421302A CN202311441452.9A CN202311441452A CN117421302A CN 117421302 A CN117421302 A CN 117421302A CN 202311441452 A CN202311441452 A CN 202311441452A CN 117421302 A CN117421302 A CN 117421302A
Authority
CN
China
Prior art keywords
data
target
database
data table
metadata
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.)
Pending
Application number
CN202311441452.9A
Other languages
English (en)
Inventor
叶强盛
蒋杰
刘煜宏
陈鹏
唐暾
邓启斌
薛文伟
于华丽
吴怡雯
程广旭
宋新村
何志鸣
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202311441452.9A priority Critical patent/CN117421302A/zh
Publication of CN117421302A publication Critical patent/CN117421302A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/283Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供了一种数据处理方法及相关设备,该方法包括:获取针对第一数据库的操作请求,操作请求用于请求对第一数据库中的第一数据表执行关于目标数据的目标操作;查找第一数据表的元数据,该第一数据表的元数据是指:在第二数据库中创建与第一数据表提供相同服务的第二数据表时,所使用的数据;第二数据库是指:与第一数据库存在异构差异,且计算性能优于第一数据库的计算性能的数据库;根据查找到的元数据生成目标执行计划;按照目标执行计划,在第二数据库中对第二数据表执行关于目标数据的目标操作。通过本申请实施例,可以提升数据处理效率。

Description

一种数据处理方法及相关设备
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据处理方法及相关设备。
背景技术
随着大数据技术的发展,大数据领域中存在许多的数据库(或称为数据仓库系统),以应对各种场景下的业务需求。但是一些数据库的处理能力并不能很好地处理海量的数据,主要体现在无法快速地响应操作需求,计算速度较慢等方面。如果用户想要提升当前数据库的性能,需重新开发系统对数据库进行升级,以统一地管理和存储数据,这样会带来较高的开发成本;如果引入新的数据库,并将数据存储在当前数据库和该新的数据库中,当用户需使用不同数据库中的数据时,由于不同数据库之间的异构差异,用户需要手动配置很多信息并感知到不同数据库,数据处理效率不高。
发明内容
本申请实施例提供一种数据处理方法及相关设备,可以通过元数据屏蔽不同数据库之间的异构差异,从而利用第二数据库辅助提升第一数据库的性能,提升数据处理效率。
一方面,本申请实施例提供了一种数据处理方法,该方法包括:
获取针对第一数据库的操作请求,所述操作请求用于请求对所述第一数据库中的第一数据表执行关于目标数据的目标操作;
查找所述第一数据表的元数据,所述第一数据表的元数据是指:在第二数据库中创建与所述第一数据表提供相同服务的第二数据表时,所使用的数据;所述第二数据库是指:与所述第一数据库存在异构差异,且计算性能优于所述第一数据库的计算性能的数据库;
根据查找到的元数据生成目标执行计划,所述目标执行计划用于指示对所述第二数据库中的第二数据表执行关于目标数据的目标操作;
按照所述目标执行计划,在所述第二数据库中对所述第二数据表执行关于目标数据的目标操作。
一方面,本申请实施例提供了一种数据处理装置,该装置包括:
获取单元,用于获取针对第一数据库的操作请求,所述操作请求用于请求对所述第一数据库中的第一数据表执行关于目标数据的目标操作;
查找单元,用于查找所述第一数据表的元数据,所述第一数据表的元数据是指:在第二数据库中创建与所述第一数据表提供相同服务的第二数据表时,所使用的数据;所述第二数据库是指:与所述第一数据库存在异构差异,且计算性能优于所述第一数据库的计算性能的数据库;
处理单元,用于根据查找到的元数据生成目标执行计划,所述目标执行计划用于指示对所述第二数据库中的第二数据表执行关于目标数据的目标操作;
所述处理单元,还用于按照所述目标执行计划,在所述第二数据库中对所述第二数据表执行关于目标数据的目标操作。
一方面,本申请实施例提供一种计算机设备,该计算机设备包括:
处理器,适用于执行计算机程序;
计算机存储介质,计算机存储介质中存储有计算机程序,计算机程序被处理器执行时,实现如上述数据处理方法。
一方面,本申请实施例提供一种计算机存储介质,该计算机存储介质中存储有计算机程序,该计算机程序被处理器加载并执行如上述数据处理方法。
一方面,本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机程序或计算机指令,该计算机程序或计算机指令被处理器执行时实现上述数据处理方法。
在本申请实施例中,可获取针对第一数据库的操作请求,该操作请求用于请求对第一数据库中的第一数据表执行关于目标数据的目标操作。之后,可查找第一数据表的元数据,该元数据是指在第二数据库中创建与第一数据表提供相同服务的第二数据表时,所使用的数据;其中,第二数据库与第一数据库存在异构差异,且第二数据库的计算性能优于第一数据库的计算性能。进一步地,根据查找到的元数据生成目标执行计划,该目标执行计划用于指示对第二数据库中的第二数据表执行关于目标数据的目标操作。可见,通过元数据能够提供与第一数据表相同服务的第二数据表,可屏蔽异构数据库之间的差异,这样基于目标执行计划的生成能够将对第一数据表执行的目标操作转换为对第二数据表执行的相同操作,进而按照该目标执行计划在第二数据库中对第二数据表执行关于目标数据的目标操作。这样,请求对第一数据库中的第一数据表执行的目标操作,实际执行过程中是对第二数据库中的第二数据表执行,基于第二数据库更优异的计算性能,能够辅助第一数据库进行提速,提升数据库性能,并高效地处理数据。基于第二数据表与第一数据表提供的相同服务,第一数据表和第二数据表之间具备一致性,这样就能够屏蔽异构数据库之间的差异,用户无需感知到异构数据库,也就不需要复杂的操作配置,从而可降低配置复杂度,进一步提升数据处理效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种数据处理系统的架构图;
图2是本申请实施例提供的一种数据处理方法的流程示意图;
图3是本申请实施例提供的一种数据处理效果的示意图;
图4是本申请实施例提供的另一种数据处理方法的流程示意图;
图5a是本申请实施例提供的一种数据定义语句对应的子任务的执行示意图;
图5b是本申请实施例提供的一种创建虚拟表的流程示意图;
图6a是本申请实施例提供的一种数据操作语句对应的子任务的执行示意图;
图6b是本申请实施例提供的另一种是本申请实施例提供的一种数据操作语句对应的子任务的执行示意图;
图6c是本申请实施例提供的一种数据查询结果的示意图;
图7a是本申请实施例提供的一种数据写入流程的示意图;
图7b是本申请实施例提供的一种数据查询流程的示意图;
图8是本申请一个示例性实施例提供的一种数据处理装置的结构示意图;
图9是本申请一个示例性实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请提出了一种数据处理方法,该数据处理方法对于针对第一数据库的操作请求,可查找该操作请求所涉及的第一数据表的元数据,通过第一数据表的元数据能够提供与第一数据表具有相同服务的第二数据表,从而根据元数据生成目标执行计划,这样便将请求对第一数据表执行的目标操作,转换为对第二数据表执行的目标操作。而第一数据表位于第一数据库中,第二数据表位于第二数据库中,第一数据库和第二数据库为异构数据库,且第一数据库的计算性能优于第二数据库的计算性能,那么基于数据库之间的异构差异以及计算性能差异,按照该目标执行计划对第二数据库中的第二数据表执行关于目标数据的目标操作,能够实现对异构差异的屏蔽,并可提升目标操作的执行速度,进而提升数据处理效率。若目标操作为数据查询操作便可提升数据写入效率,若目标操作为数据查询操作便可提升数据查询效率。
在这个过程中,无需对第一数据库做任何改动,而是通过第二数据库中提供的相同服务的第二数据表辅助提升基于第一数据库的操作性能,无需开发成本。对于用户而言全程的目标操作都是针对第一数据表,但底层真实操作的是第二数据库中的第二数据表,从而能够通过比第一数据库的计算性能更优异的第二数据库的响应速度,能够提升数据处理效率。另外,基于第一数据表的元数据,用户无需感知其他异构数据库,也无需学习其他数据库的语法,学习成本低。
本申请中,数据库又可称为数据仓库、数据库系统或数据仓库系统,用于存储数据以及进行数据分析。上述提及的第一数据库可以是存在数据处理提速需求的数据库,例如:hive数据库。Hive(或可称为Apache Hive)数据库适用于在基于大量不可变数据的批处理作业场景下,它是一个基于Hadoop(一种由Apache开发的分布式系统基础架构,作为开源数据库框架可提供高速运算和存储服务)的数据仓库工具。它能够将结构化的数据文件映射为一张数据库表,提供SQL(Structured Query Language,结构化查询语言)查询功能。能够将HQL(一种类SQL语法)转化为MapReduce进行执行,Hive学习简单(支持SQL语法)、扩展性强(底层基于HDFS),但是由于数据处理任务全转换成MapReduce任务,处理速度也比较慢。
第二数据库是:与第一数据库存在异构差异,且计算性能优于第一数据库的计算性能的数据库。例如:StarRocks数据库,该StarRocks数据库是新一代极速全场景MPP(Massively Parallel Processing,大规模并行处理)数据库,能够兼容MySQL协议(一种数据库协议),支持标准SQL语法,易于对接使用,高可用且易于维护管理。也就是说,①第一数据库和第二数据库之间存在异构差异,此处的异构差异是指两种数据库之间由于使用不同的数据模型、查询语言、存储方式等所带来的差异。该第一数据库和第二数据库可以是异构数据库系统中的两个数据库,该异构数据库系统包括至少两个数据库,可以是不同类型、不同架构或不同厂商开发的数据库。通过异构数据库系统能够在一个统一的环境中管理和访问多个不同类型的数据库,以便提供更灵活和综合的数据管理能力。②第二数据库的计算性能优于第一数据库的计算性能,由于第二数据库的计算引擎/存储引擎的性能均比第一数据库的计算性能/存储性能的能力强,因此,第二数据库比第一数据库具有更快的响应速度,从而用户对元数据对应的数据表执行关于目标数据的目标操作时,均能够优化到响应速度更快的第二数据库中,对该第二数据库中相映射的第二数据表执行关于目标数据的目标操作,从而带来更佳的操作体验和更好的操作性能。并且基于第一数据表和第二数据表所提供的相同服务,能够解决数据孤岛、数据一致性以及数据管理等问题。
上述提及的元数据(MetaData)可以是用于描述数据实体的数据,可以理解成是一种对数据以及信息资源的描述性信息。示例性地,例如数据库中表的名称、字段名称、字段属性、索引等数据实体的数据,即元数据。本申请中元数据是指用于创建与第一数据表提供相同服务的第二数据表所使用的数据,示例性地,字段名称、字段属性、数据表分区等创建第二数据表所使用的数据即为元数据。第一数据表和第二数据表所提供的相同服务可以是数据管理服务,包括以下至少一种:数据写入服务、数据查询服务、数据删除服务以及数据修改服务等等。本申请对此不做限制。
基于上述定义,下面对本申请实施例提出的数据处理方法的原理进行阐述,具体的,该方法的大致原理如下:获取针对第一数据库的操作请求,该操作请求用于请求对第一数据库中的第一数据表执行关于目标数据的目标操作。之后,可查找第一数据表的元数据,该元数据是指在第二数据库中创建与第一数据表提供相同服务的第二数据表时,所使用的数据;其中,第二数据库与第一数据库存在异构差异,且第二数据库的计算性能优于第一数据库的计算性能。进一步地,根据查找到的元数据生成目标执行计划,进而可按照该目标执行计划在第二数据库中对第二数据表执行关于目标数据的目标操作。这样,请求对第一数据库中的第一数据表执行的目标操作,通过目标执行计划的生成,在实际中是针对第二数据库中的第二数据表执行的,相较于对第一数据表执行关于目标数据的目标操作,基于第二数据库更优异的计算性能,能够提升整体操作性能,从而辅助第一数据库提速,提升数据处理效率。并且基于第二数据表与第一数据表提供相同服务,第一数据表和第二数据表具备数据一致性,这样就能够屏蔽异构数据库之间的差异,用户仅需配置第一数据库相关的内容,而无需关注第二数据库,从而可降低操作成本。
在具体实现中,上述所提及的方法可由一个计算机设备执行,该计算机设备可以是终端或服务器。例如,服务器可获取针对第一数据库的操作请求,该操作请求用于指示对第一数据库中的第一数据表执行关于目标数据的目标操作,服务器可查找该第一数据表的元数据,从而根据查找到的元数据生成目标执行计划,并按照目标执行计划对第二数据库中的第二数据表执行关于目标数据的目标操作。上述提及的方法可由多个计算机设备共同执行,多个计算机设备包括终端和服务器;例如,如图1所示:终端可获取对第一数据库的操作请求,然后将该操作请求发送给服务器,服务器可查找该操作请求所涉及的第一数据表的元数据,进而能够根据该元数据生成目标执行计划,并按照目标执行计划对第二数据库中的第二数据表执行关于目标数据的目标操作。可见,原本请求对第一数据表执行关于目标数据的目标操作,实际转换为了对第二数据表执行关于目标数据的目标操作,从而基于第二数据库的计算性能,可提升基于第一数据库的操作体验。在一种实施例中,执行关于目标数据的目标操作所得到的操作结果可返回给终端,例如:目标操作为数据查询操作,那么可将查询到的数据返回给终端进行可视化地展示。又例如:目标操作为数据写入操作,那么在数据成功写入第二数据表之后,可统计已写入第二数据表的数据总数并返回给终端进行可视化地展示。
上述提及的终端包括但不限于:智能手机、平板电脑、智能可穿戴设备、智能语音交互设备、智能家电、个人电脑、车载终端、智能摄像头、虚拟现实设备等,本申请对此不作限制。对于终端的数量,本申请不做限制。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(ContentDelivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器,但并不局限于此。对于服务器的数量,本申请不做限制。
本申请提供的数据处理方法涉及云技术,具体涉及云技术中的数据库和大数据等方面的内容。数据库(Database),简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。大数据(Big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。随着云时代的来临,大数据也吸引了越来越多的关注,大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据。适用于大数据的技术,包括大规模并行处理数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。
示例性的,本申请实施例可基于上述提及的大规模并行处理数据库等大数据相关技术,支持在对第二数据库中的数据表执行某操作时,可并行地对其他多个数据表执行不同的操作,例如在对第二数据库中的第二数据表执行写入操作时,可以对其他的数据表1执行数据写入操作以及对数据表2执行数据查询操作;进一步的,具体可以是调用多线程并行地执行这几个操作。
基于上述描述,本申请实施例提出了一种数据处理方法。该数据处理方法可由上述所提及的计算机设备(终端或者服务器)执行,也可由终端和服务器共同执行;为便于阐述,后续均以计算机设备执行该数据处理方法为例进行说明。请参见图2,该数据处理方法可以包括如下步骤S201-S204。
S201,获取针对第一数据库的操作请求,该操作请求用于请求对第一数据库中的第一数据表执行关于目标数据的目标操作。
第一数据库是任一数据库,比如第一数据库为Hive数据库。第一数据库中的第一数据表可以是第一数据库中的任一数据表,该第一数据表可以是空数据表,或者是存储有实际的数据的数据表,或者是用于展示元数据以及进行权限控制的数据表,本申请在此不做限制。例如:第一数据表是Hive数据库中的数据表(可简称为hive表)。
在一个实施例中,针对第一数据库的操作请求可以是用户通过客户端提交针对第一数据库的数据操作语句之后生成的,该客户端是用于提供数据处理的工具,通过该客户端可操作任一数据库中的数据表,从而可完成关于该数据表的数据处理。可选地,数据操作语句包括用于指示第一数据库中的第一数据表的语句,以及用于指示所需执行的目标操作的语句,从而所生成的操作请求可用于对第一数据表执行关于目标数据的目标操作。
目标数据是指待操作的数据,基于目标操作的操作类型的不同,该目标数据有所不同。具体地,若对第一数据表所执行的关于目标数据的目标操作是指向第一数据表中写入目标数据的操作,该目标操作的操作类型为数据写入操作,那么目标数据可以是第一数据库中其他数据表的数据,或者是来自于其他数据源的数据,例如应用程序中的数据且需导入数据库中。若对第一数据表所执行的关于目标数据的目标操作是指从第一数据表中查询目标数据的操作,该目标操作的操作类型为数据查询操作,那么目标数据可以是用户指定查询的目标范围的数据,或者目标类型的数据;例如:目标数据为指定的某个字段下的数据。本申请中,数据查询操作可也称为数据读取操作。
S202,查找第一数据表的元数据,该第一数据表的元数据是指:在第二数据库中创建与第一数据表提供相同服务的第二数据表时,所使用的数据,第二数据库是指:与第一数据库存在异构差异,且计算性能优于第一数据库的计算性能的数据库。
第二数据库可以是具备OLAP(OnlineAnalyticalProcessing联机分析处理)功能的数据库,其中,OLAP是一种大数据分析的应用技术,可提供复杂的分析操作以及决策支持。该第二数据库可以包括OLAP引擎,包括以下至少一种:StarRocks、Apache Doris、Apache Kylin、Apache Calcite、Spark、Presto、Doris等等。其中,Apache Doris是一个基于MPP(Massively Parallel Processing,大规模并行处理)架构的高性能、实时的分析型数据库。Apache Kylin是一种结合当前人工智能知识图谱的数据库,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据。Apache Calcite是一个动态的数据管理框架,可以实现SQL的解析、验证、优化和执行。Spark是一种专为大规模数据处理而设计的快速通用的计算引擎。Presto是一种大数据分布式SQL查询引擎,速度快,支持多数据源接入。Doris是一个分布式列式存储和查询系统,主要用于实时分析和查询海量数据。
在一种具体实现中,计算机设备可从元数据服务中查找第一数据表的元数据,该元数据服务是指用于提供元数据存取的服务,且元数据服务中包括至少一个数据表的元数据。该至少一个数据表可以包括一个或多个数据库中的数据表,例如:至少一个数据表包括第一数据库中的多个数据表,又例如:至少一个数据表包括第一数据库中的两个数据表以及其他需提速的数据库中的一个数据表。相应数据库中数据表的元数据在生成后可被存储至该元数据服务中。每个数据表对应元数据,该元数据的信息格式可以是字段TABLE_PROPERTIES(表属性)的JSON(Java Script Object Notation,JavaScript对象表示法,一种轻量级的数据交换格式)字符串。例如:元数据包括表的名字,表的列和分区以及其属性(例如是否为外部表),表的数据所在的目录等表属性有关的JSON值。在更进一步的实现中,针对第一数据库的操作请求包括第一数据库中的第一数据表的表标识,计算机设备可从根据该第一数据表的表标识从至少一个数据表的元数据中查找该第一数据表的元数据。
由于元数据可提供用于创建第二数据表时所需的数据,因此,第二数据表的一些属性值可与元数据适配,具体可以采用元数据所包含的数据,例如:第二数据表的表名,表的列以及分区均与元数据相适配。该元数据可用于描述第一数据表和第二数据表之间的映射关系,即第二数据表是第二数据库中与第一数据表存在映射关系的数据表;基于数据表之间的映射,第一数据表和第二数据表可提供相同服务。该服务可以是数据管理服务,包括但不限于:数据写入服务、数据查询服务以及数据删除服务等等。基于相同服务可屏蔽异构数据库之间的差异,使得对第一数据表执行的关于目标数据的目标操作可等价地变换为对第二数据表执行关于目标数据的目标操作,并可保证对目标数据进行正确以及有效地处理。
在一个实施例中,第一数据表是第一数据库中未基于元数据创建的数据表。由此,仅需在第二数据库中创建第二数据表,进而第一数据表和第二数据表之间可映射。如果该第一数据表中存储有实际的数据,为了优化对第一数据库中表的操作性能,可将第一数据表中存储的数据同步到第二数据表中进行存储,从而避免基于目标执行计划对第二数据表执行关于目标数据的目标操作之后无法获取到所需的目标数据,保证对第二数据表的有效操作以及数据的有效获取。
在另一个实施例中,元数据还包括用于在第一数据库中创建第一数据表所使用的数据,因此,第一数据表可以是基于元数据在第一数据库中创建的数据表,这样,第一数据表和第二数据表均基于元数据创建,并且,第一数据表仅用于元数据展示、权限控制等,而第二数据表可用于存储实际的数据。第一数据表和第二数据表可提供相同服务,基于相同服务可屏蔽异构数据库存在的差异,使得对第一数据库中第一数据表执行关于目标数据的目标操作,可等同于对第二数据库中第二数据表执行关于目标数据的目标操作,基于第二数据库优异的计算性能,在数据写入或数据读取方面均能够得到优化,并且无需复杂的配置,从而优化数据导入导出流程。
S203,根据查找到的元数据生成目标执行计划,该目标执行计划用于指示对第二数据库中的第二数据表执行关于目标数据的目标操作。
在一种具体实现中,针对第一数据库的操作请求包括数据操作语句,例如用于查询目标数据的SQL语句。执行计划是指针对数据操作语句的执行而生成的一个操作步骤列表,该列表中包括多个顺序排列的操作步骤(本申请可理解为子计划)。示例性地,该列表记录了数据操作语句如何通过索引、表扫描等方式访问数据库中的数据表,以及如何使用连接方式、排序等逻辑操作。通过执行计划可以帮助理解数据操作语句的执行过程,并优化数据操作语句的性能。
在一个实施例中,查找到的元数据能够用于指示与第一数据库提供相同服务的第二数据表,进而根据第一数据表的元数据所生成的目标执行计划能够用于指示:对第二数据库中的第二数据表执行关于目标数据的目标操作。示例性地,目标执行计划用于指示对第二数据库中的第二数据表执行数据查询操作,那么该目标执行计划可包括数据表扫描子计划、指定数据列的子计划以及聚合子计划等。可见,操作请求无需请求对第二数据库中的数据表执行目标操作,便能够通过元数据自动地转换为对第二数据表执行相同的操作。
S204,按照目标执行计划,在第二数据库中对第二数据表执行关于目标数据的目标操作。
在一种具体实现中,该目标执行计划是第二数据库的计算引擎所支持的执行计划,计算机设备可调用第二数据库中的计算引擎,按照该目标执行计划在第二数据库中对第二数据库中的第二数据表执行关于目标数据的目标操作。示例性地,目标执行计划用于指示对第二数据表执行关于目标数据的数据写入操作,那么第二数据库的计算引擎基于目标执行计划可从指定的数据源中读取目标数据,进而将读取到的目标数据写入第二数据表中。其中,指定的数据源例如是第一数据库中除了第一数据表之外的其他数据表,读取到的目标数据的数据格式可能与第二数据库所支持的数据格式不匹配,为此可在将目标数据写入第二数据表的过程中,对目标数据进行格式转换处理,将目标数据的数据格式被转换为第二数据库所支持的数据格式,进而使得目标数据能够有效地存储至第二数据库中,并保证存储第二数据库中的数据格式统一,便于后续查询。
可以理解的是,针对第一数据库中对应有元数据的数据表,如果存在对该数据表执行目标操作的操作请求,均能够按照上述流程在第二数据库中对提供相同服务的相应数据表执行目标操作,从而实现对第一数据表的操作提速,并提升第一数据库的使用性能。另外,目标操作的操作类型可以是数据查询操作,或者是数据写入操作。如果是数据查询操作,那么对第一数据表执行关于目标数据的目标操作,可从第二数据表中导出目标数据。如果是数据写入操作,那么可将从某个数据源读取目标数据并将该目标数据写入到第二数据表中。如图3所示,当写入数据时,实际是写入第二数据表,当读取数据时,实际是从第二数据表中读取。
在一个可行的实现方式中,由于第一数据表也可能是第一数据库中未存在元数据的数据表,即该第一数据表未与第二数据库中的第二数据表映射,从而该第一数据表可用于存储实际的数据。若未查找到第一数据表的元数据,那么可根据操作请求中的数据操作语句生成目标执行计划,此时该目标执行计划用于指示对第一数据表执行关于目标数据的目标操作,之后可按照该目标执行计划,在第一数据库中对第一数据表执行关于目标数据的目标操作。
本申请实施例提供的数据处理方法,通过元数据能够提供与第一数据表相同服务的第二数据表,可屏蔽异构数据库之间的差异,这样基于目标执行计划的生成能够将对第一数据表执行的目标操作转换为对第二数据表执行的相同操作,进而按照该目标执行计划在第二数据库中对第二数据表执行关于目标数据的目标操作。这样,请求对第一数据库中的第一数据表执行的目标操作,实际执行过程中是对第二数据库中的第二数据表执行,基于第二数据库更优异的计算性能,能够辅助第一数据库进行提速,提升数据库性能,从而高效地处理数据。
基于上述图2所示的方法实施例,本申请实施例进一步提出了一种更为具体的数据处理方法。在本申请实施例中,主要以计算机设备执行该数据处理方法为例进行说明;请参见图4,该数据处理方法可以包括以下步骤S401-S405。
S401,获取针对第一数据库的操作请求,该操作请求用于请求对第一数据库中的第一数据表执行关于目标数据的目标操作。
S402,查找第一数据表的元数据,该第一数据表的元数据是指:在第二数据库中创建与第一数据表提供相同服务的第二数据表时,所使用的数据;第二数据库是指:与第一数据库存在异构差异,且计算性能优于第一数据库的计算性能的数据库。
在一个实施例中,第一数据表的元数据的生成方式,具体包括如下步骤1.1-步骤1.2。
步骤1.1获取数据定义语句。
该数据定义语句是用于创建虚拟表的语句,数据定义语句中包括至少一个目标字段;目标字段是指:用于在第二数据库中创建与第一数据表提供相同服务的第二数据表所需的字段。其中,虚拟表是一种元数据表示方式,该虚拟表可用于映射分布于不同数据库的数据表。虚拟表本身也可以是一张表,可以通过DDL(Data Definition Language,数据定义语言)定义schema(用于组织数据库对象,如表、数据类型以及序列等)、主键、索引等等表属性。
示例性地,如下所示的创建虚拟表所使用的数据定义语句:
--指定数据库
use teg_hbase_tes;
--判断是否存在名为tpch_customer_100_show的虚拟表
drop table if exists tpch_customer_100_show;
--如果不存在,创建虚拟表,VIRTUAL为关键字
CREATE VIRTUAL TABLE tpch_customer_100_show(
c_custkey int COMMENT"",
c_name STRING COMMENT"",
c_address STRING COMMENT"",
c_nationkey int COMMENT"",
c_phone STRING COMMENT"",
c_acctbal DOUBLE COMMENT"",
c_mktsegment STRING COMMENT"",
c_comment STRING COMMENT"")
--指定hash列:c_custkey进行120个分桶和排序列c_custkey
CLUSTERED BY(`c_custkey`)SORTED BY(`c_custkey`)INTO 120BUCKETS;
其中,Hive分桶可以将数据表中的数据按照某个字段值(如c_custkey)分成若干桶,并将相同字段值的数据放到同一个桶中,能够达到数据聚合、均衡负载的效果。通过上述数据定义语句,用户可指定第一数据库,并由计算机设备在指定的第一数据库下创建一张虚拟表用于加速该第一数据库的性能。相较于用于定义Apache Hive数据库中用于实际存储数据的数据表的语句,该创建虚拟表的数据定义语句除了多了VIRTUAL关键字,其他和创建Apache Hive数据库中的数据表一致。基于第一数据库的指定和数据表名的设定,虚拟表的表名具体可以为teg_hbase_test.tpch_customer_100_show。第一数据表可与该虚拟表具有相同的表名,也可设置不同的表名。c_custkey、c_name等属于数据定义语句中包括的目标字段。
由于系统默认与Hive数据库对应的OLAP引擎为StarRocks,因此,上述数据定义语句中仅指定了第一数据库为Hive数据库,而未指定第二数据库。但基于默认配置,所创建的虚拟表可将两个数据库(即Hive和StarRocks)的数据表联合起来进行加速查询。在一种实现方式中,如需指定或者更换第二数据库,具体可通过在数据定义语句中增加以下语句:ENGINE=(第二数据库的标识)进行指定。例如:ENGINE=Apache Doris,可将Apache Doris确定为第二数据库。这样,能够灵活地指定第二数据库。
在一种实现的方式中,数据定义语句在被执行时可以拆分为多个子任务,并可输出子任务以及该子任务对应的任务状态,从而提示用户数据定义语句的执行进程。其中,任务状态可用于指示子任务是否完成。进一步地,还可操作该子任务,包括查看子任务的日志、详情、结果,以及下载子任务的结果等。示例性地,如图5a所示的数据定义语句对应的子任务的示意图,包括上述示例的数据定义语句被拆分为多个子任务执行时,在界面中显示的各个子任务以及任务详情。
进一步地,数据定义语句中除了上述示例的定义内容之外,还可以定义其他属性,例如:表的复制份数、所采用的压缩算法、存储方式以及索引方式等等。对于创建虚拟表所使用的数据定义语句,可以通过以下语句进行查询:“show create table tpch_customer_100_show”,具体可查询并展示用于创建虚拟表tpch_customer_100_show的数据定义语句。其中,通过ENGINE=OLAP可指定引擎为OLAP引擎,表示任一计算性能优于第一数据库的OLAP引擎可作为第二数据库。在上述示例出的数据定义语句中,例如c_custkey、c_name、c_address等均是用于创建第二数据表所需的字段,且该字段是与第一数据表的字段相互映射。第一数据表和第二数据表均可采用创建虚拟表时分桶方式,从而使得第一数据表和第二数据表之间的分桶相互映射。
步骤1.2根据数据定义语句创建一个虚拟表,并将创建的虚拟表确定为第一数据表的元数据。
在虚拟表创建成功后,虚拟表可作为第一数据表的元数据,该虚拟表可用于体现元数据结构(一种元数据),因此创建虚拟表也可以理解成是创建元数据结构。示例性地,如下所示的第一数据表的元数据:
{catalog=hive//源表(即第一数据表)为hive表
sourceColumns=c_custkey,c_name,c_address,c_nationkey,c_phone,c_acctbal,c_mktsegment,c_comment,//源表中的列字段
starRocksColumns=c_custkey,c_name,c_address,c_nationkey,c_phone,c_acctbal,c_mktsegment,c_comment,//在starrocks表中映射的列字段的顺序rawCreateSql=CREATE TABLE`tpch_customer_100_show`(`c_custkey`INT COMMENT``,`c_name`STRING COMMENT``,`c_address`STRING COMMENT``,`c_nationkey`INT COMMENT``,`c_phone`STRING COMMENT``,`c_acctbal`DOUBLE COMMENT``,`c_mktsegment`STRINGCOMMENT``,`c_comment`STRING COMMENT``)CLUSTERED BY(`c_custkey`)SORTED BY(`c_custkey`)INTO 120BUCKETS//原本执行的SQL语句(创建虚拟表所提交的数据定义语句)
createSql=create table teg_hbase_test.tpch_customer_100_show(`c_custkey`INT(11)COMMENT"",`c_name`VARCHAR(1048576)COMMENT"",`c_address`VARCHAR(1048576)COMMENT"",`c_nationkey`INT COMMENT"",`c_phone`VARCHAR(1048576)COMMENT"",`c_acctbal`DOUBLE COMMENT"",`c_mktsegment`VARCHAR(1048576)COMMENT"",`c_comment`VARCHAR(1048576)COMMENT"")DUPLICATE KEY(`c_custkey`)DISTRIBUTED BY HASH(`c_custkey`)BUCKETS120//修改后执行的SQL语句(与hive数据库适配)
上述元数据为JSON字串,不仅展示了表属性,包括第一数据表的数据所在的目录(catalog)所属的第一数据库(即hive数据库),在第二数据库(即StarRocks)的第二数据表中映射的列(columns)字段及其顺序,还记录了创建虚拟表的数据定义语句(具体为SQL语句),创建虚拟表时原本执行的SQL语句,以及创建虚拟表为适应第一数据库的语法而改动的SQL语句,这是由于创建虚拟表时提交的数据定义语句的语法可能并未与第一数据库所支持的语法相适配,通过修改可适配第一数据库。可理解的是,如果提交的数据定义语句的语法与第一数据库所支持的语法适配,那么无需修改SQL语句。
在一种可实现的方式中,本申请提供的方法由计算机设备执行,该数据定义语句由目标对象提交。其中,目标对象是指任一对象,所提交的数据定义语句也可称为虚拟表对应的建表语句,即用于创建虚拟表。为保证数据安全性,在创建虚拟表之前,还可以根据用户权限判定是否有权限创建虚拟表,具体包括:调用权限服务对目标对象操作第一数据库的权限进行鉴定,以及对计算机设备操作第二数据库的权限进行鉴定;若鉴定出目标对象具备操作第一数据库的权限,且计算机设备具备操作第二数据库的权限,则触发执行根据数据定义语句创建一个虚拟表的步骤。
权限服务可用于对目标对象是否具有创建虚拟表的权限进行鉴定(即鉴权)。该权限服务可由数据处理引擎提供或者是与数据处理引擎独立的服务模块提供。在具体实现中,计算机设备可通过调用权限服务鉴定目标对象操作第一数据库的权限以及自身操作第二数据库的权限进行鉴定。具体地,可获取第一数据库对应的第一权限名单以及第二数据库对应的第二权限名单,该第一权限名单上具有支持操作第一数据库的各个对象的对象标识,该第二权限名单上具有支持操作第二数据库的各个设备的设备标识,从而在目标对象的对象标识存在于第一权限名单时,可确定目标对象具备操作第一数据库的权限,以及在计算机设备的设备标识存在于该第二权限名单上时,可确定计算机设备具备操作第二数据库的权限。上述提及的操作数据库的权限包括但不限于:访问权限、查询权限以及写入权限等等,在目标对象具备操作第一数据库的权限,且计算机设备具备操作第二数据库的权限的情况下,便可触发执行根据数据定义语句创建一个虚拟表的步骤。反之,若鉴定出目标对象具备操作第一数据库的权限,或者计算机设备具备操作第二数据库的权限,则可禁止执行根据数据定义语句创建一个虚拟表的步骤。
通过对目标对象操作第一数据库的权限进行鉴定,能够判别目标对象是否具备对第一数据库的操作权限,从而可在第一数据库中创建虚拟表。而由于虚拟表可映射异构数据库之间的两个表,即底层真实操作的是第二数据库中的第二数据表,因此,还需判定计算机设备是否具备操作第二数据库的权限,以便于能够在第二数据库中创建第二数据表,避免因不具备操作数据库的权限而执行创建虚拟表的步骤所带来的资源浪费。
在另一个可行的实现方式中,计算机设备可调用数据处理引擎生成元数据,因此在生成元数据的过程中,根据数据定义语句创建一个虚拟表的步骤可以由数据处理引擎执行,为此在调用数据处理引擎创建虚拟表之前所进行的鉴权可以包括:调用权限服务对目标对象操作第一数据库的权限进行鉴定,以及对数据处理引擎操作第二数据库的权限进行鉴定,若数据处理引擎具备操作第二数据库的权限,且目标对象具备操作第一数据库的权限,则触发执行根据数据定义语句创建一个虚拟表的步骤。反之,若数据处理引擎具备操作第二数据库的权限,或者目标对象具备操作第一数据库的权限,则触发执行根据数据定义语句创建一个虚拟表的步骤,则禁止执行根据数据定义语句创建一个虚拟表的步骤。
采用此方式,由于数据处理引擎可允许接入的数据库是有限的,有些数据库并未允许接入数据处理引擎,从而无法与数据处理引擎进行交互。这样,当数据处理引擎将元数据创建好之后,也无法在指定的第二数据库中建立第二数据表,也就不能实现对第一数据库中数据表执行操作的加速。
在又一个可行的实现方式中,计算机设备或者数据处理引擎具备操作任意数据库的权限,那么计算机设备可以调用权限服务对目标对象操作第一数据库的权限进行鉴定,若目标对象具备操作第一数据库的权限,便可触发执行根据数据定义语句创建一个虚拟表的步骤。通过此种方式进行鉴权,对于用户来说,只要具备操作第一数据表的权限,那么计算机设备便能够建表并操作第一数据表和第二数据表,从而能够屏蔽异构数据库的权限差异。
在一种可实现的方式中,虚拟表中包括至少一个目标字段,至少一个目标字段还用于在第一数据库中创建第一数据表。示例性地,虚拟表包括用于第一数据表和第二数据表之间相互映射的列字段作为目标字段。在根据数据定义语句创建一个虚拟表之后,计算机设备还可执行如下步骤a-步骤c。
步骤a、采用创建的虚拟表中的至少一个目标字段,在第一数据库中创建虚拟表对应的第一数据表,以及在第二数据库中创建虚拟表对应的第二数据表。
计算机设备可创建与虚拟表具有相同表名的第一数据表,进一步地,该第一数据表中包括各个目标字段,第二数据表中也包括相同的目标字段,从而能够将第一数据表和第二数据表映射。在向第一数据表导入数据或者读取第一数据表的数据,可映射到向第二数据表导入数据或者读取第二数据表的数据,从而提升数据导入或导出速度。在创建虚拟表之后,可将虚拟表更新到元数据服务中,并可开启事务,在元数据服务接收到提交的事务之后,便可将虚拟表作为元数据存储在元数据服务中。其中,事务是一组组合成逻辑工作单元的操作,事务将控制和维护事务中每个操作的一致性和完整性,事务控制要么全部都做,要么什么都没做,一旦出错了就会进行事务回滚。因此,开启事务可保证第一数据表和第二数据表要么都创建成功,要么都未创建成功。对于创建第一数据表和第二数据表的先后顺序,本申请不做限制。例如:同时创建第一数据表和第二数据表,或者先后创建,或在一者创建成功后再创建另一者。
示例性地,基于上述所示的数据定义语句可在Apache Hive创建第一数据表(即Apache Hive表),在StarRocks中创建第二数表(即StarRocks表),且创建的虚拟表tpch_customer_100_show用于映射第一数据表和第二数表;其中,Apache Hive表作为用户实际操作的表,本身不存储数据,而是用于元数据展示、权限控制等;另外一张StarRocks表作为真正存储和执行计算的引擎,全部数据均可存储在StarRocks引擎中。
步骤b、若第一数据表和第二数据表均创建成功,则触发执行将创建的虚拟表确定为第一数据表的元数据的步骤。
为保证异构数据库的数据表之间的一致性,在第一数据表和第二数据表都创建成功之后,便可触发执行将所创建的虚拟表确定为第一数据表的元数据,从而映射第一数据表和第二数据表。
步骤c、若第一数据表和第二数据表中存在至少一个数据表创建失败,则删除已创建的数据表,并删除所创建的虚拟表和数据定义语句。
如果第一数据表和第二数据表中任一个或两个均创建失败,那么为了保证元数据的一致性,可删除已创建的数据表。例如:若第一数据表创建失败,第二数据表创建成功,那么可删除第二数据表,若第一数据表创建成功,第二数据表创建失败,那么可删除第一数据表,若第一数据表和第二数据表均未创建失败,那么可删除所创建的虚拟表和数据定义语句。
通过上述步骤a-步骤c,可创建虚拟表对应的第一数据表,以及虚拟表对应的第二数据表,并可在第一数据表和第二数据表均创建成功后,可确定虚拟表创建成功,并触发执行将虚拟表确定为元数据的步骤,这样便可得到第一数据表、第二数据表以及用于映射第一数据表和第二数据表之间的元数据,后续可基于该元数据将对第一数据表执行的目标操作优化到第二数据表,以提升操作性能。若第一数据表和第二数据表中任一者或两者未创建成功,可回滚清理已创建的各个数据,包括已创建的虚拟表、数据定义语句等,以保证一致性。
进一步地,在一种可行的实施方式中,若第一数据表和第二数据表中存在至少一个数据表创建失败,则计算机设备还可执行如下内容(1)-(2):
(1)检测导致至少一个数据表创建失败的因素。
在一些场景中,可能会由于设备内存不足、设备故障(例如断电)等外部的因素导致数据表创建失败,而并不是数据定义语句这一内部因素而导致的。因此,在首次创建数据表失败后,可先检测导致至少一个数据表创建失败的因素,从而基于该因素确定是否触发执行删除创建的虚拟表和数据定义语句。
(2)若因素包括数据定义语句,则触发执行删除创建的虚拟表和数据定义语句。
如果因素包括数据定义语句,说明可能是由于数据定义语句导致创建的虚拟表异常,从而导致基于所创建的虚拟表中的目标字段所创建的数据表失败,那么可允许执行删除创建的虚拟表和数据定义语句,这样可提示用户检查数据定义语句并对数据定义语句进行更新,进而可提交更新后的数据定义语句,并基于该更新后的数据定义语句创建虚拟表,从而创建虚拟表对应的各个数据表,并在各个数据表创建成功后,将虚拟表作为元数据。反之,若因素不包括数据定义语句,那么可不删除创建的虚拟表和数据定义语句,而是可以尝试重新创建数据表。
在一种具体实现中,计算机设备在检测导致至少一个数据表创建失败的因素时,具体可执行如下内容:持续地对目标步骤进行重试,所谓的对目标步骤进行重试可理解成是重新执行目标步骤;该目标步骤是指:采用创建的虚拟表中的至少一个目标字段,在第一数据库中创建虚拟表对应的第一数据表,以及在第二数据库中创建虚拟表对应的第二数据表的步骤。若重试次数大于次数阈值,则确定创建的虚拟表存在异常,并采用创建的虚拟表对应的数据定义语句,生成导致至少一个数据表创建失败的因素。
具体的,计算机设备每次在至少一个数据表创建失败的情况下,可保留所创建的虚拟表,并可尝试重新创建虚拟表对应的第一数据表以及虚拟表对应的第二数据表,即重新执行如下目标步骤:采用创建的虚拟表中的至少一个目标字段,在第一数据库中创建虚拟表对应的第一数据表,以及在第二数据库中创建虚拟表对应的第二数据表的步骤。每执行一次该目标步骤且重试失败(即至少一个数据表创建失败),可统计重试次数,具体可将重试次数加1,之后,可将重试次数与次数阈值进行比较。若重试次数大于次数阈值,说明第一数据表和第二数据表在次数阈值内未创建成功,进而可确定创建的虚拟表存在异常,并可确定创建该虚拟表对应的数据定义语句是导致至少一个数据表创建失败的因素。反之,若重试次数小于或等于次数阈值,说明第一数据表和第二表在次数阈值内创建成功,那么可触发执行将所创建的虚拟表确定为元数据。
示例性地,重试对应的次数阈值为3次,首次创建数据表的过程中第一数据表创建失败,那么可先尝试重试,即第二次执行创建第一数据表和第二数据表的步骤,重试次数可统计为1次;若第二次也创建失败,由于未达到次数阈值,那么可继续尝试重试,直至达到次数阈值,第一数据表和第二数据表中的一者或两者都还未创建成功,便可删除所创建的虚拟表和数据定义语句。若第3次重试内第一数据表和第二数据表均创建成功,则可触发执行将所创建的虚拟表确定为元数据。
可选地,上述创建第一数据表和第二数据表可由计算机设备调用数据处理引擎执行。下面结合图5b对生成元数据的流程进行示例性说明。本申请中数据处理引擎是指superSQL引擎,该引擎可提供各种后台服务,包括但不限于:鉴权服务、元数据服务、计划改写服务等。数据处理引擎可与各个数据库进行交互以在数据库中创建相应的数据表。
1.用户根据虚拟表DDL语法提交虚拟表建表语句SQL(即创建虚拟表对应数据定义语句)给SuperSQL服务;
2.SuperSQL调用鉴权服务根据用户权限判定是否有权限创建该虚拟表;
3.创建虚拟表元数据结构并更新到元数据服务中,并开启事务;
4.创建一张虚拟表对应的第二数据表(例如StarRocks表),如果失败则回滚事务删除元数据;
5.创建一张虚拟表对应的第一数据表(例如Apache Hive表),如果失败则删除StarRocks表且删除元数据;
6.提交事务,确认虚拟表创建成功,将虚拟表确定为元数据。此时存在一张ApacheHive表、一张StarRocks表、以及关联第一数据表和第二数据表的元数据。
进一步地,任一数据表的元数据生成之后可被存储至元数据服务中。由此元数据服务可存储至少一个数据表的元数据。在一种实现方式中,元数据服务中所存储的元数据对应的至少一个数据表可涉及一个或多个数据库。示例性地,元数据服务中可存储hive数据库中数据表的元数据,基于元数据所映射的数据表均为StarRocks数据库中的数据表,元数据服务中还可存储MySQL数据库中的数据表的元数据,该元数据所映射的数据表均为Click House数据库中的数据表。
在一个实施例中,计算机设备在查找第一数据表的元数据时,可以包括以下(一)和(二)两种方式。
(一)根据元数据查询语句从元数据服务中查找。
(1-1)确定元数据服务,该元数据服务用于存储至少一个数据表的元数据。
(1-2)从目标语句源中获取元数据查询语句,元数据查询语句用于在元数据服务中查找第一数据表的元数据;目标语句源包括以下至少一项:操作请求和数据处理引擎。
(1-3)调用数据处理引擎执行元数据查询语句,以在元数据服务中查找第一数据表的元数据。
在一种具体实现中,由于数据处理引擎中可集成元数据查询功能,具体可通过设置元数据查询语句实现,因此,计算机设备可从数据处理引擎中获取元数据查询语句。在另一种具体实现中,如果操作请求中包括元数据查询语句,那么基于该元数据查询语句也可查找元数据,并且查找到的元数据还可以被输出进而展示给用户。该元数据查询语句具体可以是请求描述虚拟表的语句,而虚拟表和第一数据表关联,由此,请求描述指定表名的虚拟表即可理解为请求查询第一数据表的元数据。示例性地,该元数据查询语句为:DESCVTABLE teg_hbase_test.tpch_customer_100_show;其中,VTABLE表示虚拟表,teg_hbase_test.tpch_customer_100_show为虚拟表的表名。计算机设备可调用数据处理引擎执行该元数据查询语句,例如执行如下语句:DESC VTABLE teg_hbase_test.tpch_customer_100_show,进而可通过DESC VTABLE的方式,在元数据服务中查找到第一数据表的元数据(可理解成是虚拟表的一些额外信息)。
上述(1-1)至(1-3)所示的方式,通过获取元数据查询语句从元数据服务中查询第一数据表的元数据,可灵活地指定数据表,并根据数据表与元数据之间的关系来准确地查询到相应的元数据。
(二)根据接口调用语句从元数据服务中查找。
(2-1)确定元数据服务,元数据服务用于存储至少一个数据表的元数据。
(2-2)获取数据处理引擎提供的接口调用语句,该接口调用语句是用于调用元数据服务的服务接口的语句。
(2-3)调用数据处理引擎执行接口调用语句,以调用元数据服务的服务接口,在元数据服务中查找第一数据表的元数据。
具体地,元数据服务可向外提供服务接口(API接口,或可称为应用程序接口),通过该服务接口可访问元数据服务,进而能够从元数据服务所存储的至少一个数据表的元数据中查找第一数据表的元数据。数据处理引擎可集成元数据获取功能,该功能可以对应一个代码模块,用于调用元数据服务的服务接口的语句集成在该代码模块中,从而能够由数据处理引擎执行该接口调用语句调用元数据的服务接口。在接收到针对第一数据库的操作请求之后,可解析操作请求,得到第一数据表的表标识;通过调用数据处理引擎可执行所提供的接口调用语句,可由该数据处理引擎调用元数据服务的服务接口,进而根据解析出的第一数据表的表标识自动地从元数据服务中查找元数据。
上述(2-1)至(2-3)所示的方式,能够通过接口调用的方式从元数据服务中查询第一数据表的元数据,通过对操作请求进行自动解析,能够得到相应数据来准确地查找元数据。
S403,响应于操作请求,根据目标操作的操作类型生成初始执行计划;该初始执行计划用于指示对第一数据库中的第一数据表执行关于目标数据的目标操作。
在一个实施例中,操作请求包括目标对象提交的数据操作语句。数据操作语句是满足DML(Data Manipulation Language,数据操作语言)语法。例如:数据操作语句为ETL(Extract-Transform-Load,数据的抽取(extract)、转换(transform)、加载(load))类型的数据写入语句,该数据写入语句用于指示将目标数据写入第一数据库中的第一数据表中。如下所示的数据操作语句能够通过DML语法将Apache Hive中其他数据表中的数据导入到第一数据表:
use teg_hbase_test;
INSERT OVERWRITE tpch_customer_100_show SELECT*FROM benchmark_tpch_customer_raw
如上所示的数据操作语句为数据写入语句,通过use(数据库名)指定了数据库,之后设定ETL类型为INSERT OVERWRITE(向已有数据库表中插入数据并覆盖原有数据)。其中,插入第一数据表tpch_customer_100_show的数据来源于第一数据库中的其他数据表benchmark_tpch_customer_raw。可理解的是,ETL类型还可以是其他类型,例如INSERTINTO,从而请求将数据添加第一数据表中但不覆盖原有数据。
又例如:数据操作语句为数据查询语句,数据查询语句用于查询第一数据库中的第一数据表中的目标数据,示例性地,如下所示的数据操作语句用于查询指定数据库中的指定表中的数据:
use teg_hbase_test;
EXPLAIN
SELECT count(1)FROM tpch_customer_100_show
如上所示的数据操作语句通过use(数据库名)指定了第一数据库,之后通过SELECT(范围)FROM(数据表名)指定了具体从哪张表查询数据。其中,count(1)用于计数,可以表示计算数据表中共有多少符合条件的行。
可理解的是,上述数据操作语句也可拆分为多个子任务执行,并可输出子任务以及该子任务对应的任务状态,从而实时提示用户数据定义语句的执行进程。如图6a所示是数据写入语句对应的子任务的执行示意图,其中use(xx)和INSERT OVERWRITE分别为两个子任务,如图6b所示是数据查询语句对应的子任务的执行示意图。并且由图可知,执行数据写入和数据查询的引擎均为spark引擎。进一步地,如图6c所示,在数据查询的情况下,还可以显示查询结果的统计值,具体查询了1千5百万条数据。
计算机设备在执行S403时,具体可按照如下步骤实现初始执行计划的生成,包括步骤2.1-步骤2.2。
步骤2.1调用数据处理引擎对操作请求中的数据操作语句进行语法解析,得到解析结果;以及,调用数据处理引擎提供的元数据服务,对解析结果进行语义验证。
在具体实现中,可调用数据处理引擎提供的语法解析器对操作请求中的数据操作语句进行语法解析,通过语法解析可对数据操作语句的语义进行解析,并可进行关键词(例如SQL语句中的select、update、delete等等)提取以及非关键词进行提取解析,并组成一个解析树(Parse Tree,一种用于表示语法结构的树形结构)。另外,还可以调用数据处理引擎中的验证器,通过元数据服务中所存储的第一数据表的元数据来验证数据操作语句的语义。通过对解析结果进行语义验证可判断数据操作语句是否正确,以满足下一步计算的要求。示例性地,判断数据操作语句是否正确包括以下至少几点:校验第一数据库是否存在、第一数据表是否存在以及表中的字段值是否存在。数据操作语句的语义是否正确,各种操作符(例如数据类型等)是否被正确地使用。
步骤2.2若解析结果通过语义验证,则调用数据处理引擎根据解析结果生成初始执行计划。
在具体实现中,基于对解析结果的语义验证可判断数据操作语句是否正确。若解析结果通过语义验证,说明数据操作语句正确,那么可调用数据处理引擎根据解析结果生成初始执行计划。若解析结果为通过语义验证,那么数据操作语句不正确,从而可输出语句修改提示。基于该语句修改提示能够提示用户修改数据操作语句,从而可提交修改后的数据操作语句,并按照上述流程进行解析以及语义验证之后,在解析结果通过语义验证的情况下,调用数据处理引擎根据解析结果生成初始执行计划。在一种可行的实现方式中,该解析结果可以为解析树,在解析树通过语法检查之后,可调用数据处理引擎提供的优化器将将该解析树转换为初始执行计划。
在一个实施例中,若目标操作的操作类型为数据写入操作,则初始执行计划包括数据源扫描子计划和数据表修改子计划;其中,数据源扫描子计划用于指示需扫描的数据源,以便从该数据源中读取目标数据,因此,该数据源扫描子计划包括目标数据所属数据源的源标识;该目标数据所属数据源可以是第一数据库中的其他数据表,也可以是除第二数据库之外的其他数据库中的数据表,或者是数据库以外的数据源。当数据源为数据库中的数据表时,源标识可包括数据表的表标识(例如数据表的表名)。当数据源为数据库以外的数据源,例如应用程序,那么该源标识可以是应用程序的程序标识,例如应用程序的程序名。数据表修改子计划用于指示基于目标操作对第一数据表进行更新,该数据表修改子计划至少包括第一数据表的表标识以及关于目标操作的操作信息。关于目标操作的操作信息可用于指示目标操作的操作类型,以及需操作数据表中的具体字段。例如操作信息包括operation=insert,即目标操作的操作类型为数据写入操作,updateColumnList={},即表示需更新的列字段的列表。在一种具体实现中,该数据表修改子计划具体用于指示以下至少一种内容:需更新的第一数据表,对第一数据表执行的目标操作,以及第一数据表中需更新的字段值的列表。
示例性地,数据操作语句为上述示例的数据写入语句,目标操作是指在第一数据库中写入目标数据的操作,目标操作的操作类型为数据写入操作,那么生成的初始执行计划可称为数据写入计划,具体内容如下:
其中,Jdbc(Java DataBase Connectivity,JAVA数据库连接)是指使用Java(一种计算机语言)连接数据库,可提供一组接口和类,从而能够与各个数据库进行交互。每个序号对应一个子计划,上述初始执行计划在实际执行过程中从序号3开始按照序号3-序号2-序号1的顺序,依次沿着序号对应的子计划,从而在执行完序号1对应的子计划之后确定完成数据的写入。其中,JdbcTableScan是数据源扫描子计划,表示扫描需写入的目标数据,此处该目标数据所属的数据源具体为第一数据库teg_hbase_test中的数据表benchmark_tpch_customer_100_raw。此外,该数据源扫描子计划中还包括Alias,Alias是一种重命名技术,它允许为表、列、函数等定义一个临时的别名提高查询语句的可读性和简洁性,此处重命名的表名与其他数据表的表名保持一致。JdbcTableModify是数据表修改子计划,其中包括第一数据表的表标识以及关于目标操作的操作信息operation,表标识具体包括第一数据库的库名teg_hbase_test以及第一数据表的表名称tpch._customer_100_show。基于该操作信息可指示需执行的更新操作为INSERT以及第一数据表中需更新的列字段。JdbcToEnumerableConverter是数据枚举子计划,用于枚举数据。
在另一个实施例中,若目标操作的操作类型为数据查询操作,则初始执行计划包括数据表扫描子计划;该数据表扫描子计划用于指示对需查询的第一数据库中的第一数据表进行扫描,因此,数据表扫描子计划包括第一数据表的表标识。
在一个示例性的内容中,数据操作语句为上述示例的数据查询语句,目标操作是指从第一数据库中查询目标数据的操作,目标操作的操作类型为数据查询操作,那么所生成的初始执行计划可称为数据查询计划,具体内容如下:
同上,每个序号对应一个子计划,初始执行计划在实际执行过程中是从序号4开始,按照序号4-序号3-序号2-序号1的顺序,依次执行序号对应的子计划,从而在执行完序号1对应的子计划之后确定完成对目标数据的查询。JdbcTableScan为数据表扫描子计划,表示扫描第一数据库teg_hbase_test中的第一数据表tpch_customer_100_show;JdbcProject()为指定列查找子计划,表示查找第一数据表中具体的某一列;JdbcAggregate为聚合子计划,表示将不同的聚合函数应用于列表或数据库,此处表示聚合所查找的分组以及统计分组的数量。JdbcToEnumerableConverter表示枚举查找到的结果。可见,通过上述初始执行计划可查询hive数据库中的表名为tpch_customer_100_show的第一数据表中的数据。
上述步骤1.1-步骤1.2所示的初始执行计划的生成过程,通过对数据操作语句进行解析以及验证语义,能够将数据操作语句分解为实际执行过程中的步骤,这样能够掌握相应计算引擎的执行逻辑,并能够实现更有针对性的优化。
在一种实现方式中,为了保证数据安全,在调用数据处理引擎根据解析结果生成初始执行计划之前,还可以对目标对象进行鉴权,具体包括:调用权限服务获取第一数据表的权限信息,该权限信息用于指示允许对第一数据表执行操作的至少一个对象;若权限信息指示的至少一个对象中包括目标对象,则触发执行调用数据处理引擎根据解析结果生成初始执行计划的步骤。
具体地,每个数据表均具有权限信息以指示允许对相应数据表执行操作的至少一个对象,该操作可以是目标操作,例如将目标数据写入第一数据表的操作。该权限信息可包括允许对第一数据表执行操作的至少一个对象的标识,进而在判断权限信息指示的至少一个对象中是否包括目标对象时,可将目标对象的标识和各个对象的标识进行比较,若权限信息所包括的各个对象的标识中存在目标对象的标识,那么可确定目标对象具备对第一数据表的操作权限,从而可触发执行调用数据处理引擎根据解析结果生成初始执行计划的步骤。反之,若权限信息指示的至少一个对象中未包括目标对象,则禁止执行调用数据处理引擎根据解析结果生成初始执行计划的步骤。
可理解的是,无论是操作请求用于请求对第一数据表执行数据写入操作,还是请求对第一数据表执行数据查询操作,均可按照上述逻辑生成初始执行计划。在生成初始执行计划的过程中还可以进一步验证用户对第一数据表的操作权限,从而在通过语义验证并具备操作权限的情况下,才生成初始执行计划。
在得到初始执行计划之后,若查找到第一数据表的元数据,则可根据该元数据提升基于第一数据表的操作性能,具体可以根据第一数据表的元数据对该初始执行计划进行改写来实现对初始执行计划的优化,进而可得到目标执行计划来对第二数据表进行操作。
S404,根据查找到的元数据对初始执行计划进行改写处理,得到目标执行计划,该目标执行计划用于指示对第二数据库中的第二数据表执行关于目标数据的目标操作。
在一种具体实现中,计算机设备可调用数据处理引擎,根据查找到的元数据对初始执行计划进行改写处理。在一种可实现的方式中,数据处理引擎可提供优化器,从而可调用数据处理引擎提供的优化器,启动对初始执行计划的优化。具体可获取第一数据表的元数据来改写执行计划,以得到对第二数据库中的第二数据表执行关于目标数据的目标操作的目标执行计划。
在一个实施例中,目标操作是指在第一数据表中写入目标数据的操作,目标操作的操作类型为数据写入操作。该目标数据可以是第一数据库中其他数据表的数据,也可以是其他待写入第一数据库中的数据。初始执行计划中包括数据源扫描子计划以及数据表修改子计划。计算机设备在执行上述S404时,具体可以执行如下步骤(3.1)-步骤(3.3)。
步骤(3.1)根据查找到的元数据确定第二数据表的表标识。
基于第一数据表的元数据的作用,该元数据可映射第一数据表和第二数据表。在查找到第一数据表的元数据时,便可确定第一数据表对应有与其映射的第二数据表,从而可确定出第二数据表的表标识。
步骤(3.2)保持数据源扫描子计划中的目标数据所属数据源的源标识不变,并将第二数据表的表标识添加至数据表修改子计划中,以更新初始执行计划。
由于需写入数据表的目标数据的来源无需改变,因此,无需对数据源扫描子计划中的目标数据所属数据源的源标识进行变更,从而可保证实际写入数据表的目标数据的来源相同。但是为了更快速地写入目标数据,可对数据表修改子计划进行改写,具体可根据该第二数据表的表标识更新该数据表修改子计划。
在一种具体实现中,该数据表修改(TableModify)子计划包括表字段(table)以及其字段值,可将第二数据表的表标识添加到该数据表修改子计划中的字段值中,这样更新后的数据表修改子计划中的字段值便包括第二数据表的表标识。另外,在原本的数据表修改子计划中的字段值包括第一数据表的表标识,该表标识包括第一数据库的库名和第一数据库的表名,当第二数据表的表标识添加至数据表修改子计划之后,可将该第一数据库的库标识和第一数据表的表标识重新组合为一个目标标识来指示第一数据库中的第一数据表。从而更新后的数据表修改子计划中也包含该目标标识。比如:第一数据库的库名为teg_hbase_test,而第一数据表的表名为tpch_customer_100_show,通过重组可得到目标标识teg_hbase_test.tpch_customer_100_show,用于指示第一数据库中的第一数据表。通过上述处理,更新后的数据表修改子计划中包括的表字段便可包括第二数据表的表标识以及第一数据表对应的目标标识。进一步地,数据表修改子计划中还可以包括关于目标操作的操作信息,由于目标操作的操作类型未改变,因此,用于指示目标操作的操作类型的信息可保持不变。如果第一数据表对应需更新的列字段;而第一数据表和第二数据表所映射的列字段不同,那么还可根据元数据确定第二数据表的列字段,并采用第二数据表的列字段替换数据修改子计划中的关于目标操作的操作信息,具体包括所需更新的列字段,从而使得数据表修改子计划中包含第二数据表中需更新的列字段。通过上述方式可对初始执行计划中的数据表修改子计划进行更新,更新后的数据表修改子计划包括第二数据表的表标识,从而可得到更新后的初始执行计划。
该更新后的初始执行计划用于指示对第二数据库中的第二数据表执行关于目标数据的目标操作。基于目标操作的操作类型为数据写入操作,更新后的初始执行计划具体可用于指示将目标数据写入第二数据表中(或者说在第二数据表中写入目标数据)。而初始执行计划具体指示的是将目标数据写入第一数据表中。示例性地,在目标操作为数据写入操作的情况下,上述示例的初始执行计划在被改写后,所得到的更新后的初始执行计划如下所示。
对比上述所示的初始执行计划(用于指示将目标数据写入第一数据表中)可知,数据表扫描的内容保持不变(即数据表扫描子计划不变),该数据表扫描的内容包括需写入的目标数据所属的数据源。而JdbcTableModify变更成EnumerableTableModlify,且数据表修改子计划中的表字段的值被更新,具体地,添加了第二数据库中的第二数据表的表标识(此处为表名),且重组了原有的第一数据库的库名和第一数据表的表名而得到第一数据表的表标识,该第一数据表的表标识可用于验证第二数据表是否准确。还重置了EnumerableTableModlify和JdbcToEnumerableConverte之间的执行顺序,即:EnumerableTableModlify在JdbcToEnumerableConverter之后执行,从而在实际执行时,可先枚举出需写入的数据,再将数据写入第二数据表中。
步骤(3.3)基于更新后的初始执行计划,确定目标执行计划。
更新后的初始执行计划是一个新的执行计划,该更新后的初始执行计划即可视为根据第一数据表的元数据对初始执行计划进行优化后得到的新的执行计划,并且初始执行计划和更新后的初始执行计划之间基于元数据的映射为等价变换的关系。
在一个实施例中,若更新后的初始执行计划与第二数据库适配,那么可直接将该更新后的初始执行计划确定为目标执行计划。其中,适配是指第二数据库的计算引擎支持直接执行该更新后的初始执行计划。在另一个实施例中,若更新后的初始执行计划与第二数据库未适配,那么可先将该更新后的初始执行计划转换为与第二数据库所支持的语法格式匹配的目标数据操作语句之后,再由将目标数据操作语句转换为目标执行计划。
上述步骤(3.1)-步骤(3.3),在目标操作的操作类型为数据写入操作的情况下,对于初始执行计划的改写具体是通过更新该初始执行计划中的数据表修改子计划,来使得写入数据需修改的第一数据库中的第一数据表,更新为了需修改第二数据库中的第二数据表,从而可实现对初始执行计划的更新,并基于更新后的初始执行计划生成目标执行计划。
进一步地,在上述步骤(3.1)-步骤(3.3)的方案基础之上,在一个可行的实施方式中,除了更新数据表修改子计划之外,还可以执行如下内容来进一步更新初始执行计划:根据查找到的元数据确定数据转换信息;该数据转换信息用于连接数据转换器的信息,该数据转换器是指用于对目标数据进行格式转换的工具。由于对第一数据表执行的目标操作涉及数据写入,而数据写入时需与相应的数据库所支持的数据格式适配,从而可确定数据转换信息,以便之后连接数据转换器以将目标数据的数据格式转换为与第二数据库适配的数据格式。其中,该数据转换信息可以是数据转换器的名称,或者可以是需转换的数据格式。数据转换器可以是专门用于转换为第二数据库支持的数据格式的工具,或者可以是一种通用的转换数据的格式的工具,即可支持转换为多种数据库的数据格式,例如spark。在确定出数据转换信息之后,便可在初始执行计划中添加该数据转换信息,以更新初始执行计划。也就是说,更新后的初始执行计划不仅包括第二数据表的表标识,还包括该数据转换信息。通过将数据转换信息添加在初始执行计划中,若数据转换器出现异常或者不适配的情况,通过执行计划能够更为直接、便捷地发现,以便于基于具体的业务需求进行快速地调整。
在一种可行的实现方式中,用于连接数据转换器的信息也可包含于配置语句中,即除了提交的数据操作语句,通过计算机设备还可配置数据写入所需的其他信息,例如通过SET参数设置数据转换信息,从而可在提交数据操作语句之后,将配置语句中包括的参数也一并提交,从而可基于对参数的分析,得到数据转换信息,并采用该数据转换信息直接连接到相应的数据转换器中。可选地,若用户未配置该数据转换信息,那么可基于系统默认配置中包括的数据转换信息直接连接到相应的数据转换器中。这样,无需在改写初始执行计划的过程中添加该数据转换信息,而是仅更新数据表修改计划中的表字段的内容。
在另一个实施例中,目标操作是指从第一数据表中查询目标数据的操作,目标操作的操作类型为数据查询操作,初始执行计划用于对第一数据表执行数据查询操作;该初始执行计划中包括数据表扫描子计划;计算机设备在执行上述S404时,具体可以执行如下内容(4.1)-(4.3)。
(4.1)根据查找到的元数据确定第二数据表的表标识。
(4.2)将第二数据表的表标识添加至数据表扫描子计划中,以更新初始执行计划。
(4.3)基于更新后的初始执行计划,确定目标执行计划。
具体地,上述步骤(4.1)可参考前述数据写入操作下改写初始执行计划所涉及的相同流程,在此不做赘述。对于步骤(4.2),该数据表扫描(TableScan)子计划包括表字段(table)以及对应的字段值。在根据第二数据表的表标识对数据表扫描子计划进行更新的过程中,具体可将第二数据表的表标识添加到该数据表扫描子计划中的字段值中,这样更新后的数据表扫描子计划中的字段值便包括第二数据表的表标识。另外,数据表扫描子计划中的字段值包括第一数据库的库名和第一数据库的表名,当第二数据表的表标识添加至数据表扫描子计划之后,可将该第一数据库的库名和第一数据表的表名重新组合为一个目标标识来指示第一数据库中的第一数据表,并将该目标标识保留在更新后的数据表扫描子计划中,从而更新后的数据表扫描子计划包含该目标标识。比如:第一数据库的库名为teg_hbase_test,第一数据表的表名为tpch_customer_100_show,通过重组可得到目标标识teg_hbase_test.tpch_customer_100_show,用于指示第一数据库中的第一数据表。通过上述处理,更新后的数据表扫描子计划中包括的表字段对应的字段值便包括第二数据表的表标识以及第一数据表对应的目标标识。进一步地,初始执行计划还可以包括列字段子计划,该列字段扫描子计划中包括需扫描的第一数据表中的列字段;如果第一数据表和第二数据表所映射的列字段不同,那么还可根据元数据确定第二数据表的列字段,并采用第二数据表的列字段替换列字段子计划中的第一数据表的列字段,从而使得更新后的初始执行计划中包含对第二数据表进行扫描的列字段。更新后的初始执行计划用于指示从第二数据表中查询目标数据。
下面以上述在数据查询语句下所生成的初始执行计划为例,该初始执行计划用于指示对第一数据表执行数据查询操作。通过对第一数据表进行改写后,可得到更新后的初始执行计划,该更新后的初始执行计划如下所示。
对比前述相应示例的初始执行计划可见,更新后的初始执行计划未改变各个子计划的执行顺序,而仅仅是对JdbcTableScan(即数据表扫描子计划)所扫描的数据表进行了变更,具体是添加了第二数据表的表标识,并采用更具体的表标识来指明第一数据表,通过将第一数据表的表标识保留在该数据表扫描子计划中,可辅助第二数据表的准确查询。在一种可实现的方式中,如果需查询指定范围的数据,例如查询指定列范围的数据,那么还可设置数据过滤条件,并根据第一数据表和第二数据表之间列字段或者分区的映射关系,先确定所查询的第一列范围在第二数据表中映射的第二列范围,从而采用该第二列范围替换初始执行计划中的第一列范围,得到更新后的初始执行计划。
上述步骤(4.1)-步骤(4.2),在目标操作的操作类型为数据查询操作的情况下,对于初始执行计划的改写具体是通过更新该初始执行计划中的数据表扫描子计划,来使得需查询的第一数据表,更新为了第二数据库中的第二数据表,从而可实现对初始执行计划的更新,并可基于更新后的初始执行计划生成目标执行计划。
在一种实现方式中,无论是目标操作是数据写入操作还是数据查询操作,均是先对初始执行计划进行改写,得到更新后的初始执行计划,进而根据更新后的初始执行计划来生成目标执行计划。计算机设备基于更新后的初始执行计划确定目标执行计划的具体实现方式包括:按照第二数据库的计算引擎所支持的语法格式,对更新后的初始执行计划进行语法转换处理,得到第二数据库支持执行的目标数据操作语句;调用第二数据库的计算引擎,根据目标数据操作语句进行计划生成操作,得到目标执行计划。
具体地,计算机设备可调用数据处理引擎,按照第二数据库的计算引擎所支持的语法标准,将更新后的初始执行计划转换为与第二数据库适配的目标数据操作语句,从而可由该数据处理引擎提供的执行器,促发执行该目标数据操作语句。在一种实现方式中,计算机设备可通过执行器将该目标数据操作语句发送给第二数据库,从而可调用第二数据库的计算引擎,执行该目标数据操作语句,具体可执行计划生成操作,将目标数据操作语句转换为目标执行计划,此处执行计划生成操作和前述初始执行计划的生成逻辑类似,即包括对目标数据操作语句的解析、对解析得到的结果的语义验证以及鉴权等。后续第二数据库的计算引擎便可按照该目标执行计划,对第二数据表执行目标操作。
示例性地,若更新后的初始执行计划用于指示将目标数据写入第二数据库的第二数据表中,那么第二数据库的计算引擎可将该更新后的执行计划转换为DML SQL语句,该DML SQL语句可被转换为第二数据库支持的目标执行计划,并按照该目标执行计划可将目标数据写入第二数据库的第二数据表中。若更新后的初始执行计划用于指示从第二数据库的第二数据表中查询目标数据,那么第二数据库的计算引擎可将该更新后的执行计划转换为DQL(Data Query Language,数据查询语言)SQL语句,该DML SQL语句可被转换为第二数据库支持的目标执行计划,并按照该目标执行计划可将目标数据写入第二数据库的第二数据表中。
S405,按照目标执行计划,在第二数据库中对第二数据表执行关于目标数据的目标操作。
在一个实施例中,目标操作是指在第一数据表中写入目标数据的操作,目标操作的操作类型为数据写入操作;目标执行计划用于指示对第二数据表执行数据写入操作,目标执行计划中包括目标数据所属数据源的源标识和第二数据表的表标识,计算机设备在执行S405时,具体可执行如下内容:根据目标数据所属数据源的源标识确定数据源,并从该数据源中读取目标数据;以及根据第二数据表的表标识确定第二数据表,调用第二数据库的计算引擎将目标数据写入第二数据表中。
在另一个实施例中,目标执行计划中包括数据转换信息以及第二数据表的表标识,计算机设备在执行S405时,具体可执行如下步骤5.1-步骤5.3。
步骤5.1根据目标执行计划中的数据转换信息,将第二数据库的计算引擎连接至相应的数据转换器。
具体地,由于数据转换信息用于连接至数据转换器。根据目标执行计划中的数据转换信息可先确定数据转换器,进而将第二数据库的计算引擎连接至所确定的数据转换器。在一种实现方式中,由于每个数据库所支持的数据格式(或称为存储格式)不同,每个数据库可配备专属的数据转换器,具体可根据数据库的库标识以及数据库与转换器之间的匹配关系,生成相应的数据转换信息,以在需将目标数据写入相应数据库时,根据该数据转换信息连接专属的数据转换器,通过专属的数据转换器,能够将目标数据的数据格式转换为指定数据库所指示的数据格式,降低数据转换的阻塞概率,并提升数据转换效率。在另一种实现方式中,数据转换器可以是针对各个数据库通用的,即数据转换器具有通用的数据转换功能,支持多种数据库所支持的数据格式的转换。例如数据转换信息所连接的一个数据转换器适用于转换为starrocks、Apache Kylin、Apache Doris等数据库所支持的数据格式。此方式下,基于通用的数据转换器进行格式混转换处理,能够节省处理资源。
步骤5.2通过第二数据库的计算引擎,基于第二数据表的表标识请求数据转换器对目标数据进行格式转换处理,得到转换后的目标数据。
在具体实现中,通过第二数据库的计算引擎可请求数据转换器转换目标数据的数据格式。由于数据转换器支持一个或多个数据库的数据格式对应的转换,那么基于第二数据表的表标识可确定目标数据的数据格式需转换为第二数据库的数据格式。从而在请求数据转换器转换时,该数据转换器可从所支持的多种数据格式中确定出第二数据库的数据格式,并对目标数据进行格式转换处理,所得到的转换后的目标数据的数据格式与第二数据库支持的数据格式相匹配。此处的相匹配是指转换后的目标数据的数据格式与第二数据库支持的数据格式相同。
步骤5.3调用第二数据库的计算引擎,将转换后的目标数据写入第二数据表中。
在得到转换后的目标数据之后,计算机设备可调用第二数据库的计算引擎将转换后的目标数据写入第二数据表中,从而可更新第二数据表。如果需进一步对第一数据表进行查询,可基于此处更新后的第二数据表进行查询,以保证数据查询的准确性。
上述步骤5.1-步骤5.3可基于数据转换信息连接至相应的数据转换器,并按照所需转换的数据格式,请求转换器将目标数据转换为该数据格式,最终可顺利地存储至第二数据库的第二数据表中。
在另一个实施例中,目标操作是指从第一数据表中查询目标数据的操作,目标操作的操作类型为数据查询操作;目标执行计划用于指示对第二数据表执行数据查询操作。目标执行计划中包括第二数据表的表标识以及需查询的目标数据对应的数据范围标识;该数据范围标识可以是指定的某个列字段,或者是指定的多个列字段。计算机设备在执行S405时,具体可执行如下步骤:按照目标执行计划中第二数据表的表标识,确定第二数据表;根据数据范围标识,从第二数据表中确定出数据范围,并将该数据范围内的数据确定为目标数据。这样,便可从第二数据表中查询到目标数据。
由上述可知,第二数据表可以是在生成元数据的过程中临时创建的数据表,如果在查询第二数据表之前未对第一数据表执行数据写入操作,那么该第二数据表未存储有数据,从而在对第一数据表执行数据查询操作之后,基于计划改写后对第二数据表执行数据查询操作,所得到的结果可以为空(NULL)。或者,所查询的目标数据并不存在于第二数据表中,查询结果仍旧为空(NULL)。反之,如果在查询第二数据表之前已对第一数据表执行数据写入操作,那么该第二数据表存储有数据,且目标数据存在于第二数据表中,那么可返回查询到的结果。
由于第二数据库的计算性能比第一数据库的计算性能更优异,该计算性能具体体现在计算引擎的计算速度上。通过改写初始执行计划将对第一数据表执行的数据查询操作,优化到对第二数据表执行的数据查询操作上,可提升查询速度。
本申请实施例提供的数据处理方法,可获取针对第一数据库的操作请求,基于该操作请求可先生成初始执行计划,再根据查找到的元数据自动地对初始执行计划进行改写,从而实现对初始执行计划的优化,并将对第一数据表执行关于目标数据的目标操作,基于执行计划的改写,变更为对第二数据表执行关于目标数据的目标操作。这样按照目标执行计划实际执行时,底层是调用响应速度更快的第二数据库的计算引擎操作第二数据表,从而可提高数据处理速度。无论是数据读取还是数据写入速度,均能够得到有效地提升。
在一种实现方式中,若数据处理引擎和第二数据库的计算引擎均集成在一个计算机设备中。当执行本申请所提供的方法时,计算机设备可调用数据处理引擎完成如下工作:创建虚拟表以得到元数据,解析数据操作语句并生成初始的执行计划,改写执行计划,将改写后的执行计划转换为与第二数据库适配的数据操作语句,进而计算机设备可调用第二数据库的计算引擎执行该数据操作语句来得到执行关于目标数据的目标操作对应的操作结果。若数据处理引擎和第二数据库的计算引擎部署在不同的计算机设备中,那么计算机设备可调用数据处理引擎与数据库进行交互,计算机设备可调用数据处理引擎将所适配的数据操作语句发送给第二数据库,部署有第二数据库的计算机设备可调用第二数据库的计算引擎执行该数据操作语句,进而得到执行关于目标数据的目标操作对应的操作结果并返回给数据处理引擎。
另外,本申请提供的数据处理方案可在任何数据库中实现并使用,并可解决数据一致性、查询加速等问题,并可提升用户体验。具体地,在任何数据库中集成时具体的集成效果可根据集成的计算引擎的性能来评估,当前需修改SQL层的逻辑,包括改写执行计划、兼容函数(即不同数据库相同功能的函数可能有不同的返回结果需要兼容),还可以修改绑定的元数据便可实现本方案。上述提及的数据库例如是Apache Calcite,Spark,Presto,Doris等等,例如本申请可在SuperSQL(内部统一查询引擎)上实现。
基于图4所示实施例介绍的数据处理方法,为便于理解不同操作类型的目标操作下所执行的整个流程,分别提供图7a所示的数据写入流程以及图7b所示的数据查询流程。下面分别对数据写入流程和数据查询流程进行介绍。
(一)数据写入流程
1.用户发送ETL类型的DML SQL(即提交数据写入语句)给数据处理引擎(SuperSQL)服务;
2.通过语法解析器解析数据写入语句的语法并通过验证器验证语义等;
3.鉴权,判断用户是否具备操作第一数据表(hive表)的权限;
4.优化器启动优化初始执行计划;
该初始执行计划可参见前述示例的数据写入计划。基于该初始执行计划可知,优化前数据从Hive表benchmark_tpch_customer_100_raw写入到Hive的tpch_customer_100_show。
5.优化策略会获取第一数据表的元数据,获取到的第一数据表的元数据可用来改写初始执行计划(或可称为原始执行计划,指示数据写入第一数据表)。改写后的初始执行计划即更新后的初始执行计划(或可称为新执行计划,)。该初始执行计划在优化后指示数据写入第二数据表。
6.新执行计划可转换为目标数据写入语句,执行器促发执行目标数据写入语句,并可将select的结果数据(即从Hive表benchmark_tpch_customer_100_raw中读取到的数据)导入到第二数据库StarRocks中的第二数据表,这样,数据从Hive表benchmark_tpch_customer_100_raw写入到StarRocks的tpch_customer_100_show。
7.执行完毕后可通过执行器向优化器返回执行成功的消息。
上述数据写入(或可称为数据导入)流程无需配置复杂的ETL作业,用户仅需提交简单的SQL语句,便能够由数据处理引擎提供的各种服务来进行自动化地写入优化处理,提升数据写入的速度,从而优化数据导入流程。此外,由于需写入第一数据表中的数据最终会被写入第二数据表中,而对于用户而言即写入第一数据表中,这样第一数据表和第二数据表中存储的数据一致,从而可解决数据一致性问题,且数据易于管理。
(二)数据查询流程
1.用户发送查询DQL SQL(即提交数据查询语句)给SuperSQL服务;
2.通过语法解析器解析数据写入语句的语法并通过验证器验证语义等;
3.鉴权,判断用户是否具备操作第一数据表(hive表)的权限;
4.优化器启动优化初始执行计划;该初始执行计划可参考前述示例的数据查询计划,在优化前查询Hiv中的第一数据表tpch_customer_100_show。
5.优化策略会获取第一数据表的元数据,获取到的第一数据表的元数据可用来改写初始执行计划(或可称为原始执行计划,指示数据写入第一数据表)。改写后的初始执行计划即更新后的初始执行计划(或可称为新执行计划,)。该初始执行计划在优化后指示数据写入第二数据表。初始执行计划被优化后查询StarRocks的tpch_customer_100_show。
6.新执行计划可转换为目标数据查询语句(优化后的SQL),执行器促发执行该目标数据查询语句,并将该语句转换为执行计划进行计算,具体在StarRocks端计算,实验表明通过上述流程进行优化后底层实际由StarRocks引擎进行计算,计算1千5百万条数据仅需20毫秒(ms)。
7.执行完毕后返回加速后的计算结果。
上述数据查询(或可称为数据导出)流程也无需配置视图来理解各个异构引擎之间的查询,而是可通过配置简单的数据查询语句(如SQL语句)便可享受查询加速,并可降低用户使用加速查询功能的门槛。此外,对第一数据库中数据表的查询能够自适应到异构的第二数据库中进行查询,从而通过自适应异构引擎可加速查询,实现降本增效。
可见,通过数据处理引擎(SuperSQL)可提供访问各个数据库的统一入口,通过统一入口可对数据进行统一地操作,而避免不同用户由于操作不同而带来的数据不一致的问题。并且用户仅需创建一张当前数据库(即第一数据库)的虚拟表,便可将当前数据库中对应的数据表与性能更优异的数据库中的数据表建立映射,用户无需感知其他异构引擎。并且虚拟表(对用户而言为第一数据表)支持读写,和本地表一致,通过对虚拟表进行读取和写入数据可实现对第二数据表的读写,从第二数据库这一数据源中进行数据导入导出,无需跨源查询,且性能和绑定的异构引擎一致。此外,当前数据库可控制元数据的存储,可保证元数据一致。
基于上述数据方法实施例的描述,本申请实施例还提供了一种数据装置;该数据装置可以是运行于计算机设备中的一个计算机程序(包括程序代码),且该数据装置可以执行图2或图4所示的方法流程中的各个步骤。请参见图8,数据装置可以运行如下单元:
获取单元801,用于获取针对第一数据库的操作请求,操作请求用于请求对第一数据库中的第一数据表执行关于目标数据的目标操作;
查找单元802,用于查找第一数据表的元数据,第一数据表的元数据是指:在第二数据库中创建与第一数据表提供相同服务的第二数据表时,所使用的数据;第二数据库是指:与第一数据库存在异构差异,且计算性能优于第一数据库的计算性能的数据库;
处理单元803,用于根据查找到的元数据生成目标执行计划,目标执行计划用于指示对第二数据库中的第二数据表执行关于目标数据的目标操作;
处理单元803,还用于按照目标执行计划,在第二数据库中对第二数据表执行关于目标数据的目标操作。
在一个实施例中,处理单元803还用于:响应于操作请求,根据目标操作的操作类型生成初始执行计划;初始执行计划用于指示对第一数据库中的第一数据表执行关于目标数据的目标操作;处理单元803在根据查找到的元数据生成目标执行计划,具体用于:根据查找到的元数据对初始执行计划进行改写处理,得到目标执行计划。
在一个实施例中,若目标操作的操作类型为数据写入操作,则初始执行计划包括数据源扫描子计划和数据表修改子计划;数据源扫描子计划包括目标数据所属数据源的源标识,数据表修改子计划至少包括第一数据表的表标识以及关于目标操作的操作信息;若目标操作的操作类型为数据查询操作,则初始执行计划包括数据表扫描子计划;数据表扫描子计划包括第一数据表的表标识。
在一个实施例中,目标操作的操作类型为数据写入操作,目标操作是指在第一数据表中写入目标数据的操作;处理单元803在根据查找到的元数据对初始执行计划进行改写处理,得到目标执行计划时,具体用于:
根据查找到的元数据确定第二数据表的表标识;保持数据源扫描子计划中的目标数据所属数据源的源标识不变,并将第二数据表的表标识添加至数据表修改子计划中,以更新初始执行计划;基于更新后的初始执行计划,确定目标执行计划。
在一个实施例中,处理单元803还用于:根据查找到的元数据确定数据转换信息;数据转换信息用于连接数据转换器的信息,数据转换器是指用于对目标数据进行格式转换的工具;将数据转换信息添加至初始执行计划中,以更新初始执行计划。
在一个实施例中,处理单元803在基于更新后的初始执行计划,确定目标执行计划时,具体用于:按照第二数据库的计算引擎所支持的语法格式,对更新后的初始执行计划进行语法转换处理,得到第二数据库支持执行的目标数据处理语句;调用第二数据库的计算引擎,根据目标数据处理语句进行计划生成操作,得到目标执行计划。
在一个实施例中,目标执行计划中包括数据转换信息以及第二数据表的表标识,处理单元803在按照目标执行计划,在第二数据库中对第二数据表执行关于目标数据的目标操作时,具体用于:
根据目标执行计划中的数据转换信息,将第二数据库的计算引擎连接至相应的数据转换器;通过第二数据库的计算引擎,基于第二数据表的表标识请求数据转换器对目标数据进行格式转换处理,得到转换后的目标数据,转换后的目标数据的数据格式与第二数据库支持的数据格式相匹配;调用第二数据库的计算引擎,将转换后的目标数据写入第二数据表中。
在一个实施例中,操作请求包括目标对象提交的数据操作语句;处理单元803在响应于操作请求,根据目标操作的操作类型生成初始执行计划时,具体用于:响应于操作请求,调用数据处理引擎对操作请求中的数据操作语句进行语法解析,得到解析结果;以及,调用数据处理引擎提供的元数据服务,对解析结果进行语义验证;若解析结果通过语义验证,则调用数据处理引擎根据解析结果生成初始执行计划。
在一个实施例中,处理单元803还用于:调用权限服务获取第一数据表的权限信息,权限信息用于指示允许对第一数据表执行操作的至少一个对象;若权限信息指示的至少一个对象中包括目标对象,则触发执行调用数据处理引擎根据解析结果生成初始执行计划的步骤。
在一个实施例中,查找单元802在查找第一数据表的元数据时,具体用于:确定元数据服务,元数据服务用于存储至少一个数据表的元数据;从目标语句源中获取元数据查询语句,元数据查询语句用于在元数据服务中查找第一数据表的元数据;目标语句源包括以下至少一项:操作请求和数据处理引擎;调用数据处理引擎执行元数据查询语句,以在元数据服务中查找第一数据表的元数据。
在一个实施例中,查找单元802在查找第一数据表的元数据时,具体用于:确定元数据服务,元数据服务用于存储至少一个数据表的元数据;获取数据处理引擎提供的接口调用语句,接口调用语句是用于调用元数据服务的服务接口的语句;调用数据处理引擎执行接口调用语句,以调用元数据服务的服务接口,在元数据服务中查找第一数据表的元数据。
在一个实施例中,处理单元803还用于生成第一数据表的元数据,第一数据表的元数据的生成方式,包括:获取数据定义语句,数据定义语句是用于创建虚拟表的语句,数据定义语句中包括至少一个目标字段;目标字段是指:用于在第二数据库中创建与第一数据表提供相同服务的第二数据表所需的字段;根据数据定义语句创建一个虚拟表,并将创建的虚拟表确定为第一数据表的元数据。
在一个实施例中,数据处理装置部署于计算机设备中,数据定义语句由目标对象提交,处理单元803,还用于:调用权限服务对目标对象操作第一数据库的权限进行鉴定,以及对计算机设备操作第二数据库的权限进行鉴定;若鉴定出目标对象具备操作第一数据库的权限,且计算机设备具备操作第二数据库的权限,则触发执行根据数据定义语句创建一个虚拟表的步骤。
在一个实施例中,虚拟表中包括至少一个目标字段,至少一个目标字段还用于在第一数据库中创建第一数据表;处理单元803在根据数据定义语句创建一个虚拟表之后,还用于:采用创建的虚拟表中的至少一个目标字段,在第一数据库中创建虚拟表对应的第一数据表,以及在第二数据库中创建虚拟表对应的第二数据表;若第一数据表和第二数据表均创建成功,则触发执行将创建的虚拟表确定为第一数据表的元数据的步骤;若第一数据表和第二数据表中存在至少一个数据表创建失败,则删除已创建的数据表,并删除所创建的虚拟表和数据定义语句。
在一个实施例中,若第一数据表和第二数据表中存在至少一个数据表创建失败,则处理单元803,还用于:检测导致至少一个数据表创建失败的因素;若因素包括数据定义语句,则触发执行删除创建的虚拟表和数据定义语句。
在一个实施例中,处理单元803在检测导致至少一个数据表创建失败的因素时,具体用于:持续地对采用创建的虚拟表中的至少一个目标字段,在第一数据库中创建虚拟表对应的第一数据表,以及在第二数据库中创建虚拟表对应的第二数据表的步骤进行重试;若重试次数大于次数阈值,则确定创建的虚拟表存在异常,并采用创建的虚拟表对应的数据定义语句,生成导致至少一个数据表创建失败的因素。
本申请实施例通过元数据能够提供与第一数据表相同服务的第二数据表,可屏蔽异构数据库之间的差异,这样基于目标执行计划的生成能够将对第一数据表执行的目标操作转换为对第二数据表执行的相同操作,进而按照该目标执行计划在第二数据库中对第二数据表执行关于目标数据的目标操作。这样,请求对第一数据库中的第一数据表执行的目标操作,实际执行过程中是对第二数据库中的第二数据表执行,基于第二数据库更优异的计算性能,能够辅助第一数据库进行提速,提升数据库性能,并高效地处理数据。
基于上述方法实施例以及装置实施例的描述,本申请实施例还提供一种计算机设备。请参见图9,该计算机设备至少包括处理器901、输入接口902、输出接口903以及计算机存储介质904。其中,计算机设备内的处理器901、输入接口902、输出接口903以及计算机存储介质904可通过总线或其他方式连接。计算机存储介质904可以存储在计算机设备的存储器中,计算机存储介质904用于存储计算机程序,计算机程序包括程序指令,处理器901用于执行计算机存储介质904存储的程序指令。处理器901(或称CPU(Central ProcessingUnit,中央处理器))是计算机设备的计算核心以及控制核心,其适于实现一条或多条指令,具体适于加载并执行一条或多条指令从而实现相应方法流程或相应功能。本申请实施例的处理器901可以用于执行:
获取针对第一数据库的操作请求,操作请求用于请求对第一数据库中的第一数据表执行关于目标数据的目标操作;
查找第一数据表的元数据,第一数据表的元数据是指:在第二数据库中创建与第一数据表提供相同服务的第二数据表时,所使用的数据;第二数据库是指:与第一数据库存在异构差异,且计算性能优于第一数据库的计算性能的数据库;
根据查找到的元数据生成目标执行计划,目标执行计划用于指示对第二数据库中的第二数据表执行关于目标数据的目标操作;
按照目标执行计划,在第二数据库中对第二数据表执行关于目标数据的目标操作。
在一个实施例中,处理器901还用于执行:响应于操作请求,根据目标操作的操作类型生成初始执行计划;初始执行计划用于指示对第一数据库中的第一数据表执行关于目标数据的目标操作;处理器901在根据查找到的元数据生成目标执行计划,具体用于执行:根据查找到的元数据对初始执行计划进行改写处理,得到目标执行计划。
在一个实施例中,若目标操作的操作类型为数据写入操作,则初始执行计划包括数据源扫描子计划和数据表修改子计划;数据源扫描子计划包括目标数据所属数据源的源标识,数据表修改子计划至少包括第一数据表的表标识以及关于目标操作的操作信息;若目标操作的操作类型为数据查询操作,则初始执行计划包括数据表扫描子计划;数据表扫描子计划包括第一数据表的表标识。
在一个实施例中,目标操作的操作类型为数据写入操作,目标操作是指在第一数据表中写入目标数据的操作;处理器901在根据查找到的元数据对初始执行计划进行改写处理,得到目标执行计划时,具体用于执行:
根据查找到的元数据确定第二数据表的表标识;保持数据源扫描子计划中的目标数据所属数据源的源标识不变,并将第二数据表的表标识添加至数据表修改子计划中,以更新初始执行计划;基于更新后的初始执行计划,确定目标执行计划。
在一个实施例中,处理器901还用于执行:根据查找到的元数据确定数据转换信息;数据转换信息用于连接数据转换器的信息,数据转换器是指用于对目标数据进行格式转换的工具;将数据转换信息添加至初始执行计划中,以更新初始执行计划。
在一个实施例中,处理器901在基于更新后的初始执行计划,确定目标执行计划时,具体用于执行:按照第二数据库的计算引擎所支持的语法格式,对更新后的初始执行计划进行语法转换处理,得到第二数据库支持执行的目标数据处理语句;调用第二数据库的计算引擎,根据目标数据处理语句进行计划生成操作,得到目标执行计划。
在一个实施例中,目标执行计划中包括数据转换信息以及第二数据表的表标识,处理器901在按照目标执行计划,在第二数据库中对第二数据表执行关于目标数据的目标操作时,具体用于执行:
根据目标执行计划中的数据转换信息,将第二数据库的计算引擎连接至相应的数据转换器;通过第二数据库的计算引擎,基于第二数据表的表标识请求数据转换器对目标数据进行格式转换处理,得到转换后的目标数据,转换后的目标数据的数据格式与第二数据库支持的数据格式相匹配;调用第二数据库的计算引擎,将转换后的目标数据写入第二数据表中。
在一个实施例中,操作请求包括目标对象提交的数据操作语句;处理器901在响应于操作请求,根据目标操作的操作类型生成初始执行计划时,具体用于执行:响应于操作请求,调用数据处理引擎对操作请求中的数据操作语句进行语法解析,得到解析结果;以及,调用数据处理引擎提供的元数据服务,对解析结果进行语义验证;若解析结果通过语义验证,则调用数据处理引擎根据解析结果生成初始执行计划。
在一个实施例中,处理器901,还用于执行:调用权限服务获取第一数据表的权限信息,权限信息用于指示允许对第一数据表执行操作的至少一个对象;若权限信息指示的至少一个对象中包括目标对象,则触发执行调用数据处理引擎根据解析结果生成初始执行计划的步骤。
在一个实施例中,处理器901在查找第一数据表的元数据时,具体用于执行:确定元数据服务,元数据服务用于存储至少一个数据表的元数据;从目标语句源中获取元数据查询语句,元数据查询语句用于在元数据服务中查找第一数据表的元数据;目标语句源包括以下至少一项:操作请求和数据处理引擎;调用数据处理引擎执行元数据查询语句,以在元数据服务中查找第一数据表的元数据。
在一个实施例中,处理器901在查找第一数据表的元数据时,具体用于执行:确定元数据服务,元数据服务用于存储至少一个数据表的元数据;获取数据处理引擎提供的接口调用语句,接口调用语句是用于调用元数据服务的服务接口的语句;调用数据处理引擎执行接口调用语句,以调用元数据服务的服务接口,在元数据服务中查找第一数据表的元数据。
在一个实施例中,处理器901还用于执行生成第一数据表的元数据,第一数据表的元数据的生成方式,包括:获取数据定义语句,数据定义语句是用于创建虚拟表的语句,数据定义语句中包括至少一个目标字段;目标字段是指:用于在第二数据库中创建与第一数据表提供相同服务的第二数据表所需的字段;根据数据定义语句创建一个虚拟表,并将创建的虚拟表确定为第一数据表的元数据。
在一个实施例中,数据处理装置部署于计算机设备中,数据定义语句由目标对象提交,处理器901,还用于执行:调用权限服务对目标对象操作第一数据库的权限进行鉴定,以及对计算机设备操作第二数据库的权限进行鉴定;若鉴定出目标对象具备操作第一数据库的权限,且计算机设备具备操作第二数据库的权限,则触发执行根据数据定义语句创建一个虚拟表的步骤。
在一个实施例中,虚拟表中包括至少一个目标字段,至少一个目标字段还用于在第一数据库中创建第一数据表;处理器901根据数据定义语句创建一个虚拟表之后,还用于执行:采用创建的虚拟表中的至少一个目标字段,在第一数据库中创建虚拟表对应的第一数据表,以及在第二数据库中创建虚拟表对应的第二数据表;若第一数据表和第二数据表均创建成功,则触发执行将创建的虚拟表确定为第一数据表的元数据的步骤;若第一数据表和第二数据表中存在至少一个数据表创建失败,则删除已创建的数据表,并删除所创建的虚拟表和数据定义语句。
在一个实施例中,若第一数据表和第二数据表中存在至少一个数据表创建失败,则处理器901,还用于执行:检测导致至少一个数据表创建失败的因素;若因素包括数据定义语句,则触发执行删除创建的虚拟表和数据定义语句。
在一个实施例中,处理器901在检测导致至少一个数据表创建失败的因素时,具体用于执行:持续地对采用创建的虚拟表中的至少一个目标字段,在第一数据库中创建虚拟表对应的第一数据表,以及在第二数据库中创建虚拟表对应的第二数据表的步骤进行重试;若重试次数大于次数阈值,则确定创建的虚拟表存在异常,并采用创建的虚拟表对应的数据定义语句,生成导致至少一个数据表创建失败的因素。
本申请实施例通过元数据能够提供与第一数据表相同服务的第二数据表,可屏蔽异构数据库之间的差异,这样基于目标执行计划的生成能够将对第一数据表执行的目标操作转换为对第二数据表执行的相同操作,进而按照该目标执行计划在第二数据库中对第二数据表执行关于目标数据的目标操作。这样,请求对第一数据库中的第一数据表执行的目标操作,实际执行过程中是对第二数据库中的第二数据表执行,基于第二数据库更优异的计算性能,能够辅助第一数据库进行提速,提升数据库性能,并高效地处理数据。
此外,这里需要指出的是:本申请实施例还提供了一种计算机存储介质,且计算机存储介质中存储有计算机程序,且该计算机程序包括程序指令,当处理器执行上述程序指令时,能够执行前文图2和图4所对应实施例中的方法,因此,这里将不再进行赘述。对于本申请所涉及的计算机存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。作为示例,程序指令可以被部署在一个计算机设备上,或者在位于一个地点的多个计算机设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算机设备上执行。
根据本申请的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机存储介质中。计算机设备的处理器从计算机存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备可以执行前文图2和图4所对应实施例中的方法,因此,这里将不再进行赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本申请一种较佳实施例而已,当然不能以此来限定本申请之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本申请权利要求所作的等同变化,仍属于本申请所涵盖的范围。

Claims (20)

1.一种数据处理方法,其特征在于,所述方法包括:
获取针对第一数据库的操作请求,所述操作请求用于请求对所述第一数据库中的第一数据表执行关于目标数据的目标操作;
查找所述第一数据表的元数据,所述第一数据表的元数据是指:在第二数据库中创建与所述第一数据表提供相同服务的第二数据表时,所使用的数据;所述第二数据库是指:与所述第一数据库存在异构差异,且计算性能优于所述第一数据库的计算性能的数据库;
根据查找到的元数据生成目标执行计划,所述目标执行计划用于指示对所述第二数据库中的第二数据表执行关于目标数据的目标操作;
按照所述目标执行计划,在所述第二数据库中对所述第二数据表执行关于目标数据的目标操作。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述操作请求,根据所述目标操作的操作类型生成初始执行计划;所述初始执行计划用于指示对所述第一数据库中的第一数据表执行关于目标数据的目标操作;
所述根据查找到的元数据生成目标执行计划,包括:
根据查找到的元数据对所述初始执行计划进行改写处理,得到目标执行计划。
3.如权利要求2所述的方法,其特征在于,
若所述目标操作的操作类型为数据写入操作,则所述初始执行计划包括数据源扫描子计划和数据表修改子计划;所述数据源扫描子计划包括所述目标数据所属数据源的源标识,所述数据表修改子计划至少包括所述第一数据表的表标识以及关于所述目标操作的操作信息;
若所述目标操作的操作类型为数据查询操作,则所述初始执行计划包括数据表扫描子计划;所述数据表扫描子计划包括所述第一数据表的表标识。
4.如权利要求3所述的方法,其特征在于,所述目标操作的操作类型为数据写入操作,所述目标操作是指在第一数据表中写入目标数据的操作;
所述根据查找到的元数据对所述初始执行计划进行改写处理,得到目标执行计划,包括:
根据查找到的元数据确定所述第二数据表的表标识;
保持所述数据源扫描子计划中的所述目标数据所属数据源的源标识不变,并将所述第二数据表的表标识添加至所述数据表修改子计划中,以更新所述初始执行计划;
基于更新后的初始执行计划,确定目标执行计划。
5.如权利要求4所述的方法,其特征在于,所述方法还包括:
根据查找到的元数据确定数据转换信息;所述数据转换信息用于连接数据转换器的信息,所述数据转换器是指用于对所述目标数据进行格式转换的工具;
将所述数据转换信息添加至所述初始执行计划中,以更新所述初始执行计划。
6.如权利要求4所述的方法,其特征在于,所述基于更新后的初始执行计划,确定目标执行计划,包括:
按照所述第二数据库的计算引擎所支持的语法格式,对更新后的初始执行计划进行语法转换处理,得到所述第二数据库支持执行的目标数据处理语句;
调用所述第二数据库的计算引擎,根据所述目标数据处理语句进行计划生成操作,得到目标执行计划。
7.如权利要求1-6任一项所述的方法,其特征在于,所述目标执行计划中包括数据转换信息以及所述第二数据表的表标识,所述按照所述目标执行计划,在所述第二数据库中对所述第二数据表执行关于目标数据的目标操作,包括:
根据所述目标执行计划中的数据转换信息,将所述第二数据库的计算引擎连接至相应的数据转换器;
通过所述第二数据库的计算引擎,基于所述第二数据表的表标识请求所述数据转换器对所述目标数据进行格式转换处理,得到转换后的目标数据,所述转换后的目标数据的数据格式与所述第二数据库支持的数据格式相匹配;
调用所述第二数据库的计算引擎,将所述转换后的目标数据写入所述第二数据表中。
8.如权利要求2所述的方法,其特征在于,所述操作请求包括目标对象提交的数据操作语句;所述响应于所述操作请求,根据所述目标操作的操作类型生成初始执行计划,包括:
响应于所述操作请求,调用数据处理引擎对所述操作请求中的数据操作语句进行语法解析,得到解析结果;以及,调用所述数据处理引擎提供的元数据服务,对所述解析结果进行语义验证;
若所述解析结果通过语义验证,则调用所述数据处理引擎根据所述解析结果生成初始执行计划。
9.如权利要求8所述的方法,其特征在于,所述方法还包括:
调用权限服务获取所述第一数据表的权限信息,所述权限信息用于指示允许对所述第一数据表执行操作的至少一个对象;
若所述权限信息指示的至少一个对象中包括所述目标对象,则触发执行调用所述数据处理引擎根据所述解析结果生成初始执行计划的步骤。
10.如权利要求1所述的方法,其特征在于,所述查找所述第一数据表的元数据,包括:
确定元数据服务,所述元数据服务用于存储至少一个数据表的元数据;
从目标语句源中获取元数据查询语句,所述元数据查询语句用于在所述元数据服务中查找所述第一数据表的元数据;所述目标语句源包括以下至少一项:所述操作请求和数据处理引擎;
调用所述数据处理引擎执行所述元数据查询语句,以在所述元数据服务中查找所述第一数据表的元数据。
11.如权利要求1所述的方法,其特征在于,所述查找所述第一数据表的元数据,包括:
确定元数据服务,所述元数据服务用于存储至少一个数据表的元数据;
获取数据处理引擎提供的接口调用语句,所述接口调用语句是用于调用所述元数据服务的服务接口的语句;
调用所述数据处理引擎执行所述接口调用语句,以调用所述元数据服务的服务接口,在所述元数据服务中查找所述第一数据表的元数据。
12.如权利要求1所述的方法,其特征在于,所述第一数据表的元数据的生成方式,包括:
获取数据定义语句,所述数据定义语句是用于创建虚拟表的语句,所述数据定义语句中包括至少一个目标字段;所述目标字段是指:用于在第二数据库中创建与所述第一数据表提供相同服务的第二数据表所需的字段;
根据所述数据定义语句创建一个虚拟表,并将创建的虚拟表确定为所述第一数据表的元数据。
13.如权利要求12所述的方法,其特征在于,所述方法由计算机设备执行,所述数据定义语句由目标对象提交,所述方法还包括:
调用权限服务对所述目标对象操作第一数据库的权限进行鉴定,以及对所述计算机设备操作第二数据库的权限进行鉴定;
若鉴定出所述目标对象具备操作所述第一数据库的权限,且所述计算机设备具备操作所述第二数据库的权限,则触发执行根据所述数据定义语句创建一个虚拟表的步骤。
14.如权利要求12所述的方法,其特征在于,所述虚拟表中包括所述至少一个目标字段,所述至少一个目标字段还用于在第一数据库中创建第一数据表;所述根据所述数据定义语句创建一个虚拟表之后,所述方法还包括:
采用创建的虚拟表中的至少一个目标字段,在所述第一数据库中创建所述虚拟表对应的第一数据表,以及在所述第二数据库中创建所述虚拟表对应的第二数据表;
若所述第一数据表和所述第二数据表均创建成功,则触发执行所述将创建的虚拟表确定为所述第一数据表的元数据的步骤;
若所述第一数据表和所述第二数据表中存在至少一个数据表创建失败,则删除已创建的数据表,并删除所创建的虚拟表和所述数据定义语句。
15.如权利要求14所述的方法,其特征在于,若所述第一数据表和所述第二数据表中存在至少一个数据表创建失败,则所述方法还包括:
检测导致所述至少一个数据表创建失败的因素;
若所述因素包括所述数据定义语句,则触发执行所述删除所述创建的虚拟表和所述数据定义语句。
16.如权利要求15所述的方法,其特征在于,所述检测导致所述至少一个数据表创建失败的因素,包括:
持续地对目标步骤进行重试,所述目标步骤是指:所述采用创建的虚拟表中的至少一个目标字段,在所述第一数据库中创建所述虚拟表对应的第一数据表,以及在所述第二数据库中创建所述虚拟表对应的第二数据表的步骤;
若重试次数大于次数阈值,则确定所述创建的虚拟表存在异常,并采用所述创建的虚拟表对应的数据定义语句,生成导致所述至少一个数据表创建失败的因素。
17.一种数据处理装置,其特征在于,所述装置包括:
获取单元,用于获取针对第一数据库的操作请求,所述操作请求用于请求对所述第一数据库中的第一数据表执行关于目标数据的目标操作;
查找单元,用于查找所述第一数据表的元数据,所述第一数据表的元数据是指:在第二数据库中创建与所述第一数据表提供相同服务的第二数据表时,所使用的数据;所述第二数据库是指:与所述第一数据库存在异构差异,且计算性能优于所述第一数据库的计算性能的数据库;
处理单元,用于根据查找到的元数据生成目标执行计划,所述目标执行计划用于指示对所述第二数据库中的第二数据表执行关于目标数据的目标操作;
所述处理单元,还用于按照所述目标执行计划,在所述第二数据库中对所述第二数据表执行关于目标数据的目标操作。
18.一种计算机设备,其特征在于,包括:
处理器,适用于执行计算机程序;
计算机存储介质,所述计算机存储介质中存储有计算机程序,所述计算机程序被所述处理器执行时,执行如权利要求1-16任一项所述的数据处理方法。
19.一种计算机存储介质,其特征在于,所述计算机存储介质中存储有计算机程序,所述计算机程序被处理器执行时,执行如权利要求1-16任一项所述的数据处理方法。
20.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序或计算机指令,所述计算机程序或计算机指令被处理器执行时,执行如权利要求1-16任一项所述的数据处理方法。
CN202311441452.9A 2023-10-31 2023-10-31 一种数据处理方法及相关设备 Pending CN117421302A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311441452.9A CN117421302A (zh) 2023-10-31 2023-10-31 一种数据处理方法及相关设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311441452.9A CN117421302A (zh) 2023-10-31 2023-10-31 一种数据处理方法及相关设备

Publications (1)

Publication Number Publication Date
CN117421302A true CN117421302A (zh) 2024-01-19

Family

ID=89529935

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311441452.9A Pending CN117421302A (zh) 2023-10-31 2023-10-31 一种数据处理方法及相关设备

Country Status (1)

Country Link
CN (1) CN117421302A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117851434A (zh) * 2024-03-07 2024-04-09 深圳市雁联计算系统有限公司 一种数据库并发移植的方法、系统及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117851434A (zh) * 2024-03-07 2024-04-09 深圳市雁联计算系统有限公司 一种数据库并发移植的方法、系统及存储介质
CN117851434B (zh) * 2024-03-07 2024-05-14 深圳市雁联计算系统有限公司 一种数据库并发移植的方法、系统及存储介质

Similar Documents

Publication Publication Date Title
US20220067025A1 (en) Ordering transaction requests in a distributed database according to an independently assigned sequence
US10409801B2 (en) Validation of web-based database updates
US11354284B2 (en) System and method for migration of a legacy datastore
US11514009B2 (en) Method and systems for mapping object oriented/functional languages to database languages
US20210209098A1 (en) Converting database language statements between dialects
JP2008538632A (ja) データ記憶システム内のデータを操作するシステムおよび方法
US11194802B2 (en) Generating SQL queries from declarative queries for semi-structured data
US10915535B2 (en) Optimizations for a behavior analysis engine
CN113051268A (zh) 数据查询方法、数据查询装置、电子设备及存储介质
CN109408591B (zh) 支持sql驱动的ai与特征工程的决策型分布式数据库系统
CN117421302A (zh) 一种数据处理方法及相关设备
US11354313B2 (en) Transforming a user-defined table function to a derived table in a database management system
Kvet et al. Master Index Access as a Data Tuple and Block Locator
US10997160B1 (en) Streaming committed transaction updates to a data store
CN114490724B (zh) 处理数据库查询语句的方法和装置
US11188228B1 (en) Graphing transaction operations for transaction compliance analysis
US10620946B1 (en) Dynamic modeling for opaque code during static analysis
Kvet et al. Enhancing Analytical Select Statements Using Reference Aliases
US11755620B1 (en) Invoking supported non-relational database operations to provide results consistent with commands specified in a relational query language
US20240134842A1 (en) Fine-grained decision on propagation of revalidation
US20230385276A1 (en) Database object validation for reusing captured query plans
US10929396B1 (en) Multi-type attribute index for a document database
CN117131027A (zh) 数据质量检测方法、装置、终端设备以及存储介质
CN117331976A (zh) 一种sql语句执行方法及装置
CN117435650A (zh) 技术元数据处理方法、系统、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication