发布信息

一种多引擎数据查询方法、装置、设备及存储介质与流程

作者:admin      2022-08-06 09:16:47     358



计算;推算;计数设备的制造及其应用技术1.本技术涉及但不限于数据查询领域,尤其涉及一种多引擎数据查询方法、装置、设备及存储介质。背景技术:2.联机分析处理(on-line analytical processing,olap)类型的查询在企业业务场景下非常的普遍,包括:临时性的查询数据,临时的复杂查询分析,行为识别(behavior identity,bi)系统的查询等。olap查询中用到的查询引擎有很多种,如presto、impala、spark、clickhouse等,不同的查询引擎有不同的特点和不同的适用场景。3.统一用户使用体验,降低用户使用门槛,用适合的引擎解决不同的业务问题,并且能最大限度的提高效率、节省成本,是目前企业在olap查询中面临的很重要的问题。目前所采用的技术手段包括:用同一个引擎连接不同数据源,此种方式可以统一用户体验,但无法解决不同场景的问题;使用多引擎以支持不同的业务场景,此种方式可以适配多种业务场景及查询情况,但无法发挥各种引擎的最大价值。技术实现要素:4.本技术提供了一种多引擎数据查询方法、装置、设备及存储介质,以降低用户使用门槛、降低查询成本、提升查询效率以及提升用户体验。5.第一方面,本技术提供一种多引擎数据查询方法,包括:通过用户接口,获得来自客户端的结构化查询语言(structured query language,sql)查询请求;响应于sql查询请求,从多个查询引擎中确定对应的执行引擎,多个查询引擎使用相同的所述用户接口;通过执行引擎执行sql查询请求,获取查询结果;通过用户接口,输出查询结果。6.在一种可能的实施方式中,sql查询请求采用数据仓库工具hive sql标准化语言。7.在一种可能的实施方式中,响应于sql查询请求,从多个查询引擎中确定对应的执行引擎,包括:对sql查询请求进行解析,得到解析结果;获取元数据、历史查询统计信息以及预设的路由规则;根据解析结果、元数据、历史查询统计信息以及路由规则,从多个查询引擎中确定执行引擎。8.在一种可能的实施方式中,通过执行引擎执行sql查询请求,获取查询结果之前,还包括:对sql查询请求转化为执行引擎可执行的sql语言;和/或,对执行引擎的配置参数进行优化,其中,配置参数包括执行引擎的运行参数和/或执行引擎的资源配置参数。9.在一种可能的实施方式中,通过执行引擎执行sql查询请求,获取查询结果,包括:将sql查询请求输入执行引擎,得到输出的查询结果。10.在一种可能的实施方式中,将sql查询请求输入执行引擎,得到输出的查询结果,包括:将sql查询请求添加至执行引擎的执行队列;按照执行队列,将sql查询请求依次输入执行引擎,得到对应的查询结果。11.在一种可能的实施方式中,将sql查询请求输入执行引擎,得到输出的查询结果之后,还包括:将查询结果以对象存储的方式进行存储。12.在一种可能的实施方式中,通过用户接口,输出查询结果,包括:对查询结果进行规范化处理;通过用户接口,输出处理后的查询结果。13.第二方面,本技术提供一种多引擎数据查询装置,该装置可以为计算机中的芯片或者片上系统,还可以为计算机中用于实现第一方面及其任一种可能的实施方式所述方法的功能模块。该多引擎数据查询装置可以实现第一方面及其任一种可能的实施方式所述计算机所执行的功能,所述功能可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个上述功能相应的模块。该多引擎数据查询装置包括:获得模块,用于通过用户接口,获得来自客户端的sql查询请求;调度模块,用于响应于sql查询请求,从多个查询引擎中确定对应的执行引擎,多个查询引擎使用相同的用户接口;执行模块,用于通过执行引擎执行sql查询请求,获取查询结果;输出模块,用于通过用户接口,输出查询结果。14.在一种可能的实施方式中,sql查询请求采用数据仓库工具hive sql标准化语言。15.在一种可能的实施方式中,调度模块,用于对sql查询请求进行解析,得到解析结果;获取元数据、历史查询统计信息以及预设的路由规则;根据解析结果、元数据、历史查询统计信息以及路由规则,从多个查询引擎中确定执行引擎。16.在一种可能的实施方式中,执行模块,用于对sql查询请求转化为执行引擎可执行的sql语言;和/或,对执行引擎的配置参数进行优化,其中,配置参数包括执行引擎的运行参数和/或执行引擎的资源配置参数。17.在一种可能的实施方式中,执行模块,用于将sql查询请求输入执行引擎,得到输出的查询结果。18.在一种可能的实施方式中,执行模块,用于将sql查询请求添加至执行引擎的执行队列;按照执行队列,将sql查询请求依次输入执行引擎,得到对应的所述查询结果。19.在一种可能的实施方式中,执行模块,用于将查询结果以对象存储的方式进行存储。20.在一种可能的实施方式中,输出模块,用于对查询结果进行规范化处理;通过用户接口,输出处理后的查询结果。21.第三方面,本技术提供一种电子设备,包括:用于存储处理器可执行指令的存储器;处理器;其中,处理器被配置为:用于执行可执行指令时,以实现如第一方面及其任一可能的实施方式所述的方法。22.第四方面,本技术提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,计算机可执行指令被处理器执行后能够实现如第一方面及其任一种可能的实施方式所述的方法。23.本技术提供的技术方案可以包括以下有益效果:24.在本技术中,通过使用统一的sql语法,可以降低用户使用门槛,无需考虑不同引擎的差异性,便于使用和推广;支持多种引擎,根据查询特点选择合适的引擎,可以提升查询效率,降低查询成本;得到的查询结果以对象存储的方式保存,使得用户下载此查询数据或再次打开此查询时,可以直接从对象存储下载数据,无需重复执行,可以极大的提升用户体验。25.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术的保护范围。附图说明26.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。27.图1为本技术实施例中的多引擎数据查询方法的一种实施流程示意图;28.图2为本技术实施例中的多引擎数据查询方法的另一种实施流程示意图;29.图3本技术实施例中的多引擎数据查询装置的一种结构示意图;30.图4本技术实施例中的多引擎数据查询装置的另一种结构示意图;31.图5为本技术实施中的一种电子设备的结构示意图。具体实施方式32.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本技术实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本技术。在其它情况中省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本技术的描述。33.为了说明本技术所述的技术方案,下面通过具体实施例来进行说明。34.olap查询是一种使分析人员、管理人员或执行人员能够从多种角度对从原始数据中转化出来的、能够真正为用户所理解的、并真实反映企业维特性的信息进行快速、一致、交互的存取,从而获得对数据更深入了解的一类软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。35.olap查询的应用非常广泛,包括:销售、市场营销、管理新闻、业务流程管理(business process management,bpm)、预算和预测、金钱新闻以及类似领域的商业新闻。但现有的olap查询技术由于引擎的单一以及查询的复杂程度,存在工作量大且速度慢的问题。36.现行的解决方案主要有两种思路:(1)用同一个引擎连接不同数据源,如presto、spark等都有类似能力。这种方式可以解决统一用户体验等问题,同时可以做联邦查询,但是无法应用多引擎的优势去解决不同场景的问题,单一引擎无法解决所有问题。(2)多引擎共用以支持不同业务场景,如一般的及时分析、复杂度较低的查询采用presto或者impala;复杂查询、shuffle数据较大可使用spark查询;而数据量大、join较少的宽表查询可以使用clickhouse。这种方式可以针对不同场景,使用不同引擎,发挥各种引擎的最大价值,但不同引擎的sql语法不同,用户需要掌握多种类型的sql语法,提升了用户使用门槛;且不同引擎适用的业务场景不同,如果由用户来选择引擎,一是提升了门槛,需要用户非常了解不同引擎的特点,另外如果引擎选择的不合适,可能会带来执行慢,成本上涨等问题。37.为了解决上述问题,本技术提供一种多引擎数据查询方法,该方法可以应用于多引擎数据查询装置中,以执行sql查询请求。38.那么,图1为本技术实施例中多引擎数据查询方法的一种实施流程示意图,参见图1所示,该多引擎数据查询方法可以包括:39.s101,通过用户接口,获得来自客户端的sql查询请求。40.其中,客户端用于接收用户发出的sql查询请求,该客户端包括hadoop用户体验(hadoop user experience,hue)、自研查询工具、第三方查询工具、bi工具等。sql查询请求采用数据仓库工具hive sql标准化语言。41.可以理解的,不同的引擎本身就支持java数据库连接(java database connectivity,jdbc)接口,如presto、clickhouse、spark thrift server等,但对于不同的引擎,jdbc接口是具有不同的驱动的,所以连接不同引擎的jdbc接口时,需要用不同的驱动。42.在一些可能的实施方式中,多引擎数据查询装置支持jdbc和表述性状态传递(representational state transfer,rest)两种接口形式。多引擎数据查询装置在获取来自客户端的sql查询请求之前,先将不同引擎的区别屏蔽掉,使得用户在进行olap查询时,只需要一种驱动。并且,该装置可以兼容presto的驱动,使得用户通过presto的驱动就可以连接不同的引擎,也可以连接非jdbc接口的引擎,如spark引擎。43.在一些可能的实施方式中,多引擎数据查询装置的客户端通过rest或jdbc接口连接到olap服务器,并提交查询请求。44.其中,用户通过客户端输入sql查询请求,在某些情况下需要加配置参数,如:在使用spark查询时,需要指定spark执行器的内存大小;某些用户需要手动指定查询引擎;需要设置查询的优先级;需要配置时间或费用敏感度等。45.示例性的,用户如需加配置参数只需在sql查询请求前面加对应的参数设置,具体添加的配置参数如下:46.参数实例:‑‑conf spark.executor.memory=8000m47.sql实例:select username,userid from user where dt='20220201'limit 1048.统一的用户接口,使得该多引擎数据查询装置支持多种引擎,目前支持presto、clickhouse、spark、spark thrift server、tidb、mysql几种引擎,而且可以方便的支持更多引擎的接入。并且,由于采用统一的数据仓库工具hive sql标准化语言,使得用户的使用门槛降低,无需考虑不同引擎的差异性,便于使用和推广。49.s102,响应于sql查询请求,从多个查询引擎中确定对应的执行引擎。50.其中,多个查询引擎使用相同的用户接口。51.在一些可能的实施方式中,s102包括:多引擎数据查询装置对sql查询请求进行解析,得到解析结果;多引擎数据查询装置获取元数据、历史查询统计信息以及预设的路由规则;多引擎数据查询装置根据解析结果、元数据、历史查询统计信息以及路由规则,从多个查询引擎中确定执行引擎。52.可以理解的,元数据服务为可以获取此查询相关表的分区信息、表的统计信息和分区数据量信息等;历史查询统计信息为以往的查询,查询相关表、字段、条件,查询结果数据量、查询用时、扫描数据量、中央处理器(central processing unit,cpu)耗时等信息;预设的路由规则为基于经验预先设置的一些规则,满足规则后可直接按照相关规则路由。53.示例性的,多引擎数查询装置根据路由规则可以将元数据查询(展示表等)以及不包含from语句的查询路由到spark thrift server;也可以将配置了spark内存或cpu等相关参数的查询直接路由到spark查询。54.在一些可能的实施方式中,多引擎数据查询装置得到解析结果,包括:多引擎数据查询装置通过解析器对sql查询请求进行解析,该解析包括对查询参数的解析以及对sql的解析。其中,查询参数会分为系统配置参数和引擎参数,系统配置参数根据需要在后续流程中使用,而引擎参数则直接下发到引擎。多引擎数据查询装置通过calcite对sql进行解析,能获取sql的相关信息,如:表名、字段名、过滤条件、函数以及join条件等信息,作为后续分析的输入。55.多引擎数据查询装置通过智能路由以及对sql查询请求的解析,根据查询特点选择适合的引擎,不仅降低了用户的使用门槛,还可以最大程度的提升查询效率、降低查询成本。56.s103,通过执行引擎执行sql查询请求,获取查询结果。57.在一些可能的实施方式中,s103包括:多引擎数据查询装置将sql查询请求输入执行引擎,得到输出的查询结果。58.s104,通过用户接口,输出查询结果。59.在一些可能的实施方式中,s104包括:多引擎数据查询装置对查询结果进行规范化处理;以及通过用户接口,输出处理后的查询结果。60.可以理解的,由于本技术中的多引擎数据查询装置可以连接不同的执行引擎,同时与用户交互采用统一的接口,使得该多引擎数据查询装置连接不同执行引擎时返回的查询结果的格式是不统一的。因此需要将不同执行引擎的查询结果统一处理成一种规范的数据格式。规划范处理就是将不同执行引擎返回的不同格式的查询结果进行统一化处理,以得到统一数据格式的查询结果。61.示例性的,多引擎数据查询装置得到多个执行引擎返回的查询结果后,将这多个查询结果按照presto引擎的标准,统一成presto引擎输出的数据格式,再通过用户接口将所述查询结果输出至客户端。62.为了提高数据查询的效率,上述s103执行前后还可以包括s201至s205。具体来说,图2是本技术实施例中多引擎数据查询方法的另一种实施流程示意图,参见图2所示,在s102之后与s104之前,执行s201至s205。63.s201,将sql查询请求转化为执行引擎可执行的sql语言。64.可以理解的,在确定执行引擎后,对用户输入的hive标准的sql查询请求转化为该执行引擎可执行的sql语言。65.s202,对执行引擎的配置参数进行优化。66.其中,配置参数包括执行引擎的运行参数和/或执行引擎的资源配置参数。67.可以理解的,多引擎数据查询装置在确定执行引擎后,会根据历史查询统计信息和sql分析,为查询添加一些运行参数,来加快运行;另外,还可以针对sql查询请求,给出优化建议,比如使用分区字段过滤等。通过调整这些参数,可以获得更快的执行速度。68.示例性的,当多引擎数据查询装置接收到的sql查询请求是批量执行或周期性执行时,每次的执行过程只有时间周期不一样,也就是说,每个时间周期内的数据量是差不多的。那么,多引擎数据查询装置执行过一次后,会根据统计信息以及规则作出判断,加上适合的运行参数,比如spark查询可以通过调大“spark.sql.shuffle.partitions”这个运行参数来增大并行度,提高整体的执行速度,使得在周期性执行的时候可以通过添加运行参数的方式加快后面要执行的查询。69.在一些可能的实施方式中,s202包括:资源使用的配置和计量计费参数的配置等。其中,资源使用配置是指对于多用户,多任务,不同优先级,不同作业负载,可以自动适配合适的资源池、配置合适的资源大小、控制执行顺序,保证作业有效运行、资源高效利用;计量计费参数配置是指通过统一客观的方式给作业打标签,可以精细化记录项目、部门、人员等维度的资源使用量,方便后续的成本统计和管理。避免目前需要人为主观打标签造成的遗漏或错误的计量计费统计。70.示例性的,多引擎数据查询装置对于一般任务可以配置使用公共的资源池去执行;而对于高优先级、且时间很敏感的任务可以使用专用资源池执行,避免受其他任务影响。多引擎数据查询装置还可以选择某种引擎下不同的计算集群,或者通过配置参数加一些标签,用于引擎侧的计费统计。例如:“‑‑conf spark.kubernetes.driver.label.owner=xxx”和“‑‑conf spark.kubernetes.executor.label.owner=xxx”这两个参数可以设置spark任务所属的所有者。71.s203,将sql查询请求添加至执行引擎的执行队列。72.可以理解的,在多引擎数据查询装置执行sql查询请求前,会先将该sql查询请求下发到执行引擎执行。在查询执行过程中,由多引擎数据查询装置中的执行管理器对查询进行管理,通过将sql查询请求引入执行队列,完成对sql查询请求排队、重试、降级执行等功能。73.s204,按照执行队列,将sql查询请求依次输入执行引擎。74.可以理解的,执行队列中下发的sql查询请求会根据用户设置的优先级进行排序。为保证核心任务的运行,多引擎数据查询装置对每个组或者个人可同时运行的sql查询请求进行限制,防止个别sql查询请求饿死的情况;还会对sql查询请求进行自动重试,尽量降低查询失败率。其中,对sql查询请求的重试可以根据用户的配置,在执行sql查询请求失败时启动重试功能,也可以在当前执行引擎长时间未执行成功时切换执行引擎执行。75.s205,将查询结果以对象存储的方式进行存储。76.可以理解的,多引擎数据查询装置在得到查询结果后,在给用户返回查询结果的同时,也将该查询结果异步的保存到对象存储上。这样使得用户再次打开历史查询的时候,可以通过简单的系统配置参数告知该多引擎查询装置所在的系统,该系统就能直接从对象存储下载数据返回给用户,无需重复执行,用户体验提升明显。77.至此,便实现了多引擎的数据查询处理过程。78.由此可见,通过多引擎数据查询方法,使用统一的sql语法,可以降低用户使用门槛,无需考虑不同引擎的差异性,便于使用和推广;支持多种引擎,根据查询特点选择合适的引擎,可以提升查询效率,降低查询成本;得到的查询结果以对象存储的方式保存,使得用户下载此查询数据或再次打开此查询时,可以直接从对象存储下载数据,无需重复执行,可以极大的提升用户体验。79.基于相同的发明构思,本技术实施例还提供了一种多引擎数据查询装置,该装置可以为计算机中的芯片或者片上系统,还可以为计算机中用于上述一个或者多个实施例所述方法的功能模块。该多引擎数据查询装置可以实现上述一个或者多个实施例所述计算机所执行的功能,这些功能可以通过硬件执行相应的软件实现。这些硬件或软件包括一个或多个上述功能相应的模块。图3为本技术实施例中的多引擎数据查询装置的一种结构示意图,参见图3所示,该多引擎数据查询装置300可以包括:获得模块301,用于通过用户接口,获得来自客户端的sql查询请求;调度模块302,用于响应于sql查询请求,从多个查询引擎中确定对应的执行引擎,其中,多个查询引擎使用相同的用户接口;执行模块303,用于通过执行引擎执行sql查询请求,获取查询结果;输出模块304,用于通过用户接口,输出查询结果。80.其中,sql查询请求采用数据仓库工具hive sql标准化语言。81.在一种可能的实施方式中,调度模块302,具体用于:对sql查询请求进行解析,得到解析结果;获取元数据、历史查询统计信息以及预设的路由规则;根据解析结果、元数据、历史查询统计信息以及路由规则,从多个查询引擎中确定执行引擎。82.在一些可能的实施方式中,调度模块302,具体用于:对sql查询请求转化为执行引擎可执行的sql语言;和/或,对执行引擎的配置参数进行优化,其中,配置参数包括执行引擎的运行参数和/或执行引擎的资源配置参数。83.在一些可能的实施方式中,执行模块303,具体用于:将sql查询请求输入执行引擎,得到输出的查询结果。84.在一些可能的实施方式中,执行模块303,具体用于:将sql查询请求添加至执行引擎的执行队列;按照执行队列,将sql查询请求依次输入执行引擎,得到对应的查询结果。85.在一些可能的实施方式中,执行模块303,具体用于:将查询结果以对象存储的方式进行存储。86.在一些可能的实施方式中,输出模块304,具体用于:对查询结果进行规范化处理;通过用户接口,输出处理后的查询结果。87.需要说明的是,上述获得模块301、调度模块302、执行模块303和输出模块304的具体实现过程可参考图1和图2实施例的详细描述,为了说明书的简洁,这里不再赘述。88.本技术实施例中提到的获得模块301、调度模块302、执行模块303和输出模块304可以为一个或者多个处理器。89.下面以具体实施例对上述多引擎数据查询装置进行说明。90.图4为本技术实施例中的多引擎数据查询装置的另一种结构示意图,参见图4所示,上述装置可以包括:91.客户端40,用于接收用户发出的sql查询请求,并连接到olap服务器41的用户接口411。其中,客户端可以包括:hue401与自研查询工具402(其他客户端未在图中示出)。92.olap服务器41,用于通过用户接口411,接收来自客户端40的sql查询请求,其中,用户接口411包括rest接口4111以及jdbc接口4112。用户接口411将接收到的sql查询请求输入至调度模块412,经过解析4121、分析4122、优化4123和分发4124等模块的处理后将sql查询请求下发到不同查询引擎43处理,其中,查询引擎43包括但不限于:spark引擎431、presto引擎432和clickhouse引擎433。93.查询引擎42,用于执行sql查询请求,并将查询结果经过结果处理服务4125发送至客户端40。这期间需要借助内部模块413的规则引擎4131、统计模块4132、执行管理模块4133,同时会访问其他外部系统43。94.外部系统43,用于提供查询过程中需要访问的外部服务,包括统一元数据服务431、权限服务432等。95.基于相同的发明构思,本技术实施例提供一电子设备,该电子设备可以为上述一个或者多个实施例中所述的多引擎数据查询装置,也可以是该装置中的数据处理芯片。图5为本技术实施例中的一种电子设备的结构示意图,参见图5所示,电子设备500,可以采用通用的计算机硬件,包括处理器501、存储器502。96.在一些可能的实施方式中,至少一个处理器501可以构成具有对一个或多个输入执行逻辑运算的电路的任何物理设备。例如,至少一个处理器可以包括一个或多个集成电路(integrated circuit,ic),包括专用集成电路(application specific integrated circuit,asic)、微芯片、微控制器、微处理器、中央处理单元(central processing unit,cpu)的全部或部分、图形处理单元(graphics processing unit,gpu)、数字信号处理器(digital signal process,dsp)、现场可编程门阵列(field programmable gate array,fpga)或者适于执行指令或执行逻辑运算的其它电路。由至少一个处理器执行的指令可以例如被预加载到与控制器集成的或嵌入在控制器中的存储器中,或者可以存储在分离的存储器中。存储器可以包括随机存取存储器(random access memory,ram)、只读存储器(read-only memory,rom)、硬盘、光盘、磁介质、闪存,其它永久、固定或易失性存储器,或者能够存储指令的任何其它机制。在一些实施例中,至少一个处理器可以包括多于一个处理器。每个处理器可以具有相似的结构,或者处理器可以具有彼此电连接或断开的不同构造。例如,处理器可以是分离的电路或集成在单个电路中。当使用多于一个处理器时,处理器可以被配置为独立地或协作地操作。处理器可以以电、磁、光学、声学、机械或通过允许它们交互的其它手段来耦合。根据本技术的一个实施例,本技术还提供了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行上述标定方法的步骤。存储器502可以包括以易失性和/或非易失性存储器形式的计算机存储媒体,如只读存储器和/或随机存取存储器。存储器502可以存储操作系统、应用程序、其他程序模块、可执行代码、程序数据、用户数据等。97.此外,上述存储器502中存储有用于实现图3中的获得模块301、调度模块302、执行模块303和输出模块304的功能的计算机执行指令。图3中的获得模块301、调度模块302、执行模块303和输出模块304的功能/实现过程均可以通过图5中的处理器501调用存储器502中存储的计算机执行指令来实现,具体实现过程和功能参考上述相关实施例。98.基于相同的发明构思,本技术提供一种电子设备,包括:存储器,存储有计算机可执行指令;处理器,与存储器相连,用于通过执行计算机可执行指令,并能够实现如上述一个或者多个实施例所述的多引擎数据查询方法。99.基于相同的发明构思,本技术提供一种计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,计算机可执行指令被处理器执行后,能够实现如上述一个或者多个实施例所述的多引擎数据查询方法。100.本领域技术人员可以理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。101.以上所述实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围,均应包含在本技术的保护范围之内。









图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!




内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,发布内容不收取任何费用也不接任何广告!




免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

相关内容 查看全部