从文档中可以看到,我们可以使用partitioning_func定义自定义空间分区函数。但是,我没有找到任何关于如何定义分区函数以及它应该返回什么的实际例子。
我所读到的是,默认情况下,它使用INT32_MAX (哈希表中的键范围),例如,如果我们给出number_partitions=2,那么数值< into 32_MAX/2将落入第一个分区,其余值将落入第二个分区。
在我的例子中,假设我在空间分区列中没有多少不同的值,然后根据默认的散列函数,很明显所有的值都属于第一个分区。但是,我希望每个不同的值都在不同的分区中。
发布于 2021-07-27 04:56:31
我想出了一个解决方案,如果我在空间分区列中有两个不同的值,我希望将每个值放在一个单独的分区中(这意味着我有两个分区)。
正如我在问题中提到的,时间刻度似乎使用c语言中的INT32_MAX。其中INT32_MAX值为2147483647,因此我将其除以2,以指示时间刻度,根据空间分区值(1或2)使用2个不同的分区。
下面的代码适用于我。我在TimeScale 2.3.1中使用Postgres 12
CREATE OR REPLACE FUNCTION two_partition_fun(i anyelement) RETURNS integer AS \$\$
BEGIN
RETURN 1073741821 + i;
END;
\$\$ LANGUAGE plpgsql IMMUTABLE;如果这是一个好办法,我没有信心,如果你有更好的办法,请告诉我。
发布于 2021-07-27 10:01:02
可以使用TimescaleDB向add_dimension超表添加多个维度。
空间分区的主要目的是支持跨多个数据节点(在分布式超表情况下)或在同一时间间隔内跨多个磁盘进行并行化。
有一些警告,包括:
add_dimension的用例/需求相对有限--关于文档中的用法,还有更多的细节,但这可能正是您所要寻找的。
披露:我为时间刻度工作
https://stackoverflow.com/questions/68538320
复制相似问题