欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQLLineage.com(SQL优化:列裁剪)

程序员文章站 2022-07-10 22:12:37
...

列裁剪是SQL优化中最常见的优化规则,就是对于没有用到的列就没必要读取已减少IO的消耗。

 

为什么出现列裁减?

一、SQL本身就有逻辑问题,包含了与结果无关的数据列:

如:sql1:select a,b from ( select a,b,c from tab1 ) t中SubSelect子查询中的字段c就是可列裁剪的对象。

 

二、为了复用已有的数据模型设计,但实际的需求只需部分数据字段

一个简单分层数仓每个数据层都设计了特定的数据模型,冗余了多个数据字段便于多业务系统复用,数据需要按照数据模型逐层的生产。而现实的情况是冗余字段造成了不必要的计算资源消耗,特别是实时性要求较高的应用场景。

 

http://www.sqllineage.com/demo SQL分析工具提供了列裁剪的功能,即可分析SQL本身存在的裁剪对象,也可以主动选择需要忽略的数据列,从而计算出优化的SQL(目前还在努力实现中)。

 

 SQLLineage.com(SQL优化:列裁剪)
            
    
    博客分类: spark数据血缘关系 sql数据挖掘 

 

优化的SQL计划分为2种模式输出:

1.输入是单条SQL,输出等价的SQL 如文中的sql1等价为 select a,b from tab1 (同时应用了投影消除规则)

2.输入是一组SQL(SQL相互依赖,但无循环依赖)模拟多层的数据生产,绘制DAG图,根据结果的列裁剪需求计算出,每条SQL等价的列裁剪SQL。

如下一组SQL:

sql2: create table ODS_TAB as select a,b,c from TAB

sql3: create table DW_TAB as select a*b as num,c from ODS_TAB

sql4: create table APP_TAB as select sum(num) from DW_TAB

等价为:

sql2: create table ODS_TAB as select a,b from TAB

sql3: create table DW_TAB as select a*b as num from ODS_TAB

sql4: create table APP_TAB as select sum(num) from DW_TAB

当然这些例子过于简单,如果您有更复杂的SQL关系组欢迎提供给我。对工具有任何改进意见也欢迎微信交流。

 

相关标签: sql 数据挖掘

上一篇: AKKA笔记3

下一篇: AKKA笔记1