summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Velikhov <[email protected]>2026-01-17 21:26:46 +0300
committerGitHub <[email protected]>2026-01-17 18:26:46 +0000
commitc3ef3159cee28a5116ddfbb46316fc62f761a5da (patch)
treef3ad0ce9aeea1326502043f1167c9b4339706f23
parentaca41516fe7dbe5f758052eec789849934018fd9 (diff)
Added pragma to disallow fusing of joins (#32287)
Co-authored-by: Velikhov Pavel <[email protected]>
-rw-r--r--ydb/core/kqp/opt/physical/kqp_opt_phy.cpp2
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_settings.cpp1
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_settings.h1
3 files changed, 3 insertions, 1 deletions
diff --git a/ydb/core/kqp/opt/physical/kqp_opt_phy.cpp b/ydb/core/kqp/opt/physical/kqp_opt_phy.cpp
index c588b2945be..e7e621b15ff 100644
--- a/ydb/core/kqp/opt/physical/kqp_opt_phy.cpp
+++ b/ydb/core/kqp/opt/physical/kqp_opt_phy.cpp
@@ -561,7 +561,7 @@ protected:
{
// TODO: Allow push to left stage for data queries.
// It is now possible as we don't use datashard transactions for reads in data queries.
- bool pushLeftStage = AllowFuseJoinInputs(node);
+ bool pushLeftStage = AllowFuseJoinInputs(node) && !KqpCtx.Config->OptDisallowFuseJoins.Get().GetOrElse(false);
bool shuffleEliminationWithMap = KqpCtx.Config->OptShuffleEliminationWithMap.Get().GetOrElse(true);
bool rightCollectStage = !KqpCtx.Config->GetAllowMultiBroadcasts();
TExprBase output = DqBuildJoin(node, ctx, optCtx, *getParents(), IsGlobal,
diff --git a/ydb/core/kqp/provider/yql_kikimr_settings.cpp b/ydb/core/kqp/provider/yql_kikimr_settings.cpp
index 453905db99d..9ad10b6f3b8 100644
--- a/ydb/core/kqp/provider/yql_kikimr_settings.cpp
+++ b/ydb/core/kqp/provider/yql_kikimr_settings.cpp
@@ -91,6 +91,7 @@ TKikimrConfiguration::TKikimrConfiguration() {
REGISTER_SETTING(*this, OptShuffleElimination);
REGISTER_SETTING(*this, OptShuffleEliminationWithMap);
REGISTER_SETTING(*this, OptShuffleEliminationForAggregation);
+ REGISTER_SETTING(*this, OptDisallowFuseJoins);
REGISTER_SETTING(*this, OverridePlanner);
REGISTER_SETTING(*this, UseGraceJoinCoreForMap);
REGISTER_SETTING(*this, UseBlockHashJoin);
diff --git a/ydb/core/kqp/provider/yql_kikimr_settings.h b/ydb/core/kqp/provider/yql_kikimr_settings.h
index e79ac45ebf2..d2db480937a 100644
--- a/ydb/core/kqp/provider/yql_kikimr_settings.h
+++ b/ydb/core/kqp/provider/yql_kikimr_settings.h
@@ -84,6 +84,7 @@ public:
NCommon::TConfSetting<bool, Static> OptShuffleEliminationWithMap;
NCommon::TConfSetting<bool, Static> OptShuffleEliminationForAggregation;
NCommon::TConfSetting<ui32, Static> CostBasedOptimizationLevel;
+ NCommon::TConfSetting<bool, Static> OptDisallowFuseJoins;
// Use CostBasedOptimizationLevel for internal usage. This is a dummy flag that is mapped to the optimization level during parsing.
NCommon::TConfSetting<TString, Static> CostBasedOptimization;