diff options
author | hor911 <hor911@ydb.tech> | 2023-08-28 15:37:05 +0300 |
---|---|---|
committer | hor911 <hor911@ydb.tech> | 2023-08-28 16:36:06 +0300 |
commit | b6bb4b113d821566db7aef591d21a142682d07f7 (patch) | |
tree | a93c7d8b15b12731cdc5e6c945ad61bf600e6f52 | |
parent | 57ebaff92803261073720a0db22d8f1b99a582f4 (diff) | |
download | ydb-b6bb4b113d821566db7aef591d21a142682d07f7.tar.gz |
Convert YDB statistics to YQv1 format
8 files changed, 72 insertions, 0 deletions
diff --git a/ydb/core/fq/libs/compute/common/CMakeLists.darwin-x86_64.txt b/ydb/core/fq/libs/compute/common/CMakeLists.darwin-x86_64.txt index 66b32440bf..df13fd872f 100644 --- a/ydb/core/fq/libs/compute/common/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/fq/libs/compute/common/CMakeLists.darwin-x86_64.txt @@ -24,4 +24,5 @@ target_link_libraries(libs-compute-common PUBLIC target_sources(libs-compute-common PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/pinger.cpp ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/run_actor_params.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/utils.cpp ) diff --git a/ydb/core/fq/libs/compute/common/CMakeLists.linux-aarch64.txt b/ydb/core/fq/libs/compute/common/CMakeLists.linux-aarch64.txt index 08d7a8e542..db45ab0353 100644 --- a/ydb/core/fq/libs/compute/common/CMakeLists.linux-aarch64.txt +++ b/ydb/core/fq/libs/compute/common/CMakeLists.linux-aarch64.txt @@ -25,4 +25,5 @@ target_link_libraries(libs-compute-common PUBLIC target_sources(libs-compute-common PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/pinger.cpp ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/run_actor_params.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/utils.cpp ) diff --git a/ydb/core/fq/libs/compute/common/CMakeLists.linux-x86_64.txt b/ydb/core/fq/libs/compute/common/CMakeLists.linux-x86_64.txt index 08d7a8e542..db45ab0353 100644 --- a/ydb/core/fq/libs/compute/common/CMakeLists.linux-x86_64.txt +++ b/ydb/core/fq/libs/compute/common/CMakeLists.linux-x86_64.txt @@ -25,4 +25,5 @@ target_link_libraries(libs-compute-common PUBLIC target_sources(libs-compute-common PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/pinger.cpp ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/run_actor_params.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/utils.cpp ) diff --git a/ydb/core/fq/libs/compute/common/CMakeLists.windows-x86_64.txt b/ydb/core/fq/libs/compute/common/CMakeLists.windows-x86_64.txt index 66b32440bf..df13fd872f 100644 --- a/ydb/core/fq/libs/compute/common/CMakeLists.windows-x86_64.txt +++ b/ydb/core/fq/libs/compute/common/CMakeLists.windows-x86_64.txt @@ -24,4 +24,5 @@ target_link_libraries(libs-compute-common PUBLIC target_sources(libs-compute-common PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/pinger.cpp ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/run_actor_params.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/fq/libs/compute/common/utils.cpp ) diff --git a/ydb/core/fq/libs/compute/common/utils.cpp b/ydb/core/fq/libs/compute/common/utils.cpp new file mode 100644 index 0000000000..bcebc00cff --- /dev/null +++ b/ydb/core/fq/libs/compute/common/utils.cpp @@ -0,0 +1,59 @@ +#include "utils.h" + +#include <library/cpp/json/json_reader.h> +#include <library/cpp/json/yson/json2yson.h> + +namespace NFq { + +void EnumeratePlans(NYson::TYsonWriter& writer, NJson::TJsonValue& value) { + if (auto* subNode = value.GetValueByPath("Plans")) { + ui32 index = 0; + TString nodeType = "Unknown"; + if (auto* subNode = value.GetValueByPath("PlanNodeType")) { + nodeType = subNode->GetStringRobust(); + } + for (auto plan : subNode->GetArray()) { + writer.OnKeyedItem(nodeType + "." + ToString(index++)); + writer.OnBeginMap(); + EnumeratePlans(writer, plan); + if (auto* subNode = plan.GetValueByPath("Stats")) { + for (auto& [key, value] : subNode->GetMapSafe()) { + auto v = value.GetIntegerRobust(); + writer.OnKeyedItem(key); + writer.OnBeginMap(); + writer.OnKeyedItem("sum"); + writer.OnInt64Scalar(v); + writer.OnKeyedItem("count"); + writer.OnInt64Scalar(v); + writer.OnKeyedItem("avg"); + writer.OnInt64Scalar(v); + writer.OnKeyedItem("max"); + writer.OnInt64Scalar(v); + writer.OnKeyedItem("min"); + writer.OnInt64Scalar(v); + writer.OnEndMap(); + } + } + writer.OnEndMap(); + } + } +} + +TString GetV1StatFromV2Plan(const TString& plan) { + Y_UNUSED(plan); + TStringStream out; + NYson::TYsonWriter writer(&out); + writer.OnBeginMap(); + NJson::TJsonReaderConfig jsonConfig; + NJson::TJsonValue stat; + if (NJson::ReadJsonTree(plan, &jsonConfig, &stat)) { + if (auto* subNode = stat.GetValueByPath("Plan")) { + EnumeratePlans(writer, *subNode); + } + } + writer.OnEndMap(); + auto s = NJson2Yson::ConvertYson2Json(out.Str()); + return s; +} + +} // namespace NFq diff --git a/ydb/core/fq/libs/compute/common/utils.h b/ydb/core/fq/libs/compute/common/utils.h index 7f59368904..40654687c6 100644 --- a/ydb/core/fq/libs/compute/common/utils.h +++ b/ydb/core/fq/libs/compute/common/utils.h @@ -24,4 +24,6 @@ inline std::shared_ptr<NYdb::NTable::TTableClient> CreateNewTableClient(const TS tableSettings); } +TString GetV1StatFromV2Plan(const TString& plan); + } // namespace NFq diff --git a/ydb/core/fq/libs/compute/common/ya.make b/ydb/core/fq/libs/compute/common/ya.make index 72d745ba09..a00549a274 100644 --- a/ydb/core/fq/libs/compute/common/ya.make +++ b/ydb/core/fq/libs/compute/common/ya.make @@ -3,6 +3,7 @@ LIBRARY() SRCS( pinger.cpp run_actor_params.cpp + utils.cpp ) PEERDIR( diff --git a/ydb/core/fq/libs/compute/ydb/status_tracker_actor.cpp b/ydb/core/fq/libs/compute/ydb/status_tracker_actor.cpp index 3c55f39447..bd7d9bddd4 100644 --- a/ydb/core/fq/libs/compute/ydb/status_tracker_actor.cpp +++ b/ydb/core/fq/libs/compute/ydb/status_tracker_actor.cpp @@ -4,6 +4,7 @@ #include <ydb/core/fq/libs/compute/common/metrics.h> #include <ydb/core/fq/libs/compute/common/retry_actor.h> #include <ydb/core/fq/libs/compute/common/run_actor_params.h> +#include <ydb/core/fq/libs/compute/common/utils.h> #include <ydb/core/fq/libs/compute/ydb/events/events.h> #include <ydb/core/fq/libs/ydb/ydb.h> #include <ydb/library/services/services.pb.h> @@ -164,6 +165,11 @@ public: pingTaskRequest.set_status(::FederatedQuery::QueryMeta::COMPLETING); pingTaskRequest.set_ast(QueryStats.query_ast()); pingTaskRequest.set_plan(QueryStats.query_plan()); + try { + pingTaskRequest.set_statistics(GetV1StatFromV2Plan(QueryStats.query_plan())); + } catch(const NJson::TJsonException& ex) { + LOG_E("Error statistics conversion: " << ex.what()); + } Send(Pinger, new TEvents::TEvForwardPingRequest(pingTaskRequest)); } |