Greeplum中的多级分区

时间:2017-09-11 04:37:32

标签: sql ddl database-partitioning greenplum

我想在Greeplum中创建一个多级分区表,第一级分区是第一级,第二级是每7天一级。当我硬编码它工作正常。以下是代码:

{{1}}

现在,问题是我如何添加更多分区多年(例如2016-2017年的分区)以及随后的7天分区? 如果我有默认分区,我无法添加分区。如果我决定拆分默认分区,它不应该为空,否则我无法对其进行分区。即使它不是空的,如果我拆分它,它将遵循上面定义的子分区模板,这对于新的一年是错误的,新的子分区模板应该在那里,即让我们说对于2016-2017年,分区必须每7天进行一次!

当数据进入时,我必须动态地将新年分区(及其后续子分区)放入此表中,但我无法执行此操作。此外,我需要在时间戳上完成分区'。 有什么出路吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您不能拥有“默认”分区并添加新分区 - 因为默认分区可能包含应位于新分区上的数据。

在这种情况下,包含这些元组的查询将丢失数据,因为查询规划器使用分区消除来使查询更快。

为了获得这些功能,您需要创建一个函数:

  • 将默认分区复制到新表
  • 删除默认分区
  • 更改表格,添加新分区
  • 从默认副本插入
  • 更改表格,添加默认分区(如果需要)

理想情况下,您不会使用默认分区,而是在必要时使用触发器根据日期范围创建新分区。但是,greenplum不允许在段上运行任何数据库更改语句 - 因此,它的功能就是!

看看这个例子:

https://dba.stackexchange.com/questions/126171/how-can-i-add-multiple-partitions-to-a-greenplum-table-using-dynamic-sql