Какие-нибудь движки Python OLAP / MDX ORM? - PullRequest
7 голосов
/ 22 января 2009

Я новичок в MDX / OLAP и мне интересно, есть ли какой-нибудь ORM, подобный Django ORM для Python, который бы поддерживал OLAP.

Я разработчик на Python / Django, и если что-то будет иметь некоторый уровень интеграции с Django, мне было бы очень интересно узнать больше об этом.

Ответы [ 4 ]

6 голосов
/ 23 января 2009

В Django есть некоторые функции OLAP, которые близки к выпуску.

Чтение http://www.eflorenzano.com/blog/post/secrets-django-orm/

http://doughellmann.com/2007/12/30/using-raw-sql-in-django.html, также

Если у вас в первую очередь правильный дизайн схемы звезды, тогда одномерные результаты могут иметь следующий вид.

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

Если вы хотите создать двумерную сводку, вам нужно сделать что-то вроде следующего.

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

Чтобы вычислить несколько СУММ и СЧЕТОВ, а что нет, вы должны сделать что-то вроде этого.

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

Это - на первый взгляд - кажется неэффективным. Вы просматриваете таблицу фактов, возвращая множество строк, которые затем агрегируете в своем приложении.

В некоторых случаях это может быть быстрее , чем собственная сумма СУБД / group_by. Зачем? Вы используете простое отображение, а не более сложную операцию группировки на основе сортировки, которую СУБД часто приходится использовать для этого. Да, вы получаете много строк; но вы делаете меньше, чтобы получить их.

Это имеет тот недостаток, что это не так декларативно, как хотелось бы. Преимущество в том, что это чистый Django ORM.

1 голос
/ 30 октября 2013

Существует также http://cubes.databrewery.org/. Легкий движок OLAP на python.

1 голос
/ 07 июня 2010

То же самое, что и кВт , я пишу свои собственные вещи, за исключением того, что это исключительно для Django:

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

0 голосов
/ 21 апреля 2010

У меня была похожая потребность - не для полноценного ORM, а для простого OLAP-подобного хранилища данных в Python. После тщательного поиска существующих инструментов я написал этот небольшой взлом:

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

Даже если это не решит ваших точных задач, это может быть хорошей отправной точкой для написания чего-то более сложного.

...