有人可以用示例查询向我解释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