diff options
author | Alexander Smirnov <alex@ydb.tech> | 2025-02-01 00:51:40 +0000 |
---|---|---|
committer | Alexander Smirnov <alex@ydb.tech> | 2025-02-01 00:51:40 +0000 |
commit | bc8b47be9c7f60e7194d1e834f4d57ee1b830d52 (patch) | |
tree | ef2e54f1b2e1fad9870b3df17f6ffaaa402a1637 /yt/yql | |
parent | 28b42072a94e399b79032d7197a0e9c170e2cff0 (diff) | |
parent | 6bdb8392267259f3f148458ab5946e2654631bfc (diff) | |
download | ydb-bc8b47be9c7f60e7194d1e834f4d57ee1b830d52.tar.gz |
Merge branch 'rightlib' into merge-libs-250201-0050
Diffstat (limited to 'yt/yql')
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; |