离线数仓DIM层和DWD层,联表后表和字段命名规则

离线数仓(七)【DIM 层开发】 DIM 层开发 阅读详情

文章目录

DIM层

  • 1个维度表约30个字段
    3个维度表约100个字段
CREATE EXTERNAL TABLE `ods_a_full` (
  `id` STRING COMMENT '主键',
  `name` STRING COMMENT '名称'
) COMMENT 'a信息'
PARTITIONED BY (`ymd` STRING);

CREATE EXTERNAL TABLE `ods_b_full` (
  `id` STRING COMMENT '主键',
  `name` STRING COMMENT '名称',
  `a_id` STRING COMMENT '关联a.id'
) COMMENT 'b信息'
PARTITIONED BY (`ymd` STRING);

CREATE EXTERNAL TABLE `ods_c_full` (
  `id` STRING COMMENT '主键',
  `name` STRING COMMENT '名称',
  `b_id` STRING COMMENT '关联b.id'
) COMMENT 'c信息'
PARTITIONED BY (`ymd` STRING);
  • 若
    a一对多b一对多c
    则
    c是最细维度
    则
    c左联b左联a

  • 左联后
    命名取最细粒度c
    前缀dim,全量维度表后缀full,拉链表后缀zip
    则全名为dim_c_full

  • 建表
    1、完全复制3个表的字段,不同表要隔开,顺序cba,c表主键字段排在字段第一
    2、不同维度表的字段名会重名(例如上面都有name),对此,所有字段前缀加上源表名,如:c_、b_、a_
    3、注释掉所有外键
    4、添加压缩和列式存储

CREATE EXTERNAL TABLE `dim_c_full` (
-- ods_c_full
  `c_id` STRING COMMENT 'c主键',
  `c_name` STRING COMMENT 'c名称',
  -- `c_b_id` STRING COMMENT '关联b.id'
-- ods_b_full
  `b_id` STRING COMMENT 'b主键',
  `b_name` STRING COMMENT 'b名称',
  -- `b_a_id` STRING COMMENT '关联a.id'
-- ods_a_full
  `a_id` STRING COMMENT 'a主键',
  `a_name` STRING COMMENT 'a名称'
) COMMENT 'c维度'
PARTITIONED BY (`ymd` STRING)
-- 列式存储和snappy压缩
STORED AS ORC
TBLPROPERTIES('orc.compress'='snappy');
  • SQL
    1、WITH AS结构
    2、JOIN结构
    3、SELECT FROM WHERE结构
WITH
c AS (
  SELECT
  FROM ods_c_full
  WHERE ymd='{ymd}'
),
b AS (
  SELECT
  FROM ods_b_full
  WHERE ymd='{ymd}'
),
a AS (
  SELECT
  FROM ods_a_full
  WHERE ymd='{ymd}'
)
SELECT
  -- ods_c_full

  -- ods_b_full

  -- ods_a_full

FROM c
LEFT JOIN b ON b.`id`=c.`b_id`
LEFT JOIN a ON a.`id`=b.`a_id`;
  • 最终sql
WITH
c AS (
  SELECT
    `id`
    ,`name`
    ,`b_id`
  FROM ods_c_full
  WHERE ymd='{ymd}'
),
b AS (
  SELECT
    `id`
    ,`name`
    ,`a_id`
  FROM ods_b_full
  WHERE ymd='{ymd}'
),
a AS (
  SELECT
    `id`
    ,`name`
  FROM ods_a_full
  WHERE ymd='{ymd}'
)
INSERT OVERWRITE TABLE dim_c_full PARTITION(ymd='{ymd}')
SELECT
  -- ods_c_full
  c.`id` AS c_id
  ,c.`name` AS c_name
  -- ods_b_full
  ,b.`id` AS b_id
  ,b.`name` AS b_name
  -- ods_a_full
  ,a.`id` AS a_id
  ,a.`name` AS a_name
FROM c
LEFT JOIN b ON b.`id`=c.`b_id`
LEFT JOIN a ON a.`id`=b.`a_id`;
  • 联表后校验
    若
    ods_c_full表为m行,联表后dim_c_full为n行
    则
    必须要满足m=n(若n>m,则说明笛卡儿积)

如果维度表只被用1次,可以试试视图?

