Vertica数据库中的投影[关闭]

问题描述 投票:7回答:4

有人可以通过示例查询向我解释Vertica数据库中PROJECTION的概念吗?

database projection vertica
4个回答
9
投票

Vertica不使用索引来查找数据。

从概念上讲,您仍然可以使用SQL访问表。但是在底层,表格中的数据存储在投影中,您可以针对不同的查询进行优化。

我喜欢将它看作代表一副纸牌的桌子。如果玩扑克,你可能会说些什么

Select * from CardDeck limit 5;

假设您有一个使用以下列定义的表:

FaceValue int (let's just assume face values are ints),
Suit varchar(10)

然后我可以创建我的投影(我省略了有关分区,超级投影,伙伴投影等的详细信息)。

create projection CardDeck_p1
(
FaceValue ENCODING RLE,
Suit
)
as 
select FaceValue, Suit from CardDeck order by FaceValue;

create projection CardDeck_p2
(
FaceValue,
Suit
)
as
select FaceValue, Suit from CardDeck order by Suit;

现在,每列可以获得在投影中定义的不同类型的编码。数据库设计师,自从我使用旧版本以来,我没有太多使用,可以帮助您设计预测。

所以回到卡片类比,想象你想要访问一副牌,但你想要有不同的卡片洗牌。 Vertica中的预测为您提供了不同的随机播放。表实际上是一个允许您访问存储在投影中的数据的构造。但是如果您正在编写SQL,则可以访问表。


1
投票

来自Vertica文档的Concepts Guide.pdf(第23页)。

预测以优化查询执行的格式存储数据。它们与物化视图类似,因为它们将结果集存储在磁盘上,而不是每次在查询中使用它们时计算它们。

预测对SQL的最终用户是透明的。 Vertica查询优化器会自动选择要用于任何查询的最佳投影。

为提高查询性能而需要进行的所有操作都是创建投影。 Vertica将自动选择用于该查询的最佳投影。 (注意:可以通过特别查询而不是表格来强制执行特定投影)

我不知道您对预测的理解在哪里,但有关预测的更具体问题将允许更详细地阐述具体要点。如果您希望获得概述的一般视图,我建议您阅读并阅读Concepts Guide.pdf。 http://my.vertica.com


1
投票

我想强调杰夫答案中的观点 - 预测是磁盘上的物理结构。为表定义多个投影可以提高查询性能,但代价是磁盘空间增加和加载时间较慢(因为必须将行放入每个投影中)。

有超级投影可以存储表格中的所有列以及部分投影。当您要支持/优化的查询只需要表中列的一部分时,您将使用部分投影。每张桌子至少需要一个超级投影。如果您没有定义一个,Vertica将提供一个默认的,性能非常差。

建议的做法是让Database Designer工具帮助您使用测试数据和测试查询分析表,之后它可以为您建议投影。我个人没有这么好的成绩,但是知道如何使用DBD工具应该成为Vertica培训人员的课程的一部分。


0
投票

看起来你对视图很熟悉。预测与概念中的观点非常相似,它们既可以缓存某些内容,也可以在不同的级简而言之,视图缓存查询语句,而投影缓存查询结果。

视图缓存查询语句。您为预定义查询指定名称,然后再调用它们。查看查询在创建时不会执行。当您使用视图执行查询时,它们不会获得任何性能改进,因为它们只是普通的查询。

投影缓存查询结果。投影查询在您创建时执行,结果将保留在存储上。当您执行任何可以利用查询结果的查询时,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语句查看查询计划中使用的预测。这有助于您提高查询的性能。

© www.soinside.com 2019 - 2024. All rights reserved.