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

目前没想到太好的解决方案,只是按部就班处理,有好方法的记得提醒我下。

需求是这样子的:

        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 KHJB
				FROM (SELECT KHH, XH, 
                        ROW_NUMBER() OVER(PARTITION BY KHH ORDER BY PRI) AS RN --按优先级排序
						FROM (SELECT A.KHH,
									JB.XH,
									GZ.PRI,
									CASE
										WHEN ZBLX = 1 THEN
										A.ZZC >= GZ.LOWER_LIMIT AND A.ZZC < GZ.UPPER_LIMIT
										ELSE
										FALSE
									END AS LIMIT1, --条件1单独判断
									CASE
										WHEN GZ.JSFH = 1 THEN
										A.JYL > GZ.LOWER_LIMIT2
										WHEN GZ.JSFH = 2 THEN
										A.JYL < GZ.LOWER_LIMIT2
										WHEN GZ.JSFH = 3 THEN
										A.JYL = GZ.LOWER_LIMIT2
										WHEN GZ.JSFH = 4 THEN
										A.JYL >= GZ.LOWER_LIMIT2
										WHEN GZ.JSFH = 5 THEN
										A.JYL <= GZ.LOWER_LIMIT2
										ELSE
										FALSE
									END AS LIMIT2, --条件2单独判断
									GZ.LJYS
								FROM 客户资产表 A,
									客户级别配置表 GZ
								LEFT JOIN 客户级别定义 JB
									ON JB.SX = GZ.KHJB) T
						WHERE CASE
								WHEN LJYS IS NULL THEN
								LIMIT1
								WHEN LJYS = 1 THEN
								LIMIT1 AND LIMIT2
								WHEN LJYS = 2 THEN
								LIMIT1 OR LIMIT2
								ELSE
								FALSE
							END  -- --条件1 和 条件2 逻辑处理
                ) T2
				WHERE RN = 1   --同时满足,取优先级高的,确保一个客户只对应一个级别
  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值