将计算列存储在 Tableau 连接的 Postgres 中是否不好



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

我对.csv文件的习惯是在原始数据中创建计算数据。我使用pandas(python分析库)来清理我的文件,添加列,做连接等。这有助于我简化 Tableau 中的一些计算字段,我的最终用户有时会打开这些文件,拥有额外的字段真是太好了。

例:在熊猫中,我可以创建一个基于其他列上的一些逻辑和数学的列。这将在原始数据中创建一列,该列是"冗余的",因为它可以计算。

或者,我可以在 Tableau 中使用 IF 语句或详细级别计算来计算。我已经读到,创建可以计算的列并将其存储在数据库中是不行的。另一方面,让 Tableau 为持久且常见的值执行额外的工作/计算似乎有点愚蠢。

(例如,如果某个列 = "入站",而另一列 = 不为 null,则 inbound_interaction = 1)(示例 2,total_time = 几列的总和)

关于这个问题有什么想法或最佳实践吗?由于我本周实际上刚刚开始,我不妨有一个良好的开端。

这个问题有点宽泛,没有金弹的答案。您必须考虑的某些成本是

  • 拥有陈旧数据与新数据
  • 实例化列使用的空间
  • 服务器与客户端上的计算成本
  • 维护具体化列的成本

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

  • 表中的原始数据,客户完成的额外计算
  • 客户端显示计算数据但在服务器上动态完成的视图,这些视图可以通过表达式上的索引来辅助。此外,视图可以更轻松地选择给定用户可以访问的数据,并且您可以在不占用空间的情况下拥有许多数据。
  • 物化视图
  • 与视图类似,但存储计算数据,不是新鲜的,但比一些自制的具体化更容易维护。索引也是可能的
  • 包含数据库外部应用程序计算的数据的表,用于数据库无法处理的事情

我建议使用索引,如果表现不佳,请切换到具体化索引。当然,您可以采用部分解决方案,因为某些数据需要始终是最新的,其他数据可能需要在服务器上花费大量时间,但访问频率不足以存储其具体化,而其他一些数据可能计算速度非常快,但访问频率如此之高,具体化将使整个系统的性能更好。

最新更新