Vertica分层分区表创建引发错误

时间:2019-03-08 00:50:44

标签: partitioning vertica hierarchical


我正在使用Vertica Analytic Database v8.1.1-8
我创建了一个带有简单分区子句的表,如下:

CREATE TABLE public.test
(
    id timestamp NOT NULL,
    cid numeric(37,15) NOT NULL DEFAULT 0
) 
UNSEGMENTED ALL NODES PARTITION BY id::DATE;

表已成功创建,我在其中插入了几行。 但是当我执行以下SQL时,

SELECT DUMP_PARTITION_KEYS();

我看到以下内容:

Partition keys on node v_public_node0001
  Projection 'test_super'
   No of partition keys: 0

 Partition keys on node v_public_node0003
  Projection 'test_super'
   No of partition keys: 0

我期望必须有一些有效的“分区键”。
因此,想知道我在这里错过了任何步骤吗?

如何验证我的表确实被“分区”了?

2)接下来,我尝试使用CALENDAR_HIERARCHY_DAY元函数进行“分层分区”,以利用分区分组。 但是此时间表创建本身失败。

CREATE TABLE public.test
(
    id timestamp NOT NULL,
    cid numeric(37,15) NOT NULL DEFAULT 0
) 
UNSEGMENTED ALL NODES PARTITION BY id::DATE 
 GROUP BY CALENDAR_HIERARCHY_DAY(id::DATE, 2, 2);

出现以下错误:

16:45:14  [CREATE - 0 rows, 0.130 secs]  [Code: 4856, SQL State: 42601]  [Vertica][VJDBC](4856) ERROR: Syntax error at or near "GROUP"
... 1 statement(s) executed, 0 rows affected, exec/fetch time: 0.130/0.000 sec  [0 successful, 1 errors]

任何人都可以。建议我做错了什么?
我的目标是创建一个具有分层分区的表。

非常感谢,
-昆塔尔

1 个答案:

答案 0 :(得分:1)

1)之所以在插入后没有看到分区键,是因为分区仅发生在磁盘上(每个节点,每个投影)。当您在表中插入行时,换句话说,这些行将被写入写优化存储(WOS)或内存中。在给定的时间间隔后,内存(WOS)中的数据将被写入磁盘或读取优化存储(ROS)。此时,您将看到分区键。

由元组移动器(https://www.vertica.com/docs/latest/HTML/Content/Authoring/Glossary/TupleMover.htm)执行将数据从WOS复制到ROS的过程。

简而言之,要查看分区键,请等待5分钟左右,以使元组移动器启动自动moveout,或者您可以通过执行手册{{1来强制将来自WOS的数据写入ROS。 }}。

moveout

然后您应该会看到按键。

2)分层分区是Vertica 9的功能。您必须至少升级到Vertica 9.0才能使用该功能。

https://www.vertica.com/blog/whats-new-vertica-9-0-hierarchical-partitioning/