SQL脚本元数据的更新方法、装置及系统.pdf

上传人:1****2 文档编号:1036341 上传时间:2018-03-27 格式:PDF 页数:11 大小:426.27KB
返回 下载 相关 举报
摘要
申请专利号:

CN201010239660.7

申请日:

2010.07.28

公开号:

CN102339298A

公开日:

2012.02.01

当前法律状态:

驳回

有效性:

无权

法律详情:

发明专利申请公布后的驳回IPC(主分类):G06F 17/30申请公布日:20120201|||实质审查的生效IPC(主分类):G06F 17/30申请日:20100728|||公开

IPC分类号:

G06F17/30

主分类号:

G06F17/30

申请人:

中国移动通信集团公司; 广州石竹计算机软件有限公司

发明人:

何鸿凌; 陈仲亮; 魏春辉; 李政; 陶涛; 林旭; 薛勇

地址:

100032 北京市西城区金融大街29号

优先权:

专利代理机构:

北京中誉威圣知识产权代理有限公司 11279

代理人:

丛芳;彭晓玲

PDF下载: PDF下载
内容摘要

本发明提供了一种SQL脚本元数据的更新方法、装置及系统,其中,该更新方法包括:解析程序块中包含的SQL脚本,获取元数据;判断SQL脚本与元数据库已记录SQL脚本是否为同一脚本;在判定为不同脚本时,将元数据更新至元数据库。本发明避免了现有技术中在元数据入库时以对象命名进行匹配而导致更新效率不高的不足,提升更新效率。

权利要求书

1: 一种 SQL 脚本元数据的更新方法, 其特征在于, 包括 : 解析程序块中包含的 SQL 脚本, 获取元数据 ; 判断所述 SQL 脚本与元数据库已记录 SQL 脚本是否为同一脚本 ; 在判定为不同脚本时, 将所述元数据更新至所述元数据库。
2: 根据权利要求 1 所述的 SQL 脚本元数据的更新方法, 其特征在于, 所述判断所述 SQL 脚本与元数据库已记录 SQL 脚本是否为同一脚本的步骤包括 : 判断所述 SQL 脚本与元数据库已记录 SQL 脚本的逻辑或字段级依赖关系是否相同, 其 中, 所述逻辑包括 SQL 脚本访问的数据对象及操作逻辑, 所述操作逻辑包括投影操作、 连接 操作、 选择操作、 交并差操作、 分组操作及排序操作中的至少一个, 所述逻辑或字段级依赖 关系相同时表征为同一脚本。
3: 根据权利要求 1 或 2 所述的 SQL 脚本元数据的更新方法, 其特征在于, 所述解析程序 块中包含的 SQL 脚本, 获取元数据的步骤包括 : 持续从 ETL 和数据处理过程每次运行所输出的运行日志中提取所述 SQL 脚本, 得到所 述元数据。
4: 根据权利要求 3 所述的 SQL 脚本元数据的更新方法, 其特征在于, 在所述判断所述 SQL 脚本与元数据库已记录 SQL 脚本的逻辑或字段级依赖关系是否相同的步骤之前还包 括: 根据所述运行日志中记载的修改信息, 判断所述 SQL 脚本是否被修改 ; 在判定被修改时, 将所述元数据更新至所述元数据库, 并覆盖所述 SQL 脚本修改前的 元数据 ; 在判定未被修改时, 执行所述判断操作。
5: 根据权利要求 4 所述的 SQL 脚本元数据的更新方法, 其特征在于, 在所述在判定未被 修改后还包括 : 判断所述元数据库中是否存在所述 SQL 脚本的元数据 ; 在判定不存在所述 SQL 脚本的元数据时, 将所述元数据更新至所述元数据库。
6: 根据权利要求 1 或 2 所述的 SQL 脚本元数据的更新方法, 其特征在于, 其应用于数据 仓库中。
7: 一种 SQL 脚本元数据的更新装置, 其特征在于, 包括 : 解析模块, 用于解析程序块中包含的 SQL 脚本, 获取元数据 ; 判断模块, 用于判断所述 SQL 脚本与元数据库已记录 SQL 脚本是否为同一脚本 ; 处理模块, 用于在判定为不同脚本时, 将所述元数据更新至所述元数据库。
8: 根据权利要求 7 所述的 SQL 脚本元数据的更新装置, 其特征在于, 所述解析模块包 括: 提取子模块, 用于持续从 ETL 和数据处理过程每次运行所输出的运行日志中提取所述 SQL 脚本 ; 解析子模块, 根据 SQL 脚本解析得到所述元数据。
9: 根据权利要求 8 所述的 SQL 脚本元数据的更新装置, 其特征在于, 还包括 : 修改处理模块, 用于根据所述运行日志中记载的修改信息, 判断所述 SQL 脚本是否被 修改 ; 并在判定被修改时, 将所述元数据更新至所述元数据库, 并覆盖所述 SQL 脚本修改前 2 的元数据 ; 以及判定未被修改时, 控制所述判断模块进行操作 ; 分析模块, 用于判断所述元数据库中是否存在所述 SQL 脚本的元数据 ; 以及在判定不 存在所述 SQL 脚本的元数据时, 将所述元数据更新至所述元数据库。
10: 根据上述权利要求 7-9 中任一项所述的 SQL 脚本元数据的更新装, 其特征在于, 判 断模块包括 : 判断子模块, 用于判断所述 SQL 脚本与元数据库已记录 SQL 脚本的逻辑或字段级依赖 关系是否相同, 其中, 所述逻辑包括 SQL 脚本访问的数据对象及操作逻辑, 所述操作逻辑包 括投影操作、 连接操作、 选择操作、 交并差操作、 分组操作及排序操作中的至少一个, 所述逻 辑或字段级依赖关系相同时表征为同一脚本。
11: 一种 SQL 脚本元数据的更新系统, 其特征在于, 包括 : 元数据库, 用于记录 SQL 脚本的元数据及所述 SQL 脚本的修改信息 ; SQL 脚本元数据的更新装置, 用于解析 SQL 程序块中包含的 SQL 脚本获取元数据 ; 并判 断所述 SQL 脚本与元数据库已记录 SQL 脚本是否为同一脚本 ; 以及在判定为不同脚本时, 将 所述元数据更新至所述元数据库。

