From 36d8bfc850aa85625024555ed4e1df64379ff26d Mon Sep 17 00:00:00 2001 From: Pisarenko Grigoriy Date: Sat, 5 Jul 2025 16:12:19 +0300 Subject: [PATCH 1/3] Fixed ast output for ctas --- ydb/core/kqp/session_actor/kqp_query_state.h | 1 + ydb/core/kqp/session_actor/kqp_session_actor.cpp | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ydb/core/kqp/session_actor/kqp_query_state.h b/ydb/core/kqp/session_actor/kqp_query_state.h index 425a7e0b8035..5301d675dc5a 100644 --- a/ydb/core/kqp/session_actor/kqp_query_state.h +++ b/ydb/core/kqp/session_actor/kqp_query_state.h @@ -129,6 +129,7 @@ class TKqpQueryState : public TNonCopyable { TInstant ContinueTime; NYql::TKikimrQueryDeadlines QueryDeadlines; TKqpQueryStats QueryStats; + TVector QueryAsts; bool KeepSession = false; TIntrusiveConstPtr UserToken; TString ClientAddress; diff --git a/ydb/core/kqp/session_actor/kqp_session_actor.cpp b/ydb/core/kqp/session_actor/kqp_session_actor.cpp index 93117896a9c7..f2fda81e70cd 100644 --- a/ydb/core/kqp/session_actor/kqp_session_actor.cpp +++ b/ydb/core/kqp/session_actor/kqp_session_actor.cpp @@ -46,6 +46,7 @@ #include #include +#include #include #include @@ -2033,12 +2034,16 @@ class TKqpSessionActor : public TActorBootstrapped { auto stats = QueryState->QueryStats.ToProto(); if (QueryState->GetStatsMode() >= Ydb::Table::QueryStatsCollection::STATS_COLLECTION_FULL) { response->SetQueryPlan(SerializeAnalyzePlan(stats, QueryState->UserRequestContext->PoolId)); - if (QueryState->CompileResult) { - auto preparedQuery = QueryState->CompileResult->PreparedQuery; - if (preparedQuery) { - response->SetQueryAst(preparedQuery->GetPhysicalQuery().GetQueryAst()); + if (const auto compileResult = QueryState->CompileResult) { + if (const auto preparedQuery = compileResult->PreparedQuery) { + if (const auto& queryAst = preparedQuery->GetPhysicalQuery().GetQueryAst()) { + QueryState->QueryAsts.push_back(queryAst); + } } } + if (QueryState->ProcessingLastStatement() && QueryState->QueryAsts) { + response->SetQueryAst(JoinVectorIntoString(QueryState->QueryAsts, "\n")); + } } response->MutableQueryStats()->Swap(&stats); } From ed1ee3c32af6362edc7891413af478a3fcb5965f Mon Sep 17 00:00:00 2001 From: Pisarenko Grigoriy Date: Sat, 5 Jul 2025 16:31:02 +0300 Subject: [PATCH 2/3] Added ast check in tests --- .../federated_query/s3/kqp_federated_query_ut.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ydb/core/kqp/ut/federated_query/s3/kqp_federated_query_ut.cpp b/ydb/core/kqp/ut/federated_query/s3/kqp_federated_query_ut.cpp index c82487f47410..388bcf004b9c 100644 --- a/ydb/core/kqp/ut/federated_query/s3/kqp_federated_query_ut.cpp +++ b/ydb/core/kqp/ut/federated_query/s3/kqp_federated_query_ut.cpp @@ -2019,17 +2019,27 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) { } void RunGenericQuery(const TString& query, TQueryClient& client, const TDriver&) { - auto result = client.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync(); + auto result = client.ExecuteQuery( + query, + NYdb::NQuery::TTxControl::NoTx(), + NYdb::NQuery::TExecuteQuerySettings().StatsMode(NYdb::NQuery::EStatsMode::Profile) + ).ExtractValueSync(); UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + UNIT_ASSERT(result.GetStats()); + UNIT_ASSERT(result.GetStats()->GetAst()); } void RunGenericScript(const TString& script, TQueryClient& client, const TDriver& driver) { - auto scriptExecutionOperation = client.ExecuteScript(script).ExtractValueSync(); + auto scriptExecutionOperation = client.ExecuteScript( + script, + NYdb::NQuery::TExecuteScriptSettings().StatsMode(NYdb::NQuery::EStatsMode::Profile) + ).ExtractValueSync(); UNIT_ASSERT_VALUES_EQUAL_C(scriptExecutionOperation.Status().GetStatus(), EStatus::SUCCESS, scriptExecutionOperation.Status().GetIssues().ToString()); UNIT_ASSERT(!scriptExecutionOperation.Metadata().ExecutionId.empty()); NYdb::NQuery::TScriptExecutionOperation readyOp = WaitScriptExecutionOperation(scriptExecutionOperation.Id(), driver); UNIT_ASSERT_VALUES_EQUAL_C(readyOp.Metadata().ExecStatus, EExecStatus::Completed, readyOp.Status().GetIssues().ToOneLineString()); + UNIT_ASSERT(readyOp.Metadata().ExecStats.GetAst()); } Y_UNIT_TEST(CreateTableAsSelectFromExternalDataSourceGenericQuery) { From 8b81ae920a0a630b6155ef404e5a8b3fcd07b022 Mon Sep 17 00:00:00 2001 From: Pisarenko Grigoriy Date: Mon, 7 Jul 2025 10:02:30 +0300 Subject: [PATCH 3/3] Removed ast list --- ydb/core/kqp/session_actor/kqp_query_state.h | 2 +- ydb/core/kqp/session_actor/kqp_session_actor.cpp | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/ydb/core/kqp/session_actor/kqp_query_state.h b/ydb/core/kqp/session_actor/kqp_query_state.h index 5301d675dc5a..b5b6c10056fd 100644 --- a/ydb/core/kqp/session_actor/kqp_query_state.h +++ b/ydb/core/kqp/session_actor/kqp_query_state.h @@ -129,7 +129,7 @@ class TKqpQueryState : public TNonCopyable { TInstant ContinueTime; NYql::TKikimrQueryDeadlines QueryDeadlines; TKqpQueryStats QueryStats; - TVector QueryAsts; + TString QueryAst; bool KeepSession = false; TIntrusiveConstPtr UserToken; TString ClientAddress; diff --git a/ydb/core/kqp/session_actor/kqp_session_actor.cpp b/ydb/core/kqp/session_actor/kqp_session_actor.cpp index f2fda81e70cd..1e161150e7ef 100644 --- a/ydb/core/kqp/session_actor/kqp_session_actor.cpp +++ b/ydb/core/kqp/session_actor/kqp_session_actor.cpp @@ -46,7 +46,6 @@ #include #include -#include #include #include @@ -2037,13 +2036,11 @@ class TKqpSessionActor : public TActorBootstrapped { if (const auto compileResult = QueryState->CompileResult) { if (const auto preparedQuery = compileResult->PreparedQuery) { if (const auto& queryAst = preparedQuery->GetPhysicalQuery().GetQueryAst()) { - QueryState->QueryAsts.push_back(queryAst); + QueryState->QueryAst = queryAst; } } } - if (QueryState->ProcessingLastStatement() && QueryState->QueryAsts) { - response->SetQueryAst(JoinVectorIntoString(QueryState->QueryAsts, "\n")); - } + response->SetQueryAst(QueryState->QueryAst); } response->MutableQueryStats()->Swap(&stats); }