diff options
author | udovichenko-r <udovichenko-r@yandex-team.com> | 2025-02-27 20:24:49 +0300 |
---|---|---|
committer | udovichenko-r <udovichenko-r@yandex-team.com> | 2025-02-27 20:57:03 +0300 |
commit | f41dd08e6f8e563d79293e77e5efc9724bff0dcd (patch) | |
tree | 7e95b7a3c54182bee8f3728d333a566c4890acf0 | |
parent | 75d63f434cc0f0361068d1b880ec9a8d0e251317 (diff) | |
download | ydb-f41dd08e6f8e563d79293e77e5efc9724bff0dcd.tar.gz |
Don't run MergeToCopy on merge with different column groups
commit_hash:52b08ac6595e1805418d372c147b2bdeb60042fe
-rw-r--r-- | yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_merge.cpp | 20 | ||||
-rw-r--r-- | yt/yql/providers/yt/provider/yql_yt_datasink_type_ann.cpp | 2 |
2 files changed, 20 insertions, 2 deletions
diff --git a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_merge.cpp b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_merge.cpp index 1caead064f..3ca868b3a1 100644 --- a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_merge.cpp +++ b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_merge.cpp @@ -446,11 +446,29 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::MergeToCopy(TExprBase n return node; } } - TYtOutTableInfo outTableInfo(merge.Output().Item(0)); + + const auto outTable = merge.Output().Item(0); + TYtOutTableInfo outTableInfo(outTable); if (!tableInfo->RowSpec->CompareSortness(*outTableInfo.RowSpec)) { return node; } + TStringBuf outColGroup; + if (auto setting = NYql::GetSetting(outTable.Settings().Ref(), EYtSettingType::ColumnGroups)) { + outColGroup = setting->Tail().Content(); + } + + YQL_ENSURE(path.Table().Maybe<TYtOutput>()); + TStringBuf inputColGroup; + const auto out = path.Table().Cast<TYtOutput>(); + if (auto setting = NYql::GetSetting(GetOutputOp(out).Output().Item(FromString<ui32>(out.OutIndex().Value())).Settings().Ref(), EYtSettingType::ColumnGroups)) { + inputColGroup = setting->Tail().Content(); + } + + if (outColGroup != inputColGroup) { + return node; + } + return Build<TYtCopy>(ctx, node.Pos()) .World(merge.World()) .DataSink(merge.DataSink()) diff --git a/yt/yql/providers/yt/provider/yql_yt_datasink_type_ann.cpp b/yt/yql/providers/yt/provider/yql_yt_datasink_type_ann.cpp index 92265f2843..7acfeedcae 100644 --- a/yt/yql/providers/yt/provider/yql_yt_datasink_type_ann.cpp +++ b/yt/yql/providers/yt/provider/yql_yt_datasink_type_ann.cpp @@ -994,7 +994,7 @@ private: if (outGroup != inputColGroupSpec) { ctx.AddError(TIssue(ctx.GetPosition(copy.Output().Item(0).Settings().Pos()), TStringBuilder() << TYtCopy::CallableName() - << "has input/output tables with different " << EYtSettingType::ColumnGroups << " values")); + << " has input/output tables with different " << EYtSettingType::ColumnGroups << " values")); return TStatus::Error; } |