diff options
author | aidarsamer <aidarsamer@ydb.tech> | 2023-05-25 18:33:27 +0300 |
---|---|---|
committer | aidarsamer <aidarsamer@ydb.tech> | 2023-05-25 18:33:27 +0300 |
commit | f9c2bb739480bd61ba7ac3539dc65c22d295e069 (patch) | |
tree | befe4c3747d16426493e4ef99320dc06ea856461 | |
parent | 14c17870c6b053f007138d6f0f6188a30f30bc83 (diff) | |
download | ydb-f9c2bb739480bd61ba7ac3539dc65c22d295e069.tar.gz |
Add JSON_VALUE pushdown to Column Shards on KQP side
52 files changed, 322 insertions, 74 deletions
diff --git a/ydb/core/formats/arrow/ssa_runtime_version.h b/ydb/core/formats/arrow/ssa_runtime_version.h index 3235dbd0e45..d20420a6d94 100644 --- a/ydb/core/formats/arrow/ssa_runtime_version.h +++ b/ydb/core/formats/arrow/ssa_runtime_version.h @@ -19,12 +19,13 @@ namespace NKikimr::NSsa { // Bump this version every time incompatible runtime functions are introduced. #ifndef SSA_RUNTIME_VERSION -#define SSA_RUNTIME_VERSION 2U +#define SSA_RUNTIME_VERSION 3U #endif // History: // v1 is the version supported by kikimr-22-4. Supports filter and cast(timestamp to uint64) pushdowns. -// v2 is the version supported by kikimr-23-1. Supports COUNT(col), COUNT(*), SUM(), MIN(), MAX(), AVG(), SOME() aggregations. +// v2 is the version supported by kikimr-23-1. Supports LIKE filter, COUNT(col), COUNT(*), SUM(), MIN(), MAX(), AVG(), SOME() aggregations. +// v3 is the version supported by kikimr-23-2. Supports JSON_VALUE and JSON_EXISTS constexpr ui32 RuntimeVersion = SSA_RUNTIME_VERSION; } diff --git a/ydb/core/kqp/expr_nodes/kqp_expr_nodes.json b/ydb/core/kqp/expr_nodes/kqp_expr_nodes.json index 0b4024586c2..bb016627425 100644 --- a/ydb/core/kqp/expr_nodes/kqp_expr_nodes.json +++ b/ydb/core/kqp/expr_nodes/kqp_expr_nodes.json @@ -470,6 +470,28 @@ ] }, { + "Name": "TKqpOlapJsonOperationBase", + "Base": "TCallable", + "Match": {"Type": "CallableBase"}, + "Children": [ + {"Index": 0, "Name": "Column", "Type": "TCoAtom"}, + {"Index": 1, "Name": "Path", "Type": "TCoAtom"} + ] + }, + { + "Name": "TKqpOlapJsonValue", + "Base": "TKqpOlapJsonOperationBase", + "Match": {"Type": "Callable", "Name": "KqpOlapJsonValue"}, + "Children": [ + {"Index": 2, "Name": "ReturningType", "Type": "TExprBase"} + ] + }, + { + "Name": "TKqpOlapJsonExists", + "Base": "TKqpOlapJsonOperationBase", + "Match": {"Type": "Callable", "Name": "KqpOlapJsonExists"} + }, + { "Name": "TKqpOlapAggOperation", "Base": "TExprBase", "Match": {"Type": "Tuple"}, diff --git a/ydb/core/kqp/host/kqp_type_ann.cpp b/ydb/core/kqp/host/kqp_type_ann.cpp index 8bcc63c0442..923464db939 100644 --- a/ydb/core/kqp/host/kqp_type_ann.cpp +++ b/ydb/core/kqp/host/kqp_type_ann.cpp @@ -860,6 +860,14 @@ bool ValidateOlapFilterConditions(const TExprNode* node, const TStructExprType* return true; } + if (TKqpOlapJsonValue::Match(node)) { + return true; + } + + if (TKqpOlapJsonExists::Match(node)) { + return true; + } + ctx.AddError(TIssue(ctx.GetPosition(node->Pos()), TStringBuilder() << "Expected literal or column as OLAP filter value, got: " << node->Content() )); @@ -891,6 +899,70 @@ TStatus AnnotateOlapFilter(const TExprNode::TPtr& node, TExprContext& ctx) { return TStatus::Ok; } +bool ValidateOlapJsonOperation(const TExprNode::TPtr& node, TExprContext& ctx) { + auto column = node->Child(TKqpOlapJsonOperationBase::idx_Column); + if (!EnsureAtom(*column, ctx)) { + ctx.AddError(TIssue(ctx.GetPosition(node->Pos()), + TStringBuilder() << "Expected column name in OLAP JSON function, got: " << column->Content() + )); + return false; + } + auto path = node->Child(TKqpOlapJsonOperationBase::idx_Path); + if (!EnsureAtom(*path, ctx)) { + ctx.AddError(TIssue(ctx.GetPosition(node->Pos()), + TStringBuilder() << "Expected string as path in OLAP JSON function, got: " << path->Content() + )); + return false; + } + return true; +} + +TStatus AnnotateOlapJsonValue(const TExprNode::TPtr& node, TExprContext& ctx) { + if (!EnsureArgsCount(*node, 3, ctx)) { + return TStatus::Error; + } + + if (!ValidateOlapJsonOperation(node, ctx)) { + return TStatus::Error; + } + + auto returningTypeArg = node->Child(TKqpOlapJsonValue::idx_ReturningType); + + const auto* returningTypeAnn = returningTypeArg->GetTypeAnn()->Cast<TTypeExprType>()->GetType(); + if (!EnsureDataType(returningTypeArg->Pos(), *returningTypeAnn, ctx)) { + return TStatus::Error; + } + EDataSlot resultSlot = returningTypeAnn->Cast<TDataExprType>()->GetSlot(); + + if (!IsDataTypeNumeric(resultSlot) + && !IsDataTypeDate(resultSlot) + && resultSlot != EDataSlot::Utf8 + && resultSlot != EDataSlot::String + && resultSlot != EDataSlot::Bool) + { + ctx.AddError(TIssue(ctx.GetPosition(node->Pos()), "Returning argument of KqpOlapJsonValue callable supports only Utf8, String, Bool, date and numeric types")); + return TStatus::Error; + } + + const TTypeAnnotationNode* resultType = ctx.MakeType<TDataExprType>(resultSlot); + node->SetTypeAnn(ctx.MakeType<TOptionalExprType>(resultType)); + return TStatus::Ok; +} + +TStatus AnnotateOlapJsonExists(const TExprNode::TPtr& node, TExprContext& ctx) { + if (!EnsureArgsCount(*node, 2, ctx)) { + return TStatus::Error; + } + + if (!ValidateOlapJsonOperation(node, ctx)) { + return TStatus::Error; + } + + const TTypeAnnotationNode* resultType = ctx.MakeType<TDataExprType>(EDataSlot::Bool); + node->SetTypeAnn(ctx.MakeType<TOptionalExprType>(resultType)); + return TStatus::Ok; +} + TStatus AnnotateOlapAgg(const TExprNode::TPtr& node, TExprContext& ctx) { if (!EnsureArgsCount(*node, 3, ctx)) { return TStatus::Error; @@ -1341,6 +1413,14 @@ TAutoPtr<IGraphTransformer> CreateKqpTypeAnnotationTransformer(const TString& cl return AnnotateOlapExtractMembers(input, ctx); } + if (TKqpOlapJsonValue::Match(input.Get())) { + return AnnotateOlapJsonValue(input, ctx); + } + + if (TKqpOlapJsonExists::Match(input.Get())) { + return AnnotateOlapJsonExists(input, ctx); + } + if (TKqpCnMapShard::Match(input.Get()) || TKqpCnShuffleShard::Match(input.Get())) { return AnnotateDqConnection(input, ctx); } diff --git a/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_filter.cpp b/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_filter.cpp index e96bb83a9ab..7aeadab2b3b 100644 --- a/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_filter.cpp +++ b/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_filter.cpp @@ -78,10 +78,10 @@ bool IsFalseLiteral(TExprBase node) { return node.Maybe<TCoBool>() && !FromString<bool>(node.Cast<TCoBool>().Literal().Value()); } -TVector<TExprBase> ConvertComparisonNode(const TExprBase& nodeIn) +TVector<TExprBase> ConvertComparisonNode(const TExprBase& nodeIn, TExprContext& ctx, TPositionHandle pos) { TVector<TExprBase> out; - auto convertNode = [](const TExprBase& node) -> TMaybeNode<TExprBase> { + auto convertNode = [&ctx, &pos](const TExprBase& node) -> TMaybeNode<TExprBase> { if (node.Maybe<TCoNull>()) { return node; } @@ -102,6 +102,27 @@ TVector<TExprBase> ConvertComparisonNode(const TExprBase& nodeIn) return maybeMember.Cast().Name(); } + if (auto maybeJsonValue = node.Maybe<TCoJsonValue>()) { + auto maybeColMember = maybeJsonValue.Cast().Json().Maybe<TCoMember>(); + auto maybePathUtf8 = maybeJsonValue.Cast().JsonPath().Maybe<TCoUtf8>(); + auto maybeReturningType = maybeJsonValue.Cast().ReturningType(); + + YQL_ENSURE(maybeColMember, "Expected TCoMember in column field of JSON_VALUE function for pushdown"); + YQL_ENSURE(maybePathUtf8, "Expected TCoUtf8 in path of JSON_VALUE function for pushdown"); + + auto builder = Build<TKqpOlapJsonValue>(ctx, pos) + .Column(maybeColMember.Cast().Name()) + .Path(maybePathUtf8.Cast().Literal()); + if (maybeReturningType) { + builder.ReturningType(maybeReturningType.Cast()); + } else { + builder.ReturningType<TCoDataType>() + .Type(ctx.NewAtom(node.Pos(), "Utf8")) + .Build(); + } + return builder.Done(); + } + return NullNode; }; @@ -137,16 +158,16 @@ TVector<TExprBase> ConvertComparisonNode(const TExprBase& nodeIn) return out; } -TVector<std::pair<TExprBase, TExprBase>> ExtractComparisonParameters(const TCoCompare& predicate) +TVector<std::pair<TExprBase, TExprBase>> ExtractComparisonParameters(const TCoCompare& predicate, TExprContext& ctx, TPositionHandle pos) { TVector<std::pair<TExprBase, TExprBase>> out; - auto left = ConvertComparisonNode(predicate.Left()); + auto left = ConvertComparisonNode(predicate.Left(), ctx, pos); if (left.empty()) { return out; } - auto right = ConvertComparisonNode(predicate.Right()); + auto right = ConvertComparisonNode(predicate.Right(), ctx, pos); if (left.size() != right.size()) { return out; } @@ -327,6 +348,16 @@ TMaybeNode<TExprBase> ExistsPushdown(const TCoExists& exists, TExprContext& ctx, .Done(); } +TMaybeNode<TExprBase> JsonExistsPushdown(const TCoJsonExists& jsonExists, TExprContext& ctx, TPositionHandle pos) +{ + auto columnName = jsonExists.Json().Cast<TCoMember>().Name(); + auto path = jsonExists.JsonPath().Cast<TCoUtf8>().Literal(); + return Build<TKqpOlapJsonExists>(ctx, pos) + .Column(columnName) + .Path(path) + .Done(); +} + TMaybeNode<TExprBase> SafeCastPredicatePushdown(const TCoFlatMap& inputFlatmap, TExprContext& ctx, TPositionHandle pos) { @@ -342,13 +373,13 @@ TMaybeNode<TExprBase> SafeCastPredicatePushdown(const TCoFlatMap& inputFlatmap, */ TVector<std::pair<TExprBase, TExprBase>> out; - auto left = ConvertComparisonNode(inputFlatmap.Input()); + auto left = ConvertComparisonNode(inputFlatmap.Input(), ctx, pos); if (left.empty()) { return NullNode; } auto flatmap = inputFlatmap.Lambda().Body().Cast<TCoFlatMap>(); - auto right = ConvertComparisonNode(flatmap.Input()); + auto right = ConvertComparisonNode(flatmap.Input(), ctx, pos); if (right.empty()) { return NullNode; } @@ -369,7 +400,7 @@ TMaybeNode<TExprBase> SafeCastPredicatePushdown(const TCoFlatMap& inputFlatmap, TMaybeNode<TExprBase> SimplePredicatePushdown(const TCoCompare& predicate, TExprContext& ctx, TPositionHandle pos) { - auto parameters = ExtractComparisonParameters(predicate); + auto parameters = ExtractComparisonParameters(predicate, ctx, pos); if (parameters.empty()) { return NullNode; } @@ -379,10 +410,13 @@ TMaybeNode<TExprBase> SimplePredicatePushdown(const TCoCompare& predicate, TExpr TMaybeNode<TExprBase> CoalescePushdown(const TCoCoalesce& coalesce, TExprContext& ctx, TPositionHandle pos) { - if (auto maybeFlatmap = coalesce.Predicate().Maybe<TCoFlatMap>()) { + auto predicate = coalesce.Predicate(); + if (auto maybeFlatmap = predicate.Maybe<TCoFlatMap>()) { return SafeCastPredicatePushdown(maybeFlatmap.Cast(), ctx, pos); - } else if (auto maybePredicate = coalesce.Predicate().Maybe<TCoCompare>()) { + } else if (auto maybePredicate = predicate.Maybe<TCoCompare>()) { return SimplePredicatePushdown(maybePredicate.Cast(), ctx, pos); + } else if (auto maybeJsonExists = predicate.Maybe<TCoJsonExists>()) { + return JsonExistsPushdown(maybeJsonExists.Cast(), ctx, pos); } return NullNode; @@ -402,6 +436,12 @@ TFilterOpsLevels PredicatePushdown(const TExprBase& predicate, TExprContext& ctx return TFilterOpsLevels(existsPred); } + auto maybeJsonExists = predicate.Maybe<TCoJsonExists>(); + if (maybeJsonExists.IsValid()) { + auto jsonExistsPred = JsonExistsPushdown(maybeJsonExists.Cast(), ctx, pos); + return TFilterOpsLevels(jsonExistsPred); + } + auto maybePredicate = predicate.Maybe<TCoCompare>(); if (maybePredicate.IsValid()) { auto pred = SimplePredicatePushdown(maybePredicate.Cast(), ctx, pos); diff --git a/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_filter_collection.cpp b/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_filter_collection.cpp index f08299dab20..33540cbc0b2 100644 --- a/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_filter_collection.cpp +++ b/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_filter_collection.cpp @@ -61,9 +61,8 @@ bool IsSupportedPredicate(const TCoCompare& predicate) { return true; } else if (predicate.Maybe<TCoCmpLessOrEqual>()) { return true; - } else if (NKikimr::NSsa::RuntimeVersion >= 2U) { - // We introduced LIKE pushdown in v2 of SSA program - return IsLikeOperator(predicate); + } else if (NKikimr::NSsa::RuntimeVersion >= 2U && IsLikeOperator(predicate)) { + return true; } return false; @@ -260,6 +259,15 @@ bool CheckComparisonNodeForPushdown(const TExprBase& node, const TExprNode* lamb if (maybeMember.Cast().Struct().Raw() != lambdaArg) { return false; } + } else if (NKikimr::NSsa::RuntimeVersion >= 3U && node.Maybe<TCoJsonQueryBase>()) { + if (!node.Maybe<TCoJsonValue>()) { + return false; + } + auto jsonOp = node.Cast<TCoJsonQueryBase>(); + if (!jsonOp.Json().Maybe<TCoMember>() || !jsonOp.JsonPath().Maybe<TCoUtf8>()) { + // Currently we support only simple columns in pushdown + return false; + } } else if (!node.Maybe<TCoNull>() && !node.Maybe<TCoParameter>()) { return false; } @@ -365,15 +373,31 @@ bool SafeCastCanBePushed(const TCoFlatMap& flatmap, const TExprNode* lambdaArg) return true; } +bool JsonExistsCanBePushed(const TCoJsonExists& jsonExists, const TExprNode* lambdaArg) { + auto maybeMember = jsonExists.Json().Maybe<TCoMember>(); + if (!maybeMember || !jsonExists.JsonPath().Maybe<TCoUtf8>()) { + // Currently we support only simple columns in pushdown + return false; + } + if (maybeMember.Cast().Struct().Raw() != lambdaArg) { + return false; + } + return true; +} + bool CoalesceCanBePushed(const TCoCoalesce& coalesce, const TExprNode* lambdaArg, const TExprBase& lambdaBody) { if (!coalesce.Value().Maybe<TCoBool>()) { return false; } + auto predicate = coalesce.Predicate(); - if (auto maybeCompare = coalesce.Predicate().Maybe<TCoCompare>()) { + if (auto maybeCompare = predicate.Maybe<TCoCompare>()) { return CompareCanBePushed(maybeCompare.Cast(), lambdaArg, lambdaBody); - } else if (auto maybeFlatmap = coalesce.Predicate().Maybe<TCoFlatMap>()) { + } else if (auto maybeFlatmap = predicate.Maybe<TCoFlatMap>()) { return SafeCastCanBePushed(maybeFlatmap.Cast(), lambdaArg); + } else if (NKikimr::NSsa::RuntimeVersion >= 3U && predicate.Maybe<TCoJsonExists>()) { + auto jsonExists = predicate.Cast<TCoJsonExists>(); + return JsonExistsCanBePushed(jsonExists, lambdaArg); } return false; @@ -467,6 +491,9 @@ void CollectPredicates(const TExprBase& predicate, TPredicateNode& predicateTree } else if (predicate.Maybe<TCoXor>()) { predicateTree.Op = EBoolOp::Xor; CollectPredicatesForBinaryBoolOperators(predicate.Cast<TCoXor>(), predicateTree, lambdaArg, lambdaBody); + } else if (NKikimr::NSsa::RuntimeVersion >= 3U && predicate.Maybe<TCoJsonExists>()) { + auto jsonExists = predicate.Cast<TCoJsonExists>(); + predicateTree.CanBePushed = JsonExistsCanBePushed(jsonExists, lambdaArg); } else { predicateTree.CanBePushed = false; } diff --git a/ydb/core/kqp/query_compiler/kqp_olap_compiler.cpp b/ydb/core/kqp/query_compiler/kqp_olap_compiler.cpp index ab066a23dd6..fc279441d9b 100644 --- a/ydb/core/kqp/query_compiler/kqp_olap_compiler.cpp +++ b/ydb/core/kqp/query_compiler/kqp_olap_compiler.cpp @@ -251,6 +251,11 @@ ui64 ConvertSafeCastToColumn(const TCoSafeCast& cast, TKqpOlapCompileContext& ct return ConvertSafeCastToColumn(cast.Value(), maybeDataType.Cast().Type().StringValue(), ctx); } +ui64 ConvertJsonValueToColumn(const TKqpOlapJsonValue& /*cast*/, TKqpOlapCompileContext& /*ctx*/) { + YQL_ENSURE(false, "Not implemented JsonValue in SSA program!"); + return 0; +} + ui64 GetOrCreateColumnId(const TExprBase& node, TKqpOlapCompileContext& ctx) { if (auto maybeData = node.Maybe<TCoDataCtor>()) { return ConvertValueToColumn(maybeData.Cast(), ctx); @@ -268,6 +273,10 @@ ui64 GetOrCreateColumnId(const TExprBase& node, TKqpOlapCompileContext& ctx) { return ConvertSafeCastToColumn(maybeCast.Cast(), ctx); } + if (auto maybeJsonValue = node.Maybe<TKqpOlapJsonValue>()) { + return ConvertJsonValueToColumn(maybeJsonValue.Cast(), ctx); + } + YQL_ENSURE(false, "Unknown node in OLAP comparison compiler: " << node.Ptr()->Content()); } @@ -330,6 +339,11 @@ TProgram::TAssignment* CompileExists(const TKqpOlapFilterExists& exists, return notCommand; } +TProgram::TAssignment* CompileJsonExists(const TKqpOlapJsonExists& /*cast*/, TKqpOlapCompileContext& /*ctx*/) { + YQL_ENSURE(false, "Not implemented JsonExists in SSA program!"); + return nullptr; +} + TProgram::TAssignment* BuildLogicalProgram(const TExprNode::TChildrenType& args, ui32 function, TKqpOlapCompileContext& ctx) { @@ -368,18 +382,18 @@ TProgram::TAssignment* BuildLogicalProgram(const TExprNode::TChildrenType& args, } TProgram::TAssignment* CompileCondition(const TExprBase& condition, TKqpOlapCompileContext& ctx) { - auto maybeCompare = condition.Maybe<TKqpOlapFilterCompare>(); - - if (maybeCompare.IsValid()) { + if (auto maybeCompare = condition.Maybe<TKqpOlapFilterCompare>()) { return CompileComparison(maybeCompare.Cast(), ctx); } - auto maybeExists = condition.Maybe<TKqpOlapFilterExists>(); - - if (maybeExists.IsValid()) { + if (auto maybeExists = condition.Maybe<TKqpOlapFilterExists>()) { return CompileExists(maybeExists.Cast(), ctx); } + if (auto maybeJsonExists = condition.Maybe<TKqpOlapJsonExists>()) { + return CompileJsonExists(maybeJsonExists.Cast(), ctx); + } + if (auto maybeNot = condition.Maybe<TKqpOlapNot>()) { // Not is a special way in case it has only one child TProgram::TAssignment *value = CompileCondition(maybeNot.Cast().Value(), ctx); diff --git a/ydb/core/kqp/ut/olap/kqp_olap_ut.cpp b/ydb/core/kqp/ut/olap/kqp_olap_ut.cpp index fbc9c2dc12d..2779cd83b40 100644 --- a/ydb/core/kqp/ut/olap/kqp_olap_ut.cpp +++ b/ydb/core/kqp/ut/olap/kqp_olap_ut.cpp @@ -4680,29 +4680,83 @@ Y_UNIT_TEST_SUITE(KqpOlap) { } Y_UNIT_TEST(Json_GetValue) { + // Should be fixed after Arrow kernel implementation for JSON_VALUE + // https://st.yandex-team.ru/KIKIMR-17903 + return; TAggregationTestCase testCase; testCase.SetQuery(R"( SELECT id, JSON_VALUE(jsonval, "$.col1"), JSON_VALUE(jsondoc, "$.col1") FROM `/Root/tableWithNulls` - WHERE - level = 1; + WHERE JSON_VALUE(jsonval, "$.col1") = "val1" AND id = 1; )") +#if SSA_RUNTIME_VERSION >= 3U + .AddExpectedPlanOptions("KqpOlapJsonValue") +#else + .AddExpectedPlanOptions("Udf") +#endif .SetExpectedReply(R"([[1;["val1"];#]])"); TestTableWithNulls({ testCase }); } + Y_UNIT_TEST(Json_GetValue_ToString) { + // Should be fixed after Arrow kernel implementation for JSON_VALUE + // https://st.yandex-team.ru/KIKIMR-17903 + return; + TAggregationTestCase testCase; + testCase.SetQuery(R"( + SELECT id, JSON_VALUE(jsonval, "$.col1"), JSON_VALUE(jsondoc, "$.col1" RETURNING String) FROM `/Root/tableWithNulls` + WHERE JSON_VALUE(jsondoc, "$.col1" RETURNING String) = "val1" AND id = 6; + )") +#if SSA_RUNTIME_VERSION >= 3U + .AddExpectedPlanOptions("KqpOlapJsonValue") +#else + .AddExpectedPlanOptions("Udf") +#endif + .SetExpectedReply(R"([[6;#;["val1"]]])"); + + TestTableWithNulls({ testCase }); + } + Y_UNIT_TEST(Json_Exists) { + // Should be fixed after Arrow kernel implementation for JSON_EXISTS + // https://st.yandex-team.ru/KIKIMR-17903 + return; TAggregationTestCase testCase; testCase.SetQuery(R"( SELECT id, JSON_EXISTS(jsonval, "$.col1"), JSON_EXISTS(jsondoc, "$.col1") FROM `/Root/tableWithNulls` WHERE - level = 1; + JSON_EXISTS(jsonval, "$.col1") AND level = 1; )") +#if SSA_RUNTIME_VERSION >= 3U + .AddExpectedPlanOptions("KqpOlapJsonExists") +#else + .AddExpectedPlanOptions("Udf") +#endif .SetExpectedReply(R"([[1;[%true];#]])"); TestTableWithNulls({ testCase }); } + Y_UNIT_TEST(Json_Exists_JsonDocument) { + // Should be fixed after Arrow kernel implementation for JSON_EXISTS + // https://st.yandex-team.ru/KIKIMR-17903 + return; + TAggregationTestCase testCase; + testCase.SetQuery(R"( + SELECT id, JSON_EXISTS(jsonval, "$.col1"), JSON_EXISTS(jsondoc, "$.col1") FROM `/Root/tableWithNulls` + WHERE + JSON_EXISTS(jsondoc, "$.col1") AND id = 6; + )") +#if SSA_RUNTIME_VERSION >= 3U + .AddExpectedPlanOptions("KqpOlapJsonExists") +#else + .AddExpectedPlanOptions("Udf") +#endif + .SetExpectedReply(R"([[6;#;[%true]]])"); + + TestTableWithNulls({ testCase }); + } + Y_UNIT_TEST(Json_Query) { TAggregationTestCase testCase; testCase.SetQuery(R"( @@ -4712,6 +4766,7 @@ Y_UNIT_TEST_SUITE(KqpOlap) { WHERE level = 1; )") + .AddExpectedPlanOptions("Udf") .SetExpectedReply(R"([[1;["[\"val1\"]"];#]])"); TestTableWithNulls({ testCase }); diff --git a/ydb/core/testlib/cs_helper.cpp b/ydb/core/testlib/cs_helper.cpp index baebf4d7af4..abf45d13ecb 100644 --- a/ydb/core/testlib/cs_helper.cpp +++ b/ydb/core/testlib/cs_helper.cpp @@ -2,6 +2,7 @@ #include <ydb/core/tx/tx_proxy/proxy.h> #include <ydb/core/formats/arrow/arrow_helpers.h> #include <ydb/core/grpc_services/local_rpc/local_rpc.h> +#include <ydb/library/binary_json/write.h> #include <library/cpp/actors/core/event.h> #include <library/cpp/testing/unittest/registar.h> @@ -406,7 +407,7 @@ std::shared_ptr<arrow::RecordBatch> TTableWithNullsHelper::TestArrowBatch(ui64, arrow::Int32Builder bLevel; arrow::StringBuilder bBinaryStr; arrow::StringBuilder bJsonVal; - arrow::StringBuilder bJsonDoc; + arrow::BinaryBuilder bJsonDoc; for (size_t i = 1; i <= rowCount / 2; ++i) { Y_VERIFY(bId.Append(i).ok()); @@ -417,13 +418,15 @@ std::shared_ptr<arrow::RecordBatch> TTableWithNullsHelper::TestArrowBatch(ui64, Y_VERIFY(bJsonDoc.AppendNull().ok()); } + auto maybeJsonDoc = NBinaryJson::SerializeToBinaryJson(R"({"col1": "val1", "obj": {"obj_col2": "val2"}})"); + Y_VERIFY(maybeJsonDoc.Defined()); for (size_t i = rowCount / 2 + 1; i <= rowCount; ++i) { Y_VERIFY(bId.Append(i).ok()); Y_VERIFY(bResourceId.Append(std::to_string(i)).ok()); Y_VERIFY(bLevel.AppendNull().ok()); Y_VERIFY(bBinaryStr.Append(std::to_string(i)).ok()); Y_VERIFY(bJsonVal.AppendNull().ok()); - Y_VERIFY(bJsonDoc.Append(std::string(R"({"col1": "val1", "obj": {"obj_col2": "val2"}})")).ok()); + Y_VERIFY(bJsonDoc.Append(maybeJsonDoc->Data(), maybeJsonDoc->Size()).ok()); } std::shared_ptr<arrow::Int32Array> aId; @@ -431,7 +434,7 @@ std::shared_ptr<arrow::RecordBatch> TTableWithNullsHelper::TestArrowBatch(ui64, std::shared_ptr<arrow::Int32Array> aLevel; std::shared_ptr<arrow::StringArray> aBinaryStr; std::shared_ptr<arrow::StringArray> aJsonVal; - std::shared_ptr<arrow::StringArray> aJsonDoc; + std::shared_ptr<arrow::BinaryArray> aJsonDoc; Y_VERIFY(bId.Finish(&aId).ok()); Y_VERIFY(bResourceId.Finish(&aResourceId).ok()); diff --git a/ydb/services/ydb/ydb_olapstore_ut.cpp b/ydb/services/ydb/ydb_olapstore_ut.cpp index c84ebc0a6c1..4d412881977 100644 --- a/ydb/services/ydb/ydb_olapstore_ut.cpp +++ b/ydb/services/ydb/ydb_olapstore_ut.cpp @@ -584,7 +584,10 @@ Y_UNIT_TEST_SUITE(YdbOlapStore) { } Y_UNIT_TEST_TWIN(LogNonExistingUserId, NotNull) { + // Should be fixed after Arrow kernel implementation for JSON_VALUE + // https://st.yandex-team.ru/KIKIMR-17903 TString query(R"( + PRAGMA Kikimr.OptEnableOlapPushdown = "false"; $user_id = '111'; SELECT `timestamp`, `resource_type`, `resource_id`, `uid`, `level`, `message`, `json_payload` @@ -600,7 +603,10 @@ Y_UNIT_TEST_SUITE(YdbOlapStore) { } Y_UNIT_TEST_TWIN(LogExistingUserId, NotNull) { + // Should be fixed after Arrow kernel implementation for JSON_VALUE + // https://st.yandex-team.ru/KIKIMR-17903 TString query(R"( + PRAGMA Kikimr.OptEnableOlapPushdown = "false"; $user_id = '1000042'; SELECT `timestamp`, `resource_type`, `resource_id`, `uid`, `level`, `message`, `json_payload` diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-0 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-0 index 59c69351ee1..2e1c2d1611e 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-0 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-0 @@ -93,7 +93,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-1 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-1 index c6458a30fbe..02c51550109 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-1 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-1 @@ -130,7 +130,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-10 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-10 index 868ae696a0b..f0df0b57d90 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-10 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-10 @@ -145,7 +145,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-11 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-11 index f1103333d27..cfc611b5af2 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-11 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-11 @@ -151,7 +151,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-12 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-12 index da62e8bf5f0..58b2abf3ba2 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-12 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-12 @@ -118,7 +118,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-13 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-13 index 9f1a4916e12..f7e50129ce4 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-13 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-13 @@ -145,7 +145,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-14 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-14 index ddda5f4739c..505687e9bff 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-14 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-14 @@ -123,7 +123,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-15 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-15 index ed578103c33..02388af9d5e 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-15 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-15 @@ -83,7 +83,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-16 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-16 index c448254d2ab..76c7cd67706 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-16 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-16 @@ -88,7 +88,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-17 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-17 index 2fd62e12ac2..b2cf09aab56 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-17 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-17 @@ -87,7 +87,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-18 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-18 index 7f00d2680d6..72680c9358f 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-18 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-18 @@ -93,7 +93,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-19 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-19 index 4a855bc4013..8f29edbe792 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-19 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-19 @@ -96,7 +96,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-2 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-2 index 35f7003a77e..55407025a1a 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-2 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-2 @@ -144,7 +144,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-20 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-20 index 063ec407c00..9bcbac596e0 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-20 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-20 @@ -130,7 +130,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-21 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-21 index 59bac5b20b7..291e925f5f7 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-21 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-21 @@ -160,7 +160,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-22 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-22 index 6cfbd7f4bee..e1e887c05c2 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-22 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-22 @@ -243,7 +243,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } @@ -464,7 +464,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-23 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-23 index b02e30f559a..51429e4e8a3 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-23 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-23 @@ -513,7 +513,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-24 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-24 index ae0d62718f4..ceada9ef877 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-24 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-24 @@ -101,7 +101,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-25 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-25 index 0a06bcd61d2..792b54d536b 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-25 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-25 @@ -96,7 +96,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-26 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-26 index cdf9b9d9a98..243ac48730d 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-26 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-26 @@ -100,7 +100,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-27 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-27 index 17513c17495..e42cfc42f75 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-27 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-27 @@ -126,7 +126,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-28 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-28 index 42041ebd9dc..a75a0a868e5 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-28 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-28 @@ -122,7 +122,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-29 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-29 index adf49d4bfb3..a4cd67625bb 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-29 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-29 @@ -84,7 +84,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-3 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-3 index c894d4a6bb5..52cf278bab2 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-3 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-3 @@ -116,7 +116,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-30 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-30 index a0c98984ea6..f2e04803b07 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-30 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-30 @@ -132,7 +132,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-31 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-31 index 14536f2c430..32c5c4209e7 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-31 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-31 @@ -132,7 +132,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-32 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-32 index 61f97ccfe94..ddd1182f668 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-32 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-32 @@ -96,7 +96,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-33 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-33 index 9ee716236b2..03cca151443 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-33 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-33 @@ -83,7 +83,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-34 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-34 index 9e885b943f4..3603dc9d4f1 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-34 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-34 @@ -88,7 +88,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-35 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-35 index d84f8cdb0c9..778b71765e6 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-35 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-35 @@ -86,7 +86,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-36 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-36 index 9fcdb6176ca..38ad8edecd7 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-36 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-36 @@ -267,7 +267,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-37 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-37 index 3fcc47383c4..b3069d31781 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-37 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-37 @@ -267,7 +267,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-38 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-38 index 2e27f8f5a26..e8b363119ca 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-38 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-38 @@ -287,7 +287,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-39 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-39 index 45a5e056323..b436a2a847f 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-39 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-39 @@ -213,7 +213,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-4 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-4 index 6a9cfa4c03e..fa247535e37 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-4 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-4 @@ -106,7 +106,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-40 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-40 index f445d82c950..1509c231011 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-40 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-40 @@ -245,7 +245,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-41 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-41 index 262a69f90dd..6275c503d76 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-41 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-41 @@ -292,7 +292,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-42 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-42 index 0c2064f61aa..387c2af0280 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-42 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-42 @@ -240,7 +240,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-5 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-5 index 07f49db4af6..222a6879cae 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-5 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-5 @@ -106,7 +106,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-6 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-6 index a400a1246be..52db7aa36e2 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-6 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-6 @@ -116,7 +116,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-7 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-7 index db0e18b7cfe..3a2947ec13a 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-7 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-7 @@ -118,7 +118,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-8 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-8 index fdd86e0a346..6668b0bbabd 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-8 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-8 @@ -110,7 +110,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } diff --git a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-9 b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-9 index 0eccd31b4fc..b3d69e9a237 100644 --- a/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-9 +++ b/ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-9 @@ -109,7 +109,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } @@ -196,7 +196,7 @@ } } ], - "Version": 2 + "Version": 3 }, "Table": "clickbench/plans/column/hits" } |