当前位置: 首页 > 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.dtcms.com/a/277324.html

相关文章:

  • C++每日刷题day2025.7.13
  • 什么是RAG(Retrieval-Augmented Generation)?一文读懂检索增强生成
  • RabbitMQ面试精讲 Day 2:RabbitMQ工作模型与消息流转
  • 12.I/O复用
  • 前端性能与可靠性工程:资源优化 - 加载性能的“低垂果实”
  • 从零开始学习深度学习-水果分类之PyQt5App
  • SpringBoot集成Redis、SpringCache
  • C++ 强制类型转换
  • 【操作系统】strace 跟踪系统调用(一)
  • (LeetCode 每日一题) 2410. 运动员和训练师的最大匹配数(排序、双指针)
  • es里为什么node和shard不是一对一的关系
  • Augment AI 0.502.0版本深度解析:Task、Guidelines、Memory三大核心功能实战指南
  • 将 NumPy 数组展平并转换为 Python 列表
  • 1.1.5 模块与包——AI教你学Django
  • OpenLayers 入门指南【二】:坐标系与投影转换
  • 把 DNA 当 PCIe:一条 365 nt 链实现 64 Gbps 片上光互连——基于链式 Förster 共振的分子级波分复用链路
  • 理解 Robots 协议:爬虫该遵守的“游戏规则”
  • MySQL逻辑删除与唯一索引冲突解决
  • M00224-小范围疫情防控元胞自动机模拟matlab
  • 【unitrix】 5.1 第二套类型级二进制数基本结构体(types2.rs)
  • 深入解析Hadoop架构设计:原理、组件与应用
  • OpenLayers使用
  • (2)从零开发 Chrome 插件:实现 API 登录与本地存储功能
  • 音视频学习(三十八):像素与位深
  • 打破并发瓶颈:虚拟线程实现详解与传统线程模型的性能对比
  • QuickUnion优化及Huffman树
  • JS红宝书pdf完整版
  • JAVA生成PDF(itextpdf)
  • 为什么玩游戏用UDP,看网页用TCP?
  • [2025CVPR]GNN-ViTCap:用于病理图像分类与描述模型