数仓中数据分层的标准流向解读

在大数据开发中,数据分层是一个至关重要的概念。合理的数据分层可以有效地提升数据处理的效率和质量。本文将详细介绍数据分层的标准流向和相关注意事项,并结合实际应用进行说明。

数据分层的标准流向

根据行业标准,数据分层的标准流向如下:

  • ODS (Operational Data Store): 操作型数据存储,主要用于数据的初步清洗和整合。
  • DWD (Data Warehouse Detail): 数据仓库明细层,存储经过清洗和转换的详细数据。
  • DWS (Data Warehouse Summary): 数据仓库汇总层,存储汇总和聚合后的数据。
  • DM (Data Mart): 数据集市,面向具体业务场景提供定制化的数据服务。

需要注意的是,在这一标准流向中,禁止出现反向依赖,即下游数据层不应反向依赖上游数据层的数据。

维度数据流向

对于维度数据,可以从 DWD 流向 DIM 或者从 ODS 流向 DIM。在使用 ODS 直接到 DIM 的情况下,必须确保数据质量足够高,以避免数据误差的累积和放大。

数据引用和写入规则

DIM、DWS 和 DM 可以往自身分层写入数据,如不同粒度的数据写入。具体的引用和写入规则如下表所示:

写入 \ 引用ODSDWDDWSDMDIMTMP
ODS
DWD
DWS
DM
DIM
TMP
数据流向示意图

为了更直观地展示数据流向,以下是数据流向的示意图:

ODS
含缺省调整
DWD
DWS
DIM
DM
TMP
分析
接口
队列

更详细的流向:
image.png

数据分层标准流向示例

为了更好地理解数据分层的标准流向,下面我们举几个实际应用中的例子来说明这些概念的具体使用场景。

示例 1:电商平台的订单数据处理
  1. ODS 层

    • 电商平台每天会有大量的订单生成,这些原始订单数据首先会被存储到 ODS 层。此时的数据还未经过任何清洗和转换,直接从业务系统导出。
    CREATE TABLE ods_order (order_id STRING,user_id STRING,product_id STRING,order_date STRING,order_amount DOUBLE
    );
    
  2. DWD 层

    • 订单数据从 ODS 层进入 DWD 层,在这里进行数据清洗、转换,去除重复数据,格式化日期等操作,以保证数据的准确性和一致性。
    CREATE TABLE dwd_order (order_id STRING,user_id STRING,product_id STRING,order_date DATE,order_amount DOUBLE
    );INSERT INTO dwd_order
    SELECT order_id,user_id,product_id,TO_DATE(order_date, 'yyyy-MM-dd') AS order_date,order_amount
    FROM ods_order
    WHERE order_id IS NOT NULL;
    
  3. DWS 层

    • 在 DWS 层,对订单数据进行聚合和汇总,生成每日、每月的销售报表等。
    CREATE TABLE dws_daily_sales (sale_date DATE,total_sales DOUBLE
    );INSERT INTO dws_daily_sales
    SELECT order_date AS sale_date,SUM(order_amount) AS total_sales
    FROM dwd_order
    GROUP BY order_date;
    
  4. DM 层

    • 最后,在 DM 层,为业务部门提供具体分析需求的数据,如按用户、按产品类别的销售情况等。
    CREATE TABLE dm_user_sales (user_id STRING,total_sales DOUBLE
    );INSERT INTO dm_user_sales
    SELECT user_id,SUM(order_amount) AS total_sales
    FROM dwd_order
    GROUP BY user_id;
    
