我是新来的MDX / OLAP,我想知道是否有类似的像Django的ORM为Python,将支持OLAP任何ORM。

我是一个Python / Django的开发及是否会有一些会与Django的集成一定程度,我会更多地了解它更感兴趣。

有帮助吗?

解决方案

Django的具有正接近释放一些OLAP功能。

读取 http://www.eflorenzano.com/blog/post /秘密-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的本机和/ GROUP_BY。为什么?您正在使用一个简单的映射,而不是更复杂的基于排序分组的RDBMS常常需要使用此操作。是的,你得到了很多行;但你少做,让他们。

这有一个缺点,它不是这样的声明,因为我们想。它具有的优点是它的纯的Django ORM。

其他提示

同样的事情的 KPW 的,我写我自己的东西,但它是专门为Django的:

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

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

我也有类似的需要 - 不是一个完全成熟的ORM但对于在Python简单OLAP样数据存储。上来干搜索现有的工具后,我写了这个小黑客:

https://github.com/kpwebb/python -cube /斑点/主/ SRC / cube.py

即使它不解决您的具体需求,这可能是写一些更复杂的一个很好的起点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top