1

语境 :

假设我们有多个数据集市(例如:人力资源、会计、营销……),并且它们都使用星型模式作为维度建模(Kimball 方法)。

问题 :

由于雪花云数据仓库架构消除了分离单独的物理数据集市/数据库以保持性能的需要。那么,在 Snowflake 上构建多个数据集市的最佳方法是什么?

为每个数据集市创建数据库?创建一个具有多个架构的数据库(EDW),每个架构都引用一个数据集市?

谢谢 !

4

3 回答 3

2

罗恩是正确的——答案取决于几件事:

  1. 如果有一致的维度,那么一个数据库和模式可能是要走的路
  2. 如果它们是完全非集成的数据集市,我会使用单独的模式甚至单独的数据库。它们都是 Snowflake 中的逻辑容器(而不是物理容器),具有可用于隔离用户的完全基于角色的访问控制。

真的 - 你今天是怎么做到的?这对您有用吗,或者您需要或想做的事情是您今天无法使用当前的物理设置完成的。您的 BI 工具如何设置安全性?它们是引用数据库名称还是仅引用模式名称?如果可以的话,尽量减少对数据管道和报告的更改,从而减少可能需要重构的东西(至少对于您的第一个 POC 或迁移而言)。

需要注意的一点是,使用 Snowflake,您可以轻松地进行跨数据库连接(即 database.schema.table)——您所需要的只是 SELECT 访问,因此即使您通过数据库 oyu 分隔集市,仍然可以进行跨集市必要时报告。

希望有帮助。

于 2018-07-31T07:20:58.540 回答
1

拥有单独的数据集市的目标更多地与治理相关,以保持数据的组织性和预期的位置(即“销售数据集市”中的销售交易),而与性能问题的相关性较小。

将单个数据库用作数据仓库的优势在于,您用于分析的所有数据都将存储在一个地方,使其更易于访问和查找。在这种情况下,您可以使用模式来实现(逻辑上)单独的数据集市。对于每个数据集市,您还可以使用数据库中的模式将开发数据与生产数据分开。

Snowflake 不同于传统的关系型数据库;鉴于其技术架构,在不同的数据库/模式之间连接大型表没有问题,因此您当然可以在不同的数据库中构建不同的数据集市,并将它们的事实或维度与其他一些雪花数据库/数据集市连接起来。

在您的特定情况下,如果您有大量数据集市(例如 10 个或更多)并且您使用 Snowflake 的目的不仅仅是数据仓库,我认为最好的方法是在自己的数据库中实现每个数据集市并使用模式来管理每个模式中的产品/开发数据。这将有助于保持数据井井有条,而不是快速达到在一个数据库中拥有数百个表(每个数据集市及其开发/产品版本)的程度,这不会是一个很好的开发或维护体验。

但是,从性能的角度来看,确实没有明显的区别。

于 2018-07-31T08:51:04.610 回答
1

根本不需要单独的星型模式。

如果您在您的集市中使用共享/一致的维度,则分离实际上是一种反模式。

如果您的问题是简化用户的隔离,那么每个市场的架构效果很好。

您建议的所有方法(DB/mart,DW/schema,...)都可以,我只是不清楚需要。

于 2018-07-30T23:20:59.850 回答