Frage

Ich bin neu in dem MDX / OLAP und ich frage mich, ob es wie Django ORM für Python jede ORM ähnlich ist, die OLAP unterstützen würde.

Ich bin ein Python / Django Entwickler und wenn es etwas sein würde, die ein gewisses Maß an Integration mit Django hätten würde ich mir sehr daran interessiert, mehr darüber zu lernen.

War es hilfreich?

Lösung

Django hat einige OLAP Funktionen, die Release nähern.

Lesen Sie http://www.eflorenzano.com/blog/post / secrets-django-orm /

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

Wenn Sie ein richtiges Star-Schema-Design an erster Stelle, dann eindimensional Ergebnisse können die folgende Form haben.

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

Wenn Sie eine zweidimensionale Zusammenfassung erstellen möchten, haben Sie so etwas wie die folgenden tun.

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

Um mehrere SUM ist und gräfliche zu berechnen und was nicht, haben Sie so etwas wie dies zu tun.

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

Diese - auf den ersten Blick - scheint ineffizient. Sie sind durch die Faktentabelle Trolling viele Zeilen zurückkehrt, die Sie dann in Ihrer Anwendung aggregiert werden.

In einigen Fällen ist dies sein kann, schneller als der natürliche Summe / group_by des RDBMS. Warum? Sie verwenden eine einfache Zuordnung, nicht die komplexeren Art basierte Gruppierungsoperation, die das RDBMS oft für diesen Einsatz hat. Ja, du bist viel Reihe bekommen; aber Sie weniger zu tun, sie zu erhalten.

Dies hat den Nachteil, dass es nicht so deklarative ist, wie wir möchten. Es hat den Vorteil, dass es reine Django ORM.

Andere Tipps

Gleiche wie KPW , ich meine eigenen Sachen zu schreiben, mit der Ausnahme, dass es ausschließlich für Django:

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

Es gibt auch http://cubes.databrewery.org/ . Leichte OLAP-Engine in Python.

Ich hatte ein ähnliches Bedürfnis - nicht für einen ausgewachsenen ORM aber für ein einfachen OLAP-Datenspeicher wie in Python. Nachdem sie für bestehende Werkzeuge bis trocken Suche schrieb ich dieses kleine Hack:

https://github.com/kpwebb/python CUBE / Blob / Master / src / cube.py

Auch wenn es nicht Ihre genauen Bedarf nicht lösen, könnte es eine gute Ausgangspunkt für sein etwas anspruchsvollere zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top