aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorudovichenko-r <rvu@ydb.tech>2023-11-27 16:35:26 +0300
committerudovichenko-r <rvu@ydb.tech>2023-11-27 17:42:54 +0300
commitd682298dbe38d7c7a9021001a779c2cd5beaf39f (patch)
tree4af747de3ff56fb46b2f03ba88fa51fac10a8c96
parentfab1896e3382b8a943398e3ef93fc03ef3d98613 (diff)
downloadydb-d682298dbe38d7c7a9021001a779c2cd5beaf39f.tar.gz
[yt provider] Use input constraints to detect empty join
YQL-17203
-rw-r--r--ydb/library/yql/providers/yt/provider/yql_yt_join_impl.cpp6
-rw-r--r--ydb/library/yql/tests/sql/sql2yql/canondata/result.json14
-rw-r--r--ydb/library/yql/tests/sql/suites/join/late_mergejoin_on_empty.cfg2
-rw-r--r--ydb/library/yql/tests/sql/suites/join/late_mergejoin_on_empty.sql8
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json21
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json12
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json12
7 files changed, 59 insertions, 16 deletions
diff --git a/ydb/library/yql/providers/yt/provider/yql_yt_join_impl.cpp b/ydb/library/yql/providers/yt/provider/yql_yt_join_impl.cpp
index 0de79907dc..f998b1a527 100644
--- a/ydb/library/yql/providers/yt/provider/yql_yt_join_impl.cpp
+++ b/ydb/library/yql/providers/yt/provider/yql_yt_join_impl.cpp
@@ -2990,8 +2990,7 @@ TStatus RewriteYtEquiJoinLeaf(TYtEquiJoin equiJoin, TYtJoinNodeOp& op, TYtJoinNo
const auto disableOptimizers = state->Configuration->DisableOptimizers.Get().GetOrElse(TSet<TString>());
bool empty = false;
- if (leftTablesReady
- && 0ul == Accumulate(leftTables, 0ul, [] (ui64 sum, const TYtPathInfo::TPtr& p) { return sum + p->Table->Stat->RecordsCount; })
+ if (leftLeaf.Section.Ref().GetConstraint<TEmptyConstraintNode>() != nullptr
&& AllOf(leftTables, [](const TYtPathInfo::TPtr& p) { return !p->Table->Meta->IsDynamic; })
) {
if (joinType == "Inner" || joinType == "Left" || joinType == "LeftOnly" || joinType == "LeftSemi" || joinType == "RightSemi" || joinType == "Cross") {
@@ -3000,8 +2999,7 @@ TStatus RewriteYtEquiJoinLeaf(TYtEquiJoin equiJoin, TYtJoinNodeOp& op, TYtJoinNo
}
}
if (!empty
- && rightTablesReady
- && 0ul == Accumulate(rightTables, 0ul, [] (ui64 sum, const TYtPathInfo::TPtr& p) { return sum + p->Table->Stat->RecordsCount; })
+ && rightLeaf.Section.Ref().GetConstraint<TEmptyConstraintNode>() != nullptr
&& AllOf(rightTables, [](const TYtPathInfo::TPtr& p) { return !p->Table->Meta->IsDynamic; })
) {
if (joinType == "Inner" || joinType == "Right" || joinType == "RightOnly" || joinType == "RightSemi" || joinType == "LeftSemi" || joinType == "Cross") {
diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json
index 3ddced9078..ea86bdf806 100644
--- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json
+++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json
@@ -7489,6 +7489,13 @@
"uri": "https://{canondata_backend}/1871182/6b10ad6d9884e5faf3a77187ffb9b38b59b46458/resource.tar.gz#test_sql2yql.test_join-join_without_correlation_names_/sql.yql"
}
],
+ "test_sql2yql.test[join-late_mergejoin_on_empty]": [
+ {
+ "checksum": "306edbbd807e436d809652973cb18831",
+ "size": 3594,
+ "uri": "https://{canondata_backend}/1784117/975194d055850440cbaae09f59ca0f03de94515f/resource.tar.gz#test_sql2yql.test_join-late_mergejoin_on_empty_/sql.yql"
+ }
+ ],
"test_sql2yql.test[join-left_all]": [
{
"checksum": "946b4555434ed50ba5433293741c3d0a",
@@ -24555,6 +24562,13 @@
"uri": "https://{canondata_backend}/1599023/4bd7e6892a9762eec433e60bda88f20cddadc74c/resource.tar.gz#test_sql_format.test_join-join_without_correlation_names_/formatted.sql"
}
],
+ "test_sql_format.test[join-late_mergejoin_on_empty]": [
+ {
+ "checksum": "dd32564d0af2a297911f82a1a75e4f66",
+ "size": 387,
+ "uri": "https://{canondata_backend}/1784117/975194d055850440cbaae09f59ca0f03de94515f/resource.tar.gz#test_sql_format.test_join-late_mergejoin_on_empty_/formatted.sql"
+ }
+ ],
"test_sql_format.test[join-left_all]": [
{
"checksum": "f3d3d24c19d5270d91782eaf76f85a6a",
diff --git a/ydb/library/yql/tests/sql/suites/join/late_mergejoin_on_empty.cfg b/ydb/library/yql/tests/sql/suites/join/late_mergejoin_on_empty.cfg
new file mode 100644
index 0000000000..04719e2ed1
--- /dev/null
+++ b/ydb/library/yql/tests/sql/suites/join/late_mergejoin_on_empty.cfg
@@ -0,0 +1,2 @@
+in Input input1.txt
+providers yt
diff --git a/ydb/library/yql/tests/sql/suites/join/late_mergejoin_on_empty.sql b/ydb/library/yql/tests/sql/suites/join/late_mergejoin_on_empty.sql
new file mode 100644
index 0000000000..b0dd13c10d
--- /dev/null
+++ b/ydb/library/yql/tests/sql/suites/join/late_mergejoin_on_empty.sql
@@ -0,0 +1,8 @@
+use plato;
+PRAGMA DisableSimpleColumns;
+pragma yt.JoinMergeTablesLimit="100";
+
+select * from
+(select * from Input where key < "020") as a
+left only join (select subkey from Input where key < "010") as b on a.subkey = b.subkey
+join /*+ merge() */ (select key, value from Input) as c on a.key = c.key
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
index ddc7b3b1c1..700067b4ff 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
@@ -2251,6 +2251,27 @@
"uri": "file://test.test_join-join_without_correlation_and_dict_access--Results_/extracted"
}
],
+ "test.test[join-late_mergejoin_on_empty--Debug]": [
+ {
+ "checksum": "53c277c78d21e52c884818cf03910214",
+ "size": 2737,
+ "uri": "https://{canondata_backend}/1936842/2648c2f8ea766cd50432d83f80312501659b2afe/resource.tar.gz#test.test_join-late_mergejoin_on_empty--Debug_/opt.yql"
+ }
+ ],
+ "test.test[join-late_mergejoin_on_empty--Plan]": [
+ {
+ "checksum": "27f6a17c5412f95197836c66a1ac425c",
+ "size": 5548,
+ "uri": "https://{canondata_backend}/1936842/2648c2f8ea766cd50432d83f80312501659b2afe/resource.tar.gz#test.test_join-late_mergejoin_on_empty--Plan_/plan.txt"
+ }
+ ],
+ "test.test[join-late_mergejoin_on_empty--Results]": [
+ {
+ "checksum": "c9e9aa509d80afeedd4314a69bfbfb81",
+ "size": 1634,
+ "uri": "https://{canondata_backend}/1936842/2648c2f8ea766cd50432d83f80312501659b2afe/resource.tar.gz#test.test_join-late_mergejoin_on_empty--Results_/results.txt"
+ }
+ ],
"test.test[join-left_only_with_other--Debug]": [
{
"checksum": "596336b65b700ec04833a6ccbab156ae",
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json
index 3ee2c4d70a..61a73ed420 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json
@@ -4712,16 +4712,16 @@
],
"test.test[tpch-q15-default.txt-Debug]": [
{
- "checksum": "77ec13c8e885fcddd952a463890d3d98",
- "size": 6832,
- "uri": "https://{canondata_backend}/1931696/31bac4891cd58539c52c9501ffbc4900a3bdf626/resource.tar.gz#test.test_tpch-q15-default.txt-Debug_/opt.yql"
+ "checksum": "cec4d1db686e561cada1094e26e47a24",
+ "size": 6092,
+ "uri": "https://{canondata_backend}/1784117/983ca2360ac31c365938bcff5f15cccb51a3c68c/resource.tar.gz#test.test_tpch-q15-default.txt-Debug_/opt.yql"
}
],
"test.test[tpch-q15-default.txt-Plan]": [
{
- "checksum": "977956b4d5bf8ca40d24b749bcc66c0f",
- "size": 11608,
- "uri": "https://{canondata_backend}/1900335/464660feede25e66acd7fc28278976edc54054b2/resource.tar.gz#test.test_tpch-q15-default.txt-Plan_/plan.txt"
+ "checksum": "da4939e401c68b6ddb9a3f316a073be2",
+ "size": 10685,
+ "uri": "https://{canondata_backend}/1784117/983ca2360ac31c365938bcff5f15cccb51a3c68c/resource.tar.gz#test.test_tpch-q15-default.txt-Plan_/plan.txt"
}
],
"test.test[tpch-q15-default.txt-Results]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json
index e08d90da97..b2d0e77df8 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json
@@ -3936,16 +3936,16 @@
],
"test.test[pg-tpch-q15-default.txt-Debug]": [
{
- "checksum": "29ec50eb7da681f4d5c8976ff3116907",
- "size": 8159,
- "uri": "https://{canondata_backend}/1817427/7b1f6441d0dff584af3571b12d690a6d9a678a71/resource.tar.gz#test.test_pg-tpch-q15-default.txt-Debug_/opt.yql"
+ "checksum": "611865b874769778b378f7ed6b111e10",
+ "size": 7515,
+ "uri": "https://{canondata_backend}/995452/9b59108eaef82bae6928efcaeab50e441de256db/resource.tar.gz#test.test_pg-tpch-q15-default.txt-Debug_/opt.yql"
}
],
"test.test[pg-tpch-q15-default.txt-Plan]": [
{
- "checksum": "a4766d089aff4facbecbb1ec5a868518",
- "size": 11629,
- "uri": "https://{canondata_backend}/1942525/3cd7eff9fa3f7bd2a9ad4fae5b487ed08c94d8e7/resource.tar.gz#test.test_pg-tpch-q15-default.txt-Plan_/plan.txt"
+ "checksum": "329cac6de52744d0274c26a6b794ec8b",
+ "size": 10566,
+ "uri": "https://{canondata_backend}/995452/9b59108eaef82bae6928efcaeab50e441de256db/resource.tar.gz#test.test_pg-tpch-q15-default.txt-Plan_/plan.txt"
}
],
"test.test[pg-tpch-q15-default.txt-Results]": [