7

我是 MDX/OLAP 的新手,我想知道是否有任何类似于 Django ORM for Python 的 ORM 可以支持 OLAP。

我是一名 Python/Django 开发人员,如果有一些东西可以与 Django 进行某种程度的集成,我会非常有兴趣了解更多关于它的信息。

4

4 回答 4

6

Django 有一些即将发布的 OLAP 功能。

阅读http://www.eflorenzano.com/blog/post/secrets-django-orm/

http://doughellmann.com/2007/12/30/using-raw-sql-in-django.html,也

如果您首先有适当的星型模式设计,那么一维结果可以具有以下形式。

from myapp.models import SomeFact
from collections import defaultdict

facts = SomeFact.objects.filter( dimension1__attribute=this, dimension2__attribute=that )
myAggregates = defaultdict( int )
for row in facts:
    myAggregates[row.dimension3__attribute] += row.someMeasure

如果要创建二维摘要,则必须执行以下操作。

facts = SomeFact.objects.filter( dimension1__attribute=this, dimension2__attribute=that )
myAggregates = defaultdict( int )
for row in facts:
    key = ( row.dimension3__attribute, row.dimension4__attribute )
    myAggregates[key] += row.someMeasure

要计算多个 SUM 和 COUNT 等等,你必须做这样的事情。

class MyAgg( object ):
    def __init__( self ):
        self.count = 0
        self.thisSum= 0
        self.thatSum= 0

myAggregates= defaultdict( MyAgg )
for row in facts:
    myAggregates[row.dimension3__attr].count += 1
    myAggregates[row.dimension3__attr].thisSum += row.this
    myAggregates[row.dimension3__attr].thatSum += row.that

这——乍一看——似乎效率低下。您正在浏览返回大量行的事实表,然后您将这些行汇总到您的应用程序中。

在某些情况下,这可能比 RDBMS 的本机 sum/group_by更快。为什么?您使用的是简单的映射,而不是 RDBMS 经常为此使用的更复杂的基于排序的分组操作。是的,你得到了很多行;但你在得到它们方面做得更少。

这样做的缺点是它不像我们想要的那样具有声明性。它的优点是它是纯 Django ORM。

于 2009-01-23T02:24:53.600 回答
1

kpw 一样,我自己写东西,除了它是专门为 Django 写的:

https://code.google.com/p/django-cube/

于 2010-06-07T12:53:01.390 回答
1

还有http://cubes.databrewery.org/。python中的轻量级OLAP引擎。

于 2013-10-30T13:35:23.973 回答
0

我也有类似的需求——不是完整的 ORM,而是 Python 中一个简单的类似 OLAP 的数据存储。在对现有工具进行干搜索后,我写了这个小技巧:

https://github.com/kpwebb/python-cube/blob/master/src/cube.py

即使它不能解决您的确切需求,它也可能是编写更复杂的东西的良好起点。

于 2010-04-21T13:33:32.867 回答