2016-01-26 41 views
1

我最近買了一個專業許可證(來自個人),我將一些數據加載到postgreSQL中。這是我第一次使用數據庫,但我已經閱讀了很多關於它們的信息(SQL Demystified,Data Warehouse)在Postgres中爲Tableau連接存儲計算列是否很糟糕?

我對.csv文件的習慣是在原始數據中創建計算數據。我使用pandas(python分析庫)來清理我的文件,添加列,進行連接等。這幫助我簡化了Tableau中的一些計算字段,並且我的最終用戶有時會打開這些文件,並且擁有額外的字段很不錯。

例如: 在熊貓中,我可以創建一個基於某些邏輯和其他列上的數學的列。這會在原始數據中創建一個「冗餘」的列,因爲它可以被計算出來。

或者我可以使用Tableau中的IF語句或LOD計算來計算該值。我已經讀過,創建可以計算的列並將它們存儲在數據庫中是不可能的。另一方面,Tableau爲持久和常見的值做額外的工作/計算似乎有點愚蠢。

(實施例,inbound_interaction = 1,如果某列=「入」和另一列=不爲空)(實施例2,TOTAL_TIME =幾列的總和)

在這個問題上任何想法或最佳做法?由於本週我剛剛開始新鮮,所以我不妨開個好頭。

+2

我會考慮將計算值存儲在數據庫中的權衡取決於計算值所需的數據和時間,例如我會考慮將餘額值存儲在帳戶表中,儘管我可以通過遍歷事務列表來計算餘額。當然這需要付出代價,因爲現在數據庫可能會變得不一致。避免任何計算的值存儲可以保持數據庫的一致性,但是這需要每次需要計算值時進行計算。 –

回答

2

這個問題有點寬泛,沒有金色的子彈答案。 你必須要考慮一定的費用是

  • 具有失效VS新數據
  • 空間被物化列使用
  • 計算的服務器上的成本VS客戶端
  • 成本保持物化列

現在我們有4個解決方案:

  • 表中的原始數據,額外的計算由當前計算數據到客戶端,但其在運行在服務器上完成客戶端
  • Views完成的,這些可以通過indexes on expressions來輔助。此外,這些視圖使得更容易選擇給定用戶可訪問的數據,並且您可以在不佔用空間的情況下獲得更多數據。
  • Materialized views哪些是像意見,但存儲計算的數據,並不新鮮,但比一些自制物化更容易維護。指數也可能在他們
  • 表包含應用程序使用的數據庫之外計算出的數據,爲您的數據庫無法處理

的事情,我建議你去使用索引,如果那並不不能很好地切換到物化索引。當然,您可能會採用部分解決方案,因爲一些數據總是需要更新,其他數據可能需要很長時間才能訪問服務器,但訪問量不足以存儲實體化數據,而其他數據可能真的很快計算但訪問通常情況下實現它會使整個系統的性能更好。

相關問題