有人可以用示例查詢向我解釋Vertica數據庫中PROJECTION的概念嗎?vertica數據庫中的投影
回答
來自Vertica文檔的概念指南.pdf(大約在第23頁)。
投影以優化查詢執行的格式存儲數據。 它們與物化視圖類似,因爲它們將結果集 存儲在磁盤上,而不是每次在查詢中使用它們時計算它們。
也
預測是透明給最終用戶的SQL。 Vertica查詢 優化程序會自動選擇用於任何 查詢的最佳投影。
爲了提高查詢性能,所有需要完成的投影都是爲了創建投影。 Vertica將自動選擇用於該查詢的最佳投影。 (注意:可以通過特定查詢來強制執行特定投影,而不是查詢表格)
我不知道您對預測的理解在哪裏,但有關預測的更具體的問題將允許更詳細地闡述特定點。如果您希望瞭解我推薦的概念並閱讀概念指南.pdf。 http://my.vertica.com
Vertica不使用索引來查找數據。
從概念上講,您仍然使用SQL訪問表。但在引擎蓋下方,表格中的數據存儲在投影中,您可以針對不同的查詢進行優化。
我喜歡把它看作代表一副牌的桌子。如果玩撲克,你可能仍然會說「從CardDeck限制5選擇*」。
比方說,你有以下的列定義的表:
秀場INT(讓我們只是假設,面值有整型), 套裝VARCHAR(10)
我可以創建我的預測(我省略關於分區,超級預測,好友預測等的細節)。
創建投影CardDeck_p1 ( ENCODING秀RLE, 套裝 ) 作爲 選擇秀,從由秀CardDeck順序套裝;
創建投影CardDeck_p2 ( 秀, 套裝 ) 作爲 選擇秀,從由套裝CardDeck順序套裝;
現在,每列可以得到不同類型的投影中定義的編碼。而數據庫設計人員,自從我使用舊版本以來,我並沒有多少使用它,可以幫助您設計預測。因此,回到卡片類比的套牌,想象你想要訪問一副牌,但你想有不同的洗牌卡。 Vertica中的投影爲您提供了不同的洗牌方式。表格實際上是一個構造,它允許您訪問存儲在投影中的數據。但是如果你正在編寫SQL,你可以訪問表。
非常感謝geoffrobinson! – Murali 2012-04-19 05:49:56
我想強調一下在geoff的答案中提出的觀點 - 投影是磁盤上的物理結構。爲表定義多個投影可以提高查詢性能,但代價是磁盤空間增加和加載時間較慢(因爲您的行必須放入每個投影中)。
有超級投影將所有列存儲在表中以及部分投影。當您試圖支持/優化的查詢只需要表格中的一部分列時,就可以使用部分投影。每張桌子至少需要一個超級投影。如果您沒有定義一個,Vertica將提供默認的一個,這可能會導致性能很差。
建議的做法是讓Database Designer工具幫助您使用測試數據和測試查詢分析您的表格,之後它可以爲您提供投影。我個人沒有以這種方式獲得好的結果,但知道如何使用DBD工具應該成爲Vertica培訓任何人的課程的一部分。
謝謝kimbo305 – Murali 2012-04-19 10:56:50
有Vertica的的預測的一些很好的解釋在vertica.com博客以及如何使用它建議:
鏈接已經壞了..只是主頁。 – 2016-12-21 14:33:55
看起來你似乎很熟悉意見。預測與概念上的觀點非常相似,它們都緩存了某些內容,但是處於不同的級別。簡而言之,視圖緩存查詢語句,而投影緩存查詢結果。
視圖緩存查詢語句。您給預定義查詢命名,然後調用它們。查看查詢在創建時不會執行。當您使用視圖執行查詢時,由於它們只是普通查詢,所以不會得到任何性能改進。
投影緩存查詢結果。投影查詢在創建時執行,並且結果在存儲上保留。當您執行任何可以利用查詢結果的查詢時,Vertica將使用這些投影來響應查詢,從而提高查詢性能。創建投影之後,您無需執行任何特殊操作,Vertica將自動選擇投影,前提是可以有利於查詢。該投影可用於查詢,因爲該查詢使用投影的子集列,具有相同的排序順序等。
像視圖這樣的投影,您可以選擇表列的子集,與其他表執行聯接,按特定列排序。但是,不同的預測會佔用自己的空間來保存查詢結果,創建的投影越多,它們將被消耗的空間就越多。在更新相關源表時,投影會自動更新。更新過程在後臺執行,可能需要很長時間,具體取決於查詢複雜性和數據大小。因此,預測更適合許多讀取,而不是許多寫入。從用例角度來看,與實時Web儀表盤相比,預測更適合報告。
在實施細節中,Vertica中的表格都是邏輯的。表中的所有數據都存儲在每個關聯的超級投影中。超級投影包含表格中的所有列,並且默認情況下會自動創建。所有其他投影均來自超級投影。
Vertica的將決定什麼樣的預測將被用於查詢,但你也可以指定預測的名義直接迫使Vertica的使用它們:
-- List all projections
SELECT projection_name FROM projections;
-- Force to use super projection, _super is the suffix of the super projection
SELECT * FROM FACT_TABLE_super;
您可以使用EXPLAIN語句看什麼在查詢計劃中使用投影。這將幫助您提高查詢的性能。
- 1. 如何使用Vertica數據庫設計器創建查詢特定投影?
- 2. 投影同步數據庫查詢
- 3. Vertica數據庫中的總和查詢
- 4. 如何在Vertica中重新分割投影?
- 5. 將Vertica數據庫用於OLTP數據?
- 6. 由osm2pgsql製作的數據庫中的投影是什麼?
- 7. d3.js:混合投影和未投影的地理數據
- 8. PCA投影數據R
- 9. vertica db:在創建投影時求和和groupby查詢
- 10. 在Excel中提取投影數據
- 11. 如何在Spring數據庫中返回深度嵌套投影?
- 12. Vertica admintools - 無法連接到數據庫
- 13. 將R與Vertica數據庫連接
- 14. 更新投影背後的數據?
- 15. GAE數據存儲,帶投影的GetMulti()?
- 16. 投影數據庫與其他表相同的表
- 17. 從位於Android庫的AsyncTask發送數據以投影Android AppWidgetProvider
- 18. .NET投影(CRS對話)庫
- 19. 線性投影庫C#
- 20. Grails中的投影
- 21. AndEngine中的投影
- 22. 帶RestController的彈簧投影投影
- 23. Haskell中Futamura投影的證據
- 24. 其中是事件庫投影文檔?
- 25. .NET中的MongoDB投影是否發生在數據庫或內存中?
- 26. 熊貓JSON數據解析投影
- 27. 春數據休息ResourceProcessor投影異常
- 28. 如何在Vertica數據庫中通過數字排序varchar列?
- 29. 在Vertica的數據庫中全局創建倒排索引
- 30. 併發查詢環境中的HP Vertica數據庫?
謝謝尼婭。您的回覆非常有用。我對此還有幾個問題。 我的理解是,PROJECTIONS類似於VIEWS,不同之處在於投影將結果集存儲在磁盤上,而視圖每次在查詢中使用它們時都會計算表中的數據。 我可以使用VIEW作爲PROJECTION的備用項目嗎?如果是這樣,我會得到任何性能問題嗎? – Murali 2012-04-19 06:12:44
@Murali:Vertica中的「Views」本質上是查詢。 (來自_SQL Reference Manual.pdf_)「[in]包含視圖的查詢,視圖名稱將被視圖的定義查詢替換」 – Nija 2012-04-19 16:58:14
謝謝。順便說一句,我無法從http://my.vertica.com下載Concepts Guide.pdf。看來,只有授權用戶才能下載。我註冊了,但還沒有收到激活郵件。有沒有其他方法可以獲得.pdf指南? – Murali 2012-04-19 17:54:20