好嘞~那我直接粘一下
1. FlinkSQL代码
CREATE TEMPORARY VIEW IF NOT EXISTS rt_view AS
SELECT user_id
, run_duration_3km_prediction
, run_duration_5km_prediction
, run_duration_10km_prediction
, run_duration_21km_prediction
, run_duration_42km_prediction
, LEAST(run_duration_3km_prediction/ 3, run_duration_5km_prediction/ 5, 
run_duration_10km_prediction / 10, run_duration_21km_prediction / 21
, run_duration_42km_prediction / 42.195) AS lactate_threshold_pace -- 取最小值
, update_time
FROM (
SELECT user_id AS user_idAS model_version
, json_value(vo2max, '$.vo2max' RETURNING DOUBLE) AS vo2max
, IF(COALESCE(json_value(vo2max, '$.vo2max' RETURNING DOUBLE), 0) <= 0, 0, 
ROUND(POWER(json_value(vo2max, '$.vo2max' RETURNING DOUBLE) / 16, 1 / -1.149), 
2)) AS run_duration_3km_prediction
, IF(COALESCE(json_value(vo2max, '$.vo2max' RETURNING DOUBLE), 0) <= 0, 0, 
ROUND(POWER(json_value(vo2max, '$.vo2max' RETURNING DOUBLE) / 47, 1 / -1.164), 
2)) AS run_duration_5km_prediction
, IF(COALESCE(json_value(vo2max, '$.vo2max' RETURNING DOUBLE), 0) <= 0, 0, 
ROUND(POWER(json_value(vo2max, '$.vo2max' RETURNING DOUBLE) / 37, 1 / -1.161), 
2)) AS run_duration_10km_prediction
, IF(COALESCE(json_value(vo2max, '$.vo2max' RETURNING DOUBLE), 0) <= 0, 0, 
ROUND(POWER(json_value(vo2max, '$.vo2max' RETURNING DOUBLE) / 17, 1 / -1.16), 
2)) AS run_duration_21km_prediction
, IF(COALESCE(json_value(vo2max, '$.vo2max' RETURNING DOUBLE), 0) <= 0, 0, 
ROUND(POWER(json_value(vo2max, '$.vo2max' RETURNING DOUBLE) / 45, 1 / -1.237), 
2)) AS run_duration_42km_prediction
, update_time
FROM tmp_view
) AS t
;




2. 返回数据结果

user_id (STRING):

 5d01d8dba2d5fc2928da97d0

 model_version (STRING):

 101

 vo2max (DOUBLE):

 48.94047164916992

 run_duration_3km_prediction (DOUBLE):

 703.25

 run_duration_5km_prediction (DOUBLE):

 1215.02

 run_duration_10km_prediction (DOUBLE):

 2524.36

 run_duration_21km_prediction (DOUBLE):

 5534.96

 run_duration_42km_prediction (DOUBLE):

 11550.15

 lactate_threshold_pace (DOUBLE):

 0.0








在 2023-08-21 11:27:04,"guozhi mang" <rookiegao...@gmail.com> 写道:
>邮件里无法加载图片
>
>guifeng huang <hgf_...@163.com> 于2023年8月21日周一 11:08写道:
>
>>
>> 因为是在流里, 我不太清楚如何给您复现的用例比较合适, 因为把数据单独拿出来, 返回结果又是正常的...
>> 以下我把我的FlinkSQL代码和输出结果贴图一下(您看下是否OK)
>> *FlinkSQL代码*
>> 视图tmp_view是我从日志里过滤的数据, 整体业务逻辑比较简单就是lactate_threshold_pace这个是从下面5个指标里取一个最小值
>> (
>> run_duration_3km_prediction,run_duration_5km_prediction,run_duration_10km_prediction,run_duration_21km_prediction,run_duration_42km_prediction)
>> 实际5个指标都是大于0, 但是最后函数结果是0
>>
>> *输出结果*
>>
>>
>>
>> 在 2023-08-21 10:36:33,"Jiabao Sun" <jiabao....@xtransfer.cn.INVALID> 写道:
>> >Hi,
>> >
>> >方便提供一下复现的用例吗?
>> >
>> >Best,
>> >Jiabao
>> >
>> >
>> >On 2023/08/21 02:19:53 guifeng huang wrote:
>> >> (Flink1.15版本)
>> >> 咨询求助: Least函数输入参数(Double类型)正常, 在Flink shell里测试函数无问题, 结果符合预期. 
>> >> 但是实际生产流里进行使用的时候发现返回结果有异, 以下是3种case
>> >> - 返回结果正确, 符合预期
>> >> - 返回0, 不符合预期, 未知原因
>> >> - 返回结果和理论正确值有微小的gap, 找了几个case都是1位数值里的差距.
>> >> 看看有没有其他的老师遇到过同样的问题
>>
>>
>
>-- 
>Best regards

回复