数仓搭建(hive):DM搭建(数据集市层)

DM层 数据集市层 (Data Mart)
粒度上卷(Roll-up):
指的是沿着维度层次向上聚合汇总数据,从细粒度到粗粒度观察数据的操作。
示例
数仓的上一层DWS的是按日汇总
DM层基于DWS层主题日宽表上卷统计出按年,月,周的数据 >>用DWS层的宽表连接DWD层的时间维度表
创建DM层 : 建数据库>>建表
CREATE DATABASE if NOT EXISTS DM;
建表: 表结构和DWS层的表结构几乎一致, 只多了关于日期的维度字段

建表sql
CREATE TABLE dm.dm_sale(date_time string COMMENT '统计日期,不能用来分组统计' ,--记录哪一天干活time_type string COMMENT '统计时间维度:year、month、week、date(就是天day)',year_code string COMMENT '年code',year_month string COMMENT '年月',month_code string COMMENT '月份编码', day_month_num string COMMENT '一月第几天', dim_date_id string COMMENT '日期',year_week_name_cn string COMMENT '年中第几周',group_type string COMMENT '分组类型:store,trade_area,city,brand,min_class,mid_class,max_class,all',city_id string COMMENT '城市id',city_name string COMMENT '城市name',trade_area_id string COMMENT '商圈id',trade_area_name string COMMENT '商圈名称',store_id string COMMENT '店铺的id',store_name string COMMENT '店铺名称',brand_id string COMMENT '品牌id',brand_name string COMMENT '品牌名称',max_class_id string COMMENT '商品大类id',max_class_name string COMMENT '大类名称',mid_class_id string COMMENT '中类id', mid_class_name string COMMENT '中类名称',min_class_id string COMMENT '小类id', min_class_name string COMMENT '小类名称',-- =======统计=======sale_amt DECIMAL(38,2) COMMENT '销售收入',plat_amt DECIMAL(38,2) COMMENT '平台收入',deliver_sale_amt DECIMAL(38,2) COMMENT '配送成交额',mini_app_sale_amt DECIMAL(38,2) COMMENT '小程序成交额',android_sale_amt DECIMAL(38,2) COMMENT '安卓APP成交额',ios_sale_amt DECIMAL(38,2) COMMENT '苹果APP成交额',pcweb_sale_amt DECIMAL(38,2) COMMENT 'PC商城成交额',order_cnt BIGINT COMMENT '成交单量',eva_order_cnt BIGINT COMMENT '参评单量comment=>cmt',bad_eva_order_cnt BIGINT COMMENT '差评单量negtive-comment=>ncmt',deliver_order_cnt BIGINT COMMENT '配送单量',refund_order_cnt BIGINT COMMENT '退款单量',miniapp_order_cnt BIGINT COMMENT '小程序成交单量',android_order_cnt BIGINT COMMENT '安卓APP订单量',ios_order_cnt BIGINT COMMENT '苹果APP订单量',pcweb_order_cnt BIGINT COMMENT 'PC商城成交单量'
)
COMMENT '销售主题宽表'
ROW format delimited fields terminated BY '\t'
stored AS orc tblproperties ('orc.compress' = 'SNAPPY');
插入数据sql
WITH TEMP AS (SELECTD.year_code,D.year_month,D.month_code,D.day_month_num,D.dim_date_id,D.year_week_name_cn,city_id, city_name, trade_area_id, trade_area_name, store_id, store_name, brand_id, brand_name, max_class_id, max_class_name, mid_class_id, mid_class_name, min_class_id, min_class_name, sale_amt, plat_amt, deliver_sale_amt, mini_app_sale_amt, android_sale_amt, ios_sale_amt, pcweb_sale_amt, order_cnt, eva_order_cnt, bad_eva_order_cnt, deliver_order_cnt, refund_order_cnt, miniapp_order_cnt, android_order_cnt, ios_order_cnt, pcweb_order_cnt, dtFROM DWS.DWS_SALE_DAYCOUNT SINNER JOIN DWD.DIM_DATE DON S.dt = D.date_code
)
INSERT overwrite table dm.dm_sale
SELECTCURRENT_DATE AS DATE_TIME,CASEWHEN dim_date_id IS NOT NULL THEN 'DATE'WHEN year_week_name_cn IS NOT NULL THEN 'WEEK'WHEN month_code IS NOT NULL THEN 'MONTH'WHEN year_code IS NOT NULL THEN 'YEAR'END AS TIME_TYPE,year_code,year_month,month_code,day_month_num,dim_date_id,year_week_name_cn,CASEWHEN T.store_id IS NOT NULL THEN '店铺'WHEN T.trade_area_id IS NOT NULL THEN '商圈'WHEN T.city_id IS NOT NULL THEN '城市'WHEN T.min_class_id IS NOT NULL THEN '小类'WHEN T.mid_class_id IS NOT NULL THEN '中类'WHEN T.max_class_id IS NOT NULL THEN '大类'WHEN T.brand_id IS NOT NULL THEN '品牌'ELSE '日期'END AS GROUP_TYPE,city_id,city_name,trade_area_ID,trade_area_name,store_id,store_name,brand_id,brand_name,max_class_id,max_class_name,mid_class_id,mid_class_name,min_class_id,min_class_name,SUM(sale_amt),SUM(plat_amt),SUM(deliver_sale_amt),SUM(mini_app_sale_amt),SUM(android_sale_amt),SUM(ios_sale_amt),SUM(pcweb_sale_amt),SUM(order_cnt),SUM(eva_order_cnt),SUM(bad_eva_order_cnt),SUM(deliver_order_cnt),SUM(refund_order_cnt),SUM(miniapp_order_cnt),SUM(android_order_cnt),SUM(ios_order_cnt),SUM(pcweb_order_cnt)
FROM TEMP T
GROUP BY-- 所有 GROUPING SETS 中出现的列都要包含在 GROUP BY 中day_month_num,dim_date_id,city_id, city_name, trade_area_id, trade_area_name, store_id, store_name, brand_id, brand_name, max_class_id, max_class_name, mid_class_id, mid_class_name, min_class_id, min_class_name,year_code,year_month,month_code,year_week_name_cn
GROUPING SETS ((day_month_num, dim_date_id),(day_month_num, dim_date_id, city_id, city_name),(day_month_num, dim_date_id, city_id, city_name, trade_area_id, trade_area_name),(day_month_num, dim_date_id, city_id, city_name, trade_area_id, trade_area_name, store_id, store_name),(day_month_num, dim_date_id, brand_id, brand_name),(day_month_num, dim_date_id, max_class_id, max_class_name),(day_month_num, dim_date_id, max_class_id, max_class_name, mid_class_name, mid_class_id),(day_month_num, dim_date_id, max_class_id, max_class_name, mid_class_name, mid_class_id, min_class_id, min_class_name),(year_week_name_cn),(year_week_name_cn, city_id, city_name),(year_week_name_cn, city_id, city_name, trade_area_id, trade_area_name),(year_week_name_cn, city_id, city_name, trade_area_id, trade_area_name, store_id, store_name),(year_week_name_cn, brand_id, brand_name),(year_week_name_cn, max_class_id, max_class_name),(year_week_name_cn, max_class_id, max_class_name, mid_class_name, mid_class_id),(year_week_name_cn, max_class_id, max_class_name, mid_class_name, mid_class_id, min_class_id, min_class_name),(year_month, month_code),(year_month, month_code, city_id, city_name),(year_month, month_code, city_id, city_name, trade_area_id, trade_area_name),(year_month, month_code, city_id, city_name, trade_area_id, trade_area_name, store_id, store_name),(year_month, month_code, brand_id, brand_name),(year_month, month_code, max_class_id, max_class_name),(year_month, month_code, max_class_id, max_class_name, mid_class_name, mid_class_id),(year_month, month_code, max_class_id, max_class_name, mid_class_name, mid_class_id, min_class_id, min_class_name),(year_code),(year_code, city_id, city_name),(year_code, city_id, city_name, trade_area_id, trade_area_name),(year_code, city_id, city_name, trade_area_id, trade_area_name, store_id, store_name),(year_code, brand_id, brand_name),(year_code, max_class_id, max_class_name),(year_code, max_class_id, max_class_name, mid_class_name, mid_class_id),(year_code, max_class_id, max_class_name, mid_class_name, mid_class_id, min_class_id, min_class_name)
);
插入sql分析
查询DWS层的宽表>>确认连接字段dt的数据格式


