数仓搭建(hive):DWB层(基础数据层)

维度退化:  通过减少表的数量和提高数据的冗余来优化查询性能。

在维度退化中,相关的维度数据被合并到一个宽表中,减少了查询时需要进行的表连接操作。例如,在销售数据仓库中,客户信息、产品信息和时间信息等维度可能会被合并到一个单一的销售事实表中。这样,查询时只需访问一个表,而不必连接多个表,从而提高了查询效率。

做宽表的原因:

把多张表内容合并到一张表>>提升查询速度

弊端: 占更多的内存

数仓的本质>>用空间换时间

做主题宽表

1.业务人员告知需要的字段>>直接create table

2.业务人员没有告知

先确定需要用来做宽表的表>>事实表/与主题相关>>确认主表副表(left join)>>重复字段只保留主表的字段

很少选择第二种>>因为不能写注释; 只能建普通表,不能建分区表/分桶表

示例

步骤: 

1.建DWB数据库

create database dwb;

2.建相应的主题宽表:(比如创建订单明细宽表)

先从事实表里面确认所需要的表(参照数据字典表了解表的实际内容)

t_goods_evaluation 订单评价表(主题相关)

t_goods_evaluation_detail 商品评价表(无关主题)

数据字典表(中英对照)

把订单主表(t_shop_order)确定为表连接的主表,其余为副表

主表的确定

业务需求分析

  • 核心业务实体:明确业务需求,找出核心业务实体,如订单、客户、产品等。

  • 高频查询:分析高频查询,确定哪些表最常被访问。

 数据关系分析

  • 主外键关系:通过主外键关系确定主表,通常主表包含核心业务数据,其他表通过外键关联。

  • 数据粒度:选择粒度最细的表作为主表,确保宽表包含最详细的信息。

 数据量分析

  • 数据量大小:选择数据量较大的表作为主表,避免宽表数据量过大。

  • 更新频率:选择更新频率较低的表作为主表,减少宽表维护成本。

工具支持

  • 数据建模工具:使用数据建模工具分析表关系,辅助确定主表。

  • ETL工具:利用ETL工具自动化宽表构建,减少手动操作。

表字段的确定

主表字段全部保留

订单主表(t_shop_order)

副表字段

fact_shop_order_group (订单组表)

id是自增列,用来确保数据的唯一性(不保留)

order_id 用来和主表关联的字段,主表已存在(不保留)
其他字段,和主表重复(不保留)

t_shop_order_address_detail(订单副表)

id是和主表的关联字段(不保留)

其余字段,和主表重复(不保留)

t_order_pay(订单支付表)

 t_refund_order (退款订单表)

t_order_settle(订单结算表)

t_shop_order_goods_details(订单商品快照表)

id自增列主键(不保留)

order_id 主表关联字段, 主表已经存在(不保留)

shop_store_id  店铺id, buyer_id   买家id 在主表中已存在(不保留)

其他字段, 主表中已经存在(不保留)

t_goods_evaluation(订单评价表)

 user_id 评论人id=主表的buyer_id  买家id; 主表已经存在(不保留)

t_order_delievery_item(配送信息表 )

id 自增列(不保留)

shop_order_id 订单id, 和主表关联的字段, 主表已经存在(不保留)

refund_order_id 在副表t_shop_order_goods_details(订单商品快照表)已经存在(不保留)

shop_store_id 店铺id, buyer_id  买家id  在主表已经存在(不保留)

circle_master_user_id 在副表t_order_settle(订单结算表)已经存在(不保留)

dispatcher_user_id 在副表t_order_settle(订单结算表)已经存在(不保留)

sql

