diff options
author | Igor Makunin <igor.makunin@gmail.com> | 2022-03-18 14:50:42 +0300 |
---|---|---|
committer | Igor Makunin <igor.makunin@gmail.com> | 2022-03-18 14:50:42 +0300 |
commit | 395dc6b898267eeedc05cb440827a22b6f71ec69 (patch) | |
tree | d98202520a91d4285f4b851379a09f4d251abc29 | |
parent | f0d8005960eb82e1a95c34577b3a8bd3cb3186cb (diff) | |
download | ydb-395dc6b898267eeedc05cb440827a22b6f71ec69.tar.gz |
KIKIMR-14527: dont run exctract predicates on trivial ranges
ref:e3e615857a7c5039fb2621f3c40afe205e7c867a
-rw-r--r-- | ydb/core/kqp/opt/logical/kqp_opt_log_ranges.cpp | 4 | ||||
-rw-r--r-- | ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp | 142 | ||||
-rw-r--r-- | ydb/core/kqp/opt/logical/kqp_opt_log_rules.h | 7 | ||||
-rw-r--r-- | ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp | 2 | ||||
-rw-r--r-- | ydb/core/kqp/ut/kqp_explain_ut.cpp | 6 | ||||
-rw-r--r-- | ydb/core/kqp/ut/kqp_ne_flowcontrol_ut.cpp | 4 | ||||
-rw-r--r-- | ydb/core/kqp/ut/kqp_ne_ut.cpp | 11 | ||||
-rw-r--r-- | ydb/core/kqp/ut/kqp_scan_ut.cpp | 68 | ||||
-rw-r--r-- | ydb/core/kqp/ut/kqp_stats_ut.cpp | 10 | ||||
-rw-r--r-- | ydb/core/kqp/ut/kqp_table_predicate_ut.cpp | 2 | ||||
-rw-r--r-- | ydb/core/tx/datashard/datashard_ut_kqp_scan.cpp | 1 |
11 files changed, 212 insertions, 45 deletions
diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log_ranges.cpp b/ydb/core/kqp/opt/logical/kqp_opt_log_ranges.cpp index acf6a707be3..16da537a400 100644 --- a/ydb/core/kqp/opt/logical/kqp_opt_log_ranges.cpp +++ b/ydb/core/kqp/opt/logical/kqp_opt_log_ranges.cpp @@ -62,6 +62,8 @@ TExprBase BuildEquiRangeLookup(const TKeyRange& keyRange, const TKikimrTableDesc .Done(); } +} // namespace + TKqlKeyRange BuildKeyRangeExpr(const TKeyRange& keyRange, const TKikimrTableDescription& tableDesc, TPositionHandle pos, TExprContext& ctx) { @@ -113,8 +115,6 @@ TKqlKeyRange BuildKeyRangeExpr(const TKeyRange& keyRange, const TKikimrTableDesc .Done(); } -} // namespace - TExprBase KqpPushPredicateToReadTable(TExprBase node, TExprContext& ctx, const TKqpOptimizeContext& kqpCtx) { if (!node.Maybe<TCoFlatMap>()) { return node; diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp b/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp index a4a4a0b3e0b..0bbb0d71cd5 100644 --- a/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp +++ b/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp @@ -16,6 +16,137 @@ using namespace NYql::NCommon; using namespace NYql::NDq; using namespace NYql::NNodes; +namespace { + +TMaybeNode<TExprBase> TryBuildTrivialReadTable(TCoFlatMap& flatmap, TKqlReadTableRanges readTable, + TMaybeNode<TCoFilterNullMembers>& filterNull, TMaybeNode<TCoSkipNullMembers>& skipNull, + const TKikimrTableDescription& tableDesc, TExprContext& ctx, const TKqpOptimizeContext& kqpCtx) +{ + switch (tableDesc.Metadata->Kind) { + case EKikimrTableKind::Datashard: + case EKikimrTableKind::SysView: + break; + case EKikimrTableKind::Olap: + case EKikimrTableKind::Unspecified: + return {}; + } + + auto row = flatmap.Lambda().Args().Arg(0); + auto predicate = TExprBase(flatmap.Lambda().Body().Ref().ChildPtr(0)); + TTableLookup lookup = ExtractTableLookup(row, predicate, tableDesc.Metadata->KeyColumnNames, + &KiTableLookupGetValue, &KiTableLookupCanCompare, &KiTableLookupCompare, ctx, + kqpCtx.Config->HasAllowNullCompareInIndex()); + + if (lookup.IsFullScan()) { + return {}; + } + + if (kqpCtx.IsScanQuery() && lookup.GetKeyRanges().size() > 1) { + return {}; // optimize trivial cases only + } + + auto isTrivialExpr = [](const TExprBase& expr) { + if (!expr.Maybe<TCoExists>()) { + return false; + } + auto opt = expr.Cast<TCoExists>().Optional(); + if (opt.Maybe<TCoDataCtor>()) { + return true; + } + if (opt.Maybe<TCoParameter>()) { + return opt.Ref().GetTypeAnn()->GetKind() == ETypeAnnotationKind::Data; + } + return false; + }; + + auto isTrivialPredicate = [&isTrivialExpr](const TExprBase& expr) { + if (isTrivialExpr(expr)) { + return true; + } + if (expr.Maybe<TCoAnd>()) { + for (auto& predicate : expr.Cast<TCoAnd>().Args()) { + if (!isTrivialExpr(TExprBase(predicate))) { + return false; + } + } + return true; + } + return false; + }; + + TVector<TExprBase> fetches; + fetches.reserve(lookup.GetKeyRanges().size()); + auto readSettings = TKqpReadTableSettings::Parse(readTable); + + for (const auto& keyRange : lookup.GetKeyRanges()) { + if (keyRange.HasResidualPredicate()) { + // In trivial cases the residual predicate look like: + // * (Exists <KeyValue>) + // * (And (Exists <Key1Value>) (Exists Key2Value) ...) + // where `KeyValue` is either explicit `Data` (so `Exists` is always true) + // or Parameter value (in that case we ensure that type is not optional) + if (!isTrivialPredicate(keyRange.GetResidualPredicate().Cast())) { + return {}; + } + } + + auto keyRangeExpr = BuildKeyRangeExpr(keyRange, tableDesc, readTable.Pos(), ctx); + + TKqpReadTableSettings settings = readSettings; + for (size_t i = 0; i < keyRange.GetColumnRangesCount(); ++i) { + const auto& column = tableDesc.Metadata->KeyColumnNames[i]; + auto& range = keyRange.GetColumnRange(i); + if (range.IsDefined() && !range.IsNull()) { + settings.AddSkipNullKey(column); + } + } + + TExprBase input = Build<TKqlReadTable>(ctx, readTable.Pos()) + .Table(readTable.Table()) + .Range(keyRangeExpr) + .Columns(readTable.Columns()) + .Settings(settings.BuildNode(ctx, readTable.Pos())) + .Done(); + + if (filterNull) { + input = Build<TCoFilterNullMembers>(ctx, readTable.Pos()) + .Input(input) + .Members(filterNull.Cast().Members()) + .Done(); + } + + if (skipNull) { + input = Build<TCoSkipNullMembers>(ctx, readTable.Pos()) + .Input(input) + .Members(skipNull.Cast().Members()) + .Done(); + } + + input = Build<TCoFlatMap>(ctx, readTable.Pos()) + .Input(input) + .Lambda() + .Args({"item"}) + .Body<TExprApplier>() + .Apply(TExprBase(ctx.ChangeChild(flatmap.Lambda().Body().Ref(), 0, MakeBool<true>(readTable.Pos(), ctx)))) + .With(flatmap.Lambda().Args().Arg(0), "item") + .Build() + .Build() + .Done(); + + if (lookup.GetKeyRanges().size() == 1) { + return input; + } + + fetches.emplace_back(input); + } + + return Build<TCoExtend>(ctx, readTable.Pos()) + .Add(fetches) + .Done(); +} + +} // namespace + TExprBase KqpPushExtractedPredicateToReadTable(TExprBase node, TExprContext& ctx, const TKqpOptimizeContext& kqpCtx, TTypeAnnotationContext& typesCtx) { @@ -67,7 +198,12 @@ TExprBase KqpPushExtractedPredicateToReadTable(TExprBase node, TExprContext& ctx return node; } - auto& tableDesc = kqpCtx.Tables->ExistingTable(kqpCtx.Cluster, read.Table().Path()); + const auto& tableDesc = kqpCtx.Tables->ExistingTable(kqpCtx.Cluster, read.Table().Path()); + + // test for trivial cases (explicit literals or parameters) + if (auto expr = TryBuildTrivialReadTable(flatmap, read, filterNull, skipNull, tableDesc, ctx, kqpCtx)) { + return expr.Cast(); + } THashSet<TString> possibleKeys; TPredicateExtractorSettings settings; @@ -103,7 +239,7 @@ TExprBase KqpPushExtractedPredicateToReadTable(TExprBase node, TExprContext& ctx YQL_CLOG(DEBUG, ProviderKqp) << "Ranges extracted: " << KqpExprToPrettyString(*ranges, ctx); YQL_CLOG(DEBUG, ProviderKqp) << "Residual lambda: " << KqpExprToPrettyString(*residualLambda, ctx); - TMaybeNode<TExprBase> readInput = Build<TKqlReadTableRanges>(ctx, read.Pos()) + TExprBase input = Build<TKqlReadTableRanges>(ctx, read.Pos()) .Table(read.Table()) .Ranges(ranges) .Columns(read.Columns()) @@ -111,8 +247,6 @@ TExprBase KqpPushExtractedPredicateToReadTable(TExprBase node, TExprContext& ctx .ExplainPrompt(prompt.BuildNode(ctx, read.Pos())) .Done(); - auto input = readInput.Cast(); - if (filterNull) { input = Build<TCoFilterNullMembers>(ctx, node.Pos()) .Input(input) diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log_rules.h b/ydb/core/kqp/opt/logical/kqp_opt_log_rules.h index ae001c4d9c0..a0080e93630 100644 --- a/ydb/core/kqp/opt/logical/kqp_opt_log_rules.h +++ b/ydb/core/kqp/opt/logical/kqp_opt_log_rules.h @@ -9,8 +9,15 @@ * This file contains declaration of all rule functions for logical optimizer */ +namespace NYql::NCommon { + class TKeyRange; +} + namespace NKikimr::NKqp::NOpt { +NYql::NNodes::TKqlKeyRange BuildKeyRangeExpr(const NYql::NCommon::TKeyRange& keyRange, + const NYql::TKikimrTableDescription& tableDesc, NYql::TPositionHandle pos, NYql::TExprContext& ctx); + NYql::NNodes::TExprBase KqpPushPredicateToReadTable(NYql::NNodes::TExprBase node, NYql::TExprContext &ctx, const TKqpOptimizeContext &kqpCtx); diff --git a/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp b/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp index e2acb699731..4cb047c2682 100644 --- a/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp +++ b/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp @@ -73,7 +73,7 @@ TExprBase KqpBuildReadTableStage(TExprBase node, TExprContext& ctx, const TKqpOp return false; } - if (!value.Maybe<TCoDataCtor>()) { + if (!value.Maybe<TCoDataCtor>() && !value.Maybe<TCoParameter>()) { literalRange = false; } diff --git a/ydb/core/kqp/ut/kqp_explain_ut.cpp b/ydb/core/kqp/ut/kqp_explain_ut.cpp index c3a06836367..e9b9c9880a9 100644 --- a/ydb/core/kqp/ut/kqp_explain_ut.cpp +++ b/ydb/core/kqp/ut/kqp_explain_ut.cpp @@ -195,7 +195,7 @@ Y_UNIT_TEST_SUITE(KqpExplain) { settings.Explain(true); auto it = db.StreamExecuteScanQuery(R"( - SELECT * FROM `/Root/EightShard` WHERE Key BETWEEN 150 AND 266 ORDER BY Data LIMIT 4; + SELECT * FROM `/Root/EightShard` WHERE Key BETWEEN 149 + 1 AND 266 ORDER BY Data LIMIT 4; )", settings).GetValueSync(); auto res = CollectStreamResult(it); @@ -262,7 +262,7 @@ Y_UNIT_TEST_SUITE(KqpExplain) { NJson::TJsonValue plan; NJson::ReadJsonTree(*res.PlanJson, &plan, true); - auto scanSort = FindPlanNodeByKv(plan, "Node Type", "Sort-TableRangesScan"); + auto scanSort = FindPlanNodeByKv(plan, "Node Type", "Sort-TableRangeScan"); UNIT_ASSERT(scanSort.IsDefined()); } @@ -626,7 +626,7 @@ Y_UNIT_TEST_SUITE(KqpExplain) { auto it = db.StreamExecuteScanQuery(R"( SELECT * FROM `/Root/KeyValue` - WHERE Key >= 2000 OR Key < 100; + WHERE Key >= 2000 OR Key < 99 + 1; )", settings).GetValueSync(); auto res = CollectStreamResult(it); diff --git a/ydb/core/kqp/ut/kqp_ne_flowcontrol_ut.cpp b/ydb/core/kqp/ut/kqp_ne_flowcontrol_ut.cpp index 16c89eceb58..9c3d839d6d7 100644 --- a/ydb/core/kqp/ut/kqp_ne_flowcontrol_ut.cpp +++ b/ydb/core/kqp/ut/kqp_ne_flowcontrol_ut.cpp @@ -91,10 +91,10 @@ void DoFlowControlTest(ui64 limit, bool hasBlockedByCapacity) { [[302u];["Value2"];["Value-302"]] ])", StreamResultToYson(result, &profiles)); - UNIT_ASSERT_EQUAL(2, profiles.size()); + UNIT_ASSERT_EQUAL(1, profiles.size()); NYql::NDqProto::TDqExecutionStats stats; - google::protobuf::TextFormat::ParseFromString(profiles[1], &stats); + google::protobuf::TextFormat::ParseFromString(profiles[0], &stats); UNIT_ASSERT(stats.IsInitialized()); ui32 blockedByCapacity = 0; diff --git a/ydb/core/kqp/ut/kqp_ne_ut.cpp b/ydb/core/kqp/ut/kqp_ne_ut.cpp index 58ff185761a..925fd219540 100644 --- a/ydb/core/kqp/ut/kqp_ne_ut.cpp +++ b/ydb/core/kqp/ut/kqp_ne_ut.cpp @@ -3041,7 +3041,7 @@ Y_UNIT_TEST_SUITE(KqpNewEngine) { UNIT_ASSERT_VALUES_EQUAL(1, stats.query_phases()[0].affected_shards()); UNIT_ASSERT_VALUES_EQUAL("/Root/Logs", stats.query_phases()[0].table_access()[0].name()); - // mix param and literal + // mix non-optional param and literal auto params = TParamsBuilder() .AddParam("$app").Utf8("nginx").Build() .Build(); @@ -3058,11 +3058,10 @@ Y_UNIT_TEST_SUITE(KqpNewEngine) { CompareYson(R"([[["nginx"];["nginx-23"];["PUT /form HTTP/1.1"];[2]]])", FormatResultSetYson(result.GetResultSet(0))); stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(2, stats.query_phases().size()); // with LiteralExecuter phase - UNIT_ASSERT_VALUES_EQUAL(0, stats.query_phases()[0].table_access().size()); - UNIT_ASSERT_VALUES_EQUAL(1, stats.query_phases()[1].table_access().size()); - UNIT_ASSERT_VALUES_EQUAL(1, stats.query_phases()[1].affected_shards()); - UNIT_ASSERT_VALUES_EQUAL("/Root/Logs", stats.query_phases()[1].table_access()[0].name()); + UNIT_ASSERT_VALUES_EQUAL(1, stats.query_phases().size()); // no LiteralExecuter phase + UNIT_ASSERT_VALUES_EQUAL(1, stats.query_phases()[0].table_access().size()); + UNIT_ASSERT_VALUES_EQUAL(1, stats.query_phases()[0].affected_shards()); + UNIT_ASSERT_VALUES_EQUAL("/Root/Logs", stats.query_phases()[0].table_access()[0].name()); } } diff --git a/ydb/core/kqp/ut/kqp_scan_ut.cpp b/ydb/core/kqp/ut/kqp_scan_ut.cpp index 347ca354412..d0dae0edf6c 100644 --- a/ydb/core/kqp/ut/kqp_scan_ut.cpp +++ b/ydb/core/kqp/ut/kqp_scan_ut.cpp @@ -1083,42 +1083,68 @@ Y_UNIT_TEST_SUITE(KqpScan) { } #endif - Y_UNIT_TEST(PrunePartitionsByLiteral) { - TKikimrRunner kikimr(AppCfg()); + Y_UNIT_TEST_TWIN(PrunePartitionsByLiteral, WithPredicatesExtract) { + auto cfg = AppCfg(); + cfg.MutableFeatureFlags()->SetEnablePredicateExtractForScanQueries(WithPredicatesExtract); + TKikimrRunner kikimr(cfg); NExperimental::TStreamQueryClient db(kikimr.GetDriver()); auto settings = NExperimental::TExecuteStreamQuerySettings() .ProfileMode(NExperimental::EStreamQueryProfileMode::Basic); - auto it = db.ExecuteStreamQuery(R"( + // simple key + { + auto it = db.ExecuteStreamQuery(Sprintf(R"( + PRAGMA Kikimr.OptEnablePredicateExtract = '%s'; SELECT * FROM `/Root/EightShard` WHERE Key = 301; - )", settings).GetValueSync(); + )", WithPredicatesExtract ? "true" : "false"), settings).GetValueSync(); - UNIT_ASSERT(it.IsSuccess()); + UNIT_ASSERT(it.IsSuccess()); - TVector<TString> profiles; - CompareYson(R"([[[3];[301u];["Value1"]]])", StreamResultToYson(it, &profiles)); + TVector<TString> profiles; + CompareYson(R"([[[3];[301u];["Value1"]]])", StreamResultToYson(it, &profiles)); - UNIT_ASSERT_EQUAL(2, profiles.size()); + UNIT_ASSERT_EQUAL(1, profiles.size()); - { - NYql::NDqProto::TDqExecutionStats stats; - google::protobuf::TextFormat::ParseFromString(profiles[0], &stats); - UNIT_ASSERT(stats.IsInitialized()); + { + NYql::NDqProto::TDqExecutionStats stats; + google::protobuf::TextFormat::ParseFromString(profiles[0], &stats); + UNIT_ASSERT(stats.IsInitialized()); - NKqpProto::TKqpExecutionExtraStats extraStats; - UNIT_ASSERT(stats.GetExtra().UnpackTo(&extraStats)); - UNIT_ASSERT_VALUES_EQUAL(extraStats.GetAffectedShards(), 0); + NKqpProto::TKqpExecutionExtraStats extraStats; + UNIT_ASSERT(stats.GetExtra().UnpackTo(&extraStats)); + UNIT_ASSERT_VALUES_EQUAL_C(extraStats.GetAffectedShards(), 1, "" << stats.DebugString()); + } } + // complex key { - NYql::NDqProto::TDqExecutionStats stats; - google::protobuf::TextFormat::ParseFromString(profiles[1], &stats); - UNIT_ASSERT(stats.IsInitialized()); + auto params = TParamsBuilder() + .AddParam("$ts").Int64(2).Build() + .Build(); - NKqpProto::TKqpExecutionExtraStats extraStats; - UNIT_ASSERT(stats.GetExtra().UnpackTo(&extraStats)); - UNIT_ASSERT_VALUES_EQUAL_C(extraStats.GetAffectedShards(), 1, "" << stats.DebugString()); + auto it = db.ExecuteStreamQuery(Sprintf(R"( + PRAGMA Kikimr.OptEnablePredicateExtract = '%s'; + DECLARE $ts AS Int64; + SELECT * FROM `/Root/Logs` WHERE App = "nginx" AND Ts > $ts + )", WithPredicatesExtract ? "true" : "false"), params, settings).GetValueSync(); + + UNIT_ASSERT(it.IsSuccess()); + + TVector<TString> profiles; + CompareYson(R"([[["nginx"];["nginx-23"];["GET /cat.jpg HTTP/1.1"];[3]]])", StreamResultToYson(it, &profiles)); + + UNIT_ASSERT_EQUAL(1, profiles.size()); + + { + NYql::NDqProto::TDqExecutionStats stats; + google::protobuf::TextFormat::ParseFromString(profiles[0], &stats); + UNIT_ASSERT(stats.IsInitialized()); + + NKqpProto::TKqpExecutionExtraStats extraStats; + UNIT_ASSERT(stats.GetExtra().UnpackTo(&extraStats)); + UNIT_ASSERT_VALUES_EQUAL_C(extraStats.GetAffectedShards(), 1, "" << stats.DebugString()); + } } } diff --git a/ydb/core/kqp/ut/kqp_stats_ut.cpp b/ydb/core/kqp/ut/kqp_stats_ut.cpp index 0f889f04477..28c57d9179c 100644 --- a/ydb/core/kqp/ut/kqp_stats_ut.cpp +++ b/ydb/core/kqp/ut/kqp_stats_ut.cpp @@ -31,7 +31,7 @@ Y_UNIT_TEST(MultiTxStatsFullExp) { UNIT_ASSERT(res.PlanJson); NJson::TJsonValue plan; NJson::ReadJsonTree(*res.PlanJson, &plan, true); - auto node = FindPlanNodeByKv(plan, "Node Type", "TopSort-TableRangesScan"); + auto node = FindPlanNodeByKv(plan, "Node Type", "TopSort-TableRangeScan"); UNIT_ASSERT_EQUAL(node.GetMap().at("Stats").GetMapSafe().at("TotalTasks").GetIntegerSafe(), 2); } @@ -103,14 +103,14 @@ Y_UNIT_TEST(MultiTxStatsFull) { ); UNIT_ASSERT(res.QueryStats); - UNIT_ASSERT_VALUES_EQUAL(res.QueryStats->query_phases().size(), 2); - UNIT_ASSERT_VALUES_EQUAL(res.QueryStats->query_phases(1).table_access(0).name(), "/Root/EightShard"); - UNIT_ASSERT_VALUES_EQUAL(res.QueryStats->query_phases(1).table_access(0).partitions_count(), 2); + UNIT_ASSERT_VALUES_EQUAL(res.QueryStats->query_phases().size(), 1); + UNIT_ASSERT_VALUES_EQUAL(res.QueryStats->query_phases(0).table_access(0).name(), "/Root/EightShard"); + UNIT_ASSERT_VALUES_EQUAL(res.QueryStats->query_phases(0).table_access(0).partitions_count(), 2); UNIT_ASSERT(res.PlanJson); NJson::TJsonValue plan; NJson::ReadJsonTree(*res.PlanJson, &plan, true); - auto node = FindPlanNodeByKv(plan, "Node Type", "TopSort-TableRangesScan"); + auto node = FindPlanNodeByKv(plan, "Node Type", "TopSort-TableRangeScan"); UNIT_ASSERT_EQUAL(node.GetMap().at("Stats").GetMapSafe().at("TotalTasks").GetIntegerSafe(), 2); } diff --git a/ydb/core/kqp/ut/kqp_table_predicate_ut.cpp b/ydb/core/kqp/ut/kqp_table_predicate_ut.cpp index c132bdb3fbb..328cb78e913 100644 --- a/ydb/core/kqp/ut/kqp_table_predicate_ut.cpp +++ b/ydb/core/kqp/ut/kqp_table_predicate_ut.cpp @@ -203,7 +203,7 @@ void ExecuteStreamQueryAndCheck(NExperimental::TStreamQueryClient& db, const TSt NYql::NDqProto::TDqExecutionStats stats; // First stage is computation, second scan read. - google::protobuf::TextFormat::ParseFromString(profiles[1], &stats); + google::protobuf::TextFormat::ParseFromString(profiles.back(), &stats); ui64 resultRows = stats.GetResultRows(); ui64 readRows = stats.GetTables(0).GetReadRows(); diff --git a/ydb/core/tx/datashard/datashard_ut_kqp_scan.cpp b/ydb/core/tx/datashard/datashard_ut_kqp_scan.cpp index b2b14de1904..fbc1a745b7c 100644 --- a/ydb/core/tx/datashard/datashard_ut_kqp_scan.cpp +++ b/ydb/core/tx/datashard/datashard_ut_kqp_scan.cpp @@ -27,6 +27,7 @@ namespace { } void EnableLogging(TTestActorRuntime& runtime) { + // runtime.SetLogPriority(NKikimrServices::KQP_YQL, NLog::PRI_DEBUG); runtime.SetLogPriority(NKikimrServices::TX_DATASHARD, NLog::PRI_DEBUG); //runtime.SetLogPriority(NKikimrServices::TX_PROXY, NLog::PRI_DEBUG); runtime.SetLogPriority(NKikimrServices::KQP_EXECUTER, NActors::NLog::PRI_TRACE); |