aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorulya-sidorina <yulia@ydb.tech>2022-07-07 18:54:51 +0300
committerulya-sidorina <yulia@ydb.tech>2022-07-07 18:54:51 +0300
commit1ebea3a426fe7f05306ac0daeb294623e3f9db6a (patch)
tree79b4d4e0a601ea7c57c0d7f8c30af24544a2f626
parent85e91b50e83808d4a04567711f77f21ccf0490fa (diff)
downloadydb-1ebea3a426fe7f05306ac0daeb294623e3f9db6a.tar.gz
add CnMerge info to query plan
refactor(kqp_query_plan): add sort columns to query plan for merge connection
-rw-r--r--ydb/core/kqp/prepare/kqp_query_plan.cpp11
-rw-r--r--ydb/core/kqp/ut/kqp_explain_ut.cpp31
-rw-r--r--ydb/core/kqp/ut/kqp_merge_connection_ut.cpp4
-rw-r--r--ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan9
-rw-r--r--ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_table_types.script-script_/table_types.script.plan3
-rw-r--r--ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_multi_usage_key.script-script_/write_multi_usage_key.script.plan8
-rw-r--r--ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_write_group_by.script-script_/write_write_group_by.script.plan8
7 files changed, 64 insertions, 10 deletions
diff --git a/ydb/core/kqp/prepare/kqp_query_plan.cpp b/ydb/core/kqp/prepare/kqp_query_plan.cpp
index 9799a9a394..9d4c6a515d 100644
--- a/ydb/core/kqp/prepare/kqp_query_plan.cpp
+++ b/ydb/core/kqp/prepare/kqp_query_plan.cpp
@@ -696,6 +696,16 @@ private:
for (const auto& column : hashShuffle.Cast().KeyColumns()) {
keyColumns.AppendValue(TString(column.Value()));
}
+ } else if (auto merge = inputCn.Maybe<TDqCnMerge>()) {
+ inputPlanNode.TypeName = "Merge";
+ auto& sortColumns = inputPlanNode.NodeInfo["SortColumns"];
+ for (const auto& sortColumn : merge.Cast().SortColumns()) {
+ TStringBuilder sortColumnDesc;
+ sortColumnDesc << sortColumn.Column().Value() << " ("
+ << sortColumn.SortDirection().Value() << ")";
+
+ sortColumns.AppendValue(sortColumnDesc);
+ }
} else {
inputPlanNode.TypeName = inputCn.Ref().Content();
}
@@ -1557,6 +1567,7 @@ TString SerializeTxPlans(const TVector<const TString>& txPlans, const TString co
writer.WriteKey("Plan");
writer.BeginObject();
writer.WriteKey("Node Type").WriteString("Query");
+ writer.WriteKey("PlanNodeType").WriteString("Query");
writer.WriteKey("Plans");
writer.BeginList();
diff --git a/ydb/core/kqp/ut/kqp_explain_ut.cpp b/ydb/core/kqp/ut/kqp_explain_ut.cpp
index 7edaa89ba4..cd926b6aeb 100644
--- a/ydb/core/kqp/ut/kqp_explain_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_explain_ut.cpp
@@ -712,6 +712,37 @@ Y_UNIT_TEST_SUITE(KqpExplain) {
<< " but received: " << filter.GetMapSafe().at("Predicate"));
}
}
+
+ Y_UNIT_TEST_TWIN(MergeConnection, UseSessionActor) {
+ auto kikimr = KikimrRunnerEnableSessionActor(UseSessionActor);
+ TStreamExecScanQuerySettings settings;
+ settings.Explain(true);
+
+ auto db = kikimr.GetTableClient();
+
+ auto it = db.StreamExecuteScanQuery(R"(
+ SELECT * FROM `/Root/KeyValue` ORDER BY Key;
+ )", settings).GetValueSync();
+
+ auto res = CollectStreamResult(it);
+ UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString());
+ UNIT_ASSERT(res.PlanJson);
+
+ Cerr << res.PlanJson << Endl;
+
+ NJson::TJsonValue plan;
+ NJson::ReadJsonTree(*res.PlanJson, &plan, true);
+
+ auto merge = FindPlanNodeByKv(
+ plan,
+ "Node Type",
+ "Merge"
+ );
+ UNIT_ASSERT(merge.IsDefined());
+ const auto& sortColumns = merge.GetMapSafe().at("SortColumns").GetArraySafe();
+ UNIT_ASSERT(sortColumns.size() == 1);
+ UNIT_ASSERT(sortColumns.at(0) == "Key (Asc)");
+ }
}
} // namespace NKqp
diff --git a/ydb/core/kqp/ut/kqp_merge_connection_ut.cpp b/ydb/core/kqp/ut/kqp_merge_connection_ut.cpp
index 8ba8607165..5ad531a8d7 100644
--- a/ydb/core/kqp/ut/kqp_merge_connection_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_merge_connection_ut.cpp
@@ -77,7 +77,7 @@ void CheckPlanForMergeCn(const TMaybe<TString>& planJson, bool hasChildSort, con
NJson::TJsonValue plan;
NJson::ReadJsonTree(*planJson, &plan, /* throwOnError */ true);
- auto mergeCn = FindPlanNodeByKv(plan, "Node Type", "DqCnMerge");
+ auto mergeCn = FindPlanNodeByKv(plan, "Node Type", "Merge");
UNIT_ASSERT(mergeCn.IsDefined());
auto childSort = FindPlanNodeByKv(mergeCn, "Name", sortOp);
@@ -90,7 +90,7 @@ void CheckPlanForMergeCn(const TMaybe<TString>& planJson, bool hasChildSort, con
// Check that TopSort has no Merge Connection in children
auto topSort = FindPlanNodeByKv(plan, "Name", sortOp);
if (topSort.IsDefined()) {
- mergeCn = FindPlanNodeByKv(topSort, "Node Type", "DqCnMerge");
+ mergeCn = FindPlanNodeByKv(topSort, "Node Type", "Merge");
UNIT_ASSERT(!mergeCn.IsDefined());
}
}
diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan
index fc376fbbb7..a0685b27cd 100644
--- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan
+++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan
@@ -137,7 +137,8 @@
"PlanNodeType": "ResultSet"
}
],
- "Node Type": "Query"
+ "Node Type": "Query",
+ "PlanNodeType": "Query"
}
},
{
@@ -252,7 +253,8 @@
"PlanNodeType": "ResultSet"
}
],
- "Node Type": "Query"
+ "Node Type": "Query",
+ "PlanNodeType": "Query"
}
},
{
@@ -296,7 +298,8 @@
"PlanNodeType": "ResultSet"
}
],
- "Node Type": "Query"
+ "Node Type": "Query",
+ "PlanNodeType": "Query"
}
},
{
diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_table_types.script-script_/table_types.script.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_table_types.script-script_/table_types.script.plan
index 23a6480962..2af3cb66ba 100644
--- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_table_types.script-script_/table_types.script.plan
+++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_table_types.script-script_/table_types.script.plan
@@ -144,7 +144,8 @@
"PlanNodeType": "ResultSet"
}
],
- "Node Type": "Query"
+ "Node Type": "Query",
+ "PlanNodeType": "Query"
}
}
]
diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_multi_usage_key.script-script_/write_multi_usage_key.script.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_multi_usage_key.script-script_/write_multi_usage_key.script.plan
index 9f8c3eb38b..ac73488fab 100644
--- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_multi_usage_key.script-script_/write_multi_usage_key.script.plan
+++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_multi_usage_key.script-script_/write_multi_usage_key.script.plan
@@ -92,7 +92,10 @@
"Node Type": "Limit-TableFullScan"
}
],
- "Node Type": "DqCnMerge",
+ "Node Type": "Merge",
+ "SortColumns": [
+ "Name (Asc)"
+ ],
"PlanNodeType": "Connection"
}
],
@@ -109,7 +112,8 @@
"PlanNodeType": "ResultSet"
}
],
- "Node Type": "Query"
+ "Node Type": "Query",
+ "PlanNodeType": "Query"
}
}
]
diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_write_group_by.script-script_/write_write_group_by.script.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_write_group_by.script-script_/write_write_group_by.script.plan
index 2c7ad86471..6bb6edf82e 100644
--- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_write_group_by.script-script_/write_write_group_by.script.plan
+++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_write_group_by.script-script_/write_write_group_by.script.plan
@@ -95,7 +95,10 @@
"Node Type": "Limit-TableFullScan"
}
],
- "Node Type": "DqCnMerge",
+ "Node Type": "Merge",
+ "SortColumns": [
+ "Group (Asc)"
+ ],
"PlanNodeType": "Connection"
}
],
@@ -112,7 +115,8 @@
"PlanNodeType": "ResultSet"
}
],
- "Node Type": "Query"
+ "Node Type": "Query",
+ "PlanNodeType": "Query"
}
}
]