From d1cffce2ebc31b699980c5fc8458c52c0b197d20 Mon Sep 17 00:00:00 2001 From: Nikita Vasilev Date: Wed, 26 Jun 2024 13:22:41 +0300 Subject: [PATCH] Disable blocks for oltp (#5889) --- ydb/core/kqp/host/kqp_runner.cpp | 39 +++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/ydb/core/kqp/host/kqp_runner.cpp b/ydb/core/kqp/host/kqp_runner.cpp index 7c9f40900597..4973c8c6639d 100644 --- a/ydb/core/kqp/host/kqp_runner.cpp +++ b/ydb/core/kqp/host/kqp_runner.cpp @@ -198,22 +198,39 @@ class TKqpRunner : public IKqpRunner { YQL_ENSURE(IsIn({EKikimrQueryType::Query, EKikimrQueryType::Script}, TransformCtx->QueryCtx->Type)); YQL_ENSURE(TMaybeNode(query)); - switch (TransformCtx->Config->BlockChannelsMode) { - case NKikimrConfig::TTableServiceConfig_EBlockChannelsMode_BLOCK_CHANNELS_SCALAR: - case NKikimrConfig::TTableServiceConfig_EBlockChannelsMode_BLOCK_CHANNELS_AUTO: - TypesCtx.BlockEngineMode = NYql::EBlockEngineMode::Auto; - break; - case NKikimrConfig::TTableServiceConfig_EBlockChannelsMode_BLOCK_CHANNELS_FORCE: - TypesCtx.BlockEngineMode = NYql::EBlockEngineMode::Force; - break; - default: - YQL_ENSURE(false); + const auto dataQueryBlocks = TKiDataQueryBlocks(query); + + if (IsOlapQuery(dataQueryBlocks)) { + switch (TransformCtx->Config->BlockChannelsMode) { + case NKikimrConfig::TTableServiceConfig_EBlockChannelsMode_BLOCK_CHANNELS_SCALAR: + case NKikimrConfig::TTableServiceConfig_EBlockChannelsMode_BLOCK_CHANNELS_AUTO: + TypesCtx.BlockEngineMode = NYql::EBlockEngineMode::Auto; + break; + case NKikimrConfig::TTableServiceConfig_EBlockChannelsMode_BLOCK_CHANNELS_FORCE: + TypesCtx.BlockEngineMode = NYql::EBlockEngineMode::Force; + break; + default: + YQL_ENSURE(false); + } } - return PrepareQueryInternal(cluster, TKiDataQueryBlocks(query), ctx, settings); + return PrepareQueryInternal(cluster, dataQueryBlocks, ctx, settings); } private: + bool IsOlapQuery(const TKiDataQueryBlocks& dataQueryBlocks) { + if (dataQueryBlocks.ArgCount() != 1) { + return false; + } + const auto& operations = dataQueryBlocks.Arg(0).Operations(); + return std::any_of( + std::begin(operations), + std::end(operations), + [this](const auto& operation) { + const auto& tableData = SessionCtx->Tables().ExistingTable(operation.Cluster(), operation.Table()); + return tableData.Metadata->IsOlap(); + }); + } TIntrusivePtr PrepareQueryInternal(const TString& cluster, const TKiDataQueryBlocks& dataQueryBlocks, TExprContext& ctx,