Question

Je suis nouveau dans le MDX / OLAP et je me demande s’il existe un ORM similaire à Django ORM pour Python qui prendrait en charge OLAP.

Je suis un développeur Python / Django et s'il y avait quelque chose qui aurait un certain niveau d'intégration avec Django, je serais très intéressé d'en apprendre plus à ce sujet.

Était-ce utile?

La solution

Django propose certaines fonctionnalités OLAP bientôt disponibles.

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

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

Si vous avez une conception en étoile appropriée, les résultats unidimensionnels peuvent avoir la forme suivante.

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

Si vous souhaitez créer un résumé en deux dimensions, vous devez procéder de la manière suivante.

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

Pour calculer plusieurs SUM et COUNT et ce qui ne l'est pas, vous devez faire quelque chose comme ceci.

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

Cela - à première vue - semble inefficace. Vous parcourez la table des faits en retournant de nombreuses lignes que vous agrégez ensuite dans votre application.

Dans certains cas, cela peut être plus rapide que la somme / group_by native du SGBDR. Pourquoi? Vous utilisez un mappage simple, pas l'opération de regroupement basée sur le tri plus complexe que le SGBDR doit souvent utiliser pour cela. Oui, vous obtenez beaucoup de lignes. mais vous en faites moins pour les obtenir.

Cela a le désavantage de ne pas être aussi déclaratif que nous le souhaiterions. Il a l'avantage d'être pur Django ORM.

Autres conseils

Même chose que kpw , j'écris moi-même, sauf que c'est exclusivement pour Django:

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

Il existe également http://cubes.databrewery.org/ . Moteur OLAP léger en python.

J'avais un besoin similaire - pas pour un ORM complet, mais pour un simple magasin de données de type OLAP en Python. Après être revenu à sec à la recherche d’outils existants, j’ai écrit ce petit hack:

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

Même si cela ne résout pas votre besoin, cela pourrait être un bon point de départ pour écrire quelque chose de plus sophistiqué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top