说明书


SQL 脚本元数据的更新方法、 装置及系统

    【技术领域】
     本发明涉及元数据管理领域, 具体涉及一种 SQL 脚本元数据的更新方法、 装置及系统。 背景技术 数据仓库领域的元数据管理需要确保元数据的及时更新, 以反映数据仓库系统的 最新情况。当抽取、 转换、 装载 ETL(Extract, transform, load, 简称 ETL) 和数据处理过程 的程序块发生修改后, 就需要更新该程序块相应的 SQL 脚本元数据。元数据更新过程可划 分为两个环节 : 首先是一个自动解析的过程, 解析该程序块中包含的 SQL 脚本, 获取其数据 流语义并转换为元数据 ; 然后是一个元数据入库的过程, 将所生成的元数据按一定的规则 写入元数据存储库。
     第一个环节的自动解析过程通过三个步骤来完成, 步骤一 : 直接从 ETL 和数据处 理过程的程序代码中提取、 从数据库日志中提取或者从 ETL 和数据处理过程的运行日志中
     提取 ETL 和数据处理过程的 SQL 脚本 ; 步骤二 : 利用编译技术对这些 SQL 脚本进行词法、 语法和语义分析, 生成抽象语法树, 以此作为语义分析的基础 ; 步骤三 : 对 SQL 脚本的抽象 语法树进行语义分析, 获取其数据流语义信息并转换成元数据。第二个环节是 SQL 脚本元 数据入库过程, 每个元数据对象入库时, 需要根据对象命名对元数据存储库中的对象进行 匹配 ; 如果找不到相同命名的对象, 则认为这是一个新增的对象, 将其添加到元数据存储库 中; 如果找到相同命名的对象, 则认为这是同一个对象, 这时需要考虑采用积极策略还是保 守策略来处理, 其中, 积极策略是以新生成的对象的所有属性值覆盖元数据存储库中的老 对象的属性值, 以新对象的关联关系替换老对象的关联关系, 保守策略则不改动老对象的 属性值和关联关系, 只填写老对象的空属性值并追加关联关系。
     当新增程序块第一次运行时, 元数据存储库中并没有该程序块的 SQL 脚本元数 据。 该程序块所输出的 SQL 脚本经过解析处理后生成元数据, 并添加到元数据存储库中。 当 这些程序块重复运行时, 如果继续解析处理程序块运行所输出的 SQL 脚本, 则获取的元数 据在入库处理时就存在如何与存储库中已存在的元数据合并的问题。由于 SQL 脚本的元数 据对象并没有确定的命名方式可以对其进行唯一标识, 利用对象命名与存储库中已存在的 对象进行匹配是很不可靠的, 不能据此找到同一个 SQL 脚本元数据对象, 导致更新效率不 高。 如果程序块发生修改, 修改后的程序块需要进行元数据更新, 这些元数据入库时同样遇 到如何与元数据存储库中已有元数据合并的问题。 此外, 如果程序块存在多条运行路径, 当 次运行就只能输出了其中一条运行路径的 SQL 脚本, 使得解析这些 SQL 脚本所生成的元数 据并不能完整描述整个程序块中的 SQL 脚本数据流语义。
     现有 SQL 脚本元数据更新方案存在如下不足 :
     (1) 在元数据入库时, 以对象命名进行匹配, 进而决定元数据是否入库, 难以确保 当 ETL 和数据处理过程程序块重复运行或者发生修改时元数据更新的质量, 更新效率不 高;(2) 当次运行只能输出了一条运行路径的 SQL 脚本记录在运行日志中, 且以对象 命名进行匹配, 导致根据运行日志获取 SQL 脚本时, 在程序块中存在分支、 循环的情况下很 难确保元数据更新的质量, 更新效率不高。 发明内容 本发明的第一目的是提出一种效率高的 SQL 脚本元数据的更新方法。
     本发明的第二目的是提出一种效率高的 SQL 脚本元数据的更新装置。
     本发明的第三目的是提出一种效率高的 SQL 脚本元数据的更新系统。
     为实现上述第一目的, 本发明提供了一种 SQL 脚本元数据的更新方法, 包括 : 解析 程序块中包含的 SQL 脚本, 获取元数据 ; 判断 SQL 脚本与元数据库已记录 SQL 脚本是否为同 一脚本 ; 在判定为不同脚本时, 将元数据更新至元数据库。
     为实现上述第二目的, 本发明提供了一种 SQL 脚本元数据的更新装置, 包括 : 解析 模块, 用于解析程序块中包含的 SQL 脚本, 获取元数据 ; 判断模块, 用于判断 SQL 脚本与元数 据库已记录 SQL 脚本是否为同一脚本 ; 处理模块, 用于在判定为不同脚本时, 将元数据更新 至元数据库。
     为实现上述第三目的, 本发明提供了一种 SQL 脚本元数据的更新系统, 包括 : 元数 据库, 用于记录 SQL 脚本的元数据及 SQL 脚本的修改信息 ; SQL 脚本元数据的更新装置, 用 于解析 SQL 程序块中包含的 SQL 脚本获取元数据 ; 并判断 SQL 脚本与元数据库已记录 SQL 脚本是否为同一脚本 ; 以及在判定为不同脚本时, 将元数据更新至元数据库。
     本发明各个实施例中, 在判定是否为同一 SQL 脚本后进行元数据的更新操作, 避 免了现有技术中在元数据入库时以对象命名进行匹配而导致更新效率不高的不足, 提升更 新效率。
     附图说明 附图用来提供对本发明的进一步理解, 并且构成说明书的一部分, 与本发明的实 施例一并用于解释本发明, 并不构成对本发明的限制。在附图中 :
     图 1 为本发明的 SQL 脚本元数据的更新方法的实施例一流程图 ;
     图 2 为本发明的 SQL 脚本元数据的更新方法的实施例二流程图 ;
     图 3 为本发明的 SQL 脚本元数据的更新装置的实施例结构图 ;
     图 4 为本发明的 SQL 脚本元数据的更新系统的实施例结构图。
     具体实施方式
     以下结合附图对本发明的优选实施例进行说明, 应当理解, 此处所描述的优选实 施例仅用于说明和解释本发明, 并不用于限定本发明。
     方法实施例
     图 1 为本发明的 SQL 脚本元数据的更新方法的实施例一流程图。如图 1 所示, 本 实施例包括 :
     步骤 S102 : 解析程序块中包含的 SQL 脚本, 获取元数据 ; 详细参见图 2 步骤 201 的 解释说明 ;步骤 S104 : 判断 SQL 脚本与元数据库已记录 SQL 脚本是否为同一脚本 ; 详细参见 图 2 的解释说明 ;
     步骤 S106 : 在判定为不同脚本时, 将元数据更新至元数据库 ; 详细参见图 2 的解释 说明。
     本实施例通过在判定是否为同一 SQL 脚本后进行元数据的更新操作, 避免了现有 技术中在元数据入库时以对象命名进行匹配而导致效率不高的不足, 提升更新效率。
     图 2 为本发明的 SQL 脚本元数据的更新方法的实施例二流程图。如图 2 所示, 本 实施例包括 :
     步骤 201, 持续从 ETL 和数据处理过程每次运行所输出的运行日志中提取 SQL 脚 本, 获取元数据 ;
     本领域技术人员可以理解, 一般可以通过如下三种方式提取 SQL 脚本 : 直接从 ETL 和数据处理过程的程序代码中提取、 从数据库日志中提取或者从 ETL 和数据处理过程的运 行日志中提取 ; 以下各实施例仅以从 ETL 和数据处理过程的运行日志中提为例进行解释说 明;
     步骤 201 中持续获取 SQL 脚本的元数据有利于实现多路径 SQL 脚本的元数据的完 整性 ; 步骤 202, 根据运行日志中记载的修改信息, 判断 SQL 脚本是否被修改, 在判定被 修改时, 将元数据更新至元数据库, 并覆盖 SQL 脚本修改前的元数据, 也就是说, 在判定被 修改时, 采用全量更新的方式, 即以一个程序块为单位, 将元数据库中该程序块的元数据全 部替换为解析该程序块的 SQL 脚本新生成的元数据, 在判定未被修改时, 执行步骤 203- 步 骤 205 的操作 ; 具体解释如下 :
     首先, 预先设置脚本程序在运行日志中写入脚本程序的修改信息, 如版本号和脚 本程序文件的最近修改时间 ; 具体操作时, 如果运行日志采用文本文件存储, 则该修改信息 可以写在文件头部分 ;
     其次, 在处理完一个运行日志并将所生成的元数据写入元数据库时, 运行日志中 所记录的修改信息也一起写入元数据库中, 具体操作时, 在元数据库中, 版本号和最近修改 时间可以作为脚本程序对象的两个属性进行存储 ;
     再次, 准备将生成的元数据写入元数据库时, 将当前处理的运行日志所记录的脚 本程序版本号和最近修改时间, 与元数据库中记录的对应脚本程序的版本号和最近修改时 间进行比较 ; 如果两者一致, 说明脚本程序在前后两次元数据自动获取之间没有做过修改, 需要采用增量入库方式处理 ( 详细参见步骤 205) ; 如果两者不一致, 说明脚本程序中前后 两次元数据自动获取之间做过修改, 需要采用全量入库方式处理, 即清除该脚本程序在元 数据库中的元数据, 然后将自动获取的元数据全量入库 ;
     步骤 203, 判断元数据库中是否存在该 SQL 脚本的元数据, 具体可以采用步骤 205 中对于同一条 SQL 脚本的识别方法来判断 ;
     步骤 204, 在判定不存在 SQL 脚本的元数据时, 将元数据更新至元数据库 ;
     上述步骤 203 及 204 主要用于说明, 在自动获取某个脚本程序的元数据时, 如果元 数据库中没有该脚本程序的元数据, 则直接将自动获取的元数据全量入库, 无需考虑元数 据合并的问题 ;
     步骤 205, 判断 SQL 脚本与元数据库已记录 SQL 脚本的逻辑或字段级依赖关系是否 相同, 其中, 逻辑包括 SQL 脚本访问的数据对象及操作逻辑, 操作逻辑包括投影操作、 连接 操作、 选择操作、 交并差操作、 分组操作及排序操作中的至少一个, 该字段级映射关系为 CWM 规范中的一个类, 这个类的类名 : FeatureMap ; 具体解释如下 :
     首先, 脚本程序在前后两次自动获取元数据之间没有做过修改, 需要判断脚本是 否为同一条, 且在判定为不同时将后面获取的元数据入库, 本实施例中以 SQL 脚本的逻辑 或字段级依赖关系作为是否为同一条 SQL 脚本的判断标准, 即: 当两条 SQL 脚本的逻辑相同 或者结构相同时, 被识别为同一条 SQL 脚本, 其中, SQL 脚本的逻辑相同是指这些 SQL 脚本 所操作的数据对象完全相同以及对这些 SQL 脚本访问的数据对象的操作逻辑一致, 如下面 SQL 脚本的逻辑相同 :
     select ta.fl, ta.f2 from ta where ta.f3 = 1000 ;
     SELECT a.f1, a.f2 FROM ta a WHERE a.f3 = 1000 ;
     select(ta.f1)a, ((ta.f2))b from ta where ta.f3 = 1000 ;
     下 面 SQL 脚 本 也 是 逻 辑 相 同 的, 因 为 SQL 脚 本 中 的 ta_200905、 ta_200906、 ta_200907 在元数据中指的是同一个 SQL 脚本访问的数据对象 : select a.f1, a.f2from ta_200905a ;
     select a.f1, a.f2from ta_200906a ;
     select a.f1, a.f2from ta_200907a ;
     SQL 脚本的结构相同是指这些 SQL 脚本具有完全相同的字段级依赖关系, 例如 :
     select ta.f1, ta.f2from ta where ta.f3 = 1000 ;
     select ta.f1, a.f2from ta where ta.f4in(100, 500, 800)order by ta.f1 ;
     具体操作时, 满足字段级依赖关系但投影逻辑、 where 子句、 order by 子句或者 group by 子句等存在差异的 SQL 语句也可以视为结构相同, 如:
     select a.f1+a.f2, a.f1*a.f2from ta a ;
     select a.f1-a.f2, a.f1/a.f2from ta a ;
     然而, 下面这些 SQL 脚本具有不同的字段级数据对象投影关系, 他们之间的字段 级依赖分析结果是不一样的, 故二者是结构不相同的 SQL 脚本 :
     select a.f1, a.f2 from ta a ;
     select a.f1+a.f2, a.f1*a.f2from ta a ;
     步骤 206. 在判定逻辑或字段级依赖关系不同时, 将元数据更新至元数据库, 也就 是说, 当我们增量处理一个脚本程序的元数据时, 如果脚本程序中某条 SQL 脚本的元数据 已经在元数据库中存在, 则不需要将这条 SQL 脚本的元数据写入元数据库, 或者在写入时 覆盖这条 SQL 脚本对应的已经存在的元数据, 如果脚本程序中某条 SQL 脚本的元数据在元 数据库中不存在, 则直接将这条 SQL 脚本的元数据写入元数据库中。
     上述步骤 205 及 206 主要用于解释在自动获取某个脚本程序的元数据时, 元数据 库中已经保存了该脚本程序上次自动获取的元数据, 而且脚本程序在前后两次自动获取元 数据之间没有做过修改的情况下采用增量更新元数据 ( 具体包括识别同一程序块内的同 一 SQL 脚本的流程 ) 的流程。本领域技术人员可以理解 : 上述方法不仅可以使用于数据仓 库, 也可以应用于其他环境下的 SQL 脚本元数据的更新操作。
     本实施例通过根据 SQL 脚本的逻辑或字段级依赖关系判断是否为同一 SQL 脚本, 进而进行元数据的更新操作, 避免了现有技术中在元数据入库时以对象命名进行匹配而导 致效率不高的不足, 提升更新效率 ; 同时, 通过持续处理 ETL 和数据处理过程每次运行所输 出的运行日志, 将每次处理所生成的元数据全量或增量写入元数据存储库, 实现将每条运 行路径的 SQL 脚本元数据整合在一起, 形成整个 ETL 和数据处理过程程序块的 SQL 脚本元 数据, 可以有效解决基于运行日志进行 SQL 脚本元数据自动获取时常见的多路径问题, 避 免自动获取的元数据只能覆盖 ETL 和数据处理过程的某条运行路径, 提升 SQL 脚本元数据 的自动获取质量。
     装置实施例
     图 3 为本发明的 SQL 脚本元数据的更新装置的实施例结构图。图 1 及 2 所示的各 方法实施例均可适用于本实施例。本实施例包括 : 解析模块 31, 用于解析程序块中包含的 SQL 脚本, 获取元数据 ; 判断模块 32, 用于判断 SQL 脚本与元数据库已记录 SQL 脚本是否为 同一脚本 ; 处理模块 33, 用于在判定为不同脚本时, 将元数据更新至元数据库。
     具体操作时, 该装置还可以包括 :
     修改处理模块 34, 用于根据运行日志中记载的修改信息, 判断 SQL 脚本是否被修 改; 并在判定被修改时, 将元数据更新至元数据库, 并覆盖 SQL 脚本修改前的元数据 ; ; 以及 判定未被修改时, 控制判断模块 32 进行操作 ; 分析模块 35, 用于判断元数据库中是否存在 SQL 脚本的元数据 ; 以及在判定不存 在 SQL 脚本的元数据时, 将元数据更新至元数据库, 具体操作时, 该分析模块 35 可以利用判 断模块 32 判断是否属于同一 SQL 脚本的方法进行判断, 详见步骤 203 及 204 的解释说明。
     判断模块 32 可以包括判断子模块 ( 图未示 ), 用于判断 SQL 脚本与元数据库已记 录 SQL 脚本的逻辑或字段级依赖关系是否相同, 其中, 逻辑包括 SQL 脚本访问的数据对象及 操作逻辑, 操作逻辑包括投影操作、 连接操作、 选择操作、 交并差操作、 分组操作及排序操作 中的至少一个, 逻辑或字段级依赖关系相同时表征为同一脚本。
     解析模块 31 可以包括 : 提取子模块 312, 用于持续从 ETL 和数据处理过程每次运 行所输出的运行日志中提取 SQL 脚本 ; 解析子模块 314, 根据 SQL 脚本解析获取元数据。
     本领域技术人员应当可以理解 : 对应于图 2 中的解释说明, 解析模块 31、 判断模块 32、 处理模块 33 即可实现避免现有技术中在元数据入库时以对象命名进行匹配而导致效 率不高的不足, 其他的模块及子模块均为优选实施方式。
     本实施例中, 判断模块 32 通过根据 SQL 脚本的逻辑或字段级依赖关系判断是否为 同一 SQL 脚本, 进而进行元数据的更新操作, 避免了现有技术中以对象命名进行匹配而导 致效率不高的不足, 提升更新效率 ; 同时, 提取子模块 312 通过持续处理 ETL 和数据处理过 程每次运行所输出的运行日志, 处理模块 33、 修改处理模块 34、 分析模块 35 将每次处理所 生成的元数据全量或增量写入元数据存储库, 实现将每条运行路径的 SQL 脚本元数据整合 在一起, 形成整个 ETL 和数据处理过程程序块的 SQL 脚本元数据, 可以有效解决基于运行 日志进行 SQL 脚本元数据自动获取时常见的多路径问题, 避免自动获取的元数据只能覆盖 ETL 和数据处理过程的某条运行路径, 提升 SQL 脚本元数据的自动获取质量。
     系统实施例
     图 4 为本发明的 SQL 脚本元数据的更新系统的实施例结构图。图 1 及 2 所示的各
     方法实施例均可适用于本实施例。 本实施例包括 : 元数据库 42, 用于记录 SQL 脚本的元数据 及 SQL 脚本的修改信息 ; SQL 脚本元数据的更新装置 44, 用于解析 SQL 程序块中包含的 SQL 脚本获取元数据 ; 并判断 SQL 脚本与元数据库已记录 SQL 脚本是否为同一脚本 ; 以及在判 定为不同脚本时, 将元数据更新至元数据库。其中, SQL 脚本元数据的更新装置 44 的详细 说明参见图 3 的解释说明。
     本实施例中, SQL 脚本元数据的更新装置 44 通过根据 SQL 脚本的逻辑或字段级依 赖关系判断是否为同一 SQL 脚本, 进而进行元数据的更新操作, 避免了现有技术中以对象 命名进行匹配而导致效率不高的不足, 提升更新效率 ; 同时, 通过持续处理 ETL 和数据处理 过程每次运行所输出的运行日志, 将每次处理所生成的元数据全量或增量写入元数据存储 库, 实现将每条运行路径的 SQL 脚本元数据整合在一起, 形成整个 ETL 和数据处理过程程序 块的 SQL 脚本元数据, 可以有效解决基于运行日志进行 SQL 脚本元数据自动获取时常见的 多路径问题, 避免自动获取的元数据只能覆盖 ETL 和数据处理过程的某条运行路径, 提升 SQL 脚本元数据的自动获取质量。
     最后应说明的是 : 以上仅为本发明的优选实施例而已, 并不用于限制本发明, 尽管 参照前述实施例对本发明进行了详细的说明, 对于本领域的技术人员来说, 其依然可以对 前述各实施例所记载的技术方案进行修改, 或者对其中部分技术特征进行等同替换。凡在 本发明的精神和原则之内, 所作的任何修改、 等同替换、 改进等, 均应包含在本发明的保护 范围之内。

