前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dataworks实践—关于一条注释引发的生产报错

Dataworks实践—关于一条注释引发的生产报错

原创
作者头像
哎呀_编号89757
发布2024-08-12 16:55:25
750
发布2024-08-12 16:55:25
举报
文章被收录于专栏:Dataworks实践总结之

前几天上线了一个模型,伪代码如下:

代码语言:sql
复制
insert overwrite table yht_dw.xxx partition (pt='20240807')
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中SQL执行的时候,会先寻找第一个处于某一行结尾的;来确定脚本的结束位置,在这个情况下,它不会辨别这个;是否存在于注释中。以本文的错误为例,它认为开票申请后;即为第一段脚本的结束,因此,invoice_state后跟着的,就变成了invalid token ',',以至于它的这个报错就是可以理解的了。同时也提示我们,在注释中避免使用;,该符号很容易被解析sql生成语法树的时候造成报错:系统认为脚本到此为一个段落的结束,进而产生上述的报错。

这里的问题很小,但在平时上线或者实践的时候,可能被很大一部分人忽视,结果造成了较大的运维成本,希望大家可以看到这儿有所收获,有所谨记。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档