排坑-FAILED: UDFArgumentException The function DECIMAL takes only primitive types

是这样的,我在dataGrap(连接了hive)写了脚本,脚本是这样的

insert overwrite table dwd_fact_order_detail partition (dt='$do_date')
select
      t1.id,
       t1.order_id,
       t1.user_id,
       t1.sku_id,
       t1.sku_name,
       t1.order_price,
       t1.sku_num,
       t1.create_time,
       t1.province_id,
       t1.source_type,
       t1.source_id,
t1.original_amount_d,
`if`(t1.rk=1,t1.final_total_amount-(t1.final_amount_d_sum-final_amount_d),t1.final_amount_d) as final_amount_d,
`if`(t1.rk=1,t1.feight_fee-(t1.feight_fee_d_sum-t1.feight_fee_d),t1.feight_fee_d) as feight_fee_d ,
`if`(t1.rk=1,t1.benefit_reduce_amount-(t1.benefit_reduce_amount_d_sum-t1.benefit_reduce_amount_d),t1.benefit_reduce_amount_d) as benefit_reduce_amount_d
from
     (
        select
        od.id,
       od.order_id,
       od.user_id,
       od.sku_id,
       od.sku_name,
       od.order_price,
       od.sku_num,
       od.create_time,
       oi.province_id,
       od.source_type,
       od.source_id,
        oi.final_total_amount,
        oi.feight_fee,
               oi.benefit_reduce_amount,
       ROUND(od.sku_num*od.order_price,2) as original_amount_d,-- 原始价格分摊
       ROUND((od.sku_num*od.order_price/oi.original_total_amount)*oi.final_total_amount,2) as final_amount_d,--购买价格分摊
        ROUND((od.sku_num*od.order_price/oi.original_total_amount)*oi.feight_fee,2) as feight_fee_d,-- 运费分担
        ROUND((od.sku_num*od.order_price/oi.original_total_amount)*oi.benefit_reduce_amount,2) as benefit_reduce_amount_d, -- 优惠分担
        sum(ROUND((od.sku_num*od.order_price/oi.original_total_amount)*oi.final_total_amount,2))  over(partition by od.order_id) as final_amount_d_sum,--购买价格分摊总和
        sum(ROUND((od.sku_num*od.order_price/oi.original_total_amount)*oi.feight_fee,2)) over(partition by od.order_id) as feight_fee_d_sum,--运费分摊总和
        sum(ROUND((od.sku_num*od.order_price/oi.original_total_amount)*oi.benefit_reduce_amount,2)) over(partition by od.order_id) as benefit_reduce_amount_d_sum,--运费分摊总和
        rank() over(partition by od.order_id order by oi.original_total_amount desc) as rk
from
     (
        select * from ods_order_detail where dt='$do_date'
     ) od
     join
    (
        select * from ods_order_info where dt='$do_date'
    ) oi
    on od.order_id = oi.id
    )t1;

然后在dataGrap中跑是正常的。把这段SQL复制到shell脚本中,就一直报FAILED: UDFArgumentException The function DECIMAL takes only primitive types。

最终找到原因:dataGrap中能识别 飘号 `` ,但是shell中`if`识别有错。所以在shell中去掉 if的飘号就可以了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值