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

时间:2014-06-13 08:02:47

标签: projection vertica

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

1 个答案:

答案 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;