SQLFlow:在线解析SQL血缘关系(SQL Data Lineage)

网站:SQLFlow

什么是血缘关系

当你在数据库里执行一段SQL代码后,数据库会返回给你一个结果集(record set,简称RS),结果集中的每一列可能来源于不同的表,这些不同的表又依赖别的表,中间可能经过了函数、聚合等计算。源表与结果集关系,就是血缘关系。

例如,有这样的SQL语句,从源表user和order中,查询了一个用户所有订单金额的RS:

-- mysql
SELECT `user`.name,
       `order`.price
FROM   `user`,
       `order`
WHERE  `user`.id = `order`.uid 

他的血缘关系如下图所示:

SQLFlow:在线解析SQL血缘关系(SQL Data Lineage)_第1张图片

 

如果我们的金额只取整数,他的关系图如下:

-- mysql
SELECT `user`.name,
       floor(`order`.price) as price
FROM   `user`,
       `order`
WHERE  `user`.id = `order`.uid 

 

SQLFlow:在线解析SQL血缘关系(SQL Data Lineage)_第2张图片

可以看到,和上图相比,price在形成结果之前,经历了floor函数的计算。

我们可以user.id和order.uid之间的join关系列出来:

 

我们从上面的表中,我们做一个子查询,对于每个人取金额最大的:

-- mysql
SELECT temp.name, max(temp.price) as price 
FROM (
  SELECT `user`.name,
         `order`.price
  FROM   `user`,
         `order`
  WHERE  user.id = order.uid 
 ) as temp
GROUP BY temp.name

 

SQLFlow:在线解析SQL血缘关系(SQL Data Lineage)_第3张图片

可以看到,和上面的图相比,多个一个叫RESULT_OF_TEMP的表,他就是我们子查询形成的中间结果,他也出现在我们的血缘关系中。

在线解析

打开网站SQLFlow,注册一个用户, 切换选择数据库,输入sql代码,点击visualize按钮:

SQLFlow:在线解析SQL血缘关系(SQL Data Lineage)_第4张图片

 

 

在图像空白区域点击右键,可以下载图片:

SQLFlow:在线解析SQL血缘关系(SQL Data Lineage)_第5张图片

 

 

点击visualize join按钮,切换jon视图:

SQLFlow:在线解析SQL血缘关系(SQL Data Lineage)_第6张图片

 

 

切换到setting面板,可以设置是否显示中间过程,是否显示函数:

SQLFlow:在线解析SQL血缘关系(SQL Data Lineage)_第7张图片

 

 

其他选项,请自行探索。

参考

  1. Collect data lineage in Data Warehouses by analysis SQL script

  2. The basic concept of the dataflow

你可能感兴趣的:(数据库,大数据,sql)