当前位置: 首页 > news >正文

【hivesql 已知维度父子关系加工层级表】

这里写自定义目录标题

  • 1. 维度表示例
    • 1.1清单表
    • 1.2层级表
  • 2.从清单表加工层级表
    • 2.1 注意点
    • 2.2 加工方式(join)
    • 2.3 使用函数
  • 3.清单表字段加工
    • 3.1通过上级编码信息加工级别信息
    • 3.2 通过级别信息,加工上级编码信息
  • 4.创建维度表的一般注意点

1. 维度表示例

1.1清单表

用途:父子关系存储,前端展示数据列表(obj_list_info)
在这里插入图片描述
字段说明:

obj_cd、obj_nm:字段编码与名称
obj_cd_upper:上级编码,定义父子级关系
obj_lvl:级别,标识数据级别
last_flag:是否末级,定义数据是否有子级
is_del:数据状态,标记数据是否生效
load_dt:etl日期

1.2层级表

用途:层级树关系存储,前端展示层级树(obj_lvl_info)
在这里插入图片描述
字段说明:

obj_cd、obj_nm:末级数据编码与名称
obj_cd_lvl1:一级编码
obj_nm_lvl1:一级名称
obj_cd_lvl2:二级编码
obj_nm_lvl2:二级名称
...
is_del:数据状态,标记数据是否生效
load_dt:etl日期

2.从清单表加工层级表

2.1 注意点

①当清单表和层级表需要同时加工时,选择先创建清单表,再从清单表加工出层级表。
原因是,当源数据变更,只需要维度清单表的加工逻辑即可,不需要维度层级表。
②数据格式,从清单表的纵表格式转换为层级表的宽表格式(数据结构变化)

2.2 加工方式(join)

关联字段:编码信息obj_cd、obj_cd_upper,子级obj_cd_upper与父级obj_cd做关联
上级编码obj_cd_upper缺失时,寻找层级编码间的规律,截取编码相同部分做做关联字段
在这里插入图片描述
注意点:
① 关联字段:层级数据间的挂靠,一级数据下挂二级数据,二级数据下挂三级数据,…;
② 在层级树中找出最末级数据:若没有这两个字段,外部表使用最末级数据时,需要通过关联每一级别数据去找;
③ 1表示删除,0表示生效。数据状态不是直接取oli_4.is_del的数据,还取决于其父级及以上数据的状态。达到效果为,若父级状态为1,则子级状态全部同步为1,即父级有管理子级数据的权限。
另外:
若上级编码缺失,注意观察层级编码间的规律,构造关联字段
在这里插入图片描述

2.3 使用函数

-- 返回包括expression在内的所有参数中的第一个非空表达式(按顺序)
-- 若所有表达式都为空值,返回NULL
coalesce (expression, value1, value2, ..., valuen)          
-- 返回列表中最大值
greatest (n1, n2, ...)
-- 返回列表中最小值
least (n1, n2, ...)

3.清单表字段加工

(上级编码obj_cd_upper,级别obj_lvl,是否末级last_flag)
数据质量差或关键字段信息没有维护好的情况下,需要进行逻辑加工
上级编码obj_cd_upper和级别字段obj_lvl相互联系,任一个缺失,可通过另一个字段加工。

3.1通过上级编码信息加工级别信息

