數倉搭建: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 
selecto.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 ogon o.id = og.order_id
left join dwd.fact_shop_order_address_detail odon o.id = od.id
left join dwd.fact_order_pay opon og.group_id = op.group_id
left join dwd.fact_refund_order roon o.id = ro.order_id
left join dwd.fact_order_settle oson os.order_id = o.id
left join  dwd.fact_shop_order_goods_details ogdon ogd.order_id = o.id
left join dwd.fact_goods_evaluation eon e.order_id = o.id
left join  dwd.fact_order_delievery_item odion odi.shop_order_id = o.id;

寬表查詢

select * from ?dwb.dwb_order_detail;?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70154.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70154.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70154.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Linux】進程間通信——進程池

文章目錄 進程池什么進程池進程池的作用 用代碼模擬進程池管道信息任務類InitProcesspool()DisPatchTasks()任務的執行邏輯(Work)CleanProcessPool() 封裝main.ccChannel.hppProcessPool.hppTask.hppMakefile 總結總結 進程池 什么進程池 進程池&#…

13-跳躍游戲 II

給定一個長度為 n 的 0 索引整數數組 nums。初始位置為 nums[0]。 每個元素 nums[i] 表示從索引 i 向后跳轉的最大長度。換句話說&#xff0c;如果你在 nums[i] 處&#xff0c;你可以跳轉到任意 nums[i j] 處: 0 < j < nums[i] i j < n 返回到達 nums[n - 1] 的最…

Qt的QToolBox的使用

QToolBox 是 Qt 框架中的一個控件&#xff0c;用于創建一個可折疊的“工具箱”界面&#xff08;類似 Windows 資源管理器的側邊欄&#xff09;。每個子項可以展開或折疊&#xff0c;適合用于分組顯示多個功能模塊。以下是其基本用法和示例&#xff1a; 1. 基本用法 創建并添加…

《DeepSeek 一站式工作生活 AI 助手》

最近國產AI工具DeepSeek在全球火出圈&#xff0c;登頂多個國家應用商店&#xff0c;下載量一路飆升。這匹AI “黑馬” 到底憑什么征服全球用戶&#xff1f;讓我們全方位解鎖DeepSeek——從基礎入門到高階玩法&#xff0c;從實用技巧到隱藏功能。 DeepSeek是一款功能強大的國產A…

Java中CompletableFuture異步工具類

參考&#xff1a;CompletableFuture 詳解 | JavaGuide 實際項目中&#xff0c;一個接口可能需要同時獲取多種不同的數據&#xff0c;然后再匯總返回&#xff0c;舉個例子&#xff1a;用戶請求獲取訂單信息&#xff0c;可能需要同時獲取用戶信息、商品詳情、物流信息、等數據。…

Oracle Rac 多路徑鏈路不穩定引發IO降速-光弱

一、背景 今天突然被異地的同事拉來開遠程會議&#xff0c;會議內容是開發反饋每天9點左右有個sqlldr 命令的腳本調用突然執行很慢&#xff0c;以前幾秒的導入操作現在需要30-60s左右&#xff0c;而且數據量基本相同。 二、分析 1&#xff09;、查看ASH報告 從報告上確認是數…

哈希表-兩個數的交集

代碼隨想錄-刷題筆記 349. 兩個數組的交集 - 力扣&#xff08;LeetCode&#xff09; 內容: 集合的使用 , 重復的數剔除掉&#xff0c;剩下的即為交集&#xff0c;最后加入數組即可。 class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set<Integer…

[JVM篇]分代垃圾回收

分代垃圾回收 分代收集法是目前大部分 JVM 所采用的方法&#xff0c;其核心思想是根據對象存活的不同生命周期將內存劃分為不同的域&#xff0c;一般情況下將 GC 堆劃分為老生代(Tenured/Old Generation)和新生代(Young Generation)。老生代的特點是每次垃圾回收時只有少量對象…

漢諾塔問題詳解:遞歸與分治的經典案例

嘿&#xff0c;小伙伴們&#xff01;今天我可算撞見了個超有意思的東西&#xff0c;就是那大名鼎鼎的漢諾塔問題&#xff01;我這好奇心一下子就被勾起來了&#xff0c;迫不及待地想深挖一下&#xff0c;然后把那些好玩的、燒腦的、讓人拍案叫絕的解題思路和奇妙故事都分享給大…

vue中如何動態的增減組件的類名(class)

