For distributed query, rewrite sample ast by dividing sample_size. We assume data is evenly distributed and it is reasonable to divided sample_size into several parts.
| 157 | // For distributed query, rewrite sample ast by dividing sample_size. |
| 158 | // We assume data is evenly distributed and it is reasonable to divided sample_size into several parts. |
| 159 | ASTPtr rewriteSampleForDistributedTable(const ASTPtr & query_ast, size_t shard_size) |
| 160 | { |
| 161 | ASTPtr rewrite_ast = query_ast->clone(); |
| 162 | ASTSelectQuery * select = rewrite_ast->as<ASTSelectQuery>(); |
| 163 | if (select && select->sampleSize()) |
| 164 | { |
| 165 | ASTSampleRatio * sample = select->sampleSize()->as<ASTSampleRatio>(); |
| 166 | if (!sample) |
| 167 | return rewrite_ast; |
| 168 | ASTSampleRatio::BigNum numerator = sample->ratio.numerator; |
| 169 | ASTSampleRatio::BigNum denominator = sample->ratio.denominator; |
| 170 | if (numerator <= 1 || denominator > 1) |
| 171 | return rewrite_ast; |
| 172 | sample->ratio.numerator = (sample->ratio.numerator + 1) / shard_size; |
| 173 | } |
| 174 | return rewrite_ast; |
| 175 | } |
| 176 | |
| 177 | } |
no test coverage detected