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

news2024/11/27 1:21:23

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

数据分层的标准流向

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

  • 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.coloradmin.cn/o/1848856.html

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

相关文章

七、yolov8图像标注和模型训练(目标检测)

环境配置方法:点这里 环境配置完毕后,需要进行标注工作和训练任务,以下分两个部分进行。 图片标注 1、按照以下的格式,将图片放入images中。(不限制文件夹路径) 2、然后下载labelme标注工具&#xff0…

【分布式系列】分布式锁timeout了怎么办?

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

百度地图3d区域掩膜,最常见通用的大屏地图展现形式

需求及效果 原本项目使用的是百度地图3.0,也就是2d版本的那个地图,客户不满意觉得不够好看,让把地图改成3d的,但是我们因为另外的系统用的都是百度地图,为了保持统一只能用百度地图做 经过3天的努力,最后我终于把这个效果实现了,效果如下: 如何引用GL版本 为了实现…

DDK电通拧紧MFC-S060控制器过流维修

一、DDK伺服拧紧轴控制器过流故障的成因 1. 电源电压过低:当电源电压过低时,控制器可能会出现过流现象。 2. 负载过大:当负载过大时,DDK电通拧紧机控制器MFC-S060的电流也会随之增大,可能导致过流故障。 3. 控制器内部…

Java——IO流(一)-(6/8):字节流-FileInputStream 每次读取多个字节(示例演示)、一次读取完全部字节(方式一、方式二,注意事项)

目录 文件字节输入流:每次读取多个字节 实例演示 注意事项 文件字节输入流:一次读取完全部字节 方式一 方式二 注意事项 文件字节输入流:每次读取多个字节 用到之前介绍过的常用方法: 实例演示 需求:用每次读取…

Linux测试服务器端口是否打开

前言 服务器端口在计算机网络通信中扮演着至关重要的角色,其作用可以归纳如下: 区分不同的应用程序或服务: 服务器端口用于标识和定位不同应用程序或服务在服务器上的通信入口。 通过不同的端口号,服务器可以同时运行多个应用程…

为何人类需重复学习与记忆?人工智能与人类认知机制的融合 —— 生物体AI

零、 AI 与人的认知背景知识 人作为一种生物智能体,学习和记忆的过程往往需要重复与实践。这是因为人的大脑并非一次性就能完美地吸收和储存信息,而是通过反复的认知加工,将短期记忆转化为长期记忆,并通过深度理解、归纳总结以及…

【Research】Model Stealing

What is Model Stealing? Extract an approximation that of the target model that “closely matches” the original Accuracy? Fidelity? Funtional equivalence? Threat Models API Access Model extraction using: Prediction Vectors Labels Only Model Access …

Git 和 TortoiseGit 安装和配置(图文详解)

使用git,需要在Windows上需要安装两个软件:1)Git 2)TortoiseGit 若需要,可以下载TortoiseGit汉化语言包。 注意:tortoiseGit是在安装了Git的基础上运行的,所以需要先安装Git,后安装…

Java多线程基础知识-3

ReentrantLock: condition.await()方法之前必须调用lock.lock()代码获取同步监视器。类比: Object类中的wait()相当于Condition类中的await()Object类中wait(long timeout)相当于Condition类中await(long time, TimeUnit unit)方法Object类中notify()相…

QT基础 - 文件目录操作

目录 零. 简介 一. QDir 二. QFileSystemWatcher 三. 总结 零. 简介 在 QT 中,文件目录操作主要涉及到QDir类和QFileInfo类。 QDir类具有存取目录结构和内容的能力,可以操作目录、存取目录或文件信息、操作底层文件系统,还可以存取 Qt 的…

公司名称含有关商标名称可能涉及侵权!

有个朋友找到普推商标知产老杨,说有个人给他打电话,说他的公司名称侵权另一家的商标名称,让他要改下公司名称,不改就要告侵权,此前看到过许多,在一些省市注册公司时,如果公司名称与已注册商标相…

不懂就问,开通小程序地理位置接口有那么难吗?

小程序地理位置接口有什么功能? 若提审后被驳回,理由是“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通,建议完成接口开通后或移除接口相关内容后再进行后续版本提审”,那么遇到这种情况&#x…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《含氢综合能源系统多目标最优折中分布鲁棒低碳调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

MLP多层感知器:AI人工智能神经网络的基石

MLP 是指多层感知器(Multilayer Perceptron),是一种基础人工神经网络模型(ANN,Artificial Neural Network)。MLP 的核心是通过深度学习从大量数据中学习特征和模式,并训练参数。通过参数与激活函…

高精度乘法的实现

这是C算法基础-基础算法专栏的第九篇文章,专栏详情请见此处。 引入 上次我们学习了高精度加法的实现,这次我们要学习高精度减法的实现。 高精度乘法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移步至我的…

10.2 JavaEE——Spring MVC入门程序

要求在浏览器发起请求,由Spring MVC接收请求并响应,具体实现步骤如下。 一、创建项目 在IDEA中,创建一个名称为chapter10的Maven Web项目。 (一)手动设置webapp文件夹 1、单击IDEA工具栏中的File→“Project Structu…

【linux】shell脚本中设置字体颜色,背景颜色详细攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

通过开放解析智能分块提高 RAG 性能

如果要使用大型语言模型 ()LLMs 实现生成式 AI 解决方案,则应考虑使用检索增强生成 (RAG) 的策略来生成上下文感知提示LLM。在启用 LLM RAG 的预生产管道中发生的一个重要过程是删除文档文本,以便仅将文档中…

JupyterLab使用指南(八):更改JupterLab左侧默认打开目录

在JupyterLab中,默认打开路径通常是由其配置文件中的root_dir设置决定的。如果你没有特意设置这个配置项,JupyterLab可能会使用当前用户的主目录或者上一次关闭时的路径作为默认打开路径。 更改JupyterLab默认路径的操作在不同操作系统下大体相似&…