如何在DataBrewery中从多个商店创建OLAP立方体

1 投票
1 回答
1476 浏览
提问于 2025-04-18 16:34

我现在正在努力理解OLAP立方体。

为了学习,我正在使用cubes这个框架。

目前我遇到的问题是,想要创建一个依赖于两个不同商店的维度的立方体。

我尝试利用所有定义的维度默认都是公开的这一点来实现这个目标。

下面是一些匿名的代码,展示了我尝试解决这个问题的方法:

workspace = Workspace()
workspace.register_store("store1", "sql", schema="schema1", url="postgresql://<URL>")
workspace.register_store("store2", "sql", schema="schema2", url="postgresql://<URL>")
workspace.import_model("model1.json", store="store1")
workspace.import_model("model2.json", store="store2")
workspace.import_model("cube_with_dimensions_from_model1_and_model2.json")
browser = workspace.browser("cube_with_dimensions_from_model1_and_model2")

但是我遇到了一个错误:

cubes.errors.NoSuchDimensionError: 找不到维度 'dimesion_from_model2'

这显然意味着它找不到在model1和model2中导入的维度。

有没有人能给我一些建议,告诉我该如何解决这个问题?

附注:如果有比这里找到的更多示例项目,我会非常感激。

1 个回答

1

Cubes 目前为每个存储创建一个单独的命名空间,除非另有说明。在你的例子中,每个模型最终都在各自存储的命名空间里(也就是 store1store2)。默认的(全局)命名空间是空的,因此工作区无法在另一个存储中找到你的维度。

你可以尝试以下选项:

A. 使用默认命名空间

workspace.import_model("model1.json", "store1", namespace="default")
workspace.import_model("model2.json", "store2", namespace="default")

B. 分开公共维度

把共享的维度放到 model_common.json(或者更确切地说,放到 common.cubesmodel 目录)中,并单独导入,不指定任何存储或命名空间(这些维度将会放到默认的/全局的命名空间中):

workspace.import_model("common.cubesmodel")
workspace.import_model("model1.json", "store1")
workspace.import_model("model2.json", "store2")

撰写回答