文档

SQL处理优化

更新时间:

为了方便用户操作Transactional Table 2.0,MaxCompute计算引擎对SQL全套的数据查询DQL语法和数据操作DML语法进行了支持,并且SQL引擎内核模块包括Compiler、Optimizer、Runtime等都做了专门适配开发以支持相关功能和优化。本文为您介绍数据查询DQL和数据操作DML的架构设计核心要点。

数据查询DQL

  • 在功能支持上,主要针对TimeTravel查询和增量查询的场景进行了适配开发优化。

  • 在查询效率上,跟查询普通表最大的不同在于,读取源表数据文件时,可能会涉及大量DeltaFile的合并以及数据历史中间状态的消除,详情可参见TimeTravel查询设计,从而极大影响读取效率,因此对于查询频率和效率要求比较高的业务场景,设置合理的周期做Compaction操作是有必要的,能够有效减少DeltaFile的数量和消除数据中间状态,从而极大提升查询效率,但Compaction操作本身也有计算和存储成本,因此,这些策略存在一定的tradeoff,用户需要结合自己的场景配置合理的策略。

  • 从节省计算成本的角度,还需要特别说明一个典型场景,在后付费的SQL查询场景中,由于Transactional Table 2.0源表数据可能存在大量中间状态的记录,即Update/Delete记录,而Storage Reader会读取出来所有的中间状态记录进行Merge,只输出最后状态的记录参与后续的计算,但计算费用使用的Size是按照真正读取的IO量来计算的,这会包含中间状态记录的Size,为了有效节省查询的计算费用,对于Update/Delete比较频繁,且查询比较多的场景,也推荐及时做COMPACTION操作来消除中间状态,这样真正读取的IO Size会减少很多,从而节省整体查询费用,也能提高查询性能。

数据操作DML

数据批量写入以及数据批量修改,都可通过SQL DML执行。SQL引擎对于操作Transactional Table 2.0的DML语法也是做了专门的改造开发,包括特定语法的解析,特定算子的Planner优化,针对pk列的去重逻辑,以及runtime构造Upsert格式数据并发写入等等。

数据处理完成之后,会由Meta Service来执行事务冲突检测,原子更新数据文件元信息等,保障读写隔离和事务一致性,详情请参考事务管理

  • 本页导读 (1)
文档反馈