aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhor911 <hor911@ydb.tech>2023-08-28 15:37:05 +0300
committerhor911 <hor911@ydb.tech>2023-08-28 16:36:06 +0300
commitb6bb4b113d821566db7aef591d21a142682d07f7 (patch)
treea93c7d8b15b12731cdc5e6c945ad61bf600e6f52
parent57ebaff92803261073720a0db22d8f1b99a582f4 (diff)
downloadydb-b6bb4b113d821566db7aef591d21a142682d07f7.tar.gz
Convert YDB statistics to YQv1 format
-rw-r--r--ydb/core/fq/libs/compute/common/CMakeLists.darwin-x86_64.txt1
-rw-r--r--ydb/core/fq/libs/compute/common/CMakeLists.linux-aarch64.txt1
-rw-r--r--ydb/core/fq/libs/compute/common/CMakeLists.linux-x86_64.txt1
-rw-r--r--ydb/core/fq/libs/compute/common/CMakeLists.windows-x86_64.txt1
-rw-r--r--ydb/core/fq/libs/compute/common/utils.cpp59
-rw-r--r--ydb/core/fq/libs/compute/common/utils.h2
-rw-r--r--ydb/core/fq/libs/compute/common/ya.make1
-rw-r--r--ydb/core/fq/libs/compute/ydb/status_tracker_actor.cpp6
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));
}