likes
comments
collection
share

聊聊阿里云Dataworks实践 | 一条注释引发的生产报错很多的细节问题,决定了上线生产后的质量。如果不注意,不好意思

作者站长头像
站长
· 阅读数 19

昨晚上线了一个模型,伪代码如下:

 insert overwrite table yht_dw.xxx partition (pt='20240227')
 select 
         id,                                                  -- id
         entity_id,                                           -- 单据id
         settlement_office_id,                                -- 结算主体id
         settlement_company_id,                               -- 结算单位id
         settlement_mode,                                     -- 结算方式
         estimate_amount,                                     -- 预估金额
         confirmation_no,
         confirmation_date,                                   -- 确认单日期
         forward_confirmation_state,                          -- 组合确认状态,根据确认状态与调整状态展示
         confirmation_state,                                  -- 确认单状态
         ar_ap,                                               -- 收付方向*
         currency,
         amount,                                              -- 金额
         bank_account,
         contract_no,                                         -- 合同编号
         forward_entry_state,                                 -- 组合入账状态,根据入账状态与调整状态展示
         adjust_state,                                        -- 调整状态 1 无 2 调整中 3 已调整
         entry_state,                                         -- 入账状态
         entry_amount,                                        -- 账单金额,影响账单金额的操作
         invoice_apply_state,                                 -- 开票申请状态,待申请状态的费用才可申请开票
         invoice_apply_amount,                                -- 开票申请金额,影响开票申请金额的操作
         invoice_state,                                       -- 开票申请;
         current_timestamp() as etl_time
 from yht_dw.ods_cw_fin_charge_base_di
 where pt='${bizdate}'

在上线之前,通过Studio进行了脚本的验证,整个逻辑是验证通过的,脚本正常运行。因此将任务发布到任务发布后即没有进行模型测试,直接上线到生产环境中。第二天发现任务报错,而且报了很奇怪的错误,如下图:

聊聊阿里云Dataworks实践 | 一条注释引发的生产报错很多的细节问题,决定了上线生产后的质量。如果不注意,不好意思

这是提示我脚本中有无效的字符“,",但是我通篇看下来,脚本内的,都是英文状态下半角,并且不存在多余的错误的符号,因此可能并不是,的原因。通过几个任务的相同报错来看我将问题定位到了注释的位置:

聊聊阿里云Dataworks实践 | 一条注释引发的生产报错很多的细节问题,决定了上线生产后的质量。如果不注意,不好意思

图片中日志的红色框线位置,而且我在想是不是有可能是这里的;影响到了脚本的执行。因为Dataworks执行脚本的时候是将;作为一个脚本的结束以及另一个脚本的开始。那么我就开始修改,将处于注释末尾的;全部删除然后再上线,经过测试,发现确实脚本成功的执行了。

这里我猜测,Dataworks中SQL执行的时候,会先寻找第一个处于某一行结尾的;来确定脚本的结束位置,在这个情况下,它不会辨别这个;是否存在于注释中。以本文的错误为例,它认为开票申请后; 即为第一段脚本的结束,因此,invoice_state后跟着的,就变成了invalid token ',' ,以至于它的这个报错就是可以理解的了。同时也提示我们,在注释中避免使用;产生上文的错误。都是血与泪的教训啊。

转载自:https://juejin.cn/post/7376281899621515316
评论
请登录