写点什么

openLooKeng | Oracle update 和 delete 支持简介及实现

作者:openLooKeng
  • 2022 年 1 月 29 日
  • 本文字数:1358 字

    阅读完需:约 4 分钟

Oracle update 和 delete 是 openLooKeng 在 Oracle connector 上提供的对 Oracle 数据源进行更新和删除操作的特性,此特性除实现对 Oracle 数据源 update 和 delete 操作的直接支持,还提供了适配开发接口,基于这些接口可以开发某些数据源的 update 和 delete 操作。

功能介绍

update 和 delete 操作,先通过查询操作获取到满足条件的行,这些行每行有一个唯一的 rowid 的值来标识,然后对行数据进行 update 和 delete 操作,对于 delete 操作还提供额外的优化,如果查询可以下推到数据源,则可以将 delete 操作和查询操作一起下推到数据源中执行。


备注:oracle 的 update 和 delete 与 Hive 的 update 和 delete 在业务流程还有些差别,oracle 是实现原地写(只对待处理的数据进行操作),而 Hive 是实现重定向写(把待涉处理数据处理后,重新写入到 HDFS 中,实际执行 updateAsInsert 或 deleteAsInsert 的流程)。

功能实现原理


二个操作都要经过上面的不同阶段的处理, 语法解析阶段对 SQL 语句进行解析并转化为内部的 AST 树,语法 &语义分析阶段对 AST 树中的各种标识进行识别(如表,列,表达式等)转化为逻辑计划树,优化阶段对这个逻辑树进行优化,然后转化为一个物理执行树,执行阶段框架按照这个执行树进行执行,其中有些树节点的算子会与数据源进行交互。


交互的接口大致分 2 类:


  1. 涉及元数据的接口: 如在语法 &语义阶段,对 rowid 列信息的获取;

  2. 涉及业务流程处理接口有两类:


  • 第一类: 主要是预和后处理接口,beginXXX, applyXXX, finishXXX

  • 第二类:数据处理接口:XXXRows, executeXXX 前者是记录级的操作,后者是“表”级操作(直接将业务下推到数据源中执行),这里操作跟具体的物理执行计划节点类型相关,目前有 Delete 节点,TableDelete 节点和 Update 节点,由这些节点来调用相应的接口完成功能。


功能实现上在接口上分 2 层:


  • 第一层 SPI 层通用处理接口,全部数据源都遵循的接口

  • 第二层 BaseJDBC 层针对基于 JDBC 协议实现的数据源通用处理,方便 JDBC 数据源来实现业务。



下面将重点对与数据源的数据处理各个接口结合业务进行讲解。

delete 业务流程

1.主要接口及实现

  • rowid 列


在分析阶段,框架通过 ConnectorMetadata#getDeleteRowIdColumnHandle 获取 rowid 列的处理句柄,在 Oracle Connector 中只绑定 Oracle 数据源中每个表的隐藏列 ROWID 列,这个列会在查询数据的时候自动添加到 TableScan 中。



  • 记录级删除


Delete 算子在执行时从下游的算子获取 rowid 的列数据,然后调用 UpdatablePageSource#deleteRows 接口,通知数据源删除这些列。在 BaseJDBC 层,通过二个 jdbcClient 接口完成,一个生成删除预处理语句,一个执行预处理命令的参数设置(rowid 列值的设置)。



  • 下推及表级删除


一个 delete 业务在优化阶段前都是走记录级删除流程,优化阶段对某些场景可优化成“表”级删除流程(下推 TableScan 优化器和下推 Delete 优化器共同作用的结果),对应的算子由 Delete 转为 TableDelete 算子执行。


下推:





从上表可以看出,表级删除大大优化的处理的流程,与数据源的交互算子缩减到一个。


  • 表删除处理


TableDelete 算子在执行删除操作的时候不在关注到底是哪些行,只要针对有下推和无下推场景,来组装 delete 语句即可。


涉及接口汇总

适配开发注意事项

  1. 由于提供了二层接口,所以需要根据数据源的实现来选择。

  2. Delete 的下推由用户输入的语句及连接器的下推实现共同决定,所以二个接口都要实现。

  3. 当前实现,事务考虑较少,对事务敏感的需要另行考虑实现方式。



发布于: 刚刚阅读数: 2
用户头像

openLooKeng

关注

愿景:让大数据更简单 2021.04.14 加入

openLooKeng是一款高效的数据虚拟化引擎,提供统一SQL接口,具备跨数据源/数据中心分析能力,致力于为用户提供极简的数据分析体验。社区官网:https://openlookeng.io

评论

发布
暂无评论
openLooKeng | Oracle update和delete支持简介及实现