@@ -2759,7 +2759,7 @@ class TYtPhysicalFinalizingTransformer : public TSyncTransformerBase {
27592759 std::vector<std::vector<const TExprNode*>> UsedByMerges;
27602760 };
27612761
2762- void GatherColumnUsage (EColumnGroupMode mode, const TExprNode* writer, const TOpDeps::mapped_type& readers, TColumnUsage& usage, TNodeMap<size_t >& uniquePaths) {
2762+ void GatherColumnUsage (EColumnGroupMode mode, const TExprNode* writer, const TOpDeps::mapped_type& readers, const TOpDeps& opDeps, TColumnUsage& usage, TNodeMap<size_t >& uniquePaths) {
27632763 for (const auto & outTable: GetRealOperation (TExprBase (writer)).Output ()) {
27642764 usage.OutTypes .push_back (outTable.Ref ().GetTypeAnn ()->Cast <TListExprType>()->GetItemType ()->Cast <TStructExprType>());
27652765 }
@@ -2790,11 +2790,17 @@ class TYtPhysicalFinalizingTransformer : public TSyncTransformerBase {
27902790 } else if (auto maybeMerge = TMaybeNode<TYtMerge>(std::get<0 >(item)); maybeMerge && AllOf (maybeMerge.Cast ().Input ().Item (0 ).Paths (),
27912791 [](const TYtPath& path) { return path.Ref ().GetTypeAnn ()->Equals (*path.Table ().Ref ().GetTypeAnn ()); })) {
27922792
2793- usage.UsedByMerges [outIndex].push_back (std::get<0 >(item));
2793+ // YtMerge may have no usage in the graph (only via Left!)
2794+ if (opDeps.contains (std::get<0 >(item))) {
2795+ usage.UsedByMerges [outIndex].push_back (std::get<0 >(item));
2796+ }
27942797
27952798 } else if (TYtCopy::Match (std::get<0 >(item))) {
27962799
2797- usage.UsedByMerges [outIndex].push_back (std::get<0 >(item));
2800+ // YtCopy may have no usage in the graph (only via Left!)
2801+ if (opDeps.contains (std::get<0 >(item))) {
2802+ usage.UsedByMerges [outIndex].push_back (std::get<0 >(item));
2803+ }
27982804
27992805 } else if (EColumnGroupMode::Single == mode) {
28002806 usage.FullUsage [outIndex] = true ;
@@ -2845,7 +2851,7 @@ class TYtPhysicalFinalizingTransformer : public TSyncTransformerBase {
28452851 TColumnUsage& usage = colUsages[writer];
28462852 usage.GenerateGroups = true ;
28472853
2848- GatherColumnUsage (mode, writer, readers, usage, uniquePaths);
2854+ GatherColumnUsage (mode, writer, readers, opDeps, usage, uniquePaths);
28492855 bool hasMergeDep = false ;
28502856 for (const auto & item: usage.UsedByMerges ) {
28512857 hasMergeDep = hasMergeDep || !item.empty ();
@@ -2863,7 +2869,7 @@ class TYtPhysicalFinalizingTransformer : public TSyncTransformerBase {
28632869 if (res.second ) { // Not processed before
28642870 TColumnUsage& usage = res.first ->second ;
28652871 usage.GenerateGroups = TYtCopy::Match (merge); // Maybe we need to rewrite YtCopy to YtMerge
2866- GatherColumnUsage (mode, merge, opDeps.at (merge), usage, uniquePaths);
2872+ GatherColumnUsage (mode, merge, opDeps.at (merge), opDeps, usage, uniquePaths);
28672873 bool hasMergeDep = false ;
28682874 for (const auto & item: usage.UsedByMerges ) {
28692875 hasMergeDep = hasMergeDep || !item.empty ();
0 commit comments