diff --git a/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp b/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp index d8276407daf9..3e4db1e71fbb 100644 --- a/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp +++ b/ydb/library/yql/providers/yt/provider/yql_yt_physical_optimize.cpp @@ -7435,6 +7435,14 @@ class TYtPhysicalOptProposalTransformer : public TOptimizeTransformerBase { if (!rowSpec.IsSorted()) { return node; } + TMaybeNode columns; + if (rowSpec.HasAuxColumns()) { + TSet members; + for (auto item: rowSpec.GetType()->GetItems()) { + members.insert(item->GetName()); + } + columns = TExprBase(ToAtomList(members, merge.Pos(), ctx)); + } auto mergeSection = merge.Input().Item(0); if (NYql::HasSettingsExcept(mergeSection.Settings().Ref(), EYtSettingType::KeyFilter | EYtSettingType::KeyFilter2)) { @@ -7467,7 +7475,10 @@ class TYtPhysicalOptProposalTransformer : public TOptimizeTransformerBase { .Input() .Add() .Paths() - .Add(path) + .Add() + .InitFrom(path) + .Columns(columns.IsValid() ? columns.Cast() : path.Columns()) + .Build() .Build() .Settings(section.Settings()) .Build() diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json index 5d5be56f2e8e..9c785c6ed7e2 100644 --- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json +++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json @@ -10079,6 +10079,13 @@ "uri": "https://{canondata_backend}/995452/54c61b947dc9448707d2846976eec313612f5c1d/resource.tar.gz#test_sql2yql.test_optimizers-yql-17413-topsort_/sql.yql" } ], + "test_sql2yql.test[optimizers-yql-17715_concat_sort_desc]": [ + { + "checksum": "baa57aee8a488863a299111fbbcb7649", + "size": 9265, + "uri": "https://{canondata_backend}/1814674/63e551151efd4c97040b5a29864cd326559dea48/resource.tar.gz#test_sql2yql.test_optimizers-yql-17715_concat_sort_desc_/sql.yql" + } + ], "test_sql2yql.test[optimizers-yql-2171_aggregate_desc_sort_and_extract]": [ { "checksum": "e46724f353c724da2d05f34ac86ebc12", @@ -27558,6 +27565,13 @@ "uri": "https://{canondata_backend}/995452/54c61b947dc9448707d2846976eec313612f5c1d/resource.tar.gz#test_sql_format.test_optimizers-yql-17413-topsort_/formatted.sql" } ], + "test_sql_format.test[optimizers-yql-17715_concat_sort_desc]": [ + { + "checksum": "c644b0dfcbb6e77f508129b548b94f16", + "size": 1181, + "uri": "https://{canondata_backend}/1942525/7ef0cd1bc632788b3cc025a801fdee39a608567b/resource.tar.gz#test_sql_format.test_optimizers-yql-17715_concat_sort_desc_/formatted.sql" + } + ], "test_sql_format.test[optimizers-yql-2171_aggregate_desc_sort_and_extract]": [ { "checksum": "ea7ad8b12dbf78644e2a7ac94e10159b", diff --git a/ydb/library/yql/tests/sql/suites/optimizers/yql-17715_concat_sort_desc.cfg b/ydb/library/yql/tests/sql/suites/optimizers/yql-17715_concat_sort_desc.cfg new file mode 100644 index 000000000000..bb349dd8abdd --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/optimizers/yql-17715_concat_sort_desc.cfg @@ -0,0 +1 @@ +providers yt diff --git a/ydb/library/yql/tests/sql/suites/optimizers/yql-17715_concat_sort_desc.sql b/ydb/library/yql/tests/sql/suites/optimizers/yql-17715_concat_sort_desc.sql new file mode 100644 index 000000000000..10cae73c84d1 --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/optimizers/yql-17715_concat_sort_desc.sql @@ -0,0 +1,43 @@ +use plato; + +$min_ts_for_stat_calculation = DateTime::ToSeconds(CurrentUtcDate() - Interval("P1D")); + +insert into @a +select * from ( + select 1ul as puid, CurrentUtcTimestamp() as timestamp, [1, 2] as segments, "a" as dummy1 +) +assume order by puid, timestamp desc; + +insert into @b +select * from ( + select 4ul as puid, CurrentUtcTimestamp() as timestamp, [3, 2] as segments, "a" as dummy1 +) +assume order by puid, timestamp desc; + +insert into @c +select * from ( + select 2ul as puid, Just(CurrentUtcTimestamp()) as timestamp, [2, 3] as segments, "a" as dummy2 +) +assume order by puid, timestamp desc; + +commit; + +$target_events = ( + SELECT + puid, + segments + FROM CONCAT(@a, @b, @c) + where DateTime::ToSeconds(`timestamp`) > $min_ts_for_stat_calculation +); + +$target_events = ( + SELECT DISTINCT * + FROM ( + SELECT * + FROM $target_events + FLATTEN LIST BY segments + ) + FLATTEN COLUMNS +); + +SELECT * FROM $target_events ORDER BY puid, segments; diff --git a/ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json index d897cd4e4d2d..80a65d613e4e 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json @@ -1548,6 +1548,27 @@ "uri": "https://{canondata_backend}/212715/e1bc1d6e31fa656365a738e65224a7c3f774bae6/resource.tar.gz#test.test_optimizers-yql-14279_keyextract_with_world_dep--Results_/results.txt" } ], + "test.test[optimizers-yql-17715_concat_sort_desc--Debug]": [ + { + "checksum": "9e3b07bd7f0d4ca1ed0449a35e10c886", + "size": 8178, + "uri": "https://{canondata_backend}/1031349/6ede2a86394410e62bf37c82ccf18a1c63b00a6b/resource.tar.gz#test.test_optimizers-yql-17715_concat_sort_desc--Debug_/opt.yql" + } + ], + "test.test[optimizers-yql-17715_concat_sort_desc--Plan]": [ + { + "checksum": "933d7040c97424d9408fbf5f81cdbf12", + "size": 20858, + "uri": "https://{canondata_backend}/1031349/6ede2a86394410e62bf37c82ccf18a1c63b00a6b/resource.tar.gz#test.test_optimizers-yql-17715_concat_sort_desc--Plan_/plan.txt" + } + ], + "test.test[optimizers-yql-17715_concat_sort_desc--Results]": [ + { + "checksum": "3568406b16079b54adbd0eab508c7ede", + "size": 1467, + "uri": "https://{canondata_backend}/1031349/6ede2a86394410e62bf37c82ccf18a1c63b00a6b/resource.tar.gz#test.test_optimizers-yql-17715_concat_sort_desc--Results_/results.txt" + } + ], "test.test[optimizers-yson_dup_serialize--Debug]": [ { "checksum": "d4c9ddd001cf2586aa1613ad3d6792c7",