3

我正在开发一个多步数据管道,应该优化以下过程:

1) 从NoSQL数据库 ( MongoDB ) 中提取数据。

2)将数据转换并加载到关系(PostgreSQL)数据库中。

3)使用Postgres数据库建立数据仓库

我手动编写了一个脚本来处理步骤 1) 和 2),这是一个中间 ETL 管道。现在我的目标是使用Postgres数据库构建数据仓库,但我对 DW 设计有一些疑问。下面是关系数据库的维度模型:

在此处输入图像描述

有 2 个主表,OccurrenceCanonical,从中继承了一组其他表(分别以红色和蓝色绘制)。请注意,有 2 个子数据类型ObserverNodeOccurrenceCanonicalObserverNode与另一个表具有额外的多对多关系。

我对如何在数据仓库中实现继承进行了一些研究,并认为最佳实践是将家庭数据类型(超级表和子表)合并到一个表中。这样做意味着添加额外的属性和大量值。我的新维度模型如下所示:

在此处输入图像描述

问题1:您认为这是解决这个问题的最佳方法吗?如果不是,那会是什么?

问题 2:有针对本地数据仓库的软件推荐吗?(内部部署是必须的,因为它包含敏感数据)

4

2 回答 2

2

通常有更少的表来连接和非规范化数据会提高数据仓库查询的查询性能,因此它们通常被认为是一件好事。

这将建议您的第二个表格设计。NULL 值不占用 PostgreSQL 表中的任何空间,因此您不必担心。

于 2019-07-01T15:43:59.083 回答
1

如此处所述在关系数据库中实现继承有三个选项。

IMO 在数据仓库中唯一可行的方法是Table-Per-Hierarchy选项,它将所有实体合并到一个表中。

原因不仅是通过保存连接来提高性能。在数据仓库中,数据的历史视图通常很重要。想一想,您将如何模拟某个实体中子类型的变化?

重要的是定义一个唯一定义源实体的鉴别器列。

于 2019-07-01T16:47:10.547 回答