create table dwb.dwb_order_detail
as 
select
    o.id
    ,o.order_num
    ,o.buyer_id
    ,o.store_id
    ,o.order_from
    ,o.order_state
    ,o.create_date
    ,o.finnshed_time
    ,o.is_settlement
    ,o.is_delete
    ,o.evaluation_state
    ,o.way
    ,o.is_stock_up
    ,o.create_user
    ,o.create_time
    ,o.update_user
    ,o.update_time
    ,o.is_valid
    ,og.group_id
    ,og.is_pay
    ,od.order_amount
    ,od.discount_amount
    ,od.goods_amount
    ,od.is_delivery
    ,od.buyer_notes
    ,od.pay_time
    ,od.receive_time
    ,od.delivery_begin_time
    ,od.arrive_store_time
    ,od.arrive_time
    ,op.order_pay_amount
    ,ro.apply_date
    ,ro.modify_date
    ,ro.refund_reason
    ,ro.refund_amount
    ,ro.refund_state
    ,ro.refuse_refund_reason
    ,ro.refund_goods_type
    ,ro.refund_shipping_fee
    ,os.settlement_create_date
    ,os.settlement_amount
    ,os.dispatcher_user_id
    ,os.dispatcher_money
    ,os.circle_master_user_id
    ,os.circle_master_money
    ,os.plat_fee
    ,os.store_money
    ,os.status
    ,os.note
    ,os.settle_time
    ,os.first_commission_user_id
    ,os.first_commission_money
    ,os.second_commission_user_id
    ,os.second_commission_money
    ,ogd.goods_id
    ,ogd.buy_num
    ,ogd.goods_price
    ,ogd.total_price
    ,ogd.goods_name
    ,ogd.goods_image
    ,ogd.goods_specification
    ,ogd.goods_weight
    ,ogd.goods_unit
    ,ogd.goods_type
    ,ogd.refund_order_id
    ,ogd.goods_brokerage
    ,ogd.is_refund
    ,e.geval_scores
    ,e.geval_scores_speed
    ,e.geval_scores_service
    ,e.geval_isanony
    ,odi.dispatcher_order_type
    ,odi.dispatcher_order_state
    ,odi.order_goods_num
    ,odi.delivery_fee
    ,odi.distance
    ,odi.dispatcher_code
    ,odi.receiver_name
    ,odi.receiver_phone
    ,odi.sender_name
    ,odi.sender_phone
from dwd.fact_shop_order o
left join dwd.fact_shop_order_group og
    on o.id = og.order_id
left join dwd.fact_shop_order_address_detail od
    on o.id = od.id
left join dwd.fact_order_pay op
    on og.group_id = op.group_id
left join dwd.fact_refund_order ro
    on o.id = ro.order_id
left join dwd.fact_order_settle os
    on os.order_id = o.id
left join  dwd.fact_shop_order_goods_details ogd
    on ogd.order_id = o.id
left join dwd.fact_goods_evaluation e
    on e.order_id = o.id
left join  dwd.fact_order_delievery_item odi
    on odi.shop_order_id = o.id;

宽表查询

select * from  dwb.dwb_order_detail; 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多模态特征提取与融合助力高光谱+LiDAR数据分类性能飞跃

目录 论文解读 总体架构 CMIIE 模块工作模式 MLFFC模块工作模式 论文解读 提出了一种新的多模态特征提取模块CMIIE,可以捕获高光谱和LiDAR数据之间的互补信息。设计了一个多层特征融合分类模块MLFFC,通过对不同层级的特征进行融合来提高分类性能。使用对抗学习策略来指导网…

Flutter 正在推进全新 PlatformView 实现 HCPP, 它又用到了 Android 上的什么黑科技

跨平台开发里的 PlatformView 实现一直是一个经久不衰的话题,在之前的 《深入 Flutter 和 Compose 的 PlatformView 实现对比》 我们就详细聊过 Flutter 和 Compose 在 PlatformView 实现上的异同之处,也聊到了 Compose 为什么在相同实现上对比 Flutter …

Qt/C++面试【速通笔记一】

Qt 信号与槽机制 什么是信号(Signal)和槽(Slot)? 在Qt中,信号(Signal)和槽(Slot)是实现对象之间通信的一种机制。信号是对象在某些事件发生时发出的通知&…

《跟李沐学 AI》AlexNet论文逐段精读学习心得 | PyTorch 深度学习实战

前一篇文章,使用 AlexNet 实现图片分类 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于学习 9年后重读深度学习奠基作之一:AlexNet【下】【论文精读】】的心得。 《跟李沐…

【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin scatter plot Venn)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载画图1画图2画图3画图4画图5画图6画图7参考介绍 【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin & scatter plot & Venn) 加载R包 library…

IMX6ULL的ALT0、ALT1、ALT2、ALT3、ALT4等是啥意思?

在IMX6ULL的手册IMX6ULLRM.pdf中,发现了题目中这些描述,相关截图如下: 那么红框中的ALT0、ALT1、ALT2、ALT3、ALT4等是啥意思呢? 在IMX6ULL及其他NXP(Freescale)芯片中,ALT0、ALT1、ALT2、ALT…

Android Http-server 本地 web 服务

