如何在DataBrewery中从多个商店创建OLAP立方体
我现在正在努力理解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 目前为每个存储创建一个单独的命名空间,除非另有说明。在你的例子中,每个模型最终都在各自存储的命名空间里(也就是 store1
和 store2
)。默认的(全局)命名空间是空的,因此工作区无法在另一个存储中找到你的维度。
你可以尝试以下选项:
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")