91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Quick BI 的模型設計與生成SQL原理剖析

發布時間:2020-10-21 09:50:50 來源:網絡 閱讀:459 作者:花輪同學丶 欄目:關系型數據庫

Quick BI 的模型設計與生成SQL原理剖析

一、  摘要

隨著互聯網的高速發展,數據量呈現井噴式的增長,如何來分析和使用這些數據,使數據產生商業價值,已經變得越來越重要。值得高興的是,當前越來越多的人已經意識到了用數據分析決定商業策略的重要性,也都在進行著各行各業的數據分析。眾所周知數據分析的核心是數據,為了更容易的分析數據,數據模型的設計需要遵循一定的規范。當前最流行的聯機分析處理(OLAP)的規范為維度建模規范。本文介紹Quick BI如何進行維度建模,基于維度模型如何來自動化的生成分析查詢的SQL語句,從而使數據分析變得更容易。

 

關鍵字: Quick BI、OLAP、維度建模、SQL

 

二、  維度模型的分類

OLAP(On-line Analytical Processing,聯機分析處理)根據存儲數據的方式不同可以分為ROLAP、MOLAP、HOLAP。ROLAP表示基于關系數據庫存儲的OLAP實現(Relational OLAP),以關系數據庫為核心,以關系型結構進行多維數據的表示和存儲;MOLAP表示基于多維數據存儲的OLAP實現(Multidimensional OLAP);HOLAP表示基于混合數據存儲的OLAP實現(Hybrid OLAP),如低層用關系型數據庫存儲,高層是多維數組存儲。接下來主要介紹基于關系型數據庫的ROLAP的建模原理。

ROLAP將多維數據庫中的表分為兩類:事實表和維度表。事實表用于存儲維度關鍵字和數值類型的事實數據,一般是圍繞業務過程進行設計,例如:銷售事實表,一般來存儲用戶在什么時間、地點購買了產品,銷量和銷售額等信息。維度表用于存儲維度的詳細數據,例如銷售事實表中存儲了產品維度的ID,產品維度表中存儲產品的名稱、品牌信息,兩者通過產品ID進行關聯。

ROLAP根據事實表、維度表間的關系,又可分為星型模型(Star Schema)、雪花模型(Snowflake Schema)。

1.    星型模型

星型模型它由事實表(FactTable)和維表(DimensionTable)組成。事實表中的維度外鍵分別與相對應的維表中的主鍵相關聯,關聯之后由于形狀看起來像是一個星星,所以形象的稱為星型模型。以下示例為星型模型:其中sales_fact_1997為事實表,存儲客戶在某個時間、某個商店、購買了某個產品,購買量和銷售額的信息,記錄的是一個下單過程。事實表sales_fact_1997通過外鍵product_id、customer_id、time_id、store_id分別與維度表product(產品維表)、customer(客戶維表)、time_by_day(時間維表)、store(商店維表)相關聯,關聯關系為多對一關聯。

 

Quick BI 的模型設計與生成SQL原理剖析

2.    雪花模型

雪花模型是當有一個或多個維表沒有直接連接到事實表上,而是通過其他維表連接到事實表上時,其圖解就像一個雪花,故稱雪花模型。下面示例product(產品)維度表與product_class(產品類別)維度表通過product_class_id相關聯,關聯關系為多對一。product_class沒有與sales_fact_1997事實表直接關聯。

 

Quick BI 的模型設計與生成SQL原理剖析

三、  基于ROLAP模型的SQL生成原理

模型構建好了后,接下來的重點就是針對分析需求來生成滿足分析需要的SQL語句,然后將SQL語句下發到DB中來查詢數據,返回分析結果。下面通過具體的需求場景來介紹如何生成SQL語句。

1.    基于星型模型(或雪花模型)生成SQL

需求場景:

按日期、產品查看總的銷售額、銷售量,日期限定在1997年,總銷售額限定在1000元以上,結果按照總的銷售額倒序排列,看前5個。

Quick BI 的模型設計與生成SQL原理剖析

生成SQL思路

1.        分析需要用到的字段和表,目標是明確查詢需要用到哪些表、表間關系、表上分組字段、聚合字段,確定SQL中select和from信息。

2.        分析篩選條件,目標是明確SQL中where中需過濾的值。

3.        分析分組維度,目標是明確SQL中group by的字段。

4.        分析聚合后的篩選條件,目標是明確having中需要過濾的值。

5.        分析需要排序的列和排序類型(升序還是降序)。

6.        生成結果個數限制條件

7.        根據以上信息生成查詢SQL:

select 分組字段、聚合字段 from 表(含表關聯) where 篩選條件 group by 分組維度 having 聚合后的篩選條件 order by 排序信息 結果條數限制。

生成SQL

按照上面的步驟,和本例子中的需求,分析查詢中的關鍵信息(以下步驟與生成SQL思路中的步驟一一對應)

1.        用到的分組字段:the_date、product_name, 其中分組字段the_date為日粒度,需處理為年粒度:DATE_FORMAT(`the_date` , '%Y')

聚合字段:store_sales、unit_sales,聚合方式都為sum;

用到的表:sales_fact_1997、product、time_by_day;

表間關系:sales_fact_1997. product_id= product. product_id

   sales_fact_1997. time_id= time_by_day .time_id

2.        篩選條件:

the_date`= STR_TO_DATE('1997-01-01 00:00:00' ,'%Y-%m-%d %H:%i:%s')

3.        分組維度:DATE_FORMAT(`the_date` , '%Y')、product_name

4.        聚合后的篩選條件:SUM(`store_sales`) > 1000

5.        排序:order by 聚合后的別名 desc

6.        限制結果個數:limit 0,5

7.        生成的SQL如下

Quick BI 的模型設計與生成SQL原理剖析

 

四、  附錄-用到的表

下面羅列出以上示例中用到的表的建表語句,需要在 MySQL數據庫下執行,其他類型數據庫需要做一些調整。

1.        sales_fact_1997

Quick BI 的模型設計與生成SQL原理剖析


2.        product

Quick BI 的模型設計與生成SQL原理剖析

 

3.        product_class

Quick BI 的模型設計與生成SQL原理剖析

 

4.        time_by_day

Quick BI 的模型設計與生成SQL原理剖析


5.        customer

Quick BI 的模型設計與生成SQL原理剖析


6.        store

 Quick BI 的模型設計與生成SQL原理剖析


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桐城市| 潮州市| 娄底市| 保德县| 司法| 海安县| 浙江省| 安丘市| 安岳县| 新津县| 太湖县| 泾阳县| 通州市| 时尚| 伊川县| 临海市| 阿坝| 阿城市| 永福县| 剑川县| 武邑县| 于都县| 綦江县| 玛沁县| 南乐县| 开平市| 平乐县| 峨眉山市| 称多县| 东乡族自治县| 清徐县| 密云县| 普洱| 中宁县| 达州市| 盐源县| 上饶市| 湖州市| 延庆县| 黔江区| 齐齐哈尔市|