我需要更改表格中的超级投影(错误的顺序和细分)。 所以我试着这样做。
重命名现有投影:
ALTER PROJECTION schema.table_b0 RENAME TO table_b0_2;
ALTER PROJECTION schema.table_b1 RENAME TO table_b1_2;
创建新投影:
CREATE PROJECTION schema.table
as select * from schema.table
order by ...
segmented by hash (...) all nodes;
刷新:
select refresh('schema.table');
删除旧的:
DROP PROJECTION table_b0_2;
DROP PROJECTION table_b1_2;
我想这几乎是我想要的,但是......
我得到两个后缀" _b0"和" _b1",但通常(如果创建表已经完成),有两个带有后缀的投影" _b0"和" _super"。为什么呢?
在投影创建之后,我无法在cascade
语句中删除没有drop table
参数的表格。所以我有点把我的预测作为分开的对象。我能解决的问题是什么(创建投影,好像它们是从一开始就使用正确的create table
语句创建的)?
答案 0 :(得分:1)
这只是一个名字。在创建默认超级投影时,会将其命名为_super
。 (我认为这个命名约定是新的)。默认投影不会是最佳的,您将要使用DBD替换它们。我假设你已经知道b0 vs b1和ksafety。
默认项目是您未明确创建的对象。您可以通过查看projections
视图来确定这些是默认投影。他们会说DELAYED CREATION
。由于您没有明确创建它们,因此Vertica允许将它们与表一起删除。但是,如果您通过手动或使用DBD明确创建投影,则需要先放弃投影或使用cascade
。
一些笔记。首先,创建投影应该是投影名称,而不是表名。如果它们是同一名称,您将获得一个已存在的对象错误。其次,在放弃旧投影之前,您可能需要使用select make_ahm_now();
移动古代历史标记。
希望这有帮助。