查询时间维度表>>找到和DWS层的宽表的连接字段数据格式一样的字段>>查找新维度的相应字段
select * from DWD.DIM_DATE
在with as临时表里面把用DWS层的宽表连接DWD层的时间维度表, 内连接,连接字段dt(日)
在临时表查询语句中把目标表新增的时间维度的字段添加进去
目标表

临时表

INSERT overwrite table dm.dm_sale 是hive中全量插入的语法
在查询语句中把目标表新增的列实现
group_type string COMMENT '分组类型:store,trade_area,city,brand,min_class,mid_class,max_class,all',
枚举类型>>case when

group by 分组后面跟除了指标字段及 group_type 的所有字段(维度字段)
用grouping sets 写出需要的维度组合
相关文章:
数仓搭建(hive):DM搭建(数据集市层)
DM层 数据集市层 (Data Mart) 粒度上卷(Roll-up): 指的是沿着维度层次向上聚合汇总数据,从细粒度到粗粒度观察数据的操作。 示例 数仓的上一层DWS的是按日汇总 DM层基于DWS层主题日宽表上卷统计出按年,月,周的数…...
用LightRAG+智谱GLM-4提升政务对话精度:从知识图谱到精准问答的实战指南
在政务场景中,对话系统的精度至关重要,一个不准确的回答可能导致政策误解甚至行政失误。LightRAG结合智谱GLM-4,通过知识增强(如知识图谱、检索增强生成RAG和动态上下文)显著提升问答准确性。本文从代码实现到架构优化…...
用 Python 实现 DeepSeek R1 本地化部署
DeepSeek R1 以其出色的表现脱颖而出,不少朋友想将其本地化部署,网上基于 ollama 的部署方式有很多,但今天我要带你领略一种全新的方法 —— 使用 Python 实现 DeepSeek R1 本地化部署,让你轻松掌握,打造属于自己的 AI…...
动态内存分配算法对比:最先适应、最优适应、最坏适应与邻近适应
动态内存分配算法对比:最先适应、最优适应、最坏适应与邻近适应 在操作系统中,动态内存分配算法用于管理空闲内存块的分配和回收。最先适应算法(First Fit)、最优适应算法(Best Fit)和最坏适应算法&#x…...
GitHub基本操作及Git简单命令
GitHub简介 GitHub就是一个远程仓库,远程仓库可以理解为就是一个可以保存自己代码的地方,在实际开发当中一个项目往往是有多个人来共同协作开发完成的,那么就需要一个统一代码保存的地方,而GitHub就是起到一个共享和汇总代码的作…...
AI工作流+专业知识库+系统API的全流程任务自动化
我有点悲观,甚至很沮丧,因为AI留给普通人的机会不多了,这既是人类之间权力的斗争,也是硅基生命和碳基生命的斗争。AI自动化是无法避免的趋势,如果人类不能平权,那就只能跪下接受审判。 通过整合AI工作流、专…...
C++深拷贝\浅拷贝
C 中的深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是指在对象复制时,对象成员的复制方式不同。理解这两种拷贝构造方式非常重要,尤其是在涉及到动态内存分配和资源管理时。 浅拷贝(Shallow Copy&…...
本地文件共享——HFS
目录 1.介绍: 2.下载: 3.开始使用: 1.介绍: HFS(HTTP File Server)是一款轻量级的本地文件共享软件,主要用于快速搭建一个基于网页的临时文件服务器,支持通过浏览器直接上传或下载…...
第十二届先进制造技术与材料工程国际学术会议 (AMTME 2025)
重要信息 大会官网:www.amtme.org(了解会议,投稿等) 大会时间:2025年3月21-23日 大会地点:中国-广州 简介 2025年第十二届先进制造技术与材料工程 (AMTME 2025) 定于2025年3月21-23日在中国广州隆重举…...
【Alertmanager】alertmanager告警系统原理剖析与应用实战,应有尽有非常全面
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
C语言预处理学习笔记
1. 预处理器的功能 预处理器(Preprocessor)在编译C语言程序之前对源代码进行预处理。预处理指令以#号开头,主要包括文件包含、宏定义、条件编译等功能。 2. 文件包含 文件包含功能用于在一个文件中包含另一个文件的内容,通常用…...
jQuery AJAX 方法详解
jQuery AJAX 方法详解 引言 随着互联网技术的不断发展,前端开发领域的技术也在不断更新迭代。jQuery 作为一种广泛使用的前端JavaScript库,极大地简化了DOM操作和事件处理。在众多jQuery功能中,AJAX(Asynchronous JavaScript and XML)方法尤为突出,它允许我们在不重新加…...
C++之虚函数、虚函数表
C 虚函数、虚函数表详解与实践 C中虚函数是实现多态的重要技术,接下来将从汇编、以及gdb调试运行方面下手全面了解虚函数、虚函数表、以及虚函数调用。 原理初认识 一个由虚函数的类将会有一个虚函数表,且所有该类的实例化对象共享一个虚函数表。虚函…...
零基础学QT、C++(一)安装QT
目录 如何快速学习QT、C呢? 一、编译器、项目构建工具 1、编译器(介绍2款) 2、项目构建工具 二、安装QT 1、下载QT安装包 2、运行安装包 3、运行QT creator 4、导入开源项目 总结 闲谈 如何快速学习QT、C呢? 那就是项目驱动法&…...
Python SMTP 实现邮件发送功能
发送邮件的流程 登录我们邮箱, 书写接收者的邮箱, 书写题目与内容,添加附件, 点击发送。 邮件协议 smtp 是邮件发送的协议。pop3 是邮件接收的协议。 smtplib模块用法 创建协议对象:smtpObj smtplib.SMTP() 创建…...
低价窜货要如何管控
在竞争激烈的市场环境中,低价与窜货就像一对如影随形的“孪生兄弟”,给品牌的健康发展带来了极大的困扰。低价销售不仅压缩了合理的利润空间,破坏了市场的价格体系,还会引发恶性竞争,让整个市场陷入混乱无序的状态。而…...
如何看nginx.conf文件?
是的,你的理解是对的!在 Nginx 配置中,最内层的 location 确实是决定请求最终处理的“入口”。当请求进入 Nginx 时,Nginx 会根据请求的路径(即 URL)匹配 location 块,然后按照匹配的顺序逐层向…...
Linux中POSIX应用场景
Linux 提供了丰富的 POSIX(Portable Operating System Interface)标准接口,这些接口可以帮助开发者编写可移植、高效的应用程序。POSIX 标准定义了一系列系统调用和库函数,涵盖了文件操作、进程管理、线程管理、信号处理、同步机制…...
《动手学机器人学》笔记
目录 0.介绍1.概述|空间位置、姿态的描述(33)|《动手学机器人学》2.(2)-Robotics Toolbox①(V10.4)3.齐次坐标与变换矩阵4.一般形式的旋转变换矩阵5.(轴角法)…...
国产编辑器EverEdit - 文本编辑器的关键特性:文件变更实时监视,多头编辑不掉坑
1 监视文件变更 1.1 应用场景 某些时候,用户会使用多个编辑器打开同一个文件,如果在A编辑器修改保存,但是B编辑器没有重新打开,直接在B编辑器修改再保存,则可能造成在A编辑器中修改的内容丢失,因此&#x…...
化学蛋白质组学与药物靶点筛选:DARTS、LiP-MS、TPP、CETSA技术的深度解析
更多详情请看:LiP-MS药物靶点筛选技术 在药物研发的复杂过程中,药物靶点的筛选是关键环节之一。化学蛋白质组学技术的出现,为药物靶点筛选提供了强大的工具,化学蛋白质组学是一门研究细胞或组织中全部蛋白质的化学组成、结构、功…...
如何使用 Flutter DevTools 和 PerformanceOverlay 监控性能瓶颈
使用 Flutter DevTools 和 PerformanceOverlay 监控性能瓶颈:详细分析与实战 在开发 Flutter 应用时,性能问题可能会导致用户体验下降,比如页面卡顿、掉帧、内存泄漏等。为了定位和解决这些问题,Flutter 提供了强大的性能监控工具…...
为AI聊天工具添加一个知识系统 之113 详细设计之54 Chance:偶然和适配 之2
本文要点 要点 祖传代码中的”槽“ (占位符变量) 和 它在实操中的三种槽(占据槽,请求槽和填充槽, 实时数据库(source)中数据(流入 ETL的一个正序流程 行列并发 靶向整形 绑定变量 )…...
HTML5 面试题
1. HTML5 新增了哪些重要特性? 语义化标签:这些标签有助于提高页面的可读性和可维护性。多媒体支持:HTML5 引入了 和 标签,可以直接嵌入音频和视频文件,无需依赖插件。本地存储:引入了 localStorage 和 se…...
鸿蒙初学者学习手册(HarmonyOSNext_API14)_自定义动画API(@ohos.animator (动画) )
前言 在纯血鸿蒙中最具有用户特色的效果就是自定义的动画效果。在纯血鸿蒙中有多种定义方式,但是今天介绍的是ApI中的自定义动画。 注意: 动画本身具有生命周期,但是不支持在UIAbility的文件使用,简单而言就是不允许在UIAbility生命周期中…...
PINN求解一维burgers方程
PINN求解一维burgers方程 模型搭建网络与训练结果可视化对比实际结果 完整代码下载链接 PINN求解一维burgers方程 模型 搭建网络与训练 #########-------------- python求解一维burgers方程-------------------################## # -*- coding: utf-8 -*- import os os.envi…...
Linux系统配置阿里云yum源,安装docker
配置阿里云yum源 需要保证能够访问阿里云网站 可以先ping一下看看(阿里云可能禁ping,只要能够解析为正常的ip地址即可) ping mirrors.aliyun.com脚本 #!/bin/bash mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos…...
Android 动态加入Activity 时 manifest 注册报错解决。使用manifestPlaceholders 占位
需求如下: 项目 测试demo 有多个渠道,部分渠道包含支付功能,在主测试代码外,需要一个单独 Activity 调用测试代码。 MainActivityPayActivity渠道A包含不包含渠道B包含包含 因为支付功能需要引入对应的 moudule,因此…...
【找工作】C++和算法复习(自用)
文章目录 C头文件自定义排序函数stl 算法树状数组 自用随便记录 C 排序 stl 头文件 全能头文件: #include<bits/stdc.h>自定义排序函数 bool compare(const int &odd1,const int &odd2) {return odd1>odd2; }stl 枚举map map<int, strin…...
【相聚青岛】人工智能与材料国际学术会议即将召开
一、大会简介 人工智能与材料国际会议(ICAIM 2025) 官方网站:www.ic-aim.net 官方邮箱:icaim2025163.com 会议时间:2025年3.21-24 会议地点:中国青岛 会议检索:EI检索 截稿时间:2月…...