示例 2:金融机构的客户行为分析
  1. ODS 层

    • 客户的原始交易记录会首先进入 ODS 层,这些数据来自不同的业务系统,包括 ATM 交易、POS 交易、网上银行交易等。
    CREATE TABLE ods_transaction (transaction_id STRING,customer_id STRING,transaction_date STRING,transaction_amount DOUBLE,transaction_type STRING
    );
    
  2. DWD 层

    • 在 DWD 层,对交易数据进行清洗和标准化,去除重复数据,标准化交易类型等。
    CREATE TABLE dwd_transaction (transaction_id STRING,customer_id STRING,transaction_date DATE,transaction_amount DOUBLE,transaction_type STRING
    );INSERT INTO dwd_transaction
    SELECT transaction_id,customer_id,TO_DATE(transaction_date, 'yyyy-MM-dd') AS transaction_date,transaction_amount,transaction_type
    FROM ods_transaction
    WHERE transaction_id IS NOT NULL;
    
  3. DWS 层

    • 在 DWS 层,对交易数据进行汇总和分析,生成每日、每月的交易统计报表。
    CREATE TABLE dws_monthly_transaction (transaction_month STRING,total_transactions INT,total_amount DOUBLE
    );INSERT INTO dws_monthly_transaction
    SELECT DATE_FORMAT(transaction_date, 'yyyy-MM') AS transaction_month,COUNT(transaction_id) AS total_transactions,SUM(transaction_amount) AS total_amount
    FROM dwd_transaction
    GROUP BY DATE_FORMAT(transaction_date, 'yyyy-MM');
    
  4. DM 层

    • 在 DM 层,为风险管理部门提供客户行为分析的数据,如高频交易客户名单、异常交易行为分析等。
    CREATE TABLE dm_high_freq_customers (customer_id STRING,transaction_count INT
    );INSERT INTO dm_high_freq_customers
    SELECT customer_id,COUNT(transaction_id) AS transaction_count
    FROM dwd_transaction
    GROUP BY customer_id
    HAVING COUNT(transaction_id) > 100;
    

通过以上示例,可以清晰地看到数据从 ODS 层经过 DWD 层、DWS 层到 DM 层的流转过程。在每一层,数据都经过了一定的处理和转换,以适应不同的业务需求和分析场景。严格遵循数据分层的标准流向,可以有效地提高数据处理的效率和质量,保障数据的准确性和一致性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/31768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS开发学习日记(十五)

目录 App启动过程及生命周期 App的启动 UIApplication UIApplicationDelegate 通过App生命周期回调实现启动页 闪屏的实现 简单实现闪屏功能 App启动过程及生命周期 App的启动 main函数前 动态链接 / 二进制文件加载 / runtime / 类的加载 ...... main函数 int main(int…

事件驱动架构详解:触发与响应构建高效系统

目录 前言1. 事件驱动架构概述1.1 什么是事件1.2 事件驱动架构的核心概念 2. 事件驱动架构的实现2.1 基于消息队列的实现2.2 基于发布-订阅模式的实现2.3 基于流处理的实现 3. 事件驱动架构的优势3.1 松耦合性3.2 可扩展性3.3 异步处理3.4 灵活性 4. 事件驱动架构的应用场景4.1…

镜像发布至dockerHub

1、login 没有账号的话去注册一个 https://hub.docker.com docker login 输入账号密码和账号2、修改镜像名格式 可以直接招我的修改 格式为你的 hub名/镜像名 3、推送

svm和决策树基本知识以及模型评价以及模型保存

svm和决策树基本知识以及模型评价以及模型保存 文章目录 一、SVM1.1,常用属性函数 二、决策树2.1,常用属性函数2.2,决策树可视化2.3,决策树解释 3,模型评价3.1,方面一(评价指标)3.2&…

Android基于MediaBroswerService的App实现概述

mSession.setPlaybackState(mStateBuilder.build()); // 5. 关联 SessionToken setSessionToken(mSession.getSessionToken()); } } 根据包名做权限判断之后,返回根路径 Override public BrowserRoot onGetRoot(String clientPackageName, int clientUid, Bundl…

如何生成protobuf文件

背景 protobuf是一种用于序列化结构数据的工具,实现数据的存储与交换,与编程语言和开发平台无关。 序列化:将结构数据或者对象转换成能够用于存储和传输的格式。 反序列化:在其他的计算环境中,将序列化后的数据还原为…

Vue3.4新增的defineModel的使用

define-model的作用 在3.3及之前的版本,父子组件之间的通讯,一直都是靠props(父传子)和emit(子传父)来实现。而define-model整合了这两种方法,只需要在父组件中定义define-model的方法&#xf…

GIT回滚

1. 使用 git revert git revert 命令会创建一个新的提交,这个提交会撤销指定提交的更改。这通常用于公共分支(如 main 或 master),因为它不会重写历史。 git revert HEAD # 撤销最近的提交 # 或者指定一个特定的提交哈希值 …

Net开源项目推荐-WPF控件样式篇

Net开源项目推荐-WPF控件样式篇 HandyControlWPFDeveloperswpf-uidesignLive-ChartsAvalonDock HandyControl WPF控件库,比较常用的WPF开源控件库,对WPF原有控件样式都进行了重写和扩展,也增加了许多特别的控件,非常好用 github仓库&#x…

Day14—基于Langchain-chatchat搭建本地智能

一、基于Langchain-chatchat搭建本地智能 知识问答系统 1、项目介绍 基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现,开一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知…

Claude3.5:编码螃蟹游戏就是这么轻松

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)则…

