CN117149775A - 拉链表的数据处理方法和装置 - Google Patents
拉链表的数据处理方法和装置 Download PDFInfo
- Publication number
- CN117149775A CN117149775A CN202311197313.6A CN202311197313A CN117149775A CN 117149775 A CN117149775 A CN 117149775A CN 202311197313 A CN202311197313 A CN 202311197313A CN 117149775 A CN117149775 A CN 117149775A
- Authority
- CN
- China
- Prior art keywords
- data
- zipper
- query
- information
- increment
- 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
Links
- 238000003672 processing method Methods 0.000 title abstract description 19
- 238000000034 method Methods 0.000 claims description 29
- 238000012545 processing Methods 0.000 claims description 14
- 238000011161 development Methods 0.000 abstract description 35
- 238000004519 manufacturing process Methods 0.000 abstract description 25
- 230000008569 process Effects 0.000 description 12
- 230000008859 change Effects 0.000 description 8
- 238000012986 modification Methods 0.000 description 8
- 230000004048 modification Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000013499 data model Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000010295 mobile communication Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000007418 data mining Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000000586 desensitisation Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 238000007670 refining Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
Classifications
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/283—Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种拉链表的数据处理方法,该拉链表的数据处理方法包括:获取初始SQL语句,初始SQL语句用于将增量表中的增量数据更新到拉链表中;根据初始SQL语句获取拉链表信息和增量信息;根据拉链表信息获取拉链表表名;根据增量信息获取增量表表名;根据拉链表表名和增量表表名生成第一查询语句,第一查询语句用于查询拉链表的目标存量数据;根据拉链表信息、第一查询语句及增量信息,生成目标SQL语句,用于将增量数据添加到拉链表中并对目标存量数据的结束日期进行更新。本申请实施例的技术方案可以自动生成用于拉链表的生产逻辑,有效减少开发成本、降低开发复杂度、缓解开发时的人为失误概率。
Description
技术领域
本申请实施例涉及数据处理技术领域,尤其涉及一种拉链表的数据处理方法、装置、计算机设备、计算机可读存储介质。
背景技术
数据仓库是用于集成、存储和管理大量数据的数据库系统,具有面向主题、集成性、非易失、可反应历史变化等优点,可以用做支持用户决策的数据集合。数据仓库可以长期或永久存储对业务有价值的数据,以便于数据分析、决策支持、数据挖掘等工作。为了生成和使用方便,可以通过拉链表的形式对数据进行存储。
然而,由于拉链表的业务逻辑复杂、拗口,无法自动生成用于拉链表的生产逻辑,导致拉链表的开发过程比较复杂,存在开发难度大、开发时的人为失误概率高、开发成本高等问题。
需要说明的是,上述内容并不必然是现有技术,也不用于限制本申请的专利保护范围。
发明内容
本申请实施例提供一种拉链表的数据处理方法、装置、计算机设备、计算机可读存储介质,以解决或缓解上面提出的一项或更多项技术问题。
本申请实施例的一个方面提供了一种拉链表的数据处理方法,所述方法包括:
获取初始SQL语句,所述初始SQL语句用于将增量表中的增量数据更新到拉链表中;
根据所述初始SQL语句,获取拉链表信息和增量信息;
根据所述拉链表信息获取拉链表表名;
根据所述增量信息获取增量表表名;
根据所述拉链表表名和所述增量表表名,生成第一查询语句,所述第一查询语句用于查询所述拉链表的目标存量数据;
根据所述拉链表信息、第一查询语句及增量信息,生成目标SQL语句;
其中,所述目标SQL语句用于:将所述增量数据添加到所述拉链表中,并对所述目标存量数据的结束日期进行更新以记录历史数据变化。
可选地,根据所述初始语句获取拉链表信息和增量信息,包括:
解析所述初始SQL语句,获取抽象语法树,所述抽象语法树包括目录表节点和查询节点;
根据所述目录表节点的内容,确定所述拉链表信息;
根据所述查询节点的内容,确定所述增量信息。
可选地,根据所述拉链表信息、第一查询语句及增量信息,生成目标SQL语句,包括:
对所述第一查询语句和所述增量信息进行合并,以得到第二查询语句;
对所述拉链表信息和所述第二查询语句合并,以得到所述目标SQL语句。
可选地,根据所述拉链表表名和所述增量表表名,生成第一查询语句,包括:
根据所述拉链表表名、增量表表名及预先规范的拉链表存量数据查询逻辑,生成所述第一查询语句,所述第一查询语句包括查询条件和更新规则;
其中,所述查询条件用于:查找所述拉链表中的目标存量数据;
所述更新规则用于:在所述目标存量数据存在的情形下,对所述目标存量数据进行更新。
可选地,所述查询条件包括第一查询条件和第二查询条件;
对应地,所述查找所述拉链表中的目标存量数据,包括:
根据第一查询条件,确定所述拉链表中的最新历史数据;
在所述最新历史数据存在的情形下,根据第二查询条件确定所述目标存量数据。
可选地,在所述最新历史数据存在的情形下,根据第二查询条件确定所述目标存量数据,包括:
根据所述第二查询条件,查询所述增量表;其中,所述第二查询条件用于判断所述增量表中是否存在和所述拉链表对应的增量数据;
在所述增量表中存在和所述拉链表对应的增量数据的情形下,将所述最新历史数据确定为所述目标存量数据。
可选地,在所述目标存量数据存在的情形下,对所述目标存量数据进行更新,包括:
根据所述更新规则,对所述目标存量数据的结束日期进行更新;
其中,所述更新规则是根据所述增量数据的开始日期设置的。
本申请实施例的另一个方面提供了一种拉链表的数据处理装置,所述装置包括:
第一获取模块,用于获取初始SQL语句,所述初始SQL语句用于将增量表中的增量数据更新到拉链表中;
第二获取模块,用于根据所述初始SQL语句,获取拉链表信息和增量信息;
第三获取模块,用于根据所述拉链表信息获取拉链表表名;
第四获取模块,用于根据所述增量信息获取增量表表名;
第一生成模块,用于根据所述拉链表表名和所述增量表表名,生成第一查询语句,所述第一查询语句用于查询所述拉链表的目标存量数据;
第二生成模块,用于根据所述拉链表信息、第一查询语句及增量信息,生成目标SQL语句;
其中,所述目标SQL语句用于:将所述增量数据添加到所述拉链表中,并对所述目标存量数据的结束日期进行更新以记录历史数据变化。
本申请实施例的另一个方面提供了一种计算机设备,包括:
至少一个处理器;及
与所述至少一个处理器通信连接的存储器;
其中:所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上所述的方法。
本申请实施例的另一个方面提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机指令,所述计算机指令被处理器执行时实现如上所述的方法。
本申请实施例采用上述技术方案可以包括如下优势:
先获取初始SQL语句,其中,初始SQL语句仅包含用于实现拉链表增量更新的逻辑。然后,根据该初始SQL语句获取拉链表信息和增量信息。从拉链表信息中获取拉链表表名。增量信息中包含了增量表信息,从增量表信息中获取增量表表名。接着,根据拉链表表名和增量表表名生成第一查询语句,第一查询语句用于查询拉链表中的目标存量数据。最后,根据拉链表信息、第一查询语句和增量信息,生成目标SQL语句。目标SQL语句用于将增量数据添加到拉链表中,并更新目标存量数据的结束日期以记录历史数据变化。可知,本申请实施例可以根据初始SQL语句自动生成拉链表的生产逻辑,可以在拉链表中添加增量数据,并完成对历史数据有效期截止时间的更新。即,在开发过程中只需要关注增量数据就可以实现拉链表数据生产,不需要额外关注拉链表本身的历史数据,可以有效减少开发成本、降低开发复杂度、缓解开发时的人为失误概率。
附图说明
附图示例性地示出了实施例并且构成说明书的一部分,与说明书的文字描述一起用于讲解实施例的示例性实施方式。所示出的实施例仅出于例示的目的,并不限制权利要求的范围。在所有附图中,相同的附图标记指代类似但不一定相同的要素。
图1示意性示出了根据本申请实施例一的拉链表的数据处理方法的流程图;
图2示意性示出了图1中步骤S102的子步骤流程图;
图3示意性示出了根据本申请实施例一的拉链表的数据处理方法的新增流程图;
图4示意性示出了图3中步骤S302的子步骤流程图;
图5示意性示出了图1中步骤S110的子步骤流程图;
图6示意性示出了根据本申请实施例一的拉链表的数据处理方法的应用示例图;
图7示意性示出了根据本申请实施例一的拉链表的数据处理方法的另一应用示例图;
图8示意性示出了根据本申请实施例一的拉链表的数据处理方法的另一应用示例图;
图9示意性示出了根据本申请实施例二的拉链表的数据处理装置的框图;及
图10示意性示出了根据本申请实施例三中的计算机设备的硬件架构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,在本申请实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
在本申请的描述中,需要理解的是,步骤前的数字标号并不标识执行步骤的前后顺序,仅用于方便描述本申请及区别每一步骤,因此不能理解为对本申请的限制。
首先,提供本申请涉及的术语解释:
数据仓库(Data Warehouse):数据仓库是信息的中央存储库。通常,数据定期从事务系统、关系数据库和其他来源通过提取、转换、加载(ETL)的数据清洗工序引入到数据仓库中,并按照主题域、分层结构将数据归档有序存储在数据模型中。业务分析师、数据工程师、数据科学家和决策者可以通过商业智能(BI)工具、SQL客户端和其他分析应用程序访问数据仓库中的数据模型进行查询、分析等工作。
表:数据库中用来存储数据的对象,是有结构的数据的集合。定义为列的集合。与电子表格相似,数据在表中式按行和列的格式组织排列的。表中的每一列都设计为存储某种类型的信息(例如日期、名称、美元金额或数字)。
字段:亦称作为列。包含某一专题的信息。就像“通讯录”数据库中,“姓名”、“联系电话”这些都是表中所有行共有的属性,所以把这些列称为“姓名”字段和“联系电话”字段。
主键:指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。主键主要是用与其他表的外键关联,以及文本记录的修改与删除。
分区:物理的将数据切分开,以此达到sql操作时,减少io总量和响应时间。
全量分区表:以分区的形式组织数据,每一个分区都在存储操作数据时,当前的全量的数据。
增量表:只存储最新的数据,包括新增的,和指定时间内更新的数据。
SQL:结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。包括DQL、DML、TCL、DCL、CCL等六部分。
数据查询语言(DQL:Data Query Language):其语句也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHER E,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其它类型的SQL语句一起使用。
数据操作语言(DML:Data Manipulation Language):其语句包括动词I NSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。
事务控制语言(TCL:Transaction Control Language):它的语句能确保被DML语句影响的表的所有行及时得以更新,包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。
数据控制语言(DCL:Data Control Language):它的语句通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
指针控制语言(CCL:Cursor Control Language):它的语句像DECLAR E CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
Hadoop:是一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下开发分布式程序,充分利用集群的能力进行高速运算和存储。
MapReduce:是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)"是它的主要思想,包含函数式编程语言和矢量编程语言的特性。它极大地方便了编程人员,使他们在不会分布式并行编程的情况下也可以将自己的程序运行在分布式系统上。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
其次,为方便本领域技术人员理解本申请实施例提供的技术方案,下面对相关技术进行说明:
数据仓库是面向主题的、集成的、非易失的、可反应历史变化的、用来支持管理人员决策的数据集合。数据仓库可以长期或永久存储对业务有价值的数据。为了方便生成和使用,可以通过拉链表的形式存储数据。然而,由于拉链表的逻辑复杂、拗口,无法自动生成用于拉链表的生产逻辑,导致开发拉链表的过程比较复杂,存在容易出错、人力花费高、工作量大等问题。
本申请人了解到:相关的拉链表的加工通过使用MapReduce或SQL完成。但是上述两种拉链表的加工方式都存在一定的缺陷,具体的:
(1)使用MapReduce开发拉链表:代码复杂、代码量大、人工成本高,从而容易导致任务出错、多次返工、任务完成时间延长等问题。
(2)使用SQL开发拉链表:由于SQL本身的特点,开发的SQL逻辑复杂、容易出错。且相对于普通表的开发,使用SQL形式开发拉链表会导致开发人员在开发过程中需要考虑更多不同类型的表的使用方式,从而增加了开发的复杂度和开发人员的成本。
为此,本申请实施例提供了一种拉链表的数据处理技术方案。在该技术方案中,(1)通过开发SQL化的算法,支持拉链表的生产,且生产全部通过S QL的形式;(2)简化SQL,开发拉链表时,仅需要关注增量数据,不需要额外关注拉链表本身的历史数据;(3)通过自动化算法,自动生成拉链表的生产逻辑,减少开发人员对拉链表这项技术本身的学习成本;(4)优化拉链表生成算法,有效减少开发成本、降低开发复杂度、避免开发时的人为失误概率;(5)减小代码量,提升代码效率。具体见后文。
下面通过多个实施例介绍本申请的技术方案。须知,这些实施例可以由多种不同的形式来实施,并且不应当被解释为只限于这里所阐述的实施例。
实施例一
图1示意性示出了根据本申请实施例一的拉链表的数据处理方法的流程图。
如图1所示,该拉链表的数据处理方法可以包括步骤S100~S110,其中:
步骤S100,获取初始SQL语句,所述初始SQL语句用于将增量表中的增量数据更新到拉链表中。
步骤S102,根据所述初始SQL语句,获取拉链表信息和增量信息。
步骤S104,根据所述拉链表信息获取拉链表表名。
步骤S106,根据所述增量信息获取增量表表名。
步骤S108,根据所述拉链表表名和所述增量表表名,生成第一查询语句,所述第一查询语句用于查询所述拉链表的目标存量数据。
步骤S110,根据所述拉链表信息、第一查询语句及增量信息,生成目标S QL语句;其中,所述目标SQL语句用于:将所述增量数据添加到所述拉链表中,并对所述目标存量数据的结束日期进行更新以记录历史数据变化。
本实施例提供的拉链表的数据处理方法,先获取初始SQL语句,其中,初始SQL语句仅包含用于实现拉链表增量更新的逻辑。然后,根据该初始SQL语句获取拉链表信息和增量信息。从拉链表信息中获取拉链表表名。增量信息中包含了增量表信息,从增量表信息中获取增量表表名。接着,根据拉链表表名和增量表表名生成第一查询语句,第一查询语句用于查询拉链表中的目标存量数据。最后,根据拉链表信息、第一查询语句和增量信息,生成目标SQL语句。目标SQL语句用于将增量数据添加到拉链表中,并更新目标存量数据的结束日期以记录历史数据变化。可知,本申请实施例可以根据初始SQL语句自动生成拉链表的生产逻辑,可以在拉链表中添加增量数据,并完成对历史数据有效期截止时间的更新。即,在开发过程中只需要关注增量数据就可以实现拉链表数据生产,不需要额外关注拉链表本身的历史数据,可以有效减少开发成本、降低开发复杂度、缓解开发时的人为失误概率。
以下结合图1,对步骤S100~S110中各个步骤以及可选的其他步骤进行详细阐述。
步骤S100,获取初始SQL语句,所述初始SQL语句用于将增量表中的增量数据更新到拉链表中。
增量数据用于记录数据的变化,每次数据更新都会产生一条增量数据,该数据可以包括数据变化的细节,例如:更新的字段、更新的值、时间戳等等。
增量表是用于存储增量数据的特殊数据表,可以用来记录数据的增量更新。
举例而言:假设有增量表append1,增量表append1的结构如表1所示:
字段名 | 数据类型 | 注释 |
id | int | 主键 |
name | string | 业务字段 |
modify_time | timestamp | 更新字段 |
表1
假设2022年02月05日增量表append1增加了一条数据,具体增量数据如
表2所示:
id | name | modify_time |
1 | 张三 | 2022-02-05 |
表2
需要说明的是,表1和表2仅是对增量表结构和增量数据的示例,并不用于限制增量表结构和增量数据内容。
每当有新的增量数据,增量表就会将新的增量数据记录下来。
举例而言,在2022年02月11日,修改了增量表append1的数据,即产生了增量数据。
把name字段修改为“李四”,同时modify_time字段被系统自动修改为2022-02-11。
那么,增量表append1中的增量数据如表3所示:
id | name | modify_time |
1 | 李四 | 2022-02-11 |
表3
拉链表是用于记录数据历史变化的特殊数据表,可以用于跟踪数据随时间的变化,记录每个数据行的有效时间段,例如:跟踪产品、员工或客户脱敏信息随时间的变化。
举例而言,假设有拉链表history2,拉链表history2的结构如表4所示:
字段名 | 数据类型 | 注释 |
id | int | 主键 |
name | string | 业务字段 |
modify_time | timestamp | 更新字段 |
start_date | date | 记录有效期开始时间 |
end_date | date | 记录有效期截止时间 |
表4
需要说明的是,表4仅是对拉链表结构的示例,并不用于限制拉链表的具体结构。
当有新数据产生时,需要将增量表中的增量数据同步到拉链表中,使得拉链表可以记录数据的最新/当前状态,保证数据的完整性。为此,在上述例子中还需要追加2022年02月11日的拉链表数据。具体的,在2022年02月11日增量表append1增加了一条增量数据的情形下,该增量数据也需要同步到拉链表history2中,具体如表5所示:
id | name | modify_time | start_date | end_date |
1 | 李四 | 2022-02-11 | 2022-02-11 | 9999-12-31 |
表5
其中:
9999-12-31:一个特殊的、代表未来的日期,用于标识最新数据。
最新数据:某条数据可能会经历多次更新,每一次更新会生成该数据的一条新状态;最新数据用于说明截止到当前时刻,该数据的当前状态。
可知,拉链表数据的生产包括将增量表中的增量数据更新到拉链表中。
初始SQL语句可以是人工输入的代码。初始SQL语句中可以包括实现拉链表增量更新的逻辑。
初始SQL语句的示例如下:
INSERT OVERWRITE TABLE拉链表
SELECT主键,业务字段,
'<%=log_date%>'as start_date,
'9999-12-31'as end_date
FROM增量表
可知,初始SQL语句用于从增量表中选择主键、业务字段,将当前日期作为起始日期,将结束日期设置为“9999-12-31”,表示该数据为最新有效数据(增量数据),用SELECT的查询结果更新拉链表的数据。
如上述示例,初始SQL语句可以只包括实现拉链表增量更新的简单逻辑,而不包括针对拉链表中的历史数据的处理逻辑。在实际应用中,如果只将增量表中的增量数据加入拉链表中,而不对拉链表中的历史数据做任何处理的话,可能会导致拉链表出现重复数据、数据冲突等问题,导致历史数据变化的记录有误,具体如下:
举例而言,假设有拉链表history3,具体内容如表6所示:
id | name | start_date | end_date |
1 | Alice | 2022-01-01 | 2022-06.30 |
1 | Alice | 2022-07-01 | 2023-01-31 |
1 | Alice | 2023-02-01 | 9999-12-31 |
表6
在拉链表history3的示例中,id为1的数据记录可以表示Alice在不同时间段的有效信息。第一行数据表示Alice的信息在2022年1月1日至2022年6月30日有效,第二行数据表示在2022年7月1日至2023年1月31日有效,第三行表示从2023年2月1日开始,此条信息一直有效(9999-12-31可以表示永久有效)。
假设增量表append3中有与Alice对应的增量数据,具体内容如表7所示:
id | name | start_date | end_date |
1 | Alice | 2023-06-01 | 9999-12-31 |
表7
如果将增量表append3中的增量数据添加到拉链表history3,具体内容如表8所示:
id | name | start_date | end_date |
1 | Alice | 2022-01-01 | 2022-06.30 |
1 | Alice | 2022-07-01 | 2023-01-31 |
1 | Alice | 2023-02-01 | 9999-12-31 |
1 | Alice | 2023-06-01 | 9999-12-31 |
表8
如表8所示,第四行数据(增量数据)表示Alice的信息在2023年6月1日开始一直有效。可以看出,第三行数据(历史数据)和第四行数据(增量数据)在时间轴上重复,导致无法确定哪一行数据是有效数据,从而出现了数据冲突。
由此,要真正实现拉链表数据的生产,在将增量表中的增量数据更新到拉链表之外,还需要对拉链表中的历史数据做相应的修改,例如修改历史数据的有效期截止时间,减少重复数据和数据冲突的出现,提高历史数据变化记录的准确性。在上述例子中,可以是将第三行的end_date:“9999-12-31”修改为“2023-05-31”,以完成拉链表的数据生产。
为了实现拉链表数据生产,可以让开发人员再编写一段用于修改拉链表历史数据的SQL代码。但是这种方案显然会给开发人员带来额外的负担,因此本申请实施例提供一种基于初始SQL语句自动生成拉链表数据生产全逻辑的方案,可以降低开发难度。该方案的具体实现过程示例如下。
步骤S102,根据所述初始SQL语句,获取拉链表信息和增量信息。
拉链表信息是需要插入增量数据的拉链表的相关信息,可以包括拉链表表名、主键或标识列、数据字段、版本号等数据。
增量信息可以包括增量表的相关信息、增量数据的查询逻辑等。
由于初始SQL语句包括将增量表中的增量数据更新到拉链表的逻辑,可知,初始SQL语句中包括了拉链表信息和增量信息。
在本实施例中,通过解析初始SQL语句,可以快速获取拉链表信息和增量信息,用于后续自动生成拉链表的生产逻辑,提高整体执行效率。
在实际应用中,可以通过多种方式从SQL语句中提取拉链表信息和增量信息,下面提供一个示例性的方案。
在可选的实施例中,如图2所示,步骤S102可以包括:
步骤S200,解析所述初始SQL语句,获取抽象语法树,所述抽象语法树包括目录表节点和查询节点。
步骤S202,根据所述目录表节点的内容,确定所述拉链表信息。
步骤S204,根据所述查询节点的内容,确定所述增量信息。
抽象语法树(Abstract Syntax Tree,AST)是对源代码的抽象表示,通过树状结构来表示程序的语法结构。抽象语法树可以由一系列节点组成,其中每一个节点可以表示源代码中的一个语法元素,包括表达式、语句、函数、变量声明等。
通过对初始SQL语句的解析,可以生成与初始SQL语句对应的抽象语法树。生成的语法树是一种统一、标准化、格式化的规范,使得后续操作中可以按标准化、格式化的方式进行操作,无需考虑具体的、不同业务含义的SQL使用方式,从而降低开发的复杂度和开发人员的学习成本。
举例而言,解析初始SQL语句后得到的抽象语法树可以由两部分组成,例如目录表节点和查询节点。其中,目录表节点和查询节点可以是根据不同内容或功能划分的不同节点。
目录表节点内容示例如下:
INSERT OVERWRITE TABLE拉链表
查询节点内容示例如下:
SELECT主键,业务字段,
'<%=log_date%>'as start_date,
'9999-12-31'as end_date
FROM增量表
可知,目录表节点包括了需要插入数据的拉链表的相关信息,因此可以根据目录表节点的内容,确定拉链表信息。查询节点包括了增量表的信息,因此可以根据查询节点的内容,确定增量信息。
在本实施例中,通过解析初始SQL语句生成抽象语法树,从规范化、标准化的抽象语法书的不同节点中快速准确地确定所需的拉链表信息和增量信息,用于后续自动生产拉链表的生产逻辑,在这个过程中,不需要考虑和配置具体的不同业务的SQL,降低了开发成本和开发复杂度。
步骤S104,根据所述拉链表信息获取拉链表表名。
在本实施例中,从拉链表信息中获取拉链表表名。拉链表表名可以用于标识数据仓库中的拉链表,从而快速精确地确定需要插入增量数据的拉链表,不需要开发人员额外提供信息,提高执行效率。
步骤S106,根据所述增量信息获取增量表表名。
在本实施例中,由于增量信息中包括了增量表的信息,可以从其中获取到增量表的表名。增量表表名可以用于标识数据仓库中的增量表,从而快速精确地增量数据所在的增量表,不需要开发人员额外提供信息,提高执行效率。
步骤S108,根据所述拉链表表名和所述增量表表名,生成第一查询语句,所述第一查询语句用于查询所述拉链表的目标存量数据。
存量数据可以是在某个特定时间点或时间段内已经存在或收集到的全部数据,这些数据是过去收集、记录或生成的,与当前时间点无关。
对于拉链表来说,某条主键(如Alice)可能有多条存量数据,每一条都记录了其不同的状态和生命周期,即该条数据从哪个时间点开始生产,截止到哪个时间点会失效。
在这些具有不同生命周期的数据中,最特殊的一条是有效期截止时间end_date为“9999-12-31”的数据。这一条数据可以表示该主键(Alice)当前时刻的最新状态。
将对应的增量数据加入拉链表,也就是主键(Alice)的数据进行了更新,那么前面说的“最新状态”的数据(即end_date=“9999-12-31”)就会变成“历史数据”,不再代表数据的当前状态,因此,需要更新该历史数据的end_date字段值,例如把有效期截止时间(end_date)更新为最新一条数据(增量数据)的前一天。
在本申请实施例中,可以把需要进行修改的历史数据称为目标存量数据。
获得拉链表表名和增量表表名后,可以在数据仓库中分别确定出需要插入数据的拉链表和包含增量数据的增量表。在初始SQL语句已经提供了拉链表增量更新逻辑的情形下,可以根据拉链表表名和增量表表名,生成第一查询语句。其中,第一查询语句为SQL语句,包含了查询拉链表中目标存量数据和修改目标存量数据的逻辑,可以用于修改拉链表中的历史数据。即,基于初始SQL语句获得第一查询语句,自动地生成了拉链表数据生产所需的全部逻辑。这样,开发人员只需要开发增量数据更新逻辑,不需要额外关注拉链表本身的历史数据,使得需要人工输入的代码量少、代码效率高、开发成本少、开发简单、开发时的人为失误概率降低。
在可选的实施例中,步骤S108可以包括:根据所述拉链表表名、增量表表名及预先规范的拉链表存量数据查询逻辑,生成所述第一查询语句,所述第一查询语句包括查询条件和更新规则。其中,所述查询条件用于:查找所述拉链表中的目标存量数据。所述更新规则用于:在所述目标存量数据存在的情形下,对所述目标存量数据进行更新。
预先根据需求确定并规范拉链表存量数据的查询逻辑,比如需要查询目标存量数据,查询逻辑中可以包括查询条件:end_date字段值等于9999-12-31,有助于从包含大量存量数据的拉链表中快速查找到目标存量数据。在上述实施例中,通过预先规范拉链表存量数据的查询逻辑,可以使得数据的查询更加简单、高效、准确。
基于预先规范的拉链表存量数据查询逻辑,在确定拉链表表名和增量表表名的情形下,可以高效生成第一查询语句。
第一查询语句的示例如下:
其中,SELECT用于在拉链表中检索,检索字段包括:主键、业务字段、开始日期和结束日期。CASE用于根据查询结果动态计算end_date的值。在查询结果满足条件的情形下,将end_date字段的数据更新为“<%=log_date%>-1”,“<%=log_date%>-1”是一个占位符,在查询执行时会被具体值替换。"end_date"字段值被更新为查询执行时的日期减去一天,以表示数据记录的有效期结束日期。在查询结果不符合条件的情况下,不做任何修改。“FROM拉链表n1 LE FT OUTER JOIN增量表n2 ON n1.主键=n2.主键”是一个SQL连接操作,使用左外连接(LEFT OUTER JOIN)将“拉链表”和“增量表”关联起来,以便查询两个表之间的相关数据。通过主键字段“主键”来进行关联。
可知,第一查询语句中可以包括查询条件和更新规则。查询条件用于在拉链表中检索目标存量数据。在拉链表中存在目标存量数据的情形下,利用更新规则可以用于更新目标存量数据。第一查询语句中包含了更新拉链表中的历史数据的逻辑,可以减少增量数据插入导致的重复数据、数据冲突等问题,用于实现拉链化。
在可选的实施例中,查询条件可以包括第一查询条件和第二查询条件。对应地,对应地,如图3所示,所述查找所述拉链表中的目标存量数据可以包括:
步骤S300,根据第一查询条件,确定所述拉链表中的最新历史数据。
步骤S302,在所述最新历史数据存在的情形下,根据第二查询条件确定所述目标存量数据。
第一查询条件可以是查询存量数据的“end_date”字段值,有助于快速确定拉链表中需要更新的历史数据。具体地,第一查询条件可以被配置为“end_date=9999-12-31”。如果拉链表中有满足第一查询条件的存量数据,根据其end_dat e字段值的特殊性,可以确定该存量数据为最新的历史数据。如果没有满足第一查询条件的存量数据,说明拉链表中没有目标存量数据,不需要对拉链表的存量数据做修改。
在实际应用中,在增量表中存在与拉链表对应的增量数据时,需要将增量数据插入拉链表中,此时为了防止数据冲突,会对拉链表中的历史数据end_da te字段做修改。相反地,如果没有相应的增量数据,拉链表中的历史数据不需要修改。
因此,在找到最新历史数据的情形下,还需要通过第二查询条件进行二次判断,才能确定最新历史数据是否需要修改。通过细化查询条件,将查询条件分为第一查询条件和第二查询条件,通过两个判断步骤确定目标存量数据,提高查询结果的准确性和可靠性。
在可选的实施例中,如图4所示,步骤S302可以包括:
步骤S400,根据所述第二查询条件,查询所述增量表;其中,所述第二查询条件用于判断所述增量表中是否存在和所述拉链表对应的增量数据。
步骤S402,在所述增量表中存在和所述拉链表对应的增量数据的情形下,将所述最新历史数据确定为所述目标存量数据。
第二查询条件用来确定增量表中是否有对应的增量数据。示例性地,第二查询条件可以被配置为“n2.主键IS NOT NULL”,继而确定是否需要对拉链表的历史数据做修改。如果增量表中存在相应的增量数据,可以将最新历史数据确定为目标存量数据。如果增量表中不存在相应的增量数据,说明拉链表中的历史数据不需要修改。
在本实施例中,通过设置第二查询条件,判断增量表中是否存在对应的增量数据,能够准确地判断查找到的最新历史数据是否需要修改,从而确定目标存量数据,降低错误修改的概率,提高拉链表的稳定性、可靠性。
在可选的实施例中,在所述目标存量数据存在的情形下,对所述目标存量数据进行更新,包括:
根据所述更新规则,对所述目标存量数据的结束日期进行更新;
其中,所述更新规则是根据所述增量数据的开始日期设置的。
更新规则可以用于更新目标存量数据的结束日期,即end_date字段,也即有效期截止时间,从而避免数据冲突。例如,在表8中,将Alice的第三行数据中的end_date值按更新规则更新为第四行数据start_date的前一天。
更新规则可以根据实际需求设置,例如增量数据的开始日期的前一天、前一周、前一个月等。示例性地,更新规则可以被配置为'<%=log_date%>-1',表示将日期更新为当前日期的前一天。
在本实施例中,在满足查询条件的情况下找出目标存量数据,根据更新规则更新目标存量数据的有效期截止时间,可以有效减少数据冲突、实现拉链化逻辑、提高拉链表的稳定性和可靠性。
步骤S110,根据所述拉链表信息、第一查询语句及增量信息,生成目标S QL语句;其中,所述目标SQL语句用于:将所述增量数据添加到所述拉链表中,并对所述目标存量数据的结束日期进行更新以记录历史数据变化。
如前文所述,拉链表信息是需要插入增量数据的拉链表的相关信息,可以包括拉链表表名、主键或标识列、数据字段、版本号等数据。
增量信息可以包括增量表的相关信息、增量数据的查询逻辑等等。
第一查询语句中包含了查询和修改目标存量数据的逻辑。
根据拉链表信息、第一查询语句及增量信息,生成目标SQL语句。
目标SQL语句示例如下:
目标SQL语句可以包括从增量信息中获取的增量数据的查询逻辑,以及从拉链表信息和增量信息中获得拉链表历史数据修改逻辑。因此,目标SQL语句可以用于将增量数据的查询结果写入拉链表中,并对拉链表中的目标存量数据进行更新以记录历史数据的变化,从而完成拉链化,实现拉链表数据的生产。
在本实施例中,通过合并拉链表信息、第一查询语句、增量信息,生成目标SQL语句,所述目标SQL语句用于拉链表的增量更新和拉链表历史数据变化记录。该目标SQL语句执行后,可以得到最新的拉链表数据,完成拉链表数据生产。
目标SQL语句的生成方案有多种,下面提供一个示例性方案。
在可选的实施例中,如图5所示,步骤S110可以包括:
步骤S500,对所述第一查询语句和所述增量信息进行合并,以得到第二查询语句。
步骤S502,对所述拉链表信息和所述第二查询语句合并,以得到所述目标SQL语句。
先将第一查询语句和增量信息合并,使得第二查询语句中可以包含增量数据的查询逻辑和拉链表历史数据修改逻辑,得到拉链表数据生产所需的全部逻辑。
在将拉链表信息和第二查询语句合并,得到目标SQL语句。在执行时,可以将增量数据的查询结果写入拉链表中,并对拉链表中的目标存量数据进行更新以记录历史数据的变化。
在本实施例中,先合并第一查询语句和增量信息得到第二查询语句,再合并拉链表信息和第二查询语句得到目标SQL语句,可以使拉链化SQL语句业务逻辑简单、理解成本低。
为了使得本申请更加容易理解,以下结合图6~图8提供一个示例性应用。
S11,获取初始SQL语句。
S12,对原始SQL进行解析,生成抽象语法树,抽象语法树包括CatalogTa ble部分和Query部分。
其中,CatalogTable部分为抽象语法树中的目录表节点,Query部分为抽象语法树中的查询节点。
S13,从CatalogTable部分获取拉链表表名。
S14,从Query部分获取增量表表名。
S15,基于通用的拉链表存量查询逻辑,生成查询拉链表存量数据的SQL(第一查询语句),同时对命中条件的拉链表数据更新其“有效期截止时间”。
S16,将查询拉链表存量数据的SQL(第一查询语句)和Query部分中的查询增量数据的SQL(增量信息)合并,生成需要拉链化的完整查询SQL(第二查询语句)。
S17,把CatalogTable部分(拉链表信息)和生成最新的拉链化后的数据的SQL(第二查询语句)合并,生成最终的目标SQL语句。
在该示例性应用中,(1)可以根据初始SQL语句自动生成拉链表的生产逻辑,可以在拉链表中添加增量数据,并完成对历史数据有效期截止时间的更新。即,在开发过程中只需要关注增量数据就可以实现拉链表数据生产,不需要额外关注拉链表本身的历史数据,可以有效减少开发成本、降低开发复杂度、缓解开发时的人为失误概率;(2)通过开发SQL化的算法,支持拉链表的生产,且生产全部通过SQL的形式;(3)简化SQL,开发拉链表时,仅需要关注增量数据,不需要额外关注拉链表本身的历史数据;(4)通过自动化算法,自动生成拉链表的生产逻辑,减少开发人员对拉链表这项技术本身的学习成本;(5)优化拉链表生成算法,有效减少开发成本、降低开发复杂度、避免开发时的人为失误概率;(6)如示例,代码量由16行优化为5行,代码效率提升68.75%。
实施例二
图9示意性示出了根据本申请实施例二的拉链表的数据处理装置的框图,该装置可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本申请实施例。本申请实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例中各程序模块的功能。如图9所示,该装置9000可以包括:第一获取模块9100,第二获取模块9200,第三获取模块9300,第四获取模块9400,第一生成模块9500,第二生成模块9600,其中:
第一获取模块9100,用于获取初始SQL语句,所述初始SQL语句用于将增量表中的增量数据更新到拉链表中;
第二获取模块9200,用于根据所述初始SQL语句,获取拉链表信息和增量信息;
第三获取模块9300,用于根据所述拉链表信息获取拉链表表名;
第四获取模块9400,用于根据所述增量信息获取增量表表名;
第一生成模块9500,用于根据所述拉链表表名和所述增量表表名,生成第一查询语句,所述第一查询语句用于查询所述拉链表的目标存量数据;
第二生成模块9600,用于根据所述拉链表信息、第一查询语句及增量信息,生成目标SQL语句;
其中,所述目标SQL语句用于:将所述增量数据添加到所述拉链表中,并对所述目标存量数据的结束日期进行更新以记录历史数据变化。
作为可选的实施例,所述第二获取模块9200还用于:
解析所述初始SQL语句,获取抽象语法树,所述抽象语法树包括目录表节点和查询节点;
根据所述目录表节点的内容,确定所述拉链表信息;
根据所述查询节点的内容,确定所述增量信息。
作为可选的实施例,所述第二生成模块9600,还用于:
对所述第一查询语句和所述增量信息进行合并,以得到第二查询语句;
对所述拉链表信息和所述第二查询语句合并,以得到所述目标SQL语句。
作为可选的实施例,所述第一生成模块9500,还用于:
根据所述拉链表表名、增量表表名及预先规范的拉链表存量数据查询逻辑,生成所述第一查询语句,所述第一查询语句包括查询条件和更新规则;
其中,所述查询条件用于:查找所述拉链表中的目标存量数据;
所述更新规则用于:在所述目标存量数据存在的情形下,对所述目标存量数据进行更新。
作为可选的实施例,所述查询条件包括第一查询条件和第二查询条件;
对应地,所述查找所述拉链表中的目标存量数据,包括:
根据第一查询条件,确定所述拉链表中的最新历史数据;
在所述最新历史数据存在的情形下,根据第二查询条件确定所述目标存量数据。
作为可选的实施例,在所述最新历史数据存在的情形下,根据第二查询条件确定所述目标存量数据,包括:
根据所述第二查询条件,查询所述增量表;其中,所述第二查询条件用于判断所述增量表中是否存在和所述拉链表对应的增量数据;
在所述增量表中存在和所述拉链表对应的增量数据的情形下,将所述最新历史数据确定为所述目标存量数据。
作为可选的实施例,在所述目标存量数据存在的情形下,对所述目标存量数据进行更新,包括:
根据所述更新规则,对所述目标存量数据的结束日期进行更新;
其中,所述更新规则根据所述增量数据的创建日期设置。
实施例三
图10示意性示出了根据本申请实施例三的适于实现拉链表的数据处理方法的计算机设备10000的硬件架构示意图。在一些实施例中,计算机设备10000可以是智能手机、平板电脑、个人电脑、工作台、数字助理、机顶盒、机器人等终端设备。在另一些实施例中,计算机设备10000可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或多个服务器所组成的服务器集群)等。如图9所示,所述计算机设备10000包括但不限于:可通过系统总线相互通信链接存储器10010、处理器10020、网络接口10030。其中:
存储器10010至少包括一种类型的计算机可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(如,SD或DX存储器)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器10010可以是计算机设备10000的内部存储模块,例如该计算机设备10000的硬盘或内存。在另一些实施例中,存储器10010也可以是计算机设备10000的外部存储设备,例如该计算机设备10000上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器10010还可以既包括计算机设备10000的内部存储模块也包括其外部存储设备。本实施例中,存储器10010通常用于存储安装于计算机设备10000的操作系统和各类应用软件,例如拉链表的数据处理方法的程序代码等。此外,存储器10010还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器10020在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他芯片。该处理器10020通常用于控制计算机设备10000的总体操作,例如执行与计算机设备10000进行数据交互或者通信相关的控制和处理等。本实施例中,处理器10020用于运行存储器10010中存储的程序代码或者处理数据。
网络接口10030可包括无线网络接口或有线网络接口,该网络接口10030通常用于在计算机设备10000与其他计算机设备之间建立通信链接。例如,网络接口10030用于通过网络将计算机设备10000与外部终端相连,在计算机设备10000与外部终端之间建立数据传输通道和通信链接等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobile communication,简称为GSM)、宽带码分多址(WidebandCode Divi sion Multiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetoo th)、Wi-Fi等无线或有线网络。
需要指出的是,图9仅示出了具有部件10010-10030的计算机设备,但是应该理解的是,并不要求实施所有示出的部件,可以替代地实施更多或者更少的部件。
在本实施例中,存储于存储器10010中的拉链表的数据处理方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(如处理器10020)所执行,以完成本申请实施例。
实施例四
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,其中,计算机程序被处理器执行时实现实施例中的拉链表的数据处理方法的步骤。
本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEP ROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例中拉链表的数据处理方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算机设备来实现,它们可以集中在单个的计算机设备上,或者分布在多个计算机设备所组成的网络上,可选地,它们可以用计算机设备可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算机设备来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
需要说明的是,以上仅为本申请的优选实施例,并非因此限制本申请的专利保护范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (10)
1.一种拉链表的数据处理方法,其特征在于,所述方法包括:
获取初始SQL语句,所述初始SQL语句用于将增量表中的增量数据更新到拉链表中;
根据所述初始SQL语句,获取拉链表信息和增量信息;
根据所述拉链表信息获取拉链表表名;
根据所述增量信息获取增量表表名;
根据所述拉链表表名和所述增量表表名,生成第一查询语句,所述第一查询语句用于查询所述拉链表的目标存量数据;
根据所述拉链表信息、第一查询语句及增量信息,生成目标SQL语句;
其中,所述目标SQL语句用于:将所述增量数据添加到所述拉链表中,并对所述目标存量数据的结束日期进行更新以记录历史数据变化。
2.根据权利要求1所述的方法,其特征在于,根据所述初始语句获取拉链表信息和增量信息,包括:
解析所述初始SQL语句,获取抽象语法树,所述抽象语法树包括目录表节点和查询节点;
根据所述目录表节点的内容,确定所述拉链表信息;
根据所述查询节点的内容,确定所述增量信息。
3.根据权利要求1所述的方法,其特征在于,根据所述拉链表信息、第一查询语句及增量信息,生成目标SQL语句,包括:
对所述第一查询语句和所述增量信息进行合并,以得到第二查询语句;
对所述拉链表信息和所述第二查询语句合并,以得到所述目标SQL语句。
4.根据权利要求1~3任意一项所述的方法,其特征在于,根据所述拉链表表名和所述增量表表名,生成第一查询语句,包括:
根据所述拉链表表名、增量表表名及预先规范的拉链表存量数据查询逻辑,生成所述第一查询语句,所述第一查询语句包括查询条件和更新规则;
其中,所述查询条件用于:查找所述拉链表中的目标存量数据;
所述更新规则用于:在所述目标存量数据存在的情形下,对所述目标存量数据进行更新。
5.根据权利要求4所述的方法,其特征在于,所述查询条件包括第一查询条件和第二查询条件;
对应地,所述查找所述拉链表中的目标存量数据,包括:
根据第一查询条件,确定所述拉链表中的最新历史数据;
在所述最新历史数据存在的情形下,根据第二查询条件确定所述目标存量数据。
6.根据权利要求5所述的方法,其特征在于,在所述最新历史数据存在的情形下,根据第二查询条件确定所述目标存量数据,包括:
根据所述第二查询条件,查询所述增量表;其中,所述第二查询条件用于判断所述增量表中是否存在和所述拉链表对应的增量数据;
在所述增量表中存在和所述拉链表对应的增量数据的情形下,将所述最新历史数据确定为所述目标存量数据。
7.根据权利要求4所述的方法,其特征在于,在所述目标存量数据存在的情形下,对所述目标存量数据进行更新,包括:
根据所述更新规则,对所述目标存量数据的结束日期进行更新;
其中,所述更新规则是根据所述增量数据的开始日期设置的。
8.一种拉链表的数据处理装置,其特征在于,所述装置包括:
第一获取模块,用于获取初始SQL语句,所述初始SQL语句用于将增量表中的增量数据更新到拉链表中;
第二获取模块,用于根据所述初始SQL语句,获取拉链表信息和增量信息;
第三获取模块,用于根据所述拉链表信息获取拉链表表名;
第四获取模块,用于根据所述增量信息获取增量表表名;
第一生成模块,用于根据所述拉链表表名和所述增量表表名,生成第一查询语句,所述第一查询语句用于查询所述拉链表的目标存量数据;
第二生成模块,用于根据所述拉链表信息、第一查询语句及增量信息,生成目标SQL语句;
其中,所述目标SQL语句用于:将所述增量数据添加到所述拉链表中,并对所述目标存量数据的结束日期进行更新以记录历史数据变化。
9.一种计算机设备,其特征在于,包括:
至少一个处理器;及
与所述至少一个处理器通信连接的存储器;其中:
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机指令,所述计算机指令被处理器执行时实现如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311197313.6A CN117149775A (zh) | 2023-09-15 | 2023-09-15 | 拉链表的数据处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311197313.6A CN117149775A (zh) | 2023-09-15 | 2023-09-15 | 拉链表的数据处理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117149775A true CN117149775A (zh) | 2023-12-01 |
Family
ID=88900659
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311197313.6A Pending CN117149775A (zh) | 2023-09-15 | 2023-09-15 | 拉链表的数据处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117149775A (zh) |
-
2023
- 2023-09-15 CN CN202311197313.6A patent/CN117149775A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110291517B (zh) | 图数据库中的查询语言互操作性 | |
US9477786B2 (en) | System for metadata management | |
CN110222236B (zh) | Xml报文模板的生成及更新方法及其系统 | |
Karnitis et al. | Migration of relational database to document-oriented database: structure denormalization and data transformation | |
CN110647579A (zh) | 数据同步方法及装置、计算机设备与可读介质 | |
US7921330B2 (en) | Data migration manager | |
CN106874281B (zh) | 实现数据库读写分离的方法和装置 | |
CN103514223A (zh) | 一种数据仓库数据同步方法和系统 | |
CN110442585B (zh) | 数据更新方法、数据更新装置、计算机设备及存储介质 | |
CN115543402B (zh) | 一种基于代码提交的软件知识图谱增量更新方法 | |
Brahmia et al. | Schema versioning in conventional and emerging databases | |
CN114860727A (zh) | 拉链表更新方法及装置 | |
CN116126950A (zh) | 实时物化视图系统和方法 | |
CN115329011A (zh) | 数据模型的构建方法、数据查询的方法、装置及存储介质 | |
CN111460000B (zh) | 一种基于关系型数据库的回溯数据查询方法及系统 | |
US11868362B1 (en) | Metadata extraction from big data sources | |
CN114816387B (zh) | 实体类生成方法及装置 | |
CN116501938A (zh) | 数据采集方法、装置、设备及存储介质 | |
US20050114404A1 (en) | Database table version upload | |
CN113326401B (zh) | 字段血缘生成方法及系统 | |
CN117149775A (zh) | 拉链表的数据处理方法和装置 | |
US20230123555A1 (en) | Systems and methods for translation comments flowback | |
CN112817931B (zh) | 一种增量版本文件的生成方法及装置 | |
CN113868138A (zh) | 测试数据的获取方法、系统、设备及存储介质 | |
CN108984719B (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 |