我正在使用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]
任何人都可以。建议我做错了什么?
我的目标是创建一个具有分层分区的表。
非常感谢,
-昆塔尔
答案 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/