From e277117d05b3966f059ef6b4011fc97a330e793f Mon Sep 17 00:00:00 2001 From: Dmitry Orlov Date: Tue, 21 May 2024 15:04:09 -0700 Subject: [PATCH] Address comment re enum pretty-printing, and add MergeJoin --- .../yql/core/cbo/cbo_optimizer_new.cpp | 6 +++++- ydb/library/yql/core/cbo/ya.make | 2 ++ ydb/library/yql/core/yql_cost_function.cpp | 20 ------------------- ydb/library/yql/core/yql_cost_function.h | 7 +++---- 4 files changed, 10 insertions(+), 25 deletions(-) diff --git a/ydb/library/yql/core/cbo/cbo_optimizer_new.cpp b/ydb/library/yql/core/cbo/cbo_optimizer_new.cpp index 0925a3236654..ea4a2331c660 100644 --- a/ydb/library/yql/core/cbo/cbo_optimizer_new.cpp +++ b/ydb/library/yql/core/cbo/cbo_optimizer_new.cpp @@ -8,6 +8,9 @@ #include +const TString& ToString(NYql::EJoinKind); +const TString& ToString(NYql::EJoinAlgoType); + namespace NYql { using namespace NYql::NDq; @@ -89,7 +92,8 @@ void TJoinOptimizerNode::Print(std::stringstream& stream, int ntabs) { stream << " "; } - stream << "Join: (" << ConvertToJoinString(JoinType) << "," << ConvertToJoinAlgoString(JoinAlgo) << ") "; + stream << "Join: (" << ToString(JoinType) << "," << ToString(JoinAlgo) << ") "; + for (auto c : JoinConditions){ stream << c.first.RelName << "." << c.first.AttributeName << "=" << c.second.RelName << "." diff --git a/ydb/library/yql/core/cbo/ya.make b/ydb/library/yql/core/cbo/ya.make index d0986d4f6420..15e4923b631b 100644 --- a/ydb/library/yql/core/cbo/ya.make +++ b/ydb/library/yql/core/cbo/ya.make @@ -4,6 +4,8 @@ SRCS( cbo_optimizer_new.cpp ) +GENERATE_ENUM_SERIALIZATION(cbo_optimizer_new.h) + END() RECURSE_FOR_TESTS( diff --git a/ydb/library/yql/core/yql_cost_function.cpp b/ydb/library/yql/core/yql_cost_function.cpp index 7f0e8477d2b5..7dfe08a2cdd7 100644 --- a/ydb/library/yql/core/yql_cost_function.cpp +++ b/ydb/library/yql/core/yql_cost_function.cpp @@ -3,17 +3,6 @@ namespace NYql { -namespace { - -THashMap JoinAlgoMap = { - {"Undefined",EJoinAlgoType::Undefined}, - {"LookupJoin",EJoinAlgoType::LookupJoin}, - {"MapJoin",EJoinAlgoType::MapJoin}, - {"GraceJoin",EJoinAlgoType::GraceJoin}, - {"StreamLookupJoin",EJoinAlgoType::StreamLookupJoin}}; - -} // namespace - bool NDq::operator < (const NDq::TJoinColumn& c1, const NDq::TJoinColumn& c2) { if (c1.RelName < c2.RelName){ return true; @@ -23,13 +12,4 @@ bool NDq::operator < (const NDq::TJoinColumn& c1, const NDq::TJoinColumn& c2) { return false; } -TString ConvertToJoinAlgoString(EJoinAlgoType joinAlgo) { - for (const auto& [k,v] : JoinAlgoMap) { - if (v == joinAlgo) { - return k; - } - } - Y_ENSURE(false, "Unknown join algo"); -} - } // namespace NYql diff --git a/ydb/library/yql/core/yql_cost_function.h b/ydb/library/yql/core/yql_cost_function.h index 729faecdb6d0..778ee6276a6c 100644 --- a/ydb/library/yql/core/yql_cost_function.h +++ b/ydb/library/yql/core/yql_cost_function.h @@ -21,11 +21,12 @@ enum class EJoinAlgoType { LookupJoin, MapJoin, GraceJoin, - StreamLookupJoin //Right part can be updated during an operation. Used mainly for joining streams with lookup tables. Currently impplemented in Dq by LookupInputTransform + StreamLookupJoin, //Right part can be updated during an operation. Used mainly for joining streams with lookup tables. Currently impplemented in Dq by LookupInputTransform + MergeJoin // To be used in YT }; //StreamLookupJoin is not a subject for CBO and not not included here -static constexpr auto AllJoinAlgos = { EJoinAlgoType::MapJoin, EJoinAlgoType::GraceJoin, EJoinAlgoType::LookupJoin }; +static constexpr auto AllJoinAlgos = { EJoinAlgoType::MapJoin, EJoinAlgoType::GraceJoin, EJoinAlgoType::LookupJoin, EJoinAlgoType::MergeJoin }; namespace NDq { @@ -57,6 +58,4 @@ bool operator < (const TJoinColumn& c1, const TJoinColumn& c2); } // namespace NDq -TString ConvertToJoinAlgoString(EJoinAlgoType joinAlgo); - } // namespace NYql