mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-30 19:42:00 +00:00
dbms: fixed error [#METR-17109].
This commit is contained in:
parent
eed74c506e
commit
4b29a48124
@ -743,6 +743,18 @@ struct AggregatedDataVariants : private boost::noncopyable
|
|||||||
typedef SharedPtr<AggregatedDataVariants> AggregatedDataVariantsPtr;
|
typedef SharedPtr<AggregatedDataVariants> AggregatedDataVariantsPtr;
|
||||||
typedef std::vector<AggregatedDataVariantsPtr> ManyAggregatedDataVariants;
|
typedef std::vector<AggregatedDataVariantsPtr> ManyAggregatedDataVariants;
|
||||||
|
|
||||||
|
/** Как считаются "тотальные" значения при наличии WITH TOTALS?
|
||||||
|
* (Более подробно смотрите в TotalsHavingBlockInputStream.)
|
||||||
|
*
|
||||||
|
* В случае отсутствия group_by_overflow_mode = 'any', данные агрегируются как обычно, но состояния агрегатных функций не финализируются.
|
||||||
|
* Позже, состояния агрегатных функций для всех строк (прошедших через HAVING) мерджатся в одну - это и будет TOTALS.
|
||||||
|
*
|
||||||
|
* В случае наличия group_by_overflow_mode = 'any', данные агрегируются как обычно, кроме ключей, не поместившихся в max_rows_to_group_by.
|
||||||
|
* Для этих ключей, данные агрегируются в одну дополнительную строку - далее см. под названиями overflow_row, overflows...
|
||||||
|
* Позже, состояния агрегатных функций для всех строк (прошедших через HAVING) мерджатся в одну,
|
||||||
|
* а также к ним прибавляется или не прибавляется (в зависимости от настройки totals_mode) также overflow_row - это и будет TOTALS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/** Агрегирует источник блоков.
|
/** Агрегирует источник блоков.
|
||||||
*/
|
*/
|
||||||
@ -1032,7 +1044,7 @@ protected:
|
|||||||
size_t rows,
|
size_t rows,
|
||||||
Filler && filler) const;
|
Filler && filler) const;
|
||||||
|
|
||||||
BlocksList prepareBlocksAndFillWithoutKey(AggregatedDataVariants & data_variants, bool final) const;
|
BlocksList prepareBlocksAndFillWithoutKey(AggregatedDataVariants & data_variants, bool final, bool is_overflows) const;
|
||||||
BlocksList prepareBlocksAndFillSingleLevel(AggregatedDataVariants & data_variants, bool final) const;
|
BlocksList prepareBlocksAndFillSingleLevel(AggregatedDataVariants & data_variants, bool final) const;
|
||||||
BlocksList prepareBlocksAndFillTwoLevel(AggregatedDataVariants & data_variants, bool final, boost::threadpool::pool * thread_pool) const;
|
BlocksList prepareBlocksAndFillTwoLevel(AggregatedDataVariants & data_variants, bool final, boost::threadpool::pool * thread_pool) const;
|
||||||
|
|
||||||
|
@ -929,7 +929,7 @@ Block Aggregator::prepareBlockAndFill(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BlocksList Aggregator::prepareBlocksAndFillWithoutKey(AggregatedDataVariants & data_variants, bool final) const
|
BlocksList Aggregator::prepareBlocksAndFillWithoutKey(AggregatedDataVariants & data_variants, bool final, bool is_overflows) const
|
||||||
{
|
{
|
||||||
size_t rows = 1;
|
size_t rows = 1;
|
||||||
|
|
||||||
@ -957,7 +957,8 @@ BlocksList Aggregator::prepareBlocksAndFillWithoutKey(AggregatedDataVariants & d
|
|||||||
};
|
};
|
||||||
|
|
||||||
Block block = prepareBlockAndFill(data_variants, final, rows, filler);
|
Block block = prepareBlockAndFill(data_variants, final, rows, filler);
|
||||||
if (overflow_row)
|
|
||||||
|
if (is_overflows)
|
||||||
block.info.is_overflows = true;
|
block.info.is_overflows = true;
|
||||||
|
|
||||||
BlocksList blocks;
|
BlocksList blocks;
|
||||||
@ -1143,7 +1144,8 @@ BlocksList Aggregator::convertToBlocks(AggregatedDataVariants & data_variants, b
|
|||||||
return BlocksList();
|
return BlocksList();
|
||||||
|
|
||||||
if (data_variants.type == AggregatedDataVariants::Type::without_key || overflow_row)
|
if (data_variants.type == AggregatedDataVariants::Type::without_key || overflow_row)
|
||||||
blocks.splice(blocks.end(), prepareBlocksAndFillWithoutKey(data_variants, final));
|
blocks.splice(blocks.end(), prepareBlocksAndFillWithoutKey(
|
||||||
|
data_variants, final, data_variants.type != AggregatedDataVariants::Type::without_key));
|
||||||
|
|
||||||
if (isCancelled())
|
if (isCancelled())
|
||||||
return BlocksList();
|
return BlocksList();
|
||||||
|
Loading…
Reference in New Issue
Block a user