Python:与复杂的数据仓库交互

buk*_*zor 9 python olap sqlalchemy data-warehouse django-models

我们一直在努力研究我们问题的全维数据库模型,现在是时候开始编码了.我们以前的项目使用了由字符串操作构造的手工制作的查询.

在python和复杂的数据库布局之间进行接口是否有任何最佳/标准的做法?

我简要地评估了SQLAlchemy,SQLObject和Django-ORM,但是(我可能很容易遗漏一些东西)它们似乎针对微小的Web类型(OLTP)事务进行了调整,我正在进行高容量分析(OLAP)事务.

我的一些要求,可能与平时有所不同:

  1. 相对快速地加载大量数据
  2. 快速轻松地更新/插入少量数据
  3. 轻松处理大量行(5年内每分钟300个条目)
  4. 允许对模式进行修改,以满足将来的要求

编写这些查询很容易,但编写代码以使数据排成一行非常繁琐,特别是随着模式的发展.这似乎是计算机可能擅长的东西?

S.L*_*ott 6

不要对你的要求感到困惑.一种尺寸并不适合所有人.

相对快速地加载大量数据

为什么不使用数据库的本机加载器呢?使用Python准备文件,但使用数据库工具加载.你会发现这非常快.

快速轻松地更新/插入少量数据

这开始扭曲数据仓库的规则.除非您在谈论主数据管理以更新维度的报告属性.

这就是ORM和Web框架的用途.

轻松处理大量行(5年内每分钟300个条目)

再次,这就是您使用Python前端处理管道的原因,但实际的INSERT是由数据库工具完成的.不是Python.

为了将来的要求,可以轻松地改变模式(以及python接口)

您几乎没有用于自动执行此操作.它肯定是"编程"的最低优先级任务.您通常会手动执行此操作以正确保留数据.

顺便说一句,"通过字符串操作构建的手工制作的查询"可能是有史以来最大的错误.这些对于RDBMS解析器来说很难处理 - 它们比使用插入了绑定变量的查询要慢.


小智 2

当然是 SQLAlchemy。与 SQLAlchemy 相比,所有其他 ORM 看起来都像小孩子的玩具。特别是 Django-ORM。SQLAlchemy 之于 Python,就像 Hibernate 之于 Java 一样。