aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraozeritsky <aozeritsky@ydb.tech>2023-09-21 00:14:38 +0300
committeraozeritsky <aozeritsky@ydb.tech>2023-09-21 00:34:48 +0300
commit13365ead1569a814c889c1fb06fcaae89808bbe1 (patch)
tree00cf73b5652713add69d22693ee926178acf0c13
parentb4576b9ebd54160745a192644d131a5f122dea98 (diff)
downloadydb-13365ead1569a814c889c1fb06fcaae89808bbe1.tar.gz
Can use native CBO in yt provider
-rw-r--r--ydb/library/yql/providers/yt/common/yql_yt_settings.h1
-rw-r--r--ydb/library/yql/providers/yt/provider/yql_yt_join_reorder.cpp25
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;
}