如何从SQL上来区分有数的业务逻辑?

有数作为数据分析工具,大部分的数据获取都是把SQL语句下发到数据库去执行,下发的SQL语句都会带上SQL注释,用来区分是否是有数下发的SQL,样例参考:

"/* By YouData (apiName:getQuery)(userId:false)(uniqueId:false)(resourceId:c-1-12267-12749-jg1ubiip)(timestamp:1692370805525)(isEdit:false)(trigger:Warning)(mvName:undefined)(dataModelId:741)(relatedResourceId:12267)(transId:oTt6LTeeKHtJgRN3e6GbYd)(queryId:bf6bf86fe3217c92:e187f7f100000000) */"

其中里面的tigger就是有数SQL的触发方式。目前有数有12中触发方式,分别是:AnomalyWarning (指标异动分析)、TaskCache(预加载任务)、api(接口触发)、UserFlush(用户手动刷新)、Mail(定时邮件)、Warning(度量预警)、MailCache(定时邮件预加载)、AutoFlush(定时自动刷新)、ExportExcel (导出excel) 、TaskCacheAn(依赖刷新)、Capture(截图)、User(用户查询)。

下面就对每个触发方式,来分析用户的行为:

AnomalyWarning(指标异动分析)

如何区分有数下发到数据库的SQL类型? - 图1 智能决策里面的指标异动分析,下发的SQL。

UserFlush(用户手动刷新)

用户在有数上点击刷新数据触发的SQL查询(包含了模型的刷新,报告的刷新,图表的刷新,数据连接的刷新)]如何区分有数下发到数据库的SQL类型? - 图3如何区分有数下发到数据库的SQL类型? - 图4

AutoFlush(定时自动刷新)

对图表设置了定时刷新,会下发对应的SQL如何区分有数下发到数据库的SQL类型? - 图5

TaskCache(预加载任务)

预加载主要作用是提前触发SQL查询,缓存图表数据,比如:数据连接的缓存有效期过期了,需要重新生成新的缓存;报告的刷新计划。

api(接口触发)

用户调用有数的依赖更新接口,下发的SQL,比如:依赖刷新,依赖抽取。

Mail(定时邮件)

立即推送下发的SQL和定时推送下发的SQL

MailCache(定时邮件预加载)

定时任务触发的SQL

为什么定时邮件会下发两种状态的SQL(mail、mailcache)?

因为定时邮件触发的时候会提前10分钟下发SQL进行缓存,这个时候下发的SQL就是mailcache状态的。如果10分钟之内没有命中缓存(比如SQL执行失败;SQL排队严重,10分钟还没有执行这个SQL),这个时候就会下发mail状态的SQL去获取数据

Warning(度量预警)

图表度量预警下发的SQL:如何区分有数下发到数据库的SQL类型? - 图6

ExportExcel (导出excel)

导出excel下发的SQL,包括大数据量导出

TaskCacheAn(依赖刷新)

用户调用依赖刷新接口,有数下发的SQL语句

Capture(截图)

导出图表有数下发的SQL语句

User(用户查询)

用户查询主要是用户在开发报告下发的SQL语句,我们可以通过apiName来区分是哪些图表下发的SQL语句,以下图为例:

如何区分有数下发到数据库的SQL类型? - 图7

graphicQuery(指标卡下发的SQL),还有其他两种分别是:tableQuery(二维表下发的SQL);graphQuery(图表下发的SQL);

tableAnalysis(智能分析)

这个是用户点击了表格的智能分析修下发的SQL语句。

如何区分有数下发到数据库的SQL类型? - 图8