mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-16 19:32:07 +00:00
fix some tests
This commit is contained in:
parent
57b5f3ca78
commit
430a4fda9c
@ -274,7 +274,8 @@ void MergeTreeWhereOptimizer::analyzeImpl(Conditions & res, const RPNBuilderTree
|
|||||||
|
|
||||||
cond.selectivity = estimator.estimateSelectivity(node);
|
cond.selectivity = estimator.estimateSelectivity(node);
|
||||||
|
|
||||||
LOG_DEBUG(log, "Condition {} has selectivity {}", node.getASTNode()->dumpTree(), cond.selectivity);
|
if (node.getASTNode() != nullptr)
|
||||||
|
LOG_DEBUG(log, "Condition {} has selectivity {}", node.getASTNode()->dumpTree(), cond.selectivity);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (where_optimizer_context.move_primary_key_columns_to_end_of_prewhere)
|
if (where_optimizer_context.move_primary_key_columns_to_end_of_prewhere)
|
||||||
|
@ -104,11 +104,19 @@ Float64 ConditionEstimator::estimateSelectivity(const RPNBuilderTreeNode & node)
|
|||||||
return default_unknown_cond_factor;
|
return default_unknown_cond_factor;
|
||||||
}
|
}
|
||||||
auto it = column_estimators.find(col.value());
|
auto it = column_estimators.find(col.value());
|
||||||
|
|
||||||
|
/// If there the estimator of the column is not found or there are no data at all,
|
||||||
|
/// we use dummy estimation.
|
||||||
|
bool dummy = total_count == 0;
|
||||||
ColumnEstimator estimator;
|
ColumnEstimator estimator;
|
||||||
if (it != column_estimators.end())
|
if (it != column_estimators.end())
|
||||||
{
|
{
|
||||||
estimator = it->second;
|
estimator = it->second;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dummy = true;
|
||||||
|
}
|
||||||
auto [op, val] = extractBinaryOp(node, col.value());
|
auto [op, val] = extractBinaryOp(node, col.value());
|
||||||
if (op == "equals")
|
if (op == "equals")
|
||||||
{
|
{
|
||||||
@ -119,10 +127,14 @@ Float64 ConditionEstimator::estimateSelectivity(const RPNBuilderTreeNode & node)
|
|||||||
}
|
}
|
||||||
else if (op == "less" || op == "lessThan")
|
else if (op == "less" || op == "lessThan")
|
||||||
{
|
{
|
||||||
|
if (dummy)
|
||||||
|
return default_normal_cond_factor;
|
||||||
return estimator.estimateLess(val) / total_count;
|
return estimator.estimateLess(val) / total_count;
|
||||||
}
|
}
|
||||||
else if (op == "greater" || op == "greaterThan")
|
else if (op == "greater" || op == "greaterThan")
|
||||||
{
|
{
|
||||||
|
if (dummy)
|
||||||
|
return default_normal_cond_factor;
|
||||||
return estimator.estimateGreater(val) / total_count;
|
return estimator.estimateGreater(val) / total_count;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -144,8 +156,6 @@ void MergeTreeStatisticFactory::registerCreator(StatisticType stat_type, Creator
|
|||||||
MergeTreeStatisticFactory::MergeTreeStatisticFactory()
|
MergeTreeStatisticFactory::MergeTreeStatisticFactory()
|
||||||
{
|
{
|
||||||
registerCreator(TDigest, TDigestCreator);
|
registerCreator(TDigest, TDigestCreator);
|
||||||
|
|
||||||
///registerCreator("cm_sketch", CMSketchCreator);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MergeTreeStatisticFactory & MergeTreeStatisticFactory::instance()
|
MergeTreeStatisticFactory & MergeTreeStatisticFactory::instance()
|
||||||
|
Loading…
Reference in New Issue
Block a user