Skip to content

Commit e43d200

Browse files
authored
Merge 652e80a into 1dd2b99
2 parents 1dd2b99 + 652e80a commit e43d200

File tree

6 files changed

+24
-12
lines changed

6 files changed

+24
-12
lines changed

ydb/core/kqp/opt/logical/kqp_opt_log.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,10 +160,10 @@ class TKqpLogicalOptTransformer : public TOptimizeTransformerBase {
160160
}
161161

162162
TMaybeNode<TExprBase> OptimizeEquiJoinWithCosts(TExprBase node, TExprContext& ctx) {
163-
auto maxDPccpDPTableSize = Config->MaxDPccpDPTableSize.Get().GetOrElse(TDqSettings::TDefault::MaxDPccpDPTableSize);
163+
auto maxDPhypDPTableSize = Config->MaxDPHypDPTableSize.Get().GetOrElse(TDqSettings::TDefault::MaxDPHypDPTableSize);
164164
auto optLevel = Config->CostBasedOptimizationLevel.Get().GetOrElse(Config->DefaultCostBasedOptimizationLevel);
165165
auto providerCtx = TKqpProviderContext(KqpCtx, optLevel);
166-
auto opt = std::unique_ptr<IOptimizerNew>(MakeNativeOptimizerNew(providerCtx, maxDPccpDPTableSize));
166+
auto opt = std::unique_ptr<IOptimizerNew>(MakeNativeOptimizerNew(providerCtx, maxDPhypDPTableSize));
167167
TExprBase output = DqOptimizeEquiJoinWithCosts(node, ctx, TypesCtx, optLevel,
168168
*opt, [](auto& rels, auto label, auto node, auto stat) {
169169
rels.emplace_back(std::make_shared<TKqpRelOptimizerNode>(TString(label), *stat, node));

ydb/core/kqp/provider/yql_kikimr_settings.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ TKikimrConfiguration::TKikimrConfiguration() {
9393
REGISTER_SETTING(*this, EnableSpillingNodes)
9494
.Parser([](const TString& v) { return ParseEnableSpillingNodes(v); });
9595

96-
REGISTER_SETTING(*this, MaxDPccpDPTableSize);
96+
REGISTER_SETTING(*this, MaxDPHypDPTableSize);
9797

9898
REGISTER_SETTING(*this, MaxTasksPerStage);
9999
REGISTER_SETTING(*this, MaxSequentialReadsInFlight);

ydb/core/kqp/provider/yql_kikimr_settings.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ struct TKikimrSettings {
6969
NCommon::TConfSetting<bool, false> OptUseFinalizeByKey;
7070
NCommon::TConfSetting<ui32, false> CostBasedOptimizationLevel;
7171

72-
NCommon::TConfSetting<ui32, false> MaxDPccpDPTableSize;
72+
NCommon::TConfSetting<ui32, false> MaxDPHypDPTableSize;
7373

7474

7575
NCommon::TConfSetting<ui32, false> MaxTasksPerStage;

ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,10 @@ void ComputeStatistics(const std::shared_ptr<TJoinOptimizerNode>& join, IProvide
235235

236236
class TOptimizerNativeNew: public IOptimizerNew {
237237
public:
238-
TOptimizerNativeNew(IProviderContext& ctx, ui32 maxDPhypDPTableSize)
238+
TOptimizerNativeNew(IProviderContext& ctx, ui32 maxDPhypDPTableSize, TExprContext* exprCtx = nullptr)
239239
: IOptimizerNew(ctx)
240-
, MaxDPhypTableSize_(maxDPhypDPTableSize)
240+
, MaxDPHypTableSize_(maxDPhypDPTableSize)
241+
, ExprCtx(exprCtx)
241242
{}
242243

243244
std::shared_ptr<TJoinOptimizerNode> JoinSearch(
@@ -272,8 +273,17 @@ class TOptimizerNativeNew: public IOptimizerNew {
272273
TJoinHypergraph<TNodeSet> hypergraph = MakeJoinHypergraph<TNodeSet>(joinTree, hints);
273274
TDPHypSolver<TNodeSet> solver(hypergraph, this->Pctx);
274275

275-
if (solver.CountCC(MaxDPhypTableSize_) >= MaxDPhypTableSize_) {
276+
if (solver.CountCC(MaxDPHypTableSize_) >= MaxDPHypTableSize_) {
276277
YQL_CLOG(TRACE, CoreDq) << "Maximum DPhyp threshold exceeded";
278+
if (ExprCtx) {
279+
ExprCtx->AddWarning(
280+
YqlIssue(
281+
{}, TIssuesIds::DQ_OPTIMIZE_ERROR,
282+
"Cost Based Optimizer didn't work: "
283+
"Enumeration is too large, use PRAGMA MaxDPHypDPTableSize='4294967295' to disable the limitation"
284+
)
285+
);
286+
}
277287
ComputeStatistics(joinTree, this->Pctx);
278288
return joinTree;
279289
}
@@ -304,11 +314,12 @@ class TOptimizerNativeNew: public IOptimizerNew {
304314
}
305315

306316
private:
307-
ui32 MaxDPhypTableSize_;
317+
ui32 MaxDPHypTableSize_;
318+
TExprContext* ExprCtx;
308319
};
309320

310-
IOptimizerNew* MakeNativeOptimizerNew(IProviderContext& ctx, const ui32 maxDPhypDPTableSize) {
311-
return new TOptimizerNativeNew(ctx, maxDPhypDPTableSize);
321+
IOptimizerNew* MakeNativeOptimizerNew(IProviderContext& ctx, const ui32 maxDPhypDPTableSize, TExprContext* exprCtx = nullptr) {
322+
return new TOptimizerNativeNew(ctx, maxDPhypDPTableSize, exprCtx);
312323
}
313324

314325
TExprBase DqOptimizeEquiJoinWithCosts(
@@ -357,6 +368,7 @@ TExprBase DqOptimizeEquiJoinWithCosts(
357368
// of the EquiJoin and n-1 argument are the parameters to EquiJoin
358369

359370
if (!DqCollectJoinRelationsWithStats(rels, typesCtx, equiJoin, providerCollect)){
371+
ctx.AddWarning(YqlIssue({}, TIssuesIds::DQ_OPTIMIZE_ERROR, "Cost Based Optimizer didn't work: couldn't load statistics"));
360372
return node;
361373
}
362374

ydb/library/yql/dq/opt/dq_opt_log.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ IGraphTransformer::TStatus DqWrapIO(const TExprNode::TPtr& input, TExprNode::TPt
6363

6464
NNodes::TExprBase DqExpandMatchRecognize(NNodes::TExprBase node, TExprContext& ctx, TTypeAnnotationContext& typeAnnCtx);
6565

66-
IOptimizerNew* MakeNativeOptimizerNew(IProviderContext& ctx, const ui32 maxDPccpDPTableSize);
66+
IOptimizerNew* MakeNativeOptimizerNew(IProviderContext& ctx, const ui32 maxDPhypDPTableSize);
6767

6868
NNodes::TMaybeNode<NNodes::TExprBase> UnorderedOverDqReadWrap(NNodes::TExprBase node, TExprContext& ctx, const std::function<const TParentsMap*()>& getParents, bool enableDqReplicate, TTypeAnnotationContext& typeAnnCtx);
6969

ydb/library/yql/providers/dq/common/yql_dq_settings.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ struct TDqSettings {
5757
static constexpr ETaskRunnerStats TaskRunnerStats = ETaskRunnerStats::Basic;
5858
static constexpr ESpillingEngine SpillingEngine = ESpillingEngine::Disable;
5959
static constexpr ui32 CostBasedOptimizationLevel = 4;
60-
static constexpr ui32 MaxDPccpDPTableSize = 40000U;
60+
static constexpr ui32 MaxDPHypDPTableSize = 40000U;
6161
static constexpr ui64 MaxAttachmentsSize = 2_GB;
6262
static constexpr bool SplitStageOnDqReplicate = true;
6363
static constexpr ui64 EnableSpillingNodes = 0;

0 commit comments

Comments
 (0)