【问题标题】:Any Python OLAP/MDX ORM engines?任何 Python OLAP/MDX ORM 引擎?
【发布时间】:2010-10-02 22:08:48
【问题描述】:

我是 MDX/OLAP 的新手,我想知道是否有任何类似于 Django ORM for Python 的 ORM 支持 OLAP。

我是一名 Python/Django 开发人员,如果有一些东西可以与 Django 进行某种程度的集成,我会非常有兴趣了解更多相关信息。

【问题讨论】:

    标签: python django orm olap mdx


    【解决方案1】:

    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
    

    要计算多个 SUM 和 COUNT 等等,您必须这样做。

    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 的原生 sum/group_by更快。为什么?您使用的是简单的映射,而不是 RDBMS 经常为此使用的更复杂的基于排序的分组操作。是的,你得到了很多行;但你在获得它们方面做得更少。

    它的缺点是它不像我们想要的那样具有声明性。它的优点是它是纯 Django ORM。

    【讨论】:

    【解决方案2】:

    我也有类似的需求——不是完整的 ORM,而是 Python 中一个简单的类似 OLAP 的数据存储。在干搜索现有工具后,我写了这个小技巧:

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

    即使它不能解决您的确切需求,它也可能是编写更复杂的东西的良好起点。

    【讨论】:

      【解决方案3】:

      kpw一样,我自己写的东西,只是它是专门为Django写的:

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

      【讨论】:

        【解决方案4】:

        还有http://cubes.databrewery.org/。 python中的轻量级OLAP引擎。

        【讨论】:

          猜你喜欢
          • 2011-04-17
          • 1970-01-01
          • 1970-01-01
          • 2011-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多