1. 用途目的
本人使用 mysql8 数据库作为FineDB 数据库。亦本人推荐mysql8+ 作为外置库。
用途目的:需要对平台进行分析,通过sql获取平台目录,抽取到其他数仓中亦或直接使用,本文给与解决文档;
使用外置库表:fine_authority_object
具体字段解释详见:FineDB 表结构
2. SQL处理
第一步对数据处理:获取必要字段和必要数据
select a.id , a.displayName , a.path , a.devicetype -- 显示类型:0:未勾选 PC 、平板、手机 , a.parentid , a.sortIndex , case when a.expandtype = '1' then '平台管理系统节点' when a.expandtype = '2' then '首页' when a.expandtype = '3' then '目录' when a.expandtype = '5' then '链接' when a.expandtype = '6' then '文件' when a.expandtype = '101' then '上报流程' when a.expandtype = '102' then ' finereport报表' when a.expandtype = '201' then ' bi报表' end doctype from fine_authority_object a where displayName <> '' and a.expandtype not in ('1', '2', '101')
第二步根据 id、parentid 关联获取平台目录层级、这里以4层级作为示例
create or replace view fine_directory_view as with t1 as ( select a.id , a.displayName , a.path , a.devicetype -- 显示类型:0:未勾选 PC 、平板、手机 , a.parentid , a.sortIndex , case when a.expandtype = '1' then '平台管理系统节点' when a.expandtype = '2' then '首页' when a.expandtype = '3' then '目录' when a.expandtype = '5' then '链接' when a.expandtype = '6' then '文件' when a.expandtype = '101' then '上报流程' when a.expandtype = '102' then ' finereport报表' when a.expandtype = '201' then ' bi报表' end doctype from finedb.fine_authority_object a where displayName <> '' and a.expandtype not in ('1', '2', '101') ) select b.displayName displayName1, c.displayName displayName2, d.displayName displayName3, e.displayName displayName4, concat_ws('/',b.displayName,c.displayName,d.displayName,e.displayName) displayName, coalesce(e.path,d.path,c.path,b.path) pathstr, concat(ifnull(b.sortIndex,0)+10,ifnull(c.sortIndex,0)+10,ifnull(d.sortIndex,0)+10,ifnull(e.sortIndex,0)+10) sortIndex, coalesce(e.doctype,d.doctype,c.doctype,b.doctype) type_str, coalesce(e.devicetype,d.devicetype,c.devicetype,b.devicetype) devicetype from t1 a -- 目录根节点 left join t1 b on a.id = b.parentId -- 第1级 left join t1 c on b.id = c.parentId -- 第2级 left join t1 d on c.id = d.parentId -- 第3级 left join t1 e on d.id = e.parentId -- 第4级 where a.displayname = 'Dec-Entry_Management' order by b.sortIndex,c.sortIndex ; |