如何使用Star模式優化數據倉庫?
Star模式是用於數據倉庫和商業智能的高效數據庫設計。它將數據組織到鏈接到周圍尺寸表的中心事實表中。這種類似星形的結構簡化了複雜的查詢,提高了性能,並且是需要快速檢索和簡化連接的大型數據集的理想選擇。
Star模式的主要優點是它可以最大程度地減少查詢連接數量的能力,從而提高可讀性和性能,尤其是對於數據聚合和報告。它的直接設計支持快速數據摘要,這對於生成業務見解至關重要。
Star模式還提供可擴展性,可以添加新的尺寸表,而不會破壞現有的結構。這支持持續的增長和適應性。將事實和維度表分開可最大程度地減少數據冗餘並保持一致性。
在此博客中,我們將探索Star模式,展示其與模擬數據最佳查詢性能的設置,並將其與雪花架構進行比較,並提供簡化的數據管理和分析方法。
學習目標
- 了解Star模式的關鍵要素。
- 了解如何設計星形架構並了解其在提高查詢性能方面的優勢。
- 探索恆星模式如何簡化分析查詢。
- 了解Star模式如何促進數據聚合和報告。
- 了解恆星模式與雪花架構的比較以及如何選擇合適的模式。
本文作為Thedata Science Blogathon的一部分發表。
目錄
- 什麼是明星模式?
- 示例:客戶訂單
- 1。客戶數據(尺寸表)
- 2。產品數據(尺寸表)
- 3。日期數據(尺寸表)
- 4。訂單數據(事實表)
- 設計星模架
- 查詢Star模式是否有業務見解
- 示例1:按產品類別按總銷售
- 示例2:按客戶會員級別按平均訂單價值
- Star模式與雪花架構
- 1。什麼是雪花架構?
- 2。結構
- 3。查詢性能
- 4。存儲效率
- 5。可伸縮性
- 為客戶訂單設計雪花模式
- 雪花架構結構:
- 查詢雪花模式示例
- 結論
- 常見問題
什麼是明星模式?
Star模式是一個數據庫架構,該模式由一個中央事實表組成,該表格被尺寸表包圍。事實表存儲可衡量的定量數據,例如銷售交易和客戶訂單。相比之下,尺寸表存儲描述性屬性,例如客戶詳細信息,產品類別和時間信息。
恆星具有使星星相關的結構,可以通過使用Foreign鍵連接事實和尺寸表來創建。該設計非常優化用於重讀的操作,尤其是在報告和分析環境中。
星形模式的關鍵組成部分:
- 事實表:事實表存儲交易數據。在我們的客戶訂單示例中,此表將跟踪客戶下的每項訂單。
- 尺寸表:尺寸表是補充表,其中包含有關交易中涉及的實體的客戶,產品和日期的描述性信息。
該結構可以通過簡化表從數據中提取洞察力時簡化連接並降低複雜性來實現快速查詢。
另請閱讀:數據倉庫概念的簡要介紹
示例:客戶訂單
為了說明Star模式的工作原理,我們將生成一個模擬數據集,代表在線商店中的客戶訂單。這些數據將填充我們的事實和尺寸表。
1。客戶數據(尺寸表)
我們將創建一個模擬的客戶數據集,包括關鍵信息,例如其ID,名稱,位置和會員類型。客戶數據維度表詳細介紹了每個客戶,並允許我們將訂單鏈接到特定客戶,以分析客戶行為,偏好和人口趨勢。
- Customer_ID:每個客戶的唯一標識符。該ID將用作“訂單”事實表中的外鍵,將每個交易與下訂單的客戶聯繫起來。
- first_name:客戶的名字。這是客戶識別信息的一部分。
- last_name:客戶的姓氏。與名字一起,這提供了對客戶的完整標識。
- 位置:此字段包含客戶的地理位置(例如,國家或地區)。它可用於根據地理位置分析客戶訂單。
- 會員資格_level:指示客戶是標準會員還是高級會員資格。這允許按會員類型進行客戶行為分析(例如,高級客戶花費更多嗎?)。
導入大熊貓作為pd 導入numpy作為NP def generate_customer_data(n_customers = 1000): np.random.seed(42) customer_ids = np.arange(1,n_customers 1) first_names = np.random.choice(['thato','jane','alice','bob'],size = n_customers) last_names = np.random.Choice(['Smith','Mkhize','Brown','Johnson'],size = n_customers) 位置= np.random.Choice([['南非','加拿大','uk','dermany'],size = n_customers) 會員資本_levels = np.random.Choice(['標準','premium'],size = n_customers) 客戶= pd.dataframe({{ 'customer_id':customer_ids, 'first_name':first_names, 'last_name':last_names, “位置”:位置, '會員資助_level':會員資助_levels })) 返回客戶 customers_df = generate_customer_data() 客戶_df.head()
輸出:
另請閱讀:2024年數據倉庫的完整指南
2。產品數據(尺寸表)
接下來,我們將創建一個用於購買產品的數據集。該數據將包括產品ID,產品名稱,類別和價格等字段。
- product_id:每個產品的唯一標識符。該ID將用作訂單的事實表中的外鍵,以連接每次交易中購買的產品。
- product_name:產品名稱(例如,筆記本電腦,電話,耳機)。該領域提供了有關用於分析和報告的產品的描述性信息。
- 類別:產品類別(例如,電子,配件)。類別有助於按產品類型進行分組和分析銷售業績。
- 價格:產品的價格。產品的單位價格將用於計算事實表中的總價格(乘以數量時)。
def generate_product_data(n_products = 500): product_ids = np.Arange(1,N_Products 1) product_names = np.random.Choice(['laptop','phone','tablet','耳機'],size = n_products) 類別= np.random.Choice(['electronics','附件'],size = n_products) 價格= np.random.統一(50,1000,尺寸= n_products) 產品= pd.dataframe({{ 'product_id':product_ids, 'product_name':product_names, “類別”:類別, “價格”:價格 })) 返回產品 products_df = generate_product_data() products_df.head()
輸出:
3。日期數據(尺寸表)
日期尺寸表對於任何數據倉庫或商業智能方案中的基於時間的分析至關重要。它使您可以根據特定時期(例如年,月,日或四分之一)進行匯總和分析數據。該表將引用交易的時間,使我們可以將每個訂單鏈接到其相應日期。
- order_date:訂單的實際日期,訂單的事實表將引用該訂單。
- 年:下訂單的一年。
- 月份:訂單月(從1到12)。
- 一天:一個月的一天。
- 週:一年的一周(基於ISO日曆)。
- 季度:年度季度(1月至3月1日,4月至6月的2個)。
導入大熊貓作為pd def generate_dates_data(start_date ='2023-01-01',end_date ='2024-02-21'): #創建一個日期範圍 date_range = pd.date_range(start = start_date,end = end_date,freq ='d') #創建一個帶日期零件的數據框 dates_df = pd.dataframe({ 'order_date':date_range, '年':date_range.year, “月”:date_range.month, “天”:date_range.day, “週”:date_range.isocalendar()。週, “四分之一”:date_range.quarter })) 返回dates_df #生成日期尺寸表 dates_df = generate_dates_data() dates_df.head()
輸出:
另請閱讀:什麼是數據倉庫?
4。訂單數據(事實表)
最後,我們將生成充當事實表的訂單數據。該數據集將跟踪客戶訂單,包括訂單日期,總價和產品信息。訂單中的cow fact表中的行代表客戶放置的唯一訂單,並且它直接鏈接到相關的尺寸表(客戶,產品和日期)通過外鍵。這允許進行詳細的分析,例如跟踪每個客戶花費的數量,哪些產品最受歡迎以及訂單活動隨時間變化。
- order_id :每個順序的唯一標識符。這是事實表的主要關鍵。
- Customer_ID:將每個訂單與客戶維度表中的客戶鏈接到客戶的外鍵。這允許根據客戶屬性(例如位置或會員級別)對訂單進行分析。
- product_id:將每個訂單與產品尺寸表中的產品聯繫起來的外鍵。這可以分析產品銷售,趨勢和性能。
- order_date:將每個訂單鏈接到日期尺寸表中的特定日期的外鍵。該字段可實現基於時間的分析,例如按月或季度按銷售進行銷售。
- 數量:訂購產品的單位數量。這對於計算訂單的總價格和理解購買模式至關重要。
- Total_price:訂單的總價格是通過將產品價格乘以訂購數量的數量來計算的。這是分析收入的主要指標。
def generate_order_data(n_orders = 10000): order_ids = np.arange(1,n_orders 1) customer_ids = np.random.randint(1,1000,size = n_orders) product_ids = np.random.randint(1,500,size = n_orders) order_dates = pd.date_range('2023-01-01',oferes = n_orders,freq ='h') 數量= np.random.randint(1,5,size = n_orders) total_prices =數量 * np.random.uniform(50,1000,size = n_orders) orders = pd.dataframe({{ 'order_id':order_ids, 'customer_id':customer_ids, 'product_id':product_ids, 'order_date':order_dates, “數量”:數量, 'total_price':total_prices })) 返回訂單 orders_df = generate_order_data() orders_df.head()
輸出:
設計星模架
現在,我們可以使用模擬的客戶訂單數據構建Star模式。主要的事實表將由訂單組成,而關聯的尺寸表將包括客戶,產品和日期。
Star模式設計:
-
事實表:
- 訂單:包含交易數據,包括order_id,customer_id,product_id,order_date,wittity和total_price。
-
尺寸表:
- 客戶:包含有關客戶的描述性數據,包括customer_id,first_name,last_name,location和membership_level。
- 產品:包含產品詳細信息,包括product_id,product_name,類別和價格。
- 日期:跟踪每個訂單的日期,包括訂單_date,Year,“月和日”等字段。
隨著每個維度表直接與事實表關聯,STAR模式設計簡化了查詢,從而降低了SQL連接的複雜性。
另請閱讀:了解數據倉庫及其結構的基礎知識
查詢Star模式是否有業務見解
現在,我們的架構已經到位,假設已經創建並存儲了這4個表(訂單,客戶,產品,日期),並將其存儲在SQL數據庫中,該數據庫具有與每個相應表生成的上述數據范圍相同的架構。通過此設置,我們可以運行SQL查詢,以從數據中獲得寶貴的業務見解。
示例1:按產品類別按總銷售
我們可以使用“訂單”事實表和產品維度表輕鬆地按產品類別檢索總銷售。此查詢總結了訂單表中的total_price,並根據產品表按產品類別分組結果:
選擇 P.類, sum(o.total_price)作為total_sales 從 訂單o 加入 產品p 在 o.product_id = p.product_id 組 P.類 訂購 total_sales desc;
示例2:按客戶會員級別按平均訂單價值
我們可以加入訂單和客戶表,以了解不同的會員水平如何影響訂單價值。此查詢表明,高級會員的平均支出是否比標準成員多。
選擇 C.Membership_level, AVG(o.total_price)為avg_order_value 從 訂單o 加入 客戶c 在 o.customer_id = c.customer_id 組 C.Membership_level 訂購 avg_order_value desc;
Star模式與雪花架構
在尺寸表的組織中發現了Star模式和雪花架構之間的主要區別,特別是關於這些表中實現的歸一化程度。
1。什麼是雪花架構?
雪花架構是一種數據庫模式,該模式通過標準化將尺寸表組織到幾個互連表中。與具有不可縮小的尺寸表的Star模式不同,Snowflake模式將尺寸表進一步將尺寸表劃分為子量度。例如,代表位置的維度表可以進一步分為城市和國家的不同表。這種佈置導致一個更複雜的層次結構,類似於雪花,這是其名稱的起源。
以下是概述何時使用每個模式的比較:
2。結構
這是結構:
Star Schema:
- 尺寸表是不可正的,這意味著它們是平坦的,並且包含所有必要的細節。該結構將尺寸表直接鏈接到中心事實表,從而導致查詢連接較少。
- 例如,在與我們的客戶訂單示例有關的Star模式中,客戶尺寸表包含單個表中的所有客戶信息(例如,Customer_ID,first_name,last_name和Location)。
雪花架構:
- 將尺寸表歸一化,並分解為多個相關表。每個維度表都根據層次結構分為子維度(例如,將位置分解為城市和鄉村桌)。
- 示例:在雪花架構中,客戶表可以進一步分解為單獨的位置表,該表將Customer_ID與不同的地理數據級別(例如城市和國家 /地區)鏈接。
3。查詢性能
這是Star Schema和Snowflake模式的查詢性能:
Star Schema:
- 尺度表的表尺寸表會導致連接較少,從而提高了對讀取操作的查詢性能,尤其是在分析查詢和報告中。
雪花架構:
- 需要更多的連接來連接歸一化表,從而導致查詢性能較慢,尤其是在復雜的查詢中。
4。存儲效率
這是Star模式和雪花模式的存儲效率:
Star Schema:
- 由於尺寸表是不合同的,因此通常會有一些數據冗餘,需要更多的存儲空間。但是,查詢簡單性和性能改進通常超過此存儲成本。
雪花架構:
- 雪花架構通過標準化尺寸表可降低冗餘,從而使其更具存儲效率。這對於避免冗餘的大規模數據集是有益的。
5。可伸縮性
這是Star模式和雪花模式的可擴展性:
Star Schema:
- Star模式的簡單,不合同的結構使擴展和維護更加容易。添加新屬性或尺寸表很簡單,不需要重新加工模式。
雪花架構:
- 儘管雪花架構可以處理更複雜的關係,但由於尺寸表的歸一化程度,可能需要更多的努力來擴展和維護。
為客戶訂單設計雪花模式
讓我們將客戶訂單的數據示例擴展到雪花模式。我們將不將所有客戶信息存儲在一個客戶表中,而是將其分解為標準化數據並減少冗餘。
雪花架構結構:
在相同客戶訂單數據的雪花架構中,我們將有以下內容:
- 事實表:使用order_id,customer_id,product_id,order_date,wittity和total_price訂購表。
- 尺寸表:我們不保留尺寸的尺寸表,而是將它們分解為其他相關表。例如:
-
客戶表:
- customer_id,first_name,last_name,location_id,會員資本_level
-
位置表:
- location_id,city_id,country_id
-
城市表:
- city_id,city_name
-
國家表:
- country_id,country_name
-
產品表:
- product_id,product_name,category_id,價格
-
類別表:
- category_id,category_name
訂單事實表仍然包含交易數據,但是在多個表中將客戶和產品信息歸一化(例如,客戶位置將鏈接到不同級別的地理數據)。
查詢雪花模式示例
為了在雪花模式中檢索產品類別的總銷售,您將加入幾張桌子以獲得最終結果。這是一個示例SQL查詢:
選擇 c.category_name, sum(o.total_price)作為total_sales 從 訂單o 加入 產品p 在 o.product_id = p.product_id 加入 類別c 在 p.Category_id = c.Category_id 組 C.Category_name 訂購 total_sales desc;
如您所見,由於歸一化尺寸表,與Star模式相比,Snowflake模式需要額外的連接。這會產生更複雜的查詢,但可以最大程度地減少存儲中的冗餘。
結論
總而言之,為快速查詢性能和分析查詢的簡單性而進行了優化,而雪花架構旨在通過標準化尺寸表來減少冗餘。兩者之間的選擇取決於數據集的特定需求和組織的優先級,無論是查詢性能還是存儲效率。
在本文中,我們說明了使用模擬的客戶訂單數據集構建恆星和雪花架構。我們針對客戶,產品,訂單和日期的事實和尺寸表,證明了每個表在組織數據中的基本功能,以進行有效的查詢和分析。該模式允許通過外國密鑰(例如product_id and Customer_id)將事實表(訂單)(訂單)連接到尺寸表(客戶,產品和日期),從而簡化了數據檢索並促進了廣泛的查詢。
我們還強調了Star模式的關鍵好處:
- 簡化查詢:實施星模架已經說明瞭如何使SQL查詢更加簡單,這是我們查詢對按產品類型分類的總銷售的查詢。
- 查詢性能: STAR模式設計通過減少必要的連接數量並有效地匯總數據來促進更快的查詢執行。
- 可伸縮性和靈活性:我們演示瞭如何使用新屬性或行擴展每個維度表,以及隨著業務數據的增長或需求的變化,Star模式如何輕鬆擴展。
- 數據匯總和報告:我們證明了執行數據匯總和報告任務的易用性,例如根據Star模式的結構,計算按產品類別計算總銷售額或每月趨勢。
雪花架構通過標準化尺寸表,提高存儲效率,但需要更複雜的查詢來降低數據冗餘。它是管理分層關係或優化存儲空間的理想選擇。相比之下,Star模式簡化了數據管理並加快了查詢性能,從而可以更好地進行洞察力和有效的分析。兩者之間的選擇取決於您是否優先考慮查詢性能還是存儲效率。
關鍵要點
- Star模式增強了數據組織,並通過將交易數據分類為事實和尺寸表來提高查詢性能。
- 模式設計支持快速查詢,從而更容易獲得對銷售趨勢,客戶行為和產品性能的見解。
- Star模式設計用於可擴展性,可以隨著數據集的增加而直接擴展。可以添加新的尺寸表或額外屬性,而不會影響當前的架構,從而確保適應不斷變化的業務需求。
- 雪花架構通過標準化尺寸表可最大程度地減少數據冗餘,從而使其更具存儲效率。但是,需要額外的連接可能會導致更複雜的查詢。
探索GitHub上本文背後的代碼。
本文所示的媒體不由Analytics Vidhya擁有,並由作者酌情使用。
常見問題
Q1。什麼是明星模式?Ans。 Star模式是一種數據庫架構設計,通常用於數據倉庫和商業智能應用程序。它由一個包含交易或可測量數據的中央事實表組成,該數據被包含包含描述性信息的尺寸表所包圍。這種類似星的結構優化了查詢性能,並通過最大程度地減少複雜的連接並使查詢更直觀,從而簡化了數據檢索。 “星”這個名字來自架構的形狀,事實表位於中間,尺寸表像星的點一樣向外輻射。
Q2。是什麼區別了事實表與維度表?Ans。事實表的特徵是它包含交易或可量化數據,例如銷售數據,訂單計數或收入指標。尺寸表提供了描述性屬性,例如客戶名稱,人口統計,產品分類或日期。事實表包含定量數據,而尺寸表則提供了上下文。
Q3。 Star模式以什麼方式增強查詢性能?Ans。 STAR模式通過減少所需的連接數來優化查詢性能,因為事實表直接連接到每個維度表。這簡化了查詢並降低計算成本,從而導致查詢執行時間更快,尤其是對於大型數據集。
Q4。是否可以將新的尺寸表添加到星模中,而不會破壞現有結構?Ans。實際上,恆星模式既可擴展又靈活。可以將新的尺寸表或其他屬性集成到現有架構中而不會引起任何中斷。這種適應性使Star模式可以滿足擴展的數據集和不斷發展的業務需求。
Q5。我該如何在星形模式和雪花架構之間進行選擇?Ans。如果查詢性能和簡單性是您的優先事項,請選擇星模架。如果您的目標是最大程度地減少數據冗餘並優化存儲效率,尤其是對於具有分層關係的大型數據集,請選擇雪花架構。
以上是如何使用Star模式優化數據倉庫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Meta的Llama 3.2:多模式和移動AI的飛躍 Meta最近公佈了Llama 3.2,這是AI的重大進步,具有強大的視覺功能和針對移動設備優化的輕量級文本模型。 以成功為基礎

嘿,編碼忍者!您當天計劃哪些與編碼有關的任務?在您進一步研究此博客之前,我希望您考慮所有與編碼相關的困境,這是將其列出的。 完畢? - 讓&#8217

本週的AI景觀:進步,道德考慮和監管辯論的旋風。 OpenAI,Google,Meta和Microsoft等主要參與者已經釋放了一系列更新,從開創性的新車型到LE的關鍵轉變

介紹 Openai已根據備受期待的“草莓”建築發布了其新模型。這種稱為O1的創新模型增強了推理能力,使其可以通過問題進行思考

介紹 想像一下,穿過美術館,周圍是生動的繪畫和雕塑。現在,如果您可以向每一部分提出一個問題並獲得有意義的答案,該怎麼辦?您可能會問:“您在講什麼故事?

Meta's Llama 3.2:多式聯運AI強力 Meta的最新多模式模型Llama 3.2代表了AI的重大進步,具有增強的語言理解力,提高的準確性和出色的文本生成能力。 它的能力t

SQL的Alter表語句:動態地將列添加到數據庫 在數據管理中,SQL的適應性至關重要。 需要即時調整數據庫結構嗎? Alter表語句是您的解決方案。本指南的詳細信息添加了Colu

介紹 Mistral發布了其第一個多模式模型,即Pixtral-12b-2409。該模型建立在Mistral的120億參數Nemo 12B之上。是什麼設置了該模型?現在可以拍攝圖像和Tex
