【发布时间】:2015-04-11 06:39:57
【问题描述】:
在为批处理做准备时,我需要对记录组进行分区,以便运行作业的并行流。这些记录来自一个可能有数百万行的表。我的目标是将这些记录(按主键)均匀地分解成(大约)均匀的块,然后可以并行处理。我想动态选择块大小。可能还值得注意的是,主键序列中可能存在间隙。
换句话说,给定这个表,谓词表示块的数量,结果集提供块的第一个和最后一个序列:
seq name |
-------|--------|
1 | john |
2 | joe |
3 | joe |
4 | joe |
5 | joe |
567 | kent |
568 | katie |
20000 | sue |
200016 | jill |
200027 | bill |
我会得到以下结果 where (number-of-chunks) -> (first-seq, last-seq):
(2) -> (1,5),(567,20027)
(5) -> (1,2),(3,4),(5,567),(568,20000),(200016,200027)
或者,作为结果集,类似这样的东西(当要求 5 个块时):
first_seq last_seq ------------|----------| 1 | 2 | 3 | 4 | 5 |第567章 第568章200000 | 20016 | 200027 |我假设某种窗口函数在这里是有序的,但我不确定如何解决这个问题。谁能帮我查询一下?
【问题讨论】:
-
能否以表格形式添加预期的输出
-
您所说的“块大小”似乎是您想要的块数,对吗? (我通常会将“块大小”读作每个块中出现的项目数。)
-
这将与 SQLServer 或 MySQL 一起使用吗?
-
@DaveCosta 是的,你是对的,那是误导,我会编辑。
-
@ChrisduPreez 理想的解决方案是与 DB 无关,但它至少必须在 DB2 和 Oracle 上工作。
标签: sql