时间:2025年2月16日 地点:深圳.前海湾 需求 我们都知道 webview 可加载 URI,他有自己的协议 scheme: content:// 标识数据由 Content Provider 管理file:// 本地文件 http:// 网络资源 特别的,如果你想直接…

DeepSeek 冲击(含本地化部署实践)

DeepSeek无疑是春节档最火爆的话题,上线不足一月,其全球累计下载量已达4000万,反超ChatGPT成为全球增长最快的AI应用,并且完全开源。那么究竟DeepSeek有什么魔力,能够让大家趋之若鹜,他又将怎样改变世界AI格…

神经网络八股(1)

1.什么是有监督学习,无监督学习 有监督学习是带有标签的,无监督学习是没有标签的,简单来说就是有监督学习的输入输出都是固定的,已知的,无监督学习输入是已知的,输出是不固定的,无监督学习是通…

DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局(Masonry Layout)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

【分布式理论14】分布式数据库存储:分表分库、主从复制与数据扩容策略

文章目录 一、分表分库1. 数据分表的必要性与方式2. 数据分库原则与优势 二、主从复制1. 读写分离架构设计2. 数据复制方式3. MySQL实现主从复制4. MySQL主从复制实践与高可用方案 三、数据扩容 随着业务的不断发展和数据量的增长,传统的单机关系型数据库已经逐渐不…

从传统到轻量级5G:网络架构演变与优化路径

轻量级5G​​​​ 随着5G技术的不断发展,通信网络架构正经历着前所未有的变革。传统的5G核心网架构虽然在性能和容量方面表现出色,但在灵活性、部署效率以及成本控制方面却面临一些挑战。为了应对日益复杂的通信需求,轻量级5G核心网成为了一种…

搭建Kubernetes (K8s) 集群----Centos系统

前期准备 准备3台Linux虚拟机(CentOS系统),参考 https://carry.blog.csdn.net/article/details/144578009https://carry.blog.csdn.net/article/details/144578009搭建Docker环境,参考 https://carry.blog.csdn.net/article/de…

OpenSSL实验

文章目录 一、OpenSSL安装二、OpenSSL配置常见路径查找配置文件的方法示例**1. 配置文件结构****2. 主要段落及其作用****(1) 默认段(Default Section)****(2) OID段(OID Section)****(3) CA相关段(CA Section&#xf…

51单片机-按键

1、独立按键 1.1、按键介绍 轻触开关是一种电子开关,使用时,轻轻按开关按钮就可使开关接通,当松开手时,开关断开。 1.2、独立按键原理 按键在闭合和断开时,触点会存在抖动现象。P2\P3\P1都是准双向IO口,…

DeepSeek动画视频全攻略:从架构到本地部署

DeepSeek 本身并不直接生成动画视频,而是通过与一系列先进的 AI 工具和传统软件协作,完成动画视频的制作任务。这一独特的架构模式,使得 DeepSeek 在动画视频创作领域发挥着不可或缺的辅助作用。其核心流程主要包括脚本生成、画面设计、视频合成与后期处理这几个关键环节。 …

EasyRTC智能硬件:实时畅联、沉浸互动、消音护航

在当今智能硬件迅猛发展的时代,音视频通讯技术已成为设备与用户、设备与设备间不可或缺的沟通纽带。而EasyRTC,凭借其无可比拟的实时性能、卓越的互动感受以及强大的交互实力,正逐步演变为智能硬件领域的“超级动力”核心。特别是其倾力打造的…

[AI相关]Unity的C#代码如何简写

是一个某培训机构的飞行棋教学源码 不知道,是否有人想知道怎么可以简写 (这个问AI,DeepSeek也应该找不到答案的) 静态变量 属性引用 单例 注入 一些UnityEvent特性就不说了。。。 IL 注入 运算符号改写

ubuntu 执行 sudo apt-get update 报错

记录一下,遇到这个问题了,网络上看到的解决办法,亲测有效 执行sudo apt-get update ,却报以下错误,“SECURITY: URL redirect target contains control characters rejecting ” 经检查发现,/etc/apt/source.list 下的…

蓝桥杯学习大纲

(致酷德与热爱算法、编程的小伙伴们) 在查阅了相当多的资料后,发现没有那篇博客、文章很符合我们备战蓝桥杯的学习路径。所以,干脆自己整理一篇,欢迎大家补充! 一、蓝桥必备高频考点 我们以此为重点学习…