aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraidarsamer <aidarsamer@ydb.tech>2023-05-25 18:33:27 +0300
committeraidarsamer <aidarsamer@ydb.tech>2023-05-25 18:33:27 +0300
commitf9c2bb739480bd61ba7ac3539dc65c22d295e069 (patch)
treebefe4c3747d16426493e4ef99320dc06ea856461
parent14c17870c6b053f007138d6f0f6188a30f30bc83 (diff)
downloadydb-f9c2bb739480bd61ba7ac3539dc65c22d295e069.tar.gz
Add JSON_VALUE pushdown to Column Shards on KQP side
-rw-r--r--ydb/core/formats/arrow/ssa_runtime_version.h5
-rw-r--r--ydb/core/kqp/expr_nodes/kqp_expr_nodes.json22
-rw-r--r--ydb/core/kqp/host/kqp_type_ann.cpp80
-rw-r--r--ydb/core/kqp/opt/physical/kqp_opt_phy_olap_filter.cpp60
-rw-r--r--ydb/core/kqp/opt/physical/kqp_opt_phy_olap_filter_collection.cpp37
-rw-r--r--ydb/core/kqp/query_compiler/kqp_olap_compiler.cpp26
-rw-r--r--ydb/core/kqp/ut/olap/kqp_olap_ut.cpp61
-rw-r--r--ydb/core/testlib/cs_helper.cpp9
-rw-r--r--ydb/services/ydb/ydb_olapstore_ut.cpp6
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-02
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-12
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-102
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-112
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-122
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-132
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-142
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-152
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-162
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-172
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-182
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-192
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-22
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-202
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-212
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-224
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-232
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-242
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-252
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-262
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-272
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-282
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-292
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-32
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-302
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-312
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-322
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-332
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-342
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-352
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-362
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-372
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-382
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-392
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-42
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-402
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-412
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-422
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-52
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-62
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-72
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-82
-rw-r--r--ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-94
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"
}