分段投影
通常,您会为大型事实表创建分段投影。Vertica 将分段投影拆分为大小相似的块(段),并将这些段均匀地分布在整个群集中。系统 K-safety 确定在不同节点上创建和维护每个段的多少个副本(伙伴示例)。
投影分段可实现以下目标:
-
确保高可用性和恢复。
-
将查询执行工作负载分散到多个节点上。
-
允许每个节点针对不同查询工作负载进行优化。
哈希分段
Vertica 使用哈希分段对大型投影进行分段。哈希分段可基于内置的哈希函数对投影进行分段。该内置哈希函数可使多个节点中的数据实现正态分布,从而优化查询的执行。在投影中,要进行哈希的数据由一列或多列值组成,每一列都包含大量唯一值,并且值的分布偏移程度在可接受的范围内。主键列通常满足这些条件,因此它们通常用作哈希函数实参。
可以使用包含 SEGMENTED BY
子句的
CREATE PROJECTION
语句创建分段投影。
以下 CREATE PROJECTION
语句将创建投影 public.employee_dimension_super
。它指定包含表 public.employee_dimension
中的所有列。哈希分段子句将调用 Vertica HASH
函数,对列 employee_key
中的投影数据进行分段;此外,它还包括 ALL NODES
子句,指定在群集中的所有节点上均匀分布投影数据:
=> CREATE PROJECTION public.employee_dimension_super
AS SELECT * FROM public.employee_dimension
ORDER BY employee_key
SEGMENTED BY hash(employee_key) ALL NODES;
如果数据库是 K-safe 的,Vertica 会为此投影创建多个伙伴实例,并将它们分布在群集中的不同节点上。在本例中,数据库 K-safety 设置为 1,因此 Vertica 会为此投影创建两个伙伴实例。它使用投影名称 employee_dimension_super
作为所创建的两个伙伴实例标识符的基本名称,在本例中为 employee_dimension_super_b0
和 employee_dimension_super_b1
:
=> SELECT projection_name FROM projections WHERE projection_basename='employee_dimension_super';
projection_name
-----------------------------
employee_dimension_super_b0
employee_dimension_super_b1
(2 rows)