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