页面树结构
转至元数据结尾
转至元数据起始

问题描述

数据模型引擎已经支持到V2版本,从V1版本切换至V2版本时,发现使用V2引擎的时候会出现报错的问题,具体如下图,从报错信息来看的由于date_add函数出现的传参错误,但是实际上在数据模型V1引擎的时候并为出现过类似的报错信息。


问题原因

1、在V2引擎的时候,产品数据模型的内置函数从10+支持到了40+,底层经过了一次重构,而dateadd函数在V2引擎中的一个内置的函数,具体如下图。在读取计算列中存在函数的时候会优先读取内置函数。

如下图,报错的模型中在sql语句中写了一个dateadd函数,就会导致产品会将该函数识别为内置函数,就会出现报错信息中说的参数类型匹配的问题。

2、第二点在于V2引擎重构了内置函数和数据库函数的区分方式。在V1引擎的时候,由于支持的函数类型较少,如果是拖拽的函数则认为是内置函数,如果是手动输入则任务是内置函数。如下图,上面为拖拽的表示为内置函数,下面的手动输入的为自定义函数。由于这种区分方式并不明显,很容易造成混淆,导致出现bug。V2引擎为解决这个问题,对区分方式进行了重构,让他们的区别更下明显,如果需要表示为数据库函数的时候需要在函数前面手动添加@符号,具体如下图。

*注意:若出现内置函数与数据库函数参数名称冲突的时候才需要给数据库函数添加上@符号进行区分


解决方案:

目前程序暂时无法批量的将计算列上引用的数据库函数前面添加@符号,主要在与部分函数会较难识别替换。目前仅能通过手工添加的方式来进行处理。由于修改V2引擎后,较难看出之前制作的数据模型是否使用到了和内置函数冲突的数据库函数。可通过如下sql查询所以数据模型的计算列,输出具体模型以及计算列名。

// mysql参考示例
select c_alias as FieldAlias, c_name as FieldName, c_dataset as DatasetID from tx_augmented_dataset_field where lower(c_extended) like '%dateadd(%' and lower(c_extended) NOT LIKE '%@dateadd%'





  • 无标签