标准投影
以优化在该表上执行某些查询的格式存储表数据的集合。有关详细信息,请参阅 投影。
语法
CREATE PROJECTION [ IF NOT EXISTS ] [[database.]schema.]projection
[ (
{ projection-column | grouped-clause
[ ENCODING encoding-type ]
[ ACCESSRANK integer ] }[,...]
) ]
AS SELECT { * | { MATCH_COLUMNS('pattern') | expression [ [AS] alias ] }[,...] }
FROM [[database.]schema.]table [ [AS] alias]
[ ORDER BY column-expr[,...] ]
[ segmentation-spec ]
[ KSAFE [ k-num ]
[ ON PARTITION RANGE BETWEEN min-val AND max-val ] ]
参数
IF NOT EXISTS
如果存在同名对象,请不要创建它并继续。如果忽略此选项且对象存在,Vertica 将生成 ROLLBACK 错误消息。在上述两种情况下,如果对象已经存在,则不会创建它。
IF NOT EXISTS
子句适用于以下 SQL 脚本:可在某个对象不存在时创建该对象。请参阅 ON_ERROR_STOP 了解相关信息。
-
[database.]schema
为该投影及其锚表指定架构,两者的 schema 必须相同。如果指定一个数据库,它必须是当前数据库。
-
projection
标识要创建的投影,其中 projection 符合 标识符中描述的约定。同一架构中的序列、表、投影、视图和模型中也必须是唯一的。
-
projection-column
投影列的名称。投影列的列表必须在数量、类型和顺序上与 SELECT 列表列和表达式相匹配。
如果省略投影列名称,Vertica 将使用在 SELECT 列表中指定的锚表列名称。
-
grouped-clause
- 请参阅 GROUPED 子句。
-
ENCODING encoding-type
列编码类型,默认设置为 AUTO。
-
ACCESSRANK integer
覆盖列的默认访问等级。使用此参数可提高或降低 Vertica 访问列的速度。有关详细信息,请参阅覆盖默认的列等级。
AS SELECT
- 指定要从指定表中选择的列或列表达式:
-
*
(星号)列出查询的表中的所有列。
-
MATCH_COLUMNS('pattern')
返回查询的锚表中与 pattern匹配的所有列。
-
expression [[AS] alias]
解析为所查询锚表中的列数据。
您可以选择性地为每个列表达式分配一个别名,并在 SELECT 语句的其他位置(例如,在 ORDER BY 或分段子句中)引用该别名。
注意
如果指定了投影列名称,则投影列和表列/表达式的两个列表中的列数和列顺序必须完全匹配。 -
ORDER BY
- 指定 SELECT 列表中要作为投影排序依据的列。ORDER BY 子句 只能设置为 ASC(默认值)。Vertica 始终按升序存储投影数据。
如果您按具有集合数据类型(ARRAY 或 SET)的列排序,则在 ORDER BY 子句中使用该列的查询将再次执行排序。这是因为投影和查询执行排序的方式不同。
如果省略 ORDER BY 子句,Vertica 将使用 SELECT 列表对投影排序。
-
segmentation-spec
- 使用以下子句之一指定如何分布投影数据:
-
hash-segmentation-clause: 指定此项将对数据均匀分段并在群集节点之间分布数据:
SEGMENTED BY expression ALL NODES [ OFFSET offset ]
-
unsegmented-clause: 指定此项将创建未分段的投影:
UNSEGMENTED ALL NODES
如果对于锚表和投影都未指定分段,则将使用一个包含 SELECT 列表中所有列的哈希分段子句来定义投影,如下所示:
SEGMENTED BY HASH(column-expr[,...]) ALL NODES OFFSET 0;
提示
Vertica 建议对大表进行分段。 -
-
KSAFE [k-num]
指定投影的 K-safety,其中 k-num 必须等于或大于数据库 K-safety。如果针对未分段的投影设置了此参数,Vertica 将忽略此参数。 如果省略 k-num,Vertica 将使用数据库 K-safety。
有关常规信息,请参阅 企业模式数据库中的 K-safety。
ON PARTITION RANGE
指定将此投影的数据限制在分区键范围内,指定如下:
ON PARTITION RANGE BETWEEN min-range-value AND max-range-value
以下要求适用于 min‑range‑value 和 ≤ max‑range‑value:
-
Min‑range‑value 必须 ≤ max‑range‑value
-
它们必须解析为与表分区表达式兼容的数据类型。
-
它们可以是:
-
字符串字面量。例如,
2021-07-31
-
具有稳定或不可变函数的表达式,例如:
date_trunc('month', now()::timestamp - interval'1 month')
-
max-range-value 可以设置为 NULL,以指定分区范围没有上限。
有关其他要求和使用详细信息,请参阅 分区范围投影。
-
特权
非超级用户:
-
锚表所有者
-
对架构的 CREATE 权限
示例
请参阅: