有数的数据模型如何查数据?

如图的数据建模,有数如何执行sql?

有数的数据模型如何查数据? - 图1

我们从后台截取sql如下:

  1. SELECT * /*查询字段已经删除,主要看下面的join逻辑*/
  2. FROM `dashboard`.`app_version` AS `t1`
  3. INNER JOIN `dashboard`.`api_name` AS `t2` ON (`t1`.`id` <=> `t2`.`id`)
  4. INNER JOIN `dashboard`.`backend_message` AS `t3` ON (`t1`.`id` <=> `t3`.`id`)
  5. INNER JOIN `dashboard`.`backend_deploy_persons` AS `t4` ON (`t3`.`creator_id` <=> `t4`.`creator_id`)
  6. INNER JOIN `dashboard`.`bigviz_user` AS `t5` ON (`t4`.`id` <=> `t5`.`id`)
  7. WHERE (`t5`.`id` IN (8082))

从sql可以看出,有数是以节点对应关系来执行sql 的。

拓展:

(1)如果在列表筛选器针对其中一个表的字段设置了筛选,sql 如何执行?

sql是先把模型中表与表的join关系理出来。然后基于整个结果做的筛选字段筛选。

这样的缺陷是:如上图,如果t1和t5在不做筛选的时候会出来多条结果,对性能不是特别好。

优化:可以把t5创建一个自定义sql, 内容如: select * from t5 where 条件=xxx 。 然后把这个sql视图代替上图的t5单表。

(2)这样的一个数据模型,在报告中,如果只用了某张表的一个字段,会如何?

有数会把数据模型的sql 当成一个子sql,在该sql上做查询。