哈希分段子句

指定如何对投影数据进行分段,以便在所有群集节点上分布数据。您可以为表和投影指定分段。如果表定义指定了分段,则 Vertica 会将其用于该表的自动投影

强烈建议使用 Vertica 的 HASH 内置函数,该函数可在整个群集中均匀分布数据,且便于实现最佳查询执行。

语法

SEGMENTED BY expression ALL NODES [ OFFSET offset ]

参数

SEGMENTED BY expression
常用的 SQL 表达式。哈希分段是首选分段方法。Vertica 建议使用其内置的 HASH 函数,该函数的实参解析为表列。如果使用 HASH 之外的表达式,Vertica 会发出警告。

分段表达式应指定具有大量唯一数据值和在数据分布中可接受的偏离的列。通常,符合这些条件的主键列适合用于哈希分段。

有关详细信息,请参阅下面的表达式要求

ALL NODES
创建投影时,会自动在所有节点中均匀分布数据。节点顺序是固定的。
OFFSET offset
基于零的偏移表示在哪个节点上开始分段分布。

此选项对于 CREATE TABLECREATE TEMPORARY TABLE 无效。

表达式要求

分段表达式在指定表列时必须按照其在源表中定义的那样进行指定。不支持投影列名称。

以下限制适用于分段表达式:

  • 所有叶表达式都必须为常数或 CREATE PROJECTIONSELECT 列表中的列的列引用

  • 表达式在数据库的整个使用过程中都必须返回相同的值。

  • 不允许集合函数。

  • 表达式必须返回 0 <= x < 263 范围内的非负 INTEGER 值,且值通常均匀分布在该范围内。

示例

以下 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;