Skip to content

Commit 47d7b7c

Browse files
pashandor789Pavel Ivanov
andauthored
[CBO] Added DontShuffle / NoOrdering enums (#19321)
Co-authored-by: Pavel Ivanov <pudge1000-7@qavm-9f0570a4.qemu>
1 parent 643d321 commit 47d7b7c

File tree

3 files changed

+22
-14
lines changed

3 files changed

+22
-14
lines changed

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
11
#pragma once
22

3-
#include <numeric>
4-
#include <list>
5-
#include <unordered_set>
6-
73
#include <util/string/join.h>
84
#include <util/string/printf.h>
95
#include <util/string/builder.h>
106

117
#include "bitset.h"
128

9+
10+
#include "dq_opt_join_tree_node.h"
11+
1312
#include <yql/essentials/core/cbo/cbo_optimizer_new.h>
1413
#include <yql/essentials/core/yql_cost_function.h>
1514
#include <library/cpp/iterator/zip.h>
1615
#include <library/cpp/disjoint_sets/disjoint_sets.h>
1716
#include <yql/essentials/core/cbo/cbo_interesting_orderings.h>
1817
#include <yql/essentials/utils/log/log.h>
1918

20-
#include "dq_opt_conflict_rules_collector.h"
21-
2219

2320
namespace NYql::NDq {
2421

@@ -68,8 +65,8 @@ class TJoinHypergraph {
6865

6966
// for interesting orderings framework
7067
TOrderingsStateMachine::TFDSet FDs;
71-
std::int64_t LeftJoinKeysShuffleOrderingIdx = -1;
72-
std::int64_t RightJoinKeysShuffleOrderingIdx = -1;
68+
std::int64_t LeftJoinKeysShuffleOrderingIdx = TJoinOptimizerNodeInternal::NoOrdering;
69+
std::int64_t RightJoinKeysShuffleOrderingIdx = TJoinOptimizerNodeInternal::NoOrdering;
7370

7471
// JoinKind may not be commutative, so we need to know which edge is original and which is reversed.
7572
bool IsReversed;

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,15 @@ std::shared_ptr<TJoinOptimizerNode> ConvertFromInternal(
4848
auto newJoin = std::make_shared<TJoinOptimizerNode>(left, right, join->LeftJoinKeys, join->RightJoinKeys, join->JoinType, join->JoinAlgo, join->LeftAny, join->RightAny);
4949
newJoin->Stats = std::move(join->Stats);
5050

51-
if (!enableShuffleElimination && join->JoinAlgo == EJoinAlgoType::GraceJoin) {
51+
if (
52+
!enableShuffleElimination && join->JoinAlgo == EJoinAlgoType::GraceJoin ||
53+
join->ShuffleLeftSideByOrderingIdx == TJoinOptimizerNodeInternal::NoOrdering
54+
) {
5255
left->Stats.ShuffledByColumns =
5356
TIntrusivePtr<TOptimizerStatistics::TShuffledByColumns>(
5457
new TOptimizerStatistics::TShuffledByColumns(join->LeftJoinKeys)
5558
);
56-
} else if (join->ShuffleLeftSideByOrderingIdx != -1 && fdStorage) {
59+
} else if (join->ShuffleLeftSideByOrderingIdx >= 0 && fdStorage) {
5760
auto shuffledBy = fdStorage->GetInterestingOrderingsColumnNamesByIdx(join->ShuffleLeftSideByOrderingIdx);
5861

5962
left->Stats.ShuffledByColumns =
@@ -64,12 +67,15 @@ std::shared_ptr<TJoinOptimizerNode> ConvertFromInternal(
6467
left->Stats.ShuffledByColumns = nullptr;
6568
}
6669

67-
if (!enableShuffleElimination && join->JoinAlgo == EJoinAlgoType::GraceJoin) {
70+
if (
71+
(!enableShuffleElimination && join->JoinAlgo == EJoinAlgoType::GraceJoin) ||
72+
join->ShuffleRightSideByOrderingIdx == TJoinOptimizerNodeInternal::NoOrdering
73+
) {
6874
right->Stats.ShuffledByColumns =
6975
TIntrusivePtr<TOptimizerStatistics::TShuffledByColumns>(
7076
new TOptimizerStatistics::TShuffledByColumns(join->RightJoinKeys)
7177
);
72-
} else if (join->ShuffleRightSideByOrderingIdx != -1 && fdStorage) {
78+
} else if (join->ShuffleRightSideByOrderingIdx >= 0 && fdStorage) {
7379
auto shuffledBy = fdStorage->GetInterestingOrderingsColumnNamesByIdx(join->ShuffleRightSideByOrderingIdx);
7480

7581
right->Stats.ShuffledByColumns =

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,14 @@ struct TJoinOptimizerNodeInternal : public IBaseOptimizerNode {
8888
const bool LeftAny;
8989
const bool RightAny;
9090

91+
enum {
92+
NoOrdering = -1,
93+
DontShuffle = -2
94+
};
95+
9196
// for interesting orderings framework
92-
std::int64_t ShuffleLeftSideByOrderingIdx = -1;
93-
std::int64_t ShuffleRightSideByOrderingIdx = -1;
97+
std::int64_t ShuffleLeftSideByOrderingIdx = DontShuffle;
98+
std::int64_t ShuffleRightSideByOrderingIdx = DontShuffle;
9499
};
95100

96101
/**

0 commit comments

Comments
 (0)