aboutsummaryrefslogtreecommitdiffstats
path: root/yt/yql
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2025-02-01 00:51:40 +0000
committerAlexander Smirnov <alex@ydb.tech>2025-02-01 00:51:40 +0000
commitbc8b47be9c7f60e7194d1e834f4d57ee1b830d52 (patch)
treeef2e54f1b2e1fad9870b3df17f6ffaaa402a1637 /yt/yql
parent28b42072a94e399b79032d7197a0e9c170e2cff0 (diff)
parent6bdb8392267259f3f148458ab5946e2654631bfc (diff)
downloadydb-bc8b47be9c7f60e7194d1e834f4d57ee1b830d52.tar.gz
Merge branch 'rightlib' into merge-libs-250201-0050
Diffstat (limited to 'yt/yql')
-rw-r--r--yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_content.cpp4
-rw-r--r--yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_join.cpp3
-rw-r--r--yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_misc.cpp9
-rw-r--r--yt/yql/tests/sql/suites/join/pullup_extra_columns.cfg2
-rw-r--r--yt/yql/tests/sql/suites/join/pullup_extra_columns.sql13
5 files changed, 31 insertions, 0 deletions
diff --git a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_content.cpp b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_content.cpp
index 0afdbe789a..107d17bd47 100644
--- a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_content.cpp
+++ b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_content.cpp
@@ -2,6 +2,7 @@
#include <yt/yql/providers/yt/provider/yql_yt_helpers.h>
#include <yt/yql/providers/yt/provider/yql_yt_optimize.h>
+#include <yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_helper.h>
namespace NYql {
@@ -154,6 +155,9 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::NonOptimalTableContent(
}
}
if (materialize) {
+ if (!NPrivate::EnsurePersistableYsonTypes(section.Pos(), *section.Ref().GetTypeAnn()->Cast<TListExprType>()->GetItemType(), ctx, state)) {
+ return {};
+ }
auto path = CopyOrTrivialMap(section.Pos(),
TExprBase(world),
TYtDSink(ctx.RenameNode(read.DataSource().Ref(), "DataSink")),
diff --git a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_join.cpp b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_join.cpp
index 918aec0795..c175bcade9 100644
--- a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_join.cpp
+++ b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_join.cpp
@@ -223,6 +223,9 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::EquiJoin(TExprBase node
if (NYql::HasSetting(sectionNode.Settings().Ref(), EYtSettingType::Sample)) {
auto scheme = list.Ref().GetTypeAnn()->Cast<TListExprType>()->GetItemType();
+ if (!NPrivate::EnsurePersistableYsonTypes(sectionNode.Pos(), *scheme, ctx, State_)) {
+ return {};
+ }
auto path = CopyOrTrivialMap(sectionNode.Pos(),
TExprBase(world ? world : ctx.NewWorld(sectionNode.Pos())),
dataSink.Cast(),
diff --git a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_misc.cpp b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_misc.cpp
index 30e21070da..8ec8d9f1ec 100644
--- a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_misc.cpp
+++ b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_misc.cpp
@@ -445,6 +445,9 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::Extend(TExprBase node,
return node;
}
auto scheme = section.Ref().GetTypeAnn()->Cast<TListExprType>()->GetItemType();
+ if (!NPrivate::EnsurePersistableYsonTypes(section.Pos(), *scheme, ctx, State_)) {
+ return {};
+ }
auto path = CopyOrTrivialMap(section.Pos(),
read.Cast().World(), dataSink,
*scheme,
@@ -492,6 +495,9 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::Extend(TExprBase node,
if (State_->Types->EvaluationInProgress) {
return node;
}
+ if (!NPrivate::EnsurePersistableYsonTypes(extend.Pos(), *scheme, ctx, State_)) {
+ return {};
+ }
auto path = CopyOrTrivialMap(extend.Pos(),
world, dataSink,
*scheme,
@@ -818,6 +824,9 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::ResPull(TExprBase node,
bool keepSorted = ctx.IsConstraintEnabled<TSortedConstraintNode>()
? (!NYql::HasSetting(section.Settings().Ref(), EYtSettingType::Unordered) && !hasNonTemp && section.Paths().Size() == 1) // single sorted input from operation
: (!hasDynamic || !NYql::HasAnySetting(section.Settings().Ref(), EYtSettingType::Take | EYtSettingType::Skip)); // compatibility - all except dynamic with limit
+ if (!NPrivate::EnsurePersistableYsonTypes(read.Pos(), *scheme, ctx, State_)) {
+ return {};
+ }
auto path = CopyOrTrivialMap(read.Pos(),
read.World(),
TYtDSink(ctx.RenameNode(read.DataSource().Ref(), "DataSink")),
diff --git a/yt/yql/tests/sql/suites/join/pullup_extra_columns.cfg b/yt/yql/tests/sql/suites/join/pullup_extra_columns.cfg
new file mode 100644
index 0000000000..6098eb907d
--- /dev/null
+++ b/yt/yql/tests/sql/suites/join/pullup_extra_columns.cfg
@@ -0,0 +1,2 @@
+in Input1 kv1_sorted.txt
+in Input2 kv2_sorted.txt
diff --git a/yt/yql/tests/sql/suites/join/pullup_extra_columns.sql b/yt/yql/tests/sql/suites/join/pullup_extra_columns.sql
new file mode 100644
index 0000000000..342a7bb967
--- /dev/null
+++ b/yt/yql/tests/sql/suites/join/pullup_extra_columns.sql
@@ -0,0 +1,13 @@
+use plato;
+
+pragma config.flags('OptimizerFlags', 'MemberNthOverFlatMap');
+pragma yt.MapJoinLimit="1m";
+
+
+$t1 = select k1, v1 from Input1;
+$t2 = select k2, v2, u2 as renamed from Input2;
+
+select
+ a.*,
+ b.v2,
+from $t1 as a left join any $t2 as b on a.k1 = b.k2;