aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpilik <pudge1000-7@ydb.tech>2024-09-30 13:27:07 +0300
committerGitHub <noreply@github.com>2024-09-30 13:27:07 +0300
commit6e2ebb2cfdf98b642ad2107613287e14f1319f22 (patch)
tree06f31cd4581cf11ed781f6d3b9a378fa64c7e0f8
parentea6dfccfc5af32fe6a0f4cc26c7320cab940246f (diff)
downloadydb-6e2ebb2cfdf98b642ad2107613287e14f1319f22.tar.gz
[CBO] Hint syntax fix (#9875)
-rw-r--r--ydb/core/kqp/ut/join/data/queries/join_order_hints_complex.sql14
-rw-r--r--ydb/core/kqp/ut/join/data/queries/join_order_hints_many_hint_trees.sql12
-rw-r--r--ydb/core/kqp/ut/join/data/queries/join_order_hints_simple.sql10
-rw-r--r--ydb/core/kqp/ut/join/data/queries/test_join_hint.sql6
-rw-r--r--ydb/core/kqp/ut/join/data/queries/test_join_hint2.sql2
-rw-r--r--ydb/library/yql/core/cbo/cbo_hints.cpp37
6 files changed, 42 insertions, 39 deletions
diff --git a/ydb/core/kqp/ut/join/data/queries/join_order_hints_complex.sql b/ydb/core/kqp/ut/join/data/queries/join_order_hints_complex.sql
index 12501dbbed..f6e090f640 100644
--- a/ydb/core/kqp/ut/join/data/queries/join_order_hints_complex.sql
+++ b/ydb/core/kqp/ut/join/data/queries/join_order_hints_complex.sql
@@ -2,15 +2,15 @@ PRAGMA TablePathPrefix='/Root';
PRAGMA ydb.OptimizerHints =
'
- Card(Unused # 10e8)
+ Rows(Unused # 10e8)
JoinOrder( (Unused1 Unused2) (Unused3 Unused4) )
- Card(R # 10e8)
- Card(T # 1)
- Card(R T # 1)
- Card(R S # 10e8)
- Card(T U # 10e8)
- Card(V # 1)
+ Rows(R # 10e8)
+ Rows(T # 1)
+ Rows(R T # 1)
+ Rows(R S # 10e8)
+ Rows(T U # 10e8)
+ Rows(V # 1)
JoinOrder( (R S) (T U) )
';
diff --git a/ydb/core/kqp/ut/join/data/queries/join_order_hints_many_hint_trees.sql b/ydb/core/kqp/ut/join/data/queries/join_order_hints_many_hint_trees.sql
index c1b8aaeb99..6b1f6dc158 100644
--- a/ydb/core/kqp/ut/join/data/queries/join_order_hints_many_hint_trees.sql
+++ b/ydb/core/kqp/ut/join/data/queries/join_order_hints_many_hint_trees.sql
@@ -2,12 +2,12 @@ PRAGMA TablePathPrefix='/Root';
PRAGMA ydb.OptimizerHints =
'
- Card(R # 10e8)
- Card(T # 1)
- Card(R T # 1)
- Card(R S # 10e8)
- Card(T U # 10e8)
- Card(V # 1)
+ Rows(R # 10e8)
+ Rows(T # 1)
+ Rows(R T # 1)
+ Rows(R S # 10e8)
+ Rows(T U # 10e8)
+ Rows(V # 1)
JoinOrder(T U)
JoinOrder(R S)
';
diff --git a/ydb/core/kqp/ut/join/data/queries/join_order_hints_simple.sql b/ydb/core/kqp/ut/join/data/queries/join_order_hints_simple.sql
index 9c53e3ad07..d54e7fc581 100644
--- a/ydb/core/kqp/ut/join/data/queries/join_order_hints_simple.sql
+++ b/ydb/core/kqp/ut/join/data/queries/join_order_hints_simple.sql
@@ -2,11 +2,11 @@ PRAGMA TablePathPrefix='/Root';
PRAGMA ydb.OptimizerHints =
'
- Card(R # 10e8)
- Card(T # 1)
- Card(S # 10e8)
- Card(R T # 1)
- Card(R S # 10e8)
+ Rows(R # 10e8)
+ Rows(T # 1)
+ Rows(S # 10e8)
+ Rows(R T # 1)
+ Rows(R S # 10e8)
JoinOrder(T (R S))
';
diff --git a/ydb/core/kqp/ut/join/data/queries/test_join_hint.sql b/ydb/core/kqp/ut/join/data/queries/test_join_hint.sql
index bf61264170..c5900a1aa1 100644
--- a/ydb/core/kqp/ut/join/data/queries/test_join_hint.sql
+++ b/ydb/core/kqp/ut/join/data/queries/test_join_hint.sql
@@ -1,8 +1,8 @@
PRAGMA ydb.OptimizerHints =
'
- JoinAlgo(R S Grace)
- Card(R # 1)
- Card(R S # 10e6)
+ JoinType(R S Shuffle)
+ Rows(R # 1)
+ Rows(R S # 10e6)
';
SELECT *
diff --git a/ydb/core/kqp/ut/join/data/queries/test_join_hint2.sql b/ydb/core/kqp/ut/join/data/queries/test_join_hint2.sql
index e932682c3a..9621162506 100644
--- a/ydb/core/kqp/ut/join/data/queries/test_join_hint2.sql
+++ b/ydb/core/kqp/ut/join/data/queries/test_join_hint2.sql
@@ -1,4 +1,4 @@
-PRAGMA ydb.OptimizerHints = 'Card(R S # 1)';
+PRAGMA ydb.OptimizerHints = 'Rows(R S # 1)';
SELECT *
diff --git a/ydb/library/yql/core/cbo/cbo_hints.cpp b/ydb/library/yql/core/cbo/cbo_hints.cpp
index 8d6e45de71..8576954534 100644
--- a/ydb/library/yql/core/cbo/cbo_hints.cpp
+++ b/ydb/library/yql/core/cbo/cbo_hints.cpp
@@ -22,13 +22,13 @@ public:
private:
void Start() {
while (Pos < Size) {
- auto hintType = Keyword({"JoinOrder", "JoinAlgo", "Card"});
- if (hintType == "JoinOrder") {
- JoinOrder();
- } else if (hintType == "JoinAlgo") {
- JoinAlgo();
- } else if (hintType == "Card"){
- Card();
+ auto hintType = Keyword({"JoinOrder", "Leading", "JoinType", "Rows"});
+ if (hintType == "JoinOrder" || hintType == "Leading") {
+ JoinOrder(hintType == "Leading");
+ } else if (hintType == "JoinType") {
+ JoinType();
+ } else if (hintType == "Rows"){
+ Rows();
} else {
ParseError(Sprintf("Undefined hints type: %s", hintType.c_str()), Pos - hintType.Size());
}
@@ -45,7 +45,7 @@ private:
return labels;
}
- void JoinAlgo() {
+ void JoinType() {
i32 beginPos = Pos + 1;
Keyword({"("});
@@ -53,7 +53,7 @@ private:
i32 labelsBeginPos = Pos + 1;
TVector<TString> labels = CollectLabels();
if (labels.size() <= 1) {
- ParseError(Sprintf("Bad labels for JoinAlgo hint: %s, example of the format: JoinAlgo(t1 t2 Grace)", JoinSeq(", ", labels).c_str()), labelsBeginPos);
+ ParseError(Sprintf("Bad labels for JoinType hint: %s, example of the format: JoinType(t1 t2 Shuffle)", JoinSeq(", ", labels).c_str()), labelsBeginPos);
}
TString reqJoinAlgoStr = std::move(labels.back());
labels.pop_back();
@@ -61,27 +61,30 @@ private:
Keyword({")"});
TVector<EJoinAlgoType> joinAlgos = {EJoinAlgoType::GraceJoin, EJoinAlgoType::LookupJoin, EJoinAlgoType::MapJoin};
- TVector<TString> joinAlgosStr = {"Grace", "Lookup", "Map"};
+ TVector<TString> joinAlgosStr = {"Shuffle", "Lookup", "Broadcast"};
- for (const auto& [joinAlgo, joinAlgoStr]: Zip(joinAlgos, joinAlgosStr)) {
+ for (const auto& [JoinType, joinAlgoStr]: Zip(joinAlgos, joinAlgosStr)) {
if (reqJoinAlgoStr == joinAlgoStr) {
- Hints.JoinAlgoHints->PushBack(std::move(labels), joinAlgo, "JoinAlgo" + Text.substr(beginPos, Pos - beginPos + 1));
+ Hints.JoinAlgoHints->PushBack(std::move(labels), JoinType, "JoinType" + Text.substr(beginPos, Pos - beginPos + 1));
return;
}
}
- ParseError(Sprintf("Unknown JoinAlgo: '%s', supported algos: [%s]", reqJoinAlgoStr.c_str(), JoinSeq(", ", joinAlgosStr).c_str()), Pos - reqJoinAlgoStr.Size());
+ ParseError(Sprintf("Unknown JoinType: '%s', supported algos: [%s]", reqJoinAlgoStr.c_str(), JoinSeq(", ", joinAlgosStr).c_str()), Pos - reqJoinAlgoStr.Size());
Y_UNREACHABLE();
}
- void JoinOrder() {
+ void JoinOrder(bool leading /* is keyword "Leading" or "JoinOrder" */) {
i32 beginPos = Pos + 1;
Keyword({"("});
auto joinOrderHintTree = JoinOrderLabels();
Keyword({")"});
- Hints.JoinOrderHints->PushBack(std::move(joinOrderHintTree), "JoinOrder" + Text.substr(beginPos, Pos - beginPos + 1));
+ Hints.JoinOrderHints->PushBack(
+ std::move(joinOrderHintTree),
+ leading? "Leading" : "JoinOrder" + Text.substr(beginPos, Pos - beginPos + 1)
+ );
}
std::shared_ptr<TJoinOrderHints::ITreeNode> JoinOrderLabels() {
@@ -103,7 +106,7 @@ private:
Y_UNREACHABLE();
}
- void Card() {
+ void Rows() {
i32 beginPos = Pos + 1;
Keyword({"("});
@@ -124,7 +127,7 @@ private:
default: {ParseError(Sprintf("Unknown operation: '%c'", sign), Pos - 1); Y_UNREACHABLE();}
}
- Hints.CardinalityHints->PushBack(std::move(labels), op, value, "Card" + Text.substr(beginPos, Pos - beginPos + 1));
+ Hints.CardinalityHints->PushBack(std::move(labels), op, value, "Rows" + Text.substr(beginPos, Pos - beginPos + 1));
}
private: