Skip to content

Commit c8e6180

Browse files
authored
[yt provider] Fix unordered_map::at: key not found error (#11575)
1 parent 6dac5e0 commit c8e6180

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

ydb/library/yql/providers/yt/provider/yql_yt_physical_finalizing.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)