From 108f830538c808af8a319e604d67733c5707c4f8 Mon Sep 17 00:00:00 2001 From: Yuriy Kaminskiy Date: Tue, 13 Aug 2024 16:32:45 +0300 Subject: [PATCH 1/2] dq_input_transform_lookup: fix indexes for left-side lookup key --- .../dq_input_transform_lookup.cpp | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp b/ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp index 4633cbdd44ec..2bb9e0a2e8ed 100644 --- a/ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp +++ b/ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp @@ -383,6 +383,27 @@ THashMap GetNameToIndex(const ::google::protobuf::RepeatedPt return result; } +THashMap GetNameToIndex(const NMiniKQL::TStructType* type) { + THashMap result; + for (ui32 i = 0; i != type->GetMembersCount()//names.size() + ; ++i) { + auto name = type->GetMemberName(i); + result[name] = i; + } + return result; +} + +TVector GetJoinColumnIndexes(const ::google::protobuf::RepeatedPtrField& names, const THashMap& joinColumns) { + TVector result; + result.reserve(joinColumns.size()); + for (int i = 0; i != names.size(); ++i) { + if (auto p = joinColumns.FindPtr(names[i])) { + result.push_back(*p); + } + } + return result; +} + TVector GetJoinColumnIndexes(const NMiniKQL::TStructType* type, const THashMap& joinColumns) { TVector result; result.reserve(joinColumns.size()); @@ -410,14 +431,15 @@ std::pair CreateInputTransformStre const auto rightRowType = DeserializeStructType(settings.GetRightSource().GetSerializedRowType(), args.TypeEnv); - auto leftJoinColumns = GetNameToIndex(settings.GetLeftJoinKeyNames()); + auto leftJoinColumns = GetNameToIndex(narrowInputRowType); auto rightJoinColumns = GetNameToIndex(settings.GetRightJoinKeyNames()); - Y_ABORT_UNLESS(leftJoinColumns.size() == rightJoinColumns.size()); - auto leftJoinColumnIndexes = GetJoinColumnIndexes(narrowInputRowType, leftJoinColumns); - Y_ABORT_UNLESS(leftJoinColumnIndexes.size() == leftJoinColumns.size()); + auto leftJoinColumnIndexes = GetJoinColumnIndexes( + settings.GetLeftJoinKeyNames(), + leftJoinColumns); auto rightJoinColumnIndexes = GetJoinColumnIndexes(rightRowType, rightJoinColumns); Y_ABORT_UNLESS(rightJoinColumnIndexes.size() == rightJoinColumns.size()); + Y_ABORT_UNLESS(leftJoinColumnIndexes.size() == rightJoinColumnIndexes.size()); const auto& [lookupKeyType, lookupPayloadType] = SplitLookupTableColumns(rightRowType, rightJoinColumns, args.TypeEnv); const auto& outputColumnsOrder = CategorizeOutputRowItems( From 55ffe1e8637dd6dba36701c86ffebd6a237751ee Mon Sep 17 00:00:00 2001 From: Yuriy Kaminskiy Date: Wed, 14 Aug 2024 14:59:53 +0300 Subject: [PATCH 2/2] fix review comments --- .../input_transforms/dq_input_transform_lookup.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp b/ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp index 2bb9e0a2e8ed..646f49130507 100644 --- a/ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp +++ b/ydb/library/yql/dq/actors/input_transforms/dq_input_transform_lookup.cpp @@ -385,10 +385,8 @@ THashMap GetNameToIndex(const ::google::protobuf::RepeatedPt THashMap GetNameToIndex(const NMiniKQL::TStructType* type) { THashMap result; - for (ui32 i = 0; i != type->GetMembersCount()//names.size() - ; ++i) { - auto name = type->GetMemberName(i); - result[name] = i; + for (ui32 i = 0; i != type->GetMembersCount(); ++i) { + result[type->GetMemberName(i)] = i; } return result; } @@ -431,12 +429,12 @@ std::pair CreateInputTransformStre const auto rightRowType = DeserializeStructType(settings.GetRightSource().GetSerializedRowType(), args.TypeEnv); - auto leftJoinColumns = GetNameToIndex(narrowInputRowType); + auto inputColumns = GetNameToIndex(narrowInputRowType); auto rightJoinColumns = GetNameToIndex(settings.GetRightJoinKeyNames()); auto leftJoinColumnIndexes = GetJoinColumnIndexes( settings.GetLeftJoinKeyNames(), - leftJoinColumns); + inputColumns); auto rightJoinColumnIndexes = GetJoinColumnIndexes(rightRowType, rightJoinColumns); Y_ABORT_UNLESS(rightJoinColumnIndexes.size() == rightJoinColumns.size()); Y_ABORT_UNLESS(leftJoinColumnIndexes.size() == rightJoinColumnIndexes.size());