Algorithm 从一张大桌子上聪明地分块

Algorithm 从一张大桌子上聪明地分块,algorithm,vertica,chunking,Algorithm,Vertica,Chunking,我在数据仓库(Vertica)中有一个巨大的表。出于优化目的,我正在分块访问此表。我决定我的区块的方式非常简单。我有一个主键列,比如a,我取aMAX(a)。我有一个20000大小的块,现在我已经创建了(a/20000)+1个块。我为每个块构建查询框架并检索数据 这种方法存在以下问题: 我的区块数量取决于MAX(A),而MAX(A)增长非常快,因此我的区块数量也随之增加 我决定选择20000号,因为这是我获得最佳性能的原因。但是主键在20000块中的分布是如此分散。例如,0-20000可能只包

我在数据仓库(Vertica)中有一个巨大的表。出于优化目的,我正在分块访问此表。我决定我的区块的方式非常简单。我有一个主键列,比如a,我取a
MAX(a)
。我有一个20000大小的块,现在我已经创建了(a/20000)+1个块。我为每个块构建查询框架并检索数据

这种方法存在以下问题:

  • 我的区块数量取决于
    MAX(A)
    ,而
    MAX(A)
    增长非常快,因此我的区块数量也随之增加
我决定选择20000号,因为这是我获得最佳性能的原因。但是主键在20000块中的分布是如此分散。例如,0-20000可能只包含3个元素,20000-40000范围可能包含500个元素,没有接近20000的范围

我试图弄清楚,对于这个问题,是否有任何好的近似算法可以最小化块的数量,并在一个块中填充近20000个主键

我不确定优化的目的是什么,但我认为最好的方法是创建一个时间戳列,或者使用一个合格的时间戳列进行分区。然后,您可以在更大的参考框架上进行分区,这样分区之间的范围就不会很大

如果表被分区,它将能够从中受益。这意味着Vertica可以在查询执行期间消除与时间戳谓词不匹配的存储容器


否则,您可以查看segmentation子句并使用存储容器中的max/min。这可能会稍微复杂一些。

也许您所需要的只是
偏移量
限制
SQL
SELECT
子句。您是对的。我所需要的只是抵消条款。