(表:obj_list_info_1)
在这里插入图片描述
**解析:**由于上级编码信息是准确的,最上级数据能够确定,同样是层级数据挂靠思路,一级数据下挂二级数据,二级数据下挂三级数据.
一般可以采用下面思路:
在这里插入图片描述
① 先找出一级数据信息
②得到一级数据的obj_cd_lvl1,凡是上级编码为obj_cd_lvl1的,必为二级数据;同理,得到二级数据obj_cd_lvl2,凡是上级编码为obj_cd_lvl2的,必为三级数据;迭代…
③最后将找出的每一级数据union all,形成清单表(纵表)的格式。
优点:易于理解;缺点:临时表层层嵌套,容易出错,重复代码多,有待优化。
优化方式:
最终是纵表的表结构,但需要分别对每个层级添加级别标识,宽表的结构是很合适的。可以借助行转列思想,先将信息加工到一行,再使用炸裂函数,转换为列,形成纵表格式。(注意每个层级之间是如何关联的,这样关联能达到的效果是什么。)
① 对每一层级添加级别标识,宽表格式
在这里插入图片描述
② 第①步得到的是宽表格式(多个列),进行列转行,将多列信息放到一行
首先将同级信息合并
在这里插入图片描述
然后将所有信息合并
在这里插入图片描述
③ 使用炸裂函数炸开,行转列,去重,形成纵表的格式
在这里插入图片描述
总结说明:
① 将信息合并到一行,并使用explode函数炸开(行转列),使用lateral view侧写函数,查看炸裂前后的字段
② 需要的信息在炸裂后的字段total_info里面,对其进行切片split,选出字段内容
③ 在层级不平衡的情况下,如实际数据中,部分3级数据没有子级,上面的处理逻辑中,其对应子级会为空,需要将这部分空值去掉。最后需要去重。得到纵表格式。

3.2 通过级别信息,加工上级编码信息

(表:obj_list_info_2)
在这里插入图片描述
思路同上,只是由于没有上级编码信息,需要根据级别找层级编码间的规律,构造关联字段。
在这里插入图片描述
总结说明:
① 将信息合并到一行,并使用explode函数炸开(行转列),使用lateral view侧写函数,查看炸裂前后的字段
② 需要的信息在炸裂后的字段total_info里面,对其进行切片split,选出字段内容
③ 在层级不平衡的情况下,如实际数据中,部分3级数据没有子级,上面的处理逻辑中,其对应子级会为空,需要将这部分空值去掉。最后需要去重。得到纵表格式。

4.创建维度表的一般注意点

(1)维度表不再关联其他表,因此码值及对应中文名称需要完整
(2)为保证数据有更新修改记录,添加数据使用状态(is_del字段)
(3)维度数据处理时,注意观察编码规律,通过规律识别维度层级间关系。如:
①父子级编码的前几位相同;
②相同编码结构的数据,一般为同一级别

http://www.xdnf.cn/news/1115659.html

相关文章:

  • Pytorch实现感知器并实现分类动画
  • JAVA并发——什么是Java的原子性、可见性和有序性
  • git实操
  • composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
  • 【基础算法】倍增
  • 【开源项目】拆解机器学习全流程:一份GitHub手册的工程实践指南
  • 从儿童涂鸦到想象力视频:AI如何重塑“亲子创作”市场?
  • ABP VNext + 多级缓存架构:本地 + Redis + CDN
  • Linux的 iproute2 配置:以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)、网桥(Bridge)笔记250713
  • Prometheus 第一篇:快速上手
  • Vue配置特性(ref、props、混入、插件与作用域样式)
  • 第三章-提示词-解锁Prompt提示词工程核销逻辑,开启高效AI交互(10/36)
  • Linux|服务器|二进制部署nacos(不是集群,单实例)(2025了,不允许还有人不会部署nacos)
  • 学习C++、QT---23(QT中QFileDialog库实现文件选择框打开、保存讲解)
  • DVWA靶场通关笔记-XSS DOM(Medium级别)
  • 教程:如何查看浏览器扩展程序的源码
  • 飞算 JavaAI 智能编程助手:颠覆编程旧模式,重构开发生态
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十三课——图像浮雕效果的FPGA实现
  • JAVA生成PDF(itextpdf)
  • 互联网大厂Java面试:从Spring Boot到微服务的场景应用
  • HTML 初体验
  • HarmonyOS组件/模板集成创新活动-元服务小云体重管理引入案例(步骤条UI组件)
  • HarmonyOS组件/模板集成创新活动-开发者工具箱
  • 【设计模式】备忘录模式(标记(Token)模式)
  • 为什么玩游戏用UDP,看网页用TCP?
  • 融合开源AI大模型与MarTech:AI智能名片与S2B2C商城小程序源码赋能数字化营销新生态
  • 【QT】使用QSS进行界面美化
  • 【Linux | 网络】应用层
  • Rust赋能文心大模型4.5智能开发
  • Leetcode 3615. Longest Palindromic Path in Graph