Skip to content

Commit 958ddcb

Browse files
committed
Print proper column names for wide connections (ydb-platform#7524)
(cherry picked from commit 448b74b)
1 parent cf05c78 commit 958ddcb

File tree

1 file changed

+36
-19
lines changed

1 file changed

+36
-19
lines changed

ydb/core/kqp/opt/kqp_query_plan.cpp

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ struct TSerializerCtx {
9494
const TIntrusivePtr<NYql::TKikimrTablesData> tablesData,
9595
const TKikimrConfiguration::TPtr config, ui32 txCount,
9696
TVector<TVector<NKikimrMiniKQL::TResult>> pureTxResults,
97-
TTypeAnnotationContext& typeCtx,
97+
TTypeAnnotationContext& typeCtx,
9898
TIntrusivePtr<NOpt::TKqpOptimizeContext> optCtx)
9999
: ExprCtx(exprCtx)
100100
, Cluster(cluster)
@@ -348,7 +348,7 @@ class TxPlanSerializer {
348348

349349
writer.WriteKey("Inputs");
350350
writer.BeginList();
351-
351+
352352
for (const auto& input : op.Inputs) {
353353

354354
if (std::holds_alternative<ui32>(input)) {
@@ -461,6 +461,15 @@ class TxPlanSerializer {
461461
}
462462

463463
void FillConnectionPlanNode(const TDqConnection& connection, TQueryPlanNode& planNode) {
464+
TDqStageSettings settings = TDqStageSettings::Parse(connection.Output().Stage());
465+
auto GetNarrowColumnName = [&](const TString& wideColumnName) {
466+
ui32 idx;
467+
if (!TryFromString(wideColumnName, idx)) {
468+
return wideColumnName;
469+
}
470+
return TString(settings.OutputNarrowType->GetItems()[idx]->GetName());
471+
};
472+
464473
planNode.Type = EPlanNodeType::Connection;
465474

466475
if (connection.Maybe<TDqCnUnionAll>()) {
@@ -473,15 +482,23 @@ class TxPlanSerializer {
473482
planNode.TypeName = "HashShuffle";
474483
auto& keyColumns = planNode.NodeInfo["KeyColumns"];
475484
for (const auto& column : hashShuffle.Cast().KeyColumns()) {
476-
keyColumns.AppendValue(TString(column.Value()));
485+
if (settings.WideChannels) {
486+
keyColumns.AppendValue(GetNarrowColumnName(TString(column.Value())));
487+
} else {
488+
keyColumns.AppendValue(TString(column.Value()));
489+
}
477490
}
478491
} else if (auto merge = connection.Maybe<TDqCnMerge>()) {
479492
planNode.TypeName = "Merge";
480493
auto& sortColumns = planNode.NodeInfo["SortColumns"];
481494
for (const auto& sortColumn : merge.Cast().SortColumns()) {
482495
TStringBuilder sortColumnDesc;
483-
sortColumnDesc << sortColumn.Column().Value() << " ("
484-
<< sortColumn.SortDirection().Value() << ")";
496+
if (settings.WideChannels) {
497+
sortColumnDesc << GetNarrowColumnName(TString(sortColumn.Column().Value()));
498+
} else {
499+
sortColumnDesc << sortColumn.Column().Value();
500+
}
501+
sortColumnDesc << " (" << sortColumn.SortDirection().Value() << ")";
485502

486503
sortColumns.AppendValue(sortColumnDesc);
487504
}
@@ -1444,7 +1461,7 @@ class TxPlanSerializer {
14441461

14451462
TOperator op;
14461463
op.Properties["Name"] = name;
1447-
1464+
14481465
return AddOperator(planNode, name, std::move(op));
14491466
}
14501467

@@ -1796,8 +1813,8 @@ class TxPlanSerializer {
17961813

17971814
template <typename TReadTableSettings>
17981815
void AddReadTableSettings(
1799-
TOperator& op,
1800-
const TReadTableSettings& readTableSettings,
1816+
TOperator& op,
1817+
const TReadTableSettings& readTableSettings,
18011818
TTableRead& readInfo
18021819
) {
18031820
auto settings = NYql::TKqpReadTableSettings::Parse(readTableSettings);
@@ -1819,9 +1836,9 @@ class TxPlanSerializer {
18191836
}
18201837

18211838
if (settings.SequentialInFlight) {
1822-
op.Properties["Scan"] = "Sequential";
1839+
op.Properties["Scan"] = "Sequential";
18231840
} else {
1824-
op.Properties["Scan"] = "Parallel";
1841+
op.Properties["Scan"] = "Parallel";
18251842
}
18261843
}
18271844

@@ -2021,8 +2038,8 @@ TVector<NJson::TJsonValue> RemoveRedundantNodes(NJson::TJsonValue& plan, const T
20212038
return {plan};
20222039
}
20232040

2024-
NJson::TJsonValue ReconstructQueryPlanRec(const NJson::TJsonValue& plan,
2025-
int operatorIndex,
2041+
NJson::TJsonValue ReconstructQueryPlanRec(const NJson::TJsonValue& plan,
2042+
int operatorIndex,
20262043
const THashMap<int, NJson::TJsonValue>& planIndex,
20272044
const THashMap<TString, NJson::TJsonValue>& precomputes,
20282045
int& nodeCounter) {
@@ -2113,14 +2130,14 @@ NJson::TJsonValue ReconstructQueryPlanRec(const NJson::TJsonValue& plan,
21132130
NJson::TJsonValue newOps;
21142131
NJson::TJsonValue op;
21152132

2116-
op["Name"] = "TableLookup";
2133+
op["Name"] = "TableLookup";
21172134
op["Columns"] = plan.GetMapSafe().at("Columns");
21182135
op["LookupKeyColumns"] = plan.GetMapSafe().at("LookupKeyColumns");
21192136
op["Table"] = plan.GetMapSafe().at("Table");
21202137

21212138
if (plan.GetMapSafe().contains("E-Cost")) {
21222139
op["E-Cost"] = plan.GetMapSafe().at("E-Cost");
2123-
}
2140+
}
21242141
if (plan.GetMapSafe().contains("E-Rows")) {
21252142
op["E-Rows"] = plan.GetMapSafe().at("E-Rows");
21262143
}
@@ -2195,8 +2212,8 @@ NJson::TJsonValue ReconstructQueryPlanRec(const NJson::TJsonValue& plan,
21952212
op.GetMapSafe().erase("Inputs");
21962213
}
21972214

2198-
if (op.GetMapSafe().contains("Input")
2199-
|| op.GetMapSafe().contains("ToFlow")
2215+
if (op.GetMapSafe().contains("Input")
2216+
|| op.GetMapSafe().contains("ToFlow")
22002217
|| op.GetMapSafe().contains("Member")
22012218
|| op.GetMapSafe().contains("AssumeSorted")
22022219
|| op.GetMapSafe().contains("Iterator")) {
@@ -2269,7 +2286,7 @@ double ComputeCpuTimes(NJson::TJsonValue& plan) {
22692286
}
22702287

22712288
void ComputeTotalRows(NJson::TJsonValue& plan) {
2272-
2289+
22732290
if (plan.GetMapSafe().contains("Plans")) {
22742291
for (auto& p : plan.GetMapSafe().at("Plans").GetArraySafe()) {
22752292
ComputeTotalRows(p);
@@ -2321,7 +2338,7 @@ NJson::TJsonValue SimplifyQueryPlan(NJson::TJsonValue& plan) {
23212338
"ToFlow",
23222339
"Member",
23232340
"AssumeSorted"
2324-
};
2341+
};
23252342

23262343
THashMap<int, NJson::TJsonValue> planIndex;
23272344
THashMap<TString, NJson::TJsonValue> precomputes;
@@ -2357,7 +2374,7 @@ TString AddSimplifiedPlan(const TString& planText, TIntrusivePtr<NOpt::TKqpOptim
23572374
optimizerStats["JoinsCount"] = optCtx->JoinsCount;
23582375
optimizerStats["EquiJoinsCount"] = optCtx->EquiJoinsCount;
23592376
simplifiedPlan["OptimizerStats"] = optimizerStats;
2360-
}
2377+
}
23612378
planJson["SimplifiedPlan"] = simplifiedPlan;
23622379

23632380
return planJson.GetStringRobust();

0 commit comments

Comments
 (0)