暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一文带你理解数仓概念

数码百科 2024-08-03
83

你是否曾在数据仓库的海洋中迷失方向?实体、维度、度量...这些看似熟悉却又模糊的概念,是否曾让你感到困惑?


🔍 实体的世界:从商品到用户,实体是我们分析的核心对象。 

🌐 维度的视角:选择合适的维度,就是选择正确的分析角度。

 📈 度量的力量:业务流程中的数值,是我们洞察数据的关键。 

🌟 粒度的艺术:粒度决定细节,细节决定成败。 

📐 口径的统一:取数的逻辑,决定数据的精准度。 

📊 指标的衡量:指标是口径的量化,是业务需求的直接体现。

 🏷️ 标签的魅力:标签是高度精炼的特征标识,让数据更加生动。 

🔑 自然键与代理键:业务与技术的完美结合,让数据更加紧密相连。 

🚫 退化维度的智慧:空间换时间,让查询更加高效。 

⏳ 缓慢变化维的奥秘:时间是最好的见证者,维度也会随时间而变。

 🔍 微型维度的创新:解决快变超大维度的难题,让分析更加灵活。

 🔄 下钻与上卷:粒度的粗细之间,尽显数据分析的魅力。 🛒 数据集市的聚焦:专注单一主题,让分析更加深入。

为了更好地理解这些概念,我们可以尝试用SQL来逐一解释:

1. 实体:实体通常对应数据库中的表。

○ 示例:一个名为Products的表,包含了商品的信息。

CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName VARCHAR(255),
    Category VARCHAR(255)
);

2. 维度:维度在数据库中通常对应于事实表的列,用于描述事实的不同方面。

○ 示例:一个名为Sales的事实表,包含了ProductCategory作为维度。

CREATE TABLE Sales (
    SaleID INT PRIMARY KEY,
    ProductCategory VARCHAR(255),
    SaleDate DATE,
    Quantity INT,
    Price DECIMAL(10,2)
);

3. 度量:度量是事实表中记录的具体数值。

○ 示例:在Sales表中,Quantity和Price是度量。

4. 粒度:粒度决定了数据的详细程度,通常与事实表的设计有关。

○ 示例:Sales表中的每条记录代表一个销售事件,粒度为单个销售事件。

5. 口径:口径涉及SQL查询中的WHERE子句,用于限定查询的范围。

○ 示例:查询特定日期范围内的销售额。

SELECT SUM(Quantity * Price) AS TotalSales
FROM Sales
WHERE SaleDate BETWEEN '2023-01-01' AND '2023-01-31';

6. 指标:指标通常是通过SQL聚合函数计算得出的。

○ 示例:计算每个产品类别的总销售额。

SELECT ProductCategory, SUM(Quantity * Price) AS TotalSales
FROM Sales
GROUP BY ProductCategory;

7. 标签:标签在数据库中可能不直接体现,但可以理解为对某些列的值进行标记或分类。

○ 示例:为Products表中的商品添加一个IsFeatured标签列。

ALTER TABLE Products ADD IsFeatured BOOLEAN;

8. 自然键:自然键是业务上有意义的唯一标识符。

○ 示例:Products表中的ProductID。

9. 代理键:代理键是无业务含义的唯一标识符,用于技术上的关联。

○ 示例:如果Products表的ProductID不是连续的,可以创建一个名为ProductSK的代理键列。

ALTER TABLE Products ADD ProductSK INT IDENTITY(1,1);

10. 退化维度:退化维度在事实表中直接存储维度属性。

○ 示例:Sales表中直接存储StoreID作为退化维度。

CREATE TABLE Sales (
    SaleID INT PRIMARY KEY,
    StoreID INT, -- 退化维度
    ...
);

11. 缓慢变化维:缓慢变化维的处理可以通过添加新行来实现。

○ 示例:Products表中的Manufacturer字段随时间变化。

INSERT INTO Products (ProductID, ProductName, Manufacturer, ChangeDate)
VALUES (1, 'Widget', 'NewManufacturer', '2023-01-01');

12. 微型维度:微型维度通过创建单独的表来解决大维度表的问题。

○ 示例:创建一个名为ProductAttributes的微型维度表。

CREATE TABLE ProductAttributes (
    AttributeID INT PRIMARY KEY,
    AttributeName VARCHAR(255),
    ProductSK INT,
    AttributeValue VARCHAR(255)
);

13. 下钻:下钻可以通过增加查询中的细节来实现。

○ 示例:从年销售总额下钻到月销售总额。

SELECT DATE_TRUNC('month', SaleDate) AS SaleMonth, SUM(Quantity * Price) AS MonthlySales
FROM Sales
GROUP BY SaleMonth;

14. 上卷:上卷可以通过减少查询中的细节来实现。

○ 示例:从月销售总额上卷到年销售总额。

SELECT DATE_TRUNC('year', SaleDate) AS SaleYear, SUM(Quantity * Price) AS YearlySales
FROM Sales
GROUP BY SaleYear;

15. 数据集市:数据集市可以是一个独立的数据库或模式,包含特定主题的数据。

○ 示例:创建一个名为SalesDataMart的模式,包含销售相关的表。

CREATE SCHEMA SalesDataMart;


CREATE TABLE SalesDataMart.Sales (...) -- 销售相关表结构

文章转载自数码百科,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论