CREATE OR REPLACE VIEW `view_dim_c_full` (
  -- ods_c_full
  `c_id` COMMENT 'c主键',
  `c_name` COMMENT 'c名称',
  -- ods_b_full
  `b_id` COMMENT 'b主键',
  `b_name` COMMENT 'b名称',
  -- ods_a_full
  `a_id` COMMENT 'a主键',
  `a_name` COMMENT 'a名称'
) COMMENT 'c维度' AS
WITH
c AS (
  SELECT
    `id`
    ,`name`
    ,`b_id`
  FROM ods_c_full
  WHERE ymd='{ymd}'
),
b AS (
  SELECT
    `id`
    ,`name`
    ,`a_id`
  FROM ods_b_full
  WHERE ymd='{ymd}'
),
a AS (
  SELECT
    `id`
    ,`name`
  FROM ods_a_full
  WHERE ymd='{ymd}'
)
SELECT
  -- ods_c_full
  c.`id` AS c_id
  ,c.`name` AS c_name
  -- ods_b_full
  ,b.`id` AS b_id
  ,b.`name` AS b_name
  -- ods_a_full
  ,a.`id` AS a_id
  ,a.`name` AS a_name
FROM c
LEFT JOIN b ON b.`id`=c.`b_id`
LEFT JOIN a ON a.`id`=b.`a_id`;

DWD层

ods层,d为事实表

CREATE EXTERNAL TABLE `ods_d_i` (
  `id` STRING COMMENT '主键',
  `name` STRING COMMENT '名称',
  `create_time` STRING COMMENT '创建时间',
  `c_id` STRING COMMENT '关联c.id'
) COMMENT 'd事实'
PARTITIONED BY (`ymd` STRING);

ods和dim层联表得到dwd层,主名用事实,表的全名dwd_d_i
事实表d字段名不变,维度表c的字段名沿用dim层的字段名
合并后,注释掉事实表的外键

CREATE EXTERNAL TABLE `dwd_d_i` (
-- 事实表
  `id` STRING COMMENT '主键',
  `name` STRING COMMENT '名称',
  `create_time` STRING COMMENT '创建时间',
  -- `c_id` STRING COMMENT '关联c.id',
-- 维度表
  `c_id` COMMENT 'c主键',
  `c_name` COMMENT 'c名称',
  `b_id` COMMENT 'b主键',
  `b_name` COMMENT 'b名称',
  `a_id` COMMENT 'a主键',
  `a_name` COMMENT 'a名称'
) COMMENT 'd事实'
PARTITIONED BY (`ymd` STRING);

事实表d左联维度表c
SQL结构

WITH
c AS (
  SELECT

  FROM dim_c_full
  WHERE ymd='{ymd}'
),
d AS (
  SELECT

  FROM ods_d_i
  WHERE ymd='{ymd}'
)
INSERT OVERWRITE TABLE dwd_d_i PARTITION(ymd='{ymd}')
SELECT

FROM d
LEFT JOIN c ON c.`c_id`=d.`c_id`;
9.数据仓库搭建之DIM层搭建 阅读详情

相关推荐

数据仓库中的DIM层-定义、设计与最佳实践

DIM层,全称Dimension层,是数据仓库中用于存储维度数据的层次。维度数据描述了业务实体的属性,如客户、产品、时间等。DIM层为事实数据提供上下文,使分析更加丰富和有意义。

一个8年大数据开发工程师的碎碎念 2765

