我在vertica DB中有一个概念性问题。如果我在vertica中创建一个表'abc',其中列a,b,c按a,b排序,它将自动为它创建一个超级投影。 现在,如果我改变表'abc'将'd'列添加到它,它将创建一个新的超级投影。 问题是,在这个新的超级投影中,“a,b的顺序”是否会受到影响? vertica会在新的超级投影中保留此顺序吗?此外,它还包括此订单的列'd'吗?什么是默认行为?
答案 0 :(得分:4)
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);
将数据添加到表格时会自动添加超级投影:
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;
让我们在表格中添加一个新列:
ALTER TABLE public.abc ADD COLUMN d int;
新列仅添加 到任何超级投影中的投影列和表格列(不在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;