爱眼小妙招:台灯怎么选?学生如何正确使用台灯?

视力是心灵的窗户,尤其对于儿童来说更为重要。然而,随着现代生活方式的改变,孩子们面临越来越多的视力挑战。据统计,在近视学生中,近10%的人患有高度近视,而这一比例随年级的增加而逐渐上升。从幼儿园的小小…

电子杂志制作工具推荐:让你轻松成为编辑大人

在这个数字化的时代,电子杂志已经成为信息传播的重要载体。它不仅能够满足人们对阅读的需求,还能够提供更加丰富、互动的阅读体验。因此,掌握一款好用的电子杂志制作工具,已经成为每个编辑大人的必备技能。接下来告诉大家一个超简…

设置浏览器互不干扰

目录 一、查看浏览器文件路径 二、 其他盘新建文件夹Cache 三、以管理员运行CMD 四、执行命令 一、查看浏览器文件路径 chrome://version/ 二、 其他盘新建文件夹Cache D:\chrome\Cache 三、以管理员运行CMD 四、执行命令 Mklink /d "C:\Users\Lenovo\AppData\Loca…

计算机系统基础(一)

1. 引入——从源程序到可执行文件 了解高级语言编写的代码在后台是如何被编译并运行的 首先我们会编写一段代码&#xff0c;例如 #include<stdio.h>int main(){printf("hello world!\n");return 0; } 并把它命名为hello.c文件 预处理阶段 接下来通过命令…

WPF/C#:在DataGrid中显示选择框

前言 在使用WPF的过程中可能会经常遇到在DataGrid的最前或者最后添加一列选择框的需求&#xff0c;今天跟大家分享一下&#xff0c;在自己的项目中是如何实现的。 整体实现效果如下&#xff1a; 如果对此感兴趣&#xff0c;可以接下来看具体实现部分。 实践 假设数据库中的…

【EndNote】EndNote进行文献管理可能遇到的问题和解决方案

一、安装GB/T7714-2015(numberic)文献style windows&#xff1a;https://blog.csdn.net/qq_36235935/article/details/115629694 mac os&#xff1a;Mac版Endnote 20导入中文参考格式Chinese Std GBT7714 (numeric)-CSDN博客 安装完之后需要调整Author Name格式&#xff1a;…

Python文件与面向对象知识点

目录 文件的基本概念 文件的读取 文件的追加 文件的写入 with语句 知识总结 面向对象的基本概念 类和实例 对象的属性和方法 类属性与方法 面向对象的三大特性 知识总结 文件的基本概念 文件的读取 文件的追加 文件的写入 with语句 知识总结 面向对象的基本概念 …

docker拉取镜像一直在加载中,且会提示error pulling image configuration

1、增加国内镜像配置 #查看文件内容 sudo vim /etc/docker/daemon.json如果没有该文件&#xff0c;则需要在/etc/docker中创建一个daemon.json 文件 创建文件 vim daemon.json#文件中添加以下json {"registry-mirrors":["https://docker.mirrors.ustc.edu.cn/…

第六十六天打卡 | 卡码网101 孤岛的总面积、卡码网102 沉没孤岛、卡码网103 水流问题、卡码网104 建造最大岛屿

卡码网101 孤岛的总面积 这一题在昨天的基础上&#xff0c;将比较得出最大孤岛面积的逻辑改为统计所有孤岛面积之和的逻辑即可。 最近做项目的时候也发现&#xff0c;很多时候代码逻辑能够复用最好就不要再自己写&#xff0c;防止出错&#xff0c;当然刷代码题的时候不…