Pregunta

Soy nuevo en MDX / OLAP y me pregunto si hay algún ORM similar, como Django ORM para Python, que sea compatible con OLAP.

Soy un desarrollador de Python / Django y si hubiera algo que tuviera algún nivel de integración con Django, estaría muy interesado en aprender más al respecto.

¿Fue útil?

Solución

Django tiene algunas características OLAP que están a punto de lanzarse.

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

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

Si tiene un diseño de esquema de estrella adecuado en primer lugar, los resultados unidimensionales pueden tener la siguiente forma.

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 desea crear un resumen bidimensional, debe hacer algo como lo siguiente.

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

Para calcular múltiples SUM y COUNT y demás, debe hacer algo como esto.

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

Esto, a primera vista, parece ineficiente. Está revisando la tabla de hechos que devuelve muchas filas que luego está agregando en su aplicación.

En algunos casos, esto puede ser más rápido que la suma / grupo_by nativo del RDBMS. ¿Por qué? Está utilizando una asignación simple, no la operación de agrupación basada en clasificación más compleja que el RDBMS a menudo tiene que usar para esto. Sí, estás obteniendo muchas filas; pero estás haciendo menos para obtenerlos.

Esto tiene la desventaja de que no es tan declarativo como nos gustaría. Tiene la ventaja de que es puro ORM de Django.

Otros consejos

Lo mismo que kpw , escribo mis propias cosas, excepto que es exclusivamente para Django:

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

También hay http://cubes.databrewery.org/ . Motor OLAP ligero en python.

Tenía una necesidad similar, no para un ORM completo sino para un simple almacén de datos similar a OLAP en Python. Después de buscar en seco las herramientas existentes, escribí este pequeño truco:

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

Incluso si no resuelve su necesidad exacta, podría ser un buen punto de partida para escribir algo más sofisticado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top