在 Vue.js 2 中&#xff0c;你可以通過計算屬性或直接在模板中使用 v-bind:class 來動態地改變組件的類名。下面是一個簡單的示例&#xff0c;說明如何在某個條件被復核后為組件添加一個 selected 類&#xff08;此處為組件添加一個默認的類&#xff08;例如 radio&#xff09;…

Vue3 基礎概念與環境搭建

一、Vue3 簡介 Vue3 是 Vue.js 的最新主要版本&#xff0c;于 2020 年 9 月正式發布。它在性能、可維護性和開發體驗方面都有了顯著的改進。相比 Vue2&#xff0c;Vue3 的主要特點包括&#xff1a; 更高效的響應式系統&#xff1a;使用 Proxy替代了 Object.defineProperty&…

華為昇騰920b服務器部署DeepSeek翻車現場

最近到禍一臺HUAWEI Kunpeng 920 5250&#xff0c;先看看配置。之前是部署的訊飛大模型&#xff0c;發現資源利用率太低了。把5臺減少到3臺&#xff0c;就出了他 硬件配置信息 基本硬件信息 按照慣例先來看看配置。一共3塊盤&#xff0c;500G的系統盤&#xff0c; 2塊3T固態…

Python的那些事第二十三篇:Express(Node.js)與 Python:一場跨語言的浪漫邂逅

摘要 在當今的編程世界里,Node.js 和 Python 像是兩個性格迥異的超級英雄,一個以速度和靈活性著稱,另一個則以強大和優雅聞名。本文將探討如何通過 Express 框架將 Node.js 和 Python 結合起來,打造出一個高效、有趣的 Web 應用。我們將通過一系列幽默風趣的實例和表格,展…

Word中接入大模型教程

前言 為什么要在word中接入大模型呢&#xff1f; 個人覺得最大的意義就是不用來回切換與復制粘貼了吧。 今天分享一下昨天實踐的在word中接入大模型的教程。 在word中接入大模型最簡單的方式就是使用vba。 vba代碼要做的事&#xff0c;拆分一下就是&#xff1a; 獲取用戶…

open3d繪制平面

在Open3D中繪制平面通常涉及到創建一個平面模型并將其可視化。Open3D是一個開源庫,主要用于3D數據的處理和可視化,但它主要用于3D數據的處理,并不直接支持繪制2D平面。如果你想在Open3D中“繪制”一個平面,你可以通過以下幾種方法來實現類似的效果: 方法1:使用o3d.geome…

DeepSeek R1 與 OpenAI O1:機器學習模型的巔峰對決

我的個人主頁 我的專欄&#xff1a;人工智能領域、java-數據結構、Javase、C語言&#xff0c;希望能幫助到大家&#xff01;&#xff01;&#xff01;點贊&#x1f44d;收藏? 一、引言 在機器學習的廣袤天地中&#xff0c;大型語言模型&#xff08;LLM&#xff09;無疑是最…

WebGPU頂點插槽進階優化指南:釋放GPU渲染性能

本文基于WebGPU官方規范與實踐經驗&#xff0c;深入探討頂點緩沖區的性能優化策略&#xff0c;涵蓋數據布局、資源管理、渲染流程等多個維度&#xff0c;并附詳細代碼注釋與性能對比分析。 一、數據布局優化&#xff1a;降低內存與帶寬壓力 1. 內存對齊策略 GPU對內存訪問有嚴…

數據結構實現順序表的尾插,尾刪,按值查找/修改/刪除,按下標查找/增加/刪除

頭文件&#xff1a;head.h #ifndef __HEAD_H__ #define __HEAD_H__#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXSIZE 20enum num {success,false-1};typedef int datatype;typedef struct {int len;datatype data[MAXSIZE]; }S…

基于Spring Boot+Vue的寵物服務管理系統(源碼+文檔)

項目簡介 寵物服務管理系統實現了以下功能&#xff1a; 基于Spring BootVue的寵物服務管理系統的主要使用者分為用戶管理模塊&#xff0c;由于系統運行在互聯網絡中&#xff0c;一些游客或者病毒惡意進行注冊&#xff0c;產生大量的垃圾用戶信息&#xff0c;管理員可以對這些…

2. grafana插件安裝并接入zabbix

一、在線安裝 如果不指定安裝位置&#xff0c;則默認安裝位置為/var/lib/grafana/plugins 插件安裝完成之后需要重啟grafana 命令在上一篇講到過 //查看相關幫助 [rootlocalhost ~]# grafana-cli plugins --help //從列舉中的插件過濾zabbix插件 [rootlocalhost ~]# grafana…