flink/hive sql 实现递归 查询人员组织架构

递归人员归属查询
  • 解决的问题:flink sql无法使用递归查询的问题
  • 场景
    • syc_loan_dpt(did, dname, dlevel, pdid)、syc_agent_usr(uid、uname、did)

    • 组织架构:元事业部/城市中心/分中心/中心分部/归属阶段/归属小组

    • 每个销售经归属,叶子节点可能为level in (6, 7, 8), 要求从原事业部开始到叶子节点

业务库(Oracle)

selecet
did, dname, dlevel, pdid
from syc_loan_dpt
start with dlevel='2'
connect by prior did=pdid
where did=(select did from syc_agent_usr where uid='xx')

Flink数仓查询归属层级(通过冗余组织层级,然后用户表关联其所属层级)

--叶子节点为6
with dpt as (
    select did, dname, dlevel, pdid from syc_loan_dpt
)
select
	 u.*, d.*
from syc_agent_usr u
left join (
    select
    	t4.did
        ,t1.dname	source	--原事业部
        ,t2.dname   city	--城市中心
        ,t3.dname	sub_city--城市分中心
        ,t4.dname	sub_dpt	--分部
    	,null       belong
		,null       group
    from dpt t1
    inner join t2 on t1.did=t2.pdid
    inner join t3 on t2.did=t3.pdid
    inner join t4 on t3.did=t4.pdid
    where t1.dlevel='3'

    union all 
    --叶子节点为7
    select
    	,t5.did
        ,t1.dname	source	--原事业部
        ,t2.dname   city 	--城市中心
        ,t3.dname	sub_city--城市分中心
        ,t4.dname	sub_dpt	--分部
        ,t5.dname	belong	--所属阶段
		,null       group
	from dpt t1
    inner join t2 on t1.did=t2.pdid
    inner join t3 on t2.did=t3.pdid
    inner join t4 on t3.did=t4.pdid
    inner join t5 on t4.did=t5.pdid
    where t1.dlevel='3'

    union all
    --叶子节点为8
    select
    	t6.did
        ,t1.dname	source	--原事业部
        ,t2.dname   city 	--城市中心
        ,t3.dname	sub_city--城市分中心
        ,t4.dname	sub_dpt	--分部
        ,t5.dname	belong	--所属阶段
        ,t6.dname	group	--所属小组
    from dpt t1
    inner join t2 on t1.did=t2.pdid
    inner join t3 on t2.did=t3.pdid
    inner join t4 on t3.did=t4.pdid
    inner join t5 on t4.did=t5.pdid
    inner join t6 on t5.did=t6.pdid
    where t1.dlevel='3'
) d on u.did=d.did
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值