diff options
author | Alexey Ozeritskiy <aozeritsky@ydb.tech> | 2024-02-14 13:34:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-14 13:34:58 +0100 |
commit | 8654e50c3ca87620a46c002f6df7332aaecf33d4 (patch) | |
tree | 4a29b1f4880a883d73ff11ea97867b2711d2d4b0 | |
parent | 706670abefaf649e88b8aa19ed6de306ea178bb7 (diff) | |
download | ydb-8654e50c3ca87620a46c002f6df7332aaecf33d4.tar.gz |
DqOptimizeEquiJoinWithCosts uses abstract CBO API YQL-17437 (#1912)
-rw-r--r-- | ydb/core/kqp/opt/logical/kqp_opt_log.cpp | 5 | ||||
-rw-r--r-- | ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp | 3 | ||||
-rw-r--r-- | ydb/library/yql/dq/opt/dq_opt_log.h | 3 |
3 files changed, 5 insertions, 6 deletions
diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log.cpp b/ydb/core/kqp/opt/logical/kqp_opt_log.cpp index 7ec98aa7f56..be278f67dc2 100644 --- a/ydb/core/kqp/opt/logical/kqp_opt_log.cpp +++ b/ydb/core/kqp/opt/logical/kqp_opt_log.cpp @@ -136,8 +136,9 @@ protected: TMaybeNode<TExprBase> OptimizeEquiJoinWithCosts(TExprBase node, TExprContext& ctx) { auto maxDPccpDPTableSize = Config->MaxDPccpDPTableSize.Get().GetOrElse(TDqSettings::TDefault::MaxDPccpDPTableSize); - TExprBase output = DqOptimizeEquiJoinWithCosts(node, ctx, TypesCtx, Config->CostBasedOptimizationLevel.Get().GetOrElse(TDqSettings::TDefault::CostBasedOptimizationLevel), - maxDPccpDPTableSize, Pctx, [](auto& rels, auto label, auto node, auto stat) { + auto opt = std::unique_ptr<IOptimizerNew>(MakeNativeOptimizerNew(Pctx, maxDPccpDPTableSize)); + TExprBase output = DqOptimizeEquiJoinWithCosts(node, ctx, TypesCtx, Config->CostBasedOptimizationLevel.Get().GetOrElse(TDqSettings::TDefault::CostBasedOptimizationLevel), + *opt, [](auto& rels, auto label, auto node, auto stat) { rels.emplace_back(std::make_shared<TKqpRelOptimizerNode>(TString(label), stat, node)); }); DumpAppliedRule("OptimizeEquiJoinWithCosts", node.Ptr(), output.Ptr(), ctx); diff --git a/ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp b/ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp index 0fbe02d2165..0ca7910050e 100644 --- a/ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp +++ b/ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp @@ -1294,7 +1294,7 @@ public: * and finally optimizes the root of the tree */ TExprBase DqOptimizeEquiJoinWithCosts(const TExprBase& node, TExprContext& ctx, TTypeAnnotationContext& typesCtx, - ui32 optLevel, ui32 maxDPccpDPTableSize, IProviderContext& providerCtx, + ui32 optLevel, IOptimizerNew& opt, const std::function<void(TVector<std::shared_ptr<TRelOptimizerNode>>&, TStringBuf, const TExprNode::TPtr, const std::shared_ptr<TOptimizerStatistics>&)>& providerCollect) { if (optLevel==0) { @@ -1338,7 +1338,6 @@ TExprBase DqOptimizeEquiJoinWithCosts(const TExprBase& node, TExprContext& ctx, YQL_CLOG(TRACE, CoreDq) << str.str(); } - auto opt = TOptimizerNativeNew(providerCtx, maxDPccpDPTableSize); joinTree = opt.JoinSearch(joinTree); // rewrite the join tree and record the output statistics diff --git a/ydb/library/yql/dq/opt/dq_opt_log.h b/ydb/library/yql/dq/opt/dq_opt_log.h index 335026cbacc..08fd33ace65 100644 --- a/ydb/library/yql/dq/opt/dq_opt_log.h +++ b/ydb/library/yql/dq/opt/dq_opt_log.h @@ -29,8 +29,7 @@ NNodes::TExprBase DqOptimizeEquiJoinWithCosts( TExprContext& ctx, TTypeAnnotationContext& typesCtx, ui32 optLevel, - ui32 maxDPccpDPTableSize, - IProviderContext& providerCtx, + IOptimizerNew& optimizer, const std::function<void(TVector<std::shared_ptr<TRelOptimizerNode>>&, TStringBuf, const TExprNode::TPtr, const std::shared_ptr<TOptimizerStatistics>&)>& providerCollect); NNodes::TExprBase DqOptimizeEquiJoinWithCosts( |