分段投影

通常,您会为大型事实表创建分段投影。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_b0employee_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)