Pergunta

Eu sou novo para o MDX / OLAP e eu estou querendo saber se há alguma ORM semelhante, como Django ORM para Python que iria apoiar OLAP.

Eu sou um / desenvolvedor Django Python e se haveria algo que pudesse ter algum nível de integração com Django eu estaria muito interessado em aprender mais sobre ele.

Foi útil?

Solução

Django tem algumas características OLAP que estão se aproximando de lançamento.

Leia http://www.eflorenzano.com/blog/post / segredos-django-ORM /

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

Se você tem um projeto adequado esquema em estrela, em primeiro lugar, então os resultados unidimensionais pode ter o seguinte formulário.

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

Se você quiser criar um resumo de duas dimensões, você tem que fazer algo como o seguinte.

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últiplos SUM de e COUNT de e que-não, você tem que fazer algo assim.

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

Este - à primeira vista - parece ineficiente. Você está corrico através da tabela de fato retornando lotes de linhas que você está, em seguida, agregando em sua aplicação.

Em alguns casos, isso pode ser mais rápido que a do RDBMS nativo soma / group_by. Por quê? Você está usando um mapeamento simples, não a mais complexa operação de agrupamento baseada em espécie que o RDBMS, muitas vezes tem que usar para isso. Sim, você está recebendo um grande número de linhas; mas você está fazendo menos para obtê-los.

Isto tem a desvantagem de que não é tão declarativo quanto gostaríamos. Tem a vantagem de que é puro Django ORM.

Outras dicas

A mesma coisa como KPW , eu escrevo minhas próprias coisas, exceto que ele é exclusivamente para Django:

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

Há também http://cubes.databrewery.org/ é. motor OLAP leve em python.

Eu tinha uma necessidade semelhante - não para um ORM soprado completo, mas para um OLAP-como armazenamento de dados simples em Python. Após a vinda acima busca seco para obter ferramentas existentes que eu escrevi este pequeno hack:

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

Mesmo que isso não resolve a sua necessidade exata, pode ser uma boa começando lugar para escrever algo mais sofisticado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top