diff options
author | aozeritsky <aozeritsky@ydb.tech> | 2023-09-21 00:14:38 +0300 |
---|---|---|
committer | aozeritsky <aozeritsky@ydb.tech> | 2023-09-21 00:34:48 +0300 |
commit | 13365ead1569a814c889c1fb06fcaae89808bbe1 (patch) | |
tree | 00cf73b5652713add69d22693ee926178acf0c13 | |
parent | b4576b9ebd54160745a192644d131a5f122dea98 (diff) | |
download | ydb-13365ead1569a814c889c1fb06fcaae89808bbe1.tar.gz |
Can use native CBO in yt provider
-rw-r--r-- | ydb/library/yql/providers/yt/common/yql_yt_settings.h | 1 | ||||
-rw-r--r-- | ydb/library/yql/providers/yt/provider/yql_yt_join_reorder.cpp | 25 |
2 files changed, 23 insertions, 3 deletions
diff --git a/ydb/library/yql/providers/yt/common/yql_yt_settings.h b/ydb/library/yql/providers/yt/common/yql_yt_settings.h index b8ea89ade43..cbb59d71eed 100644 --- a/ydb/library/yql/providers/yt/common/yql_yt_settings.h +++ b/ydb/library/yql/providers/yt/common/yql_yt_settings.h @@ -61,6 +61,7 @@ enum class EStoredConstraint : ui64 { enum class ECostBasedOptimizer { Disable, PG, + Native, }; enum class EInferSchemaMode { diff --git a/ydb/library/yql/providers/yt/provider/yql_yt_join_reorder.cpp b/ydb/library/yql/providers/yt/provider/yql_yt_join_reorder.cpp index 804a505fc29..73da877d518 100644 --- a/ydb/library/yql/providers/yt/provider/yql_yt_join_reorder.cpp +++ b/ydb/library/yql/providers/yt/provider/yql_yt_join_reorder.cpp @@ -5,6 +5,8 @@ #include <ydb/library/yql/providers/common/provider/yql_provider.h> #include <ydb/library/yql/utils/log/log.h> +#include <ydb/library/yql/dq/opt/dq_opt_log.h> + namespace NYql { namespace { @@ -74,10 +76,12 @@ public: TYtJoinNodeOp::TPtr op, const TYtState::TPtr& state, TExprContext& ctx, + ECostBasedOptimizer optimizerType, bool debug = false) : Root(op) , State(state) , Ctx(ctx) + , OptimizerType(optimizerType) , Debug(debug) { Y_UNUSED(State); @@ -107,7 +111,20 @@ public: YQL_CLOG(INFO, ProviderYt) << str; }; - std::unique_ptr<IOptimizer> opt = std::unique_ptr<IOptimizer>(MakePgOptimizer(input, log)); + std::unique_ptr<IOptimizer> opt; + + switch (OptimizerType) { + case ECostBasedOptimizer::PG: + opt = std::unique_ptr<IOptimizer>(MakePgOptimizer(input, log)); + break; + case ECostBasedOptimizer::Native: + opt = std::unique_ptr<IOptimizer>(NDq::MakeNativeOptimizer(input, log)); + break; + default: + YQL_CLOG(ERROR, ProviderYt) << "Unknown optimizer type"; + return Root; + break; + } try { Result = opt->JoinSearch(); @@ -379,6 +396,7 @@ private: TYtJoinNodeOp::TPtr Root; const TYtState::TPtr& State; TExprContext& Ctx; + ECostBasedOptimizer OptimizerType; bool Debug; THashMap<TStringBuf, std::vector<int>> Table2RelIds; @@ -400,11 +418,12 @@ private: TYtJoinNodeOp::TPtr OrderJoins(TYtJoinNodeOp::TPtr op, const TYtState::TPtr& state, TExprContext& ctx, bool debug) { - if (state->Configuration->CostBasedOptimizer.Get().GetOrElse(ECostBasedOptimizer::Disable) == ECostBasedOptimizer::Disable) { + auto optimizerType = state->Configuration->CostBasedOptimizer.Get().GetOrElse(ECostBasedOptimizer::Disable); + if (optimizerType == ECostBasedOptimizer::Disable) { return op; } - auto result = TJoinReorderer(op, state, ctx, debug).Do(); + auto result = TJoinReorderer(op, state, ctx, optimizerType, debug).Do(); if (!debug && AreSimilarTrees(result, op)) { return op; } |