質問

私は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専用です:

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

http://cubes.databrewery.org/ もあります。 Pythonの軽量OLAPエンジン。

同様のニーズがありました-完全なORMではなく、Pythonの単純なOLAPのようなデータストアが必要です。既存のツールの空検索を思いついた後、この小さなハックを書きました:

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

それがあなたの正確なニーズを解決しないとしても、より洗練された何かを書くための良い出発点かもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top