目标数据建模是为了快速(用于处理查询的引擎),以及容易(针对编写这些查询的人)的获取数据。
大多数数据仓库实践是为了强调速度。分析引擎(一个术语 popularized by dbt,有时也会捆绑到术语中全栈分析)是为可用性数据建模的过程。即使这不是你所说的,无论何时当你需要把一个策展数据集,一个分段或指标,或仪表板与他人协同,都可以实践分析引擎。
本教程将向您展示如何将分析引擎方法应用于数据仓库更具体地说,对于一种称为事实数据表.
维度表包含一个时间点的数据快照,例如在工作日结束时,您拥有的部分完成的杯子的数量。
| time | total mugs |
|---------------------|------------|
| 2022-08-16 17:30:00 | 3 |
事实数据表包含一个历史信息,比如你一天喝咖啡的速度。
| time | mug | coffee remaining |
|---------------------|----------|------------------|
| 2022-08-16 08:00:00 | 1 | 100% |
| 2022-08-16 08:01:00 | 1 | 0% |
| 2022-08-16 09:00:00 | 2 | 100% |
| 2022-08-16 12:00:00 | 3 | 100% |
| 2022-08-16 12:30:00 | 3 | 99% |
| 2022-08-16 17:30:00 | 3 | 98% |
事实表和维度表依据星型模型(或密切相关的雪花模型)在数据仓库中组织信息。
如果出现以下情况,您可能需要构建事实表:
但是在我们开始之前,让我们在你每天的咖啡因总量中再加一杯,我们还有很多要做的!
| time | total mugs |
|---------------------|------------|
| CURRENT_TIMESTAMP() | n+1 |
在本教程中,我们将使用维度表account,例如从CRM中获取的维度表。让我们假设一下account维度表存储客户的当前状态,当前状态由应用程序更新。
这个account表如下所示:
| id | country | type | status |
|------------------|-------------|------------|-----------|
| 941bfb1b2fdab087 | Croatia | Agency | Active |
| dbb64fd5c56e7783 | Singapore | Partner | Active |
| 67aae9a2e3dccb4b | Egypt | Partner | Inactive |
| ced40b3838dd9f07 | Chile | Advertiser | Test |
| ab7a61d256fc8edd | New Zealand | Advertiser | Inactive |
基于account
,我们需要考虑人们可能会问的关于客户帐户随时间变化的分析问题。自从account
表包含status
字段,我们可以回答以下问题:
从数据存储在account
创造fact_account
,我们将编写一个SQL脚本:
fact_account
今天的account
数据。account
(假设它被另一个系统更新)。account
中的历史数据快照fact_account
.fact_account
对于自前一天快照后更改的每个帐户。为了检查我们的事实表在实践中是否有用,我们将使用Metabase设置它,并尝试回答我们所有的三个示例分析问题。
本教程的最后一节将让您了解在扩展事实表以容纳更多历史记录(和更多问题!)时迭代它的外观。
如果您想将下面的步骤应用于您自己的数据,我们建议您使用由源系统定期更新的维度表,以及