任何Python的OLAP / MDX ORM引擎?
题
我是新来的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的:
还有 http://cubes.databrewery.org/ 。轻量级OLAP引擎在python。
我也有类似的需要 - 不是一个完全成熟的ORM但对于在Python简单OLAP样数据存储。上来干搜索现有的工具后,我写了这个小黑客:
https://github.com/kpwebb/python -cube /斑点/主/ SRC / cube.py
即使它不解决您的具体需求,这可能是写一些更复杂的一个很好的起点。