문제

나는 MDX/OLAP를 처음 접했고 OLAP를 지원할 파이썬에 대한 Django ORM과 비슷한 ORM이 있는지 궁금합니다.

저는 Python/Django 개발자이며 Django와 어느 정도의 통합을 가질 수있는 것이 있다면 그것에 대해 더 많이 배우는 데 많은 관심이있을 것입니다.

도움이 되었습니까?

해결책

Django에는 출시가 가까워지는 OLAP 기능이 있습니다.

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

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

처음에 적절한 스타 스키마 설계가있는 경우 1 차원 결과는 다음 형식을 가질 수 있습니다.

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

2 차원 요약을 만들려면 다음과 같은 작업을 수행해야합니다.

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

이것은 처음에는 홍당무가 비효율적으로 보입니다. 당신은 사실 테이블을 통과하고 있으며, 당신이 당신의 응용 프로그램에서 집계하는 많은 행을 반환하고 있습니다.

어떤 경우에는 이것이 될 수 있습니다 더 빠르게 RDBMS의 기본 합계/Group_by보다. 왜요? RDBMS가 종종 사용해야하는 더 복잡한 정렬 기반 그룹화 작업이 아니라 간단한 매핑을 사용하고 있습니다. 예, 당신은 많은 행을 얻고 있습니다. 그러나 당신은 그들을 얻기 위해 덜하고 있습니다.

이것은 우리가 원하는만큼 선언적이지 않다는 단점이 있습니다. 그것은 순수한 Django Orm이라는 이점이 있습니다.

다른 팁

같은 것 KPW, 나는 그것이 Django를위한 것임을 제외하고는 내 자신의 것들을 씁니다.

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

도 있습니다 http://cubes.databrewery.org/ . 파이썬의 경량 OLAP 엔진.

나는 비슷한 요구가있었습니다 - 완전히 날아간 ORM이 아니라 Python의 간단한 OLAP와 같은 데이터 저장소에 대한 것입니다. 기존 도구를 건식 검색 한 후이 작은 해킹을 썼습니다.

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

정확한 요구를 해결하지 않더라도 더 정교한 글을 쓰기에 좋은 출발점 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top