Skip to content

Commit 448b74b

Browse files
authored
Print proper column names for wide connections (#7524)
1 parent 2b5467c commit 448b74b

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
}
@@ -1376,7 +1393,7 @@ class TxPlanSerializer {
13761393

13771394
TOperator op;
13781395
op.Properties["Name"] = name;
1379-
1396+
13801397
return AddOperator(planNode, name, std::move(op));
13811398
}
13821399

@@ -1728,8 +1745,8 @@ class TxPlanSerializer {
17281745

17291746
template <typename TReadTableSettings>
17301747
void AddReadTableSettings(
1731-
TOperator& op,
1732-
const TReadTableSettings& readTableSettings,
1748+
TOperator& op,
1749+
const TReadTableSettings& readTableSettings,
17331750
TTableRead& readInfo
17341751
) {
17351752
auto settings = NYql::TKqpReadTableSettings::Parse(readTableSettings);
@@ -1751,9 +1768,9 @@ class TxPlanSerializer {
17511768
}
17521769

17531770
if (settings.SequentialInFlight) {
1754-
op.Properties["Scan"] = "Sequential";
1771+
op.Properties["Scan"] = "Sequential";
17551772
} else {
1756-
op.Properties["Scan"] = "Parallel";
1773+
op.Properties["Scan"] = "Parallel";
17571774
}
17581775
}
17591776

@@ -1953,8 +1970,8 @@ TVector<NJson::TJsonValue> RemoveRedundantNodes(NJson::TJsonValue& plan, const T
19531970
return {plan};
19541971
}
19551972

1956-
NJson::TJsonValue ReconstructQueryPlanRec(const NJson::TJsonValue& plan,
1957-
int operatorIndex,
1973+
NJson::TJsonValue ReconstructQueryPlanRec(const NJson::TJsonValue& plan,
1974+
int operatorIndex,
19581975
const THashMap<int, NJson::TJsonValue>& planIndex,
19591976
const THashMap<TString, NJson::TJsonValue>& precomputes,
19601977
int& nodeCounter) {
@@ -1993,14 +2010,14 @@ NJson::TJsonValue ReconstructQueryPlanRec(const NJson::TJsonValue& plan,
19932010
NJson::TJsonValue newOps;
19942011
NJson::TJsonValue op;
19952012

1996-
op["Name"] = "TableLookup";
2013+
op["Name"] = "TableLookup";
19972014
op["Columns"] = plan.GetMapSafe().at("Columns");
19982015
op["LookupKeyColumns"] = plan.GetMapSafe().at("LookupKeyColumns");
19992016
op["Table"] = plan.GetMapSafe().at("Table");
20002017

20012018
if (plan.GetMapSafe().contains("E-Cost")) {
20022019
op["E-Cost"] = plan.GetMapSafe().at("E-Cost");
2003-
}
2020+
}
20042021
if (plan.GetMapSafe().contains("E-Rows")) {
20052022
op["E-Rows"] = plan.GetMapSafe().at("E-Rows");
20062023
}
@@ -2075,8 +2092,8 @@ NJson::TJsonValue ReconstructQueryPlanRec(const NJson::TJsonValue& plan,
20752092
op.GetMapSafe().erase("Inputs");
20762093
}
20772094

2078-
if (op.GetMapSafe().contains("Input")
2079-
|| op.GetMapSafe().contains("ToFlow")
2095+
if (op.GetMapSafe().contains("Input")
2096+
|| op.GetMapSafe().contains("ToFlow")
20802097
|| op.GetMapSafe().contains("Member")
20812098
|| op.GetMapSafe().contains("AssumeSorted")
20822099
|| op.GetMapSafe().contains("Iterator")) {
@@ -2149,7 +2166,7 @@ double ComputeCpuTimes(NJson::TJsonValue& plan) {
21492166
}
21502167

21512168
void ComputeTotalRows(NJson::TJsonValue& plan) {
2152-
2169+
21532170
if (plan.GetMapSafe().contains("Plans")) {
21542171
for (auto& p : plan.GetMapSafe().at("Plans").GetArraySafe()) {
21552172
ComputeTotalRows(p);
@@ -2201,7 +2218,7 @@ NJson::TJsonValue SimplifyQueryPlan(NJson::TJsonValue& plan) {
22012218
"ToFlow",
22022219
"Member",
22032220
"AssumeSorted"
2204-
};
2221+
};
22052222

22062223
THashMap<int, NJson::TJsonValue> planIndex;
22072224
THashMap<TString, NJson::TJsonValue> precomputes;
@@ -2237,7 +2254,7 @@ TString AddSimplifiedPlan(const TString& planText, TIntrusivePtr<NOpt::TKqpOptim
22372254
optimizerStats["JoinsCount"] = optCtx->JoinsCount;
22382255
optimizerStats["EquiJoinsCount"] = optCtx->EquiJoinsCount;
22392256
simplifiedPlan["OptimizerStats"] = optimizerStats;
2240-
}
2257+
}
22412258
planJson["SimplifiedPlan"] = simplifiedPlan;
22422259

22432260
return planJson.GetStringRobust();

0 commit comments

Comments
 (0)