Skip to content

Commit bce790f

Browse files
authored
dq_input_transform_lookup: fix indexes for left-side lookup key (#7727)
1 parent 277ed62 commit bce790f

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,25 @@ THashMap<TStringBuf, size_t> GetNameToIndex(const ::google::protobuf::RepeatedPt
383383
return result;
384384
}
385385

386+
THashMap<TStringBuf, size_t> GetNameToIndex(const NMiniKQL::TStructType* type) {
387+
THashMap<TStringBuf, size_t> result;
388+
for (ui32 i = 0; i != type->GetMembersCount(); ++i) {
389+
result[type->GetMemberName(i)] = i;
390+
}
391+
return result;
392+
}
393+
394+
TVector<size_t> GetJoinColumnIndexes(const ::google::protobuf::RepeatedPtrField<TProtoStringType>& names, const THashMap<TStringBuf, size_t>& joinColumns) {
395+
TVector<size_t> result;
396+
result.reserve(joinColumns.size());
397+
for (int i = 0; i != names.size(); ++i) {
398+
if (auto p = joinColumns.FindPtr(names[i])) {
399+
result.push_back(*p);
400+
}
401+
}
402+
return result;
403+
}
404+
386405
TVector<size_t> GetJoinColumnIndexes(const NMiniKQL::TStructType* type, const THashMap<TStringBuf, size_t>& joinColumns) {
387406
TVector<size_t> result;
388407
result.reserve(joinColumns.size());
@@ -410,14 +429,15 @@ std::pair<IDqComputeActorAsyncInput*, NActors::IActor*> CreateInputTransformStre
410429

411430
const auto rightRowType = DeserializeStructType(settings.GetRightSource().GetSerializedRowType(), args.TypeEnv);
412431

413-
auto leftJoinColumns = GetNameToIndex(settings.GetLeftJoinKeyNames());
432+
auto inputColumns = GetNameToIndex(narrowInputRowType);
414433
auto rightJoinColumns = GetNameToIndex(settings.GetRightJoinKeyNames());
415-
Y_ABORT_UNLESS(leftJoinColumns.size() == rightJoinColumns.size());
416434

417-
auto leftJoinColumnIndexes = GetJoinColumnIndexes(narrowInputRowType, leftJoinColumns);
418-
Y_ABORT_UNLESS(leftJoinColumnIndexes.size() == leftJoinColumns.size());
435+
auto leftJoinColumnIndexes = GetJoinColumnIndexes(
436+
settings.GetLeftJoinKeyNames(),
437+
inputColumns);
419438
auto rightJoinColumnIndexes = GetJoinColumnIndexes(rightRowType, rightJoinColumns);
420439
Y_ABORT_UNLESS(rightJoinColumnIndexes.size() == rightJoinColumns.size());
440+
Y_ABORT_UNLESS(leftJoinColumnIndexes.size() == rightJoinColumnIndexes.size());
421441

422442
const auto& [lookupKeyType, lookupPayloadType] = SplitLookupTableColumns(rightRowType, rightJoinColumns, args.TypeEnv);
423443
const auto& outputColumnsOrder = CategorizeOutputRowItems(

0 commit comments

Comments
 (0)