[数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念

一. 各种名词解释 1.1 ODS是什么? ODS层最好理解,基本上就是数据从源表拉过来,进行etl,比如mysql 映射到hive,那么到了hive里面就是ods层。 ODS 全称是 Operational Data Store,操作数据存储.“面向主题的”,数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。但是,这一层面的数据却不等同于原始数据。在源数据装入这一层

白鸽 1万+

滴滴顺风车实时数仓架构解析:从数据分层到应用落地

本文深入解析滴滴顺风车实时数仓架构,从数据分层到应用落地的全流程。通过Flink、Kafka和Druid的黄金组合,实现秒级数据处理,支撑动态定价、安全监控和运营活动等核心场景。文章详细介绍了五层架构设计及实战优化经验,为实时数仓建设提供宝贵参考。

weixin_29079643的博客 652

离线数仓-03-数仓系统搭建(ODS,DIM,DWD,DWS,ADS)

主要是介绍数仓系统的基础概念和理论,以及基于理论进行的项目数仓搭建,主要是基于Hive搭建了ODS、DIM、DWD、DWS、ADS这几层。

迷雾总会解 2869

基于DAMA-DMBOK企业数据仓库建设规范文档

《企业数据仓库标准化建设指南》摘要 本规范基于DAMA数据管理知识体系,构建企业级数据仓库全流程标准。主要内容包括: 分层架构设计:采用ODS-DWD-DWB-DWS-ADS九层架构,明确各层定位与数据流转规则,禁止跨层调用。 标准化规范:制定严格的库表命名规则(如dwd_order_pay_detail_dd)、字段设计标准(金额用decimal(18,2))、数据类型规范等。 建模开发要求:实施三级建模体系(概念-逻辑-物理),规范事实表与维度表设计,明确ETL开发中的抽取、清洗和SQL编写标准。

ChengYanan的博客 672

基于DAMA-DMBOK的企业数据仓库建设规范文档

本文档制定了企业数据仓库建设的全流程规范,基于DAMA数据管理知识体系,涵盖架构设计、建模开发、命名规则、质量管理等核心内容。规范明确了数仓分层体系(ODS/DWD/DWS/ADS等)及各层职责,严格约束数据流转规则。详细规定了库表命名、分区策略、字段设计、ETL开发等标准,强调指标统一管理、主数据治理和质量管控。同时要求落实元数据管理、数据安全分级和权限最小化原则,确保数据资产标准化、可治理、可追溯。适用于企业各类数据仓库组件和参与角色,旨在解决数据孤岛、质量失控等问题,支撑数据分析应用长期稳定运行。

ChengYanan的博客 505

尚硅谷-离线数仓-笔记

数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中、整合多个信息源的大量数据,借助数据仓库的分析能力,企业可从数据中获得宝贵的信息进而改进决策。同时,随着时间的推移,数据仓库中积累的大量历史数据对于数据科学家和业务分析师也是十分宝贵的。数据仓库( Data Warehouse ),是为企业所有决策制定过程,提供所有系统数据支持的战略集合。通过对数据仓库中数据的分析,可以帮助企业,改进业务流程、控制成本、提高产品质量等。数据仓库,并不是数据的最终目的地,而是为数据最终的目的地做好准备。这些准备

林子茗的博客 2430

保姆级教学,教你在vscode和cursor上调试matlab!!!

保姆级教你如何在vscode或者cursor上面调试matlab

yang_upup的博客 2084

离线数仓 (八) --------- 数仓分层

数仓分层

在森林里麋了鹿 1559

学习笔记9--智能驾驶的功能安全设计之功能安全设计

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》。此专栏是关于《自动驾驶系统设计及应用》书籍的笔记.

FUXI_Willard 1797

Flink实战项目——城市交通实时监控平台

本项目是与公安交通管理综合应用平台、机动车缉查布控系统等对接的,并且基于交通部门现有的数据平台上,进行的数据实时分析项目。

yangwei2048的博客 839

day04_StarRocks统一数仓_业务开发

维度表(Dimension Table)是数据仓库中的一种特殊类型的表,主要用于描述事实表中的各个维度信息。以下是维度表的简单介绍: 定义维度表是对事实的描述信息,每一张维度表对应现实世界中的一个对象或者概念。特征1.范围很宽:维度表通常具有多个属性(列),例如商品信息表可能包括商品ID、名称、类别、价格等多个字段。2.行数相对较少:维度表的行数通常远小于事实表,一般小于10万条记录。3.内容相对固定:维度表的数据变动频率较低,适合进行编码和分类管理,例如日期维表、地理维表等。分类。

AGI爱好者_数仓&可视化&数据分析工程师_Vae’伯乐‘ 1322

CListCtrl控件的自绘操作

1、CListCtrl控件 :OwnerDraw Fixed = True,创建一个CListCtrl类的派生类CMyListCtrl,同时创建一个CMyListCtrl控件类型变量:CMyListCtrl m_cList;。 CListCtrl控件的自绘主要是CMyListCtrl类中重写DrawItem虚函数。 流程: 1.主对话框中CListCtrl的一些初始化操作: BOOL

小米的修行之路 3560

离线数据仓库建设

数据仓库的核心是展现层和提供优质的服务。ETL及其规范、分层等所做的一切都是为了一个更清晰易用的展现层。数仓分层、数仓建模、维度建模模式、维度建模详解、维度建模过程、数仓建设实战、ETL过程

Chlin.Rei的博客 761

【K8S系列】Kubernetes 中 Service 的流量不均匀问题【已解决】

在 Kubernetes 中,Service 是一种抽象,用于定义一组 Pod 的访问策略。当某些 Pod 接收的流量过多,而其他 Pod 的流量较少时,可能会导致负载不均衡。这种情况不仅影响性能,还可能导致某些 Pod 过载,影响应用的可用性。本文将详细分析此问题的原因及其解决方案。

颜淡慕潇 8740

Vue3 - [兼容PC和手机H5] 详细监听浏览器刷新 / 关闭 / 前进后退事件,用户点击关闭和刷新页面前 “拦截“ 操作并弹出提示框(实时监听用户关闭或刷新网页,触发时文字提醒并执行自定义操作)

vue3监听页面关闭和刷新,vue3中如何监听页面刷新和关闭事件,vue3中监听浏览器窗口关闭事件,并在窗口关闭进行操作,vue3怎么只在某个页面监听,其他页面不监听,vue3监听刷新和关闭怎么离开页面时注销释放,vue3怎么阻止浏览器前进和后退并提示,页面跳转离开后依旧可以监听到刷新和关闭,vue3怎么知道用户关闭了网页,vue3如何监听刷新网页操作并截断,vue3移动端手机h5网页手机网站监听浏览器刷新关闭,vue3当页面关闭或刷新时怎么提示用户离开不保存数据,vue3项目监听浏览器窗口或标签页关闭,并

🏆 前端领域优质创作者 1万+

数仓常用分层与维度建模

维度建模是一种在数据仓库和商业智能领域常用的设计方法。它主要用于组织和表示数据,让用户可以方便地进行查询、分析和报告。维度建模的核心思想是将数据组织成维度和事实两类。维度是描述业务过程中各种特征的属性,如时间、地点、产品、客户等(例如:产品详情表),而事实则是与这些维度相关联的数值型数据,如销售额、数量、利润等(例如:产品销售表)。在维度建模中,通常采用星型模型或雪花模型,下面将从这两个方面展开说说。

JIE的博客 --- moon_coder 2423

Vue3 - Vite运行打包时Uncaught ReferenceError: process is not defined(解决vue3+vite报错process is not defined)

vue3,vite,vue3+vite报错,process,UncaughtReferenceError:processisnotdefined,浏览器控制台报错processisnotdefined解决方法,vue3如何解决报错,vite报错怎么办,前端打包UncaughtReferenceError:processisnotdefined,npmrunbuild打包报错,vite打包时出现错误,vue3打包运行找不到process,热更新会报错UncaughtRefer

🏆 前端领域优质创作者 7739

数据仓库之DIM层

一、属性与度量 在介绍维表之前,我们首先要明白一点属性与度量的区别。属性是指是对象的性质或特性,它因对象而异,或随时间而变化,比如姓名和年龄。姓名因人而异,年龄会不断变化。而度量是对属性的标量刻画。并且度量具有统计意义,而属性并不具有统计意义,比如25岁的我在超市买了1瓶300ML农夫山泉,花了2元。这里的1瓶和2块就是对我买水的这个业务过程的度量。超市是(地理维度)属性,25岁是描述实体的属性,300ML是描述农夫山泉的属性。所以我们可以通过2个点来区分属性和度量,1.是否具有统计意义,2.是否会随..

jianghuaijie的博客 8130

Ardupilot无人船(车)mavros自主控制

rover 4.4。

超维空间科技的博客 3231

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数仓开发之DIM层

(1)定义类。

JiaXingNashishua的博客 5537

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

8. 数仓开发之 DIM 层

数仓开发之 DIM 层商品维度表 DIM 层设计要点: DIM 层的设计依据 : 维度建模理论,该层存储维度模型的维度表 DIM 层的数据存储格式 : orc 列式存储 + snappy 压缩 DIM 层表名的命名规范为 dim_表名_全量表或拉链表标识( full / zip ) 商品维度表 ...

记录点点滴滴 6799

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数据仓库

答:并行的,dw 层问:那其实对于同一个数据,这两个过程是串行的?ODS 全称是 Operational Data Store,操作数据存储.“面向主题的”,数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装入本层。概念:是数据仓库的细节数据层,是对STAGE层数据进行沉淀,减少了抽取的复杂性,同时ODS/DWD的信息模型组织主要遵循企业业务事务处理的形式,将各个专业数据进行集中,明细层跟stage层的粒度一致,属于分析的公共资源。

qq_44949002的博客 1488

【电商数仓】数仓搭建之DIM维度层(用户维度表[拉链表],首日、每日数据装载脚本)

拉链表,记录每条信息的生命周期,一旦一条记录的生命周期结束,就重新开始一条新的记录,并把当前日期放入生效开始日期。如果当前信息至今有效,在生效结束日期中填入一个极大值(如9999-99-99 )。表现的就是数据的变化过程。用户ID姓名手机号码开始日期结束日期1张三2019-01-012019-01-011张三2019-01-022019-01-091张三2019-01-109999-99-99。

weixin_43923463的博客 2594

【学习笔记】尚硅谷大数据项目之Flink实时数仓---DWD和DIM

https://www.bilibili.com/video/BV1Ju411o7f8?p=76&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=8d02a87c6f14c53617acc291fbe1efa8

prague6695的博客 2032

ods到dwd层数据关联位置信息的spark api

1 场景前提 我们将ods(贴源层)数据保存到(dwd)明细数据层时,要经过下面的操作 数据清洗 session切割 数据规范化处理 位置信息继承 生成一个全局唯一的guid 我们可用spark来读取表,转换成rdd来进行操作 2 编程spark 2.1 我们要先读取两张表: session分割后的日志表 tmp.mall_applog_session_split geohash地理位置参考表 dim_refgeo,作为维度表 除了两张表,还需要ip地址库,将该数据读取成字节文件,广播

m0_59887059的博客 1618
上一篇: Python工程师Java之路(s)时间戳转字符串
下一篇: 梳理MySQL数据逻辑和元数据的技巧
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值