Python OLAP / MDX ORMエンジンはありますか?
質問
私はMDX / OLAPが初めてで、OLAPをサポートするPython用のDjango ORMのような類似のORMがあるかどうか疑問に思っています。
私はPython / Django開発者であり、Djangoとある程度の統合が可能なものがあれば、それについてもっと知りたいと思います。
解決
Djangoには、リリース間近のOLAP機能がいくつかあります。
http://www.eflorenzano.com/blog/postを読む/ secrets-django-orm /
http://doughellmann.com/2007 /12/30/using-raw-sql-in-django.html 、
最初に適切なスタースキーマデザインがある場合、1次元の結果は次の形式になります。
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
2次元の要約を作成する場合は、次のような操作を行う必要があります。
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であるという利点があります。
他のヒント
kpw と同じこと、私は自分のものを書きますが、それはDjango専用です:
http://cubes.databrewery.org/ もあります。 Pythonの軽量OLAPエンジン。
同様のニーズがありました-完全なORMではなく、Pythonの単純なOLAPのようなデータストアが必要です。既存のツールの空検索を思いついた後、この小さなハックを書きました:
https://github.com/kpwebb/python -cube / blob / master / src / cube.py
それがあなたの正確なニーズを解決しないとしても、より洗練された何かを書くための良い出発点かもしれません。