A method for reclustering clustered data blocks, the method comprising: receiving, at data processing hardware, a first group of clustered data blocks sorted by a clustering key value, each clustered data block in the first group of clustered data blocks comprising a respective range of the clustering key values that do not overlap with any of the ranges of clustering key values of the other clustered data blocks in the first group of clustered data blocks; receiving, at the data processing hardware, a second group of clustered data blocks sorted by the clustering key value, each clustered data block in the second group of clustered data blocks comprising a respective range of clustering key values that do not overlap with any of the ranges of clustering key values of the other clustered data blocks in the second group of clustered data blocks; generating, by the data processing hardware, one or more split points for partitioning the first and second groups (158a, 158b) of clustered data blocks into a third group of clustered data blocks; partitioning, by the data processing hardware, using the one or more generated split points, the first and second groups (158a, 158b) of clustered data blocks into the third group of clustered data blocks, each clustered data block in the third group of clustered data blocks comprising a respective range of clustering key values that do not overlap with any of the ranges of clustering key values of the other clustered data blocks in the third group of clustered data blocks, wherein each split point of the one or more generated split points defines an upper limit or a lower limit for the respective range of clustering key values of one of the clustered data blocks in the third group of clustered data blocks; determining, by the data processing hardware, a first sum of data values associated with the first and second groups (158a, 158b) of clustered data blocks; determining, by the data processing hardware, a second sum of data values associated with the third group of clustered data blocks; and verifying, by the data processing hardware, that the first sum is equivalent to the second sum and determining that no data corruption occurred during the partitioning when the first sum is equivalent to the second sum. receiving, at data processing hardware, a first group of clustered data blocks sorted by a clustering key value, each clustered data block in the first group of clustered data blocks comprising a respective range of the clustering key values that do not overlap with any of the ranges of clustering key values of the other clustered data blocks in the first group of clustered data blocks; receiving, at the data processing hardware, a second group of clustered data blocks sorted by the clustering key value, each clustered data block in the second group of clustered data blocks comprising a respective range of clustering key values that do not overlap with any of the ranges of clustering key values of the other clustered data blocks in the second group of clustered data blocks; generating, by the data processing hardware, one or more split points for partitioning the first and second groups (158a, 158b) of clustered data blocks into a third group of clustered data blocks; partitioning, by the data processing hardware, using the one or more generated split points, the first and second groups (158a, 158b) of clustered data blocks into the third group of clustered data blocks, each clustered data block in the third group of clustered data blocks comprising a respective range of clustering key values that do not overlap with any of the ranges of clustering key values of the other clustered data blocks in the third group of clustered data blocks, wherein each split point of the one or more generated split points defines an upper limit or a lower limit for the respective range of clustering key values of one of the clustered data blocks in the third group of clustered data blocks; determining, by the data processing hardware, a first sum of data values associated with the first and second groups (158a, 158b) of clustered data blocks; determining, by the data processing hardware, a second sum of data values associated with the third group of clustered data blocks; and verifying, by the data processing hardware, that the first sum is equivalent to the second sum and determining that no data corruption occurred during the partitioning when the first sum is equivalent to the second sum.