添加列对vertica DB中超投影的影响

use*_*831 2 projection vertica

我在 vertica DB 中有一个概念性问题。如果我在 vertica 中创建一个表“abc”,其中列 a、b、c 按 a、b 排序,它将自动为其创建一个超级投影。现在,如果我更改表“abc”并向其添加列“d”,它将创建一个新的超级投影。问题是,“a,b 的顺序”会在这个新的超级投影中受到影响吗?vertica 在新的超级投影中会保留这个顺序吗?另外,它还会包含此顺序的“d”列吗?默认行为是什么?

Ker*_*mit 5

vertica 在新的超级投影中会保留这个顺序吗?

它将保留初始语句中指定的顺序CREATE TABLE

另外,它还会包含此顺序的“d”列吗?

Vertica 只会将新列添加到超级投影(这是默认行为)。

走过

让我们创建表并添加数据:

CREATE TABLE public.abc (
    a int,
    b int,
    c int
) ORDER BY a, b;

INSERT INTO public.abc (a, b, c) VALUES (1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

当数据添加到表中时,会自动添加超级投影:

CREATE PROJECTION public.abc /*+createtype(P)*/
(
 a,
 b,
 c
)
AS
 SELECT abc.a,
        abc.b,
        abc.c
 FROM public.abc
 ORDER BY abc.a,
          abc.b
SEGMENTED BY hash(abc.a, abc.b, abc.c) ALL NODES KSAFE 1;
Run Code Online (Sandbox Code Playgroud)

让我们向表中添加一个新列:

 ALTER TABLE public.abc ADD COLUMN d int;
Run Code Online (Sandbox Code Playgroud)

新列添加到任何超级投影中的投影列和表列(不在 中ORDER BY):

CREATE PROJECTION public.abc /*+createtype(P)*/
(
 a,
 b,
 c,
 d -- Added here
)
AS
 SELECT abc.a,
        abc.b,
        abc.c,
        abc.d -- Added here
 FROM public.abc
 ORDER BY abc.a,
          abc.b
SEGMENTED BY hash(abc.a, abc.b, abc.c) ALL NODES KSAFE 1;
Run Code Online (Sandbox Code Playgroud)