aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpavelvelikhov <pavelvelikhov@yandex-team.com>2023-11-28 21:31:15 +0300
committerpavelvelikhov <pavelvelikhov@yandex-team.com>2023-11-28 22:09:33 +0300
commite8a0c86dbc96b09c83c35e403b5b00b3a397e063 (patch)
tree86d7745edf7421e8fc6d19913c5bdeb3e07d0687
parentb988e45fba370446d83c456dacf9cbe463fc2bcf (diff)
downloadydb-e8a0c86dbc96b09c83c35e403b5b00b3a397e063.tar.gz
Improved cardinality estimation
Improved predicate selectivity and constant detection
-rw-r--r--ydb/core/kqp/opt/kqp_statistics_transformer.cpp8
-rw-r--r--ydb/library/yql/core/common_opt/yql_co_extr_members.cpp1
-rw-r--r--ydb/library/yql/core/expr_nodes/yql_expr_nodes.json5
-rw-r--r--ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp10
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_join.cpp22
-rw-r--r--ydb/library/yql/core/ut/yql_expr_constraint_ut.cpp12
-rw-r--r--ydb/library/yql/core/yql_cost_function.cpp66
-rw-r--r--ydb/library/yql/core/yql_cost_function.h38
-rw-r--r--ydb/library/yql/core/yql_statistics.cpp2
-rw-r--r--ydb/library/yql/core/yql_statistics.h16
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_join.cpp20
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp33
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_peephole.cpp3
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_predicate_selectivity.cpp59
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_stat.cpp31
-rw-r--r--ydb/library/yql/providers/common/mkql/yql_provider_mkql.cpp24
-rw-r--r--ydb/library/yql/providers/yt/provider/yql_yt_join_impl.cpp15
-rw-r--r--ydb/library/yql/tests/s-expressions/yt_native_file/part0/canondata/result.json12
-rw-r--r--ydb/library/yql/tests/s-expressions/yt_native_file/part1/canondata/result.json12
-rw-r--r--ydb/library/yql/tests/s-expressions/yt_native_file/part2/canondata/result.json6
-rw-r--r--ydb/library/yql/tests/s-expressions/yt_native_file/part3/canondata/result.json12
-rw-r--r--ydb/library/yql/tests/s-expressions/yt_native_file/part4/canondata/result.json12
-rw-r--r--ydb/library/yql/tests/s-expressions/yt_native_file/part5/canondata/result.json24
-rw-r--r--ydb/library/yql/tests/s-expressions/yt_native_file/part6/canondata/result.json24
-rw-r--r--ydb/library/yql/tests/s-expressions/yt_native_file/part7/canondata/result.json18
-rw-r--r--ydb/library/yql/tests/s-expressions/yt_native_file/part8/canondata/result.json24
-rw-r--r--ydb/library/yql/tests/sql/dq_file/part5/canondata/result.json8
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part0/canondata/result.json12
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json24
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part2/canondata/result.json36
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part3/canondata/result.json24
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json18
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part5/canondata/result.json18
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part6/canondata/result.json18
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part7/canondata/result.json18
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json16
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json34
37 files changed, 439 insertions, 296 deletions
diff --git a/ydb/core/kqp/opt/kqp_statistics_transformer.cpp b/ydb/core/kqp/opt/kqp_statistics_transformer.cpp
index dc95487448..22fec88eb7 100644
--- a/ydb/core/kqp/opt/kqp_statistics_transformer.cpp
+++ b/ydb/core/kqp/opt/kqp_statistics_transformer.cpp
@@ -38,7 +38,7 @@ void InferStatisticsForReadTable(const TExprNode::TPtr& input, TTypeAnnotationCo
YQL_CLOG(TRACE, CoreDq) << "Infer statistics for read table, nrows:" << nRows << ", nattrs: " << nAttrs;
- auto outputStats = TOptimizerStatistics(nRows, nAttrs, 0.0);
+ auto outputStats = TOptimizerStatistics(EStatisticsType::BaseTable, nRows, nAttrs, 0.0, tableData.Metadata->KeyColumnNames);
typeCtx->SetStats(input.Get(), std::make_shared<TOptimizerStatistics>(outputStats));
}
@@ -57,7 +57,7 @@ void InferStatisticsForKqpTable(const TExprNode::TPtr& input, TTypeAnnotationCon
int nAttrs = tableData.Metadata->Columns.size();
YQL_CLOG(TRACE, CoreDq) << "Infer statistics for table: " << path.Value() << ", nrows: " << nRows << ", nattrs: " << nAttrs;
- auto outputStats = TOptimizerStatistics(nRows, nAttrs, 0.0);
+ auto outputStats = TOptimizerStatistics(EStatisticsType::BaseTable, nRows, nAttrs, 0.0, tableData.Metadata->KeyColumnNames);
typeCtx->SetStats(input.Get(), std::make_shared<TOptimizerStatistics>(outputStats));
}
@@ -86,7 +86,7 @@ void InferStatisticsForLookupTable(const TExprNode::TPtr& input, TTypeAnnotation
nRows = 1;
}
- auto outputStats = TOptimizerStatistics(nRows, nAttrs, 0);
+ auto outputStats = TOptimizerStatistics(EStatisticsType::BaseTable, nRows, nAttrs, 0, inputStats->KeyColumns);
typeCtx->SetStats(input.Get(), std::make_shared<TOptimizerStatistics>(outputStats));
}
@@ -120,7 +120,7 @@ void InferStatisticsForRowsSourceSettings(const TExprNode::TPtr& input, TTypeAnn
int nAttrs = sourceSettings.Columns().Size();
double cost = inputStats->Cost;
- auto outputStats = TOptimizerStatistics(nRows, nAttrs, cost);
+ auto outputStats = TOptimizerStatistics(EStatisticsType::BaseTable, nRows, nAttrs, cost, inputStats->KeyColumns);
typeCtx->SetStats(input.Get(), std::make_shared<TOptimizerStatistics>(outputStats));
}
diff --git a/ydb/library/yql/core/common_opt/yql_co_extr_members.cpp b/ydb/library/yql/core/common_opt/yql_co_extr_members.cpp
index ef6a42beda..2386e72336 100644
--- a/ydb/library/yql/core/common_opt/yql_co_extr_members.cpp
+++ b/ydb/library/yql/core/common_opt/yql_co_extr_members.cpp
@@ -503,6 +503,7 @@ TExprNode::TPtr ApplyExtractMembersToMapJoinCore(const TExprNode::TPtr& node, co
.RightDict(mapJoin.RightDict())
.JoinKind(mapJoin.JoinKind())
.LeftKeysColumns(mapJoin.LeftKeysColumns())
+ .RightKeysColumns(mapJoin.RightKeysColumns())
.LeftRenames(ctx.NewList(mapJoin.LeftInput().Pos(), std::move(left)))
.RightRenames(ctx.NewList(mapJoin.RightRenames().Pos(), std::move(right)))
.Done().Ptr();
diff --git a/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json b/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json
index 05746ecc75..09f1cb27f4 100644
--- a/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json
+++ b/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json
@@ -1518,8 +1518,9 @@
{"Index": 1, "Name": "RightDict", "Type": "TExprBase"},
{"Index": 2, "Name": "JoinKind", "Type": "TCoAtom"},
{"Index": 3, "Name": "LeftKeysColumns", "Type": "TCoAtomList"},
- {"Index": 4, "Name": "LeftRenames", "Type": "TCoAtomList"},
- {"Index": 5, "Name": "RightRenames", "Type": "TCoAtomList"}
+ {"Index": 4, "Name": "RightKeysColumns", "Type": "TCoAtomList"},
+ {"Index": 5, "Name": "LeftRenames", "Type": "TCoAtomList"},
+ {"Index": 6, "Name": "RightRenames", "Type": "TCoAtomList"}
]
},
{
diff --git a/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp b/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp
index 5ca01d899d..9899691d71 100644
--- a/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp
+++ b/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp
@@ -2969,13 +2969,13 @@ TExprNode::TPtr MakeWideMapJoinCore(const TExprNode& mapjoin, TExprNode::TPtr&&
});
TExprNode::TListType leftRenames;
- leftRenames.reserve(mapjoin.Child(4)->ChildrenSize());
+ leftRenames.reserve(mapjoin.Child(5)->ChildrenSize());
bool split = false;
- mapjoin.Child(4)->ForEachChild([&](const TExprNode& item){
+ mapjoin.Child(5)->ForEachChild([&](const TExprNode& item){
leftRenames.emplace_back(ctx.NewAtom(item.Pos(), *GetFieldPosition(*((split = !split) ? inStructType : outStructType), item.Content())));
});
- auto rightRenames = mapjoin.Child(5)->ChildrenList();
+ auto rightRenames = mapjoin.Child(6)->ChildrenList();
for (auto i = 1U; i < rightRenames.size(); ++++i)
rightRenames[i] = ctx.NewAtom(rightRenames[i]->Pos(), *GetFieldPosition(*outStructType, rightRenames[i]->Content()));
@@ -2984,8 +2984,8 @@ TExprNode::TPtr MakeWideMapJoinCore(const TExprNode& mapjoin, TExprNode::TPtr&&
children.front() = std::move(input);
children[3] = ctx.ChangeChildren(*children[3], std::move(indexes));
- children[4] = ctx.ChangeChildren(*children[4], std::move(leftRenames));
- children[5] = ctx.ChangeChildren(*children[5], std::move(rightRenames));
+ children[5] = ctx.ChangeChildren(*children[5], std::move(leftRenames));
+ children[6] = ctx.ChangeChildren(*children[6], std::move(rightRenames));
return ctx.ChangeChildren(mapjoin, std::move(children));
}
diff --git a/ydb/library/yql/core/type_ann/type_ann_join.cpp b/ydb/library/yql/core/type_ann/type_ann_join.cpp
index 1e01773482..cfe98decda 100644
--- a/ydb/library/yql/core/type_ann/type_ann_join.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_join.cpp
@@ -335,6 +335,10 @@ namespace NTypeAnnImpl {
}
}
+ if (!EnsureTupleOfAtoms(*input->Child(4), ctx.Expr)) {
+ return IGraphTransformer::TStatus::Error;
+ }
+
const TStructExprType* rightStructType = nullptr;
const TTupleExprType* rightTupleType = nullptr;
if (joinKind != "LeftSemi" && joinKind != "LeftOnly") {
@@ -357,8 +361,8 @@ namespace NTypeAnnImpl {
}
}
- auto& leftRenames = *input->Child(4);
- auto& rightRenames = *input->Child(5);
+ auto& leftRenames = *input->Child(5);
+ auto& rightRenames = *input->Child(6);
if (!EnsureTupleOfAtoms(leftRenames, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -470,17 +474,9 @@ namespace NTypeAnnImpl {
}
IGraphTransformer::TStatus MapJoinCoreWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
- if (input->ChildrenSize() == 7U) {
- // Drop unused argument: right key.
- auto children = input->ChildrenList();
- auto it = children.cbegin();
- std::advance(it, 4U);
- children.erase(it);
- output = ctx.Expr.ChangeChildren(*input, std::move(children));
- return IGraphTransformer::TStatus::Repeat;
- }
-
- if (!EnsureArgsCount(*input, 6, ctx.Expr)) {
+ Y_UNUSED(output);
+
+ if (!EnsureArgsCount(*input, 7, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
diff --git a/ydb/library/yql/core/ut/yql_expr_constraint_ut.cpp b/ydb/library/yql/core/ut/yql_expr_constraint_ut.cpp
index 5db588bc5b..3b9fd351ca 100644
--- a/ydb/library/yql/core/ut/yql_expr_constraint_ut.cpp
+++ b/ydb/library/yql/core/ut/yql_expr_constraint_ut.cpp
@@ -2104,7 +2104,7 @@ Y_UNIT_TEST_SUITE(TYqlExprConstraints) {
(let dict (ToDict list2 (lambda '(item) '((Member item 'key2) (Member item 'subkey2))) (lambda '(item) '((Member item 'subkey2) (Member item 'value2))) '('One 'Hashed)))
- (let join (MapJoinCore (ToFlow list1) dict 'Inner '('key1 'subkey1) '('key1 'key 'subkey1 'subkey 'value1 'value) '('0 's '1 'v)))
+ (let join (MapJoinCore (ToFlow list1) dict 'Inner '('key1 'subkey1) '('key2 'subkey2) '('key1 'key 'subkey1 'subkey 'value1 'value) '('0 's '1 'v)))
(let list (Collect join))
(let res_sink (DataSink 'yt (quote plato)))
@@ -2146,7 +2146,7 @@ Y_UNIT_TEST_SUITE(TYqlExprConstraints) {
(let dict (ToDict list2 (lambda '(item) '((Member item 'key2) (Member item 'subkey2))) (lambda '(item) '((Member item 'subkey2) (Member item 'value2))) '('Many 'Hashed)))
- (let join (MapJoinCore (ToFlow list1) dict 'Inner '('key1 'subkey1) '('key1 'key 'subkey1 'subkey 'value1 'value) '('0 's '1 'v)))
+ (let join (MapJoinCore (ToFlow list1) dict 'Inner '('key1 'subkey1) '('key2 'subkey2) '('key1 'key 'subkey1 'subkey 'value1 'value) '('0 's '1 'v)))
(let list (Collect join))
(let res_sink (DataSink 'yt (quote plato)))
@@ -2188,7 +2188,7 @@ Y_UNIT_TEST_SUITE(TYqlExprConstraints) {
(let dict (ToDict list2 (lambda '(item) '((Member item 'key2) (Member item 'subkey2))) (lambda '(item) '((Member item 'subkey2) (Member item 'value2))) '('One 'Hashed)))
- (let join (MapJoinCore (ToFlow list1) dict 'Left '('key1 'subkey1) '('key1 'key 'subkey1 'subkey 'value1 'value) '('0 's '1 'v)))
+ (let join (MapJoinCore (ToFlow list1) dict 'Left '('key1 'subkey1) '('key2 'subkey2) '('key1 'key 'subkey1 'subkey 'value1 'value) '('0 's '1 'v)))
(let list (Collect join))
(let res_sink (DataSink 'yt (quote plato)))
@@ -2230,7 +2230,7 @@ Y_UNIT_TEST_SUITE(TYqlExprConstraints) {
(let dict (ToDict list2 (lambda '(item) '((Member item 'key2) (Member item 'subkey2))) (lambda '(item) '((Member item 'subkey2) (Member item 'value2))) '('Many 'Hashed)))
- (let join (MapJoinCore (ToFlow list1) dict 'Left '('key1 'subkey1) '('key1 'key 'subkey1 'subkey 'value1 'value) '('0 's '1 'v)))
+ (let join (MapJoinCore (ToFlow list1) dict 'Left '('key1 'subkey1) '('key2 'subkey2) '('key1 'key 'subkey1 'subkey 'value1 'value) '('0 's '1 'v)))
(let list (Collect join))
(let res_sink (DataSink 'yt (quote plato)))
@@ -2272,7 +2272,7 @@ Y_UNIT_TEST_SUITE(TYqlExprConstraints) {
(let dict (ToDict list2 (lambda '(item) '((Member item 'key2) (Member item 'subkey2))) (lambda '(item) '()) '('One 'Hashed)))
- (let join (MapJoinCore (ToFlow list1) dict 'LeftSemi '('key1 'subkey1) '('key1 'key 'subkey1 'subkey 'value1 'value) '()))
+ (let join (MapJoinCore (ToFlow list1) dict 'LeftSemi '('key1 'subkey1) '('key2 'subkey2) '('key1 'key 'subkey1 'subkey 'value1 'value) '()))
(let list (Collect join))
(let res_sink (DataSink 'yt (quote plato)))
@@ -2314,7 +2314,7 @@ Y_UNIT_TEST_SUITE(TYqlExprConstraints) {
(let dict (ToDict list2 (lambda '(item) '((Member item 'key2) (Member item 'subkey2))) (lambda '(item) '()) '('One 'Hashed)))
- (let join (MapJoinCore (ToFlow list1) dict 'LeftOnly '('key1 'subkey1) '('key1 'key 'value1 'value) '()))
+ (let join (MapJoinCore (ToFlow list1) dict 'LeftOnly '('key1 'subkey1) '('key2 'subkey2) '('key1 'key 'value1 'value) '()))
(let list (Collect join))
(let res_sink (DataSink 'yt (quote plato)))
diff --git a/ydb/library/yql/core/yql_cost_function.cpp b/ydb/library/yql/core/yql_cost_function.cpp
index f42c95164b..7dfc5189b5 100644
--- a/ydb/library/yql/core/yql_cost_function.cpp
+++ b/ydb/library/yql/core/yql_cost_function.cpp
@@ -2,6 +2,22 @@
using namespace NYql;
+namespace {
+
+bool IsPKJoin(const TOptimizerStatistics& stats, const TVector<TString>& joinKeys) {
+ if (stats.KeyColumns.size()==0) {
+ return false;
+ }
+
+ for(size_t i=0; i<stats.KeyColumns.size(); i++){
+ if (std::find(joinKeys.begin(), joinKeys.end(), stats.KeyColumns[i]) == joinKeys.end()) {
+ return false;
+ }
+ }
+ return true;
+}
+}
+
/**
* Compute the cost and output cardinality of a join
*
@@ -9,14 +25,54 @@ using namespace NYql;
*
* The build is on the right side, so we make the build side a bit more expensive than the probe
*/
-TOptimizerStatistics NYql::ComputeJoinStats(TOptimizerStatistics leftStats, TOptimizerStatistics rightStats, EJoinImplType joinImpl) {
+
+TOptimizerStatistics NYql::ComputeJoinStats(const TOptimizerStatistics& leftStats, const TOptimizerStatistics& rightStats,
+ const TVector<TString>& leftJoinKeys, const TVector<TString>& rightJoinKeys, EJoinImplType joinImpl) {
Y_UNUSED(joinImpl);
- double newCard = 0.2 * leftStats.Nrows * rightStats.Nrows;
+ double newCard;
+ EStatisticsType outputType;
+
+ if (IsPKJoin(rightStats,rightJoinKeys)) {
+ newCard = std::max(leftStats.Nrows,rightStats.Nrows);
+ if (leftStats.Type == EStatisticsType::BaseTable){
+ outputType = EStatisticsType::FilteredFactTable;
+ } else {
+ outputType = leftStats.Type;
+ }
+ }
+ else if (IsPKJoin(leftStats,leftJoinKeys)) {
+ newCard = std::max(leftStats.Nrows,rightStats.Nrows);
+ if (rightStats.Type == EStatisticsType::BaseTable){
+ outputType = EStatisticsType::FilteredFactTable;
+ } else {
+ outputType = rightStats.Type;
+ }
+ }
+ else {
+ newCard = 0.2 * leftStats.Nrows * rightStats.Nrows;
+ outputType = EStatisticsType::ManyManyJoin;
+ }
+
int newNCols = leftStats.Ncols + rightStats.Ncols;
+
double cost = leftStats.Nrows + 2.0 * rightStats.Nrows
- + newCard
- + leftStats.Cost + rightStats.Cost;
+ + newCard
+ + leftStats.Cost + rightStats.Cost;
+
+ return TOptimizerStatistics(outputType, newCard, newNCols, cost);
+}
+
+TOptimizerStatistics NYql::ComputeJoinStats(const TOptimizerStatistics& leftStats, const TOptimizerStatistics& rightStats,
+ const std::set<std::pair<NDq::TJoinColumn, NDq::TJoinColumn>>& joinConditions, EJoinImplType joinImpl) {
+
+ TVector<TString> leftJoinKeys;
+ TVector<TString> rightJoinKeys;
+
+ for (auto c : joinConditions) {
+ leftJoinKeys.emplace_back(c.first.AttributeName);
+ rightJoinKeys.emplace_back(c.second.AttributeName);
+ }
- return TOptimizerStatistics(newCard, newNCols, cost);
+ return ComputeJoinStats(leftStats, rightStats, leftJoinKeys, rightJoinKeys, joinImpl);
}
diff --git a/ydb/library/yql/core/yql_cost_function.h b/ydb/library/yql/core/yql_cost_function.h
index eedd8034b9..42e715fc8b 100644
--- a/ydb/library/yql/core/yql_cost_function.h
+++ b/ydb/library/yql/core/yql_cost_function.h
@@ -2,18 +2,54 @@
#include "yql_statistics.h"
+#include <util/generic/hash.h>
+#include <util/generic/vector.h>
+#include <util/generic/string.h>
+
+#include <set>
+
/**
* The cost function for cost based optimizer currently consists of methods for computing
* both the cost and cardinalities of individual plan operators
*/
namespace NYql {
+namespace NDq {
+/**
+ * Join column is a struct that records the relation label and
+ * attribute name, used in join conditions
+*/
+struct TJoinColumn {
+ TString RelName;
+ TString AttributeName;
+
+ TJoinColumn(TString relName, TString attributeName) : RelName(relName),
+ AttributeName(attributeName) {}
+
+ bool operator == (const TJoinColumn& other) const {
+ return RelName == other.RelName && AttributeName == other.AttributeName;
+ }
+
+ struct HashFunction
+ {
+ size_t operator()(const TJoinColumn& c) const
+ {
+ return THash<TString>{}(c.RelName) ^ THash<TString>{}(c.AttributeName);
+ }
+ };
+};
+}
+
enum EJoinImplType {
DictJoin,
MapJoin,
GraceJoin
};
-TOptimizerStatistics ComputeJoinStats(TOptimizerStatistics leftStats, TOptimizerStatistics rightStats, EJoinImplType joinType);
+TOptimizerStatistics ComputeJoinStats(const TOptimizerStatistics& leftStats, const TOptimizerStatistics& rightStats,
+ const std::set<std::pair<NDq::TJoinColumn, NDq::TJoinColumn>>& joinConditions, EJoinImplType joinType);
+
+TOptimizerStatistics ComputeJoinStats(const TOptimizerStatistics& leftStats, const TOptimizerStatistics& rightStats,
+ const TVector<TString>& leftJoinKeys, const TVector<TString>& rightJoinKeys, EJoinImplType joinType);
} \ No newline at end of file
diff --git a/ydb/library/yql/core/yql_statistics.cpp b/ydb/library/yql/core/yql_statistics.cpp
index 30d8dcd26b..24033b5088 100644
--- a/ydb/library/yql/core/yql_statistics.cpp
+++ b/ydb/library/yql/core/yql_statistics.cpp
@@ -3,7 +3,7 @@
using namespace NYql;
std::ostream& NYql::operator<<(std::ostream& os, const TOptimizerStatistics& s) {
- os << "Nrows: " << s.Nrows << ", Ncols: " << s.Ncols << ", Cost: " << s.Cost ;
+ os << "Type: " << s.Type << ", Nrows: " << s.Nrows << ", Ncols: " << s.Ncols << ", Cost: " << s.Cost ;
return os;
}
diff --git a/ydb/library/yql/core/yql_statistics.h b/ydb/library/yql/core/yql_statistics.h
index 7564a751a1..77eff37837 100644
--- a/ydb/library/yql/core/yql_statistics.h
+++ b/ydb/library/yql/core/yql_statistics.h
@@ -1,11 +1,18 @@
#pragma once
+#include <util/generic/vector.h>
#include <util/generic/string.h>
#include <optional>
#include <iostream>
namespace NYql {
+enum EStatisticsType : ui32 {
+ BaseTable,
+ FilteredFactTable,
+ ManyManyJoin
+};
+
/**
* Optimizer Statistics struct records per-table and per-column statistics
* for the current operator in the plan. Currently, only Nrows and Ncols are
@@ -14,14 +21,19 @@ namespace NYql {
* all of the time.
*/
struct TOptimizerStatistics {
+ EStatisticsType Type = BaseTable;
double Nrows = 0;
int Ncols = 0;
double Cost;
+ TVector<TString> KeyColumns;
+
TString Descr;
TOptimizerStatistics() {}
- TOptimizerStatistics(double nrows,int ncols): Nrows(nrows), Ncols(ncols) {}
- TOptimizerStatistics(double nrows,int ncols, double cost): Nrows(nrows), Ncols(ncols), Cost(cost) {}
+ TOptimizerStatistics(double nrows, int ncols): Nrows(nrows), Ncols(ncols) {}
+ TOptimizerStatistics(double nrows, int ncols, double cost): Nrows(nrows), Ncols(ncols), Cost(cost) {}
+ TOptimizerStatistics(EStatisticsType type, double nrows, int ncols, double cost): Type(type), Nrows(nrows), Ncols(ncols), Cost(cost) {}
+ TOptimizerStatistics(EStatisticsType type, double nrows, int ncols, double cost, TVector<TString> keyColumns): Type(type), Nrows(nrows), Ncols(ncols), Cost(cost), KeyColumns(keyColumns) {}
TOptimizerStatistics(double nrows,int ncols, double cost, TString descr): Nrows(nrows), Ncols(ncols), Cost(cost), Descr(descr) {}
diff --git a/ydb/library/yql/dq/opt/dq_opt_join.cpp b/ydb/library/yql/dq/opt/dq_opt_join.cpp
index bf950ff54c..e4cbcb364b 100644
--- a/ydb/library/yql/dq/opt/dq_opt_join.cpp
+++ b/ydb/library/yql/dq/opt/dq_opt_join.cpp
@@ -1309,6 +1309,14 @@ TExprBase DqBuildHashJoin(const TDqJoin& join, EHashJoinMode mode, TExprContext&
.Seal()
.List(4)
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ for (ui32 i = 0U; i < rightKeys.size(); ++i) {
+ parent.Atom(i, ctx.GetIndexAsString(rightKeys[i]), TNodeFlags::Default);
+ }
+ return parent;
+ })
+ .Seal()
+ .List(5)
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
for (ui32 i = 0U; i < leftNames.size(); ++i) {
parent.Atom(2*i, ctx.GetIndexAsString(i), TNodeFlags::Default);
parent.Atom(2*i + 1, ctx.GetIndexAsString(i), TNodeFlags::Default);
@@ -1316,7 +1324,7 @@ TExprBase DqBuildHashJoin(const TDqJoin& join, EHashJoinMode mode, TExprContext&
return parent;
})
.Seal()
- .List(5)
+ .List(6)
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
for (ui32 i = 0U; i < rightNames.size(); ++i) {
parent.Atom(2*i, ctx.GetIndexAsString(i), TNodeFlags::Default);
@@ -1349,6 +1357,14 @@ TExprBase DqBuildHashJoin(const TDqJoin& join, EHashJoinMode mode, TExprContext&
.Seal()
.List(4)
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ for (ui32 i = 0U; i < leftKeys.size(); ++i) {
+ parent.Atom(i, ctx.GetIndexAsString(leftKeys[i]), TNodeFlags::Default);
+ }
+ return parent;
+ })
+ .Seal()
+ .List(5)
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
for (ui32 i = 0U; i < rightNames.size(); ++i) {
parent.Atom(2*i, ctx.GetIndexAsString(i), TNodeFlags::Default);
parent.Atom(2*i + 1, ctx.GetIndexAsString(i + leftNames.size()), TNodeFlags::Default);
@@ -1356,7 +1372,7 @@ TExprBase DqBuildHashJoin(const TDqJoin& join, EHashJoinMode mode, TExprContext&
return parent;
})
.Seal()
- .List(5)
+ .List(6)
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
for (ui32 i = 0U; i < leftNames.size(); ++i) {
parent.Atom(2*i, ctx.GetIndexAsString(i), TNodeFlags::Default);
diff --git a/ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp b/ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp
index 96e8dce4a5..ba698a6acb 100644
--- a/ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp
+++ b/ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp
@@ -29,31 +29,6 @@ namespace NYql::NDq {
using namespace NYql::NNodes;
-
-/**
- * Join column is a struct that records the relation label and
- * attribute name, used in join conditions
-*/
-struct TJoinColumn {
- TString RelName;
- TString AttributeName;
-
- TJoinColumn(TString relName, TString attributeName) : RelName(relName),
- AttributeName(attributeName) {}
-
- bool operator == (const TJoinColumn& other) const {
- return RelName == other.RelName && AttributeName == other.AttributeName;
- }
-
- struct HashFunction
- {
- size_t operator()(const TJoinColumn& c) const
- {
- return THash<TString>{}(c.RelName) ^ THash<TString>{}(c.AttributeName);
- }
- };
-};
-
bool operator < (const TJoinColumn& c1, const TJoinColumn& c2) {
if (c1.RelName < c2.RelName){
return true;
@@ -247,7 +222,7 @@ std::shared_ptr<TJoinOptimizerNode> MakeJoin(std::shared_ptr<IBaseOptimizerNode>
EJoinImplType joinImpl) {
auto res = std::make_shared<TJoinOptimizerNode>(left, right, joinConditions, "Inner");
- res->Stats = std::make_shared<TOptimizerStatistics>( ComputeJoinStats(*left->Stats, *right->Stats, joinImpl));
+ res->Stats = std::make_shared<TOptimizerStatistics>( ComputeJoinStats(*left->Stats, *right->Stats, joinConditions, joinImpl));
return res;
}
@@ -1072,7 +1047,7 @@ void ComputeStatistics(const std::shared_ptr<TJoinOptimizerNode>& join) {
if (join->RightArg->Kind == EOptimizerNodeKind::JoinNodeType) {
ComputeStatistics(static_pointer_cast<TJoinOptimizerNode>(join->RightArg));
}
- join->Stats = std::make_shared<TOptimizerStatistics>(ComputeJoinStats(*join->LeftArg->Stats, *join->RightArg->Stats, EJoinImplType::DictJoin));
+ join->Stats = std::make_shared<TOptimizerStatistics>(ComputeJoinStats(*join->LeftArg->Stats, *join->RightArg->Stats, join->JoinConditions, EJoinImplType::DictJoin));
}
/**
@@ -1082,7 +1057,7 @@ void ComputeStatistics(const std::shared_ptr<TJoinOptimizerNode>& join) {
*/
std::shared_ptr<TJoinOptimizerNode> OptimizeSubtree(const std::shared_ptr<TJoinOptimizerNode>& joinTree, ui32 maxDPccpDPTableSize) {
if (!joinTree->Reorderable()) {
- joinTree->Stats = std::make_shared<TOptimizerStatistics>(ComputeJoinStats(*joinTree->LeftArg->Stats, *joinTree->RightArg->Stats, EJoinImplType::DictJoin));
+ joinTree->Stats = std::make_shared<TOptimizerStatistics>(ComputeJoinStats(*joinTree->LeftArg->Stats, *joinTree->RightArg->Stats, joinTree->JoinConditions, EJoinImplType::DictJoin));
return joinTree;
}
@@ -1208,7 +1183,7 @@ TExprBase DqOptimizeEquiJoinWithCosts(const TExprBase& node, TExprContext& ctx,
if (join->RightArg->Kind == EOptimizerNodeKind::JoinNodeType) {
join->RightArg = OptimizeSubtree(static_pointer_cast<TJoinOptimizerNode>(join->RightArg), maxDPccpDPTableSize);
}
- join->Stats = std::make_shared<TOptimizerStatistics>(ComputeJoinStats(*join->LeftArg->Stats, *join->RightArg->Stats, EJoinImplType::DictJoin));
+ join->Stats = std::make_shared<TOptimizerStatistics>(ComputeJoinStats(*join->LeftArg->Stats, *join->RightArg->Stats, join->JoinConditions, EJoinImplType::DictJoin));
}
// Optimize the root
diff --git a/ydb/library/yql/dq/opt/dq_opt_peephole.cpp b/ydb/library/yql/dq/opt/dq_opt_peephole.cpp
index 651882897e..b817211743 100644
--- a/ydb/library/yql/dq/opt/dq_opt_peephole.cpp
+++ b/ydb/library/yql/dq/opt/dq_opt_peephole.cpp
@@ -292,6 +292,8 @@ TExprBase DqPeepholeRewriteMapJoin(const TExprBase& node, TExprContext& ctx) {
const bool payloads = !rightPayloads.empty();
rightInput = MakeDictForJoin<true>(PrepareListForJoin(std::move(rightInput), keyTypes, rightKeyColumnNodes, rightPayloads, payloads, false, true, ctx), payloads, withRightSide, ctx);
leftInput = AddConvertedKeys(std::move(leftInput), ctx, leftKeyColumnNodes, keyTypesLeft, itemTypeLeft);
+ auto [_, rightKeyColumnNodesCopy] = JoinKeysToAtoms(ctx, mapJoin, leftTableLabel, rightTableLabel);
+
return Build<TCoExtractMembers>(ctx, pos)
.Input<TCoFlatMap>()
.Input(std::move(rightInput))
@@ -302,6 +304,7 @@ TExprBase DqPeepholeRewriteMapJoin(const TExprBase& node, TExprContext& ctx) {
.RightDict("dict")
.JoinKind(mapJoin.JoinType())
.LeftKeysColumns(ctx.NewList(pos, std::move(leftKeyColumnNodes)))
+ .RightKeysColumns(ctx.NewList(pos, std::move(rightKeyColumnNodesCopy)))
.LeftRenames(ctx.NewList(pos, std::move(leftRenames)))
.RightRenames(ctx.NewList(pos, std::move(rightRenames)))
.Build()
diff --git a/ydb/library/yql/dq/opt/dq_opt_predicate_selectivity.cpp b/ydb/library/yql/dq/opt/dq_opt_predicate_selectivity.cpp
index dc49f2bfab..8ed335e94d 100644
--- a/ydb/library/yql/dq/opt/dq_opt_predicate_selectivity.cpp
+++ b/ydb/library/yql/dq/opt/dq_opt_predicate_selectivity.cpp
@@ -8,19 +8,20 @@ using namespace NYql::NNodes;
namespace {
- THashSet<TString> exprCallables = {"SafeCast", "Int32", "Date", "Interval", "String"};
+ THashSet<TString> exprCallables = {"SafeCast"};
/**
* Check if a callable is an attribute of some table
* Currently just return a boolean and cover only basic cases
*/
- bool IsAttribute(const TExprBase& input) {
- if (input.Maybe<TCoMember>()) {
+ bool IsAttribute(const TExprBase& input, TString& attributeName) {
+ if (auto member = input.Maybe<TCoMember>()) {
+ attributeName = member.Cast().Raw()->Content();
return true;
} else if (auto cast = input.Maybe<TCoSafeCast>()) {
- return IsAttribute(cast.Cast().Value());
+ return IsAttribute(cast.Cast().Value(), attributeName);
} else if (auto ifPresent = input.Maybe<TCoIfPresent>()) {
- return IsAttribute(ifPresent.Cast().Optional());
+ return IsAttribute(ifPresent.Cast().Optional(), attributeName);
}
return false;
@@ -31,12 +32,17 @@ namespace {
* We use a whitelist of callables
*/
bool IsConstant(const TExprBase& input) {
- if (input.Maybe<TCoAtom>()) {
+ if (input.Maybe<TCoDataCtor>()){
return true;
} else if (input.Ref().IsCallable(exprCallables)) {
if (input.Ref().ChildrenSize() >= 1) {
- auto callableInput = TExprBase(input.Ref().Child(0));
- return IsConstant(callableInput);
+ for (size_t i = 0; i < input.Ref().ChildrenSize(); i++) {
+ auto callableInput = TExprBase(input.Ref().Child(i));
+ if (!IsConstant(callableInput)) {
+ return false;
+ }
+ }
+ return true;
} else {
return false;
}
@@ -92,23 +98,37 @@ double NYql::NDq::ComputePredicateSelectivity(const TExprBase& input, const std:
auto left = equality.Cast().Left();
auto right = equality.Cast().Right();
- if (IsAttribute(right) && IsConstant(left)) {
+ TString attributeName;
+
+ if (IsAttribute(right, attributeName) && IsConstant(left)) {
std::swap(left, right);
}
- if (IsAttribute(left)) {
+
+ if (IsAttribute(left, attributeName)) {
// In case both arguments refer to an attribute, return 0.2
- if (IsAttribute(right)) {
- result = 0.2;
+ TString rightAttributeName;
+ if (IsAttribute(right, rightAttributeName)) {
+ result = 0.3;
}
// In case the right side is a constant that can be extracted, compute the selectivity using statistics
// Currently, with the basic statistics we just return 1/nRows
else if (IsConstant(right)) {
- if (stats->Nrows > 1) {
- result = 1.0 / stats->Nrows;
+ if (stats->KeyColumns.size()==1 && attributeName==stats->KeyColumns[0]) {
+ if (stats->Nrows > 1) {
+ result = 1.0 / stats->Nrows;
+ }
+ else {
+ result = 1.0;
+ }
} else {
- result = 1.0;
+ if (stats->Nrows > 1) {
+ result = stats->Nrows / 10;
+ }
+ else {
+ result = 1.0;
+ }
}
}
}
@@ -120,14 +140,15 @@ double NYql::NDq::ComputePredicateSelectivity(const TExprBase& input, const std:
auto left = comparison.Cast().Left();
auto right = comparison.Cast().Right();
- if (IsAttribute(right) && IsConstant(left)) {
+ TString attributeName;
+ if (IsAttribute(right, attributeName) && IsConstant(left)) {
std::swap(left, right);
}
- if (IsAttribute(left)) {
+ if (IsAttribute(left, attributeName)) {
// In case both arguments refer to an attribute, return 0.2
- if (IsAttribute(right)) {
- result = 0.2;
+ if (IsAttribute(right, attributeName)) {
+ result = 0.3;
}
// In case the right side is a constant that can be extracted, compute the selectivity using statistics
// Currently, with the basic statistics we just return 0.5
diff --git a/ydb/library/yql/dq/opt/dq_opt_stat.cpp b/ydb/library/yql/dq/opt/dq_opt_stat.cpp
index 3e838da4b9..db45e4f3e3 100644
--- a/ydb/library/yql/dq/opt/dq_opt_stat.cpp
+++ b/ydb/library/yql/dq/opt/dq_opt_stat.cpp
@@ -9,6 +9,7 @@ namespace NYql::NDq {
using namespace NNodes;
+
/**
* Compute statistics for map join
* FIX: Currently we treat all join the same from the cost perspective, need to refine cost function
@@ -27,8 +28,20 @@ void InferStatisticsForMapJoin(const TExprNode::TPtr& input, TTypeAnnotationCont
return;
}
+ YQL_CLOG(TRACE, CoreDq) << "Right side of the map join: " << rightArg.Raw()->Dump();
+
+ TVector<TString> leftJoinKeys;
+ TVector<TString> rightJoinKeys;
+
+ for (size_t i=0; i<join.LeftKeysColumns().Size(); i++) {
+ leftJoinKeys.push_back(join.LeftKeysColumns().Item(i).StringValue());
+ }
+ for (size_t i=0; i<join.RightKeysColumns().Size(); i++) {
+ rightJoinKeys.push_back(join.RightKeysColumns().Item(i).StringValue());
+ }
+
typeCtx->SetStats(join.Raw(), std::make_shared<TOptimizerStatistics>(
- ComputeJoinStats(*leftStats, *rightStats, MapJoin)));
+ ComputeJoinStats(*leftStats, *rightStats, leftJoinKeys, rightJoinKeys, MapJoin)));
}
/**
@@ -49,8 +62,18 @@ void InferStatisticsForGraceJoin(const TExprNode::TPtr& input, TTypeAnnotationCo
return;
}
+ TVector<TString> leftJoinKeys;
+ TVector<TString> rightJoinKeys;
+
+ for (size_t i=0; i<join.LeftKeysColumns().Size(); i++) {
+ leftJoinKeys.push_back(join.LeftKeysColumns().Item(i).StringValue());
+ }
+ for (size_t i=0; i<join.RightKeysColumns().Size(); i++) {
+ rightJoinKeys.push_back(join.RightKeysColumns().Item(i).StringValue());
+ }
+
typeCtx->SetStats(join.Raw(), std::make_shared<TOptimizerStatistics>(
- ComputeJoinStats(*leftStats, *rightStats, GraceJoin)));
+ ComputeJoinStats(*leftStats, *rightStats, leftJoinKeys, rightJoinKeys, GraceJoin)));
}
/**
@@ -94,7 +117,7 @@ void InferStatisticsForFlatMap(const TExprNode::TPtr& input, TTypeAnnotationCont
double selectivity = ComputePredicateSelectivity(flatmap.Lambda().Body(), inputStats);
- auto outputStats = TOptimizerStatistics(inputStats->Nrows * selectivity, inputStats->Ncols, inputStats->Cost );
+ auto outputStats = TOptimizerStatistics(inputStats->Type, inputStats->Nrows * selectivity, inputStats->Ncols, inputStats->Cost );
typeCtx->SetStats(input.Get(), std::make_shared<TOptimizerStatistics>(outputStats) );
}
@@ -135,7 +158,7 @@ void InferStatisticsForFilter(const TExprNode::TPtr& input, TTypeAnnotationConte
double selectivity = ComputePredicateSelectivity(filterBody, inputStats);
- auto outputStats = TOptimizerStatistics(inputStats->Nrows * selectivity, inputStats->Ncols, inputStats->Cost);
+ auto outputStats = TOptimizerStatistics(inputStats->Type, inputStats->Nrows * selectivity, inputStats->Ncols, inputStats->Cost);
typeCtx->SetStats(input.Get(), std::make_shared<TOptimizerStatistics>(outputStats) );
}
diff --git a/ydb/library/yql/providers/common/mkql/yql_provider_mkql.cpp b/ydb/library/yql/providers/common/mkql/yql_provider_mkql.cpp
index 3669bcaf62..4bc9a93c77 100644
--- a/ydb/library/yql/providers/common/mkql/yql_provider_mkql.cpp
+++ b/ydb/library/yql/providers/common/mkql/yql_provider_mkql.cpp
@@ -1549,23 +1549,23 @@ TMkqlCommonCallableCompiler::TShared::TShared() {
node.Child(3)->ForEachChild([&](const TExprNode& child){ leftKeyColumns.emplace_back(*GetFieldPosition(*inputStructType, child.Content())); });
bool s = false;
- node.Child(4)->ForEachChild([&](const TExprNode& child){ leftRenames.emplace_back(*GetFieldPosition((s = !s) ? *inputStructType : *outputStructType, child.Content())); });
+ node.Child(5)->ForEachChild([&](const TExprNode& child){ leftRenames.emplace_back(*GetFieldPosition((s = !s) ? *inputStructType : *outputStructType, child.Content())); });
switch (rightItemType->GetKind()) {
case ETypeAnnotationKind::Struct: {
const auto rightStructType = rightItemType->Cast<TStructExprType>();
- node.Child(5)->ForEachChild([&](const TExprNode& child){
+ node.Child(6)->ForEachChild([&](const TExprNode& child){
rightRenames.emplace_back(*GetFieldPosition((s = !s) ? *rightStructType : *outputStructType, child.Content())); });
}
break;
case ETypeAnnotationKind::Tuple: {
const auto rightTupleType = rightItemType->Cast<TTupleExprType>();
- node.Child(5)->ForEachChild([&](const TExprNode& child){
+ node.Child(6)->ForEachChild([&](const TExprNode& child){
rightRenames.emplace_back((s = !s) ? *GetFieldPosition(*rightTupleType, child.Content()) : *GetFieldPosition(*outputStructType, child.Content())); });
}
break;
default:
- MKQL_ENSURE(!node.Child(5)->ChildrenSize(), "Expected empty right output columns.");
+ MKQL_ENSURE(!node.Child(6)->ChildrenSize(), "Expected empty right output columns.");
}
break;
}
@@ -1575,23 +1575,23 @@ TMkqlCommonCallableCompiler::TShared::TShared() {
node.Child(3)->ForEachChild([&](const TExprNode& child){ leftKeyColumns.emplace_back(*GetFieldPosition(*inputTupleType, child.Content())); });
bool s = false;
- node.Child(4)->ForEachChild([&](const TExprNode& child){ leftRenames.emplace_back(*GetFieldPosition((s = !s) ? *inputTupleType : *outputTupleType, child.Content())); });
+ node.Child(5)->ForEachChild([&](const TExprNode& child){ leftRenames.emplace_back(*GetFieldPosition((s = !s) ? *inputTupleType : *outputTupleType, child.Content())); });
switch (rightItemType->GetKind()) {
case ETypeAnnotationKind::Tuple: {
const auto rightTupleType = rightItemType->Cast<TTupleExprType>();
- node.Child(5)->ForEachChild([&](const TExprNode& child){
+ node.Child(6)->ForEachChild([&](const TExprNode& child){
rightRenames.emplace_back(*GetFieldPosition((s = !s) ? *rightTupleType : *outputTupleType, child.Content())); });
}
break;
case ETypeAnnotationKind::Struct: {
const auto rightStructType = rightItemType->Cast<TStructExprType>();
- node.Child(5)->ForEachChild([&](const TExprNode& child){
+ node.Child(6)->ForEachChild([&](const TExprNode& child){
rightRenames.emplace_back((s = !s) ? *GetFieldPosition(*rightStructType, child.Content()) : *GetFieldPosition(*outputTupleType, child.Content())); });
}
break;
default:
- MKQL_ENSURE(!node.Child(5)->ChildrenSize(), "Expected empty right output columns.");
+ MKQL_ENSURE(!node.Child(6)->ChildrenSize(), "Expected empty right output columns.");
}
break;
}
@@ -1601,23 +1601,23 @@ TMkqlCommonCallableCompiler::TShared::TShared() {
node.Child(3)->ForEachChild([&](const TExprNode& child){ leftKeyColumns.emplace_back(*GetFieldPosition(*inputMultiType, child.Content())); });
bool s = false;
- node.Child(4)->ForEachChild([&](const TExprNode& child){ leftRenames.emplace_back(*GetFieldPosition((s = !s) ? *inputMultiType : *outputMultiType, child.Content())); });
+ node.Child(5)->ForEachChild([&](const TExprNode& child){ leftRenames.emplace_back(*GetFieldPosition((s = !s) ? *inputMultiType : *outputMultiType, child.Content())); });
switch (rightItemType->GetKind()) {
case ETypeAnnotationKind::Tuple: {
const auto rightTupleType = rightItemType->Cast<TTupleExprType>();
- node.Child(5)->ForEachChild([&](const TExprNode& child){
+ node.Child(6)->ForEachChild([&](const TExprNode& child){
rightRenames.emplace_back((s = !s) ? *GetFieldPosition(*rightTupleType, child.Content()) : *GetFieldPosition(*outputMultiType, child.Content())); });
}
break;
case ETypeAnnotationKind::Struct: {
const auto rightStructType = rightItemType->Cast<TStructExprType>();
- node.Child(5)->ForEachChild([&](const TExprNode& child){
+ node.Child(6)->ForEachChild([&](const TExprNode& child){
rightRenames.emplace_back((s = !s) ? *GetFieldPosition(*rightStructType, child.Content()) : *GetFieldPosition(*outputMultiType, child.Content())); });
}
break;
default:
- MKQL_ENSURE(!node.Child(5)->ChildrenSize(), "Expected empty right output columns.");
+ MKQL_ENSURE(!node.Child(6)->ChildrenSize(), "Expected empty right output columns.");
}
break;
}
diff --git a/ydb/library/yql/providers/yt/provider/yql_yt_join_impl.cpp b/ydb/library/yql/providers/yt/provider/yql_yt_join_impl.cpp
index 23f17ccbf0..977a81cb16 100644
--- a/ydb/library/yql/providers/yt/provider/yql_yt_join_impl.cpp
+++ b/ydb/library/yql/providers/yt/provider/yql_yt_join_impl.cpp
@@ -1703,10 +1703,11 @@ bool RewriteYtMapJoin(TYtEquiJoin equiJoin, const TJoinLabels& labels, bool isLo
const bool needPayload = joinType->IsAtom({"Inner", "Left"});
// don't produce nulls
+ TExprNode::TListType remappedMembers;
+ TExprNode::TListType remappedMembersToSkipNull;
+
TExprNode::TPtr smallKeySelector;
if (!isCross) {
- TExprNode::TListType remappedMembers;
- TExprNode::TListType remappedMembersToSkipNull;
tableContent = RemapNonConvertibleItems(tableContent, smallLabel, *rightKeyColumns, outputKeyType, remappedMembers, remappedMembersToSkipNull, ctx);
if (!remappedMembersToSkipNull.empty()) {
tableContent = ctx.NewCallable(pos, "SkipNullMembers", { tableContent, ctx.NewList(pos, std::move(remappedMembersToSkipNull)) });
@@ -1883,8 +1884,9 @@ bool RewriteYtMapJoin(TYtEquiJoin equiJoin, const TJoinLabels& labels, bool isLo
.Arg(1, "dict")
.Add(2, joinType)
.Add(3, ctx.NewList(pos, std::move(leftKeyColumnNodes)))
- .Add(4, ctx.NewList(pos, std::move(leftRenameNodes)))
- .Add(5, ctx.NewList(pos, std::move(rightRenameNodes)))
+ .Add(4, ctx.NewList(pos, std::move(remappedMembers)))
+ .Add(5, ctx.NewList(pos, std::move(leftRenameNodes)))
+ .Add(6, ctx.NewList(pos, std::move(rightRenameNodes)))
.Seal()
.Seal()
.Seal()
@@ -1896,8 +1898,9 @@ bool RewriteYtMapJoin(TYtEquiJoin equiJoin, const TJoinLabels& labels, bool isLo
.Add(1, dict)
.Add(2, joinType)
.Add(3, ctx.NewList(pos, std::move(leftKeyColumnNodes)))
- .Add(4, ctx.NewList(pos, std::move(leftRenameNodes)))
- .Add(5, ctx.NewList(pos, std::move(rightRenameNodes)))
+ .Add(4, ctx.NewList(pos, std::move(remappedMembers)))
+ .Add(5, ctx.NewList(pos, std::move(leftRenameNodes)))
+ .Add(6, ctx.NewList(pos, std::move(rightRenameNodes)))
.Seal()
.Build();
}
diff --git a/ydb/library/yql/tests/s-expressions/yt_native_file/part0/canondata/result.json b/ydb/library/yql/tests/s-expressions/yt_native_file/part0/canondata/result.json
index 7c119b9262..edd8d834d9 100644
--- a/ydb/library/yql/tests/s-expressions/yt_native_file/part0/canondata/result.json
+++ b/ydb/library/yql/tests/s-expressions/yt_native_file/part0/canondata/result.json
@@ -1124,9 +1124,9 @@
],
"test.test[EquiJoinAny-MapAllAny-Debug]": [
{
- "checksum": "4154439121a537950b396af0061664bd",
- "size": 16445,
- "uri": "https://{canondata_backend}/1775059/3fefb549fd47c5ea8445d0ae57e6925d43865d9f/resource.tar.gz#test.test_EquiJoinAny-MapAllAny-Debug_/opt.yql"
+ "checksum": "3e336855b745e76c1fff5db0f2384b9d",
+ "size": 16461,
+ "uri": "https://{canondata_backend}/1942525/2625516bd6b4d87e6907d69736714a878bb99eda/resource.tar.gz#test.test_EquiJoinAny-MapAllAny-Debug_/opt.yql"
},
{
"checksum": "cc642a4c9bb547af7576be99222b9a6c",
@@ -1496,9 +1496,9 @@
],
"test.test[EquiJoinMap-JoinMapOpt1Key2-Debug]": [
{
- "checksum": "59c430609357b87dc36659a9aa583fde",
- "size": 12103,
- "uri": "https://{canondata_backend}/1773845/ba06ae96da6e76a7d25bd8ae8d601ae7ff05b01a/resource.tar.gz#test.test_EquiJoinMap-JoinMapOpt1Key2-Debug_/opt.yql"
+ "checksum": "15d06561217eef9ed61e75fea8b54f75",
+ "size": 12131,
+ "uri": "https://{canondata_backend}/1942525/2625516bd6b4d87e6907d69736714a878bb99eda/resource.tar.gz#test.test_EquiJoinMap-JoinMapOpt1Key2-Debug_/opt.yql"
},
{
"checksum": "23adb645dca07b689d9cb40adc75b885",
diff --git a/ydb/library/yql/tests/s-expressions/yt_native_file/part1/canondata/result.json b/ydb/library/yql/tests/s-expressions/yt_native_file/part1/canondata/result.json
index 5dae1ebaa7..5433fde963 100644
--- a/ydb/library/yql/tests/s-expressions/yt_native_file/part1/canondata/result.json
+++ b/ydb/library/yql/tests/s-expressions/yt_native_file/part1/canondata/result.json
@@ -1444,9 +1444,9 @@
],
"test.test[EquiJoinMap-JoinMapOpt2Key2-Debug]": [
{
- "checksum": "5a776cbcff0524e58b7324c55a82bc29",
- "size": 11413,
- "uri": "https://{canondata_backend}/1597364/e4cad1f4b51fc37bc3141a2ef34a3c7b91db5eb3/resource.tar.gz#test.test_EquiJoinMap-JoinMapOpt2Key2-Debug_/opt.yql"
+ "checksum": "8f48c716970314b675cfdc4ef96f2ab7",
+ "size": 11441,
+ "uri": "https://{canondata_backend}/1925821/d77dfb0724f257da04acc048da686ded70b7674d/resource.tar.gz#test.test_EquiJoinMap-JoinMapOpt2Key2-Debug_/opt.yql"
},
{
"checksum": "f8276d6bca57d02de485b933b276bca1",
@@ -3060,9 +3060,9 @@
],
"test.test[Join-MapJoinCore_Flow-Debug]": [
{
- "checksum": "4d92e75360489d03205f586f96efb0ab",
- "size": 1822,
- "uri": "https://{canondata_backend}/1784117/2a668f6ac19ea766e68b95d7d011daa663f18019/resource.tar.gz#test.test_Join-MapJoinCore_Flow-Debug_/opt.yql"
+ "checksum": "981099c5a1398d3e3fe2380069257815",
+ "size": 1865,
+ "uri": "https://{canondata_backend}/1925821/d77dfb0724f257da04acc048da686ded70b7674d/resource.tar.gz#test.test_Join-MapJoinCore_Flow-Debug_/opt.yql"
}
],
"test.test[Join-MapJoinCore_Flow-Plan]": [
diff --git a/ydb/library/yql/tests/s-expressions/yt_native_file/part2/canondata/result.json b/ydb/library/yql/tests/s-expressions/yt_native_file/part2/canondata/result.json
index 42453fc18c..5ed52d009d 100644
--- a/ydb/library/yql/tests/s-expressions/yt_native_file/part2/canondata/result.json
+++ b/ydb/library/yql/tests/s-expressions/yt_native_file/part2/canondata/result.json
@@ -969,9 +969,9 @@
],
"test.test[EquiJoin-EquiJoinConvertMapI8U8-Debug]": [
{
- "checksum": "18ad2373a2ddd9b8c7e555b68dd34abe",
- "size": 52767,
- "uri": "https://{canondata_backend}/1784826/c542c09b6560f5325cde5c3af8d515884014a60d/resource.tar.gz#test.test_EquiJoin-EquiJoinConvertMapI8U8-Debug_/opt.yql"
+ "checksum": "b1d084d7d7753d7346abb75224fce171",
+ "size": 52886,
+ "uri": "https://{canondata_backend}/1784117/329ac28d12d307d2cf29fc397e08cb08d9401dee/resource.tar.gz#test.test_EquiJoin-EquiJoinConvertMapI8U8-Debug_/opt.yql"
},
{
"checksum": "de438775b4de1b6e9e8e2a94418df106",
diff --git a/ydb/library/yql/tests/s-expressions/yt_native_file/part3/canondata/result.json b/ydb/library/yql/tests/s-expressions/yt_native_file/part3/canondata/result.json
index 286642b0cf..bff3cacb21 100644
--- a/ydb/library/yql/tests/s-expressions/yt_native_file/part3/canondata/result.json
+++ b/ydb/library/yql/tests/s-expressions/yt_native_file/part3/canondata/result.json
@@ -2579,9 +2579,9 @@
],
"test.test[EquiJoinMap-JoinMap-Debug]": [
{
- "checksum": "d898d53a6c8bc753bb387aa5ee267477",
- "size": 11342,
- "uri": "https://{canondata_backend}/1871002/f4a0c13366cf282b8f245d4ad386f0ea871fb4d4/resource.tar.gz#test.test_EquiJoinMap-JoinMap-Debug_/opt.yql"
+ "checksum": "d4c24d241eb73bd0fc03e2d82087b468",
+ "size": 11370,
+ "uri": "https://{canondata_backend}/1942525/56ab242c36f63ffdebf5ab3621cf76b5a6e1582b/resource.tar.gz#test.test_EquiJoinMap-JoinMap-Debug_/opt.yql"
},
{
"checksum": "2d03e58540254763262f2e979bc02598",
@@ -2700,9 +2700,9 @@
],
"test.test[EquiJoinMap-JoinMapOpt1-Debug]": [
{
- "checksum": "c71583e21bb202a6724f8c20649d867b",
- "size": 11761,
- "uri": "https://{canondata_backend}/1871002/f4a0c13366cf282b8f245d4ad386f0ea871fb4d4/resource.tar.gz#test.test_EquiJoinMap-JoinMapOpt1-Debug_/opt.yql"
+ "checksum": "2e5b0d0714819d2dd282cd2cbc1b186f",
+ "size": 11789,
+ "uri": "https://{canondata_backend}/1942525/56ab242c36f63ffdebf5ab3621cf76b5a6e1582b/resource.tar.gz#test.test_EquiJoinMap-JoinMapOpt1-Debug_/opt.yql"
},
{
"checksum": "2d03e58540254763262f2e979bc02598",
diff --git a/ydb/library/yql/tests/s-expressions/yt_native_file/part4/canondata/result.json b/ydb/library/yql/tests/s-expressions/yt_native_file/part4/canondata/result.json
index b9f5fa127c..e41d2e536f 100644
--- a/ydb/library/yql/tests/s-expressions/yt_native_file/part4/canondata/result.json
+++ b/ydb/library/yql/tests/s-expressions/yt_native_file/part4/canondata/result.json
@@ -1035,9 +1035,9 @@
],
"test.test[EquiJoin-EquiJoinConvertMapI8U32-Debug]": [
{
- "checksum": "01ba99bfae352c4769a26601e6e8a68c",
- "size": 18304,
- "uri": "https://{canondata_backend}/937458/a77ccfcf109d2b41551e8163a6093a624611962e/resource.tar.gz#test.test_EquiJoin-EquiJoinConvertMapI8U32-Debug_/opt.yql"
+ "checksum": "4fa66375333a1f35aac4b52533a69e8d",
+ "size": 18332,
+ "uri": "https://{canondata_backend}/212715/995f69379fcdd3b61fbbb822de048b2ffe81c81f/resource.tar.gz#test.test_EquiJoin-EquiJoinConvertMapI8U32-Debug_/opt.yql"
},
{
"checksum": "b3ad6c26babf882b76373f6084dbf37c",
@@ -2055,9 +2055,9 @@
],
"test.test[EquiJoinMap-JoinMapOpt12-Debug]": [
{
- "checksum": "41fcb70f268d265ca9af6211ac76f6e2",
- "size": 11287,
- "uri": "https://{canondata_backend}/995452/9f84757198887543cf5c001886084f60d55f61e3/resource.tar.gz#test.test_EquiJoinMap-JoinMapOpt12-Debug_/opt.yql"
+ "checksum": "f6a7e48b4f5de06461c055d5a4e035a0",
+ "size": 11315,
+ "uri": "https://{canondata_backend}/212715/995f69379fcdd3b61fbbb822de048b2ffe81c81f/resource.tar.gz#test.test_EquiJoinMap-JoinMapOpt12-Debug_/opt.yql"
},
{
"checksum": "b74c80ac0ad5d13bd4367a827b9cb52e",
diff --git a/ydb/library/yql/tests/s-expressions/yt_native_file/part5/canondata/result.json b/ydb/library/yql/tests/s-expressions/yt_native_file/part5/canondata/result.json
index dfcd7eb334..89200d42bb 100644
--- a/ydb/library/yql/tests/s-expressions/yt_native_file/part5/canondata/result.json
+++ b/ydb/library/yql/tests/s-expressions/yt_native_file/part5/canondata/result.json
@@ -787,9 +787,9 @@
],
"test.test[EquiJoin-Bug2566-Debug]": [
{
- "checksum": "3074d29bdf312b10a82e26f2935e4c94",
- "size": 3692,
- "uri": "https://{canondata_backend}/1936997/df914dc4d1504bb370ae32df7d583a29dbce7f12/resource.tar.gz#test.test_EquiJoin-Bug2566-Debug_/opt.yql"
+ "checksum": "e56c1a6435d395e0dbde68ff799488f1",
+ "size": 3712,
+ "uri": "https://{canondata_backend}/1880306/2b4f005974b24222919b5e116add03374f16e485/resource.tar.gz#test.test_EquiJoin-Bug2566-Debug_/opt.yql"
},
{
"checksum": "633c5e7d2f9bcdd1b37e8bd6a4c9dfa0",
@@ -2247,9 +2247,9 @@
],
"test.test[EquiJoinMap-JoinMapOpt12Key2-Debug]": [
{
- "checksum": "eff2639a99b310fb8b429c3a44ba6d3c",
- "size": 11395,
- "uri": "https://{canondata_backend}/1871002/b3a03d6e11eb1e5350e9cb4a421ad1b99cac351a/resource.tar.gz#test.test_EquiJoinMap-JoinMapOpt12Key2-Debug_/opt.yql"
+ "checksum": "f798ac0ea66d51971b4aee241d677d34",
+ "size": 11423,
+ "uri": "https://{canondata_backend}/1880306/2b4f005974b24222919b5e116add03374f16e485/resource.tar.gz#test.test_EquiJoinMap-JoinMapOpt12Key2-Debug_/opt.yql"
},
{
"checksum": "f8276d6bca57d02de485b933b276bca1",
@@ -2368,9 +2368,9 @@
],
"test.test[EquiJoinMap-bug3054-Debug]": [
{
- "checksum": "6e8a15e01e649570b2833873d2cccc4e",
- "size": 3047,
- "uri": "https://{canondata_backend}/1936997/df914dc4d1504bb370ae32df7d583a29dbce7f12/resource.tar.gz#test.test_EquiJoinMap-bug3054-Debug_/opt.yql"
+ "checksum": "db5d94e3ef2214eb89460a44fe3046ed",
+ "size": 3069,
+ "uri": "https://{canondata_backend}/1880306/2b4f005974b24222919b5e116add03374f16e485/resource.tar.gz#test.test_EquiJoinMap-bug3054-Debug_/opt.yql"
},
{
"checksum": "c8561fd25062f8bc1f51ae454d9d4d40",
@@ -3491,9 +3491,9 @@
],
"test.test[Join-MapJoinCore-Debug]": [
{
- "checksum": "7cace149cabffe64d8154f99db16126b",
- "size": 2087,
- "uri": "https://{canondata_backend}/1942415/da4afe2ddfdd76777c86f89941fb73da3d79d32e/resource.tar.gz#test.test_Join-MapJoinCore-Debug_/opt.yql"
+ "checksum": "be163fc2b4acd9a3f9e755b2ae83b78f",
+ "size": 2130,
+ "uri": "https://{canondata_backend}/1880306/2b4f005974b24222919b5e116add03374f16e485/resource.tar.gz#test.test_Join-MapJoinCore-Debug_/opt.yql"
}
],
"test.test[Join-MapJoinCore-Plan]": [
diff --git a/ydb/library/yql/tests/s-expressions/yt_native_file/part6/canondata/result.json b/ydb/library/yql/tests/s-expressions/yt_native_file/part6/canondata/result.json
index 26323d1885..2586f929f2 100644
--- a/ydb/library/yql/tests/s-expressions/yt_native_file/part6/canondata/result.json
+++ b/ydb/library/yql/tests/s-expressions/yt_native_file/part6/canondata/result.json
@@ -1829,9 +1829,9 @@
],
"test.test[EquiJoin-HintLeftUniqueRightMap-Debug]": [
{
- "checksum": "2a57ac196e0b6aa8af383a49a4ab812b",
- "size": 3662,
- "uri": "https://{canondata_backend}/995452/7d3cbc2e7a01dab7003c15afa53ce8fb13d40d8e/resource.tar.gz#test.test_EquiJoin-HintLeftUniqueRightMap-Debug_/opt.yql"
+ "checksum": "f656cc1c70d0a3c5715dcede0bf613dc",
+ "size": 3684,
+ "uri": "https://{canondata_backend}/1925842/6cda52b754dfbf22f4689dab1717eebd26ae88d6/resource.tar.gz#test.test_EquiJoin-HintLeftUniqueRightMap-Debug_/opt.yql"
},
{
"checksum": "a95bc48c26607bf8d91d4b24d31e8329",
@@ -1880,9 +1880,9 @@
],
"test.test[EquiJoin-HintRightUniqueInnerMap-Debug]": [
{
- "checksum": "9409de50296a88fc0fbdee4dfc3fae6c",
- "size": 3661,
- "uri": "https://{canondata_backend}/995452/7d3cbc2e7a01dab7003c15afa53ce8fb13d40d8e/resource.tar.gz#test.test_EquiJoin-HintRightUniqueInnerMap-Debug_/opt.yql"
+ "checksum": "d0bfec608a5d22ad63bb3dc1a122410d",
+ "size": 3683,
+ "uri": "https://{canondata_backend}/1925842/6cda52b754dfbf22f4689dab1717eebd26ae88d6/resource.tar.gz#test.test_EquiJoin-HintRightUniqueInnerMap-Debug_/opt.yql"
},
{
"checksum": "a95bc48c26607bf8d91d4b24d31e8329",
@@ -1931,9 +1931,9 @@
],
"test.test[EquiJoin-HintRightUniqueLeftMap-Debug]": [
{
- "checksum": "a4bba576b0ed86b4fbcc6589d2c33936",
- "size": 3660,
- "uri": "https://{canondata_backend}/995452/7d3cbc2e7a01dab7003c15afa53ce8fb13d40d8e/resource.tar.gz#test.test_EquiJoin-HintRightUniqueLeftMap-Debug_/opt.yql"
+ "checksum": "3c0b890c0cf1b2ff872dfe3a2849b463",
+ "size": 3682,
+ "uri": "https://{canondata_backend}/1925842/6cda52b754dfbf22f4689dab1717eebd26ae88d6/resource.tar.gz#test.test_EquiJoin-HintRightUniqueLeftMap-Debug_/opt.yql"
},
{
"checksum": "a95bc48c26607bf8d91d4b24d31e8329",
@@ -2470,9 +2470,9 @@
],
"test.test[EquiJoinMap-JoinMapKey2-Debug]": [
{
- "checksum": "f3bbbcdd10a8bc69dd60c7c2c76d9da3",
- "size": 11552,
- "uri": "https://{canondata_backend}/1773845/7339f5732a02aa11f5b7da59a88b7cc0a817ad92/resource.tar.gz#test.test_EquiJoinMap-JoinMapKey2-Debug_/opt.yql"
+ "checksum": "05935b86d737d8915bb32047d27db597",
+ "size": 11580,
+ "uri": "https://{canondata_backend}/1925842/6cda52b754dfbf22f4689dab1717eebd26ae88d6/resource.tar.gz#test.test_EquiJoinMap-JoinMapKey2-Debug_/opt.yql"
},
{
"checksum": "23adb645dca07b689d9cb40adc75b885",
diff --git a/ydb/library/yql/tests/s-expressions/yt_native_file/part7/canondata/result.json b/ydb/library/yql/tests/s-expressions/yt_native_file/part7/canondata/result.json
index fb6e9b3210..5a8b0e3950 100644
--- a/ydb/library/yql/tests/s-expressions/yt_native_file/part7/canondata/result.json
+++ b/ydb/library/yql/tests/s-expressions/yt_native_file/part7/canondata/result.json
@@ -2841,9 +2841,9 @@
],
"test.test[Join-MapJoinCoreOnStrings-Debug]": [
{
- "checksum": "a31b774ac7de7e960f507cc42dda5f1e",
- "size": 2215,
- "uri": "https://{canondata_backend}/1889210/66cfb0637a884123d7213c55c2d2571368fb2504/resource.tar.gz#test.test_Join-MapJoinCoreOnStrings-Debug_/opt.yql"
+ "checksum": "a56222ed992e716d7da0b6c70d8b88e7",
+ "size": 2258,
+ "uri": "https://{canondata_backend}/937458/0247422c71a54b963096179ffcfee626d399f24c/resource.tar.gz#test.test_Join-MapJoinCoreOnStrings-Debug_/opt.yql"
}
],
"test.test[Join-MapJoinCoreOnStrings-Plan]": [
@@ -2862,9 +2862,9 @@
],
"test.test[Join-MapJoinCoreOnStrings_Flow-Debug]": [
{
- "checksum": "fa32bd48d1987ef50acc76138b90db74",
- "size": 1952,
- "uri": "https://{canondata_backend}/1937429/f0a91bf5cdb3d134af8fff5d1ad973e3883b5ab1/resource.tar.gz#test.test_Join-MapJoinCoreOnStrings_Flow-Debug_/opt.yql"
+ "checksum": "4611394783bbcb085fcca9a98ef7db66",
+ "size": 1995,
+ "uri": "https://{canondata_backend}/937458/0247422c71a54b963096179ffcfee626d399f24c/resource.tar.gz#test.test_Join-MapJoinCoreOnStrings_Flow-Debug_/opt.yql"
}
],
"test.test[Join-MapJoinCoreOnStrings_Flow-Plan]": [
@@ -2883,9 +2883,9 @@
],
"test.test[Join-MapJoinCore_FlowOfTuples-Debug]": [
{
- "checksum": "15ffe16a5630f7519166b79325b04047",
- "size": 1432,
- "uri": "https://{canondata_backend}/1916746/c3b7afaaaf932fcb7a3232164d1dfde8aefdf84b/resource.tar.gz#test.test_Join-MapJoinCore_FlowOfTuples-Debug_/opt.yql"
+ "checksum": "fa0cf8d3511d8f697cff262a5fb78426",
+ "size": 1456,
+ "uri": "https://{canondata_backend}/937458/0247422c71a54b963096179ffcfee626d399f24c/resource.tar.gz#test.test_Join-MapJoinCore_FlowOfTuples-Debug_/opt.yql"
}
],
"test.test[Join-MapJoinCore_FlowOfTuples-Plan]": [
diff --git a/ydb/library/yql/tests/s-expressions/yt_native_file/part8/canondata/result.json b/ydb/library/yql/tests/s-expressions/yt_native_file/part8/canondata/result.json
index 375d6bf250..6a5dc407d4 100644
--- a/ydb/library/yql/tests/s-expressions/yt_native_file/part8/canondata/result.json
+++ b/ydb/library/yql/tests/s-expressions/yt_native_file/part8/canondata/result.json
@@ -866,9 +866,9 @@
],
"test.test[EquiJoin-HintRightUniqueLeftSemiShardedMap-Debug]": [
{
- "checksum": "cd9b8cd816bee03e230408ee5b692ba9",
- "size": 4608,
- "uri": "https://{canondata_backend}/1773845/236c9627e15574ab1245e8d0c9aedda0f655d080/resource.tar.gz#test.test_EquiJoin-HintRightUniqueLeftSemiShardedMap-Debug_/opt.yql"
+ "checksum": "de9ec11eb66d887beef2c2e888357394",
+ "size": 4616,
+ "uri": "https://{canondata_backend}/1784117/baace651ee706ace7f8ee7f7567cf33040313ab5/resource.tar.gz#test.test_EquiJoin-HintRightUniqueLeftSemiShardedMap-Debug_/opt.yql"
},
{
"checksum": "ccc02c6a5a4970bb10f98a02fb46614f",
@@ -1419,9 +1419,9 @@
],
"test.test[EquiJoinAny-MapAnyAll-Debug]": [
{
- "checksum": "0e1100ed9788abd4e49d1bf362b2799c",
- "size": 16489,
- "uri": "https://{canondata_backend}/1817427/1c44a48642239f59625b961129df9702e514a0e5/resource.tar.gz#test.test_EquiJoinAny-MapAnyAll-Debug_/opt.yql"
+ "checksum": "11bc5d7d2b43ee3e71cd61dcb91b774f",
+ "size": 16505,
+ "uri": "https://{canondata_backend}/1784117/baace651ee706ace7f8ee7f7567cf33040313ab5/resource.tar.gz#test.test_EquiJoinAny-MapAnyAll-Debug_/opt.yql"
},
{
"checksum": "1f417d417653fa79b794e6e159152b7e",
@@ -1911,9 +1911,9 @@
],
"test.test[EquiJoinMap-JoinMapOpt2-Debug]": [
{
- "checksum": "1f3ff39731499d4a09a6211d694a169a",
- "size": 11220,
- "uri": "https://{canondata_backend}/1784826/fedf2a670f2380935915bdc0027b0813c1a1053f/resource.tar.gz#test.test_EquiJoinMap-JoinMapOpt2-Debug_/opt.yql"
+ "checksum": "ef832238b3376c061a6d9bee384e8c10",
+ "size": 11248,
+ "uri": "https://{canondata_backend}/1784117/baace651ee706ace7f8ee7f7567cf33040313ab5/resource.tar.gz#test.test_EquiJoinMap-JoinMapOpt2-Debug_/opt.yql"
},
{
"checksum": "b74c80ac0ad5d13bd4367a827b9cb52e",
@@ -3021,9 +3021,9 @@
],
"test.test[Join-EmptyLeftJoin-Debug]": [
{
- "checksum": "b4166e62d07871d39c5a64408daa6706",
- "size": 508,
- "uri": "https://{canondata_backend}/1942525/41ab42969fbc475ccdde85fbfa88eb17cfb43d86/resource.tar.gz#test.test_Join-EmptyLeftJoin-Debug_/opt.yql"
+ "checksum": "a7f3c23b34156c770b6681831d1891d3",
+ "size": 517,
+ "uri": "https://{canondata_backend}/1784117/baace651ee706ace7f8ee7f7567cf33040313ab5/resource.tar.gz#test.test_Join-EmptyLeftJoin-Debug_/opt.yql"
}
],
"test.test[Join-EmptyLeftJoin-Plan]": [
diff --git a/ydb/library/yql/tests/sql/dq_file/part5/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part5/canondata/result.json
index 04b3f51528..b099532a2f 100644
--- a/ydb/library/yql/tests/sql/dq_file/part5/canondata/result.json
+++ b/ydb/library/yql/tests/sql/dq_file/part5/canondata/result.json
@@ -2306,14 +2306,14 @@
{
"checksum": "08feb3c2ad2bee9d5746f3c1d62f5214",
"size": 7091,
- "uri": "https://{canondata_backend}/1773845/f65b350fb47bed5d03233e7ed3b1ef256d9abd32/resource.tar.gz#test.test_join-grace_join1-map-Analyze_/plan.txt"
+ "uri": "https://{canondata_backend}/1942671/9453685c6af2be2d06777e78a99d9db8738ffcc0/resource.tar.gz#test.test_join-grace_join1-map-Analyze_/plan.txt"
}
],
"test.test[join-grace_join1-map-Debug]": [
{
- "checksum": "9e684c9b5d95ed12bd278c3223de6227",
- "size": 3115,
- "uri": "https://{canondata_backend}/1689644/0237dc143f231e4673d5cf207336f86d8d4035f4/resource.tar.gz#test.test_join-grace_join1-map-Debug_/opt.yql_patched"
+ "checksum": "364edabe894457a73f9365d8004e0ca9",
+ "size": 3137,
+ "uri": "https://{canondata_backend}/1942671/9453685c6af2be2d06777e78a99d9db8738ffcc0/resource.tar.gz#test.test_join-grace_join1-map-Debug_/opt.yql_patched"
}
],
"test.test[join-grace_join1-map-Plan]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part0/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part0/canondata/result.json
index 0ba5172cdb..43ff070ecf 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part0/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part0/canondata/result.json
@@ -2406,9 +2406,9 @@
],
"test.test[join-mapjoin_unused_keys--Debug]": [
{
- "checksum": "ff2fb4b0f3f0d092f6db866e608ac722",
- "size": 4354,
- "uri": "https://{canondata_backend}/1936842/df61754fc6ce55a2acf2161cf73d3d703a8f5a11/resource.tar.gz#test.test_join-mapjoin_unused_keys--Debug_/opt.yql"
+ "checksum": "1dce180d91035f7989aacb02d5aa4297",
+ "size": 4383,
+ "uri": "https://{canondata_backend}/1880306/c4e7680c1c690089c4e7c65afc416f8e47154ffa/resource.tar.gz#test.test_join-mapjoin_unused_keys--Debug_/opt.yql"
}
],
"test.test[join-mapjoin_unused_keys--Plan]": [
@@ -2619,9 +2619,9 @@
],
"test.test[join-yql-16011--Debug]": [
{
- "checksum": "075cb96b1c61e3b33bd5ffce5c54e89f",
- "size": 6204,
- "uri": "https://{canondata_backend}/1784826/e9750740d08fbf06f169b410f17b106c0ebb4171/resource.tar.gz#test.test_join-yql-16011--Debug_/opt.yql"
+ "checksum": "8653453f880273322c51a9bc67437c2e",
+ "size": 6215,
+ "uri": "https://{canondata_backend}/1880306/c4e7680c1c690089c4e7c65afc416f8e47154ffa/resource.tar.gz#test.test_join-yql-16011--Debug_/opt.yql"
}
],
"test.test[join-yql-16011--Plan]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
index 33223baf58..26d3550ebf 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
@@ -2145,9 +2145,9 @@
],
"test.test[join-convert_key--Debug]": [
{
- "checksum": "2bf8c1ec0588c5d8ed77e1d09cf74852",
- "size": 3511,
- "uri": "https://{canondata_backend}/1031349/ae73c5d8d7d1b2af37a639a88f21b418d6242e18/resource.tar.gz#test.test_join-convert_key--Debug_/opt.yql"
+ "checksum": "27592bc0476bc2f153b9dd9a29d30ea2",
+ "size": 3533,
+ "uri": "https://{canondata_backend}/1880306/5943c0be93d87630d332e1bfbd7c544ecdabb04b/resource.tar.gz#test.test_join-convert_key--Debug_/opt.yql"
}
],
"test.test[join-convert_key--Plan]": [
@@ -2295,9 +2295,9 @@
],
"test.test[join-lookupjoin_inner_1o2o--Debug]": [
{
- "checksum": "76c72bae52dc677f8d083f1aa3f31853",
- "size": 2745,
- "uri": "https://{canondata_backend}/1031349/ae73c5d8d7d1b2af37a639a88f21b418d6242e18/resource.tar.gz#test.test_join-lookupjoin_inner_1o2o--Debug_/opt.yql"
+ "checksum": "74e9e2f24d2b199816cb21ee2c23cadc",
+ "size": 2760,
+ "uri": "https://{canondata_backend}/1880306/5943c0be93d87630d332e1bfbd7c544ecdabb04b/resource.tar.gz#test.test_join-lookupjoin_inner_1o2o--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_inner_1o2o--Plan]": [
@@ -2316,9 +2316,9 @@
],
"test.test[join-mapjoin_early_rewrite_star--Debug]": [
{
- "checksum": "248033caee3dd93420a1a4fcc8e2412a",
- "size": 3252,
- "uri": "https://{canondata_backend}/1031349/ae73c5d8d7d1b2af37a639a88f21b418d6242e18/resource.tar.gz#test.test_join-mapjoin_early_rewrite_star--Debug_/opt.yql"
+ "checksum": "d6e6feb892dcf57a249150d0f581a7dd",
+ "size": 3259,
+ "uri": "https://{canondata_backend}/1880306/5943c0be93d87630d332e1bfbd7c544ecdabb04b/resource.tar.gz#test.test_join-mapjoin_early_rewrite_star--Debug_/opt.yql"
}
],
"test.test[join-mapjoin_early_rewrite_star--Plan]": [
@@ -2435,9 +2435,9 @@
],
"test.test[join-premap_map_semi--Debug]": [
{
- "checksum": "a6882d1f607788a5a1ce56ac1aadf421",
- "size": 3041,
- "uri": "https://{canondata_backend}/1031349/ae73c5d8d7d1b2af37a639a88f21b418d6242e18/resource.tar.gz#test.test_join-premap_map_semi--Debug_/opt.yql"
+ "checksum": "e6dc24ae6a648f0bfc43e25febb2840d",
+ "size": 3061,
+ "uri": "https://{canondata_backend}/1880306/5943c0be93d87630d332e1bfbd7c544ecdabb04b/resource.tar.gz#test.test_join-premap_map_semi--Debug_/opt.yql"
}
],
"test.test[join-premap_map_semi--Plan]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part2/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part2/canondata/result.json
index 1c7005c587..7f1a7a5da0 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part2/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part2/canondata/result.json
@@ -2506,9 +2506,9 @@
],
"test.test[join-lookupjoin_inner--Debug]": [
{
- "checksum": "4420cb2f2a84fd4a00aa56e9f61a5271",
- "size": 2664,
- "uri": "https://{canondata_backend}/1942173/9a6f6334e651491b441984c4ddd245333e46d62d/resource.tar.gz#test.test_join-lookupjoin_inner--Debug_/opt.yql"
+ "checksum": "6126ca0f7bc87752edeb5079d68e7874",
+ "size": 2679,
+ "uri": "https://{canondata_backend}/1903885/9f3cc059d0dff973193fe9dfe5618178bac27a80/resource.tar.gz#test.test_join-lookupjoin_inner--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_inner--Plan]": [
@@ -2527,9 +2527,9 @@
],
"test.test[join-lookupjoin_semi_1o2o--Debug]": [
{
- "checksum": "90667f3f606d8cf728de688b555634ce",
- "size": 2725,
- "uri": "https://{canondata_backend}/1942173/9a6f6334e651491b441984c4ddd245333e46d62d/resource.tar.gz#test.test_join-lookupjoin_semi_1o2o--Debug_/opt.yql"
+ "checksum": "fce7c9508eee239911d0de45b9c1609b",
+ "size": 2734,
+ "uri": "https://{canondata_backend}/1903885/9f3cc059d0dff973193fe9dfe5618178bac27a80/resource.tar.gz#test.test_join-lookupjoin_semi_1o2o--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_semi_1o2o--Plan]": [
@@ -2548,9 +2548,9 @@
],
"test.test[join-lookupjoin_semi_subq--Debug]": [
{
- "checksum": "12ec90ad9b9248df93b763adae7f8f7f",
- "size": 2578,
- "uri": "https://{canondata_backend}/1942173/9a6f6334e651491b441984c4ddd245333e46d62d/resource.tar.gz#test.test_join-lookupjoin_semi_subq--Debug_/opt.yql"
+ "checksum": "061ed54e879344d7ef7ae518e53e7c19",
+ "size": 2587,
+ "uri": "https://{canondata_backend}/1903885/9f3cc059d0dff973193fe9dfe5618178bac27a80/resource.tar.gz#test.test_join-lookupjoin_semi_subq--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_semi_subq--Plan]": [
@@ -2569,9 +2569,9 @@
],
"test.test[join-lookupjoin_with_cache--Debug]": [
{
- "checksum": "7d85b3cf35961bfbb9948f37ace1959f",
- "size": 3956,
- "uri": "https://{canondata_backend}/1784826/63f3b28bd4f7c5701138f9b10fc4c3b5fb306744/resource.tar.gz#test.test_join-lookupjoin_with_cache--Debug_/opt.yql"
+ "checksum": "0e002fc6410b0ccb395b4e8394b6cfc5",
+ "size": 3960,
+ "uri": "https://{canondata_backend}/1903885/9f3cc059d0dff973193fe9dfe5618178bac27a80/resource.tar.gz#test.test_join-lookupjoin_with_cache--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_with_cache--Plan]": [
@@ -2590,9 +2590,9 @@
],
"test.test[join-mapjoin_early_rewrite_sequence--Debug]": [
{
- "checksum": "8e7a61b569799dafb3c81597a4c6cd8e",
- "size": 4668,
- "uri": "https://{canondata_backend}/1942173/9a6f6334e651491b441984c4ddd245333e46d62d/resource.tar.gz#test.test_join-mapjoin_early_rewrite_sequence--Debug_/opt.yql"
+ "checksum": "8de013ae532bf9151a5307feed346a37",
+ "size": 4679,
+ "uri": "https://{canondata_backend}/1903885/9f3cc059d0dff973193fe9dfe5618178bac27a80/resource.tar.gz#test.test_join-mapjoin_early_rewrite_sequence--Debug_/opt.yql"
}
],
"test.test[join-mapjoin_early_rewrite_sequence--Plan]": [
@@ -4464,9 +4464,9 @@
],
"test.test[sampling-mapjoin_left_sample-default.txt-Debug]": [
{
- "checksum": "dfe130de2b0dfad09b19489ab783eab4",
- "size": 2412,
- "uri": "https://{canondata_backend}/1600758/d903106d62cd4c0b1dbdbaee71226b04f4247597/resource.tar.gz#test.test_sampling-mapjoin_left_sample-default.txt-Debug_/opt.yql"
+ "checksum": "e8d25bff3c97ae684d7e0b0117104772",
+ "size": 2432,
+ "uri": "https://{canondata_backend}/1903885/9f3cc059d0dff973193fe9dfe5618178bac27a80/resource.tar.gz#test.test_sampling-mapjoin_left_sample-default.txt-Debug_/opt.yql"
}
],
"test.test[sampling-mapjoin_left_sample-default.txt-Plan]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part3/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part3/canondata/result.json
index c21144b0c9..903d5b34e2 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part3/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part3/canondata/result.json
@@ -2149,9 +2149,9 @@
],
"test.test[join-lookupjoin_inner_2o--Debug]": [
{
- "checksum": "6ca77c127fce9ddd7fcc7b0a42acc06b",
- "size": 3004,
- "uri": "https://{canondata_backend}/1937424/2742e76fa6399a6dda2abe132fbf9df8f714765f/resource.tar.gz#test.test_join-lookupjoin_inner_2o--Debug_/opt.yql"
+ "checksum": "5e9f35e9fc3161651a5479319bd3ad95",
+ "size": 3019,
+ "uri": "https://{canondata_backend}/1936842/fab2fef3f906a5afbc02b8ac3c5121b8eb14dff2/resource.tar.gz#test.test_join-lookupjoin_inner_2o--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_inner_2o--Plan]": [
@@ -2170,9 +2170,9 @@
],
"test.test[join-lookupjoin_unused_keys--Debug]": [
{
- "checksum": "ae71ec54ac76822e0387ebd280bb53a3",
- "size": 5026,
- "uri": "https://{canondata_backend}/1937424/2742e76fa6399a6dda2abe132fbf9df8f714765f/resource.tar.gz#test.test_join-lookupjoin_unused_keys--Debug_/opt.yql"
+ "checksum": "0659a1353f7830f19e78a7243d47486b",
+ "size": 5042,
+ "uri": "https://{canondata_backend}/1936842/fab2fef3f906a5afbc02b8ac3c5121b8eb14dff2/resource.tar.gz#test.test_join-lookupjoin_unused_keys--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_unused_keys--Plan]": [
@@ -2212,9 +2212,9 @@
],
"test.test[join-mapjoin_opt_vs_2xopt--Debug]": [
{
- "checksum": "c785f368254151eb3f5485ec8e506bb6",
- "size": 4102,
- "uri": "https://{canondata_backend}/1936997/43379553890a43c724981724c68f89a1aa3f693b/resource.tar.gz#test.test_join-mapjoin_opt_vs_2xopt--Debug_/opt.yql"
+ "checksum": "98080425aa7b359a7345d75f5bb6faf7",
+ "size": 4106,
+ "uri": "https://{canondata_backend}/1936842/fab2fef3f906a5afbc02b8ac3c5121b8eb14dff2/resource.tar.gz#test.test_join-mapjoin_opt_vs_2xopt--Debug_/opt.yql"
}
],
"test.test[join-mapjoin_opt_vs_2xopt--Plan]": [
@@ -3899,9 +3899,9 @@
],
"test.test[sampling-subquery_mapjoin-default.txt-Debug]": [
{
- "checksum": "78bfaed415a12dc9228e7e094ee7c8b3",
- "size": 2461,
- "uri": "https://{canondata_backend}/1936842/cbce9dda2baeb4df36d9ccfc918ac348e610bfad/resource.tar.gz#test.test_sampling-subquery_mapjoin-default.txt-Debug_/opt.yql"
+ "checksum": "26d750d8f1c50a376072539d94fc20ba",
+ "size": 2481,
+ "uri": "https://{canondata_backend}/1936842/fab2fef3f906a5afbc02b8ac3c5121b8eb14dff2/resource.tar.gz#test.test_sampling-subquery_mapjoin-default.txt-Debug_/opt.yql"
}
],
"test.test[sampling-subquery_mapjoin-default.txt-Plan]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json
index 00719d85eb..579203812d 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json
@@ -2283,9 +2283,9 @@
],
"test.test[join-mapjoin_dup_key--Debug]": [
{
- "checksum": "c18a349168f306c60a8e8df72041c872",
- "size": 2325,
- "uri": "https://{canondata_backend}/1937027/b2b2e339d1731355b04f7a42a585329c3bc93458/resource.tar.gz#test.test_join-mapjoin_dup_key--Debug_/opt.yql"
+ "checksum": "56b68742c193bbfac9c78e138f8e01be",
+ "size": 2342,
+ "uri": "https://{canondata_backend}/1903885/357a4fea0449e98db159f5a087a2bdeb6fb084ab/resource.tar.gz#test.test_join-mapjoin_dup_key--Debug_/opt.yql"
}
],
"test.test[join-mapjoin_dup_key--Plan]": [
@@ -2304,9 +2304,9 @@
],
"test.test[join-mapjoin_with_anonymous--Debug]": [
{
- "checksum": "b650762d853850d03da8d775bc774ec7",
- "size": 3025,
- "uri": "https://{canondata_backend}/1773845/4175f39a505b153d67edfa8f510ce5f8374a0bf8/resource.tar.gz#test.test_join-mapjoin_with_anonymous--Debug_/opt.yql"
+ "checksum": "6ba412b13b3ac405f60039850aebf4c6",
+ "size": 3047,
+ "uri": "https://{canondata_backend}/1903885/357a4fea0449e98db159f5a087a2bdeb6fb084ab/resource.tar.gz#test.test_join-mapjoin_with_anonymous--Debug_/opt.yql"
}
],
"test.test[join-mapjoin_with_anonymous--Plan]": [
@@ -4184,9 +4184,9 @@
],
"test.test[sampling-mapjoin_right_sample-default.txt-Debug]": [
{
- "checksum": "1420b856d968fd1517cde027ef4cc4c7",
- "size": 2412,
- "uri": "https://{canondata_backend}/1871182/3929b8a840fb48e36816b5c322ab881c6e5a7107/resource.tar.gz#test.test_sampling-mapjoin_right_sample-default.txt-Debug_/opt.yql"
+ "checksum": "7bb4043f46133bad675c58a49853b2f7",
+ "size": 2432,
+ "uri": "https://{canondata_backend}/1903885/357a4fea0449e98db159f5a087a2bdeb6fb084ab/resource.tar.gz#test.test_sampling-mapjoin_right_sample-default.txt-Debug_/opt.yql"
}
],
"test.test[sampling-mapjoin_right_sample-default.txt-Plan]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part5/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part5/canondata/result.json
index dd716cdfb1..fe50e052cc 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part5/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part5/canondata/result.json
@@ -2534,9 +2534,9 @@
],
"test.test[join-lookupjoin_bug7646_subst--Debug]": [
{
- "checksum": "310ab0b2777f1d05a8ad23f344032388",
- "size": 4737,
- "uri": "https://{canondata_backend}/1942671/3ee939ba8b1a570964ff0417df5011a751b80c17/resource.tar.gz#test.test_join-lookupjoin_bug7646_subst--Debug_/opt.yql"
+ "checksum": "5c5d5af9acb6c231b2f3d7c08fc532b5",
+ "size": 4762,
+ "uri": "https://{canondata_backend}/1924537/a1724f09c61ca2d7b118f636b56ba6ad473f8d09/resource.tar.gz#test.test_join-lookupjoin_bug7646_subst--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_bug7646_subst--Plan]": [
@@ -2576,9 +2576,9 @@
],
"test.test[join-lookupjoin_semi--Debug]": [
{
- "checksum": "669e5cf9c54824b1d5b23d8dfe07192d",
- "size": 2677,
- "uri": "https://{canondata_backend}/1903885/bd6e40235810a6cb73de23553bbd4f90ac78f7e5/resource.tar.gz#test.test_join-lookupjoin_semi--Debug_/opt.yql"
+ "checksum": "83627adab1bf041fb3f13893fc5da1c2",
+ "size": 2686,
+ "uri": "https://{canondata_backend}/1924537/a1724f09c61ca2d7b118f636b56ba6ad473f8d09/resource.tar.gz#test.test_join-lookupjoin_semi--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_semi--Plan]": [
@@ -2597,9 +2597,9 @@
],
"test.test[join-mapjoin_early_rewrite--Debug]": [
{
- "checksum": "5d0de73ad42467d5d9044819fe33cc73",
- "size": 3169,
- "uri": "https://{canondata_backend}/1903885/bd6e40235810a6cb73de23553bbd4f90ac78f7e5/resource.tar.gz#test.test_join-mapjoin_early_rewrite--Debug_/opt.yql"
+ "checksum": "920d09852bfb8ff3a5746e7b84a2dde5",
+ "size": 3176,
+ "uri": "https://{canondata_backend}/1924537/a1724f09c61ca2d7b118f636b56ba6ad473f8d09/resource.tar.gz#test.test_join-mapjoin_early_rewrite--Debug_/opt.yql"
}
],
"test.test[join-mapjoin_early_rewrite--Plan]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part6/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part6/canondata/result.json
index 04a7013495..5a7c0d5d3d 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part6/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part6/canondata/result.json
@@ -2170,9 +2170,9 @@
],
"test.test[join-join_comp_map_table--Debug]": [
{
- "checksum": "a984f84354e7a4b5cc4f107f10d33b9c",
- "size": 7719,
- "uri": "https://{canondata_backend}/1942415/0635ef51f0b6002d70ba427ff40b36c9d813025f/resource.tar.gz#test.test_join-join_comp_map_table--Debug_/opt.yql"
+ "checksum": "686f41aa5e5d7dcac8f4441e4e24bbfa",
+ "size": 7747,
+ "uri": "https://{canondata_backend}/1936842/f78569e172299b7a2aee3d6ade84c2cc02cc5940/resource.tar.gz#test.test_join-join_comp_map_table--Debug_/opt.yql"
}
],
"test.test[join-join_comp_map_table--Plan]": [
@@ -2215,9 +2215,9 @@
],
"test.test[join-lookupjoin_inner_1o--Debug]": [
{
- "checksum": "d3d2510dbb1028c714aca27684d8e902",
- "size": 3184,
- "uri": "https://{canondata_backend}/1942415/0635ef51f0b6002d70ba427ff40b36c9d813025f/resource.tar.gz#test.test_join-lookupjoin_inner_1o--Debug_/opt.yql"
+ "checksum": "c536b12b798d9e9b1a4fce43b40a61df",
+ "size": 3195,
+ "uri": "https://{canondata_backend}/1936842/f78569e172299b7a2aee3d6ade84c2cc02cc5940/resource.tar.gz#test.test_join-lookupjoin_inner_1o--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_inner_1o--Plan]": [
@@ -2383,9 +2383,9 @@
],
"test.test[join-premap_map_inner--Debug]": [
{
- "checksum": "67a03c9703235b5e5cf1ecf81c456cc3",
- "size": 3184,
- "uri": "https://{canondata_backend}/1942415/0635ef51f0b6002d70ba427ff40b36c9d813025f/resource.tar.gz#test.test_join-premap_map_inner--Debug_/opt.yql"
+ "checksum": "8a6f86726e00e9533d6348e1ba66a572",
+ "size": 3193,
+ "uri": "https://{canondata_backend}/1936842/f78569e172299b7a2aee3d6ade84c2cc02cc5940/resource.tar.gz#test.test_join-premap_map_inner--Debug_/opt.yql"
}
],
"test.test[join-premap_map_inner--Plan]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part7/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part7/canondata/result.json
index b8cfc4038a..5428231c69 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part7/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part7/canondata/result.json
@@ -1884,9 +1884,9 @@
],
"test.test[in-yql-14677-default.txt-Debug]": [
{
- "checksum": "8677ba071f2caa6ccd06dc197332090c",
- "size": 1787,
- "uri": "https://{canondata_backend}/1937367/9644b01b81adf761b50e9caf623277023268e252/resource.tar.gz#test.test_in-yql-14677-default.txt-Debug_/opt.yql"
+ "checksum": "ce09ebeff7ee7a89c91197677669b441",
+ "size": 1791,
+ "uri": "https://{canondata_backend}/1936947/1a2ec30f6c678213d458879d62698daad5e086d0/resource.tar.gz#test.test_in-yql-14677-default.txt-Debug_/opt.yql"
}
],
"test.test[in-yql-14677-default.txt-Plan]": [
@@ -2020,9 +2020,9 @@
],
"test.test[join-lookupjoin_semi_1o--Debug]": [
{
- "checksum": "079d946ab36f070a2a5243b00aee14eb",
- "size": 2896,
- "uri": "https://{canondata_backend}/1937424/844c51c227824880c7225d0ff864a8ccce1a32b7/resource.tar.gz#test.test_join-lookupjoin_semi_1o--Debug_/opt.yql"
+ "checksum": "c29b3dc95f12c3bedf3901adf7e53e99",
+ "size": 2903,
+ "uri": "https://{canondata_backend}/1936947/1a2ec30f6c678213d458879d62698daad5e086d0/resource.tar.gz#test.test_join-lookupjoin_semi_1o--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_semi_1o--Plan]": [
@@ -2062,9 +2062,9 @@
],
"test.test[join-mapjoin_partial_uniq_keys--Debug]": [
{
- "checksum": "529eb999fa6fbd53789b782a7ab93f78",
- "size": 2109,
- "uri": "https://{canondata_backend}/1937424/844c51c227824880c7225d0ff864a8ccce1a32b7/resource.tar.gz#test.test_join-mapjoin_partial_uniq_keys--Debug_/opt.yql"
+ "checksum": "e3ea7295e3094a88421bc83d7cc9f59e",
+ "size": 2113,
+ "uri": "https://{canondata_backend}/1936947/1a2ec30f6c678213d458879d62698daad5e086d0/resource.tar.gz#test.test_join-mapjoin_partial_uniq_keys--Debug_/opt.yql"
}
],
"test.test[join-mapjoin_partial_uniq_keys--Plan]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json
index 61a73ed420..7f55711627 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json
@@ -2451,9 +2451,9 @@
],
"test.test[join-lookupjoin_semi_2o--Debug]": [
{
- "checksum": "1f9981f85091ddd820e57e9bf74e7de5",
- "size": 2895,
- "uri": "https://{canondata_backend}/995452/1bbbc95795bf855675e4ef6b7b15d2ab4c6ee367/resource.tar.gz#test.test_join-lookupjoin_semi_2o--Debug_/opt.yql"
+ "checksum": "64f200e4e8720ee054f9aeb2ba5b4f4c",
+ "size": 2904,
+ "uri": "https://{canondata_backend}/1773845/c865fc3a6f63b56097b2e5205cf04a3ce881c52d/resource.tar.gz#test.test_join-lookupjoin_semi_2o--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_semi_2o--Plan]": [
@@ -2472,9 +2472,9 @@
],
"test.test[join-mapjoin_left_null_column--Debug]": [
{
- "checksum": "d35159fc6691ac1a229cdda0dfc4be0d",
- "size": 3216,
- "uri": "https://{canondata_backend}/995452/1bbbc95795bf855675e4ef6b7b15d2ab4c6ee367/resource.tar.gz#test.test_join-mapjoin_left_null_column--Debug_/opt.yql"
+ "checksum": "d5d1f8254d9624f59025bbc7abaa35b8",
+ "size": 3224,
+ "uri": "https://{canondata_backend}/1773845/c865fc3a6f63b56097b2e5205cf04a3ce881c52d/resource.tar.gz#test.test_join-mapjoin_left_null_column--Debug_/opt.yql"
}
],
"test.test[join-mapjoin_left_null_column--Plan]": [
@@ -4714,14 +4714,14 @@
{
"checksum": "cec4d1db686e561cada1094e26e47a24",
"size": 6092,
- "uri": "https://{canondata_backend}/1784117/983ca2360ac31c365938bcff5f15cccb51a3c68c/resource.tar.gz#test.test_tpch-q15-default.txt-Debug_/opt.yql"
+ "uri": "https://{canondata_backend}/1925842/983ca2360ac31c365938bcff5f15cccb51a3c68c/resource.tar.gz#test.test_tpch-q15-default.txt-Debug_/opt.yql"
}
],
"test.test[tpch-q15-default.txt-Plan]": [
{
"checksum": "da4939e401c68b6ddb9a3f316a073be2",
"size": 10685,
- "uri": "https://{canondata_backend}/1784117/983ca2360ac31c365938bcff5f15cccb51a3c68c/resource.tar.gz#test.test_tpch-q15-default.txt-Plan_/plan.txt"
+ "uri": "https://{canondata_backend}/1925842/983ca2360ac31c365938bcff5f15cccb51a3c68c/resource.tar.gz#test.test_tpch-q15-default.txt-Plan_/plan.txt"
}
],
"test.test[tpch-q15-default.txt-Results]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json
index b2d0e77df8..5e55d14ea8 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json
@@ -2364,9 +2364,9 @@
],
"test.test[join-lookupjoin_bug8533--Debug]": [
{
- "checksum": "51fea0ad6219e315726c653ebf25a53b",
- "size": 2730,
- "uri": "https://{canondata_backend}/1937027/ab18864157a845ae3a4207c01e0bb0d1138bdbca/resource.tar.gz#test.test_join-lookupjoin_bug8533--Debug_/opt.yql"
+ "checksum": "5a22252f40278687c7d7ac93f5554bb3",
+ "size": 2739,
+ "uri": "https://{canondata_backend}/1937429/1ca07da234d7bcc8f0a3159b3e1bfcdf4830cdde/resource.tar.gz#test.test_join-lookupjoin_bug8533--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_bug8533--Plan]": [
@@ -2406,16 +2406,16 @@
],
"test.test[join-lookupjoin_take_skip--Debug]": [
{
- "checksum": "5bbc81dd43e2b3ed08c44957065628a0",
- "size": 4607,
- "uri": "https://{canondata_backend}/1925842/97ff5031d7caf3812b5fbe98b2a6aa20a0d2be28/resource.tar.gz#test.test_join-lookupjoin_take_skip--Debug_/opt.yql"
+ "checksum": "bf77f32fb3039f89c54a527d9cbfc616",
+ "size": 5941,
+ "uri": "https://{canondata_backend}/1937429/1ca07da234d7bcc8f0a3159b3e1bfcdf4830cdde/resource.tar.gz#test.test_join-lookupjoin_take_skip--Debug_/opt.yql"
}
],
"test.test[join-lookupjoin_take_skip--Plan]": [
{
- "checksum": "e2744532509846d2ed662f28e9045eb6",
- "size": 11185,
- "uri": "https://{canondata_backend}/1925842/97ff5031d7caf3812b5fbe98b2a6aa20a0d2be28/resource.tar.gz#test.test_join-lookupjoin_take_skip--Plan_/plan.txt"
+ "checksum": "df5032781677c3905611d4fa79831cc9",
+ "size": 11503,
+ "uri": "https://{canondata_backend}/1937429/1ca07da234d7bcc8f0a3159b3e1bfcdf4830cdde/resource.tar.gz#test.test_join-lookupjoin_take_skip--Plan_/plan.txt"
}
],
"test.test[join-lookupjoin_take_skip--Results]": [
@@ -2427,9 +2427,9 @@
],
"test.test[join-mapjoin_on_tablerecord--Debug]": [
{
- "checksum": "be7db24b4238eae64d6a61ed475deb64",
- "size": 3647,
- "uri": "https://{canondata_backend}/1937027/ab18864157a845ae3a4207c01e0bb0d1138bdbca/resource.tar.gz#test.test_join-mapjoin_on_tablerecord--Debug_/opt.yql"
+ "checksum": "3b497f4710d5a847eb8f44f8c586261e",
+ "size": 3667,
+ "uri": "https://{canondata_backend}/1937429/1ca07da234d7bcc8f0a3159b3e1bfcdf4830cdde/resource.tar.gz#test.test_join-mapjoin_on_tablerecord--Debug_/opt.yql"
}
],
"test.test[join-mapjoin_on_tablerecord--Plan]": [
@@ -2532,9 +2532,9 @@
],
"test.test[join-yql-14847--Debug]": [
{
- "checksum": "5339cca574f87e6476794bcf370b7ca7",
- "size": 4522,
- "uri": "https://{canondata_backend}/995452/cd254528d9e703d6d7ebf5812a6ebd477f85ee58/resource.tar.gz#test.test_join-yql-14847--Debug_/opt.yql"
+ "checksum": "10b406ebcf3eac463d2b639d45bc781b",
+ "size": 4529,
+ "uri": "https://{canondata_backend}/1937429/1ca07da234d7bcc8f0a3159b3e1bfcdf4830cdde/resource.tar.gz#test.test_join-yql-14847--Debug_/opt.yql"
}
],
"test.test[join-yql-14847--Plan]": [
@@ -3938,14 +3938,14 @@
{
"checksum": "611865b874769778b378f7ed6b111e10",
"size": 7515,
- "uri": "https://{canondata_backend}/995452/9b59108eaef82bae6928efcaeab50e441de256db/resource.tar.gz#test.test_pg-tpch-q15-default.txt-Debug_/opt.yql"
+ "uri": "https://{canondata_backend}/1942100/9b59108eaef82bae6928efcaeab50e441de256db/resource.tar.gz#test.test_pg-tpch-q15-default.txt-Debug_/opt.yql"
}
],
"test.test[pg-tpch-q15-default.txt-Plan]": [
{
"checksum": "329cac6de52744d0274c26a6b794ec8b",
"size": 10566,
- "uri": "https://{canondata_backend}/995452/9b59108eaef82bae6928efcaeab50e441de256db/resource.tar.gz#test.test_pg-tpch-q15-default.txt-Plan_/plan.txt"
+ "uri": "https://{canondata_backend}/1942100/9b59108eaef82bae6928efcaeab50e441de256db/resource.tar.gz#test.test_pg-tpch-q15-default.txt-Plan_/plan.txt"
}
],
"test.test[pg-tpch-q15-default.txt-Results]": [