diff options
author | udovichenko-r <rvu@ydb.tech> | 2023-11-27 16:35:26 +0300 |
---|---|---|
committer | udovichenko-r <rvu@ydb.tech> | 2023-11-27 17:42:54 +0300 |
commit | d682298dbe38d7c7a9021001a779c2cd5beaf39f (patch) | |
tree | 4af747de3ff56fb46b2f03ba88fa51fac10a8c96 | |
parent | fab1896e3382b8a943398e3ef93fc03ef3d98613 (diff) | |
download | ydb-d682298dbe38d7c7a9021001a779c2cd5beaf39f.tar.gz |
[yt provider] Use input constraints to detect empty join
YQL-17203
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]": [ |