在Postgres中为Tableau连接存储计算列是不是很糟糕?

时间:2016-01-26 17:10:06

标签: postgresql tableau

我最近买了一个Professional许可证(来自Personal),我将一些数据加载到postgreSQL中。这是我第一次使用数据库,但我已经阅读了很多关于它们的信息(SQL Demystified,数据仓库)

我习惯使用.csv文件来创建原始数据中的计算数据。我使用pandas(python分析库)来清理我的文件,添加列,进行连接等。这有助于我简化Tableau中的一些计算字段,我的最终用户有时会打开这些文件,并且有额外的字段很好。 / p>

实施例: 在pandas中,我可以创建一个基于其他列上的逻辑和数学的列。这将在原始数据中创建一个“冗余”列,因为它可以计算。

或者我可以使用Tableau中的IF语句或LOD计算来计算。我已经读过创建可以计算并将它们存储在数据库中的列是禁止的。另一方面,Tableau对持久且常见的值进行额外的工作/计算似乎有点愚蠢。

(例如,如果某列='入站'另一列=非空,则inbound_interaction = 1)(示例2,total_time =多列的总和)

有关此主题的任何想法或最佳做法?由于我本周刚开始新鲜,我不妨开始一个好的开始。

1 个答案:

答案 0 :(得分:2)

这个问题有点宽泛,没有金章回答。 您需要考虑的某些成本是

  • 陈旧与新数据
  • 物化列使用的空间
  • 服务器与客户端的计算成本
  • 维护物化列的成本

现在我们有4个解决方案:

  • 表格中的原始数据,客户完成的额外计算
  • Views将计算数据提供给客户端但是在服务器上即时完成,这些可以由indexes on expressions辅助。此外,视图使得更容易选择给定用户可访问的数据,并且您可以在不占用空间的情况下拥有许多数据。
  • Materialized views与视图相同但存储计算数据并不新鲜,但比某些自制物化更容易维护。也可以使用索引
  • 包含数据库外部应用程序计算的数据的表,用于数据库无法处理的内容

我建议使用索引,如果不能很好地切换到物化索引。当然,你可以采用部分解决方案,因为一些数据总是需要最新的,其他数据可能需要花费大量时间在服务器上,但是经常访问不足以存储它实现,而其他数据可能真的很快计算但访问通常,实现它将使整个系统表现得更好。