SQL脚本元数据的更新方法、装置及系统.pdf_第1页
第1页 / 共11页
SQL脚本元数据的更新方法、装置及系统.pdf_第2页
第2页 / 共11页
SQL脚本元数据的更新方法、装置及系统.pdf_第3页
第3页 / 共11页
点击查看更多>>
资源描述

《SQL脚本元数据的更新方法、装置及系统.pdf》由会员分享,可在线阅读,更多相关《SQL脚本元数据的更新方法、装置及系统.pdf(11页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN102339298A43申请公布日20120201CN102339298ACN102339298A21申请号201010239660722申请日20100728G06F17/3020060171申请人中国移动通信集团公司地址100032北京市西城区金融大街29号申请人广州石竹计算机软件有限公司72发明人何鸿凌陈仲亮魏春辉李政陶涛林旭薛勇74专利代理机构北京中誉威圣知识产权代理有限公司11279代理人丛芳彭晓玲54发明名称SQL脚本元数据的更新方法、装置及系统57摘要本发明提供了一种SQL脚本元数据的更新方法、装置及系统,其中,该更新方法包括解析程序块中包含的SQL脚本,获取元。

2、数据;判断SQL脚本与元数据库已记录SQL脚本是否为同一脚本;在判定为不同脚本时,将元数据更新至元数据库。本发明避免了现有技术中在元数据入库时以对象命名进行匹配而导致更新效率不高的不足,提升更新效率。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书6页附图2页CN102339311A1/2页21一种SQL脚本元数据的更新方法,其特征在于,包括解析程序块中包含的SQL脚本,获取元数据;判断所述SQL脚本与元数据库已记录SQL脚本是否为同一脚本;在判定为不同脚本时,将所述元数据更新至所述元数据库。2根据权利要求1所述的SQL脚本元数据的更新方法,其特征在于,所述判。

3、断所述SQL脚本与元数据库已记录SQL脚本是否为同一脚本的步骤包括判断所述SQL脚本与元数据库已记录SQL脚本的逻辑或字段级依赖关系是否相同,其中,所述逻辑包括SQL脚本访问的数据对象及操作逻辑,所述操作逻辑包括投影操作、连接操作、选择操作、交并差操作、分组操作及排序操作中的至少一个,所述逻辑或字段级依赖关系相同时表征为同一脚本。3根据权利要求1或2所述的SQL脚本元数据的更新方法,其特征在于,所述解析程序块中包含的SQL脚本,获取元数据的步骤包括持续从ETL和数据处理过程每次运行所输出的运行日志中提取所述SQL脚本,得到所述元数据。4根据权利要求3所述的SQL脚本元数据的更新方法,其特征在于。

4、,在所述判断所述SQL脚本与元数据库已记录SQL脚本的逻辑或字段级依赖关系是否相同的步骤之前还包括根据所述运行日志中记载的修改信息,判断所述SQL脚本是否被修改;在判定被修改时,将所述元数据更新至所述元数据库,并覆盖所述SQL脚本修改前的元数据;在判定未被修改时,执行所述判断操作。5根据权利要求4所述的SQL脚本元数据的更新方法,其特征在于,在所述在判定未被修改后还包括判断所述元数据库中是否存在所述SQL脚本的元数据;在判定不存在所述SQL脚本的元数据时,将所述元数据更新至所述元数据库。6根据权利要求1或2所述的SQL脚本元数据的更新方法,其特征在于,其应用于数据仓库中。7一种SQL脚本元数据。

5、的更新装置,其特征在于,包括解析模块,用于解析程序块中包含的SQL脚本,获取元数据;判断模块,用于判断所述SQL脚本与元数据库已记录SQL脚本是否为同一脚本;处理模块,用于在判定为不同脚本时,将所述元数据更新至所述元数据库。8根据权利要求7所述的SQL脚本元数据的更新装置,其特征在于,所述解析模块包括提取子模块,用于持续从ETL和数据处理过程每次运行所输出的运行日志中提取所述SQL脚本;解析子模块,根据SQL脚本解析得到所述元数据。9根据权利要求8所述的SQL脚本元数据的更新装置,其特征在于,还包括修改处理模块,用于根据所述运行日志中记载的修改信息,判断所述SQL脚本是否被修改;并在判定被修改。

6、时,将所述元数据更新至所述元数据库,并覆盖所述SQL脚本修改前权利要求书CN102339298ACN102339311A2/2页3的元数据;以及判定未被修改时,控制所述判断模块进行操作;分析模块,用于判断所述元数据库中是否存在所述SQL脚本的元数据;以及在判定不存在所述SQL脚本的元数据时,将所述元数据更新至所述元数据库。10根据上述权利要求79中任一项所述的SQL脚本元数据的更新装,其特征在于,判断模块包括判断子模块,用于判断所述SQL脚本与元数据库已记录SQL脚本的逻辑或字段级依赖关系是否相同,其中,所述逻辑包括SQL脚本访问的数据对象及操作逻辑,所述操作逻辑包括投影操作、连接操作、选择操。

7、作、交并差操作、分组操作及排序操作中的至少一个,所述逻辑或字段级依赖关系相同时表征为同一脚本。11一种SQL脚本元数据的更新系统,其特征在于,包括元数据库,用于记录SQL脚本的元数据及所述SQL脚本的修改信息;SQL脚本元数据的更新装置,用于解析SQL程序块中包含的SQL脚本获取元数据;并判断所述SQL脚本与元数据库已记录SQL脚本是否为同一脚本;以及在判定为不同脚本时,将所述元数据更新至所述元数据库。权利要求书CN102339298ACN102339311A1/6页4SQL脚本元数据的更新方法、装置及系统技术领域0001本发明涉及元数据管理领域,具体涉及一种SQL脚本元数据的更新方法、装置及。

8、系统。背景技术0002数据仓库领域的元数据管理需要确保元数据的及时更新,以反映数据仓库系统的最新情况。当抽取、转换、装载ETLEXTRACT,TRANSFORM,LOAD,简称ETL和数据处理过程的程序块发生修改后,就需要更新该程序块相应的SQL脚本元数据。元数据更新过程可划分为两个环节首先是一个自动解析的过程,解析该程序块中包含的SQL脚本,获取其数据流语义并转换为元数据;然后是一个元数据入库的过程,将所生成的元数据按一定的规则写入元数据存储库。0003第一个环节的自动解析过程通过三个步骤来完成,步骤一直接从ETL和数据处理过程的程序代码中提取、从数据库日志中提取或者从ETL和数据处理过程的。

9、运行日志中提取ETL和数据处理过程的SQL脚本;步骤二利用编译技术对这些SQL脚本进行词法、语法和语义分析,生成抽象语法树,以此作为语义分析的基础;步骤三对SQL脚本的抽象语法树进行语义分析,获取其数据流语义信息并转换成元数据。第二个环节是SQL脚本元数据入库过程,每个元数据对象入库时,需要根据对象命名对元数据存储库中的对象进行匹配;如果找不到相同命名的对象,则认为这是一个新增的对象,将其添加到元数据存储库中;如果找到相同命名的对象,则认为这是同一个对象,这时需要考虑采用积极策略还是保守策略来处理,其中,积极策略是以新生成的对象的所有属性值覆盖元数据存储库中的老对象的属性值,以新对象的关联关系。

10、替换老对象的关联关系,保守策略则不改动老对象的属性值和关联关系,只填写老对象的空属性值并追加关联关系。0004当新增程序块第一次运行时,元数据存储库中并没有该程序块的SQL脚本元数据。该程序块所输出的SQL脚本经过解析处理后生成元数据,并添加到元数据存储库中。当这些程序块重复运行时,如果继续解析处理程序块运行所输出的SQL脚本,则获取的元数据在入库处理时就存在如何与存储库中已存在的元数据合并的问题。由于SQL脚本的元数据对象并没有确定的命名方式可以对其进行唯一标识,利用对象命名与存储库中已存在的对象进行匹配是很不可靠的,不能据此找到同一个SQL脚本元数据对象,导致更新效率不高。如果程序块发生修。

11、改,修改后的程序块需要进行元数据更新,这些元数据入库时同样遇到如何与元数据存储库中已有元数据合并的问题。此外,如果程序块存在多条运行路径,当次运行就只能输出了其中一条运行路径的SQL脚本,使得解析这些SQL脚本所生成的元数据并不能完整描述整个程序块中的SQL脚本数据流语义。0005现有SQL脚本元数据更新方案存在如下不足00061在元数据入库时,以对象命名进行匹配,进而决定元数据是否入库,难以确保当ETL和数据处理过程程序块重复运行或者发生修改时元数据更新的质量,更新效率不高;说明书CN102339298ACN102339311A2/6页500072当次运行只能输出了一条运行路径的SQL脚本记。

12、录在运行日志中,且以对象命名进行匹配,导致根据运行日志获取SQL脚本时,在程序块中存在分支、循环的情况下很难确保元数据更新的质量,更新效率不高。发明内容0008本发明的第一目的是提出一种效率高的SQL脚本元数据的更新方法。0009本发明的第二目的是提出一种效率高的SQL脚本元数据的更新装置。0010本发明的第三目的是提出一种效率高的SQL脚本元数据的更新系统。0011为实现上述第一目的,本发明提供了一种SQL脚本元数据的更新方法,包括解析程序块中包含的SQL脚本,获取元数据;判断SQL脚本与元数据库已记录SQL脚本是否为同一脚本;在判定为不同脚本时,将元数据更新至元数据库。0012为实现上述第。

13、二目的,本发明提供了一种SQL脚本元数据的更新装置,包括解析模块,用于解析程序块中包含的SQL脚本,获取元数据;判断模块,用于判断SQL脚本与元数据库已记录SQL脚本是否为同一脚本;处理模块,用于在判定为不同脚本时,将元数据更新至元数据库。0013为实现上述第三目的,本发明提供了一种SQL脚本元数据的更新系统,包括元数据库,用于记录SQL脚本的元数据及SQL脚本的修改信息;SQL脚本元数据的更新装置,用于解析SQL程序块中包含的SQL脚本获取元数据;并判断SQL脚本与元数据库已记录SQL脚本是否为同一脚本;以及在判定为不同脚本时,将元数据更新至元数据库。0014本发明各个实施例中,在判定是否为。

14、同一SQL脚本后进行元数据的更新操作,避免了现有技术中在元数据入库时以对象命名进行匹配而导致更新效率不高的不足,提升更新效率。附图说明0015附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一并用于解释本发明,并不构成对本发明的限制。在附图中0016图1为本发明的SQL脚本元数据的更新方法的实施例一流程图;0017图2为本发明的SQL脚本元数据的更新方法的实施例二流程图;0018图3为本发明的SQL脚本元数据的更新装置的实施例结构图;0019图4为本发明的SQL脚本元数据的更新系统的实施例结构图。具体实施方式0020以下结合附图对本发明的优选实施例进行说明,应当理解,。

15、此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。0021方法实施例0022图1为本发明的SQL脚本元数据的更新方法的实施例一流程图。如图1所示,本实施例包括0023步骤S102解析程序块中包含的SQL脚本,获取元数据;详细参见图2步骤201的解释说明;说明书CN102339298ACN102339311A3/6页60024步骤S104判断SQL脚本与元数据库已记录SQL脚本是否为同一脚本;详细参见图2的解释说明;0025步骤S106在判定为不同脚本时,将元数据更新至元数据库;详细参见图2的解释说明。0026本实施例通过在判定是否为同一SQL脚本后进行元数据的更新操作,避免了现。

16、有技术中在元数据入库时以对象命名进行匹配而导致效率不高的不足,提升更新效率。0027图2为本发明的SQL脚本元数据的更新方法的实施例二流程图。如图2所示,本实施例包括0028步骤201,持续从ETL和数据处理过程每次运行所输出的运行日志中提取SQL脚本,获取元数据;0029本领域技术人员可以理解,一般可以通过如下三种方式提取SQL脚本直接从ETL和数据处理过程的程序代码中提取、从数据库日志中提取或者从ETL和数据处理过程的运行日志中提取;以下各实施例仅以从ETL和数据处理过程的运行日志中提为例进行解释说明;0030步骤201中持续获取SQL脚本的元数据有利于实现多路径SQL脚本的元数据的完整性。

17、;0031步骤202,根据运行日志中记载的修改信息,判断SQL脚本是否被修改,在判定被修改时,将元数据更新至元数据库,并覆盖SQL脚本修改前的元数据,也就是说,在判定被修改时,采用全量更新的方式,即以一个程序块为单位,将元数据库中该程序块的元数据全部替换为解析该程序块的SQL脚本新生成的元数据,在判定未被修改时,执行步骤203步骤205的操作;具体解释如下0032首先,预先设置脚本程序在运行日志中写入脚本程序的修改信息,如版本号和脚本程序文件的最近修改时间;具体操作时,如果运行日志采用文本文件存储,则该修改信息可以写在文件头部分;0033其次,在处理完一个运行日志并将所生成的元数据写入元数据库。

18、时,运行日志中所记录的修改信息也一起写入元数据库中,具体操作时,在元数据库中,版本号和最近修改时间可以作为脚本程序对象的两个属性进行存储;0034再次,准备将生成的元数据写入元数据库时,将当前处理的运行日志所记录的脚本程序版本号和最近修改时间,与元数据库中记录的对应脚本程序的版本号和最近修改时间进行比较;如果两者一致,说明脚本程序在前后两次元数据自动获取之间没有做过修改,需要采用增量入库方式处理详细参见步骤205;如果两者不一致,说明脚本程序中前后两次元数据自动获取之间做过修改,需要采用全量入库方式处理,即清除该脚本程序在元数据库中的元数据,然后将自动获取的元数据全量入库;0035步骤203,。

19、判断元数据库中是否存在该SQL脚本的元数据,具体可以采用步骤205中对于同一条SQL脚本的识别方法来判断;0036步骤204,在判定不存在SQL脚本的元数据时,将元数据更新至元数据库;0037上述步骤203及204主要用于说明,在自动获取某个脚本程序的元数据时,如果元数据库中没有该脚本程序的元数据,则直接将自动获取的元数据全量入库,无需考虑元数据合并的问题;说明书CN102339298ACN102339311A4/6页70038步骤205,判断SQL脚本与元数据库已记录SQL脚本的逻辑或字段级依赖关系是否相同,其中,逻辑包括SQL脚本访问的数据对象及操作逻辑,操作逻辑包括投影操作、连接操作、选。

20、择操作、交并差操作、分组操作及排序操作中的至少一个,该字段级映射关系为CWM规范中的一个类,这个类的类名FEATUREMAP;具体解释如下0039首先,脚本程序在前后两次自动获取元数据之间没有做过修改,需要判断脚本是否为同一条,且在判定为不同时将后面获取的元数据入库,本实施例中以SQL脚本的逻辑或字段级依赖关系作为是否为同一条SQL脚本的判断标准,即当两条SQL脚本的逻辑相同或者结构相同时,被识别为同一条SQL脚本,其中,SQL脚本的逻辑相同是指这些SQL脚本所操作的数据对象完全相同以及对这些SQL脚本访问的数据对象的操作逻辑一致,如下面SQL脚本的逻辑相同0040SELECTTAFL,TAF。

21、2FROMTAWHERETAF31000;0041SELECTAF1,AF2FROMTAAWHEREAF31000;0042SELECTTAF1A,TAF2BFROMTAWHERETAF31000;0043下面SQL脚本也是逻辑相同的,因为SQL脚本中的TA_200905、TA_200906、TA_200907在元数据中指的是同一个SQL脚本访问的数据对象0044SELECTAF1,AF2FROMTA_200905A;0045SELECTAF1,AF2FROMTA_200906A;0046SELECTAF1,AF2FROMTA_200907A;0047SQL脚本的结构相同是指这些SQL脚本具有。

22、完全相同的字段级依赖关系,例如0048SELECTTAF1,TAF2FROMTAWHERETAF31000;0049SELECTTAF1,AF2FROMTAWHERETAF4IN100,500,800ORDERBYTAF1;0050具体操作时,满足字段级依赖关系但投影逻辑、WHERE子句、ORDERBY子句或者GROUPBY子句等存在差异的SQL语句也可以视为结构相同,如0051SELECTAF1AF2,AF1AF2FROMTAA;0052SELECTAF1AF2,AF1/AF2FROMTAA;0053然而,下面这些SQL脚本具有不同的字段级数据对象投影关系,他们之间的字段级依赖分析结果是不一。

23、样的,故二者是结构不相同的SQL脚本0054SELECTAF1,AF2FROMTAA;0055SELECTAF1AF2,AF1AF2FROMTAA;0056步骤206在判定逻辑或字段级依赖关系不同时,将元数据更新至元数据库,也就是说,当我们增量处理一个脚本程序的元数据时,如果脚本程序中某条SQL脚本的元数据已经在元数据库中存在,则不需要将这条SQL脚本的元数据写入元数据库,或者在写入时覆盖这条SQL脚本对应的已经存在的元数据,如果脚本程序中某条SQL脚本的元数据在元数据库中不存在,则直接将这条SQL脚本的元数据写入元数据库中。0057上述步骤205及206主要用于解释在自动获取某个脚本程序的元。

24、数据时,元数据库中已经保存了该脚本程序上次自动获取的元数据,而且脚本程序在前后两次自动获取元数据之间没有做过修改的情况下采用增量更新元数据具体包括识别同一程序块内的同一SQL脚本的流程的流程。本领域技术人员可以理解上述方法不仅可以使用于数据仓库,也可以应用于其他环境下的SQL脚本元数据的更新操作。说明书CN102339298ACN102339311A5/6页80058本实施例通过根据SQL脚本的逻辑或字段级依赖关系判断是否为同一SQL脚本,进而进行元数据的更新操作,避免了现有技术中在元数据入库时以对象命名进行匹配而导致效率不高的不足,提升更新效率;同时,通过持续处理ETL和数据处理过程每次运行。

25、所输出的运行日志,将每次处理所生成的元数据全量或增量写入元数据存储库,实现将每条运行路径的SQL脚本元数据整合在一起,形成整个ETL和数据处理过程程序块的SQL脚本元数据,可以有效解决基于运行日志进行SQL脚本元数据自动获取时常见的多路径问题,避免自动获取的元数据只能覆盖ETL和数据处理过程的某条运行路径,提升SQL脚本元数据的自动获取质量。0059装置实施例0060图3为本发明的SQL脚本元数据的更新装置的实施例结构图。图1及2所示的各方法实施例均可适用于本实施例。本实施例包括解析模块31,用于解析程序块中包含的SQL脚本,获取元数据;判断模块32,用于判断SQL脚本与元数据库已记录SQL脚。

26、本是否为同一脚本;处理模块33,用于在判定为不同脚本时,将元数据更新至元数据库。0061具体操作时,该装置还可以包括0062修改处理模块34,用于根据运行日志中记载的修改信息,判断SQL脚本是否被修改;并在判定被修改时,将元数据更新至元数据库,并覆盖SQL脚本修改前的元数据;以及判定未被修改时,控制判断模块32进行操作;0063分析模块35,用于判断元数据库中是否存在SQL脚本的元数据;以及在判定不存在SQL脚本的元数据时,将元数据更新至元数据库,具体操作时,该分析模块35可以利用判断模块32判断是否属于同一SQL脚本的方法进行判断,详见步骤203及204的解释说明。0064判断模块32可以包。

27、括判断子模块图未示,用于判断SQL脚本与元数据库已记录SQL脚本的逻辑或字段级依赖关系是否相同,其中,逻辑包括SQL脚本访问的数据对象及操作逻辑,操作逻辑包括投影操作、连接操作、选择操作、交并差操作、分组操作及排序操作中的至少一个,逻辑或字段级依赖关系相同时表征为同一脚本。0065解析模块31可以包括提取子模块312,用于持续从ETL和数据处理过程每次运行所输出的运行日志中提取SQL脚本;解析子模块314,根据SQL脚本解析获取元数据。0066本领域技术人员应当可以理解对应于图2中的解释说明,解析模块31、判断模块32、处理模块33即可实现避免现有技术中在元数据入库时以对象命名进行匹配而导致效。

28、率不高的不足,其他的模块及子模块均为优选实施方式。0067本实施例中,判断模块32通过根据SQL脚本的逻辑或字段级依赖关系判断是否为同一SQL脚本,进而进行元数据的更新操作,避免了现有技术中以对象命名进行匹配而导致效率不高的不足,提升更新效率;同时,提取子模块312通过持续处理ETL和数据处理过程每次运行所输出的运行日志,处理模块33、修改处理模块34、分析模块35将每次处理所生成的元数据全量或增量写入元数据存储库,实现将每条运行路径的SQL脚本元数据整合在一起,形成整个ETL和数据处理过程程序块的SQL脚本元数据,可以有效解决基于运行日志进行SQL脚本元数据自动获取时常见的多路径问题,避免自。

29、动获取的元数据只能覆盖ETL和数据处理过程的某条运行路径,提升SQL脚本元数据的自动获取质量。0068系统实施例0069图4为本发明的SQL脚本元数据的更新系统的实施例结构图。图1及2所示的各说明书CN102339298ACN102339311A6/6页9方法实施例均可适用于本实施例。本实施例包括元数据库42,用于记录SQL脚本的元数据及SQL脚本的修改信息;SQL脚本元数据的更新装置44,用于解析SQL程序块中包含的SQL脚本获取元数据;并判断SQL脚本与元数据库已记录SQL脚本是否为同一脚本;以及在判定为不同脚本时,将元数据更新至元数据库。其中,SQL脚本元数据的更新装置44的详细说明参见。

30、图3的解释说明。0070本实施例中,SQL脚本元数据的更新装置44通过根据SQL脚本的逻辑或字段级依赖关系判断是否为同一SQL脚本,进而进行元数据的更新操作,避免了现有技术中以对象命名进行匹配而导致效率不高的不足,提升更新效率;同时,通过持续处理ETL和数据处理过程每次运行所输出的运行日志,将每次处理所生成的元数据全量或增量写入元数据存储库,实现将每条运行路径的SQL脚本元数据整合在一起,形成整个ETL和数据处理过程程序块的SQL脚本元数据,可以有效解决基于运行日志进行SQL脚本元数据自动获取时常见的多路径问题,避免自动获取的元数据只能覆盖ETL和数据处理过程的某条运行路径,提升SQL脚本元数据的自动获取质量。0071最后应说明的是以上仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。说明书CN102339298ACN102339311A1/2页10图1图2说明书附图CN102339298ACN102339311A2/2页11图3图4说明书附图CN102339298A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1