当前位置: 首页> 健康> 母婴 > IMPALA - 根据参数动态判断业务逻辑

IMPALA - 根据参数动态判断业务逻辑

时间:2025/7/10 21:06:55来源:https://blog.csdn.net/shijianduan1/article/details/140627397 浏览次数:0次
目前没想到太好的解决方案,只是按部就班处理,有好方法的记得提醒我下。

需求是这样子的:

        1.动态配置客户级别的判断逻辑。

          根据客户资产(必选)+交易量(可选)来 给客户定级

         2.对指定的客户,单独配置

踩坑:

不走微服务,用Oracle过程实现, 这不是很简单么,动态SQL整一个就好。

然后就踩坑里了, 这数据存在了HIVE上,  业务结果也会落地HIVE,然后结果推送ES、同步Oracle。

而配置表则在Oralce。

当逻辑也放到impala上执行时,发现impala不支持动态拼接SQL。

想了半天 也没啥太好的办法, 好在条件比较简单,就硬着头皮按原始写下来了。

也给后来者 一个不是解决方法的方法吧。

 

实现:

        

界面效果

客户级别优先级定级指标指标下限(包含)指标上限(不包含)逻辑运算定级指标2计算方式指标2参数(包含)
空户1资产01,000交易量大于100
一级2资产010,000    
二级3资产10,000100,000    
三级4资产100,000500,000    
四级5资产500,0003,000,000    
五级6资产3,000,000  

表定义

客户级别配置表
id
khjb            客户级别
pri             优先级,1为优先最高
zblx            指标类型(条件一)
lower_limit     指标下限(包含)
upper_limit     指标上限(不包含)
ljys            逻辑运算:1|且;2|或
zblx2           指标类型(条件二)
jsfh            条件二:计算方式 1|大于;2|小于;3|等于;4|大于等于;5|小于等于
lower_limit2    条件二:参数客户级别定义
id
JBMC            级别名称
XH              级别序号(我以此字段为关键字)

代码逻辑: 

SELECT KHH, XH as KHJBFROM (SELECT KHH, XH, ROW_NUMBER() OVER(PARTITION BY KHH ORDER BY PRI) AS RN --按优先级排序FROM (SELECT A.KHH,JB.XH,GZ.PRI,CASEWHEN ZBLX = 1 THENA.ZZC >= GZ.LOWER_LIMIT AND A.ZZC < GZ.UPPER_LIMITELSEFALSEEND AS LIMIT1, --条件1单独判断CASEWHEN GZ.JSFH = 1 THENA.JYL > GZ.LOWER_LIMIT2WHEN GZ.JSFH = 2 THENA.JYL < GZ.LOWER_LIMIT2WHEN GZ.JSFH = 3 THENA.JYL = GZ.LOWER_LIMIT2WHEN GZ.JSFH = 4 THENA.JYL >= GZ.LOWER_LIMIT2WHEN GZ.JSFH = 5 THENA.JYL <= GZ.LOWER_LIMIT2ELSEFALSEEND AS LIMIT2, --条件2单独判断GZ.LJYSFROM 客户资产表 A,客户级别配置表 GZLEFT JOIN 客户级别定义 JBON JB.SX = GZ.KHJB) TWHERE CASEWHEN LJYS IS NULL THENLIMIT1WHEN LJYS = 1 THENLIMIT1 AND LIMIT2WHEN LJYS = 2 THENLIMIT1 OR LIMIT2ELSEFALSEEND  -- --条件1 和 条件2 逻辑处理) T2WHERE RN = 1   --同时满足,取优先级高的,确保一个客户只对应一个级别
关键字:IMPALA - 根据参数动态判断业务逻辑

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: