diff options
author | vvvv <vvvv@yandex-team.com> | 2024-12-28 18:52:49 +0300 |
---|---|---|
committer | vvvv <vvvv@yandex-team.com> | 2024-12-28 19:08:05 +0300 |
commit | 8edc031b752662cb60f411a2d7d3d6c162d801cf (patch) | |
tree | c78646d3f4c02c56d8e5659af94aa338df9e5447 | |
parent | 4e51cb9d47a86fee833396ad0cdfb8e84ec8166c (diff) | |
download | ydb-8edc031b752662cb60f411a2d7d3d6c162d801cf.tar.gz |
Change "devtools/contrib/piglet/projects/ydblib/config.yaml"
commit_hash:bf8be6eaf53bc3065d37ec3eeb7b664ca9d6b76d
3807 files changed, 44668 insertions, 0 deletions
diff --git a/yt/yql/tests/sql/suites/action/action_eval_cluster_and_table.sql b/yt/yql/tests/sql/suites/action/action_eval_cluster_and_table.sql new file mode 100644 index 0000000000..414f54ac9d --- /dev/null +++ b/yt/yql/tests/sql/suites/action/action_eval_cluster_and_table.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ +$cluster = "pla" || "to"; +$name = "In" || "put"; + +SELECT + count(*) +FROM yt:$cluster.$name; diff --git a/yt/yql/tests/sql/suites/action/action_eval_cluster_table.cfg b/yt/yql/tests/sql/suites/action/action_eval_cluster_table.cfg new file mode 100644 index 0000000000..386ab9ac7f --- /dev/null +++ b/yt/yql/tests/sql/suites/action/action_eval_cluster_table.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/action_eval_cluster_table.sql b/yt/yql/tests/sql/suites/action/action_eval_cluster_table.sql new file mode 100644 index 0000000000..67e2af6063 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/action_eval_cluster_table.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +/* postgres can not */ +$foo = CAST(Unicode::ToLower("PLATO"u) AS String); + +insert into yt:$foo.Output +select * +from yt:$foo.Input +where key < "100" +order by key; diff --git a/yt/yql/tests/sql/suites/action/action_eval_cluster_table_for.cfg b/yt/yql/tests/sql/suites/action/action_eval_cluster_table_for.cfg new file mode 100644 index 0000000000..386ab9ac7f --- /dev/null +++ b/yt/yql/tests/sql/suites/action/action_eval_cluster_table_for.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/action_eval_cluster_table_for.sql b/yt/yql/tests/sql/suites/action/action_eval_cluster_table_for.sql new file mode 100644 index 0000000000..56554226fe --- /dev/null +++ b/yt/yql/tests/sql/suites/action/action_eval_cluster_table_for.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +define action $a($x) as + $foo = CAST(Unicode::ToLower($x) AS String); + + insert into yt:$foo.Output + select * + from yt:$foo.Input + where key < "100" + order by key; + +end define; + +evaluate for $i in AsList("PLATO"u) do $a($i); diff --git a/yt/yql/tests/sql/suites/action/action_eval_cluster_use.cfg b/yt/yql/tests/sql/suites/action/action_eval_cluster_use.cfg new file mode 100644 index 0000000000..386ab9ac7f --- /dev/null +++ b/yt/yql/tests/sql/suites/action/action_eval_cluster_use.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/action_eval_cluster_use.sql b/yt/yql/tests/sql/suites/action/action_eval_cluster_use.sql new file mode 100644 index 0000000000..7635ba2d17 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/action_eval_cluster_use.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +$foo = CAST(Unicode::ToLower("PLATO"u) AS String); +use yt:$foo; + +insert into Output +select * +from Input +where key < "100" +order by key; diff --git a/yt/yql/tests/sql/suites/action/action_eval_cluster_use_compact_named_exprs.cfg b/yt/yql/tests/sql/suites/action/action_eval_cluster_use_compact_named_exprs.cfg new file mode 100644 index 0000000000..fccca71d35 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/action_eval_cluster_use_compact_named_exprs.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/action/action_eval_cluster_use_compact_named_exprs.sql b/yt/yql/tests/sql/suites/action/action_eval_cluster_use_compact_named_exprs.sql new file mode 100644 index 0000000000..08994c5615 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/action_eval_cluster_use_compact_named_exprs.sql @@ -0,0 +1,20 @@ +/* yt can not */ +pragma CompactNamedExprs; +$foo = CAST(Unicode::ToLower("PLATO"u) AS String); + +insert into yt:$foo.Output +select * +from yt:$foo.Input +where key < "100" +order by key; + +define action $bar() as + $x = CAST(Unicode::ToLower("PLaTO"u) AS String); + insert into yt:$x.Output + select * + from yt:$foo.Input + where key < "100" + order by key; +end define; + +do $bar(); diff --git a/yt/yql/tests/sql/suites/action/action_nested_query.sql b/yt/yql/tests/sql/suites/action/action_nested_query.sql new file mode 100644 index 0000000000..0d6e87d794 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/action_nested_query.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +define action $action() as + $sub = (select * from Input); + select * from $sub order by key; +end define; + +do $action(); diff --git a/yt/yql/tests/sql/suites/action/combine_subqueries_with_table_param.sql b/yt/yql/tests/sql/suites/action/combine_subqueries_with_table_param.sql new file mode 100644 index 0000000000..542493b3af --- /dev/null +++ b/yt/yql/tests/sql/suites/action/combine_subqueries_with_table_param.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$combineQueries = ($query, $list) -> { + RETURN EvaluateCode(LambdaCode(($world) -> { + $queries = ListMap($list, ($arg)->{ + RETURN FuncCode("Apply", QuoteCode($query), $world, ReprCode($arg)) + }); + + RETURN FuncCode("UnionAll", $queries); + })); +}; + +DEFINE SUBQUERY $calc($table) AS + SELECT * + FROM $table; +END DEFINE; + +$fullQuery = $combineQueries($calc, AsList("Input", "Input")); + +SELECT count(*) FROM $fullQuery(); diff --git a/yt/yql/tests/sql/suites/action/default.cfg b/yt/yql/tests/sql/suites/action/default.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/default.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/action/dep_world_action_quote.sql b/yt/yql/tests/sql/suites/action/dep_world_action_quote.sql new file mode 100644 index 0000000000..6375e06aee --- /dev/null +++ b/yt/yql/tests/sql/suites/action/dep_world_action_quote.sql @@ -0,0 +1,20 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +DEFINE ACTION $aaa($z) as + +$table = $z.0; +$k = (select min(key || $z.1) from $table); + +DEFINE ACTION $bbb($n) AS + SELECT $n || $k FROM $table; +END DEFINE; + +$ccc = EvaluateCode(QuoteCode($bbb)); +DO $ccc("1"); + +END DEFINE; + +EVALUATE FOR $z IN AsList(AsTuple("Input","foo"),AsTuple("Input","bar")) + DO $aaa($z); diff --git a/yt/yql/tests/sql/suites/action/dep_world_quote_code.sql b/yt/yql/tests/sql/suites/action/dep_world_quote_code.sql new file mode 100644 index 0000000000..6188630666 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/dep_world_quote_code.sql @@ -0,0 +1,31 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$combineQueries = ($query, $list) -> { + RETURN EvaluateCode(LambdaCode(($world) -> { + $queries = ListMap($list, ($arg) -> { + RETURN FuncCode("Apply", QuoteCode($query), $world, ReprCode($arg)) + }); + + RETURN FuncCode("Extend", $queries); + })); +}; + +DEFINE ACTION $aaa($z) as + +$k = (select count(*) from $z); + +DEFINE SUBQUERY $sub($n) AS + SELECT $n + $k FROM $z; +END DEFINE; + +$fullQuery = $combineQueries($sub, ListFromRange(0, 10)); +SELECT * FROM $fullQuery(); + +END DEFINE; + +EVALUATE FOR $z IN AsList("Input") + DO $aaa($z); + +DO $aaa("Input"); diff --git a/yt/yql/tests/sql/suites/action/discard.sql b/yt/yql/tests/sql/suites/action/discard.sql new file mode 100644 index 0000000000..ccdac00de8 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/discard.sql @@ -0,0 +1,32 @@ +/* syntax version 1 */ +/* postgres can not */ +define subquery $a() as +$_x = select 1; +discard +select ensure(1, true); +select 2; +$_y = select 2; +end define; + +process $a(); + + +define subquery $b() as +$f1 = ($row)->(<|a:1,b:$row.value|>); +$f2 = ($row)->(<|a:2,b:$row.value|>); +discard +process plato.Input using $f1(TableRow()); +process plato.Input using $f2(TableRow()); +end define; + +select * from $b() order by b limit 1; + +define subquery $c() as +$f1 = ($key,$_)->(<|a:1,b:$key|>); +$f2 = ($key,$_)->(<|a:2,b:$key|>); +discard +reduce plato.Input on key using $f1(TableRow()); +reduce plato.Input on key using $f2(TableRow()); +end define; + +select * from $c() order by b limit 1; diff --git a/yt/yql/tests/sql/suites/action/empty_do.sql b/yt/yql/tests/sql/suites/action/empty_do.sql new file mode 100644 index 0000000000..3b30a5803c --- /dev/null +++ b/yt/yql/tests/sql/suites/action/empty_do.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +do empty_action(); + +$action1 = empty_action; + +do $action1(); + +$action2 = ($a,$_b)->{ + return $a; +}; + +do $action2(12); diff --git a/yt/yql/tests/sql/suites/action/eval_anon_table.cfg b/yt/yql/tests/sql/suites/action/eval_anon_table.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_anon_table.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/action/eval_anon_table.sql b/yt/yql/tests/sql/suites/action/eval_anon_table.sql new file mode 100644 index 0000000000..449fbd3b83 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_anon_table.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$a = CAST(Unicode::ToUpper("T"u) AS String) || "able"; +$b = CAST(Unicode::ToUpper("T"u) AS String) || "able"; + +insert into @$a +select 1 as x; + +commit; + +select * from @$b; diff --git a/yt/yql/tests/sql/suites/action/eval_atom_wrong_type_expr.cfg b/yt/yql/tests/sql/suites/action/eval_atom_wrong_type_expr.cfg new file mode 100644 index 0000000000..bc27f4ed21 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_atom_wrong_type_expr.cfg @@ -0,0 +1,3 @@ +xfail +providers yt + diff --git a/yt/yql/tests/sql/suites/action/eval_atom_wrong_type_expr.sql b/yt/yql/tests/sql/suites/action/eval_atom_wrong_type_expr.sql new file mode 100644 index 0000000000..eeda7684a3 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_atom_wrong_type_expr.sql @@ -0,0 +1,8 @@ +/* yt can not */ +/* custom error: Expected data or optional of data, but got: List<String> */ +use plato; + +$n = ["foo"]; + +select * from $n; + diff --git a/yt/yql/tests/sql/suites/action/eval_atom_wrong_type_param.cfg b/yt/yql/tests/sql/suites/action/eval_atom_wrong_type_param.cfg new file mode 100644 index 0000000000..bc27f4ed21 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_atom_wrong_type_param.cfg @@ -0,0 +1,3 @@ +xfail +providers yt + diff --git a/yt/yql/tests/sql/suites/action/eval_atom_wrong_type_param.sql b/yt/yql/tests/sql/suites/action/eval_atom_wrong_type_param.sql new file mode 100644 index 0000000000..78990decb9 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_atom_wrong_type_param.sql @@ -0,0 +1,8 @@ +/* yt can not */ +/* custom error: Expected data or optional of data, but got optional of: List<String> */ +use plato; + +declare $n as List<String>?; + +select * from $n; + diff --git a/yt/yql/tests/sql/suites/action/eval_column.cfg b/yt/yql/tests/sql/suites/action/eval_column.cfg new file mode 100644 index 0000000000..c6596e362c --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_column.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/eval_column.sql b/yt/yql/tests/sql/suites/action/eval_column.sql new file mode 100644 index 0000000000..98838fb5fe --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_column.sql @@ -0,0 +1,34 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$x = CAST(Unicode::ToLower("foo"u) AS String); +select AsStruct("1" as foo, 2 as bar).$x; + +$x = CAST(Unicode::ToLower("value"u) AS String); +select key, t.$x from Input as t order by key; + +$x = CAST(Unicode::ToLower("value"u) AS String); +select key, TableRow().$x from Input order by key; + + +$x = CAST(Unicode::ToLower("value"u) AS String); +select * from Input as t order by t.$x; + +$x = CAST(Unicode::ToLower("value"u) AS String); +$y = CAST(Unicode::ToLower("key"u) AS String); + +select x,count(*) from Input as t group by t.$x as x +having min(t.$y) != "" +order by x; + +select a.$x as x,b.$y as y from Input as a join Input as b on (a.$x = b.$x) +order by x; + +select a.$x as x,b.$y as y from Input as a join Input as b using ($x) +order by x; + +select p, value, lag(value) over w as lag +from Input +window w as (partition by TableRow().$y as p order by TableRow().$x) +order by p, value; diff --git a/yt/yql/tests/sql/suites/action/eval_drop.cfg b/yt/yql/tests/sql/suites/action/eval_drop.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_drop.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/action/eval_drop.sql b/yt/yql/tests/sql/suites/action/eval_drop.sql new file mode 100644 index 0000000000..c5275e2801 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_drop.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$path = (select min(Path) from folder("")); + +drop table $path;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/action/eval_each_input_table.sql b/yt/yql/tests/sql/suites/action/eval_each_input_table.sql new file mode 100644 index 0000000000..45514cb512 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_each_input_table.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$a = ListMap(ListFromRange(0,2), ($_x)->(CAST(Unicode::ToUpper("i"u) AS String) || "nput")); +select count(*) FROM each($a view raw); + +$a = ListMap(ListFromRange(0,1), ($_x)->(CAST(Unicode::ToUpper("i"u) AS String) || "nput")); +select count(*) FROM each_strict($a); diff --git a/yt/yql/tests/sql/suites/action/eval_filter.cfg b/yt/yql/tests/sql/suites/action/eval_filter.cfg new file mode 100644 index 0000000000..c6596e362c --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_filter.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/eval_filter.sql b/yt/yql/tests/sql/suites/action/eval_filter.sql new file mode 100644 index 0000000000..7fb11ebe59 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_filter.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$arg1 = "" || ""; +$arg2 = ($_item)->{return true}; +$arg3 = "" || ""; +$arg4 = "" || "raw"; + +SELECT + count(*) +FROM FILTER($arg1,$arg2,$arg3,$arg4); diff --git a/yt/yql/tests/sql/suites/action/eval_folder.cfg b/yt/yql/tests/sql/suites/action/eval_folder.cfg new file mode 100644 index 0000000000..9d0a494107 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_folder.cfg @@ -0,0 +1 @@ +in Input input_attrs.txt diff --git a/yt/yql/tests/sql/suites/action/eval_folder.sql b/yt/yql/tests/sql/suites/action/eval_folder.sql new file mode 100644 index 0000000000..fbe663bcac --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_folder.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +SELECT * FROM Folder(``,"foo;bar"); diff --git a/yt/yql/tests/sql/suites/action/eval_folder_via_file.cfg b/yt/yql/tests/sql/suites/action/eval_folder_via_file.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_folder_via_file.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/action/eval_folder_via_file.sql b/yt/yql/tests/sql/suites/action/eval_folder_via_file.sql new file mode 100644 index 0000000000..2121ea69c2 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_folder_via_file.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +pragma yt.FolderInlineItemsLimit="0"; + +$list = ( + select aggregate_list(Path) from ( + select Path from folder("") + where Type = "table" + limit 30 + ) +); + +select + count(*) +from + each($list) diff --git a/yt/yql/tests/sql/suites/action/eval_folder_via_file_in_job.cfg b/yt/yql/tests/sql/suites/action/eval_folder_via_file_in_job.cfg new file mode 100644 index 0000000000..289c4251bb --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_folder_via_file_in_job.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf python3_udf diff --git a/yt/yql/tests/sql/suites/action/eval_folder_via_file_in_job.sql b/yt/yql/tests/sql/suites/action/eval_folder_via_file_in_job.sql new file mode 100644 index 0000000000..10ed2ec09c --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_folder_via_file_in_job.sql @@ -0,0 +1,25 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +pragma yt.FolderInlineItemsLimit="0"; + +$script = @@ +def f(s): + return True +@@; + +$callable = Python3::f(Callable<(String)->Bool>,$script); + +$list = ( + select aggregate_list(Path) from ( + select Path from folder("") + where Type = "table" and $callable(Path) + limit 30 + ) +); + +select + count(*) +from + each($list) diff --git a/yt/yql/tests/sql/suites/action/eval_for.sql b/yt/yql/tests/sql/suites/action/eval_for.sql new file mode 100644 index 0000000000..71427f2fde --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_for.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +define action $action1($x) as + select $x; +end define; + +$f = ($i)->{ + return CAST(Unicode::ToUpper(cast($i as Utf8)) AS String); +}; + +evaluate for $i in ListMap(ListFromRange(0,3),$f) do $action1($i); + +evaluate for $i in ListMap(ListFromRange(0,0),$f) do $action1($i) else do $action1(100); + +evaluate for $i in ListMap(ListFromRange(0,0),$f) do $action1($i); + +evaluate for $i in Yql::Map(1/1,($x)->{return AsList($x)}) do $action1($i); + +evaluate for $i in Yql::Map(1/0,($x)->{return AsList($x)}) do $action1($i); diff --git a/yt/yql/tests/sql/suites/action/eval_for_over_subquery.sql b/yt/yql/tests/sql/suites/action/eval_for_over_subquery.sql new file mode 100644 index 0000000000..198b80b9a5 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_for_over_subquery.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$list = ( + select aggregate_list(key) from Input +); + +define action $echo($x) as + select $x; +end define; + +evaluate for $a in $list do $echo($a); diff --git a/yt/yql/tests/sql/suites/action/eval_if.sql b/yt/yql/tests/sql/suites/action/eval_if.sql new file mode 100644 index 0000000000..f64665fd69 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_if.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +define action $action1($x) as + select $x; +end define; + +evaluate if CAST(Unicode::ToUpper("i"u) AS String) == "I" + do $action1(1) +else + do $action1(2); + +evaluate if CAST(Unicode::ToUpper("i"u) AS String) != "I" + do $action1(3); + +evaluate if CAST(Unicode::ToUpper("i"u) AS String) == "I" + do $action1(4); diff --git a/yt/yql/tests/sql/suites/action/eval_if_guard.sql b/yt/yql/tests/sql/suites/action/eval_if_guard.sql new file mode 100644 index 0000000000..4a11e6933e --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_if_guard.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$list = ListTake(AsList("Input"),0); +define action $process() as + select count(*) FROM each($list); +end define; + +evaluate if ListLength($list)>0 do $process(); diff --git a/yt/yql/tests/sql/suites/action/eval_input_output_table.cfg b/yt/yql/tests/sql/suites/action/eval_input_output_table.cfg new file mode 100644 index 0000000000..386ab9ac7f --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_input_output_table.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/eval_input_output_table.sql b/yt/yql/tests/sql/suites/action/eval_input_output_table.sql new file mode 100644 index 0000000000..e8bbd374f9 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_input_output_table.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$a = CAST(Unicode::ToUpper("o"u) AS String) || "utput"; +$b = CAST(Unicode::ToUpper("i"u) AS String) || "nput"; +INSERT INTO $a +SELECT + key as key, + "" as subkey, + "value:" || value as value +FROM $b +WHERE key < "100" +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/action/eval_input_output_table_subquery.cfg b/yt/yql/tests/sql/suites/action/eval_input_output_table_subquery.cfg new file mode 100644 index 0000000000..386ab9ac7f --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_input_output_table_subquery.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/eval_input_output_table_subquery.sql b/yt/yql/tests/sql/suites/action/eval_input_output_table_subquery.sql new file mode 100644 index 0000000000..429b27f11c --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_input_output_table_subquery.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$a = (SELECT CAST(Unicode::ToUpper("o"u) AS String) || "utpu"); +$b = (SELECT CAST(Unicode::ToUpper("i"u) AS String) || "npu"); +$a = $a || CAST(Unicode::ToLower("T"u) AS String); +$b = $b || CAST(Unicode::ToLower("T"u) AS String); +INSERT INTO $a +SELECT + key as key, + "" as subkey, + "value:" || value as value +FROM $b +WHERE key < "100" +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/action/eval_like.cfg b/yt/yql/tests/sql/suites/action/eval_like.cfg new file mode 100644 index 0000000000..c6596e362c --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_like.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/eval_like.sql b/yt/yql/tests/sql/suites/action/eval_like.sql new file mode 100644 index 0000000000..24132ebd39 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_like.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$arg1 = "" || ""; +$arg2 = CAST(Unicode::ToUpper("i"u) AS String) || "npu_"; +$arg3 = "" || ""; +$arg4 = "" || "raw"; + +SELECT + count(*) +FROM LIKE($arg1,$arg2,$arg3,$arg4); diff --git a/yt/yql/tests/sql/suites/action/eval_on_modif_table_fail.cfg b/yt/yql/tests/sql/suites/action/eval_on_modif_table_fail.cfg new file mode 100644 index 0000000000..a26fadcaa7 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_on_modif_table_fail.cfg @@ -0,0 +1,3 @@ +xfail +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/action/eval_on_modif_table_fail.sql b/yt/yql/tests/sql/suites/action/eval_on_modif_table_fail.sql new file mode 100644 index 0000000000..4cd9a1ba98 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_on_modif_table_fail.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom error: Table "Output" is used before commit */ +USE plato; + +insert into Output +select "key" as field +union all +select "subkey" as field; + +commit; + +$whitelist = select aggregate_list(field) +from Output; + +select ForceSpreadMembers([("key", key)],Unwrap($whitelist)) from Input; diff --git a/yt/yql/tests/sql/suites/action/eval_pragma.cfg b/yt/yql/tests/sql/suites/action/eval_pragma.cfg new file mode 100644 index 0000000000..386ab9ac7f --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_pragma.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/eval_pragma.sql b/yt/yql/tests/sql/suites/action/eval_pragma.sql new file mode 100644 index 0000000000..87f4fb3b4a --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_pragma.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +/* postgres can not */ +$a = "1" || CAST(Unicode::ToUpper("m") AS String); +pragma yt.DataSizePerJob=$a; diff --git a/yt/yql/tests/sql/suites/action/eval_range.cfg b/yt/yql/tests/sql/suites/action/eval_range.cfg new file mode 100644 index 0000000000..c6596e362c --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_range.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/eval_range.sql b/yt/yql/tests/sql/suites/action/eval_range.sql new file mode 100644 index 0000000000..9ab6494943 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_range.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$arg1 = "" || ""; +$arg2 = CAST(Unicode::ToUpper("i"u) AS String) || "nput"; +$arg3 = CAST(Unicode::ToUpper("i"u) AS String) || "nput"; +$arg4 = "" || ""; +$arg5 = "" || "raw"; + +SELECT + count(*) +FROM RANGE($arg1,$arg2,$arg3,$arg4,$arg5); diff --git a/yt/yql/tests/sql/suites/action/eval_regexp.cfg b/yt/yql/tests/sql/suites/action/eval_regexp.cfg new file mode 100644 index 0000000000..c6596e362c --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_regexp.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/eval_regexp.sql b/yt/yql/tests/sql/suites/action/eval_regexp.sql new file mode 100644 index 0000000000..6e3fcf0ad6 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_regexp.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; +$arg1 = "" || ""; +$arg2 = (Unicode::ToUpper("i") ?? "") || "npu."; +$arg3 = "" || ""; +$arg4 = "" || "raw"; + +SELECT + count(*) +FROM REGEXP($arg1,$arg2,$arg3,$arg4); diff --git a/yt/yql/tests/sql/suites/action/eval_sample.cfg b/yt/yql/tests/sql/suites/action/eval_sample.cfg new file mode 100644 index 0000000000..a654f9117d --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_sample.cfg @@ -0,0 +1 @@ +in Input input1.txt diff --git a/yt/yql/tests/sql/suites/action/eval_sample.sql b/yt/yql/tests/sql/suites/action/eval_sample.sql new file mode 100644 index 0000000000..2fc0464387 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_sample.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +$x = 1.0 / 3; +SELECT * +FROM plato.Input +SAMPLE $x; diff --git a/yt/yql/tests/sql/suites/action/eval_skip_take.cfg b/yt/yql/tests/sql/suites/action/eval_skip_take.cfg new file mode 100644 index 0000000000..c6596e362c --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_skip_take.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/eval_skip_take.sql b/yt/yql/tests/sql/suites/action/eval_skip_take.sql new file mode 100644 index 0000000000..06d56e5b25 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_skip_take.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +select * from Input +order by key +limit length(CAST(Unicode::ToUpper("a"u) AS String)) +offset length(CAST(Unicode::ToUpper("bc"u) AS String)); diff --git a/yt/yql/tests/sql/suites/action/eval_table_with_view.sql b/yt/yql/tests/sql/suites/action/eval_table_with_view.sql new file mode 100644 index 0000000000..2c27b55d58 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_table_with_view.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; +$x = "Input"; +SELECT * +FROM $x VIEW raw LIMIT 1;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/action/eval_typeof_output_table.cfg b/yt/yql/tests/sql/suites/action/eval_typeof_output_table.cfg new file mode 100644 index 0000000000..1d0f17aef1 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_typeof_output_table.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +xfail diff --git a/yt/yql/tests/sql/suites/action/eval_typeof_output_table.sql b/yt/yql/tests/sql/suites/action/eval_typeof_output_table.sql new file mode 100644 index 0000000000..80428193e3 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_typeof_output_table.sql @@ -0,0 +1,26 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom error: Table "Output" does not exist */ +USE plato; + +INSERT INTO Output +SELECT + key || "foo" as key2 +FROM Input; + +COMMIT; + +$input = PROCESS Output; +$c = EvaluateCode(ReprCode(FormatType(TypeOf($input)))); +select $c; + +INSERT INTO Output WITH TRUNCATE +SELECT + key || "foo" as key3 +FROM Input; + +COMMIT; + +$input = PROCESS Output; +$c = EvaluateCode(ReprCode(FormatType(TypeOf($input)))); +select $c; diff --git a/yt/yql/tests/sql/suites/action/eval_unresolved_type_arg.sql b/yt/yql/tests/sql/suites/action/eval_unresolved_type_arg.sql new file mode 100644 index 0000000000..1ebfe07d30 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_unresolved_type_arg.sql @@ -0,0 +1,25 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$myAddSuffix = ($row, $value) -> { + $type = TypeOf($row); + --$type=Struct<key:String,subkey:String,value:String>; + $lambda = EvaluateCode(LambdaCode(($r)->{ + return FuncCode("AsStruct", + ListMap(StructTypeComponents(TypeHandle($type)), + ($i)->{ return ListCode( + AtomCode($i.Name), + FuncCode("Concat", + FuncCode("Member",$r,AtomCode($i.Name)), + ReprCode($value) + )) })); + + })); + + return $lambda($row); +}; + +SELECT + $myAddSuffix(TableRow(), "*") +FROM Input; diff --git a/yt/yql/tests/sql/suites/action/eval_values_output_table_subquery.cfg b/yt/yql/tests/sql/suites/action/eval_values_output_table_subquery.cfg new file mode 100644 index 0000000000..386ab9ac7f --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_values_output_table_subquery.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/eval_values_output_table_subquery.sql b/yt/yql/tests/sql/suites/action/eval_values_output_table_subquery.sql new file mode 100644 index 0000000000..240f4d2263 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/eval_values_output_table_subquery.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$a = (SELECT CAST(Unicode::ToUpper("o"u) AS String) || "utpu"); +$a = $a || CAST(Unicode::ToLower("T"u) AS String); +INSERT INTO $a (key, subkey, value) +VALUES (1, "foo", false); diff --git a/yt/yql/tests/sql/suites/action/evaluate_match_type.sql b/yt/yql/tests/sql/suites/action/evaluate_match_type.sql new file mode 100644 index 0000000000..bca34d037a --- /dev/null +++ b/yt/yql/tests/sql/suites/action/evaluate_match_type.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$keep_only_last = ($row) -> { + $members = ListFilter(StructMembers($row), ($x) -> (FIND($x, "key") IS NOT NULL)); + return ChooseMembers($row, $members) +}; + + +select * from +(select $keep_only_last(TableRow()) from Input)
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/action/evaluate_pure.cfg b/yt/yql/tests/sql/suites/action/evaluate_pure.cfg new file mode 100644 index 0000000000..72eff595f4 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/evaluate_pure.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf datetime_udf diff --git a/yt/yql/tests/sql/suites/action/evaluate_pure.sql b/yt/yql/tests/sql/suites/action/evaluate_pure.sql new file mode 100644 index 0000000000..b89afe26bc --- /dev/null +++ b/yt/yql/tests/sql/suites/action/evaluate_pure.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +select EvaluateExpr(YQL::RandomNumber()), YQL::RandomNumber(); +select key, EvaluateExpr(cast(CurrentUtcDate() as string)) as `date` from Input; +select YQL::String(EvaluateAtom("foo" || "bar")); +select EvaluateExpr(CurrentUtcTimestamp()), CurrentUtcTimestamp(); +$y = Yson("{a=7u;c=[<d=%true>1;#;\"привет\";-3.4]}"); +select Yson::Equals(EvaluateExpr($y), $y); +select EvaluateExpr(TzDate("2000-01-01,Europe/Moscow")); +select EvaluateExpr(TzDatetime("2000-01-01T01:02:03,Europe/Moscow")); +select EvaluateExpr(TzTimestamp("2000-01-01T01:02:03.456789,Europe/Moscow")); diff --git a/yt/yql/tests/sql/suites/action/evaluate_queries.cfg b/yt/yql/tests/sql/suites/action/evaluate_queries.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/evaluate_queries.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/action/evaluate_queries.sql b/yt/yql/tests/sql/suites/action/evaluate_queries.sql new file mode 100644 index 0000000000..8671f14def --- /dev/null +++ b/yt/yql/tests/sql/suites/action/evaluate_queries.sql @@ -0,0 +1,28 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$s = (select count(*) from Input); +select EvaluateExpr($s); +/* +$s = (select key from Input); +select EvaluateExpr($s); + +$s = (select key || "foo" from Input); +select EvaluateExpr($s); + +$s = (select aggregate_list(key) from Input); +select EvaluateExpr($s); + +$s = (select v from (select key,min(value) as v from Input group by key order by key limit 1)); +select EvaluateExpr($s); + +$s = (select key from Input order by key limit 1); +select EvaluateExpr($s); + +$s = (select lag(key) over w from Input window w as ()); +select EvaluateExpr($s); + +$s = (select a.key from Input as a join Input as b using(key)); +select EvaluateExpr($s); +*/ diff --git a/yt/yql/tests/sql/suites/action/export_action.cfg b/yt/yql/tests/sql/suites/action/export_action.cfg new file mode 100644 index 0000000000..d8349c7037 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/export_action.cfg @@ -0,0 +1,2 @@ +in Input input.txt +file lib1.sql lib1.sql.txt diff --git a/yt/yql/tests/sql/suites/action/export_action.sql b/yt/yql/tests/sql/suites/action/export_action.sql new file mode 100644 index 0000000000..59ecc86d5b --- /dev/null +++ b/yt/yql/tests/sql/suites/action/export_action.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +/* postgres can not */ +/* kikimr can not - range not supported */ +pragma library("lib1.sql"); +import lib1 symbols $action; +do $action("Input"); diff --git a/yt/yql/tests/sql/suites/action/input_attrs.txt.attr b/yt/yql/tests/sql/suites/action/input_attrs.txt.attr new file mode 100644 index 0000000000..d2659911d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/input_attrs.txt.attr @@ -0,0 +1,32 @@ +{ + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + }; + "foo" = 1; + "bar" = "text"; +} diff --git a/yt/yql/tests/sql/suites/action/insert_after_eval.cfg b/yt/yql/tests/sql/suites/action/insert_after_eval.cfg new file mode 100644 index 0000000000..b1f9d81471 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/insert_after_eval.cfg @@ -0,0 +1 @@ +out Output modify.txt diff --git a/yt/yql/tests/sql/suites/action/insert_after_eval.sql b/yt/yql/tests/sql/suites/action/insert_after_eval.sql new file mode 100644 index 0000000000..60ab74c109 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/insert_after_eval.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +/* postgres can not */ +/* multirun can not */ +USE plato; + +$s1 = (select count(*) from Output); +$s2 = (select max(key) from Output); +insert into Output with truncate +select EvaluateExpr($s1) as a, EvaluateExpr($s2) as b; diff --git a/yt/yql/tests/sql/suites/action/insert_after_eval_xlock.cfg b/yt/yql/tests/sql/suites/action/insert_after_eval_xlock.cfg new file mode 100644 index 0000000000..b1f9d81471 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/insert_after_eval_xlock.cfg @@ -0,0 +1 @@ +out Output modify.txt diff --git a/yt/yql/tests/sql/suites/action/insert_after_eval_xlock.sql b/yt/yql/tests/sql/suites/action/insert_after_eval_xlock.sql new file mode 100644 index 0000000000..c31b9e04eb --- /dev/null +++ b/yt/yql/tests/sql/suites/action/insert_after_eval_xlock.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +/* postgres can not */ +/* multirun can not */ +USE plato; + +$s1 = (select count(*) from Output with xlock); +$s2 = (select max(key) from Output with xlock); +insert into Output with truncate +select EvaluateExpr($s1) as a, EvaluateExpr($s2) as b; diff --git a/yt/yql/tests/sql/suites/action/insert_each_from_folder.cfg b/yt/yql/tests/sql/suites/action/insert_each_from_folder.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/insert_each_from_folder.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/action/insert_each_from_folder.sql b/yt/yql/tests/sql/suites/action/insert_each_from_folder.sql new file mode 100644 index 0000000000..dc06200679 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/insert_each_from_folder.sql @@ -0,0 +1,19 @@ +/* syntax version 1 */ +/* postgres can not */ +/* multirun can not */ +use plato; + +$list = ( + select aggregate_list(Path) from ( + select Path from folder("") + where Type = "table" and Path like "Input%" + order by Path desc + limit 30 + ) +); + +insert into Output with truncate +select + count(*) +from + each($list) diff --git a/yt/yql/tests/sql/suites/action/mixed_eval_typeof_world1.cfg b/yt/yql/tests/sql/suites/action/mixed_eval_typeof_world1.cfg new file mode 100644 index 0000000000..dbda958ebd --- /dev/null +++ b/yt/yql/tests/sql/suites/action/mixed_eval_typeof_world1.cfg @@ -0,0 +1,6 @@ +xfail +in Input input.txt +out Output1 output1.txt +out Output2 output2.txt +out Output3 output3.txt + diff --git a/yt/yql/tests/sql/suites/action/mixed_eval_typeof_world1.sql b/yt/yql/tests/sql/suites/action/mixed_eval_typeof_world1.sql new file mode 100644 index 0000000000..af5339c5a5 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/mixed_eval_typeof_world1.sql @@ -0,0 +1,46 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom error:Anonymous table "@Output1" must be materialized*/ +use plato; + +$force_remove_members = ($struct, $to_remove) -> { + $remover = EvaluateCode(LambdaCode(($st) -> { + $to_keep = ListFlatMap(StructTypeComponents(TypeHandle(TypeOf($struct))), ($x) -> {return IF($x.Name not in $to_remove, $x.Name)}); + return FuncCode( + "AsStruct", + ListMap( + $to_keep, + ($x) -> {return ListCode(AtomCode($x), FuncCode("Member", $st, AtomCode($x)))} + ) + ) + })); + return $remover($struct) +}; + +define action $func($input, $output) as + $jname = $output; + insert into @$jname + with truncate + select + * + from $input as input; + commit; + insert into $output + with truncate + select + AGG_LIST( + $force_remove_members( + TableRow(), + [''] + ) + ) + from @$jname; + commit; +end define; + +$exps = [('Input','Output1'),('Input','Output2'),('Input','Output3')]; +evaluate for $exp_name in $exps do begin + $input = $exp_name.0; + $output = $exp_name.1; + do $func($input, $output); +end do; diff --git a/yt/yql/tests/sql/suites/action/modify.txt.attr b/yt/yql/tests/sql/suites/action/modify.txt.attr new file mode 100644 index 0000000000..36b3c00c90 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/modify.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["key";["DataType";"String";];];["subkey";["DataType";"String";];];["value";["DataType";"String";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/action/nested_rewrite_io.sql b/yt/yql/tests/sql/suites/action/nested_rewrite_io.sql new file mode 100644 index 0000000000..4150bc7e3f --- /dev/null +++ b/yt/yql/tests/sql/suites/action/nested_rewrite_io.sql @@ -0,0 +1,22 @@ +use plato; +$input = select * from AS_TABLE([<|a:"foo",b:"123"|>]); + +$mapping = select {"a":"String", "b":"Int32"} from Input limit 1; + +$transformer = ($type)->{ + $t = EvaluateType(ParseTypeHandle($type)); + return ($value)->{ return cast($value as $t); }; +}; + +$converter = ($row)->{ + return EvaluateCode(LambdaCode(($rowCode)->{ + return FuncCode("AsStruct", ListMap(StructMembers($row), ($name)->{ + return ListCode( + AtomCode($name), + FuncCode("Apply", QuoteCode($transformer(Unwrap($mapping[$name]))), FuncCode("Member", $rowCode, AtomCode($name))) + ); + })); + }))($row); +}; + +select * from (select $converter(TableRow()) from $input) flatten columns; diff --git a/yt/yql/tests/sql/suites/action/nested_subquery.cfg b/yt/yql/tests/sql/suites/action/nested_subquery.cfg new file mode 100644 index 0000000000..386ab9ac7f --- /dev/null +++ b/yt/yql/tests/sql/suites/action/nested_subquery.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/action/nested_subquery.sql b/yt/yql/tests/sql/suites/action/nested_subquery.sql new file mode 100644 index 0000000000..375dee1116 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/nested_subquery.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +define subquery $q($name) as + define subquery $nested() as + select $name; + end define; + + process $nested(); +end define; + +process $q(CAST(Unicode::ToUpper("foo"u) AS String)); diff --git a/yt/yql/tests/sql/suites/action/parallel_for.sql b/yt/yql/tests/sql/suites/action/parallel_for.sql new file mode 100644 index 0000000000..d9bfcfcedb --- /dev/null +++ b/yt/yql/tests/sql/suites/action/parallel_for.sql @@ -0,0 +1,11 @@ +/* yt can not */ +use plato; + +evaluate parallel for $i in [1,2,1,2,1] do begin +insert into Output +select $i as a; +end do; + +commit; +insert into Output with truncate +select a from Output order by a; diff --git a/yt/yql/tests/sql/suites/action/pending_arg_fail.cfg b/yt/yql/tests/sql/suites/action/pending_arg_fail.cfg new file mode 100644 index 0000000000..eb2e5315d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/pending_arg_fail.cfg @@ -0,0 +1 @@ +xfail
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/action/pending_arg_fail.sql b/yt/yql/tests/sql/suites/action/pending_arg_fail.sql new file mode 100644 index 0000000000..5d3155c610 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/pending_arg_fail.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom error:Failed to evaluate unresolved argument: row. Did you use a column?*/ +use plato; +select ListExtract(value,key) from Input; diff --git a/yt/yql/tests/sql/suites/action/process_from_subquery_with_orderby.sql b/yt/yql/tests/sql/suites/action/process_from_subquery_with_orderby.sql new file mode 100644 index 0000000000..24ad5b76f9 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/process_from_subquery_with_orderby.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +define subquery $src() as + select * from plato.Input order by key; +end define; +process $src(); diff --git a/yt/yql/tests/sql/suites/action/runtime_if_select.sql b/yt/yql/tests/sql/suites/action/runtime_if_select.sql new file mode 100644 index 0000000000..c81f207ae9 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/runtime_if_select.sql @@ -0,0 +1,29 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +insert into @foo +select count(*) as count from Input; +commit; +$n = (select count from @foo); +$predicate = $n > 1; + +if $predicate do begin + select 1; +end do; + +if not $predicate do begin + select 2; +end do; + +if $predicate do begin + select 3; +end do else do begin + select 4; +end do; + +if not $predicate do begin + select 5; +end do else do begin + select 6; +end do; diff --git a/yt/yql/tests/sql/suites/action/select_from_subquery_with_orderby.sql b/yt/yql/tests/sql/suites/action/select_from_subquery_with_orderby.sql new file mode 100644 index 0000000000..fbc0f689d8 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/select_from_subquery_with_orderby.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* syntax version 1 */ +define subquery $src() as + select * from plato.Input order by subkey; +end define; + +define subquery $src_non_yt() as + select * from as_table([<|key:1, subkey:1|>, <|key:2, subkey:2|>]) order by subkey; +end define; + +select * from $src() order by key; +select * from $src_non_yt() order by key; diff --git a/yt/yql/tests/sql/suites/action/subquery.sql b/yt/yql/tests/sql/suites/action/subquery.sql new file mode 100644 index 0000000000..60df127bd5 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/subquery.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +define subquery $q($name, $a) as + $i = (select * from $name); + $b = "_foo"; + select key || $a || $b as key from $i; +end define; + +$z = (select key from $q("Input", "_bar")); + +select $z; + +select key from $q("Input", "_baz") order by key; + +define subquery $e() as + select "hello"; +end define; + +process $e(); diff --git a/yt/yql/tests/sql/suites/action/subquery_merge1.sql b/yt/yql/tests/sql/suites/action/subquery_merge1.sql new file mode 100644 index 0000000000..ae6d563701 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/subquery_merge1.sql @@ -0,0 +1,25 @@ +/* syntax version 1 */ +/* postgres can not */ +define subquery $sub1() as + select 1 as x; +end define; + +define subquery $sub2() as + select 2 as x; +end define; + +define subquery $sub3() as + select 3 as y; +end define; + +$s = SubqueryExtend($sub1,$sub2); +process $s(); + +$s = SubqueryUnionAll($sub1,$sub3); +process $s(); + +$s = SubqueryMerge($sub1,$sub2); +process $s(); + +$s = SubqueryUnionMerge($sub1,$sub3); +process $s(); diff --git a/yt/yql/tests/sql/suites/action/subquery_merge2.sql b/yt/yql/tests/sql/suites/action/subquery_merge2.sql new file mode 100644 index 0000000000..f8d4918c83 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/subquery_merge2.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ +define subquery $sub($i) as + select $i as x; +end define; + +$s = SubqueryExtendFor([1,2,3],$sub); +process $s(); + +$s = SubqueryUnionAllFor([1,2,3],$sub); +process $s(); + +$s = SubqueryMergeFor([1,2,3],$sub); +process $s(); + +$s = SubqueryUnionMergeFor([1,2,3],$sub); +process $s(); diff --git a/yt/yql/tests/sql/suites/action/subquery_merge_evaluate.sql b/yt/yql/tests/sql/suites/action/subquery_merge_evaluate.sql new file mode 100644 index 0000000000..25c3a000fa --- /dev/null +++ b/yt/yql/tests/sql/suites/action/subquery_merge_evaluate.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +define subquery $sub1($i,$j?) as + select $i - 1,$j; +end define; + +define subquery $sub2($i,$j?) as + select $i + 1,$j; +end define; + +$sub = EvaluateCode(If(1>2,QuoteCode($sub1),QuoteCode($sub2))); + +$s = SubqueryExtendFor([1,2,3],$sub); +process $s(); diff --git a/yt/yql/tests/sql/suites/action/subquery_merge_nested_subquery.cfg b/yt/yql/tests/sql/suites/action/subquery_merge_nested_subquery.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/subquery_merge_nested_subquery.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/action/subquery_merge_nested_subquery.sql b/yt/yql/tests/sql/suites/action/subquery_merge_nested_subquery.sql new file mode 100644 index 0000000000..47317a548e --- /dev/null +++ b/yt/yql/tests/sql/suites/action/subquery_merge_nested_subquery.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +DEFINE SUBQUERY $get_tables_list($dir) AS + SELECT + Unwrap($dir || "/" || CAST(TableName(Path, "yt") AS String)) AS Path, + FROM FOLDER($dir) +END DEFINE; + +DEFINE SUBQUERY $get_all_tables_list($dirs) AS + $get_src_tables = SubqueryExtendFor(UNWRAP(ListUniq($dirs)), $get_tables_list); + select * from $get_src_tables(); +END DEFINE; + +process $get_all_tables_list([""]); diff --git a/yt/yql/tests/sql/suites/action/subquery_merge_nested_world.sql b/yt/yql/tests/sql/suites/action/subquery_merge_nested_world.sql new file mode 100644 index 0000000000..67f0683145 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/subquery_merge_nested_world.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +DEFINE SUBQUERY $s($_i) AS + $t = SELECT AGGREGATE_LIST(Path) FROM FOLDER('') WHERE Path LIKE "Input%"; + SELECT + * + FROM EACH($t); +END DEFINE; + +$extractor = SubqueryMergeFor([1], $s); + +SELECT * +FROM $extractor(); diff --git a/yt/yql/tests/sql/suites/action/subquery_opt_args.sql b/yt/yql/tests/sql/suites/action/subquery_opt_args.sql new file mode 100644 index 0000000000..b3c1c8a757 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/subquery_opt_args.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ +define subquery $sub($a,$b?) as + select $a + ($b ?? 0); +end define; + +process $sub(1); +process $sub(2, 3); diff --git a/yt/yql/tests/sql/suites/action/table_content_before_from_folder.cfg b/yt/yql/tests/sql/suites/action/table_content_before_from_folder.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/table_content_before_from_folder.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/action/table_content_before_from_folder.sql b/yt/yql/tests/sql/suites/action/table_content_before_from_folder.sql new file mode 100644 index 0000000000..bd6ee020d4 --- /dev/null +++ b/yt/yql/tests/sql/suites/action/table_content_before_from_folder.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; +pragma yt.EvaluationTableSizeLimit="1"; +select * from Input limit 1; +$tables = (select aggregate_list(Path) as dates from folder("") where Path like "Input%"); +select count(*) from each($tables); diff --git a/yt/yql/tests/sql/suites/agg_apply/avg_const_interval.cfg b/yt/yql/tests/sql/suites/agg_apply/avg_const_interval.cfg new file mode 100644 index 0000000000..04d34fa0d8 --- /dev/null +++ b/yt/yql/tests/sql/suites/agg_apply/avg_const_interval.cfg @@ -0,0 +1,2 @@ +in Input input.txt + diff --git a/yt/yql/tests/sql/suites/agg_apply/avg_const_interval.sql b/yt/yql/tests/sql/suites/agg_apply/avg_const_interval.sql new file mode 100644 index 0000000000..ee9bd7870b --- /dev/null +++ b/yt/yql/tests/sql/suites/agg_apply/avg_const_interval.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma EmitAggApply; + +$a = select CurrentUtcDate() as _date, Just(Interval("P1W")) as parsed_lag from plato.Input; +SELECT AVG(parsed_lag) FROM $a; diff --git a/yt/yql/tests/sql/suites/agg_apply/default.cfg b/yt/yql/tests/sql/suites/agg_apply/default.cfg new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/yt/yql/tests/sql/suites/agg_apply/default.cfg diff --git a/yt/yql/tests/sql/suites/agg_apply/input.txt.attr b/yt/yql/tests/sql/suites/agg_apply/input.txt.attr new file mode 100644 index 0000000000..84791918db --- /dev/null +++ b/yt/yql/tests/sql/suites/agg_apply/input.txt.attr @@ -0,0 +1,30 @@ +{ + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "Int32" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "Int32" + ] + ]; + [ + "value"; + [ + "DataType"; + "Int32" + ] + ] + ] + ] + }; +} diff --git a/yt/yql/tests/sql/suites/agg_apply/table.cfg b/yt/yql/tests/sql/suites/agg_apply/table.cfg new file mode 100644 index 0000000000..e68191f82c --- /dev/null +++ b/yt/yql/tests/sql/suites/agg_apply/table.cfg @@ -0,0 +1 @@ +in Input input.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/agg_apply/table.sql b/yt/yql/tests/sql/suites/agg_apply/table.sql new file mode 100644 index 0000000000..e81956b605 --- /dev/null +++ b/yt/yql/tests/sql/suites/agg_apply/table.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma EmitAggApply; + +select count(if(key=1,cast(key as string))) from plato.Input; diff --git a/yt/yql/tests/sql/suites/aggr_factory/avg.sql b/yt/yql/tests/sql/suites/aggr_factory/avg.sql new file mode 100644 index 0000000000..1352062811 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/avg.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("avg"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/avg_distinct_expr.sql b/yt/yql/tests/sql/suites/aggr_factory/avg_distinct_expr.sql new file mode 100644 index 0000000000..984c21a13f --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/avg_distinct_expr.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a), AsStruct(1 as a)); +$f = AGGREGATION_FACTORY("avg"); + +use plato; +insert into @a select * from as_table($t); +commit; + +select AGGREGATE_BY(distinct cast(Unicode::ToLower(cast(a as Utf8) || "00"u) as Int), $f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/avg_if.sql b/yt/yql/tests/sql/suites/aggr_factory/avg_if.sql new file mode 100644 index 0000000000..7fc60b5b1c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/avg_if.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("avg_if"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return AsTuple($z.a,$z.a<2)})))); + +use plato; +insert into @a select AsTuple(a,a<2) as aa from as_table($t); +commit; +select AGGREGATE_BY(aa,$f) from @a; + + diff --git a/yt/yql/tests/sql/suites/aggr_factory/bitand.sql b/yt/yql/tests/sql/suites/aggr_factory/bitand.sql new file mode 100644 index 0000000000..419b6bf336 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/bitand.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1u as a),AsStruct(2u as a)); +$f = AGGREGATION_FACTORY("bitand"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/bitor.sql b/yt/yql/tests/sql/suites/aggr_factory/bitor.sql new file mode 100644 index 0000000000..f9808d27c6 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/bitor.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1u as a),AsStruct(2u as a)); +$f = AGGREGATION_FACTORY("bitor"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/bitxor.sql b/yt/yql/tests/sql/suites/aggr_factory/bitxor.sql new file mode 100644 index 0000000000..fcb872944f --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/bitxor.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1u as a),AsStruct(2u as a)); +$f = AGGREGATION_FACTORY("bitxor"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/booland.sql b/yt/yql/tests/sql/suites/aggr_factory/booland.sql new file mode 100644 index 0000000000..03b483ee5d --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/booland.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(true as a),AsStruct(false as a)); +$f = AGGREGATION_FACTORY("booland"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/boolor.sql b/yt/yql/tests/sql/suites/aggr_factory/boolor.sql new file mode 100644 index 0000000000..c54cac9205 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/boolor.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(true as a),AsStruct(false as a)); +$f = AGGREGATION_FACTORY("boolor"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/bottom.sql b/yt/yql/tests/sql/suites/aggr_factory/bottom.sql new file mode 100644 index 0000000000..f663c39d63 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/bottom.sql @@ -0,0 +1,24 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList( + AsStruct(7 as a), + AsStruct(4 as a), + AsStruct(5 as a), + AsStruct(1 as a), + AsStruct(2 as a), + AsStruct(9 as a), + AsStruct(1 as a), + AsStruct(9 as a) +); + +$f = AGGREGATION_FACTORY("bottom", 3); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), + $f(ListItemType(TypeOf($t)), ($z)->{ return $z.a })))); + +use plato; +insert into @a select * from as_table($t); +commit; + +select AGGREGATE_BY(a, $f) from @a; +select AGGREGATE_BY(distinct a, $f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/bottom_by.sql b/yt/yql/tests/sql/suites/aggr_factory/bottom_by.sql new file mode 100644 index 0000000000..f5ee53bd8c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/bottom_by.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList( + AsStruct(1 as key, 101 as value), + AsStruct(6 as key, 34 as value), + AsStruct(4 as key, 22 as value), + AsStruct(2 as key, 256 as value), + AsStruct(7 as key, 111 as value) +); + +$f = AGGREGATION_FACTORY("bottomby", 3); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), + $f(ListItemType(TypeOf($t)), ($z)->{ return AsTuple($z.value, $z.key) })))); + +use plato; +insert into @a select AsTuple(value, key) as vk from as_table($t); +commit; + +select AGGREGATE_BY(vk, $f) from @a; + diff --git a/yt/yql/tests/sql/suites/aggr_factory/corellation.sql b/yt/yql/tests/sql/suites/aggr_factory/corellation.sql new file mode 100644 index 0000000000..d42c5259ce --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/corellation.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("correlation"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return AsTuple($z.a,-$z.a)})))); + +use plato; +insert into @a select AsTuple(a,-a) as aa from as_table($t); +commit; +select AGGREGATE_BY(aa,$f) from @a; + diff --git a/yt/yql/tests/sql/suites/aggr_factory/count.sql b/yt/yql/tests/sql/suites/aggr_factory/count.sql new file mode 100644 index 0000000000..3e209eb11f --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/count.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("count"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/count_if.sql b/yt/yql/tests/sql/suites/aggr_factory/count_if.sql new file mode 100644 index 0000000000..a3dbd155b0 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/count_if.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(true as a),AsStruct(false as a)); +$f = AGGREGATION_FACTORY("countif"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/default.cfg b/yt/yql/tests/sql/suites/aggr_factory/default.cfg new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/default.cfg diff --git a/yt/yql/tests/sql/suites/aggr_factory/every.sql b/yt/yql/tests/sql/suites/aggr_factory/every.sql new file mode 100644 index 0000000000..d44ae81d3b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/every.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(true as a),AsStruct(false as a)); +$f = AGGREGATION_FACTORY("every"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/histogram.sql b/yt/yql/tests/sql/suites/aggr_factory/histogram.sql new file mode 100644 index 0000000000..1a058a8f2a --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/histogram.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("histogram"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return AsTuple($z.a,1.0)})))); + +$f = AGGREGATION_FACTORY("histogram", 5); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return AsTuple($z.a,1.0)})))); + +use plato; +insert into @a select AsTuple(a, 1.0) as aa from as_table($t); +commit; +select AGGREGATE_BY(aa,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/hll.sql b/yt/yql/tests/sql/suites/aggr_factory/hll.sql new file mode 100644 index 0000000000..9a2c1f0716 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/hll.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("hll"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +$f = AGGREGATION_FACTORY("hll", 4); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/input.txt.attr b/yt/yql/tests/sql/suites/aggr_factory/input.txt.attr new file mode 100644 index 0000000000..84791918db --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/input.txt.attr @@ -0,0 +1,30 @@ +{ + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "Int32" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "Int32" + ] + ]; + [ + "value"; + [ + "DataType"; + "Int32" + ] + ] + ] + ] + }; +} diff --git a/yt/yql/tests/sql/suites/aggr_factory/linear_histogram.sql b/yt/yql/tests/sql/suites/aggr_factory/linear_histogram.sql new file mode 100644 index 0000000000..68db6ad402 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/linear_histogram.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("linearhistogram"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +$f = AGGREGATION_FACTORY("linearhistogram", 10, 0.0, 1000.0); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select a as aa from as_table($t); +commit; +select AGGREGATE_BY(aa,$f) from @a; + diff --git a/yt/yql/tests/sql/suites/aggr_factory/list.cfg b/yt/yql/tests/sql/suites/aggr_factory/list.cfg new file mode 100644 index 0000000000..5c248bff3d --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/list.cfg @@ -0,0 +1 @@ +udf string_udf diff --git a/yt/yql/tests/sql/suites/aggr_factory/list.sql b/yt/yql/tests/sql/suites/aggr_factory/list.sql new file mode 100644 index 0000000000..bc43f37032 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/list.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("aggregate_list"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +$f = AGGREGATION_FACTORY("aggregate_list", length(CAST(Unicode::ToUpper("xx"u) AS String))); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select ListSort(AGGREGATE_BY(a,$f)) from @a; +select ListSort(AGGREGATE_BY(distinct a,$f)) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/log_histogram.sql b/yt/yql/tests/sql/suites/aggr_factory/log_histogram.sql new file mode 100644 index 0000000000..1b5bd50199 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/log_histogram.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("loghistogram"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +$f = AGGREGATION_FACTORY("loghistogram", 10, 0.01, 1000.0); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select a as aa from as_table($t); +commit; +select AGGREGATE_BY(aa,$f) from @a; + diff --git a/yt/yql/tests/sql/suites/aggr_factory/logariphmic_histogram.sql b/yt/yql/tests/sql/suites/aggr_factory/logariphmic_histogram.sql new file mode 100644 index 0000000000..a11941be69 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/logariphmic_histogram.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("logarithmichistogram"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +$f = AGGREGATION_FACTORY("logarithmichistogram", 10, 0.01, 1000.0); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select a as aa from as_table($t); +commit; +select AGGREGATE_BY(aa,$f) from @a; + diff --git a/yt/yql/tests/sql/suites/aggr_factory/max.sql b/yt/yql/tests/sql/suites/aggr_factory/max.sql new file mode 100644 index 0000000000..a0e854663c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/max.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("max"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/max_by.sql b/yt/yql/tests/sql/suites/aggr_factory/max_by.sql new file mode 100644 index 0000000000..0e7cfaf37f --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/max_by.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList( + AsStruct(1 as key, 200 as value), + AsStruct(2 as key, 100 as value) +); + +$f = AGGREGATION_FACTORY("maxby"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), + $f(ListItemType(TypeOf($t)), ($z)->{ return AsTuple($z.value, $z.key) })))); + +$f = AGGREGATION_FACTORY("maxby", 10); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), + $f(ListItemType(TypeOf($t)), ($z)->{ return AsTuple($z.value, $z.key) })))); + +use plato; +insert into @a select AsTuple(value, key) as vk from as_table($t); +commit; +select AGGREGATE_BY(vk, $f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/median.sql b/yt/yql/tests/sql/suites/aggr_factory/median.sql new file mode 100644 index 0000000000..19921bbcbd --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/median.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("median"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +$f = AGGREGATION_FACTORY("percentile", 0.9); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/min.sql b/yt/yql/tests/sql/suites/aggr_factory/min.sql new file mode 100644 index 0000000000..d101099550 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/min.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("min"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/min_by.sql b/yt/yql/tests/sql/suites/aggr_factory/min_by.sql new file mode 100644 index 0000000000..4b1d240aa0 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/min_by.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList( + AsStruct(1 as key, 200 as value), + AsStruct(2 as key, 100 as value) +); + +$f = AGGREGATION_FACTORY("minby"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), + $f(ListItemType(TypeOf($t)), ($z)->{ return AsTuple($z.value, $z.key) })))); + +$f = AGGREGATION_FACTORY("minby", 10); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), + $f(ListItemType(TypeOf($t)), ($z)->{ return AsTuple($z.value, $z.key) })))); + +use plato; +insert into @a select AsTuple(value, key) as vk from as_table($t); +commit; +select AGGREGATE_BY(vk, $f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/mode.sql b/yt/yql/tests/sql/suites/aggr_factory/mode.sql new file mode 100644 index 0000000000..496cd4e4d8 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/mode.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("mode"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +$f = AGGREGATION_FACTORY("topfreq", 10, 20); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select ListSort(AGGREGATE_BY(distinct a,$f), ($x)->{ return $x.Value }) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/multi.cfg b/yt/yql/tests/sql/suites/aggr_factory/multi.cfg new file mode 100644 index 0000000000..fad550d3a9 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/multi.cfg @@ -0,0 +1,3 @@ +in Input input.txt +udf top_udf +udf set_udf diff --git a/yt/yql/tests/sql/suites/aggr_factory/multi.sql b/yt/yql/tests/sql/suites/aggr_factory/multi.sql new file mode 100644 index 0000000000..e6b0638f14 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/multi.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$input = (select AsStruct( + key as key, + Just(subkey) as subkey, + Just(value) as value) as nums from Input); + +SELECT + MULTI_AGGREGATE_BY(nums, AGGREGATION_FACTORY("count")) as count, + MULTI_AGGREGATE_BY(nums, AGGREGATION_FACTORY("min")) as min, + MULTI_AGGREGATE_BY(nums, AGGREGATION_FACTORY("max")) as max, + MULTI_AGGREGATE_BY(nums, AGGREGATION_FACTORY("sum")) as sum, + MULTI_AGGREGATE_BY(nums, AGGREGATION_FACTORY("avg")) as avg, + MULTI_AGGREGATE_BY(nums, AGGREGATION_FACTORY("stddev")) as stddev, + MULTI_AGGREGATE_BY(nums, AGGREGATION_FACTORY("percentile", 0.5)) as p50, + MULTI_AGGREGATE_BY(nums, AGGREGATION_FACTORY("aggregate_list")) as agg_list, + MULTI_AGGREGATE_BY(nums, AGGREGATION_FACTORY("aggregate_list_distinct")) as agg_list_distinct, + MULTI_AGGREGATE_BY(nums, AGGREGATION_FACTORY("mode")) as mode, + MULTI_AGGREGATE_BY(nums, AGGREGATION_FACTORY("top", 3)) as top, +FROM $input; diff --git a/yt/yql/tests/sql/suites/aggr_factory/some.sql b/yt/yql/tests/sql/suites/aggr_factory/some.sql new file mode 100644 index 0000000000..83f5a52a29 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/some.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(1 as a)); +$f = AGGREGATION_FACTORY("some"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/stddev.sql b/yt/yql/tests/sql/suites/aggr_factory/stddev.sql new file mode 100644 index 0000000000..7e46f46e5c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/stddev.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("stddev"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/sum_if.sql b/yt/yql/tests/sql/suites/aggr_factory/sum_if.sql new file mode 100644 index 0000000000..b48b38e153 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/sum_if.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("sum_if"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return AsTuple($z.a,$z.a>1)})))); + +use plato; +insert into @a select AsTuple(a,a>1) as aa from as_table($t); +commit; +select AGGREGATE_BY(aa,$f) from @a; + diff --git a/yt/yql/tests/sql/suites/aggr_factory/top.sql b/yt/yql/tests/sql/suites/aggr_factory/top.sql new file mode 100644 index 0000000000..dd50c1351f --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/top.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList( + AsStruct(7 as a), + AsStruct(4 as a), + AsStruct(5 as a), + AsStruct(1 as a), + AsStruct(2 as a), + AsStruct(9 as a), + AsStruct(1 as a), + AsStruct(9 as a)); + +$f = AGGREGATION_FACTORY("top", 3); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), + $f(ListItemType(TypeOf($t)), ($z)->{ return $z.a })))); + +use plato; +insert into @a select * from as_table($t); +commit; + +select AGGREGATE_BY(a, $f) from @a; +select AGGREGATE_BY(distinct a, $f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/top_by.sql b/yt/yql/tests/sql/suites/aggr_factory/top_by.sql new file mode 100644 index 0000000000..f63186dcda --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/top_by.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList( + AsStruct(1 as key, 101 as value), + AsStruct(6 as key, 34 as value), + AsStruct(4 as key, 22 as value), + AsStruct(2 as key, 256 as value), + AsStruct(7 as key, 111 as value) +); + +$f = AGGREGATION_FACTORY("topby", 3); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), + $f(ListItemType(TypeOf($t)), ($z)->{ return AsTuple($z.value, $z.key) })))); + +use plato; +insert into @a select AsTuple(value, key) as vk from as_table($t); +commit; + +select AGGREGATE_BY(vk, $f) from @a; + diff --git a/yt/yql/tests/sql/suites/aggr_factory/udaf.sql b/yt/yql/tests/sql/suites/aggr_factory/udaf.sql new file mode 100644 index 0000000000..d419f8767f --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/udaf.sql @@ -0,0 +1,26 @@ +/* syntax version 1 */ +/* postgres can not */ +-- count example +$create = ($_item, $_parent) -> { return 1 }; +$add = ($state, $_item, $_parent) -> { return 1 + $state }; +$merge = ($state1, $state2) -> { return $state1 + $state2 }; +$get_result = ($state) -> { return $state }; +$serialize = ($state) -> { return $state }; +$deserialize = ($state) -> { return $state }; +$default = 0; + +$f = AGGREGATION_FACTORY("udaf", $create, $add, $merge, $get_result, $serialize, $deserialize, $default); +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +$t = AsList(AsStruct(1/0 as a),AsStruct(2/0 as a)); +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/udaf_distinct_expr.sql b/yt/yql/tests/sql/suites/aggr_factory/udaf_distinct_expr.sql new file mode 100644 index 0000000000..15a4fe7c64 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/udaf_distinct_expr.sql @@ -0,0 +1,19 @@ +/* syntax version 1 */ +/* postgres can not */ +-- count example +$create = ($_item, $_parent) -> { return 1 }; +$add = ($state, $_item, $_parent) -> { return 1 + $state }; +$merge = ($state1, $state2) -> { return $state1 + $state2 }; +$get_result = ($state) -> { return $state }; +$serialize = ($state) -> { return $state }; +$deserialize = ($state) -> { return $state }; +$default = 0; + +$f = AGGREGATION_FACTORY("udaf", $create, $add, $merge, $get_result, $serialize, $deserialize, $default); +$t = AsList(AsStruct(1 as a),AsStruct(2 as a), AsStruct(1 as a)); + +use plato; +insert into @a select * from as_table($t); +commit; + +select AGGREGATE_BY(distinct cast(Unicode::ToLower(cast(a as Utf8) || "00"u) as Int), $f) from @a; diff --git a/yt/yql/tests/sql/suites/aggr_factory/variance.sql b/yt/yql/tests/sql/suites/aggr_factory/variance.sql new file mode 100644 index 0000000000..2573bd6e66 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggr_factory/variance.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +$t = AsList(AsStruct(1 as a),AsStruct(2 as a)); +$f = AGGREGATION_FACTORY("variance"); + +select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f( + ListItemType(TypeOf($t)), ($z)->{return $z.a})))); + +use plato; +insert into @a select * from as_table($t); +commit; +select AGGREGATE_BY(a,$f) from @a; +select AGGREGATE_BY(distinct a,$f) from @a; diff --git a/yt/yql/tests/sql/suites/aggregate/GroupByOneField.cfg b/yt/yql/tests/sql/suites/aggregate/GroupByOneField.cfg new file mode 100644 index 0000000000..2dc97b5e95 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/GroupByOneField.cfg @@ -0,0 +1 @@ +in Input columns.txt diff --git a/yt/yql/tests/sql/suites/aggregate/GroupByOneField.sql b/yt/yql/tests/sql/suites/aggregate/GroupByOneField.sql new file mode 100644 index 0000000000..fcb528e1e9 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/GroupByOneField.sql @@ -0,0 +1,2 @@ +/* syntax version 1 */ +select sum(c) as sumc, max(d) as maxd from plato.Input group by a order by sumc, maxd; diff --git a/yt/yql/tests/sql/suites/aggregate/GroupByTwoFields.cfg b/yt/yql/tests/sql/suites/aggregate/GroupByTwoFields.cfg new file mode 100644 index 0000000000..2dc97b5e95 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/GroupByTwoFields.cfg @@ -0,0 +1 @@ +in Input columns.txt diff --git a/yt/yql/tests/sql/suites/aggregate/GroupByTwoFields.sql b/yt/yql/tests/sql/suites/aggregate/GroupByTwoFields.sql new file mode 100644 index 0000000000..94ea550019 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/GroupByTwoFields.sql @@ -0,0 +1,2 @@ +/* syntax version 1 */ +select sum(c) as sum_c, max(d) as max_d from plato.Input group by a, b order by sum_c, max_d; diff --git a/yt/yql/tests/sql/suites/aggregate/agg_filter_pushdown.cfg b/yt/yql/tests/sql/suites/aggregate/agg_filter_pushdown.cfg new file mode 100644 index 0000000000..73dfbac8bf --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/agg_filter_pushdown.cfg @@ -0,0 +1 @@ +in Input dedup_state_keys.txt diff --git a/yt/yql/tests/sql/suites/aggregate/agg_filter_pushdown.sql b/yt/yql/tests/sql/suites/aggregate/agg_filter_pushdown.sql new file mode 100644 index 0000000000..a728c4895c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/agg_filter_pushdown.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +USE plato; + +select * from ( + select key, subkey, max(value) from Input group by key, subkey + having count(*) < 100 and subkey > "0" +) +where key > "1" and Likely(subkey < "4") +order by key, subkey; diff --git a/yt/yql/tests/sql/suites/aggregate/agg_phases_table1.sql b/yt/yql/tests/sql/suites/aggregate/agg_phases_table1.sql new file mode 100644 index 0000000000..9b657bd938 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/agg_phases_table1.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; +pragma EmitAggApply; + +pragma yt.UseAggPhases = "1"; + +SELECT + key, + count(value) +FROM Input +GROUP BY key +ORDER BY key diff --git a/yt/yql/tests/sql/suites/aggregate/agg_phases_table2.sql b/yt/yql/tests/sql/suites/aggregate/agg_phases_table2.sql new file mode 100644 index 0000000000..d434180941 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/agg_phases_table2.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; +pragma EmitAggApply; + +pragma yt.UseAggPhases = "1"; + +SELECT + key, + count(distinct value) +FROM Input +GROUP BY key +ORDER BY key diff --git a/yt/yql/tests/sql/suites/aggregate/agg_phases_table3.sql b/yt/yql/tests/sql/suites/aggregate/agg_phases_table3.sql new file mode 100644 index 0000000000..a39958bac3 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/agg_phases_table3.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; +pragma EmitAggApply; + +pragma yt.UseAggPhases = "1"; + +SELECT + key, + count(value), + count(distinct value) +FROM Input +GROUP BY key +ORDER BY key diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_by_column_lookup_in_const_dict.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_by_column_lookup_in_const_dict.sql new file mode 100644 index 0000000000..e38a70598d --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_by_column_lookup_in_const_dict.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +USE plato; + +$dict = AsDict(("800", "foo")); + +SELECT + lookup_result +FROM Input +GROUP BY $dict[key] ?? "bar" AS lookup_result +ORDER BY lookup_result; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_by_one_column.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_by_one_column.sql new file mode 100644 index 0000000000..d2127859b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_by_one_column.sql @@ -0,0 +1,2 @@ +/* syntax version 1 */ +select key, "WAT" as subkey, Max(value) as value from plato.Input group by key order by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_expr.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_expr.sql new file mode 100644 index 0000000000..46f2a248c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_expr.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + + +select + sum(distinct cast(Unicode::ToLower(CAST(subkey AS Utf8)) as Int32)) + sum(distinct cast(Unicode::ToUpper(CAST(subkey AS Utf8)) as Uint64)) as sks, + ListSort(aggregate_list(distinct key || "_")) as kl +from Input3; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_expr_with_groupby_expr.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_expr_with_groupby_expr.sql new file mode 100644 index 0000000000..ffc79038d5 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_expr_with_groupby_expr.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + + +select key, + sum(distinct cast(Unicode::ToLower(CAST(subkey AS Utf8)) as Int32)) + sum(distinct cast(Unicode::ToUpper(CAST(subkey AS Utf8)) as Uint64)) as sks, + aggregate_list(distinct key || "") as kl +from Input3 +group by key || "foo" as key +order by key; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_expr_with_udf.cfg b/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_expr_with_udf.cfg new file mode 100644 index 0000000000..6a677c3b7f --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_expr_with_udf.cfg @@ -0,0 +1,2 @@ +in Input2 input2.txt +udf math_udf diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_expr_with_udf.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_expr_with_udf.sql new file mode 100644 index 0000000000..456f3a9ab8 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_expr_with_udf.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +select + Math::Round(count(distinct Math::Round(cast(key as Int32)))/100.0, -2) +from Input2; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_list.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_list.sql new file mode 100644 index 0000000000..ee6f70e39d --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_list.sql @@ -0,0 +1,38 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +insert into @foo +select AsList(1,2) as x +union all +select AsList(1,3) as x +union all +select AsList(1,2) as x; + +commit; + +select listlength(aggregate_list(distinct x)) as c +from @foo; + +select count(distinct x) as c +from @foo; + +insert into @bar +select AsList(1,2) as x,AsList(4) as y +union all +select AsList(1,3) as x,AsList(4) as y +union all +select AsList(1,3) as x,AsList(4) as y +union all +select AsList(1,3) as x,AsList(4) as y +union all +select AsList(1,2) as x,AsList(5) as y +union all +select AsList(1,2) as x,AsList(5) as y; + +commit; + +select x,count(distinct y) as c +from @bar +group by x +order by c; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_struct_access.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_struct_access.sql new file mode 100644 index 0000000000..e9d312c63b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_distinct_struct_access.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$withStruct = select subkey, value, AsStruct(key as key) as s from Input3; + +select count(distinct s.key) as cnt from $withStruct; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_key_column.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_key_column.sql new file mode 100644 index 0000000000..cd95e5be56 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_key_column.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +/* postgres can not */ +SELECT + Some(key) as some_key, +FROM + plato.Input +GROUP BY + key +ORDER BY some_key; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_list_in_key.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_list_in_key.sql new file mode 100644 index 0000000000..9aa0bd88fa --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_list_in_key.sql @@ -0,0 +1,62 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; +insert into @foo +select AsList(1,2) as x,1 as y +union all +select AsList(1,3) as x,2 as y +union all +select AsList(1,2) as x,3 as y; +commit; + +select x,count(*) as c +from @foo +group by x +order by c; + +insert into @bar +select AsList(1,2) as x,AsList(4) as y, 1 as z +union all +select AsList(1,3) as x,AsList(4) as y, 2 as z +union all +select AsList(1,3) as x,AsList(4) as y, 3 as z +union all +select AsList(1,3) as x,AsList(4) as y, 4 as z +union all +select AsList(1,2) as x,AsList(5) as y, 5 as z +union all +select AsList(1,2) as x,AsList(5) as y, 6 as z; +commit; + +select x,y,count(*) as c +from @bar +group by x, y +order by c; + +select x,y,count(distinct z) as c +from @bar +group by x,y +order by c; + +select x,y, min(z) as m, count(distinct z) as c +from @bar +group by x,y +order by c; + +select x +from @bar as t +group by x +order by t.x[1]; + +select x,y +from @bar as t +group by x, y +order by t.x[1],t.y[0]; + +select distinct x +from @bar as t +order by t.x[1] desc; + +select distinct x,y +from @bar as t +order by t.x[1] desc,t.y[0] desc; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_subquery_yql_15869.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_subquery_yql_15869.sql new file mode 100644 index 0000000000..f3fc92b09e --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_subquery_yql_15869.sql @@ -0,0 +1,7 @@ +use plato; + +$a = select CurrentUtcDate() as _date, Just(1.0) as parsed_lag from Input; + +SELECT + SUM(parsed_lag) +FROM $a; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_udf_nested.cfg b/yt/yql/tests/sql/suites/aggregate/aggregate_udf_nested.cfg new file mode 100644 index 0000000000..060e6c9057 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_udf_nested.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +udf string_udf
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_udf_nested.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_udf_nested.sql new file mode 100644 index 0000000000..a65c584f1a --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_udf_nested.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +SELECT + String::HexText(String::HexText(value)) as value +FROM plato.Input4 +GROUP BY value +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_with_const_yson_options.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_with_const_yson_options.sql new file mode 100644 index 0000000000..c940ba32cd --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_with_const_yson_options.sql @@ -0,0 +1,8 @@ +USE plato; + +SELECT + key, + Yson::SerializeJson(Yson::From(AGGREGATE_LIST(value), Yson::Options(true AS Strict))) as value +FROM Input +GROUP BY key +ORDER BY key diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_with_deep_aggregated_column.cfg b/yt/yql/tests/sql/suites/aggregate/aggregate_with_deep_aggregated_column.cfg new file mode 100644 index 0000000000..582479bcde --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_with_deep_aggregated_column.cfg @@ -0,0 +1 @@ +in Input input_tutorial_users.txt diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_with_deep_aggregated_column.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_with_deep_aggregated_column.sql new file mode 100644 index 0000000000..c251ae8c4f --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_with_deep_aggregated_column.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$data = (select cast(key as uint32) as age, cast(subkey as uint32) as region, value as name from Input); + +--insert into Output +select + region, + max(case when age % 10u between 1u and region % 10u then age else 0u end) as max_age_at_range_intersect +from $data +group by region +order by region +; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_with_default_yson_options.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_with_default_yson_options.sql new file mode 100644 index 0000000000..ef6a64cf42 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_with_default_yson_options.sql @@ -0,0 +1,8 @@ +USE plato; + +SELECT + key, + Yson::SerializeJson(Yson::From(AGGREGATE_LIST(value))) as value +FROM Input +GROUP BY key +ORDER BY key diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_with_lambda.cfg b/yt/yql/tests/sql/suites/aggregate/aggregate_with_lambda.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_with_lambda.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_with_lambda.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_with_lambda.sql new file mode 100644 index 0000000000..4a10cda985 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_with_lambda.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$empty = ($list) -> { + RETURN ListCreate(TypeOf($list[0])); +}; + +SELECT + $empty(AGGREGATE_LIST(key)) +FROM Input +GROUP BY value; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_with_lambda_inside_avg.cfg b/yt/yql/tests/sql/suites/aggregate/aggregate_with_lambda_inside_avg.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_with_lambda_inside_avg.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/aggregate/aggregate_with_lambda_inside_avg.sql b/yt/yql/tests/sql/suites/aggregate/aggregate_with_lambda_inside_avg.sql new file mode 100644 index 0000000000..7672cec89e --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregate_with_lambda_inside_avg.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$cast_to_double = ($column) -> { + RETURN CAST($column as Double); +}; +$column_name = 'key'; +SELECT AVG($cast_to_double($column_name)) +FROM Input; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregation_and_order.sql b/yt/yql/tests/sql/suites/aggregate/aggregation_and_order.sql new file mode 100644 index 0000000000..940c38c928 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregation_and_order.sql @@ -0,0 +1,2 @@ +/* syntax version 1 */ +select key, Min(subkey) as subkey, Max(value) as value from plato.Input group by key order by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/aggregation_by_udf.cfg b/yt/yql/tests/sql/suites/aggregate/aggregation_by_udf.cfg new file mode 100644 index 0000000000..55c2f97264 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregation_by_udf.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +udf math_udf diff --git a/yt/yql/tests/sql/suites/aggregate/aggregation_by_udf.sql b/yt/yql/tests/sql/suites/aggregate/aggregation_by_udf.sql new file mode 100644 index 0000000000..105378efc1 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregation_by_udf.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +/* postgres can not */ +SELECT sum(Math::Pow(cast(subkey as double), 2)) +FROM plato.Input4; diff --git a/yt/yql/tests/sql/suites/aggregate/aggregation_with_named_node.cfg b/yt/yql/tests/sql/suites/aggregate/aggregation_with_named_node.cfg new file mode 100644 index 0000000000..a8a884001d --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregation_with_named_node.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +udf stat_udf diff --git a/yt/yql/tests/sql/suites/aggregate/aggregation_with_named_node.sql b/yt/yql/tests/sql/suites/aggregate/aggregation_with_named_node.sql new file mode 100644 index 0000000000..33757e759c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggregation_with_named_node.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +$data = (SELECT cast(key as Uint32) ?? 0 as key, value FROM plato.Input); + +$quant = 0.1; +SELECT + $quant * 100 as quantile, + PERCENTILE(key, $quant) as key_q, + COUNT(*) as count +FROM $data; diff --git a/yt/yql/tests/sql/suites/aggregate/aggrs_no_grouping.cfg b/yt/yql/tests/sql/suites/aggregate/aggrs_no_grouping.cfg new file mode 100644 index 0000000000..272cf740b2 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggrs_no_grouping.cfg @@ -0,0 +1,3 @@ +in Input input_sorted.txt +udf stat_udf +udf math_udf diff --git a/yt/yql/tests/sql/suites/aggregate/aggrs_no_grouping.sql b/yt/yql/tests/sql/suites/aggregate/aggrs_no_grouping.sql new file mode 100644 index 0000000000..b03b5283be --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggrs_no_grouping.sql @@ -0,0 +1,43 @@ +/* syntax version 1 */ +/* postgres can not */ +select + count(key) as keyCount, + count(sub) as subCount, + count(val) as valCount, + countIf(sub % 2 == 0) as evenCount, + countIf(sub % 2 == 1) as oddCount, + every(sub % 2 == 0) as every, + boolOr(sub % 2 == 0) as boolOr, + avg(key) as keyAvg, + avg(sub) as subAvg, + min(key) as keyMin, + min(sub) as subMin, + min(val) as valMin, + max(key) as keyMax, + max(sub) as subMax, + max(val) as valMax, + some(key) as keySome, + some(sub) as subSome, + some(val) as valSome, + bitAnd(cast(key AS Uint64)) as keyBitAnd, + bitOr(cast(key AS Uint64)) as keyBitOr, + bitXor(cast(key AS Uint64)) as keyBitXor, + bitAnd(cast(sub AS Uint64)) as subBitAnd, + bitOr(cast(sub AS Uint64)) as subBitOr, + bitXor(cast(sub AS Uint64)) as subBitXor, + median(key) as keyMedian, + median(sub) as subMedian, + stdDev(key) as keyStdDev, + stdDev(sub) as subStdDev, + stdDev(empty) as emptyStdDev, + variance(key) as keyVariance, + variance(sub) as subVariance, + stdDevPop(key) as keyPopStdDev, + stdDevPop(sub) as subPopStdDev, + varPop(key) as keyPopVariance, + varPop(sub) as subPopVariance, + correlation(key, sub) AS corr, + covariance(key, sub) AS covar, + covarpop(key, sub) AS covarpop +from + (select cast(key as int) as key, Unwrap(cast(subkey as int)) as sub, value as val, cast(value AS int) AS empty from plato.Input); diff --git a/yt/yql/tests/sql/suites/aggregate/aggrs_no_grouping_via_map.sql b/yt/yql/tests/sql/suites/aggregate/aggrs_no_grouping_via_map.sql new file mode 100644 index 0000000000..cb1105b769 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggrs_no_grouping_via_map.sql @@ -0,0 +1,44 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma yt.PartitionByConstantKeysViaMap; +select + count(key) as keyCount, + count(sub) as subCount, + count(val) as valCount, + countIf(sub % 2 == 0) as evenCount, + countIf(sub % 2 == 1) as oddCount, + every(sub % 2 == 0) as every, + boolOr(sub % 2 == 0) as boolOr, + avg(key) as keyAvg, + avg(sub) as subAvg, + min(key) as keyMin, + min(sub) as subMin, + min(val) as valMin, + max(key) as keyMax, + max(sub) as subMax, + max(val) as valMax, + some(key) as keySome, + some(sub) as subSome, + some(val) as valSome, + bitAnd(cast(key AS Uint64)) as keyBitAnd, + bitOr(cast(key AS Uint64)) as keyBitOr, + bitXor(cast(key AS Uint64)) as keyBitXor, + bitAnd(cast(sub AS Uint64)) as subBitAnd, + bitOr(cast(sub AS Uint64)) as subBitOr, + bitXor(cast(sub AS Uint64)) as subBitXor, + median(key) as keyMedian, + median(sub) as subMedian, + stdDev(key) as keyStdDev, + stdDev(sub) as subStdDev, + stdDev(empty) as emptyStdDev, + variance(key) as keyVariance, + variance(sub) as subVariance, + stdDevPop(key) as keyPopStdDev, + stdDevPop(sub) as subPopStdDev, + varPop(key) as keyPopVariance, + varPop(sub) as subPopVariance, + correlation(key, sub) AS corr, + covariance(key, sub) AS covar, + covarpop(key, sub) AS covarpop +from + (select cast(key as int) as key, Unwrap(cast(subkey as int)) as sub, value as val, cast(value AS int) AS empty from plato.Input); diff --git a/yt/yql/tests/sql/suites/aggregate/aggrs_no_grouping_via_map_compact.sql b/yt/yql/tests/sql/suites/aggregate/aggrs_no_grouping_via_map_compact.sql new file mode 100644 index 0000000000..acb0e79e4e --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/aggrs_no_grouping_via_map_compact.sql @@ -0,0 +1,45 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma yt.PartitionByConstantKeysViaMap; +select + count(key) as keyCount, + count(sub) as subCount, + count(val) as valCount, + countIf(sub % 2 == 0) as evenCount, + countIf(sub % 2 == 1) as oddCount, + every(sub % 2 == 0) as every, + boolOr(sub % 2 == 0) as boolOr, + avg(key) as keyAvg, + avg(sub) as subAvg, + min(key) as keyMin, + min(sub) as subMin, + min(val) as valMin, + max(key) as keyMax, + max(sub) as subMax, + max(val) as valMax, + some(key) as keySome, + some(sub) as subSome, + some(val) as valSome, + bitAnd(cast(key AS Uint64)) as keyBitAnd, + bitOr(cast(key AS Uint64)) as keyBitOr, + bitXor(cast(key AS Uint64)) as keyBitXor, + bitAnd(cast(sub AS Uint64)) as subBitAnd, + bitOr(cast(sub AS Uint64)) as subBitOr, + bitXor(cast(sub AS Uint64)) as subBitXor, + median(key) as keyMedian, + median(sub) as subMedian, + stdDev(key) as keyStdDev, + stdDev(sub) as subStdDev, + stdDev(empty) as emptyStdDev, + variance(key) as keyVariance, + variance(sub) as subVariance, + stdDevPop(key) as keyPopStdDev, + stdDevPop(sub) as subPopStdDev, + varPop(key) as keyPopVariance, + varPop(sub) as subPopVariance, + correlation(key, sub) AS corr, + covariance(key, sub) AS covar, + covarpop(key, sub) AS covarpop +from + (select cast(key as int) as key, Unwrap(cast(subkey as int)) as sub, value as val, cast(value AS int) AS empty from plato.Input) +group compact by (); diff --git a/yt/yql/tests/sql/suites/aggregate/avg_and_sum.sql b/yt/yql/tests/sql/suites/aggregate/avg_and_sum.sql new file mode 100644 index 0000000000..cdbf1dd58b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/avg_and_sum.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +select + avg(cast(key as int)) as key, + cast(sum(cast(subkey as int)) as varchar) as subkey, + min(value) as value +from plato.Input; diff --git a/yt/yql/tests/sql/suites/aggregate/avg_and_sum_by_value.cfg b/yt/yql/tests/sql/suites/aggregate/avg_and_sum_by_value.cfg new file mode 100644 index 0000000000..8153a1f3e5 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/avg_and_sum_by_value.cfg @@ -0,0 +1 @@ +in Input avg_and_sum_by_value.txt diff --git a/yt/yql/tests/sql/suites/aggregate/avg_and_sum_by_value.sql b/yt/yql/tests/sql/suites/aggregate/avg_and_sum_by_value.sql new file mode 100644 index 0000000000..c8a43bc533 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/avg_and_sum_by_value.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +select + avg(cast(key as int)) + 0.3 as key, + cast(sum(cast(subkey as int)) as varchar) as subkey, + value +from plato.Input +group by value +order by value; diff --git a/yt/yql/tests/sql/suites/aggregate/avg_and_sum_float.cfg b/yt/yql/tests/sql/suites/aggregate/avg_and_sum_float.cfg new file mode 100644 index 0000000000..812be3893b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/avg_and_sum_float.cfg @@ -0,0 +1 @@ +in Input input4.txt diff --git a/yt/yql/tests/sql/suites/aggregate/avg_and_sum_float.sql b/yt/yql/tests/sql/suites/aggregate/avg_and_sum_float.sql new file mode 100644 index 0000000000..dc2a4d3157 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/avg_and_sum_float.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +select + key, + avg(cast(subkey as Float)) as avg, + sum(cast(subkey as Float)) as sum, +from plato.Input +group by key +order by key; diff --git a/yt/yql/tests/sql/suites/aggregate/avg_interval.sql b/yt/yql/tests/sql/suites/aggregate/avg_interval.sql new file mode 100644 index 0000000000..dadd2fdd61 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/avg_interval.sql @@ -0,0 +1,2 @@ +/* syntax version 1 */ +discard select EnsureType(avg(cast(key As Interval)), Interval?) from plato.Input; diff --git a/yt/yql/tests/sql/suites/aggregate/avg_with_having.sql b/yt/yql/tests/sql/suites/aggregate/avg_with_having.sql new file mode 100644 index 0000000000..f48f0dcfc1 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/avg_with_having.sql @@ -0,0 +1,2 @@ +/* syntax version 1 */ +select value, avg(cast(key as int)) + 0.3 as key from plato.Input group by value having value > "foo" order by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/columns.txt.attr b/yt/yql/tests/sql/suites/aggregate/columns.txt.attr new file mode 100644 index 0000000000..70da6cab1d --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/columns.txt.attr @@ -0,0 +1,3 @@ +{ + "_read_schema"=[{"type"="string";"name"="a"};{"type"="uint64";"name"="b"};{"type"="int64";"name"="c"};{"type"="int64";"name"="d"}] +} diff --git a/yt/yql/tests/sql/suites/aggregate/compact_distinct.cfg b/yt/yql/tests/sql/suites/aggregate/compact_distinct.cfg new file mode 100644 index 0000000000..711689a5cb --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/compact_distinct.cfg @@ -0,0 +1,3 @@ +providers yt +in InputB input2.txt +in InputC input3.txt diff --git a/yt/yql/tests/sql/suites/aggregate/compact_distinct.sql b/yt/yql/tests/sql/suites/aggregate/compact_distinct.sql new file mode 100644 index 0000000000..4176ad60aa --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/compact_distinct.sql @@ -0,0 +1,14 @@ +USE plato; + +pragma AnsiOptionalAs; +pragma yt.CompactForDistinct; + +$x = ( + SELECT key, AVG(DISTINCT Cast(subkey as float)) s FROM InputB GROUP BY key +); + +$y = ( + SELECT key, SUM(Cast(subkey as float)) s FROM InputC GROUP BY key +); + +SELECT x.key, x.s AS s1, y.s AS s2 FROM $x x FULL OUTER JOIN $y y ON x.key = y.key; diff --git a/yt/yql/tests/sql/suites/aggregate/compare_by.cfg b/yt/yql/tests/sql/suites/aggregate/compare_by.cfg new file mode 100644 index 0000000000..612a5060aa --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/compare_by.cfg @@ -0,0 +1 @@ +in Input input_sorted.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/compare_by.sql b/yt/yql/tests/sql/suites/aggregate/compare_by.sql new file mode 100644 index 0000000000..f5c13b5348 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/compare_by.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +select + min_by(sub, key)as min, + max_by(value, sub) as max, + min_by(key, length(sub), 2) as min_list, + min_by(empty, length(sub), 2) as empty_result, + max_by(key, empty, 2) as empty_by +from + (select cast(key as int) as key, + Unwrap(cast(subkey as int)) as sub, value as value, + cast(value AS int) AS empty from plato.Input);
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/compare_by_nulls.sql b/yt/yql/tests/sql/suites/aggregate/compare_by_nulls.sql new file mode 100644 index 0000000000..7f48154923 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/compare_by_nulls.sql @@ -0,0 +1,19 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$src = select null as key, value from Input; +$src_opt = select null as key, Just(value) as value from Input; +$src_null = select null as key, null as value from Input; + + +select min_by(value, key) from $src; +select max_by(value, key) from $src_opt; +select min_by(value, key) from $src_null; + +select max_by(value, key) from (select * from $src limit 0); +select min_by(value, key) from (select * from $src_opt limit 0); +select max_by(value, key) from (select * from $src_null limit 0); + + +select min_by(value, key) from (select Nothing(String?) as key, value from Input); diff --git a/yt/yql/tests/sql/suites/aggregate/compare_by_tuple.cfg b/yt/yql/tests/sql/suites/aggregate/compare_by_tuple.cfg new file mode 100644 index 0000000000..d13818b046 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/compare_by_tuple.cfg @@ -0,0 +1 @@ +in Input input_compare.txt diff --git a/yt/yql/tests/sql/suites/aggregate/compare_by_tuple.sql b/yt/yql/tests/sql/suites/aggregate/compare_by_tuple.sql new file mode 100644 index 0000000000..efe9622f19 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/compare_by_tuple.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +select + key, + min_by(AsTuple(subkey, value), AsTuple(subkey, value)) as min, + max_by(AsTuple(subkey, value), AsTuple(subkey, value)) as max +from ( + select + key, + (case when length(subkey) != 0 then subkey else null end) as subkey, + (case when length(value) != 0 then value else null end) as value + from plato.Input +) group by key diff --git a/yt/yql/tests/sql/suites/aggregate/compare_tuple.cfg b/yt/yql/tests/sql/suites/aggregate/compare_tuple.cfg new file mode 100644 index 0000000000..d13818b046 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/compare_tuple.cfg @@ -0,0 +1 @@ +in Input input_compare.txt diff --git a/yt/yql/tests/sql/suites/aggregate/compare_tuple.sql b/yt/yql/tests/sql/suites/aggregate/compare_tuple.sql new file mode 100644 index 0000000000..ca1b69e071 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/compare_tuple.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +select + key, + min(AsTuple(subkey, value)) as min, + max(AsTuple(subkey, value)) as max +from ( + select + key, + (case when length(subkey) != 0 then subkey else null end) as subkey, + (case when length(value) != 0 then value else null end) as value + from plato.Input +) group by key +order by key diff --git a/yt/yql/tests/sql/suites/aggregate/count_distinct_with_filter.cfg b/yt/yql/tests/sql/suites/aggregate/count_distinct_with_filter.cfg new file mode 100644 index 0000000000..be223abe99 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/count_distinct_with_filter.cfg @@ -0,0 +1,2 @@ +in Input5 input5.txt + diff --git a/yt/yql/tests/sql/suites/aggregate/count_distinct_with_filter.sql b/yt/yql/tests/sql/suites/aggregate/count_distinct_with_filter.sql new file mode 100644 index 0000000000..c17ac1c3b9 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/count_distinct_with_filter.sql @@ -0,0 +1,4 @@ +SELECT count (distinct value) AS Count +FROM plato.Input5 +WHERE `key` = '150'; + diff --git a/yt/yql/tests/sql/suites/aggregate/dedup_state_keys.cfg b/yt/yql/tests/sql/suites/aggregate/dedup_state_keys.cfg new file mode 100644 index 0000000000..0b877ec216 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/dedup_state_keys.cfg @@ -0,0 +1 @@ +in Input dedup_state_keys.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/dedup_state_keys.sql b/yt/yql/tests/sql/suites/aggregate/dedup_state_keys.sql new file mode 100644 index 0000000000..9adbc0dad1 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/dedup_state_keys.sql @@ -0,0 +1,10 @@ +USE plato; +SELECT + key, + value, + count(*) AS c +FROM Input +GROUP BY + key, + value +ORDER BY c, key, value; diff --git a/yt/yql/tests/sql/suites/aggregate/dedup_state_keys.txt.attr b/yt/yql/tests/sql/suites/aggregate/dedup_state_keys.txt.attr new file mode 100644 index 0000000000..fc8a038324 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/dedup_state_keys.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"Uint64"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/aggregate/default.cfg b/yt/yql/tests/sql/suites/aggregate/default.cfg new file mode 100644 index 0000000000..389a8e8f21 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/default.cfg @@ -0,0 +1,4 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/descending.txt.attr b/yt/yql/tests/sql/suites/aggregate/descending.txt.attr new file mode 100644 index 0000000000..7024a9fc9c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/descending.txt.attr @@ -0,0 +1,21 @@ +{ + "schema"=< + "strict" = %true; + "unique_keys" = %false + >[ + { + "name" = "key"; + "type" = "string"; + "sort_order" = "descending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "sort_order" = "descending"; + }; + { + "name" = "value"; + "type" = "string"; + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/disable_blocks_with_spilling.cfg b/yt/yql/tests/sql/suites/aggregate/disable_blocks_with_spilling.cfg new file mode 100644 index 0000000000..bb375970b4 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/disable_blocks_with_spilling.cfg @@ -0,0 +1,5 @@ +in Input input.txt + +providers dq +pragma dq.SpillingEngine="file"; +pragma dq.EnableSpillingNodes="Aggregation"; diff --git a/yt/yql/tests/sql/suites/aggregate/disable_blocks_with_spilling.sql b/yt/yql/tests/sql/suites/aggregate/disable_blocks_with_spilling.sql new file mode 100644 index 0000000000..0d8671bf0b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/disable_blocks_with_spilling.sql @@ -0,0 +1,2 @@ +pragma BlockEngine='force'; +select count(key) from plato.Input group by key; diff --git a/yt/yql/tests/sql/suites/aggregate/ensure_count.sql b/yt/yql/tests/sql/suites/aggregate/ensure_count.sql new file mode 100644 index 0000000000..373ce7aa8b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/ensure_count.sql @@ -0,0 +1 @@ +select Ensure(COUNT(*), COUNT(*) > 3U, "WTF?") from plato.Input; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_column.sql b/yt/yql/tests/sql/suites/aggregate/group_by_column.sql new file mode 100644 index 0000000000..b6490dbe58 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_column.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +/* postgres can not */ +-- order to have same on yt and yamr +select count(1),z from plato.Input group by key as z order by z; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_column_alias_reuse.sql b/yt/yql/tests/sql/suites/aggregate/group_by_column_alias_reuse.sql new file mode 100644 index 0000000000..a5c8707341 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_column_alias_reuse.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +--INSERT INTO Output +SELECT + a.key as kk, +-- key as kkk, + aggregate_list(subkey) +FROM plato.Input4 as a +GROUP BY a.key as kk +ORDER BY kk; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_column_alias_reuse_for_join.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_column_alias_reuse_for_join.cfg new file mode 100644 index 0000000000..a1f7a5a9b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_column_alias_reuse_for_join.cfg @@ -0,0 +1,4 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_column_alias_reuse_for_join.sql b/yt/yql/tests/sql/suites/aggregate/group_by_column_alias_reuse_for_join.sql new file mode 100644 index 0000000000..e04f898efe --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_column_alias_reuse_for_join.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +--INSERT INTO Output +SELECT + a.key as kk, +-- kk, + aggregate_list(b.subkey) +FROM plato.Input as a +JOIN plato.Input4 as b +ON a.subkey == b.key +GROUP BY a.key as kk +ORDER BY kk; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_cube_duo.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_cube_duo.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_cube_duo.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_cube_duo.sql b/yt/yql/tests/sql/suites/aggregate/group_by_cube_duo.sql new file mode 100644 index 0000000000..6b5384cba8 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_cube_duo.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select sum(length(value)), key, subkey from plato.Input group by cube(key,subkey) order by key, subkey; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_cube_expr_trio.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_cube_expr_trio.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_cube_expr_trio.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_cube_expr_trio.sql b/yt/yql/tests/sql/suites/aggregate/group_by_cube_expr_trio.sql new file mode 100644 index 0000000000..771fa9a2dc --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_cube_expr_trio.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma sampleselect; + +select sum(length(value)) as s, m0, m1, m2 +from plato.Input +group by rollup(cast(key as uint32) as m0, cast(key as uint32) % 10u as m1, cast(key as uint32) % 100u as m2) +order by s, m0, m1, m2; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_cube_grouping.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_cube_grouping.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_cube_grouping.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_cube_grouping.sql b/yt/yql/tests/sql/suites/aggregate/group_by_cube_grouping.sql new file mode 100644 index 0000000000..eed0fd11fc --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_cube_grouping.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +/* postgres can not */ +select sum(length(value)) as s, m0, m1, m2, 2u * (2u * grouping(m0) + grouping(m1)) + grouping(m2) as ggg3 +from plato.Input +group by cube(cast(key as uint32) as m0, cast(key as uint32) % 10u as m1, cast(key as uint32) % 100u as m2) +order by s, m0, m1, m2; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_cube_grouping_and_expr.sql b/yt/yql/tests/sql/suites/aggregate/group_by_cube_grouping_and_expr.sql new file mode 100644 index 0000000000..290d87b25b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_cube_grouping_and_expr.sql @@ -0,0 +1,20 @@ +/* syntax version 1 */ +/* postgres can not */ +SELECT + key, + subkey, + value, + 2u * (2u * grouping(key) + grouping(subkey)) + grouping(value) as ggg3, +FROM + ( + SELECT + subkey, + value, + cast(key as Int32) as opt, + FROM + plato.Input + ) +GROUP BY + Unwrap(opt) AS key, + CUBE(subkey, value) +ORDER BY key, subkey, value; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_cube_join_count.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_cube_join_count.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_cube_join_count.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_cube_join_count.sql b/yt/yql/tests/sql/suites/aggregate/group_by_cube_join_count.sql new file mode 100644 index 0000000000..5f849d2be0 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_cube_join_count.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma sampleselect; +select kk, sk, grouping(kk, sk),count(1) FROM plato.Input AS t1 INNER JOIN plato.Input AS t2 USING (key) +GROUP BY CUBE(t1.key as kk, t1.subkey as sk) ORDER BY kk, sk; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_expr.cfg new file mode 100644 index 0000000000..c7e99df4d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr.cfg @@ -0,0 +1 @@ +in Input input_expr.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr.sql b/yt/yql/tests/sql/suites/aggregate/group_by_expr.sql new file mode 100644 index 0000000000..8a65d11bb7 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select sum(cast(subkey as uint32)) as s from plato.Input group by cast(key as uint32) % 10 order by s; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_alias_on_subexp.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_expr_alias_on_subexp.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_alias_on_subexp.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_alias_on_subexp.sql b/yt/yql/tests/sql/suites/aggregate/group_by_expr_alias_on_subexp.sql new file mode 100644 index 0000000000..aa6a7a6c28 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_alias_on_subexp.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + key, sk, aggregate_list(value) as values +FROM + (SELECT * FROM Input) +GROUP BY key, cast(subkey as uint32) % 2 as sk +ORDER BY key, sk; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_and_having.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_expr_and_having.cfg new file mode 100644 index 0000000000..c7e99df4d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_and_having.cfg @@ -0,0 +1 @@ +in Input input_expr.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_and_having.sql b/yt/yql/tests/sql/suites/aggregate/group_by_expr_and_having.sql new file mode 100644 index 0000000000..41407e9244 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_and_having.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select count(*) as count, mod_sk from plato.Input as a group by cast(subkey as uint32) % 10 as mod_sk, cast(key as uint32) % 10 as mod_k having mod_k == 7; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_columns_reuse.sql b/yt/yql/tests/sql/suites/aggregate/group_by_expr_columns_reuse.sql new file mode 100644 index 0000000000..5932fe83e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_columns_reuse.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + key, count(1) as count +FROM Input +GROUP BY cast(key as uint32) % 10 as key +ORDER BY key, count; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_dict.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_expr_dict.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_dict.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_dict.sql b/yt/yql/tests/sql/suites/aggregate/group_by_expr_dict.sql new file mode 100644 index 0000000000..b7bc07e73c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_dict.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +$data_dict = (select mod, Just(YQL::ToIndexDict(ListSort(aggregate_list(key)))) as dk, ListSort(aggregate_list(subkey)) as ls, ListSort(aggregate_list(value)) as lv from plato.Input group by cast(subkey as uint32) % 10 as mod); + +select * from $data_dict as t group by t.dk[0] as gk order by gk; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_lookup.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_expr_lookup.cfg new file mode 100644 index 0000000000..4ce1b28a20 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_lookup.cfg @@ -0,0 +1 @@ +in Input input_dict.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_lookup.sql b/yt/yql/tests/sql/suites/aggregate/group_by_expr_lookup.sql new file mode 100644 index 0000000000..e7171c7bea --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_lookup.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select count(*) as s from plato.Input group by `dict`["a"] order by s; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_mul_col.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_expr_mul_col.cfg new file mode 100644 index 0000000000..c7e99df4d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_mul_col.cfg @@ -0,0 +1 @@ +in Input input_expr.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_mul_col.sql b/yt/yql/tests/sql/suites/aggregate/group_by_expr_mul_col.sql new file mode 100644 index 0000000000..113245c1cd --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_mul_col.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +/* postgres can not */ +select count(*) as count, mod_sk + mod_k as mod_sum +from plato.Input as a +group by cast(subkey as uint32) % 10 as mod_sk, cast(key as uint32) % 10 as mod_k +order by count, mod_sum;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_only_join.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_expr_only_join.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_only_join.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_only_join.sql b/yt/yql/tests/sql/suites/aggregate/group_by_expr_only_join.sql new file mode 100644 index 0000000000..6c3ac3a6cc --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_only_join.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select aggregate_list(a.k), aval from (select cast(subkey as uint32) as k, value as val from plato.Input) as a left only join (select cast(key as uint32) as k, cast(subkey as uint32) as s from plato.Input) as b using(k) group by a.val as aval; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_order_by_expr.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_expr_order_by_expr.cfg new file mode 100644 index 0000000000..c7e99df4d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_order_by_expr.cfg @@ -0,0 +1 @@ +in Input input_expr.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_order_by_expr.sql b/yt/yql/tests/sql/suites/aggregate/group_by_expr_order_by_expr.sql new file mode 100644 index 0000000000..ddf5bf9a45 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_order_by_expr.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select sum(cast(key as uint32)) as keysum from plato.Input group by cast(key as uint32) / 100 + cast(subkey as uint32) % 10 order by keysum desc; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_semi_join.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_expr_semi_join.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_semi_join.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_semi_join.sql b/yt/yql/tests/sql/suites/aggregate/group_by_expr_semi_join.sql new file mode 100644 index 0000000000..b212c02136 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_semi_join.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +/* postgres can not */ +select ListSort(aggregate_list(b.uk)), ListSort(aggregate_list(b.uk)), bus +from + (select cast(key as uint32) as uk from plato.Input) as a +right semi join + (select cast(key as uint32) as uk, cast(subkey as uint32) as us from plato.Input) as b + using(uk) group by b.us as bus +order by bus; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_with_join.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_expr_with_join.cfg new file mode 100644 index 0000000000..bf1b560b58 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_with_join.cfg @@ -0,0 +1 @@ +in Input input_intersect_sorted.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_with_join.sql b/yt/yql/tests/sql/suites/aggregate/group_by_expr_with_join.sql new file mode 100644 index 0000000000..f078552fb2 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_with_join.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ + +pragma sampleselect; +select kk, ListSort(aggregate_list(t2.key)) FROM plato.Input AS t1 INNER JOIN plato.Input AS t2 ON t1.key==t2.subkey GROUP BY t1.key as kk ORDER by kk; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_expr_with_where.sql b/yt/yql/tests/sql/suites/aggregate/group_by_expr_with_where.sql new file mode 100644 index 0000000000..255b003850 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_expr_with_where.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +SELECT ki, count(1) FROM plato.Input WHERE ki IN (75, 20) GROUP BY Cast(key as Uint32) as ki ORDER BY ki; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_full_path.sql b/yt/yql/tests/sql/suites/aggregate/group_by_full_path.sql new file mode 100644 index 0000000000..a52f5d447b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_full_path.sql @@ -0,0 +1,2 @@ +/* syntax version 1 */ +SELECT a.value FROM plato.Input as a GROUP BY a.value ORDER BY a.value; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_alt_duo.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_gs_alt_duo.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_alt_duo.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_alt_duo.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_alt_duo.sql new file mode 100644 index 0000000000..766cb37e6b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_alt_duo.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select sum(length(value)), key, subkey from plato.Input group by grouping sets (key), grouping sets (subkey) order by key, subkey; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_and_having.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_and_having.sql new file mode 100644 index 0000000000..633656ab7c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_and_having.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + Sum(Cast(subkey as Uint32)) as sumLen, + key, + value, + Grouping(key, value) as grouping +FROM Input3 +GROUP BY GROUPING SETS ((key),(value)) +HAVING count(*) > 2 +ORDER BY key, value diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_duo.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_gs_duo.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_duo.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_duo.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_duo.sql new file mode 100644 index 0000000000..5510785d8c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_duo.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select sum(length(value)), key, subkey from plato.Input group by grouping sets ((key),(subkey)) order by key, subkey; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_few_empty.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_gs_few_empty.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_few_empty.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_few_empty.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_few_empty.sql new file mode 100644 index 0000000000..494ebb8c4e --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_few_empty.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +/* postgres can not */ +select count(1), key, subkey, value, grouping(key, subkey, value) from plato.Input group by grouping sets ((), value, rollup(key, subkey), ()) +order by key, subkey, value; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_flatten.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_flatten.sql new file mode 100644 index 0000000000..0ee762b985 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_flatten.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$input = select a.*, [1,2] as lst from Input as a; + +select key, subkey, some(lst) as lst_count +from $input flatten list by lst +where lst != 1 +group by grouping sets ((key), (key, subkey)) +order by key, subkey; + diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_flatten_columns.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_flatten_columns.sql new file mode 100644 index 0000000000..e7c274191e --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_flatten_columns.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$input = select a.*, <|k1:1, k2:2|> as s from Input as a; + +select key, subkey, some(k1) as k1, some(k2) as k2 +from $input flatten columns +group by grouping sets ((key), (key, subkey)) +order by key, subkey; + diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_flatten_expr.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_flatten_expr.sql new file mode 100644 index 0000000000..8b1e77e544 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_flatten_expr.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$input = select a.*, [1,2] as lst from Input as a; + +select key, subkey, count(lst) as lst_count +from $input flatten list by (ListExtend(lst, [3,4]) as lst) +where lst != 2 +group by grouping sets ((key), (key, subkey)) +order by key, subkey; + diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_grouping.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_gs_grouping.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_grouping.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_grouping.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_grouping.sql new file mode 100644 index 0000000000..a6f003d445 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_grouping.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +select count(1), key_first, val_first, grouping(key_first, val_first) as group +from plato.Input group by grouping sets (cast(key as uint32) / 100u as key_first, Substring(value, 1, 1) as val_first) +order by key_first, val_first; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_join_aliases.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_join_aliases.sql new file mode 100644 index 0000000000..598ae44056 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_join_aliases.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT k1, k2, b.subkey as kk2, SOME(a.value) as val +FROM plato.Input AS a JOIN plato.Input AS b USING(key) +GROUP BY GROUPING SETS( + (a.key as k1, b.subkey as k2), + (k1), + (b.subkey) +) +ORDER BY k1, kk2; + diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_simp.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_gs_simp.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_simp.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_simp.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_simp.sql new file mode 100644 index 0000000000..09c48d836b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_simp.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select sum(length(value)), key, subkey, grouping(key, subkey) from plato.Input group by grouping sets ((key, subkey), key, subkey) order by key, subkey; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_subselect.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_subselect.sql new file mode 100644 index 0000000000..8b28224ab5 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_subselect.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$sub = (SELECT + Sum(Cast(subkey as Uint32)) as sumLen, + key, + value, + Grouping(key, value) as grouping +FROM Input +GROUP BY GROUPING SETS ((key),(value)) +); + +--INSERT INTO Output +SELECT t.sumLen, t.key, t.value, t.grouping FROM $sub as t +ORDER BY t.key, t.value
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_subselect_asterisk.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_subselect_asterisk.sql new file mode 100644 index 0000000000..6966339274 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_subselect_asterisk.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$sub = (SELECT * FROM Input LIMIT 5); + +--INSERT INTO Output +SELECT + Sum(Cast(subkey as Uint32)) as sumLen, + key, + value, + Grouping(key, value) as grouping +FROM $sub +GROUP BY GROUPING SETS ((key),(value)) +ORDER BY key, value diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_with_rollup.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_gs_with_rollup.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_with_rollup.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_gs_with_rollup.sql b/yt/yql/tests/sql/suites/aggregate/group_by_gs_with_rollup.sql new file mode 100644 index 0000000000..ebbdbf828c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_gs_with_rollup.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +--insert into Output +select + key, subkey, count(1) as total_count, value, grouping(key, subkey, value) as group_mask +from Input +group by grouping sets (value, rollup(key, subkey)) +order by group_mask, value, key, subkey, total_count; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_hop.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop.sql b/yt/yql/tests/sql/suites/aggregate/group_by_hop.sql new file mode 100644 index 0000000000..334bf2cb83 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +/* ytfile can not */ +/* yt can not */ + +PRAGMA dq.AnalyticsHopping="true"; + +SELECT + user, + HOP_START() as ts, + SUM(payload) as payload +FROM plato.Input +GROUP BY HOP(DateTime::FromSeconds(CAST(ts as Uint32)), "PT10S", "PT10S", "PT10S"), user; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_compact.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_hop_compact.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_compact.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_compact.sql b/yt/yql/tests/sql/suites/aggregate/group_by_hop_compact.sql new file mode 100644 index 0000000000..a85dfcf6b5 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_compact.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +/* ytfile can not */ +/* yt can not */ + +PRAGMA dq.AnalyticsHopping="true"; + +SELECT + user, + HOP_START() as ts, + SUM(payload) as payload +FROM plato.Input +GROUP COMPACT BY HOP(DateTime::FromSeconds(CAST(ts as Uint32)), "PT10S", "PT10S", "PT10S"), user; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_distinct.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_hop_distinct.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_distinct.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_distinct.sql b/yt/yql/tests/sql/suites/aggregate/group_by_hop_distinct.sql new file mode 100644 index 0000000000..d9aed1fac9 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_distinct.sql @@ -0,0 +1,17 @@ +/* Test is broken for now */ + +/* syntax version 1 */ +/* postgres can not */ +/* ytfile can not */ +/* yt can not */ +/* dq can not */ +/* dqfile can not */ + +PRAGMA dq.AnalyticsHopping="true"; + +SELECT + user, + HOP_START() as ts, + SUM(DISTINCT payload) as payload +FROM plato.Input +GROUP BY HOP(DateTime::FromSeconds(CAST(ts as Uint32)), "PT10S", "PT10S", "PT10S"), user; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_distinct_compact.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_hop_distinct_compact.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_distinct_compact.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_distinct_compact.sql b/yt/yql/tests/sql/suites/aggregate/group_by_hop_distinct_compact.sql new file mode 100644 index 0000000000..0b44ceabea --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_distinct_compact.sql @@ -0,0 +1,17 @@ +/* Test is broken for now */ + +/* syntax version 1 */ +/* postgres can not */ +/* ytfile can not */ +/* yt can not */ +/* dq can not */ +/* dqfile can not */ + +PRAGMA dq.AnalyticsHopping="true"; + +SELECT + user, + HOP_START() as ts, + SUM(DISTINCT payload) as payload +FROM plato.Input +GROUP COMPACT BY HOP(DateTime::FromSeconds(CAST(ts as Uint32)), "PT10S", "PT10S", "PT10S"), user; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_expr_key.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_hop_expr_key.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_expr_key.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_expr_key.sql b/yt/yql/tests/sql/suites/aggregate/group_by_hop_expr_key.sql new file mode 100644 index 0000000000..cb3326e825 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_expr_key.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +/* ytfile can not */ +/* yt can not */ + +PRAGMA dq.AnalyticsHopping="true"; + +SELECT + user, + HOP_START() as ts, + SUM(payload) as payload +FROM plato.Input +GROUP COMPACT BY HOP(DateTime::FromSeconds(CAST(ts as Uint32)), "PT10S", "PT10S", "PT10S"), user, substring(user, 1, 1); diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_list_key.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_hop_list_key.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_list_key.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_list_key.sql b/yt/yql/tests/sql/suites/aggregate/group_by_hop_list_key.sql new file mode 100644 index 0000000000..77369585c9 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_list_key.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +/* ytfile can not */ +/* yt can not */ + +PRAGMA dq.AnalyticsHopping="true"; + +SELECT + user, + HOP_START() as ts, + SUM(payload) as payload +FROM plato.Input +GROUP COMPACT BY HOP(DateTime::FromSeconds(CAST(ts as Uint32)), "PT10S", "PT10S", "PT10S"), user, AsList(user, "1"); diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_only.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_hop_only.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_only.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_only.sql b/yt/yql/tests/sql/suites/aggregate/group_by_hop_only.sql new file mode 100644 index 0000000000..302e8aa1a5 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_only.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +/* ytfile can not */ +/* yt can not */ + +PRAGMA dq.AnalyticsHopping="true"; + +SELECT + HOP_START() as ts, + SUM(payload) as payload +FROM plato.Input +GROUP BY HOP(DateTime::FromSeconds(CAST(ts as Uint32)), "PT10S", "PT10S", "PT10S"); diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_only_distinct.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_hop_only_distinct.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_only_distinct.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_only_distinct.sql b/yt/yql/tests/sql/suites/aggregate/group_by_hop_only_distinct.sql new file mode 100644 index 0000000000..1ab7dc5b75 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_only_distinct.sql @@ -0,0 +1,16 @@ +/* Test is broken for now */ + +/* syntax version 1 */ +/* postgres can not */ +/* ytfile can not */ +/* yt can not */ +/* dq can not */ +/* dqfile can not */ + +PRAGMA dq.AnalyticsHopping="true"; + +SELECT + HOP_START() as ts, + SUM(DISTINCT payload) as payload +FROM plato.Input +GROUP BY HOP(DateTime::FromSeconds(CAST(ts as Uint32)), "PT10S", "PT10S", "PT10S"); diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_only_start.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_hop_only_start.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_only_start.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_only_start.sql b/yt/yql/tests/sql/suites/aggregate/group_by_hop_only_start.sql new file mode 100644 index 0000000000..963df3855c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_only_start.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +/* ytfile can not */ +/* yt can not */ + +PRAGMA dq.AnalyticsHopping="true"; + +SELECT + HOP_START() +FROM plato.Input +GROUP BY HOP(DateTime::FromSeconds(CAST(ts as Uint32)), "PT10S", "PT10S", "PT10S"); diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_star.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_hop_star.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_star.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_star.sql b/yt/yql/tests/sql/suites/aggregate/group_by_hop_star.sql new file mode 100644 index 0000000000..75fbea9671 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_star.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +/* ytfile can not */ +/* yt can not */ + +PRAGMA dq.AnalyticsHopping="true"; + +SELECT * +FROM plato.Input +GROUP BY HOP(DateTime::FromSeconds(CAST(ts as Uint32)), "PT10S", "PT10S", "PT10S"), user; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_static.sql b/yt/yql/tests/sql/suites/aggregate/group_by_hop_static.sql new file mode 100644 index 0000000000..fec507c827 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_static.sql @@ -0,0 +1,26 @@ +/* syntax version 1 */ +/* postgres can not */ +/* ytfile can not */ +/* yt can not */ + +$input = SELECT * FROM AS_TABLE([ + <|"time":"2024-01-01T00:00:01Z", "user": 1|>, + <|"time":"2024-01-01T00:00:02Z", "user": 1|>, + <|"time":"2024-01-01T00:00:03Z", "user": 1|>, + <|"time":"2024-01-01T00:00:01Z", "user": 2|>, + <|"time":"2024-01-01T00:00:02Z", "user": 2|>, + <|"time":"2024-01-01T00:00:03Z", "user": 2|>, + <|"time":"2024-01-01T00:00:01Z", "user": 2|>, + <|"time":"2024-01-01T00:00:02Z", "user": 2|>, + <|"time":"2024-01-01T00:00:03Z", "user": 2|>, + <|"time":"2024-01-01T00:00:01Z", "user": 3|>, + <|"time":"2024-01-01T00:00:02Z", "user": 3|>, + <|"time":"2024-01-01T00:00:03Z", "user": 3|> +]); + +SELECT + user, + COUNT(*) as count, + HOP_START() as start, +FROM $input +GROUP BY HOP(CAST(time as Timestamp), 'PT1S', 'PT1S', 'PT1S'), user; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_hop_static_list_key.sql b/yt/yql/tests/sql/suites/aggregate/group_by_hop_static_list_key.sql new file mode 100644 index 0000000000..3639207bb3 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_hop_static_list_key.sql @@ -0,0 +1,26 @@ +/* syntax version 1 */ +/* postgres can not */ +/* ytfile can not */ +/* yt can not */ + +$input = SELECT * FROM AS_TABLE([ + <|"time":"2024-01-01T00:00:01Z", "user": 1|>, + <|"time":"2024-01-01T00:00:02Z", "user": 1|>, + <|"time":"2024-01-01T00:00:03Z", "user": 1|>, + <|"time":"2024-01-01T00:00:01Z", "user": 2|>, + <|"time":"2024-01-01T00:00:02Z", "user": 2|>, + <|"time":"2024-01-01T00:00:03Z", "user": 2|>, + <|"time":"2024-01-01T00:00:01Z", "user": 2|>, + <|"time":"2024-01-01T00:00:02Z", "user": 2|>, + <|"time":"2024-01-01T00:00:03Z", "user": 2|>, + <|"time":"2024-01-01T00:00:01Z", "user": 3|>, + <|"time":"2024-01-01T00:00:02Z", "user": 3|>, + <|"time":"2024-01-01T00:00:03Z", "user": 3|> +]); + +SELECT + user, + COUNT(*) as count, + HOP_START() as start, +FROM $input +GROUP BY HOP(CAST(time as Timestamp), 'PT1S', 'PT1S', 'PT1S'), user, AsList(user, 0); diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_mul_gb_ru.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gb_ru.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gb_ru.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_mul_gb_ru.sql b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gb_ru.sql new file mode 100644 index 0000000000..63492a2fa7 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gb_ru.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +/* postgres can not */ +select sum(length(value)), vf, kf, kl, grouping(vf, kf, kl) as ggg3 from plato.Input group by Substring(value, 0, 1) as vf, cube(cast(key as uint32) % 10u as kl, cast(key as uint32) / 100u as kf) +order by vf, kf, kl; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_expr_and_column.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_expr_and_column.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_expr_and_column.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_expr_and_column.sql b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_expr_and_column.sql new file mode 100644 index 0000000000..df6dc769ba --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_expr_and_column.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +--insert into Output +select + count(1) as count, kf, key, vf, vl, grouping(kf, key, vf, vl) as grouping +from Input group by grouping sets( + (cast(key as uint32) / 100u as kf, key), + (Substring(value, 0, 1) as vf, Substring(value, 2, 1) as vl) +) +order by kf, key, vf, vl; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_gs.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_gs.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_gs.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_gs.sql b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_gs.sql new file mode 100644 index 0000000000..0cefa50a9a --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_gs.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +/* postgres can not */ +select count(1), kf, kl, vf, vl, grouping(kf, kl, vf, vl) from plato.Input group by grouping sets(cast(key as uint32) / 100u as kf, cast(key as uint32) % 10u as kl), grouping sets(Substring(value, 0, 1) as vf, Substring(value, 2, 1) as vl) +order by kf, kl, vf, vl; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_ru.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_ru.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_ru.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_ru.sql b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_ru.sql new file mode 100644 index 0000000000..e325b93fff --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_mul_gs_ru.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +/* postgres can not */ +select count(1), kf, kl, vf, vl, grouping(kf, kl, vf, vl) as gggg from plato.Input group by grouping sets((cast(key as uint32) / 100u as kf, cast(key as uint32) % 10u as kl)), rollup(Substring(value, 0, 1) as vf, Substring(value, 2, 1) as vl) +order by kf, kl, vf, vl; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_mul_ru_ru.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_mul_ru_ru.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_mul_ru_ru.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_mul_ru_ru.sql b/yt/yql/tests/sql/suites/aggregate/group_by_mul_ru_ru.sql new file mode 100644 index 0000000000..569539f114 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_mul_ru_ru.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +/* postgres can not */ +select count(1), kf, kl, vf, vl, grouping(kf, kl, vf, vl) from plato.Input group by rollup(cast(key as uint32) / 100u as kf, cast(key as uint32) % 10u as kl), rollup(Substring(value, 0, 1) as vf, Substring(value, 2, 1) as vl) +order by kf, kl, vf, vl; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_aggr_expr.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_aggr_expr.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_aggr_expr.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_aggr_expr.sql b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_aggr_expr.sql new file mode 100644 index 0000000000..59a59d1aef --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_aggr_expr.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$input = (select key, subkey, substring(value, 0, 1) == substring(value, 2, 1) as value_from_a from Input); + +--insert into Output +select + key, + subkey, + count_if(value_from_a) as approved, + cast(count_if(value_from_a) as double) / count(*) as approved_share, + count(*) as total +from $input +group by rollup(key, subkey) +order by key, subkey +; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_ref.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_ref.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_ref.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_ref.sql b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_ref.sql new file mode 100644 index 0000000000..ee10388e6b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_ref.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$input=(select cast(key as int32) ?? 0 as kk, cast(subkey as int32) ?? 0 as sk, value from Input); + +--insert into Output +select + kk, sk, count(*) as total_count +from $input +where sk in (23, 37, 75, 150, ) +group by rollup(kk, sk) +order by kk, sk, total_count +; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_ref_same_names.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_ref_same_names.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_ref_same_names.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_ref_same_names.sql b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_ref_same_names.sql new file mode 100644 index 0000000000..f03bd9a437 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_ref_same_names.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$input=(select cast(key as uint32) ?? 0 as key, cast(subkey as int32) ?? 0 as subkey, value from Input); + +--insert into Output +select + key, subkey, count(*) as total_count +from $input +where subkey in (23, 37, 75,150) +group by rollup(key, subkey) +order by key, subkey, total_count +; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_reuse.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_reuse.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_reuse.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_reuse.sql b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_reuse.sql new file mode 100644 index 0000000000..07a46979c6 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_column_reuse.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$input=(select cast(key as uint32) ?? 0 as key, cast(subkey as int32) ?? 0 as subkey, value from Input); + +$request = ( + select + key, subkey, count(*) as total_count + from $input + where subkey in (23, 37, 75,150) + group by rollup(key, subkey) +); + +--insert into Output +select key, subkey, total_count from $request +order by key, subkey, total_count; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_duo.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_duo.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_duo.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_duo.sql b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_duo.sql new file mode 100644 index 0000000000..93e586766e --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_duo.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select sum(length(value)), key, subkey from plato.Input group by rollup(key,subkey) order by key, subkey; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_duo_opt.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_duo_opt.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_duo_opt.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_duo_opt.sql b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_duo_opt.sql new file mode 100644 index 0000000000..4a58b473f7 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_duo_opt.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select count(1), k, subkey from plato.Input group by rollup(cast(key as uint32) as k, subkey) order by k, subkey; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping.sql b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping.sql new file mode 100644 index 0000000000..48bae25392 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +/* postgres can not */ +select sum(length(value)) as s, m0, m1, m2, grouping(m0, m1, m2) as ggg +from plato.Input +group by rollup(cast(key as uint32) as m0, cast(key as uint32) % 10u as m1, cast(key as uint32) % 100u as m2) +order by s, m0, m1, m2; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping_hum.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping_hum.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping_hum.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping_hum.sql b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping_hum.sql new file mode 100644 index 0000000000..f92cad03fa --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping_hum.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +select count(1) as elements, key_first, val_first, case grouping(key_first, val_first) + when 1 then 'Total By First digit key' + when 2 then 'Total By First char value' + when 3 then 'Grand Total' + else 'Group' +end as group +from plato.Input group by cube(cast(key as uint32) / 100u as key_first, Substring(value, 1, 1) as val_first) +order by elements, key_first, val_first; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping_hum_bind.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping_hum_bind.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping_hum_bind.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping_hum_bind.sql b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping_hum_bind.sql new file mode 100644 index 0000000000..1432eaa2a6 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_grouping_hum_bind.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +$hum_gr_kv = ($grouping) -> { + return case $grouping + when 1 then 'Total By First digit key' + when 2 then 'Total By First char value' + when 3 then 'Grand Total' + else 'Group' + end; +}; + +select count(1) as elements, key_first, val_first, $hum_gr_kv(grouping(key_first, val_first)) as group +from plato.Input group by cube(cast(key as uint32) / 100u as key_first, Substring(value, 1, 1) as val_first) +order by elements, key_first, val_first; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_key_check.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_key_check.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_key_check.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_key_check.sql b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_key_check.sql new file mode 100644 index 0000000000..385b50c5d9 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_key_check.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + key, prefix, + COUNT(*) AS cnt, + grouping(key, prefix) as agrouping +FROM Input +GROUP BY ROLLUP (key as key, Substring(value, 1, 1) as prefix) +ORDER BY key, prefix; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_udf.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_udf.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_udf.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_udf.sql b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_udf.sql new file mode 100644 index 0000000000..ee546d63e7 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_udf.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +select key, subkey, Unicode::ToUpper(CAST(value AS Utf8)) as value, count(1) as cnt from Input GROUP BY ROLLUP(key,subkey, value) ORDER BY key,subkey,value,cnt; + diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_with_filter.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_with_filter.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_with_filter.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_rollup_with_filter.sql b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_with_filter.sql new file mode 100644 index 0000000000..cb1e3c2def --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_rollup_with_filter.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +--insert into Output +select + key, subkey, count(*) as total_count +from plato.Input +where key in ('023', '037') +group by rollup(key, subkey) +order by key, subkey +; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_join.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_join.sql b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join.sql new file mode 100644 index 0000000000..7ef6caf16a --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ + +pragma sampleselect; +select * FROM plato.Input AS t1 INNER JOIN plato.Input AS t2 USING (key) GROUP BY ROLLUP(t1.key as kk, t1.subkey as sk) ORDER BY kk, sk; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_agg.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_agg.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_agg.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_agg.sql b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_agg.sql new file mode 100644 index 0000000000..7c65ec4383 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_agg.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ + +pragma sampleselect; +select kk, sk, sum(cast(t2.subkey as Uint32)) FROM plato.Input AS t1 INNER JOIN plato.Input AS t2 USING (key) GROUP BY ROLLUP(t1.key as kk, t1.subkey as sk) ORDER BY kk, sk; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_grouping.sql b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_grouping.sql new file mode 100644 index 0000000000..c5e431a9ee --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_grouping.sql @@ -0,0 +1,14 @@ +USE plato; + +$t = select distinct key from Input; + +select + key, subkey, + max(value) as max_val, + grouping(a.key, a.subkey) as g_ks, + grouping(a.subkey, a.key) as g_sk, + grouping(a.key) as g_k, + grouping(a.subkey) as g_s, +from Input as a +join $t as b on a.key = b.key +group by rollup(a.key, a.subkey); diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_qualified.sql b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_qualified.sql new file mode 100644 index 0000000000..b782e754f0 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_qualified.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + k, + b.subkey as sk, + MIN(a.value) as val, + GROUPING(k, b.subkey) as g, +FROM plato.Input AS a JOIN plato.Input AS b USING(key) +GROUP BY ROLLUP (a.key as k, b.subkey) +ORDER BY g, k, sk +; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_simple.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_simple.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_simple.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_simple.sql b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_simple.sql new file mode 100644 index 0000000000..f232af79be --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_simple.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ + +pragma sampleselect; +select kk, sk, max(t2.subkey) as ss FROM plato.Input AS t1 INNER JOIN plato.Input AS t2 USING (key) GROUP BY ROLLUP(t1.key as kk, t1.subkey as sk) ORDER BY kk, sk; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_simple_fs_multiusage.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_simple_fs_multiusage.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_simple_fs_multiusage.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_simple_fs_multiusage.sql b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_simple_fs_multiusage.sql new file mode 100644 index 0000000000..1932c58252 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_simple_fs_multiusage.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +/* postgres can not */ + +pragma sampleselect; +pragma config.flags("OptimizerFlags", "FieldSubsetEnableMultiusage"); +select kk, sk, max(t2.subkey) as ss FROM plato.Input AS t1 INNER JOIN plato.Input AS t2 USING (key) GROUP BY ROLLUP(t1.key as kk, t1.subkey as sk) ORDER BY kk, sk; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_star.sql b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_star.sql new file mode 100644 index 0000000000..230c974712 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_join_star.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +/* postgres can not */ + +select * FROM plato.Input AS t1 INNER JOIN plato.Input AS t2 USING (key) GROUP BY ROLLUP(t1.key as kk, t1.subkey) ORDER BY kk, subkey; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_partition_by_grouping.sql b/yt/yql/tests/sql/suites/aggregate/group_by_ru_partition_by_grouping.sql new file mode 100644 index 0000000000..e9d35dde11 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_partition_by_grouping.sql @@ -0,0 +1,13 @@ +use plato; + +select + key, + subkey, + min(value) as mv, + grouping(key) + grouping(subkey) as gsum, + rank() over ( + partition by grouping(key) + grouping(subkey) + order by key, subkey, min(value) + ) as rk, +from Input +group by rollup(key, subkey); diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_with_select_distinct.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_ru_with_select_distinct.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_with_select_distinct.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_with_select_distinct.sql b/yt/yql/tests/sql/suites/aggregate/group_by_ru_with_select_distinct.sql new file mode 100644 index 0000000000..30971d58aa --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_with_select_distinct.sql @@ -0,0 +1,4 @@ +use plato; + +select distinct key from Input group by rollup(key, subkey) order by key; + diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_with_window_func.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_ru_with_window_func.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_with_window_func.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_ru_with_window_func.sql b/yt/yql/tests/sql/suites/aggregate/group_by_ru_with_window_func.sql new file mode 100644 index 0000000000..1a5bbafc85 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_ru_with_window_func.sql @@ -0,0 +1,3 @@ +use plato; + +select row_number() over (order by key) as rn, key from Input group by rollup(key, subkey) order by rn; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_session.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session.sql b/yt/yql/tests/sql/suites/aggregate/group_by_session.sql new file mode 100644 index 0000000000..5faa7d4e14 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + MIN(ts) ?? 100500 as session_start, + ListSort(AGGREGATE_LIST(ts ?? 100500)) as session, + COUNT(1) as session_len +FROM plato.Input +GROUP BY SessionWindow(ts, 10), user +ORDER BY user, session_start; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_aliases.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_session_aliases.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_aliases.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_aliases.sql b/yt/yql/tests/sql/suites/aggregate/group_by_session_aliases.sql new file mode 100644 index 0000000000..ef71f18e70 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_aliases.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + session_start, + SessionStart() as session_start1, + SessionStart() ?? 100500 as session_start2, + ListSort(AGGREGATE_LIST(ts ?? 100500)) as session, + COUNT(1) as session_len +FROM plato.Input +GROUP BY SessionWindow(ts, 10) as session_start, user +ORDER BY user, session_start; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_compact.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_session_compact.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_compact.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_compact.sql b/yt/yql/tests/sql/suites/aggregate/group_by_session_compact.sql new file mode 100644 index 0000000000..1cbffd58bd --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_compact.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + MIN(ts) ?? 100500 as session_start, + ListSort(AGGREGATE_LIST(ts ?? 100500)) as session, + COUNT(1) as session_len +FROM plato.Input +GROUP COMPACT BY user, SessionWindow(ts, 10) +ORDER BY user, session_start; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_distinct.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_session_distinct.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_distinct.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_distinct.sql b/yt/yql/tests/sql/suites/aggregate/group_by_session_distinct.sql new file mode 100644 index 0000000000..9a6e3c848b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_distinct.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + MIN(ts) ?? 100500 as session_start, + ListSort(AGGREGATE_LIST(ts ?? 100500)) as session, + COUNT(1) as session_len, + COUNT(DISTINCT payload) as distinct_playloads +FROM plato.Input +GROUP BY SessionWindow(ts, 10), user +ORDER BY user, session_start; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_distinct_compact.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_session_distinct_compact.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_distinct_compact.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_distinct_compact.sql b/yt/yql/tests/sql/suites/aggregate/group_by_session_distinct_compact.sql new file mode 100644 index 0000000000..ba4607de17 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_distinct_compact.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + MIN(ts) ?? 100500 as session_start, + ListSort(AGGREGATE_LIST(ts ?? 100500)) as session, + COUNT(1) as session_len, + COUNT(DISTINCT payload) as distinct_playloads +FROM plato.Input +GROUP COMPACT BY user, SessionWindow(ts, 10) +ORDER BY user, session_start; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_extended.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_session_extended.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_extended.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_extended.sql b/yt/yql/tests/sql/suites/aggregate/group_by_session_extended.sql new file mode 100644 index 0000000000..1b9af1d0d8 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_extended.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +/* postgres can not */ + +$init = ($row) -> (AsStruct($row.ts ?? 0 as value, 1 as count)); + +$calculate = ($_row, $state) -> ($state.value); +-- split partition into two-element grooups, make session key to be cumulative sum of ts from partition start +$update = ($row, $state) -> { + $state = AsStruct($state.count + 1 as count, $state.value as value); + $state = AsStruct($state.count as count, $state.value + ($row.ts ?? 0) as value); + return AsTuple(Unwrap($state.count % 2) == 1, $state); +}; + +SELECT + user, + SessionStart() as session_start, + ListSort(AGGREGATE_LIST(ts ?? 100500)) as session, + COUNT(1) as session_len +FROM plato.Input +GROUP BY SessionWindow(ts, $init, $update, $calculate), user +ORDER BY user, session_start; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_extended_subset.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_session_extended_subset.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_extended_subset.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_extended_subset.sql b/yt/yql/tests/sql/suites/aggregate/group_by_session_extended_subset.sql new file mode 100644 index 0000000000..55d34f5e27 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_extended_subset.sql @@ -0,0 +1,20 @@ +/* syntax version 1 */ +/* postgres can not */ + +$init = ($row) -> (AsStruct($row.ts ?? 0 as value, 1 as count)); + +$calculate = ($_row, $state) -> ($state.value); +-- split partition into two-element grooups, make session key to be cumulative sum of ts from partition start +$update = ($row, $state) -> { + $state = AsStruct($state.count + 1 as count, $state.value as value); + $state = AsStruct($state.count as count, $state.value + ($row.ts ?? 0) as value); + return AsTuple(Unwrap($state.count % 2) == 1, $state); +}; + +$src = SELECT t.*, (ts ?? 0, payload) as sort_col FROM plato.Input as t; + +SELECT + COUNT(1) as session_len, +FROM $src +GROUP BY user, SessionWindow(sort_col, $init, $update, $calculate) +ORDER BY session_len; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_nopush.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_session_nopush.cfg new file mode 100644 index 0000000000..9e0b837318 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_nopush.cfg @@ -0,0 +1,2 @@ +in Input session1.txt +providers yt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_nopush.sql b/yt/yql/tests/sql/suites/aggregate/group_by_session_nopush.sql new file mode 100644 index 0000000000..fd8e46a071 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_nopush.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +/* yt can not */ + +SELECT * FROM ( + SELECT + user, + cast(session_start as Int64) as ss, + ListSort(AGGREGATE_LIST(ts)) as session, + COUNT(1) as session_len + FROM plato.Input + GROUP BY SessionWindow(ts, 10) as session_start, user +) +WHERE ss != 100500; -- should not push down diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_only.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_session_only.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_only.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_only.sql b/yt/yql/tests/sql/suites/aggregate/group_by_session_only.sql new file mode 100644 index 0000000000..f63a3f25b2 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_only.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + MIN(ts) ?? 100500 as session_start, +FROM plato.Input +GROUP BY SessionWindow(ts, 9) +ORDER BY session_start diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_only_distinct.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_session_only_distinct.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_only_distinct.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_only_distinct.sql b/yt/yql/tests/sql/suites/aggregate/group_by_session_only_distinct.sql new file mode 100644 index 0000000000..512b6f386f --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_only_distinct.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + MIN(DISTINCT ts) ?? 100500 as session_start, +FROM plato.Input +GROUP BY SessionWindow(ts, 10) +ORDER BY session_start diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_star.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_session_star.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_star.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_session_star.sql b/yt/yql/tests/sql/suites/aggregate/group_by_session_star.sql new file mode 100644 index 0000000000..b8d2dcd7b2 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_session_star.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ + +PRAGMA OrderedColumns; + +SELECT * +FROM plato.Input +GROUP BY user, SessionWindow(ts, 10) as session_start +ORDER BY user, session_start; + +SELECT * +FROM plato.Input +GROUP BY user, SessionWindow(ts, 10) +ORDER BY user, group0; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_tablerow_column.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_tablerow_column.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_tablerow_column.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_tablerow_column.sql b/yt/yql/tests/sql/suites/aggregate/group_by_tablerow_column.sql new file mode 100644 index 0000000000..a3fc042006 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_tablerow_column.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; +select * +from Input +group by TableRow().key as k +order by k; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_tz_date.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_tz_date.cfg new file mode 100644 index 0000000000..be223abe99 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_tz_date.cfg @@ -0,0 +1,2 @@ +in Input5 input5.txt + diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_tz_date.sql b/yt/yql/tests/sql/suites/aggregate/group_by_tz_date.sql new file mode 100644 index 0000000000..603c7ea45e --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_tz_date.sql @@ -0,0 +1,3 @@ +SELECT SUM(CAST(subkey AS Uint8)) AS sum +FROM plato.Input5 +GROUP BY CAST(CAST(key AS Uint16) AS TzDate); diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_with_udf_by_aggregate.cfg b/yt/yql/tests/sql/suites/aggregate/group_by_with_udf_by_aggregate.cfg new file mode 100644 index 0000000000..efcd9cfaeb --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_with_udf_by_aggregate.cfg @@ -0,0 +1,3 @@ +in Input input_expr.txt +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_with_udf_by_aggregate.sql b/yt/yql/tests/sql/suites/aggregate/group_by_with_udf_by_aggregate.sql new file mode 100644 index 0000000000..0ae44d64c5 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_with_udf_by_aggregate.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +$majority_vote = Python::majority_vote( + Callable<(List<String?>)->String>, + @@ +def majority_vote(values): + counters = {} + for value in values: + counters[value] = counters.get(value, 0) + 1 + return sorted((count, value) for value, count in counters.items())[-1][1] + @@ +); + +select count(*), val, $majority_vote(aggregate_list(subkey)) from plato.Input group by cast(key as uint32) % 2 as val; diff --git a/yt/yql/tests/sql/suites/aggregate/group_by_with_where.sql b/yt/yql/tests/sql/suites/aggregate/group_by_with_where.sql new file mode 100644 index 0000000000..f6ec83308c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_by_with_where.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +SELECT ki, count(1) FROM plato.Input WHERE ki IN ('075', '150') GROUP BY key as ki ORDER BY ki; diff --git a/yt/yql/tests/sql/suites/aggregate/group_compact_sorted.cfg b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted.cfg new file mode 100644 index 0000000000..5b8e8ea74d --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted.cfg @@ -0,0 +1 @@ +in Input sorted.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_compact_sorted.sql b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted.sql new file mode 100644 index 0000000000..496b6c1d76 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +SELECT + key, count(value) as cnt, min(value) as min, max(value) as max +FROM Input +GROUP COMPACT BY key +ORDER BY key; + diff --git a/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_distinct.cfg b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_distinct.cfg new file mode 100644 index 0000000000..64197c4f2e --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_distinct.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +udf set_udf diff --git a/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_distinct.sql b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_distinct.sql new file mode 100644 index 0000000000..a29fcd4419 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_distinct.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +SELECT + key,count(distinct value) as cnt, + ListSort(aggregate_list(distinct value)) as lst, + min(value) as min, max(value) as max +FROM Input +GROUP COMPACT BY key +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_distinct_complex.cfg b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_distinct_complex.cfg new file mode 100644 index 0000000000..64197c4f2e --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_distinct_complex.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +udf set_udf diff --git a/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_distinct_complex.sql b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_distinct_complex.sql new file mode 100644 index 0000000000..74d23fe2df --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_distinct_complex.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +SELECT + key,count(distinct value) as cnt, + ListSort(ListMap( + aggregate_list(distinct value),($x)->{ return DictItems($x) })) as lst +FROM (SELECT key, AsDict(AsTuple(1, value)) as value from Input) +GROUP COMPACT BY key +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_with_diff_order.cfg b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_with_diff_order.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_with_diff_order.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_with_diff_order.sql b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_with_diff_order.sql new file mode 100644 index 0000000000..f131544139 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/group_compact_sorted_with_diff_order.sql @@ -0,0 +1,38 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +insert into @ksv +select * from Input order by key, subkey, value; + +insert into @vsk +select * from Input order by value, subkey, key; + +insert into @vs +select * from Input order by value, subkey; + +commit; + +select key, subkey, value from @ksv -- YtReduce +group compact by key, subkey, value +order by key, subkey, value; + +select key, subkey, value from @vsk -- YtReduce +group /*+ compact() */ by key, subkey, value +order by key, subkey, value; + +select key, subkey, some(value) as value from @ksv -- YtReduce +group compact by key, subkey +order by key, subkey, value; + +select key, subkey, some(value) as value from @vsk -- YtMapReduce +group compact by key, subkey +order by key, subkey, value; + +select key, subkey, value from concat(@ksv, @vsk) -- YtMapReduce +group compact by key, subkey, value +order by key, subkey, value; + +select some(key) as key, subkey, value from concat(@vs, @vsk) -- YtReduce +group compact by subkey, value +order by key, subkey, value; diff --git a/yt/yql/tests/sql/suites/aggregate/having_cast.sql b/yt/yql/tests/sql/suites/aggregate/having_cast.sql new file mode 100644 index 0000000000..15965428c9 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/having_cast.sql @@ -0,0 +1 @@ +select value from plato.Input group by value having avg(cast(key as int)) > 100 order by value; diff --git a/yt/yql/tests/sql/suites/aggregate/having_distinct_expr.cfg b/yt/yql/tests/sql/suites/aggregate/having_distinct_expr.cfg new file mode 100644 index 0000000000..e377e2a9ec --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/having_distinct_expr.cfg @@ -0,0 +1 @@ +in Input3 input3.txt diff --git a/yt/yql/tests/sql/suites/aggregate/having_distinct_expr.sql b/yt/yql/tests/sql/suites/aggregate/having_distinct_expr.sql new file mode 100644 index 0000000000..66ec18d2c8 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/having_distinct_expr.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +use plato; +select key from Input3 group by key having count(distinct subkey || subkey) > 1; diff --git a/yt/yql/tests/sql/suites/aggregate/histogram_cdf.sql b/yt/yql/tests/sql/suites/aggregate/histogram_cdf.sql new file mode 100644 index 0000000000..3708106e4b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/histogram_cdf.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +USE plato; + +SELECT + histogram_cdf(CAST(key AS double)) AS key, + adaptive_ward_histogram_cdf(CAST(subkey AS double)) AS subkey +FROM Input4; diff --git a/yt/yql/tests/sql/suites/aggregate/input5.txt.attr b/yt/yql/tests/sql/suites/aggregate/input5.txt.attr new file mode 100644 index 0000000000..f0b397616f --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/input5.txt.attr @@ -0,0 +1,12 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["OptionalType";["DataType";"String"]]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} + diff --git a/yt/yql/tests/sql/suites/aggregate/input_dict.txt.attr b/yt/yql/tests/sql/suites/aggregate/input_dict.txt.attr new file mode 100644 index 0000000000..1dbf7040c5 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/input_dict.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["dict";["DictType";["DataType";"String"];["DataType";"String"]]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/aggregate/input_dsv.txt.attr b/yt/yql/tests/sql/suites/aggregate/input_dsv.txt.attr new file mode 100644 index 0000000000..14544c6d7b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/input_dsv.txt.attr @@ -0,0 +1,32 @@ +{ + "_yql_read_udf"="Dsv.ReadRecord"; + "_yql_read_udf_run_config"="@@"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/aggregate/library_error_in_aggregation_fail.cfg b/yt/yql/tests/sql/suites/aggregate/library_error_in_aggregation_fail.cfg new file mode 100644 index 0000000000..f139073dff --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/library_error_in_aggregation_fail.cfg @@ -0,0 +1,2 @@ +in Input input.txt +xfail diff --git a/yt/yql/tests/sql/suites/aggregate/library_error_in_aggregation_fail.sql b/yt/yql/tests/sql/suites/aggregate/library_error_in_aggregation_fail.sql new file mode 100644 index 0000000000..a5d6355234 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/library_error_in_aggregation_fail.sql @@ -0,0 +1,20 @@ +/* custom error: Expected numeric type, but got String */ + +USE plato; + +select * from ( +SELECT + a.key as x, sum(b.value) +FROM Input as a +JOIN Input as b +USING (key) +GROUP BY a.key +) where x > "aaa" +ORDER BY x; + +select 1; +select 1; +select 1; +select 1; +select 1; +select 1; diff --git a/yt/yql/tests/sql/suites/aggregate/list_after_group.sql b/yt/yql/tests/sql/suites/aggregate/list_after_group.sql new file mode 100644 index 0000000000..d3169432ff --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/list_after_group.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +/* postgres can not */ +select aggregate_list(key) as key_list, listsort(aggregate_list(key)) AS sorted_key_list, value as name from plato.Input4 group by value +order by name;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/list_nullable.cfg b/yt/yql/tests/sql/suites/aggregate/list_nullable.cfg new file mode 100644 index 0000000000..5640285809 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/list_nullable.cfg @@ -0,0 +1 @@ +in Input input_coalesce.txt diff --git a/yt/yql/tests/sql/suites/aggregate/list_nullable.sql b/yt/yql/tests/sql/suites/aggregate/list_nullable.sql new file mode 100644 index 0000000000..48a56c7485 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/list_nullable.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select aggregate_list(cast(value as int)) as val_list from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/list_with_fold_map.cfg b/yt/yql/tests/sql/suites/aggregate/list_with_fold_map.cfg new file mode 100644 index 0000000000..4d76f79a62 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/list_with_fold_map.cfg @@ -0,0 +1 @@ +in Input list_with_fold_map.txt diff --git a/yt/yql/tests/sql/suites/aggregate/list_with_fold_map.sql b/yt/yql/tests/sql/suites/aggregate/list_with_fold_map.sql new file mode 100644 index 0000000000..74df1240ed --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/list_with_fold_map.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +USE plato; + +$data = ( + SELECT + YQL::FoldMap( + counters, + names, + ($counter, $names) -> { + RETURN AsTuple(Unwrap($names[$counter]), $names); + } + ) AS profile, + id + FROM Input +); + +SELECT + AGGREGATE_LIST(profile) AS profiles, + id +FROM $data +GROUP BY id; diff --git a/yt/yql/tests/sql/suites/aggregate/list_with_fold_map.txt.attr b/yt/yql/tests/sql/suites/aggregate/list_with_fold_map.txt.attr new file mode 100644 index 0000000000..edb026c6b0 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/list_with_fold_map.txt.attr @@ -0,0 +1,8 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["counters";["ListType";["DataType";"Int64"]]]; + ["names";["ListType";["DataType";"String"]]]; + ["id";["DataType";"String"]] + ]]; +}} + diff --git a/yt/yql/tests/sql/suites/aggregate/native_desc_group_compact_by.cfg b/yt/yql/tests/sql/suites/aggregate/native_desc_group_compact_by.cfg new file mode 100644 index 0000000000..2190809549 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/native_desc_group_compact_by.cfg @@ -0,0 +1,2 @@ +in Input1 descending.txt +in Input2 input5.txt diff --git a/yt/yql/tests/sql/suites/aggregate/native_desc_group_compact_by.sql b/yt/yql/tests/sql/suites/aggregate/native_desc_group_compact_by.sql new file mode 100644 index 0000000000..71f8b03302 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/native_desc_group_compact_by.sql @@ -0,0 +1,24 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; +pragma yt.UseNativeDescSort; + +select key, subkey from Input1 -- YtReduce +group compact by key, subkey +order by key, subkey; + +select key, subkey from Input1 -- YtReduce +group compact by subkey, key +order by subkey, key; + +select key from Input1 -- YtReduce +group compact by key +order by key; + +select subkey from Input1 -- YtMapReduce +group compact by subkey +order by subkey; + +select key, subkey from concat(Input1, Input2) -- YtMapReduce, mix of ascending/descending +group compact by key, subkey +order by key, subkey; diff --git a/yt/yql/tests/sql/suites/aggregate/no_compact_distinct.cfg b/yt/yql/tests/sql/suites/aggregate/no_compact_distinct.cfg new file mode 100644 index 0000000000..711689a5cb --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/no_compact_distinct.cfg @@ -0,0 +1,3 @@ +providers yt +in InputB input2.txt +in InputC input3.txt diff --git a/yt/yql/tests/sql/suites/aggregate/no_compact_distinct.sql b/yt/yql/tests/sql/suites/aggregate/no_compact_distinct.sql new file mode 100644 index 0000000000..757c9d55cc --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/no_compact_distinct.sql @@ -0,0 +1,13 @@ +USE plato; + +pragma AnsiOptionalAs; + +$x = ( + SELECT key, AVG(DISTINCT Cast(subkey as float)) s FROM InputB GROUP BY key +); + +$y = ( + SELECT key, SUM(Cast(subkey as float)) s FROM InputC GROUP BY key +); + +SELECT x.key, x.s AS s1, y.s AS s2 FROM $x x FULL OUTER JOIN $y y ON x.key = y.key; diff --git a/yt/yql/tests/sql/suites/aggregate/percentile_and_avg_grouped.cfg b/yt/yql/tests/sql/suites/aggregate/percentile_and_avg_grouped.cfg new file mode 100644 index 0000000000..910dfcb7e0 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentile_and_avg_grouped.cfg @@ -0,0 +1,3 @@ +in Input percentiles_input.txt +udf stat_udf + diff --git a/yt/yql/tests/sql/suites/aggregate/percentile_and_avg_grouped.sql b/yt/yql/tests/sql/suites/aggregate/percentile_and_avg_grouped.sql new file mode 100644 index 0000000000..6dc89752ca --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentile_and_avg_grouped.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select key, median(val) as med, avg(val) as avg from (select key, cast(value as int) as val from plato.Input) group by key order by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/percentile_and_variance.cfg b/yt/yql/tests/sql/suites/aggregate/percentile_and_variance.cfg new file mode 100644 index 0000000000..9410b8e431 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentile_and_variance.cfg @@ -0,0 +1,3 @@ +in Input percentiles_input.txt +udf stat_udf +udf math_udf diff --git a/yt/yql/tests/sql/suites/aggregate/percentile_and_variance.sql b/yt/yql/tests/sql/suites/aggregate/percentile_and_variance.sql new file mode 100644 index 0000000000..c75cf50c6c --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentile_and_variance.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select Math::Round(median(val), -3) as med, Math::Round(stddev(val), -3) as dev from (select cast(value as int) as val from plato.Input);
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/percentile_interval.sql b/yt/yql/tests/sql/suites/aggregate/percentile_interval.sql new file mode 100644 index 0000000000..922579f7eb --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentile_interval.sql @@ -0,0 +1,38 @@ +/* syntax version 1 */ + +$zero = unwrap( cast(0 as Interval) ); +$one = unwrap( cast (1 as Interval ) ); + +-- we want to check both optional<interval> and plain interval +$prepared = select + cast (key As Interval) ?? $zero as interval_data + from plato.Input; + +$source = select + interval_data + , interval_data + $one as interval_data2 + , just( interval_data ) as optional_interval_data + from $prepared; + +-- percentile factory can work with plain number and with tuple of numbers. +-- to achive second call we must make several percentile invocations with +-- same column name +$data_plain = select + percentile(interval_data, 0.8) as result + from $source; + +-- optimization should unite this into one call to percentile with tuple as argument +$data_tuple = select + percentile(interval_data2, 0.8) as result_1 + , percentile(interval_data2, 0.6) as result_2 + from $source; + +$data_optional = select + percentile(optional_interval_data, 0.4) as result + from $source; + +select EnsureType(result, Interval?) from $data_plain; +select EnsureType(result_1, Interval?) from $data_tuple; +select EnsureType(result_2, Interval?) from $data_tuple; +select result from $data_optional; + diff --git a/yt/yql/tests/sql/suites/aggregate/percentiles_containers.cfg b/yt/yql/tests/sql/suites/aggregate/percentiles_containers.cfg new file mode 100644 index 0000000000..b0152e1177 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentiles_containers.cfg @@ -0,0 +1,2 @@ +in Input percentiles_input.txt +udf stat_udf diff --git a/yt/yql/tests/sql/suites/aggregate/percentiles_containers.sql b/yt/yql/tests/sql/suites/aggregate/percentiles_containers.sql new file mode 100644 index 0000000000..7bf4633e45 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentiles_containers.sql @@ -0,0 +1,16 @@ +select + key, + median(val) as med, + percentile(val, AsTuple(0.2, 0.4, 0.6)) as ptuple, + percentile(val, AsStruct(0.2 as p20, 0.4 as p40, 0.6 as p60)) as pstruct, + percentile(val, AsList(0.2, 0.4, 0.6)) as plist, +from (select key, cast(value as int) as val from plato.Input) +group by key +order by key; + +select + median(val) as med, + percentile(val, AsTuple(0.2, 0.4, 0.6)) as ptuple, + percentile(val, AsStruct(0.2 as p20, 0.4 as p40, 0.6 as p60)) as pstruct, + percentile(val, AsList(0.2, 0.4, 0.6)) as plist, +from (select key, cast(value as int) as val from plato.Input) diff --git a/yt/yql/tests/sql/suites/aggregate/percentiles_grouped.cfg b/yt/yql/tests/sql/suites/aggregate/percentiles_grouped.cfg new file mode 100644 index 0000000000..b0152e1177 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentiles_grouped.cfg @@ -0,0 +1,2 @@ +in Input percentiles_input.txt +udf stat_udf diff --git a/yt/yql/tests/sql/suites/aggregate/percentiles_grouped.sql b/yt/yql/tests/sql/suites/aggregate/percentiles_grouped.sql new file mode 100644 index 0000000000..f4297e06e3 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentiles_grouped.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select median(val) as med, median(distinct val) as distinct_med, percentile(val, 0.8) as p80 from (select key, cast(value as int) as val from plato.Input) group by key order by med;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/percentiles_grouped_expr.cfg b/yt/yql/tests/sql/suites/aggregate/percentiles_grouped_expr.cfg new file mode 100644 index 0000000000..b0152e1177 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentiles_grouped_expr.cfg @@ -0,0 +1,2 @@ +in Input percentiles_input.txt +udf stat_udf diff --git a/yt/yql/tests/sql/suites/aggregate/percentiles_grouped_expr.sql b/yt/yql/tests/sql/suites/aggregate/percentiles_grouped_expr.sql new file mode 100644 index 0000000000..1ad133feee --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentiles_grouped_expr.sql @@ -0,0 +1,8 @@ +select + median(val + 1) as med, + median(distinct val + 1) as distinct_med, + percentile(val + 1, 0.8) as p80 +from ( + select key, cast(value as int) as val from plato.Input +) +group by key order by med; diff --git a/yt/yql/tests/sql/suites/aggregate/percentiles_ungrouped.cfg b/yt/yql/tests/sql/suites/aggregate/percentiles_ungrouped.cfg new file mode 100644 index 0000000000..52e9c9bc90 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentiles_ungrouped.cfg @@ -0,0 +1,2 @@ +in Input percentiles_input.txt +udf stat_udf
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/percentiles_ungrouped.sql b/yt/yql/tests/sql/suites/aggregate/percentiles_ungrouped.sql new file mode 100644 index 0000000000..045b66c239 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/percentiles_ungrouped.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select median(val) as med, percentile(val, 0.8) as p80 from (select cast(value as int) as val from plato.Input);
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/aggregate/rollup_with_dict.cfg b/yt/yql/tests/sql/suites/aggregate/rollup_with_dict.cfg new file mode 100644 index 0000000000..11a8788b61 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/rollup_with_dict.cfg @@ -0,0 +1,2 @@ +in Input input_dsv.txt +udf dsv_udf diff --git a/yt/yql/tests/sql/suites/aggregate/rollup_with_dict.sql b/yt/yql/tests/sql/suites/aggregate/rollup_with_dict.sql new file mode 100644 index 0000000000..d59e69d29b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/rollup_with_dict.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +--insert into Output +select val, count(*) as cnt, grouping(val) as grouping +from Input as t +group by rollup(t.`dict`["c"] as val) +order by val, cnt +; diff --git a/yt/yql/tests/sql/suites/aggregate/session1.txt.attr b/yt/yql/tests/sql/suites/aggregate/session1.txt.attr new file mode 100644 index 0000000000..0df1a044c1 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/session1.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["user";["OptionalType";["DataType";"String"]]]; + ["ts";["OptionalType";["DataType";"Int32"]]]; + ["payload";["DataType";"Int32"]]] + ]; +}} diff --git a/yt/yql/tests/sql/suites/aggregate/sorted.txt.attr b/yt/yql/tests/sql/suites/aggregate/sorted.txt.attr new file mode 100644 index 0000000000..ed13e20223 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/sorted.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/aggregate/subquery_aggregation.cfg b/yt/yql/tests/sql/suites/aggregate/subquery_aggregation.cfg new file mode 100644 index 0000000000..c7e99df4d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/subquery_aggregation.cfg @@ -0,0 +1 @@ +in Input input_expr.txt diff --git a/yt/yql/tests/sql/suites/aggregate/subquery_aggregation.sql b/yt/yql/tests/sql/suites/aggregate/subquery_aggregation.sql new file mode 100644 index 0000000000..b5ed8ae250 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/subquery_aggregation.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$total_count = (SELECT Count(*) from Input); + +SELECT + common, + count(*) as rec_count, + 100. * count(*) / $total_count as part_percent +FROM Input +GROUP BY subkey as common +ORDER BY common +; diff --git a/yt/yql/tests/sql/suites/aggregate/table_funcs_group_by.sql b/yt/yql/tests/sql/suites/aggregate/table_funcs_group_by.sql new file mode 100644 index 0000000000..85652ed433 --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/table_funcs_group_by.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +--insert into Output +select + groupTribit, + count(*) as count +from Input +GROUP BY TableRecordIndex() % 3 as groupTribit +ORDER BY groupTribit, count diff --git a/yt/yql/tests/sql/suites/aggregate/table_row_aggregation.sql b/yt/yql/tests/sql/suites/aggregate/table_row_aggregation.sql new file mode 100644 index 0000000000..f35a0d881b --- /dev/null +++ b/yt/yql/tests/sql/suites/aggregate/table_row_aggregation.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$data = ( + SELECT SOME(TableRow()) + FROM Input4 + GROUP BY key +); + +SELECT * +FROM $data +FLATTEN COLUMNS +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/ansi_idents/basic_columns.sql b/yt/yql/tests/sql/suites/ansi_idents/basic_columns.sql new file mode 100644 index 0000000000..6bce49176a --- /dev/null +++ b/yt/yql/tests/sql/suites/ansi_idents/basic_columns.sql @@ -0,0 +1,5 @@ +--!ansi_lexer +/* syntax version 1 */ +use plato; + +select "key" || subkey as "akey" from Input order by akey; diff --git a/yt/yql/tests/sql/suites/ansi_idents/default.cfg b/yt/yql/tests/sql/suites/ansi_idents/default.cfg new file mode 100644 index 0000000000..a1f7a5a9b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/ansi_idents/default.cfg @@ -0,0 +1,4 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/ansi_idents/escaped_udf_name.sql b/yt/yql/tests/sql/suites/ansi_idents/escaped_udf_name.sql new file mode 100644 index 0000000000..9316d67556 --- /dev/null +++ b/yt/yql/tests/sql/suites/ansi_idents/escaped_udf_name.sql @@ -0,0 +1,6 @@ +--!ansi_lexer +/* syntax version 1 */ +/* postgres can not */ +use plato; + +select `key` from Input where "String"::Contains("key", '7') order by key; diff --git a/yt/yql/tests/sql/suites/ansi_idents/join_using.sql b/yt/yql/tests/sql/suites/ansi_idents/join_using.sql new file mode 100644 index 0000000000..9f2c9c1869 --- /dev/null +++ b/yt/yql/tests/sql/suites/ansi_idents/join_using.sql @@ -0,0 +1,5 @@ +--!ansi_lexer +/* syntax version 1 */ +use plato; + +select count(*) from Input2 as a join Input3 as b using("key");; diff --git a/yt/yql/tests/sql/suites/ansi_idents/order_by.sql b/yt/yql/tests/sql/suites/ansi_idents/order_by.sql new file mode 100644 index 0000000000..ca319759aa --- /dev/null +++ b/yt/yql/tests/sql/suites/ansi_idents/order_by.sql @@ -0,0 +1,5 @@ +--!ansi_lexer +/* syntax version 1 */ +use plato; + +select "a".* from Input as "a" order by "key", `subkey`; diff --git a/yt/yql/tests/sql/suites/bigdate/BigDates.txt.attr b/yt/yql/tests/sql/suites/bigdate/BigDates.txt.attr new file mode 100644 index 0000000000..aa7e0bc89c --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/BigDates.txt.attr @@ -0,0 +1,17 @@ +{ + "schema" = <"strict" = %true; "unique_keys" = %false> [ + { "type" = "int64"; "required" = %true; "name" = "row" }; + { "type" = "int32"; "required" = %true; "name" = "d32" }; + { "type" = "int64"; "required" = %true; "name" = "dt64" }; + { "type" = "int64"; "required" = %true; "name" = "ts64" }; + { "type" = "int64"; "required" = %true; "name" = "i64" }; + ]; + "_yql_row_spec" = { + "TypePatch" = ["StructType";[ + ["d32"; ["DataType"; "Date32"]]; + ["dt64"; ["DataType"; "Datetime64"]]; + ["ts64" ;["DataType"; "Timestamp64"]]; + ["i64"; ["DataType"; "Interval64"]]; + ]]; + }; +} diff --git a/yt/yql/tests/sql/suites/bigdate/NarrowDates.txt.attr b/yt/yql/tests/sql/suites/bigdate/NarrowDates.txt.attr new file mode 100644 index 0000000000..d5ea06fda8 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/NarrowDates.txt.attr @@ -0,0 +1,15 @@ +{ + "schema" = <"strict" = %true; "unique_keys" = %false> [ + { "type" = "uint64"; "required" = %true; "name" = "row" }; + { "type" = "uint16"; "required" = %true; "name" = "d" }; + { "type" = "uint32"; "required" = %true; "name" = "dt" }; + { "type" = "uint64"; "required" = %true; "name" = "ts" }; + ]; + "_yql_row_spec" = { + "TypePatch" = ["StructType";[ + ["d"; ["DataType"; "Date"]]; + ["dt"; ["DataType"; "Datetime"]]; + ["ts" ;["DataType"; "Timestamp"]]; + ]]; + }; +} diff --git a/yt/yql/tests/sql/suites/bigdate/NarrowInterval.txt.attr b/yt/yql/tests/sql/suites/bigdate/NarrowInterval.txt.attr new file mode 100644 index 0000000000..bb8f05160e --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/NarrowInterval.txt.attr @@ -0,0 +1,11 @@ +{ + "schema" = <"strict" = %true; "unique_keys" = %false> [ + { "type" = "int64"; "required" = %true; "name" = "row" }; + { "type" = "int64"; "required" = %true; "name" = "i" }; + ]; + "_yql_row_spec" = { + "TypePatch" = ["StructType";[ + ["i"; ["DataType"; "Interval"]]; + ]]; + }; +} diff --git a/yt/yql/tests/sql/suites/bigdate/Signed.txt.attr b/yt/yql/tests/sql/suites/bigdate/Signed.txt.attr new file mode 100644 index 0000000000..56781be680 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/Signed.txt.attr @@ -0,0 +1,9 @@ +{ + "schema" = <"strict" = %true; "unique_keys" = %false> [ + {"type" = "int64"; "required" = %true; "name" = "row"}; + {"type" = "int8"; "required" = %true; "name" = "i8"}; + {"type" = "int16"; "required" = %true; "name" = "i16"}; + {"type" = "int32"; "required" = %true; "name" = "i32"}; + {"type" = "int64"; "required" = %true; "name" = "i64"}; + ]; +} diff --git a/yt/yql/tests/sql/suites/bigdate/Unsigned.txt.attr b/yt/yql/tests/sql/suites/bigdate/Unsigned.txt.attr new file mode 100644 index 0000000000..9d72213c91 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/Unsigned.txt.attr @@ -0,0 +1,9 @@ +{ + "schema" = <"strict" = %true; "unique_keys" = %false> [ + {"type" = "uint64"; "required" = %true; "name" = "row"}; + {"type" = "uint8"; "required" = %true; "name" = "ui8"}; + {"type" = "uint16"; "required" = %true; "name" = "ui16"}; + {"type" = "uint32"; "required" = %true; "name" = "ui32"}; + {"type" = "uint64"; "required" = %true; "name" = "ui64"}; + ]; +} diff --git a/yt/yql/tests/sql/suites/bigdate/default.cfg b/yt/yql/tests/sql/suites/bigdate/default.cfg new file mode 100644 index 0000000000..fc68a75b1e --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/default.cfg @@ -0,0 +1,5 @@ +in Signed Signed.txt +in Unsigned Unsigned.txt +in NarrowDates NarrowDates.txt +in NarrowInterval NarrowInterval.txt +in BigDates BigDates.txt diff --git a/yt/yql/tests/sql/suites/bigdate/implicit_cast_callable.sql b/yt/yql/tests/sql/suites/bigdate/implicit_cast_callable.sql new file mode 100644 index 0000000000..005e686135 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/implicit_cast_callable.sql @@ -0,0 +1,43 @@ +/* postgres can not */ +use plato; + +$identity = ($x)-> { return $x }; + +$idDate32 = Callable(Callable<(date32)->date32>, $identity); +$idDatetime64 = Callable(Callable<(datetime64)->datetime64>, $identity); +$idTimestamp64 = Callable(Callable<(timestamp64)->timestamp64>, $identity); +$idInterval64 = Callable(Callable<(interval64)->interval64>, $identity); + +$valDate = unwrap(cast(1 as date)); +$valDate32 = unwrap(cast(-1 as date32)); +$valDatetime = unwrap(cast(86400 as datetime)); +$valDatetime64 = unwrap(cast(-86400 as datetime64)); +$valTimestamp = unwrap(cast(86400l*1000000 as timestamp)); +$valTimestamp64 = unwrap(cast(86400l*1000000 as timestamp64)); +$valInterval = unwrap(cast(1 as interval)); +$valInterval64 = unwrap(cast(-1 as interval64)); + +select 1, $idDate32($valDate), $idDate32($valDate32) +, 2, $idDatetime64($valDate), $idDatetime64($valDate32) +, $idDatetime64($valDatetime), $idDatetime64($valDatetime64) +, 3, $idTimestamp64($valDate), $idTimestamp64($valDate32) +, $idTimestamp64($valDatetime), $idTimestamp64($valDatetime64) +, $idTimestamp64($valTimestamp), $idTimestamp64($valTimestamp64) +, 4, $idInterval64($valInterval), $idInterval64($valInterval64); + +select row +, 1, $idTimestamp64(d32), $idDatetime64(d32), $idDate32(d32) +, 2, $idTimestamp64(dt64), $idDatetime64(dt64) +, 3, $idTimestamp64(ts64) +, 4, $idInterval64(i64) +from BigDates +order by row; + +select row +, 1, $idTimestamp64(d), $idDatetime64(d), $idDate32(d) +, 2, $idTimestamp64(dt), $idDatetime64(dt) +, 3, $idTimestamp64(ts) +from NarrowDates +order by row; + +select row, $idInterval64(i) from NarrowInterval order by row; diff --git a/yt/yql/tests/sql/suites/bigdate/table_arithmetic.sql b/yt/yql/tests/sql/suites/bigdate/table_arithmetic.sql new file mode 100644 index 0000000000..9fb30acf44 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_arithmetic.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +use plato; + +select row, -i64, +i64, abs(i64) +from BigDates +order by row; + +select min(d32), min(dt64), min(ts64), min(i64) +, max(d32), max(dt64), max(ts64), max(i64) +from BigDates; + +select l.row, r.row +, 1, l.d32 - r.i64, l.dt64 - r.i64, l.ts64 - r.i64, l.i64 - r.i64 +, 2, l.d32 + r.i64, l.dt64 + r.i64, l.ts64 + r.i64, l.i64 + r.i64 +from BigDates as l cross join BigDates as r +where abs(l.row) <= 7 and abs(r.row) <= 7 +order by l.row, r.row; diff --git a/yt/yql/tests/sql/suites/bigdate/table_arithmetic_mul_div.sql b/yt/yql/tests/sql/suites/bigdate/table_arithmetic_mul_div.sql new file mode 100644 index 0000000000..1674243a00 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_arithmetic_mul_div.sql @@ -0,0 +1,35 @@ +/* postgres can not */ +use plato; + +select l.row, r.row +, 1, l.i64*i8, l.i64*i16, l.i64*i32, l.i64*r.i64 +, 2, i8*l.i64, i16*l.i64, i32*l.i64, r.i64*l.i64 +, 3, l.i64/i8, l.i64/i16, l.i64/i32, l.i64/r.i64 +from BigDates as l cross join Signed as r +where abs(l.row) <= 7 and abs(r.row) <= 7 +order by l.row, r.row; + +select l.row, r.row +, 1, i64*ui8, i64*ui16, i64*ui32, i64*ui64 +, 2, ui8*i64, ui16*i64, ui32*i64, ui64*i64 +, 3, i64/ui8, i64/ui16, i64/ui32, i64/ui64 +from BigDates as l cross join Unsigned as r +where abs(l.row) <= 7 and abs(r.row) <= 7 +order by l.row, r.row; + +select l.row, r.row +, 1, l.i*i8, l.i*i16, l.i*i32, l.i*r.i64 +, 2, i8*l.i, i16*l.i, i32*l.i, r.i64*l.i +, 3, l.i/i8, l.i/i16, l.i/i32, l.i/r.i64 +from NarrowInterval as l cross join Signed as r +where abs(l.row) <= 7 and abs(r.row) <= 7 +order by l.row, r.row; + +select l.row, r.row +, 1, i*ui8, i*ui16, i*ui32, i*ui64 +, 2, ui8*i, ui16*i, ui32*i, ui64*i +, 3, i/ui8, i/ui16, i/ui32, i/ui64 +from NarrowInterval as l cross join Unsigned as r +where abs(l.row) <= 7 and abs(r.row) <= 7 +order by l.row, r.row; + diff --git a/yt/yql/tests/sql/suites/bigdate/table_arithmetic_narrow.sql b/yt/yql/tests/sql/suites/bigdate/table_arithmetic_narrow.sql new file mode 100644 index 0000000000..7e86c038fd --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_arithmetic_narrow.sql @@ -0,0 +1,25 @@ +/* postgres can not */ +use plato; + +select l.row, r.row +, 1, l.d32 - r.d, l.d32 - r.dt, l.d32 - r.ts +, 2, l.dt64 - r.d, l.dt64 - r.dt, l.dt64 - r.ts +, 3, l.ts64 - r.d, l.ts64 - r.dt, l.ts64 - r.ts +from BigDates as l cross join NarrowDates as r +where abs(l.row) <= 7 and abs(r.row) <= 7 +order by l.row, r.row; + +select l.row, r.row +, 1, l.d - r.d32, l.d - r.dt64, l.d - r.ts64, l.d - r.i64, l.d + r.i64 +, 2, l.dt - r.d32, l.dt - r.dt64, l.dt - r.ts64, l.dt - r.i64, l.dt + r.i64 +, 3, l.ts - r.d32, l.ts - r.dt64, l.ts - r.ts64, l.ts - r.i64, l.ts + r.i64 +from NarrowDates as l cross join BigDates as r +where abs(l.row) <= 7 and abs(r.row) <= 7 +order by l.row, r.row; + +select l.row, r.row +, 1, l.d32 - r.i, l.dt64 - r.i, l.ts64 - r.i, l.i64 - r.i +, 2, l.d32 + r.i, l.dt64 + r.i, l.ts64 + r.i, l.i64 + r.i +from BigDates as l cross join NarrowInterval as r +where abs(l.row) <= 7 and abs(r.row) <= 7 +order by l.row, r.row; diff --git a/yt/yql/tests/sql/suites/bigdate/table_arithmetic_sub.sql b/yt/yql/tests/sql/suites/bigdate/table_arithmetic_sub.sql new file mode 100644 index 0000000000..18c040d8b4 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_arithmetic_sub.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +use plato; + +select l.row, r.row +, 1, l.d32 - r.d32, l.d32 - r.dt64, l.d32 - r.ts64 +, 2, l.dt64 - r.d32, l.dt64 - r.dt64, l.dt64 - r.ts64 +, 3, l.ts64 - r.d32, l.ts64 - r.dt64, l.ts64 - r.ts64 +from BigDates as l cross join BigDates as r +where abs(l.row) <= 7 and abs(r.row) <= 7 +order by l.row, r.row; diff --git a/yt/yql/tests/sql/suites/bigdate/table_common_type.sql b/yt/yql/tests/sql/suites/bigdate/table_common_type.sql new file mode 100644 index 0000000000..f059db2f0a --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_common_type.sql @@ -0,0 +1,27 @@ +/* postgres can not */ +use plato; + +select bd.row as row +, 1, [d, dt] +, [d, ts] +, [d, d32] +, [d, dt64] +, [d, ts64] +, 2, [dt, ts] +, [dt, d32] +, [dt, dt64] +, [dt, ts64] +, 3, [ts, d32] +, [ts, dt64] +, [ts, ts64] +, 4, [d32, dt64] +, [d32, ts64] +, 5, [dt64, ts64] +from BigDates as bd +join NarrowDates using (row) +order by row; + +select bd.row as row, [i, i64] +from BigDates as bd +join NarrowInterval using (row) +order by row; diff --git a/yt/yql/tests/sql/suites/bigdate/table_explicit_cast.sql b/yt/yql/tests/sql/suites/bigdate/table_explicit_cast.sql new file mode 100644 index 0000000000..263d90fbd2 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_explicit_cast.sql @@ -0,0 +1,29 @@ +/* postgres can not */ +use plato; + +select row, cast(i as interval64) from NarrowInterval order by row; + +select row +, 1, cast(d as date), cast(d as datetime), cast(d as timestamp) +, 2, cast(dt as date), cast(dt as datetime), cast(dt as timestamp) +, 3, cast(ts as date), cast(ts as datetime), cast(ts as timestamp) +from NarrowDates order by row; + +select row +, 1, cast(d as date32), cast(d as datetime64), cast(d as timestamp64) +, 2, cast(dt as date32), cast(dt as datetime64), cast(dt as timestamp64) +, 3, cast(ts as date32), cast(ts as datetime64), cast(ts as timestamp64) +from NarrowDates order by row; + +select row +, 1, cast(d32 as date), cast(d32 as datetime), cast(d32 as timestamp) +, 2, cast(dt64 as date), cast(dt64 as datetime), cast(dt64 as timestamp) +, 3, cast(ts64 as date), cast(ts64 as datetime), cast(ts64 as timestamp) +, 4, cast(i64 as interval) +from BigDates order by row; + +select row +, 1, cast(d32 as datetime64), cast(d32 as timestamp64) +, 2, cast(dt64 as date32), cast(dt64 as timestamp64) +, 3, cast(ts64 as date32), cast(ts64 as datetime64) +from BigDates order by row; diff --git a/yt/yql/tests/sql/suites/bigdate/table_int_cast.sql b/yt/yql/tests/sql/suites/bigdate/table_int_cast.sql new file mode 100644 index 0000000000..a6b772f62e --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_int_cast.sql @@ -0,0 +1,34 @@ +/* postgres can not */ +use plato; + +select row +, 1, cast(i8 as date32), cast(i8 as datetime64), cast(i8 as timestamp64), cast(i8 as interval64) +, 2, cast(i16 as date32), cast(i16 as datetime64), cast(i16 as timestamp64), cast(i16 as interval64) +, 3, cast(i32 as date32), cast(i32 as datetime64), cast(i32 as timestamp64), cast(i32 as interval64) +, 4, cast(i64 as date32), cast(i64 as datetime64), cast(i64 as timestamp64), cast(i64 as interval64) +from Signed +order by row; + +select row +, 1, cast(d32 as int8), cast(d32 as int16), cast(d32 as int32), cast(d32 as int64) +, 2, cast(dt64 as int8), cast(dt64 as int16), cast(dt64 as int32), cast(dt64 as int64) +, 3, cast(ts64 as int8), cast(ts64 as int16), cast(ts64 as int32), cast(ts64 as int64) +, 4, cast(i64 as int8), cast(i64 as int16), cast(i64 as int32), cast(i64 as int64) +from BigDates +order by row; + +select row +, 1, cast(d32 as uint8), cast(d32 as uint16), cast(d32 as uint32), cast(d32 as uint64) +, 2, cast(dt64 as uint8), cast(dt64 as uint16), cast(dt64 as uint32), cast(dt64 as uint64) +, 3, cast(ts64 as uint8), cast(ts64 as uint16), cast(ts64 as uint32), cast(ts64 as uint64) +, 4, cast(i64 as uint8), cast(i64 as uint16), cast(i64 as uint32), cast(i64 as uint64) +from BigDates +order by row; + +select row +, 1, cast(ui8 as date32), cast(ui8 as datetime64), cast(ui8 as timestamp64), cast(ui8 as interval64) +, 2, cast(ui16 as date32), cast(ui16 as datetime64), cast(ui16 as timestamp64), cast(ui16 as interval64) +, 3, cast(ui32 as date32), cast(ui32 as datetime64), cast(ui32 as timestamp64), cast(ui32 as interval64) +, 4, cast(ui64 as date32), cast(ui64 as datetime64), cast(ui64 as timestamp64), cast(ui64 as interval64) +from Unsigned +order by row; diff --git a/yt/yql/tests/sql/suites/bigdate/table_io.sql b/yt/yql/tests/sql/suites/bigdate/table_io.sql new file mode 100644 index 0000000000..b3a3f2cd65 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_io.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +use plato; + +select * from BigDates order by row; + +insert into @Output with truncate +select * from BigDates +where row > -100 +order by row; + +commit; + +select * from @Output order by row; + +select row, cast(d32 as string), cast(dt64 as string), cast(ts64 as string), cast(i64 as string) +from BigDates +order by row; diff --git a/yt/yql/tests/sql/suites/bigdate/table_yt_key_filter-default.cfg b/yt/yql/tests/sql/suites/bigdate/table_yt_key_filter-default.cfg new file mode 100644 index 0000000000..9256d900c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_yt_key_filter-default.cfg @@ -0,0 +1,6 @@ +out OutDate32 OutDate32.txt +out OutDatetime64 OutDatetime64.txt +out OutTimestamp64 OutTimestamp64.txt +providers yt +canonize_yt + diff --git a/yt/yql/tests/sql/suites/bigdate/table_yt_key_filter-on.cfg b/yt/yql/tests/sql/suites/bigdate/table_yt_key_filter-on.cfg new file mode 100644 index 0000000000..be9c9911e3 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_yt_key_filter-on.cfg @@ -0,0 +1,7 @@ +out OutDate32 OutDate32.txt +out OutDatetime64 OutDatetime64.txt +out OutTimestamp64 OutTimestamp64.txt +providers yt +canonize_yt +pragma yt.UseNativeYtTypes; +pragma yt.NativeYtTypeCompatibility = "date;bigdate"; diff --git a/yt/yql/tests/sql/suites/bigdate/table_yt_key_filter-wo_compat.cfg b/yt/yql/tests/sql/suites/bigdate/table_yt_key_filter-wo_compat.cfg new file mode 100644 index 0000000000..0f936de55c --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_yt_key_filter-wo_compat.cfg @@ -0,0 +1,8 @@ +out OutDate32 OutDate32.txt +out OutDatetime64 OutDatetime64.txt +out OutTimestamp64 OutTimestamp64.txt +providers yt +canonize_yt +pragma yt.UseNativeYtTypes; +pragma yt.NativeYtTypeCompatibility = "void"; + diff --git a/yt/yql/tests/sql/suites/bigdate/table_yt_key_filter.sql b/yt/yql/tests/sql/suites/bigdate/table_yt_key_filter.sql new file mode 100644 index 0000000000..87a1364cb1 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_yt_key_filter.sql @@ -0,0 +1,110 @@ +/* postgres can not */ +/* multirun can not */ +use plato; + +pragma yt.UseNewPredicateExtraction; + +insert into OutDate32 +select * from as_table(AsList( + <|key:Date32('-144169-1-1')|>, + <|key:Date32('148107-12-31')|>)) +order by key; + +insert into OutDatetime64 +select * from as_table(AsList( + <|key:Datetime64('-144169-1-1T0:0:0Z')|>, + <|key:Datetime64('148107-12-31T23:59:59Z')|>)) +order by key; + +insert into OutTimestamp64 +select * from as_table(AsList( + <|key:Timestamp64('-144169-1-1T0:0:0Z')|>, + <|key:Timestamp64('148107-12-31T23:59:59.999999Z')|>)) +order by key; + +commit; + +select * from OutDate32 +where key > Date('1970-1-1') +and key > Datetime('1970-1-1T0:0:0Z') +and key > Timestamp('1970-1-1T0:0:0Z') +and key > Date32('-144169-1-1') +and key > Datetime64('-144169-1-1T0:0:0Z') +and key > Timestamp64('-144169-1-1T0:0:0Z') +and key >= Date('2105-12-31') +and key >= Datetime('2105-12-31T23:59:59Z') +and key >= Timestamp('2105-12-31T23:59:59Z') +and key >= Date32('148107-12-31') +and key >= Datetime64('148107-12-31T0:0:0Z') +and key >= Timestamp64('148107-12-31T0:0:0Z') +; +select * from OutDate32 +where key < Date('2105-12-31') +and key < Datetime('2105-12-31T23:59:59Z') +and key < Timestamp('2105-12-31T23:59:59.999999Z') +and key < Date32('148107-12-31') +and key < Datetime64('148107-12-31T23:59:59Z') +and key < Timestamp64('148107-12-31T23:59:59.999999Z') +and key <= Date('1970-1-1') +and key <= Datetime('1970-1-1T0:0:0Z') +and key <= Timestamp('1970-1-1T0:0:0Z') +and key <= Date32('-144169-1-1') +and key <= Datetime64('-144169-1-1T0:0:0Z') +and key <= Timestamp64('-144169-1-1T0:0:0Z') +; +select * from OutDatetime64 +where key > Date('1970-1-1') +and key > Datetime('1970-1-1T0:0:0Z') +and key > Timestamp('1970-1-1T0:0:0Z') +and key > Date32('-144169-1-1') +and key > Datetime64('-144169-1-1T0:0:0Z') +and key > Timestamp64('-144169-1-1T0:0:0Z') +and key >= Date('2105-12-31') +and key >= Datetime('2105-12-31T23:59:59Z') +and key >= Timestamp('2105-12-31T23:59:59Z') +and key >= Date32('148107-12-31') +and key >= Datetime64('148107-12-31T0:0:0Z') +and key >= Timestamp64('148107-12-31T0:0:0Z') +; +select * from OutDatetime64 +where key < Date('2105-12-31') +and key < Datetime('2105-12-31T23:59:59Z') +and key < Timestamp('2105-12-31T23:59:59.999999Z') +and key < Date32('148107-12-31') +and key < Datetime64('148107-12-31T23:59:59Z') +and key < Timestamp64('148107-12-31T23:59:59.999999Z') +and key <= Date('1970-1-1') +and key <= Datetime('1970-1-1T0:0:0Z') +and key <= Timestamp('1970-1-1T0:0:0Z') +and key <= Date32('-144169-1-1') +and key <= Datetime64('-144169-1-1T0:0:0Z') +and key <= Timestamp64('-144169-1-1T0:0:0Z') +; +select * from OutTimestamp64 +where key > Date('1970-1-1') +and key > Datetime('1970-1-1T0:0:0Z') +and key > Timestamp('1970-1-1T0:0:0Z') +and key > Date32('-144169-1-1') +and key > Datetime64('-144169-1-1T0:0:0Z') +and key > Timestamp64('-144169-1-1T0:0:0Z') +and key >= Date('2105-12-31') +and key >= Datetime('2105-12-31T23:59:59Z') +and key >= Timestamp('2105-12-31T23:59:59Z') +and key >= Date32('148107-12-31') +and key >= Datetime64('148107-12-31T0:0:0Z') +and key >= Timestamp64('148107-12-31T0:0:0Z') +; +select * from OutTimestamp64 +where key < Date('2105-12-31') +and key < Datetime('2105-12-31T23:59:59Z') +and key < Timestamp('2105-12-31T23:59:59.999999Z') +and key < Date32('148107-12-31') +and key < Datetime64('148107-12-31T23:59:59Z') +and key < Timestamp64('148107-12-31T23:59:59.999999Z') +and key <= Date('1970-1-1') +and key <= Datetime('1970-1-1T0:0:0Z') +and key <= Timestamp('1970-1-1T0:0:0Z') +and key <= Date32('-144169-1-1') +and key <= Datetime64('-144169-1-1T0:0:0Z') +and key <= Timestamp64('-144169-1-1T0:0:0Z') +; diff --git a/yt/yql/tests/sql/suites/bigdate/table_yt_native-default.cfg b/yt/yql/tests/sql/suites/bigdate/table_yt_native-default.cfg new file mode 100644 index 0000000000..cd64dfec4a --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_yt_native-default.cfg @@ -0,0 +1,3 @@ +out Output output.txt +providers yt +canonize_yt diff --git a/yt/yql/tests/sql/suites/bigdate/table_yt_native-on.cfg b/yt/yql/tests/sql/suites/bigdate/table_yt_native-on.cfg new file mode 100644 index 0000000000..6486efd742 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_yt_native-on.cfg @@ -0,0 +1,5 @@ +out Output output.txt +providers yt +canonize_yt +pragma yt.UseNativeYtTypes; +pragma yt.NativeYtTypeCompatibility = "bigdate"; diff --git a/yt/yql/tests/sql/suites/bigdate/table_yt_native-wo_compat.cfg b/yt/yql/tests/sql/suites/bigdate/table_yt_native-wo_compat.cfg new file mode 100644 index 0000000000..c5e08d7e27 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_yt_native-wo_compat.cfg @@ -0,0 +1,5 @@ +out Output output.txt +providers yt +canonize_yt +pragma yt.UseNativeYtTypes; +pragma yt.NativeYtTypeCompatibility = "date"; diff --git a/yt/yql/tests/sql/suites/bigdate/table_yt_native.sql b/yt/yql/tests/sql/suites/bigdate/table_yt_native.sql new file mode 100644 index 0000000000..3d7d636051 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/table_yt_native.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* multirun can not */ +use plato; + +insert into @tmpTable +select date32('1969-12-31') as d32, datetime64('1969-12-31T0:0:0Z') as dt64, timestamp64('1969-12-31T0:0:0Z') as ts64, interval64('P65536D') as i64; + +commit; + +insert into Output +select * from @tmpTable where d32 < date32('1970-1-1'); diff --git a/yt/yql/tests/sql/suites/bigdate/tz.txt.attr b/yt/yql/tests/sql/suites/bigdate/tz.txt.attr new file mode 100644 index 0000000000..0d613e597e --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/tz.txt.attr @@ -0,0 +1,8 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["waz";["DataType";"TzDate32"]]; + ["wdz";["DataType";"TzDatetime64"]]; + ["wtz";["DataType";"TzTimestamp64"]]; + ]]; +}} + diff --git a/yt/yql/tests/sql/suites/bigdate/tz_table_fill.cfg b/yt/yql/tests/sql/suites/bigdate/tz_table_fill.cfg new file mode 100644 index 0000000000..879bab94a0 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/tz_table_fill.cfg @@ -0,0 +1,2 @@ +out Output output.txt + diff --git a/yt/yql/tests/sql/suites/bigdate/tz_table_fill.sql b/yt/yql/tests/sql/suites/bigdate/tz_table_fill.sql new file mode 100644 index 0000000000..f97466cd0c --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/tz_table_fill.sql @@ -0,0 +1,12 @@ +use plato; + +$waz = TzDate32("1900-01-01,Europe/Moscow"); +$wdz = TzDatetime64("1900-01-01T02:03:04,Europe/Moscow"); +$wtz = TzTimestamp64("1900-01-01T02:03:04.567891,Europe/Moscow"); + +insert into Output +select + $waz as waz, + $wdz as wdz, + $wtz as wtz, + ($waz, $wdz, $waz) as tup; diff --git a/yt/yql/tests/sql/suites/bigdate/tz_table_pull.cfg b/yt/yql/tests/sql/suites/bigdate/tz_table_pull.cfg new file mode 100644 index 0000000000..9fc18af3ef --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/tz_table_pull.cfg @@ -0,0 +1,2 @@ +in Input tz.txt + diff --git a/yt/yql/tests/sql/suites/bigdate/tz_table_pull.sql b/yt/yql/tests/sql/suites/bigdate/tz_table_pull.sql new file mode 100644 index 0000000000..334892b938 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/tz_table_pull.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + waz,wdz,wtz +FROM Input + diff --git a/yt/yql/tests/sql/suites/bigdate/tz_table_rw.cfg b/yt/yql/tests/sql/suites/bigdate/tz_table_rw.cfg new file mode 100644 index 0000000000..9793ce0c22 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/tz_table_rw.cfg @@ -0,0 +1,2 @@ +in Input tz.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/bigdate/tz_table_rw.sql b/yt/yql/tests/sql/suites/bigdate/tz_table_rw.sql new file mode 100644 index 0000000000..ca11765fc8 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/tz_table_rw.sql @@ -0,0 +1,6 @@ +use plato; + +insert into Output +select (waz,wdz,wtz),waz,wdz,wtz from Input; + + diff --git a/yt/yql/tests/sql/suites/bigdate/tz_table_yt_key_filter.cfg b/yt/yql/tests/sql/suites/bigdate/tz_table_yt_key_filter.cfg new file mode 100644 index 0000000000..a51be0aec2 --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/tz_table_yt_key_filter.cfg @@ -0,0 +1,5 @@ +out OutTzDate32 OutTzDate32.txt +out OutTzDatetime64 OutTzDatetime64.txt +out OutTzTimestamp64 OutTzTimestamp64.txt +providers yt +canonize_yt diff --git a/yt/yql/tests/sql/suites/bigdate/tz_table_yt_key_filter.sql b/yt/yql/tests/sql/suites/bigdate/tz_table_yt_key_filter.sql new file mode 100644 index 0000000000..7f96c9b32b --- /dev/null +++ b/yt/yql/tests/sql/suites/bigdate/tz_table_yt_key_filter.sql @@ -0,0 +1,62 @@ +/* postgres can not */ +/* multirun can not */ +use plato; + +pragma yt.UseNewPredicateExtraction; + +insert into OutTzDate32 +select * from as_table(AsList( + <|key:TzDate32('-144169-1-1,UTC')|>, + <|key:TzDate32('148107-12-31,UTC')|>)) +order by key; + +insert into OutTzDatetime64 +select * from as_table(AsList( + <|key:TzDatetime64('-144169-1-1T0:0:0,UTC')|>, + <|key:TzDatetime64('148107-12-31T23:59:59,UTC')|>)) +order by key; + +insert into OutTzTimestamp64 +select * from as_table(AsList( + <|key:TzTimestamp64('-144169-1-1T0:0:0,UTC')|>, + <|key:TzTimestamp64('148107-12-31T23:59:59.999999,UTC')|>)) +order by key; + +commit; + +select * from OutTzDate32 +where key > TzDate32('-144169-1-1,UTC') +and key > TzDatetime64('-144169-1-1T0:0:0,UTC') +and key > TzTimestamp64('-144169-1-1T0:0:0,UTC') +and key >= TzDate32('148107-12-31,UTC') +and key >= TzDatetime64('148107-12-31T0:0:0,UTC') +and key >= TzTimestamp64('148107-12-31T0:0:0,UTC') +; +select * from OutTzDate32 +where key < TzDate32('148107-12-31,UTC') +and key < TzDatetime64('148107-12-31T23:59:59,UTC') +and key < TzTimestamp64('148107-12-31T23:59:59.999999,UTC') +and key <= TzDate32('-144169-1-1,UTC') +and key <= TzDatetime64('-144169-1-1T0:0:0,UTC') +and key <= TzTimestamp64('-144169-1-1T0:0:0,UTC') +; +select * from OutTzDatetime64 +where key > TzDatetime64('-144169-1-1T0:0:0,UTC') +and key > TzTimestamp64('-144169-1-1T0:0:0,UTC') +and key >= TzDatetime64('148107-12-31T0:0:0,UTC') +and key >= TzTimestamp64('148107-12-31T0:0:0,UTC') +; +select * from OutTzDatetime64 +where key < TzDatetime64('148107-12-31T23:59:59,UTC') +and key < TzTimestamp64('148107-12-31T23:59:59.999999,UTC') +and key <= TzDatetime64('-144169-1-1T0:0:0,UTC') +and key <= TzTimestamp64('-144169-1-1T0:0:0,UTC') +; +select * from OutTzTimestamp64 +where key > TzTimestamp64('-144169-1-1T0:0:0,UTC') +and key >= TzTimestamp64('148107-12-31T0:0:0,UTC') +; +select * from OutTzTimestamp64 +where key < TzTimestamp64('148107-12-31T23:59:59.999999,UTC') +and key <= TzTimestamp64('-144169-1-1T0:0:0,UTC') +; diff --git a/yt/yql/tests/sql/suites/binding/anon_table_binding.sql b/yt/yql/tests/sql/suites/binding/anon_table_binding.sql new file mode 100644 index 0000000000..95f5f0796f --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/anon_table_binding.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$c = "cccc"; + +INSERT INTO @$c +select 1 as x; +commit; +SELECT * FROM @$c; diff --git a/yt/yql/tests/sql/suites/binding/bind_select.sql b/yt/yql/tests/sql/suites/binding/bind_select.sql new file mode 100644 index 0000000000..a7f24466c8 --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/bind_select.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; +$foo = (select 100500 as bar); +select bar from $foo; diff --git a/yt/yql/tests/sql/suites/binding/default.cfg b/yt/yql/tests/sql/suites/binding/default.cfg new file mode 100644 index 0000000000..a1f7a5a9b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/default.cfg @@ -0,0 +1,4 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/binding/drop_binding.cfg b/yt/yql/tests/sql/suites/binding/drop_binding.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/drop_binding.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/binding/drop_binding.sql b/yt/yql/tests/sql/suites/binding/drop_binding.sql new file mode 100644 index 0000000000..48bafd14d7 --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/drop_binding.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ +/* kikimr can not - can't drop non-existent table */ + +USE plato; + +$a = "Output"; +DROP TABLE $a; diff --git a/yt/yql/tests/sql/suites/binding/insert_binding.cfg b/yt/yql/tests/sql/suites/binding/insert_binding.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/insert_binding.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/binding/insert_binding.sql b/yt/yql/tests/sql/suites/binding/insert_binding.sql new file mode 100644 index 0000000000..28f1de7135 --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/insert_binding.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$a = "Output"; +INSERT INTO $a +SELECT count(*) from Input; diff --git a/yt/yql/tests/sql/suites/binding/named_node_corr_names.sql b/yt/yql/tests/sql/suites/binding/named_node_corr_names.sql new file mode 100644 index 0000000000..4b9c0ddbba --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/named_node_corr_names.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$a = (SELECT key, subkey FROM Input); +SELECT a.subkey FROM $a AS a; +SELECT b.subkey FROM $a AS b; diff --git a/yt/yql/tests/sql/suites/binding/table_concat_binding.sql b/yt/yql/tests/sql/suites/binding/table_concat_binding.sql new file mode 100644 index 0000000000..0cfc4b4e1a --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/table_concat_binding.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +/* postgres can not */ +$a = "Input"; +SELECT count(*) FROM plato.concat($a,$a); + +USE plato; + +$a = "Input"; +SELECT count(*) FROM concat($a,$a); diff --git a/yt/yql/tests/sql/suites/binding/table_concat_strict_binding.sql b/yt/yql/tests/sql/suites/binding/table_concat_strict_binding.sql new file mode 100644 index 0000000000..ba55ba86ac --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/table_concat_strict_binding.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +/* postgres can not */ +$a = "Input"; +SELECT count(*) FROM plato.concat_strict($a,$a); + +USE plato; + +$a = "Input"; +SELECT count(*) FROM concat_strict($a,$a); diff --git a/yt/yql/tests/sql/suites/binding/table_filter_binding.sql b/yt/yql/tests/sql/suites/binding/table_filter_binding.sql new file mode 100644 index 0000000000..76aa156f96 --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/table_filter_binding.sql @@ -0,0 +1,27 @@ +/* syntax version 1 */ +/* postgres can not */ +/* kikimr can not - range not supported */ +$a = ""; +$b = ($_item)->{return true;}; +$c = ""; +$d = ""; +SELECT count(*) FROM plato.filter($a,$b,$c,$d); + +$a = ""; +$b = ($_item)->{return true;}; +$c = ""; +$d = "raw"; +SELECT count(*) FROM plato.filter($a,$b,$c,$d); + +use plato; + +$b = ($_item)->{return true;}; +$c = ""; +$d = ""; +SELECT count(*) FROM filter($a,$b,$c,$d); + +$a = ""; +$b = ($_item)->{return true;}; +$c = ""; +$d = "raw"; +SELECT count(*) FROM filter($a,$b,$c,$d); diff --git a/yt/yql/tests/sql/suites/binding/table_filter_strict_binding.sql b/yt/yql/tests/sql/suites/binding/table_filter_strict_binding.sql new file mode 100644 index 0000000000..0217520a0f --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/table_filter_strict_binding.sql @@ -0,0 +1,28 @@ +/* syntax version 1 */ +/* postgres can not */ +/* kikimr can not - range not supported */ +$a = ""; +$b = ($_item)->{return true;}; +$c = ""; +$d = ""; +SELECT count(*) FROM plato.filter_strict($a,$b,$c,$d); + +$a = ""; +$b = ($_item)->{return true;}; +$c = ""; +$d = "raw"; +SELECT count(*) FROM plato.filter_strict($a,$b,$c,$d); + +use plato; + +$a = ""; +$b = ($_item)->{return true;}; +$c = ""; +$d = ""; +SELECT count(*) FROM filter_strict($a,$b,$c,$d); + +$a = ""; +$b = ($_item)->{return true;}; +$c = ""; +$d = "raw"; +SELECT count(*) FROM filter_strict($a,$b,$c,$d); diff --git a/yt/yql/tests/sql/suites/binding/table_from_binding.sql b/yt/yql/tests/sql/suites/binding/table_from_binding.sql new file mode 100644 index 0000000000..0ea49f5ee5 --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/table_from_binding.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; +$x = "Input"; +SELECT count(*) FROM $x; diff --git a/yt/yql/tests/sql/suites/binding/table_from_binding_inferscheme.sql b/yt/yql/tests/sql/suites/binding/table_from_binding_inferscheme.sql new file mode 100644 index 0000000000..1e2bd7c935 --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/table_from_binding_inferscheme.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* kikimr can not */ +pragma yt.InferSchema; + +/* postgres can not */ +use plato; +$x = "Input"; +SELECT count(*) FROM $x; diff --git a/yt/yql/tests/sql/suites/binding/table_range_binding.sql b/yt/yql/tests/sql/suites/binding/table_range_binding.sql new file mode 100644 index 0000000000..4669fb2077 --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/table_range_binding.sql @@ -0,0 +1,46 @@ +/* syntax version 1 */ +/* postgres can not */ +/* kikimr can not - range not supported */ +$a = ""; +$b = "Input"; +$c = "Input"; +$d = ""; +$e = ""; +SELECT count(*) FROM plato.range($a,$b,$c,$d,$e); + +$a = ""; +$b = "Inp"; +$c = "Input1"; +$d = ""; +$e = "raw"; +SELECT count(*) FROM plato.range($a,$b,$c,$d,$e); + +$a = ""; +$b = "Inp"; +$c = "Input2"; +$d = ""; +$e = ""; +SELECT count(*) FROM plato.range($a,$b,$c,$d,$e); + +use plato; + +$a = ""; +$b = "Input"; +$c = "Input"; +$d = ""; +$e = ""; +SELECT count(*) FROM range($a,$b,$c,$d,$e); + +$a = ""; +$b = "Inp"; +$c = "Input1"; +$d = ""; +$e = "raw"; +SELECT count(*) FROM range($a,$b,$c,$d,$e); + +$a = ""; +$b = "Inp"; +$c = "Input2"; +$d = ""; +$e = ""; +SELECT count(*) FROM range($a,$b,$c,$d,$e); diff --git a/yt/yql/tests/sql/suites/binding/table_range_strict_binding.sql b/yt/yql/tests/sql/suites/binding/table_range_strict_binding.sql new file mode 100644 index 0000000000..bbf62c6c2a --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/table_range_strict_binding.sql @@ -0,0 +1,46 @@ +/* syntax version 1 */ +/* postgres can not */ +/* kikimr can not - range_strict not supported */ +$a = ""; +$b = "Input"; +$c = "Input"; +$d = ""; +$e = ""; +SELECT count(*) FROM plato.range_strict($a,$b,$c,$d,$e); + +$a = ""; +$b = "Inp"; +$c = "Input1"; +$d = ""; +$e = "raw"; +SELECT count(*) FROM plato.range_strict($a,$b,$c,$d,$e); + +$a = ""; +$b = "Inp"; +$c = "Input2"; +$d = ""; +$e = ""; +SELECT count(*) FROM plato.range_strict($a,$b,$c,$d,$e); + +use plato; + +$a = ""; +$b = "Input"; +$c = "Input"; +$d = ""; +$e = ""; +SELECT count(*) FROM range_strict($a,$b,$c,$d,$e); + +$a = ""; +$b = "Inp"; +$c = "Input1"; +$d = ""; +$e = "raw"; +SELECT count(*) FROM range_strict($a,$b,$c,$d,$e); + +$a = ""; +$b = "Inp"; +$c = "Input2"; +$d = ""; +$e = ""; +SELECT count(*) FROM range_strict($a,$b,$c,$d,$e); diff --git a/yt/yql/tests/sql/suites/binding/table_regexp_binding.cfg b/yt/yql/tests/sql/suites/binding/table_regexp_binding.cfg new file mode 100644 index 0000000000..acaecd1e1d --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/table_regexp_binding.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +udf pire_udf diff --git a/yt/yql/tests/sql/suites/binding/table_regexp_binding.sql b/yt/yql/tests/sql/suites/binding/table_regexp_binding.sql new file mode 100644 index 0000000000..2e3d721dc6 --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/table_regexp_binding.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ +/* kikimr can not - range not supported */ + +$a = ""; +$b = "Input"; +$c = ""; +$d = ""; +SELECT count(*) FROM plato.regexp($a,$b,$c,$d); + +use plato; + +$a = ""; +$b = "Input"; +$c = ""; +$d = ""; +SELECT count(*) FROM regexp($a,$b,$c,$d); diff --git a/yt/yql/tests/sql/suites/binding/table_regexp_strict_binding.cfg b/yt/yql/tests/sql/suites/binding/table_regexp_strict_binding.cfg new file mode 100644 index 0000000000..acaecd1e1d --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/table_regexp_strict_binding.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +udf pire_udf diff --git a/yt/yql/tests/sql/suites/binding/table_regexp_strict_binding.sql b/yt/yql/tests/sql/suites/binding/table_regexp_strict_binding.sql new file mode 100644 index 0000000000..530b988012 --- /dev/null +++ b/yt/yql/tests/sql/suites/binding/table_regexp_strict_binding.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ +/* kikimr can not - range not supported */ + +$a = ""; +$b = "Input"; +$c = ""; +$d = ""; +SELECT count(*) FROM plato.regexp_strict($a,$b,$c,$d); + +use plato; + +$a = ""; +$b = "Input"; +$c = ""; +$d = ""; +SELECT count(*) FROM regexp_strict($a,$b,$c,$d); diff --git a/yt/yql/tests/sql/suites/blocks/add_decimal.cfg b/yt/yql/tests/sql/suites/blocks/add_decimal.cfg new file mode 100644 index 0000000000..a21c6560ed --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_decimal.cfg @@ -0,0 +1 @@ +in Input input_decimal.txt diff --git a/yt/yql/tests/sql/suites/blocks/add_decimal.sql b/yt/yql/tests/sql/suites/blocks/add_decimal.sql new file mode 100644 index 0000000000..648a3709d5 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_decimal.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + cs_ext_list_price+cs_sales_price,cast(1 as decimal(7,2))+cs_ext_list_price,cs_sales_price+cast(2ul as decimal(7,2)) +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/add_int16.cfg b/yt/yql/tests/sql/suites/blocks/add_int16.cfg new file mode 100644 index 0000000000..b122c34208 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_int16.cfg @@ -0,0 +1 @@ +in Input input_int16.txt diff --git a/yt/yql/tests/sql/suites/blocks/add_int16.sql b/yt/yql/tests/sql/suites/blocks/add_int16.sql new file mode 100644 index 0000000000..5a40f28c1e --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_int16.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key+subkey,1s+key,subkey+2s +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/add_int32.cfg b/yt/yql/tests/sql/suites/blocks/add_int32.cfg new file mode 100644 index 0000000000..f68558a818 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_int32.cfg @@ -0,0 +1 @@ +in Input input_int32.txt diff --git a/yt/yql/tests/sql/suites/blocks/add_int32.sql b/yt/yql/tests/sql/suites/blocks/add_int32.sql new file mode 100644 index 0000000000..ae8903174a --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_int32.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key+subkey,1+key,subkey+2 +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/add_int64.cfg b/yt/yql/tests/sql/suites/blocks/add_int64.cfg new file mode 100644 index 0000000000..d2b033ce45 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_int64.cfg @@ -0,0 +1 @@ +in Input input_int64.txt diff --git a/yt/yql/tests/sql/suites/blocks/add_int64.sql b/yt/yql/tests/sql/suites/blocks/add_int64.sql new file mode 100644 index 0000000000..1c249577dc --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_int64.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key+subkey,1l+key,subkey+2l +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/add_int8.cfg b/yt/yql/tests/sql/suites/blocks/add_int8.cfg new file mode 100644 index 0000000000..82ad4d9d8e --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_int8.cfg @@ -0,0 +1 @@ +in Input input_int8.txt diff --git a/yt/yql/tests/sql/suites/blocks/add_int8.sql b/yt/yql/tests/sql/suites/blocks/add_int8.sql new file mode 100644 index 0000000000..7dc1279e89 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_int8.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key+subkey,1t+key,subkey+2t +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/add_uint16.cfg b/yt/yql/tests/sql/suites/blocks/add_uint16.cfg new file mode 100644 index 0000000000..e8e031c1e0 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_uint16.cfg @@ -0,0 +1 @@ +in Input input_uint16.txt diff --git a/yt/yql/tests/sql/suites/blocks/add_uint16.sql b/yt/yql/tests/sql/suites/blocks/add_uint16.sql new file mode 100644 index 0000000000..9d81c2c052 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_uint16.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key+subkey,1us+key,subkey+2us +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/add_uint32.cfg b/yt/yql/tests/sql/suites/blocks/add_uint32.cfg new file mode 100644 index 0000000000..54555c1cf2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_uint32.cfg @@ -0,0 +1 @@ +in Input input_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/add_uint32.sql b/yt/yql/tests/sql/suites/blocks/add_uint32.sql new file mode 100644 index 0000000000..2c61de9c42 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_uint32.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key+subkey,1u+key,subkey+2u +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/add_uint64.cfg b/yt/yql/tests/sql/suites/blocks/add_uint64.cfg new file mode 100644 index 0000000000..5ee9471fc0 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_uint64.cfg @@ -0,0 +1 @@ +in Input input_uint64.txt diff --git a/yt/yql/tests/sql/suites/blocks/add_uint64.sql b/yt/yql/tests/sql/suites/blocks/add_uint64.sql new file mode 100644 index 0000000000..7671b7667d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_uint64.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key+subkey,1ul+key,subkey+2ul +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/add_uint64_opt.cfg b/yt/yql/tests/sql/suites/blocks/add_uint64_opt.cfg new file mode 100644 index 0000000000..317b76e3a7 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_uint64_opt.cfg @@ -0,0 +1 @@ +in Input input_uint64_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/add_uint64_opt.sql b/yt/yql/tests/sql/suites/blocks/add_uint64_opt.sql new file mode 100644 index 0000000000..7671b7667d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_uint64_opt.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key+subkey,1ul+key,subkey+2ul +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/add_uint64_opt2.cfg b/yt/yql/tests/sql/suites/blocks/add_uint64_opt2.cfg new file mode 100644 index 0000000000..46fee85c7f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_uint64_opt2.cfg @@ -0,0 +1 @@ +in Input input_uint64_opt2.txt diff --git a/yt/yql/tests/sql/suites/blocks/add_uint64_opt2.sql b/yt/yql/tests/sql/suites/blocks/add_uint64_opt2.sql new file mode 100644 index 0000000000..7671b7667d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_uint64_opt2.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key+subkey,1ul+key,subkey+2ul +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/add_uint8.cfg b/yt/yql/tests/sql/suites/blocks/add_uint8.cfg new file mode 100644 index 0000000000..cd9448c29c --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_uint8.cfg @@ -0,0 +1 @@ +in Input input_uint8.txt diff --git a/yt/yql/tests/sql/suites/blocks/add_uint8.sql b/yt/yql/tests/sql/suites/blocks/add_uint8.sql new file mode 100644 index 0000000000..b757039a48 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/add_uint8.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key+subkey,1ut+key,subkey+2ut +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/bitcast_block.cfg b/yt/yql/tests/sql/suites/blocks/bitcast_block.cfg new file mode 100644 index 0000000000..e8dbb42122 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/bitcast_block.cfg @@ -0,0 +1 @@ +in Input input_uint8_big.txt diff --git a/yt/yql/tests/sql/suites/blocks/bitcast_block.sql b/yt/yql/tests/sql/suites/blocks/bitcast_block.sql new file mode 100644 index 0000000000..596b3d0f4a --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/bitcast_block.sql @@ -0,0 +1,3 @@ +USE plato; + +select key+1l from Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/bitcast_scalar.cfg b/yt/yql/tests/sql/suites/blocks/bitcast_scalar.cfg new file mode 100644 index 0000000000..e8dbb42122 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/bitcast_scalar.cfg @@ -0,0 +1 @@ +in Input input_uint8_big.txt diff --git a/yt/yql/tests/sql/suites/blocks/bitcast_scalar.sql b/yt/yql/tests/sql/suites/blocks/bitcast_scalar.sql new file mode 100644 index 0000000000..478d1af333 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/bitcast_scalar.sql @@ -0,0 +1,3 @@ +USE plato; + +select key+1t from Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/block_input.cfg b/yt/yql/tests/sql/suites/blocks/block_input.cfg new file mode 100644 index 0000000000..426917836b --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/block_input.cfg @@ -0,0 +1,2 @@ +in Input input_strings.txt +providers yt diff --git a/yt/yql/tests/sql/suites/blocks/block_input.sql b/yt/yql/tests/sql/suites/blocks/block_input.sql new file mode 100644 index 0000000000..50749842db --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/block_input.sql @@ -0,0 +1,11 @@ +USE plato; + +PRAGMA yt.JobBlockInput; + +SELECT + key, + subkey, + "value: " || value AS value, +FROM Input +WHERE key < "100" +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/blocks/block_input_sys_columns.cfg b/yt/yql/tests/sql/suites/blocks/block_input_sys_columns.cfg new file mode 100644 index 0000000000..5017087a09 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/block_input_sys_columns.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +in Input2 input2.txt +providers yt diff --git a/yt/yql/tests/sql/suites/blocks/block_input_sys_columns.sql b/yt/yql/tests/sql/suites/blocks/block_input_sys_columns.sql new file mode 100644 index 0000000000..2ab38cdf00 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/block_input_sys_columns.sql @@ -0,0 +1,18 @@ +USE plato; + +PRAGMA yt.JobBlockInput; + +$a = ( + SELECT TableName() AS table_name, TableRecordIndex() AS record_index, Input1.* FROM Input1 + UNION ALL + SELECT TableName() AS table_name, TableRecordIndex() AS record_index, Input2.* FROM Input2 +); + +$b = ( + SELECT * FROM Input1 AS users + UNION ALL + SELECT * FROM Input2 AS users +); + +SELECT * FROM $a ORDER BY table_name, record_index; +SELECT ROW_NUMBER() OVER () AS row_num, b.* FROM $b AS b ORDER BY row_num; diff --git a/yt/yql/tests/sql/suites/blocks/block_input_various_types-v3.cfg b/yt/yql/tests/sql/suites/blocks/block_input_various_types-v3.cfg new file mode 100644 index 0000000000..6c3e597275 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/block_input_various_types-v3.cfg @@ -0,0 +1,3 @@ +in Input block_input_various_types_v3.txt +providers yt +pragma yt.UseNativeYtTypes diff --git a/yt/yql/tests/sql/suites/blocks/block_input_various_types.cfg b/yt/yql/tests/sql/suites/blocks/block_input_various_types.cfg new file mode 100644 index 0000000000..0c5560da7f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/block_input_various_types.cfg @@ -0,0 +1,2 @@ +in Input block_input_various_types.txt +providers yt diff --git a/yt/yql/tests/sql/suites/blocks/block_input_various_types.sql b/yt/yql/tests/sql/suites/blocks/block_input_various_types.sql new file mode 100644 index 0000000000..dfd793d765 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/block_input_various_types.sql @@ -0,0 +1,5 @@ +USE plato; + +PRAGMA yt.JobBlockInput; + +SELECT * FROM Input WHERE `int64` > 10; diff --git a/yt/yql/tests/sql/suites/blocks/block_input_various_types.txt.attr b/yt/yql/tests/sql/suites/blocks/block_input_various_types.txt.attr new file mode 100644 index 0000000000..2b89fecf21 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/block_input_various_types.txt.attr @@ -0,0 +1,182 @@ +{ + "_yql_row_spec" = { + "NativeYtTypeFlags" = 0u; + "StrictSchema" = %true; + "Type" = [ + "StructType"; + [ + [ + "bool"; + [ + "DataType"; + "Bool"; + ]; + ]; + [ + "optionalDouble"; + [ + "OptionalType"; + [ + "DataType"; + "Double"; + ]; + ]; + ]; + [ + "string"; + [ + "DataType"; + "String"; + ]; + ]; + [ + "tuple"; + [ + "TupleType"; + [ + [ + "DataType"; + "Int64"; + ]; + [ + "DataType"; + "String"; + ]; + [ + "DataType"; + "Bool"; + ]; + [ + "OptionalType"; + [ + "DataType"; + "Double"; + ]; + ]; + [ + "DataType"; + "Utf8"; + ]; + ]; + ]; + ]; + [ + "int64"; + [ + "DataType"; + "Int64"; + ]; + ]; + [ + "utf8"; + [ + "DataType"; + "Utf8"; + ]; + ]; + [ + "yson"; + [ + "OptionalType"; + [ + "DataType"; + "Yson"; + ]; + ]; + ]; + ]; + ]; + "TypePatch" = [ + "StructType"; + [ + [ + "tuple"; + [ + "TupleType"; + [ + [ + "DataType"; + "Int64"; + ]; + [ + "DataType"; + "String"; + ]; + [ + "DataType"; + "Bool"; + ]; + [ + "OptionalType"; + [ + "DataType"; + "Double"; + ]; + ]; + [ + "DataType"; + "Utf8"; + ]; + ]; + ]; + ]; + ]; + ]; + }; + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "name" = "bool"; + "required" = %true; + "type" = "boolean"; + "type_v3" = "bool"; + }; + { + "name" = "optionalDouble"; + "required" = %false; + "type" = "double"; + "type_v3" = { + "type_name" = "optional"; + "item" = "double"; + }; + }; + { + "name" = "string"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "tuple"; + "required" = %false; + "type" = "any"; + "type_v3" = { + "type_name" = "optional"; + "item" = "yson"; + }; + }; + { + "name" = "int64"; + "required" = %true; + "type" = "int64"; + "type_v3" = "int64"; + }; + { + "name" = "utf8"; + "required" = %true; + "type" = "utf8"; + "type_v3" = "utf8"; + }; + { + "name" = "yson"; + "required" = %false; + "type" = "any"; + "type_v3" = { + "type_name" = "optional"; + "item" = "yson"; + }; + }; + ]; +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/block_input_various_types_v3.txt.attr b/yt/yql/tests/sql/suites/blocks/block_input_various_types_v3.txt.attr new file mode 100644 index 0000000000..4f3264e5e5 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/block_input_various_types_v3.txt.attr @@ -0,0 +1,77 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "name" = "bool"; + "required" = %true; + "type" = "boolean"; + "type_v3" = "bool"; + }; + { + "name" = "optionalDouble"; + "required" = %false; + "type" = "double"; + "type_v3" = { + "type_name" = "optional"; + "item" = "double"; + }; + }; + { + "name" = "string"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "tuple"; + "required" = %true; + "type" = "any"; + "type_v3" = { + "type_name" = "tuple"; + "elements" = [ + { + "type" = "int64"; + }; + { + "type" = "string"; + }; + { + "type" = "bool"; + }; + { + "type" = { + "type_name" = "optional"; + "item" = "double"; + }; + }; + { + "type" = "utf8"; + }; + ]; + }; + }; + { + "name" = "int64"; + "required" = %true; + "type" = "int64"; + "type_v3" = "int64"; + }; + { + "name" = "utf8"; + "required" = %true; + "type" = "utf8"; + "type_v3" = "utf8"; + }; + { + "name" = "yson"; + "required" = %false; + "type" = "any"; + "type_v3" = { + "type_name" = "optional"; + "item" = "yson"; + }; + }; + ]; +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/block_output_various_types.cfg b/yt/yql/tests/sql/suites/blocks/block_output_various_types.cfg new file mode 100644 index 0000000000..0c5560da7f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/block_output_various_types.cfg @@ -0,0 +1,2 @@ +in Input block_input_various_types.txt +providers yt diff --git a/yt/yql/tests/sql/suites/blocks/block_output_various_types.sql b/yt/yql/tests/sql/suites/blocks/block_output_various_types.sql new file mode 100644 index 0000000000..e81ef86772 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/block_output_various_types.sql @@ -0,0 +1,6 @@ +USE plato; + +PRAGMA yt.JobBlockOutput='force'; +PRAGMA yt.JobBlockOutputSupportedDataTypes="Bool,Double,String,Int64,Utf8,Yson"; + +SELECT `bool`, `optionalDouble`, `string`, `int64`, `utf8`, `yson` FROM Input WHERE `int64` > 10; diff --git a/yt/yql/tests/sql/suites/blocks/boolean_ops.cfg b/yt/yql/tests/sql/suites/blocks/boolean_ops.cfg new file mode 100644 index 0000000000..490bd1a7a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/boolean_ops.cfg @@ -0,0 +1 @@ +in Input input_bools.txt diff --git a/yt/yql/tests/sql/suites/blocks/boolean_ops.sql b/yt/yql/tests/sql/suites/blocks/boolean_ops.sql new file mode 100644 index 0000000000..e0a8c581aa --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/boolean_ops.sql @@ -0,0 +1,27 @@ +USE plato; + +select + key, + b1 and b2 as abb, + b2 and ob1 as abo, + ob2 and b1 as aob, + ob1 and ob2 as aoo, + + b1 or b2 as obb, + b2 or ob1 as obo, + ob2 or b1 as oob, + ob1 or ob2 as ooo, + + b1 xor b2 as xbb, + b2 xor ob1 as xbo, + ob2 xor b1 as xob, + ob1 xor ob2 as xoo, + + (1 > 2) and b1 and b2 and ob1 and ob2 as chain1, + (1 < 2) xor b1 xor b2 xor ob1 xor ob2 as chain2, + (1/0 < 1) or b1 or b2 or ob1 or ob2 as chain3, + + +from Input + +order by key; diff --git a/yt/yql/tests/sql/suites/blocks/coalesce_bools.cfg b/yt/yql/tests/sql/suites/blocks/coalesce_bools.cfg new file mode 100644 index 0000000000..490bd1a7a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/coalesce_bools.cfg @@ -0,0 +1 @@ +in Input input_bools.txt diff --git a/yt/yql/tests/sql/suites/blocks/coalesce_bools.sql b/yt/yql/tests/sql/suites/blocks/coalesce_bools.sql new file mode 100644 index 0000000000..2c3ffabb1a --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/coalesce_bools.sql @@ -0,0 +1,16 @@ +USE plato; + +select + key, + ob1 ?? b1, + ob1 ?? false, + ob1 ?? (1/0 > 0), + (1/2 > 0) ?? ob1, + (1/2 == 0) ?? b1, + (key/0 >= 0) ?? true, + (key/0 >= 0) ?? b1, + (key/2 >= 0) ?? false, + +from Input + +order by key; diff --git a/yt/yql/tests/sql/suites/blocks/coalesce_complex.sql b/yt/yql/tests/sql/suites/blocks/coalesce_complex.sql new file mode 100644 index 0000000000..576394292f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/coalesce_complex.sql @@ -0,0 +1,37 @@ +USE plato; + +$strings = [ + <|key:Just(Just("foo")), subkey:Just("bar"), value:1|>, + <|key:Just(Nothing(String?)), subkey:Just("two"), value:2|>, + <|key:Nothing(String??), subkey:Just("three"), value:3|>, + <|key:Nothing(String??), subkey:Nothing(String?), value:4|>, +]; + +$tuples = [ + <|key:Just(Just(AsTuple(1, 2))), subkey:Just(AsTuple(3, 4)), value:1|>, + <|key:Just(Nothing(Tuple<Int, Int>?)), subkey:Just(AsTuple(4, 5)), value:2|>, + <|key:Nothing(Tuple<Int, Int>??), subkey:Just(AsTuple(5, 6)), value:3|>, + <|key:Nothing(Tuple<Int, Int>??), subkey:Nothing(Tuple<Int, Int>?), value:4|>, +]; + +insert into @strings +select * from as_table($strings); + +insert into @tuples +select * from as_table($tuples); + +commit; + +select + value, + key ?? subkey, + subkey ?? "xxx", +from @strings +order by value; + +select + value, + key ?? subkey, + subkey ?? AsTuple(100, 500), +from @tuples +order by value; diff --git a/yt/yql/tests/sql/suites/blocks/coalesce_ints.cfg b/yt/yql/tests/sql/suites/blocks/coalesce_ints.cfg new file mode 100644 index 0000000000..c1251bbbeb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/coalesce_ints.cfg @@ -0,0 +1 @@ +in Input input_int32_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/coalesce_ints.sql b/yt/yql/tests/sql/suites/blocks/coalesce_ints.sql new file mode 100644 index 0000000000..b726fbdd66 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/coalesce_ints.sql @@ -0,0 +1,16 @@ +USE plato; + +select + k1, + k2 ?? k1, + k2 ?? 0, + k2 ?? 1/0, + 1/2 ?? k2, + 1/2 ?? k1, + k1/0 ?? 1, + k1/0 ?? k1, + k1/2 ?? 0, +from Input + +order by k1; + diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_avg.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_avg.cfg new file mode 100644 index 0000000000..5ee9471fc0 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_avg.cfg @@ -0,0 +1 @@ +in Input input_uint64.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_avg.sql b/yt/yql/tests/sql/suites/blocks/combine_all_avg.sql new file mode 100644 index 0000000000..51932b0be2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_avg.sql @@ -0,0 +1,13 @@ +USE plato; + +SELECT + avg(key), + avg(cast(key as int8)), + avg(cast(key as uint16)), + avg(cast(key as int32)), + avg(1u/0u), + avg(2), + avg(if(key=10u,key)), + avg(if(key=100u,key)), + avg(key=10u) +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_avg_filter.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_avg_filter.cfg new file mode 100644 index 0000000000..9ffe747df9 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_avg_filter.cfg @@ -0,0 +1 @@ +in Input input_uint64_filter.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_avg_filter.sql b/yt/yql/tests/sql/suites/blocks/combine_all_avg_filter.sql new file mode 100644 index 0000000000..11a70fb362 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_avg_filter.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + avg(key) +FROM Input +WHERE subkey!=5
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_avg_filter_opt.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_avg_filter_opt.cfg new file mode 100644 index 0000000000..eee6dd16f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_avg_filter_opt.cfg @@ -0,0 +1 @@ +in Input input_uint64_filter_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_avg_filter_opt.sql b/yt/yql/tests/sql/suites/blocks/combine_all_avg_filter_opt.sql new file mode 100644 index 0000000000..11a70fb362 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_avg_filter_opt.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + avg(key) +FROM Input +WHERE subkey!=5
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_count.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_count.cfg new file mode 100644 index 0000000000..5ee9471fc0 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_count.cfg @@ -0,0 +1 @@ +in Input input_uint64.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_count.sql b/yt/yql/tests/sql/suites/blocks/combine_all_count.sql new file mode 100644 index 0000000000..648f1f4f96 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_count.sql @@ -0,0 +1,9 @@ +USE plato; + +SELECT + count(*), + count(key + 1u/(4u-subkey)), + count(key), + count(1u), + count(1u/0u) +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_count_filter.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_count_filter.cfg new file mode 100644 index 0000000000..9ffe747df9 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_count_filter.cfg @@ -0,0 +1 @@ +in Input input_uint64_filter.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_count_filter.sql b/yt/yql/tests/sql/suites/blocks/combine_all_count_filter.sql new file mode 100644 index 0000000000..84d84410e6 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_count_filter.sql @@ -0,0 +1,7 @@ +USE plato; + +SELECT + count(*), + count(key) +FROM Input +WHERE subkey!=5
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_count_filter_opt.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_count_filter_opt.cfg new file mode 100644 index 0000000000..eee6dd16f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_count_filter_opt.cfg @@ -0,0 +1 @@ +in Input input_uint64_filter_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_count_filter_opt.sql b/yt/yql/tests/sql/suites/blocks/combine_all_count_filter_opt.sql new file mode 100644 index 0000000000..84d84410e6 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_count_filter_opt.sql @@ -0,0 +1,7 @@ +USE plato; + +SELECT + count(*), + count(key) +FROM Input +WHERE subkey!=5
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_decimal.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_decimal.cfg new file mode 100644 index 0000000000..a21c6560ed --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_decimal.cfg @@ -0,0 +1 @@ +in Input input_decimal.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_decimal.sql b/yt/yql/tests/sql/suites/blocks/combine_all_decimal.sql new file mode 100644 index 0000000000..1085d83900 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_decimal.sql @@ -0,0 +1,15 @@ +use plato; + +SELECT + count(cs_ext_list_price), + sum(cs_ext_tax), + sum(cs_ext_list_price), + min(cs_sales_price), + max(cs_ext_list_price), + avg(cs_ext_tax), + + sum(cast(cs_sales_price as float)), + min(cast(cs_ext_list_price as float)), + max(cast(cs_ext_tax as float)), + avg(cast(cs_sales_price as float)) +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_decimal_max.sql b/yt/yql/tests/sql/suites/blocks/combine_all_decimal_max.sql new file mode 100644 index 0000000000..7119d3dc79 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_decimal_max.sql @@ -0,0 +1,9 @@ +use plato; + +SELECT + sum(x), + avg(x) +FROM (values + (Decimal("99999999999999999999999999999999999",35,0)), + (Decimal("1",35,0)) +) as a(x) diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_max.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_max.cfg new file mode 100644 index 0000000000..5ee9471fc0 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_max.cfg @@ -0,0 +1 @@ +in Input input_uint64.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_max.sql b/yt/yql/tests/sql/suites/blocks/combine_all_max.sql new file mode 100644 index 0000000000..a57479a251 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_max.sql @@ -0,0 +1,19 @@ +USE plato; + +SELECT + max(key), + max(cast(key as int8)), + max(cast(key as uint16)), + max(cast(key as int32)), + max(1u/0u), + max(2), + max(if(key=10u,key)), + max(if(key=100u,key)), + max(false), + max(key=10u), + max(key>=10u), + max(key=20u), + max(if(key=10u,true)), + max(if(key=100u,true)), + max(if(key>=10u,true)), +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_max_filter.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_max_filter.cfg new file mode 100644 index 0000000000..9ffe747df9 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_max_filter.cfg @@ -0,0 +1 @@ +in Input input_uint64_filter.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_max_filter.sql b/yt/yql/tests/sql/suites/blocks/combine_all_max_filter.sql new file mode 100644 index 0000000000..60f4dcc7a9 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_max_filter.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + max(key) +FROM Input +WHERE subkey!=5
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_max_filter_opt.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_max_filter_opt.cfg new file mode 100644 index 0000000000..eee6dd16f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_max_filter_opt.cfg @@ -0,0 +1 @@ +in Input input_uint64_filter_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_max_filter_opt.sql b/yt/yql/tests/sql/suites/blocks/combine_all_max_filter_opt.sql new file mode 100644 index 0000000000..60f4dcc7a9 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_max_filter_opt.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + max(key) +FROM Input +WHERE subkey!=5
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_min.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_min.cfg new file mode 100644 index 0000000000..5ee9471fc0 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_min.cfg @@ -0,0 +1 @@ +in Input input_uint64.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_min.sql b/yt/yql/tests/sql/suites/blocks/combine_all_min.sql new file mode 100644 index 0000000000..7c7ee6ce15 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_min.sql @@ -0,0 +1,19 @@ +USE plato; + +SELECT + min(key), + min(cast(key as int8)), + min(cast(key as uint16)), + min(cast(key as int32)), + min(1u/0u), + min(2), + min(if(key=10u,key)), + min(if(key=100u,key)), + min(false), + min(key=10u), + min(key>=10u), + min(key=20u), + min(if(key=10u,true)), + min(if(key=100u,true)), + min(if(key>=10u,true)), +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_min_filter.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_min_filter.cfg new file mode 100644 index 0000000000..9ffe747df9 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_min_filter.cfg @@ -0,0 +1 @@ +in Input input_uint64_filter.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_min_filter.sql b/yt/yql/tests/sql/suites/blocks/combine_all_min_filter.sql new file mode 100644 index 0000000000..7ec8330637 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_min_filter.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + min(key) +FROM Input +WHERE subkey!=5
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_min_filter_opt.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_min_filter_opt.cfg new file mode 100644 index 0000000000..eee6dd16f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_min_filter_opt.cfg @@ -0,0 +1 @@ +in Input input_uint64_filter_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_min_filter_opt.sql b/yt/yql/tests/sql/suites/blocks/combine_all_min_filter_opt.sql new file mode 100644 index 0000000000..7ec8330637 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_min_filter_opt.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + min(key) +FROM Input +WHERE subkey!=5
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_minmax_double.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_minmax_double.cfg new file mode 100644 index 0000000000..3777ee5eac --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_minmax_double.cfg @@ -0,0 +1 @@ +in Input input_double.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_minmax_double.sql b/yt/yql/tests/sql/suites/blocks/combine_all_minmax_double.sql new file mode 100644 index 0000000000..0587e68053 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_minmax_double.sql @@ -0,0 +1,6 @@ +USE plato; + +select + min(subkey), + max(subkey), +from Input; diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_minmax_nested.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_minmax_nested.cfg new file mode 100644 index 0000000000..b892bc468d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_minmax_nested.cfg @@ -0,0 +1 @@ +in Input input_nested.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_minmax_nested.sql b/yt/yql/tests/sql/suites/blocks/combine_all_minmax_nested.sql new file mode 100644 index 0000000000..81bab54a42 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_minmax_nested.sql @@ -0,0 +1,6 @@ +USE plato; + +select + min(value), + max(value), +from Input; diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_pg.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_pg.cfg new file mode 100644 index 0000000000..72b51dc777 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_pg.cfg @@ -0,0 +1 @@ +in Input input_pg.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_pg.sql b/yt/yql/tests/sql/suites/blocks/combine_all_pg.sql new file mode 100644 index 0000000000..a9dc82d763 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_pg.sql @@ -0,0 +1,17 @@ +use plato; +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +SELECT + Pg::count(), + Pg::count(a), + Pg::sum(c), + Pg::min(a), + Pg::max(a), + Pg::min(c), + Pg::max(c), + Pg::avg(c), + Pg::avg(PgCast(1p,pgint4)), + Pg::avg(PgCast(1p,pgint8)), + Pg::avg(PgCast(1p,pgfloat8)), + Pg::regr_count(1.0p,1.0p) +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_pg_filter.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_pg_filter.cfg new file mode 100644 index 0000000000..72b51dc777 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_pg_filter.cfg @@ -0,0 +1 @@ +in Input input_pg.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_pg_filter.sql b/yt/yql/tests/sql/suites/blocks/combine_all_pg_filter.sql new file mode 100644 index 0000000000..e20350e0c3 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_pg_filter.sql @@ -0,0 +1,14 @@ +use plato; +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +SELECT + Pg::count(), + Pg::count(a), + Pg::sum(c), + Pg::min(a), + Pg::max(a), + Pg::min(c), + Pg::max(c), + Pg::avg(c), +FROM Input +where d="aaa"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_some.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_some.cfg new file mode 100644 index 0000000000..5ee9471fc0 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_some.cfg @@ -0,0 +1 @@ +in Input input_uint64.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_some.sql b/yt/yql/tests/sql/suites/blocks/combine_all_some.sql new file mode 100644 index 0000000000..5969668a66 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_some.sql @@ -0,0 +1,19 @@ +USE plato; + +SELECT + some(key), + some(cast(key as int8)), + some(cast(key as uint16)), + some(cast(key as int32)), + some(1u/0u), + some(2), + some(if(key=10u,key)), + some(if(key=100u,key)), + some(false), + some(key=10u), + some(key>=10u), + some(key=20u), + some(if(key=10u,true)), + some(if(key=100u,true)), + some(if(key>=10u,true)), +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_some_filter.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_some_filter.cfg new file mode 100644 index 0000000000..9ffe747df9 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_some_filter.cfg @@ -0,0 +1 @@ +in Input input_uint64_filter.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_some_filter.sql b/yt/yql/tests/sql/suites/blocks/combine_all_some_filter.sql new file mode 100644 index 0000000000..de639a661e --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_some_filter.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + some(key) +FROM Input +WHERE subkey!=5
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_sum.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_sum.cfg new file mode 100644 index 0000000000..5ee9471fc0 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_sum.cfg @@ -0,0 +1 @@ +in Input input_uint64.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_sum.sql b/yt/yql/tests/sql/suites/blocks/combine_all_sum.sql new file mode 100644 index 0000000000..5e71baec72 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_sum.sql @@ -0,0 +1,12 @@ +USE plato; + +SELECT + sum(key), + sum(cast(key as int8)), + sum(cast(key as uint16)), + sum(cast(key as int32)), + sum(1u/0u), + sum(2), + sum(if(key=10u,key)), + sum(if(key=100u,key)) +FROM Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_sum_filter.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_sum_filter.cfg new file mode 100644 index 0000000000..9ffe747df9 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_sum_filter.cfg @@ -0,0 +1 @@ +in Input input_uint64_filter.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_sum_filter.sql b/yt/yql/tests/sql/suites/blocks/combine_all_sum_filter.sql new file mode 100644 index 0000000000..e61f9c708a --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_sum_filter.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + sum(key) +FROM Input +WHERE subkey!=5
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_sum_filter_opt.cfg b/yt/yql/tests/sql/suites/blocks/combine_all_sum_filter_opt.cfg new file mode 100644 index 0000000000..eee6dd16f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_sum_filter_opt.cfg @@ -0,0 +1 @@ +in Input input_uint64_filter_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_all_sum_filter_opt.sql b/yt/yql/tests/sql/suites/blocks/combine_all_sum_filter_opt.sql new file mode 100644 index 0000000000..7ec8330637 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_all_sum_filter_opt.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + min(key) +FROM Input +WHERE subkey!=5
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_avg.cfg b/yt/yql/tests/sql/suites/blocks/combine_hashed_avg.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_avg.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_avg.sql b/yt/yql/tests/sql/suites/blocks/combine_hashed_avg.sql new file mode 100644 index 0000000000..8954e98fee --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_avg.sql @@ -0,0 +1,11 @@ +USE plato; + +SELECT + key, + avg(1u/(4u-subkey)), + avg(subkey), + avg(1u), + avg(1u/0u) +FROM Input +GROUP by key +ORDER by key
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_count.cfg b/yt/yql/tests/sql/suites/blocks/combine_hashed_count.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_count.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_count.sql b/yt/yql/tests/sql/suites/blocks/combine_hashed_count.sql new file mode 100644 index 0000000000..2350c5df47 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_count.sql @@ -0,0 +1,12 @@ +USE plato; + +SELECT + key, + count(*), + count(1u/(4u-subkey)), + count(subkey), + count(1u), + count(1u/0u) +FROM Input +GROUP by key +ORDER by key
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_count_filter.cfg b/yt/yql/tests/sql/suites/blocks/combine_hashed_count_filter.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_count_filter.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_count_filter.sql b/yt/yql/tests/sql/suites/blocks/combine_hashed_count_filter.sql new file mode 100644 index 0000000000..be51a39a1b --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_count_filter.sql @@ -0,0 +1,9 @@ +USE plato; + +SELECT + key, + count(*), +FROM Input +WHERE subkey!=4 +GROUP by key +ORDER by key
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_max.cfg b/yt/yql/tests/sql/suites/blocks/combine_hashed_max.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_max.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_max.sql b/yt/yql/tests/sql/suites/blocks/combine_hashed_max.sql new file mode 100644 index 0000000000..5719f8c8ed --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_max.sql @@ -0,0 +1,11 @@ +USE plato; + +SELECT + key, + max(1u/(4u-subkey)), + max(subkey), + max(1u), + max(1u/0u) +FROM Input +GROUP by key +ORDER by key
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_min.cfg b/yt/yql/tests/sql/suites/blocks/combine_hashed_min.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_min.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_min.sql b/yt/yql/tests/sql/suites/blocks/combine_hashed_min.sql new file mode 100644 index 0000000000..5bf681ef9e --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_min.sql @@ -0,0 +1,11 @@ +USE plato; + +SELECT + key, + min(1u/(4u-subkey)), + min(subkey), + min(1u), + min(1u/0u) +FROM Input +GROUP by key +ORDER by key
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_minmax_double.cfg b/yt/yql/tests/sql/suites/blocks/combine_hashed_minmax_double.cfg new file mode 100644 index 0000000000..3777ee5eac --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_minmax_double.cfg @@ -0,0 +1 @@ +in Input input_double.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_minmax_double.sql b/yt/yql/tests/sql/suites/blocks/combine_hashed_minmax_double.sql new file mode 100644 index 0000000000..149e38e883 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_minmax_double.sql @@ -0,0 +1,9 @@ +USE plato; + +select + key, + min(subkey), + max(subkey), +from Input +group by key +order by key; diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_minmax_nested.cfg b/yt/yql/tests/sql/suites/blocks/combine_hashed_minmax_nested.cfg new file mode 100644 index 0000000000..b892bc468d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_minmax_nested.cfg @@ -0,0 +1 @@ +in Input input_nested.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_minmax_nested.sql b/yt/yql/tests/sql/suites/blocks/combine_hashed_minmax_nested.sql new file mode 100644 index 0000000000..8070935f87 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_minmax_nested.sql @@ -0,0 +1,9 @@ +USE plato; + +select + key, + min(value), + max(value), +from Input +group by key +order by key; diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_pg.cfg b/yt/yql/tests/sql/suites/blocks/combine_hashed_pg.cfg new file mode 100644 index 0000000000..72b51dc777 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_pg.cfg @@ -0,0 +1 @@ +in Input input_pg.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_pg.sql b/yt/yql/tests/sql/suites/blocks/combine_hashed_pg.sql new file mode 100644 index 0000000000..7c8c52aab7 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_pg.sql @@ -0,0 +1,18 @@ +use plato; +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +SELECT + Pg::count(), + Pg::count(a), + Pg::sum(c), + Pg::min(a), + Pg::max(a), + Pg::min(c), + Pg::max(c), + Pg::avg(c), + Pg::avg(PgCast(1p,pgint4)), + Pg::avg(PgCast(1p,pgint8)), + Pg::avg(PgCast(1p,pgfloat8)), + Pg::regr_count(1.0p,1.0p) +FROM Input +group by len(d) diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_set.cfg b/yt/yql/tests/sql/suites/blocks/combine_hashed_set.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_set.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_set.sql b/yt/yql/tests/sql/suites/blocks/combine_hashed_set.sql new file mode 100644 index 0000000000..ffe4ee0c2e --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_set.sql @@ -0,0 +1,7 @@ +USE plato; + +SELECT + key +FROM Input +GROUP by key +ORDER by key; diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_some.cfg b/yt/yql/tests/sql/suites/blocks/combine_hashed_some.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_some.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_some.sql b/yt/yql/tests/sql/suites/blocks/combine_hashed_some.sql new file mode 100644 index 0000000000..6fcca795a6 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_some.sql @@ -0,0 +1,11 @@ +USE plato; + +SELECT + key, + some(1u/(4u-subkey)), + some(subkey), + some(1u), + some(1u/0u) +FROM Input +GROUP by key +ORDER by key
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_sum.cfg b/yt/yql/tests/sql/suites/blocks/combine_hashed_sum.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_sum.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_sum.sql b/yt/yql/tests/sql/suites/blocks/combine_hashed_sum.sql new file mode 100644 index 0000000000..9c2fc31ab4 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_sum.sql @@ -0,0 +1,11 @@ +USE plato; + +SELECT + key, + sum(1u/(4u-subkey)), + sum(subkey), + sum(1u), + sum(1u/0u) +FROM Input +GROUP by key +ORDER by key
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_sum_many_keys.cfg b/yt/yql/tests/sql/suites/blocks/combine_hashed_sum_many_keys.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_sum_many_keys.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/combine_hashed_sum_many_keys.sql b/yt/yql/tests/sql/suites/blocks/combine_hashed_sum_many_keys.sql new file mode 100644 index 0000000000..0c7e8688f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/combine_hashed_sum_many_keys.sql @@ -0,0 +1,46 @@ +USE plato; + +SELECT + k1, + sum(subkey) +FROM Input +GROUP by key + 1u as k1 +ORDER by k1; + +SELECT + k1, + k2, + sum(subkey) +FROM Input +GROUP by key + 1u as k1, key + 2u as k2 +ORDER by k1, k2; + +SELECT + k1, + k2, + k3, + sum(subkey) +FROM Input +GROUP by key + 1u as k1, key + 2u as k2, key + 3u as k3 +ORDER by k1, k2, k3; + +SELECT + k1, + k2, + k3, + k4, + sum(subkey) +FROM Input +GROUP by key + 1u as k1, key + 2u as k2, key + 3u as k3, key + 4u as k4 +ORDER by k1, k2, k3, k4; + +SELECT + k1, + k2, + k3, + k4, + k5, + sum(subkey) +FROM Input +GROUP by key + 1u as k1, key + 2u as k2, key + 3u as k3, key + 4u as k4, key + 5u as k5 +ORDER by k1, k2, k3, k4, k5; diff --git a/yt/yql/tests/sql/suites/blocks/compare.cfg b/yt/yql/tests/sql/suites/blocks/compare.cfg new file mode 100644 index 0000000000..3d3fea34e7 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/compare.cfg @@ -0,0 +1 @@ +in Input input_allnums.txt diff --git a/yt/yql/tests/sql/suites/blocks/compare.sql b/yt/yql/tests/sql/suites/blocks/compare.sql new file mode 100644 index 0000000000..a0e0d5e5b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/compare.sql @@ -0,0 +1,24 @@ +select + i8, + i16 == i32, + i32 != ui8, + ui16 < i64, + i8 <= ui8, + ui32 > i64, + ui64 >= i16, + + i16 == i32opt, + i32opt != ui8, + ui16 < i64opt, + i8opt <= ui8opt, + ui32opt > i64, + ui64 >= i16, + + i16 == 6u, + i32opt != 5, + 7 < i64opt, + 1/0 <= ui8opt, + 0 > i64, + ui64 >= 8u, +from plato.Input +order by i8; diff --git a/yt/yql/tests/sql/suites/blocks/compare_dates_floats_bools.cfg b/yt/yql/tests/sql/suites/blocks/compare_dates_floats_bools.cfg new file mode 100644 index 0000000000..bb349dd8ab --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/compare_dates_floats_bools.cfg @@ -0,0 +1 @@ +providers yt diff --git a/yt/yql/tests/sql/suites/blocks/compare_dates_floats_bools.sql b/yt/yql/tests/sql/suites/blocks/compare_dates_floats_bools.sql new file mode 100644 index 0000000000..5b459bd969 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/compare_dates_floats_bools.sql @@ -0,0 +1,59 @@ +use plato; + +insert into @tmp +select + 1 as key, + + 2.0f as fl1, + 3.0f as fl2, + + 2.5 as db1, + 1.5 as db2, + + true as b1, + false as b2, + + Date('2023-01-08') as d1, + Date('2023-01-05') as d2, + + Datetime('2023-01-08T00:00:00Z') as dt1, + Datetime('2023-01-05T00:00:00Z') as dt2, + + Timestamp('2023-01-08T00:00:00.000000Z') as ts1, + Timestamp('2023-01-05T00:00:00.000000Z') as ts2, + + Interval('PT1M') as i1, + Interval('PT1H') as i2, +; +commit; + +select + t.*, + + fl1 > fl2, + fl1 > key, + fl2 > 2.0, + fl2 > db2, + + db1 > db2, + db2 <= key, + db1 > fl2, + db2 > 1.0f, + + b1 < b2, + b1 == true, + false >= b2, + + d1 < d2, + d1 == dt1, + ts2 == d2, + d1 >= Date('2023-01-01'), + ts1 == d1, + ts2 >= dt2, + Timestamp('2023-01-05T00:00:00.000000Z') <= d2, + + + i1 < i2, + i2 > Interval('PT59M'), +from @tmp as t; + diff --git a/yt/yql/tests/sql/suites/blocks/complex_scalars.cfg b/yt/yql/tests/sql/suites/blocks/complex_scalars.cfg new file mode 100644 index 0000000000..b65712414d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/complex_scalars.cfg @@ -0,0 +1 @@ +in Input input_strings.txt diff --git a/yt/yql/tests/sql/suites/blocks/complex_scalars.sql b/yt/yql/tests/sql/suites/blocks/complex_scalars.sql new file mode 100644 index 0000000000..225de346de --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/complex_scalars.sql @@ -0,0 +1,12 @@ +USE plato; + +select + subkey || key as k, + Just(Just(1)) as nested_opt, + Just(1p) as opt_pg, + Just(Just(1p)) as nested_opt_pg, + 2p as pg, + AsTuple(1, 2, Just(Just(2))) as tuple, + Just(Just(Just(AsTuple(1, 2, Just(Just(2)))))) as double_tuple +from Input +order by k; diff --git a/yt/yql/tests/sql/suites/blocks/date_add_interval.cfg b/yt/yql/tests/sql/suites/blocks/date_add_interval.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_add_interval.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_add_interval.sql b/yt/yql/tests/sql/suites/blocks/date_add_interval.sql new file mode 100644 index 0000000000..3a920ad0e3 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_add_interval.sql @@ -0,0 +1,31 @@ +USE plato; + +SELECT + a.na + b.ni, + a.na + b.wi, + a.naz + b.ni, + a.naz + b.wi, + a.nd + b.ni, + a.nd + b.wi, + a.ndz + b.ni, + a.ndz + b.wi, + a.nt + b.ni, + a.nt + b.wi, + a.ntz + b.ni, + a.ntz + b.wi, + + a.wa + b.ni, + a.wa + b.wi, + a.waz + b.ni, + a.waz + b.wi, + a.wd + b.ni, + a.wd + b.wi, + a.wdz + b.ni, + a.wdz + b.wi, + a.wt + b.ni, + a.wt + b.wi, + a.wtz + b.ni, + a.wtz + b.wi, +FROM Dates as a CROSS JOIN Dates as b + + diff --git a/yt/yql/tests/sql/suites/blocks/date_add_interval_scalar.cfg b/yt/yql/tests/sql/suites/blocks/date_add_interval_scalar.cfg new file mode 100644 index 0000000000..8d2d2a19fc --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_add_interval_scalar.cfg @@ -0,0 +1 @@ +in Dates dates.txt diff --git a/yt/yql/tests/sql/suites/blocks/date_add_interval_scalar.sql b/yt/yql/tests/sql/suites/blocks/date_add_interval_scalar.sql new file mode 100644 index 0000000000..da977a614b --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_add_interval_scalar.sql @@ -0,0 +1,57 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + Date("2000-01-01") + ni, + Date("2000-01-01") + wi, + TzDate("2000-01-01,Europe/Moscow") + ni, + TzDate("2000-01-01,Europe/Moscow") + wi, + Datetime("2000-01-01T03:04:05Z") + ni, + Datetime("2000-01-01T03:04:05Z") + wi, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") + ni, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") + wi, + Timestamp("2000-01-01T03:04:05.678912Z") + ni, + Timestamp("2000-01-01T03:04:05.678912Z") + wi, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") + ni, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") + wi, + Date32("1900-01-01") + ni, + Date32("1900-01-01") + wi, + Datetime64("1900-01-01T03:04:05Z") + ni, + Datetime64("1900-01-01T03:04:05Z") + wi, + Timestamp64("1900-01-01T03:04:05.678912Z") + ni, + Timestamp64("1900-01-01T03:04:05.678912Z") + wi, + TzDate32("1900-01-01,Europe/Moscow") + ni, + TzDate32("1900-01-01,Europe/Moscow") + wi, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") + ni, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") + wi, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") + ni, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") + wi +FROM Dates; + +SELECT + na + Interval("P1D"), + na + Interval64("P1D"), + naz + Interval("P1D"), + naz + Interval64("P1D"), + nd + Interval("P1D"), + nd + Interval64("P1D"), + ndz + Interval("P1D"), + ndz + Interval64("P1D"), + nt + Interval("P1D"), + nt + Interval64("P1D"), + ntz + Interval("P1D"), + ntz + Interval64("P1D"), + wa + Interval("P1D"), + wa + Interval64("P1D"), + wd + Interval("P1D"), + wd + Interval64("P1D"), + wt + Interval("P1D"), + wt + Interval64("P1D"), + waz + Interval("P1D"), + waz + Interval64("P1D"), + wdz + Interval("P1D"), + wdz + Interval64("P1D"), + wtz + Interval("P1D"), + wtz + Interval64("P1D") +FROM Dates; + diff --git a/yt/yql/tests/sql/suites/blocks/date_equals.cfg b/yt/yql/tests/sql/suites/blocks/date_equals.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_equals.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_equals.sql b/yt/yql/tests/sql/suites/blocks/date_equals.sql new file mode 100644 index 0000000000..397b0a20a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_equals.sql @@ -0,0 +1,169 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + a.na == b.na, + a.na == b.naz, + a.na == b.nd, + a.na == b.ndz, + a.na == b.nt, + a.na == b.ntz, + a.na == b.wa, + a.na == b.wd, + a.na == b.wt, + a.na == b.waz, + a.na == b.wdz, + a.na == b.wtz, + + a.naz == b.na, + a.naz == b.naz, + a.naz == b.nd, + a.naz == b.ndz, + a.naz == b.nt, + a.naz == b.ntz, + a.naz == b.wa, + a.naz == b.wd, + a.naz == b.wt, + a.naz == b.waz, + a.naz == b.wdz, + a.naz == b.wtz, + + a.nd == b.na, + a.nd == b.naz, + a.nd == b.nd, + a.nd == b.ndz, + a.nd == b.nt, + a.nd == b.ntz, + a.nd == b.wa, + a.nd == b.wd, + a.nd == b.wt, + a.nd == b.waz, + a.nd == b.wdz, + a.nd == b.wtz, + + a.ndz == b.na, + a.ndz == b.naz, + a.ndz == b.nd, + a.ndz == b.ndz, + a.ndz == b.nt, + a.ndz == b.ntz, + a.ndz == b.wa, + a.ndz == b.wd, + a.ndz == b.wt, + a.ndz == b.waz, + a.ndz == b.wdz, + a.ndz == b.wtz, + + a.nt == b.na, + a.nt == b.naz, + a.nt == b.nd, + a.nt == b.ndz, + a.nt == b.nt, + a.nt == b.ntz, + a.nt == b.wa, + a.nt == b.wd, + a.nt == b.wt, + a.nt == b.waz, + a.nt == b.wdz, + a.nt == b.wtz, + + a.ntz == b.na, + a.ntz == b.naz, + a.ntz == b.nd, + a.ntz == b.ndz, + a.ntz == b.nt, + a.ntz == b.ntz, + a.ntz == b.wa, + a.ntz == b.wd, + a.ntz == b.wt, + a.ntz == b.waz, + a.ntz == b.wdz, + a.ntz == b.wtz, + + a.ni == b.ni, + a.ni == b.wi, + a.wi == b.ni, + a.wi == b.wi + +FROM Dates as a CROSS JOIN Dates as b; + +SELECT + a.wa == b.na, + a.wa == b.naz, + a.wa == b.nd, + a.wa == b.ndz, + a.wa == b.nt, + a.wa == b.ntz, + a.wa == b.wa, + a.wa == b.wd, + a.wa == b.wt, + a.wa == b.waz, + a.wa == b.wdz, + a.wa == b.wtz, + + a.wd == b.na, + a.wd == b.naz, + a.wd == b.nd, + a.wd == b.ndz, + a.wd == b.nt, + a.wd == b.ntz, + a.wd == b.wa, + a.wd == b.wd, + a.wd == b.wt, + a.wd == b.waz, + a.wd == b.wdz, + a.wd == b.wtz, + + a.wt == b.na, + a.wt == b.naz, + a.wt == b.nd, + a.wt == b.ndz, + a.wt == b.nt, + a.wt == b.ntz, + a.wt == b.wa, + a.wt == b.wd, + a.wt == b.wt, + a.wt == b.waz, + a.wt == b.wdz, + a.wt == b.wtz, + + a.waz == b.na, + a.waz == b.naz, + a.waz == b.nd, + a.waz == b.ndz, + a.waz == b.nt, + a.waz == b.ntz, + a.waz == b.wa, + a.waz == b.wd, + a.waz == b.wt, + a.waz == b.waz, + a.waz == b.wdz, + a.waz == b.wtz, + + a.wdz == b.na, + a.wdz == b.naz, + a.wdz == b.nd, + a.wdz == b.ndz, + a.wdz == b.nt, + a.wdz == b.ntz, + a.wdz == b.wa, + a.wdz == b.wd, + a.wdz == b.wt, + a.wdz == b.waz, + a.wdz == b.wdz, + a.wdz == b.wtz, + + a.wtz == b.na, + a.wtz == b.naz, + a.wtz == b.nd, + a.wtz == b.ndz, + a.wtz == b.nt, + a.wtz == b.ntz, + a.wtz == b.wa, + a.wtz == b.wd, + a.wtz == b.wt, + a.wtz == b.waz, + a.wtz == b.wdz, + a.wtz == b.wtz + +FROM Dates as a CROSS JOIN Dates as b; diff --git a/yt/yql/tests/sql/suites/blocks/date_equals_scalar.cfg b/yt/yql/tests/sql/suites/blocks/date_equals_scalar.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_equals_scalar.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_equals_scalar.sql b/yt/yql/tests/sql/suites/blocks/date_equals_scalar.sql new file mode 100644 index 0000000000..568f5cc7c1 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_equals_scalar.sql @@ -0,0 +1,332 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + Date("2000-01-01") == na, + Date("2000-01-01") == naz, + Date("2000-01-01") == nd, + Date("2000-01-01") == ndz, + Date("2000-01-01") == nt, + Date("2000-01-01") == ntz, + Date("2000-01-01") == wa, + Date("2000-01-01") == wd, + Date("2000-01-01") == wt, + Date("2000-01-01") == waz, + Date("2000-01-01") == wdz, + Date("2000-01-01") == wtz, + + TzDate("2000-01-01,Europe/Moscow") == na, + TzDate("2000-01-01,Europe/Moscow") == naz, + TzDate("2000-01-01,Europe/Moscow") == nd, + TzDate("2000-01-01,Europe/Moscow") == ndz, + TzDate("2000-01-01,Europe/Moscow") == nt, + TzDate("2000-01-01,Europe/Moscow") == ntz, + TzDate("2000-01-01,Europe/Moscow") == wa, + TzDate("2000-01-01,Europe/Moscow") == wd, + TzDate("2000-01-01,Europe/Moscow") == wt, + TzDate("2000-01-01,Europe/Moscow") == waz, + TzDate("2000-01-01,Europe/Moscow") == wdz, + TzDate("2000-01-01,Europe/Moscow") == wtz, + + Datetime("2000-01-01T03:04:05Z") == na, + Datetime("2000-01-01T03:04:05Z") == naz, + Datetime("2000-01-01T03:04:05Z") == nd, + Datetime("2000-01-01T03:04:05Z") == ndz, + Datetime("2000-01-01T03:04:05Z") == nt, + Datetime("2000-01-01T03:04:05Z") == ntz, + Datetime("2000-01-01T03:04:05Z") == wa, + Datetime("2000-01-01T03:04:05Z") == wd, + Datetime("2000-01-01T03:04:05Z") == wt, + Datetime("2000-01-01T03:04:05Z") == waz, + Datetime("2000-01-01T03:04:05Z") == wdz, + Datetime("2000-01-01T03:04:05Z") == wtz, + + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") == na, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") == naz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") == nd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") == ndz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") == nt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") == ntz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") == wa, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") == wd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") == wt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") == waz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") == wdz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") == wtz, + + Timestamp("2000-01-01T03:04:05.678912Z") == na, + Timestamp("2000-01-01T03:04:05.678912Z") == naz, + Timestamp("2000-01-01T03:04:05.678912Z") == nd, + Timestamp("2000-01-01T03:04:05.678912Z") == ndz, + Timestamp("2000-01-01T03:04:05.678912Z") == nt, + Timestamp("2000-01-01T03:04:05.678912Z") == ntz, + Timestamp("2000-01-01T03:04:05.678912Z") == wa, + Timestamp("2000-01-01T03:04:05.678912Z") == wd, + Timestamp("2000-01-01T03:04:05.678912Z") == wt, + Timestamp("2000-01-01T03:04:05.678912Z") == waz, + Timestamp("2000-01-01T03:04:05.678912Z") == wdz, + Timestamp("2000-01-01T03:04:05.678912Z") == wtz, + + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") == na, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") == naz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") == nd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") == ndz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") == nt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") == ntz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") == wa, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") == wd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") == wt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") == waz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") == wdz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") == wtz +FROM Dates; + +SELECT + Date32("1900-01-01") == na, + Date32("1900-01-01") == naz, + Date32("1900-01-01") == nd, + Date32("1900-01-01") == ndz, + Date32("1900-01-01") == nt, + Date32("1900-01-01") == ntz, + Date32("1900-01-01") == wa, + Date32("1900-01-01") == wd, + Date32("1900-01-01") == wt, + Date32("1900-01-01") == waz, + Date32("1900-01-01") == wdz, + Date32("1900-01-01") == wtz, + + Datetime64("1900-01-01T03:04:05Z") == na, + Datetime64("1900-01-01T03:04:05Z") == naz, + Datetime64("1900-01-01T03:04:05Z") == nd, + Datetime64("1900-01-01T03:04:05Z") == ndz, + Datetime64("1900-01-01T03:04:05Z") == nt, + Datetime64("1900-01-01T03:04:05Z") == ntz, + Datetime64("1900-01-01T03:04:05Z") == wa, + Datetime64("1900-01-01T03:04:05Z") == wd, + Datetime64("1900-01-01T03:04:05Z") == wt, + Datetime64("1900-01-01T03:04:05Z") == waz, + Datetime64("1900-01-01T03:04:05Z") == wdz, + Datetime64("1900-01-01T03:04:05Z") == wtz, + + Timestamp64("1900-01-01T03:04:05.678912Z") == na, + Timestamp64("1900-01-01T03:04:05.678912Z") == naz, + Timestamp64("1900-01-01T03:04:05.678912Z") == nd, + Timestamp64("1900-01-01T03:04:05.678912Z") == ndz, + Timestamp64("1900-01-01T03:04:05.678912Z") == nt, + Timestamp64("1900-01-01T03:04:05.678912Z") == ntz, + Timestamp64("1900-01-01T03:04:05.678912Z") == wa, + Timestamp64("1900-01-01T03:04:05.678912Z") == wd, + Timestamp64("1900-01-01T03:04:05.678912Z") == wt, + Timestamp64("1900-01-01T03:04:05.678912Z") == waz, + Timestamp64("1900-01-01T03:04:05.678912Z") == wdz, + Timestamp64("1900-01-01T03:04:05.678912Z") == wtz, + + TzDate32("1900-01-01,Europe/Moscow") == na, + TzDate32("1900-01-01,Europe/Moscow") == naz, + TzDate32("1900-01-01,Europe/Moscow") == nd, + TzDate32("1900-01-01,Europe/Moscow") == ndz, + TzDate32("1900-01-01,Europe/Moscow") == nt, + TzDate32("1900-01-01,Europe/Moscow") == ntz, + TzDate32("1900-01-01,Europe/Moscow") == wa, + TzDate32("1900-01-01,Europe/Moscow") == wd, + TzDate32("1900-01-01,Europe/Moscow") == wt, + TzDate32("1900-01-01,Europe/Moscow") == waz, + TzDate32("1900-01-01,Europe/Moscow") == wdz, + TzDate32("1900-01-01,Europe/Moscow") == wtz, + + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") == na, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") == naz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") == nd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") == ndz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") == nt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") == ntz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") == wa, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") == wd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") == wt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") == waz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") == wdz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") == wtz, + + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") == na, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") == naz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") == nd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") == ndz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") == nt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") == ntz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") == wa, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") == wd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") == wt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") == waz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") == wdz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") == wtz, + + Interval("P1D") == ni, + Interval("P1D") == wi, + Interval64("P1D") == ni, + Interval64("P1D") == wi, +FROM Dates; + +SELECT + na == Date("2000-01-01"), + naz == Date("2000-01-01"), + nd == Date("2000-01-01"), + ndz == Date("2000-01-01"), + nt == Date("2000-01-01"), + ntz == Date("2000-01-01"), + wa == Date("2000-01-01"), + wd == Date("2000-01-01"), + wt == Date("2000-01-01"), + waz == Date("2000-01-01"), + wdz == Date("2000-01-01"), + wtz == Date("2000-01-01"), + + na == TzDate("2000-01-01,Europe/Moscow"), + naz == TzDate("2000-01-01,Europe/Moscow"), + nd == TzDate("2000-01-01,Europe/Moscow"), + ndz == TzDate("2000-01-01,Europe/Moscow"), + nt == TzDate("2000-01-01,Europe/Moscow"), + ntz == TzDate("2000-01-01,Europe/Moscow"), + wa == TzDate("2000-01-01,Europe/Moscow"), + wd == TzDate("2000-01-01,Europe/Moscow"), + wt == TzDate("2000-01-01,Europe/Moscow"), + waz == TzDate("2000-01-01,Europe/Moscow"), + wdz == TzDate("2000-01-01,Europe/Moscow"), + wtz == TzDate("2000-01-01,Europe/Moscow"), + + na == Datetime("2000-01-01T03:04:05Z"), + naz == Datetime("2000-01-01T03:04:05Z"), + nd == Datetime("2000-01-01T03:04:05Z"), + ndz == Datetime("2000-01-01T03:04:05Z"), + nt == Datetime("2000-01-01T03:04:05Z"), + ntz == Datetime("2000-01-01T03:04:05Z"), + wa == Datetime("2000-01-01T03:04:05Z"), + wd == Datetime("2000-01-01T03:04:05Z"), + wt == Datetime("2000-01-01T03:04:05Z"), + waz == Datetime("2000-01-01T03:04:05Z"), + wdz == Datetime("2000-01-01T03:04:05Z"), + wtz == Datetime("2000-01-01T03:04:05Z"), + + na == TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + naz == TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nd == TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ndz == TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nt == TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ntz == TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wa == TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wd == TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wt == TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + waz == TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wdz == TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wtz == TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + + na == Timestamp("2000-01-01T03:04:05.678912Z"), + naz == Timestamp("2000-01-01T03:04:05.678912Z"), + nd == Timestamp("2000-01-01T03:04:05.678912Z"), + ndz == Timestamp("2000-01-01T03:04:05.678912Z"), + nt == Timestamp("2000-01-01T03:04:05.678912Z"), + ntz == Timestamp("2000-01-01T03:04:05.678912Z"), + wa == Timestamp("2000-01-01T03:04:05.678912Z"), + wd == Timestamp("2000-01-01T03:04:05.678912Z"), + wt == Timestamp("2000-01-01T03:04:05.678912Z"), + waz == Timestamp("2000-01-01T03:04:05.678912Z"), + wdz == Timestamp("2000-01-01T03:04:05.678912Z"), + wtz == Timestamp("2000-01-01T03:04:05.678912Z"), + + na == TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + naz == TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nd == TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ndz == TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nt == TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ntz == TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wa == TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wd == TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wt == TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + waz == TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wdz == TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wtz == TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") +FROM Dates; + +SELECT + na == Date32("1900-01-01"), + naz == Date32("1900-01-01"), + nd == Date32("1900-01-01"), + ndz == Date32("1900-01-01"), + nt == Date32("1900-01-01"), + ntz == Date32("1900-01-01"), + wa == Date32("1900-01-01"), + wd == Date32("1900-01-01"), + wt == Date32("1900-01-01"), + waz == Date32("1900-01-01"), + wdz == Date32("1900-01-01"), + wtz == Date32("1900-01-01"), + + na == Datetime64("1900-01-01T03:04:05Z"), + naz == Datetime64("1900-01-01T03:04:05Z"), + nd == Datetime64("1900-01-01T03:04:05Z"), + ndz == Datetime64("1900-01-01T03:04:05Z"), + nt == Datetime64("1900-01-01T03:04:05Z"), + ntz == Datetime64("1900-01-01T03:04:05Z"), + wa == Datetime64("1900-01-01T03:04:05Z"), + wd == Datetime64("1900-01-01T03:04:05Z"), + wt == Datetime64("1900-01-01T03:04:05Z"), + waz == Datetime64("1900-01-01T03:04:05Z"), + wdz == Datetime64("1900-01-01T03:04:05Z"), + wtz == Datetime64("1900-01-01T03:04:05Z"), + + na == Timestamp64("1900-01-01T03:04:05.678912Z"), + naz == Timestamp64("1900-01-01T03:04:05.678912Z"), + nd == Timestamp64("1900-01-01T03:04:05.678912Z"), + ndz == Timestamp64("1900-01-01T03:04:05.678912Z"), + nt == Timestamp64("1900-01-01T03:04:05.678912Z"), + ntz == Timestamp64("1900-01-01T03:04:05.678912Z"), + wa == Timestamp64("1900-01-01T03:04:05.678912Z"), + wd == Timestamp64("1900-01-01T03:04:05.678912Z"), + wt == Timestamp64("1900-01-01T03:04:05.678912Z"), + waz == Timestamp64("1900-01-01T03:04:05.678912Z"), + wdz == Timestamp64("1900-01-01T03:04:05.678912Z"), + wtz == Timestamp64("1900-01-01T03:04:05.678912Z"), + + na == TzDate32("1900-01-01,Europe/Moscow"), + naz == TzDate32("1900-01-01,Europe/Moscow"), + nd == TzDate32("1900-01-01,Europe/Moscow"), + ndz == TzDate32("1900-01-01,Europe/Moscow"), + nt == TzDate32("1900-01-01,Europe/Moscow"), + ntz == TzDate32("1900-01-01,Europe/Moscow"), + wa == TzDate32("1900-01-01,Europe/Moscow"), + wd == TzDate32("1900-01-01,Europe/Moscow"), + wt == TzDate32("1900-01-01,Europe/Moscow"), + waz == TzDate32("1900-01-01,Europe/Moscow"), + wdz == TzDate32("1900-01-01,Europe/Moscow"), + wtz == TzDate32("1900-01-01,Europe/Moscow"), + + na == TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + naz == TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nd == TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ndz == TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nt == TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ntz == TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wa == TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wd == TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wt == TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + waz == TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wdz == TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wtz == TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + + na == TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + naz == TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nd == TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ndz == TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nt == TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ntz == TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wa == TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wd == TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wt == TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + waz == TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wdz == TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wtz == TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + + ni == Interval("P1D"), + wi == Interval("P1D"), + ni == Interval64("P1D"), + wi == Interval64("P1D"), +FROM Dates; diff --git a/yt/yql/tests/sql/suites/blocks/date_greater.cfg b/yt/yql/tests/sql/suites/blocks/date_greater.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_greater.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_greater.sql b/yt/yql/tests/sql/suites/blocks/date_greater.sql new file mode 100644 index 0000000000..27c334fa61 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_greater.sql @@ -0,0 +1,169 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + a.na > b.na, + a.na > b.naz, + a.na > b.nd, + a.na > b.ndz, + a.na > b.nt, + a.na > b.ntz, + a.na > b.wa, + a.na > b.wd, + a.na > b.wt, + a.na > b.waz, + a.na > b.wdz, + a.na > b.wtz, + + a.naz > b.na, + a.naz > b.naz, + a.naz > b.nd, + a.naz > b.ndz, + a.naz > b.nt, + a.naz > b.ntz, + a.naz > b.wa, + a.naz > b.wd, + a.naz > b.wt, + a.naz > b.waz, + a.naz > b.wdz, + a.naz > b.wtz, + + a.nd > b.na, + a.nd > b.naz, + a.nd > b.nd, + a.nd > b.ndz, + a.nd > b.nt, + a.nd > b.ntz, + a.nd > b.wa, + a.nd > b.wd, + a.nd > b.wt, + a.nd > b.waz, + a.nd > b.wdz, + a.nd > b.wtz, + + a.ndz > b.na, + a.ndz > b.naz, + a.ndz > b.nd, + a.ndz > b.ndz, + a.ndz > b.nt, + a.ndz > b.ntz, + a.ndz > b.wa, + a.ndz > b.wd, + a.ndz > b.wt, + a.ndz > b.waz, + a.ndz > b.wdz, + a.ndz > b.wtz, + + a.nt > b.na, + a.nt > b.naz, + a.nt > b.nd, + a.nt > b.ndz, + a.nt > b.nt, + a.nt > b.ntz, + a.nt > b.wa, + a.nt > b.wd, + a.nt > b.wt, + a.nt > b.waz, + a.nt > b.wdz, + a.nt > b.wtz, + + a.ntz > b.na, + a.ntz > b.naz, + a.ntz > b.nd, + a.ntz > b.ndz, + a.ntz > b.nt, + a.ntz > b.ntz, + a.ntz > b.wa, + a.ntz > b.wd, + a.ntz > b.wt, + a.ntz > b.waz, + a.ntz > b.wdz, + a.ntz > b.wtz, + + a.ni > b.ni, + a.ni > b.wi, + a.wi > b.ni, + a.wi > b.wi + +FROM Dates as a CROSS JOIN Dates as b; + +SELECT + a.wa > b.na, + a.wa > b.naz, + a.wa > b.nd, + a.wa > b.ndz, + a.wa > b.nt, + a.wa > b.ntz, + a.wa > b.wa, + a.wa > b.wd, + a.wa > b.wt, + a.wa > b.waz, + a.wa > b.wdz, + a.wa > b.wtz, + + a.wd > b.na, + a.wd > b.naz, + a.wd > b.nd, + a.wd > b.ndz, + a.wd > b.nt, + a.wd > b.ntz, + a.wd > b.wa, + a.wd > b.wd, + a.wd > b.wt, + a.wd > b.waz, + a.wd > b.wdz, + a.wd > b.wtz, + + a.wt > b.na, + a.wt > b.naz, + a.wt > b.nd, + a.wt > b.ndz, + a.wt > b.nt, + a.wt > b.ntz, + a.wt > b.wa, + a.wt > b.wd, + a.wt > b.wt, + a.wt > b.waz, + a.wt > b.wdz, + a.wt > b.wtz, + + a.waz > b.na, + a.waz > b.naz, + a.waz > b.nd, + a.waz > b.ndz, + a.waz > b.nt, + a.waz > b.ntz, + a.waz > b.wa, + a.waz > b.wd, + a.waz > b.wt, + a.waz > b.waz, + a.waz > b.wdz, + a.waz > b.wtz, + + a.wdz > b.na, + a.wdz > b.naz, + a.wdz > b.nd, + a.wdz > b.ndz, + a.wdz > b.nt, + a.wdz > b.ntz, + a.wdz > b.wa, + a.wdz > b.wd, + a.wdz > b.wt, + a.wdz > b.waz, + a.wdz > b.wdz, + a.wdz > b.wtz, + + a.wtz > b.na, + a.wtz > b.naz, + a.wtz > b.nd, + a.wtz > b.ndz, + a.wtz > b.nt, + a.wtz > b.ntz, + a.wtz > b.wa, + a.wtz > b.wd, + a.wtz > b.wt, + a.wtz > b.waz, + a.wtz > b.wdz, + a.wtz > b.wtz + +FROM Dates as a CROSS JOIN Dates as b; diff --git a/yt/yql/tests/sql/suites/blocks/date_greater_or_equal.cfg b/yt/yql/tests/sql/suites/blocks/date_greater_or_equal.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_greater_or_equal.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_greater_or_equal.sql b/yt/yql/tests/sql/suites/blocks/date_greater_or_equal.sql new file mode 100644 index 0000000000..f8508d2d3e --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_greater_or_equal.sql @@ -0,0 +1,169 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + a.na >= b.na, + a.na >= b.naz, + a.na >= b.nd, + a.na >= b.ndz, + a.na >= b.nt, + a.na >= b.ntz, + a.na >= b.wa, + a.na >= b.wd, + a.na >= b.wt, + a.na >= b.waz, + a.na >= b.wdz, + a.na >= b.wtz, + + a.naz >= b.na, + a.naz >= b.naz, + a.naz >= b.nd, + a.naz >= b.ndz, + a.naz >= b.nt, + a.naz >= b.ntz, + a.naz >= b.wa, + a.naz >= b.wd, + a.naz >= b.wt, + a.naz >= b.waz, + a.naz >= b.wdz, + a.naz >= b.wtz, + + a.nd >= b.na, + a.nd >= b.naz, + a.nd >= b.nd, + a.nd >= b.ndz, + a.nd >= b.nt, + a.nd >= b.ntz, + a.nd >= b.wa, + a.nd >= b.wd, + a.nd >= b.wt, + a.nd >= b.waz, + a.nd >= b.wdz, + a.nd >= b.wtz, + + a.ndz >= b.na, + a.ndz >= b.naz, + a.ndz >= b.nd, + a.ndz >= b.ndz, + a.ndz >= b.nt, + a.ndz >= b.ntz, + a.ndz >= b.wa, + a.ndz >= b.wd, + a.ndz >= b.wt, + a.ndz >= b.waz, + a.ndz >= b.wdz, + a.ndz >= b.wtz, + + a.nt >= b.na, + a.nt >= b.naz, + a.nt >= b.nd, + a.nt >= b.ndz, + a.nt >= b.nt, + a.nt >= b.ntz, + a.nt >= b.wa, + a.nt >= b.wd, + a.nt >= b.wt, + a.nt >= b.waz, + a.nt >= b.wdz, + a.nt >= b.wtz, + + a.ntz >= b.na, + a.ntz >= b.naz, + a.ntz >= b.nd, + a.ntz >= b.ndz, + a.ntz >= b.nt, + a.ntz >= b.ntz, + a.ntz >= b.wa, + a.ntz >= b.wd, + a.ntz >= b.wt, + a.ntz >= b.waz, + a.ntz >= b.wdz, + a.ntz >= b.wtz, + + a.ni >= b.ni, + a.ni >= b.wi, + a.wi >= b.ni, + a.wi >= b.wi + +FROM Dates as a CROSS JOIN Dates as b; + +SELECT + a.wa >= b.na, + a.wa >= b.naz, + a.wa >= b.nd, + a.wa >= b.ndz, + a.wa >= b.nt, + a.wa >= b.ntz, + a.wa >= b.wa, + a.wa >= b.wd, + a.wa >= b.wt, + a.wa >= b.waz, + a.wa >= b.wdz, + a.wa >= b.wtz, + + a.wd >= b.na, + a.wd >= b.naz, + a.wd >= b.nd, + a.wd >= b.ndz, + a.wd >= b.nt, + a.wd >= b.ntz, + a.wd >= b.wa, + a.wd >= b.wd, + a.wd >= b.wt, + a.wd >= b.waz, + a.wd >= b.wdz, + a.wd >= b.wtz, + + a.wt >= b.na, + a.wt >= b.naz, + a.wt >= b.nd, + a.wt >= b.ndz, + a.wt >= b.nt, + a.wt >= b.ntz, + a.wt >= b.wa, + a.wt >= b.wd, + a.wt >= b.wt, + a.wt >= b.waz, + a.wt >= b.wdz, + a.wt >= b.wtz, + + a.waz >= b.na, + a.waz >= b.naz, + a.waz >= b.nd, + a.waz >= b.ndz, + a.waz >= b.nt, + a.waz >= b.ntz, + a.waz >= b.wa, + a.waz >= b.wd, + a.waz >= b.wt, + a.waz >= b.waz, + a.waz >= b.wdz, + a.waz >= b.wtz, + + a.wdz >= b.na, + a.wdz >= b.naz, + a.wdz >= b.nd, + a.wdz >= b.ndz, + a.wdz >= b.nt, + a.wdz >= b.ntz, + a.wdz >= b.wa, + a.wdz >= b.wd, + a.wdz >= b.wt, + a.wdz >= b.waz, + a.wdz >= b.wdz, + a.wdz >= b.wtz, + + a.wtz >= b.na, + a.wtz >= b.naz, + a.wtz >= b.nd, + a.wtz >= b.ndz, + a.wtz >= b.nt, + a.wtz >= b.ntz, + a.wtz >= b.wa, + a.wtz >= b.wd, + a.wtz >= b.wt, + a.wtz >= b.waz, + a.wtz >= b.wdz, + a.wtz >= b.wtz + +FROM Dates as a CROSS JOIN Dates as b; diff --git a/yt/yql/tests/sql/suites/blocks/date_greater_or_equal_scalar.cfg b/yt/yql/tests/sql/suites/blocks/date_greater_or_equal_scalar.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_greater_or_equal_scalar.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_greater_or_equal_scalar.sql b/yt/yql/tests/sql/suites/blocks/date_greater_or_equal_scalar.sql new file mode 100644 index 0000000000..f200b0deaa --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_greater_or_equal_scalar.sql @@ -0,0 +1,332 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + Date("2000-01-01") >= na, + Date("2000-01-01") >= naz, + Date("2000-01-01") >= nd, + Date("2000-01-01") >= ndz, + Date("2000-01-01") >= nt, + Date("2000-01-01") >= ntz, + Date("2000-01-01") >= wa, + Date("2000-01-01") >= wd, + Date("2000-01-01") >= wt, + Date("2000-01-01") >= waz, + Date("2000-01-01") >= wdz, + Date("2000-01-01") >= wtz, + + TzDate("2000-01-01,Europe/Moscow") >= na, + TzDate("2000-01-01,Europe/Moscow") >= naz, + TzDate("2000-01-01,Europe/Moscow") >= nd, + TzDate("2000-01-01,Europe/Moscow") >= ndz, + TzDate("2000-01-01,Europe/Moscow") >= nt, + TzDate("2000-01-01,Europe/Moscow") >= ntz, + TzDate("2000-01-01,Europe/Moscow") >= wa, + TzDate("2000-01-01,Europe/Moscow") >= wd, + TzDate("2000-01-01,Europe/Moscow") >= wt, + TzDate("2000-01-01,Europe/Moscow") >= waz, + TzDate("2000-01-01,Europe/Moscow") >= wdz, + TzDate("2000-01-01,Europe/Moscow") >= wtz, + + Datetime("2000-01-01T03:04:05Z") >= na, + Datetime("2000-01-01T03:04:05Z") >= naz, + Datetime("2000-01-01T03:04:05Z") >= nd, + Datetime("2000-01-01T03:04:05Z") >= ndz, + Datetime("2000-01-01T03:04:05Z") >= nt, + Datetime("2000-01-01T03:04:05Z") >= ntz, + Datetime("2000-01-01T03:04:05Z") >= wa, + Datetime("2000-01-01T03:04:05Z") >= wd, + Datetime("2000-01-01T03:04:05Z") >= wt, + Datetime("2000-01-01T03:04:05Z") >= waz, + Datetime("2000-01-01T03:04:05Z") >= wdz, + Datetime("2000-01-01T03:04:05Z") >= wtz, + + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") >= na, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") >= naz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") >= nd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") >= ndz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") >= nt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") >= ntz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") >= wa, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") >= wd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") >= wt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") >= waz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") >= wdz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") >= wtz, + + Timestamp("2000-01-01T03:04:05.678912Z") >= na, + Timestamp("2000-01-01T03:04:05.678912Z") >= naz, + Timestamp("2000-01-01T03:04:05.678912Z") >= nd, + Timestamp("2000-01-01T03:04:05.678912Z") >= ndz, + Timestamp("2000-01-01T03:04:05.678912Z") >= nt, + Timestamp("2000-01-01T03:04:05.678912Z") >= ntz, + Timestamp("2000-01-01T03:04:05.678912Z") >= wa, + Timestamp("2000-01-01T03:04:05.678912Z") >= wd, + Timestamp("2000-01-01T03:04:05.678912Z") >= wt, + Timestamp("2000-01-01T03:04:05.678912Z") >= waz, + Timestamp("2000-01-01T03:04:05.678912Z") >= wdz, + Timestamp("2000-01-01T03:04:05.678912Z") >= wtz, + + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") >= na, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") >= naz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") >= nd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") >= ndz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") >= nt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") >= ntz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") >= wa, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") >= wd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") >= wt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") >= waz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") >= wdz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") >= wtz +FROM Dates; + +SELECT + Date32("1900-01-01") >= na, + Date32("1900-01-01") >= naz, + Date32("1900-01-01") >= nd, + Date32("1900-01-01") >= ndz, + Date32("1900-01-01") >= nt, + Date32("1900-01-01") >= ntz, + Date32("1900-01-01") >= wa, + Date32("1900-01-01") >= wd, + Date32("1900-01-01") >= wt, + Date32("1900-01-01") >= waz, + Date32("1900-01-01") >= wdz, + Date32("1900-01-01") >= wtz, + + Datetime64("1900-01-01T03:04:05Z") >= na, + Datetime64("1900-01-01T03:04:05Z") >= naz, + Datetime64("1900-01-01T03:04:05Z") >= nd, + Datetime64("1900-01-01T03:04:05Z") >= ndz, + Datetime64("1900-01-01T03:04:05Z") >= nt, + Datetime64("1900-01-01T03:04:05Z") >= ntz, + Datetime64("1900-01-01T03:04:05Z") >= wa, + Datetime64("1900-01-01T03:04:05Z") >= wd, + Datetime64("1900-01-01T03:04:05Z") >= wt, + Datetime64("1900-01-01T03:04:05Z") >= waz, + Datetime64("1900-01-01T03:04:05Z") >= wdz, + Datetime64("1900-01-01T03:04:05Z") >= wtz, + + Timestamp64("1900-01-01T03:04:05.678912Z") >= na, + Timestamp64("1900-01-01T03:04:05.678912Z") >= naz, + Timestamp64("1900-01-01T03:04:05.678912Z") >= nd, + Timestamp64("1900-01-01T03:04:05.678912Z") >= ndz, + Timestamp64("1900-01-01T03:04:05.678912Z") >= nt, + Timestamp64("1900-01-01T03:04:05.678912Z") >= ntz, + Timestamp64("1900-01-01T03:04:05.678912Z") >= wa, + Timestamp64("1900-01-01T03:04:05.678912Z") >= wd, + Timestamp64("1900-01-01T03:04:05.678912Z") >= wt, + Timestamp64("1900-01-01T03:04:05.678912Z") >= waz, + Timestamp64("1900-01-01T03:04:05.678912Z") >= wdz, + Timestamp64("1900-01-01T03:04:05.678912Z") >= wtz, + + TzDate32("1900-01-01,Europe/Moscow") >= na, + TzDate32("1900-01-01,Europe/Moscow") >= naz, + TzDate32("1900-01-01,Europe/Moscow") >= nd, + TzDate32("1900-01-01,Europe/Moscow") >= ndz, + TzDate32("1900-01-01,Europe/Moscow") >= nt, + TzDate32("1900-01-01,Europe/Moscow") >= ntz, + TzDate32("1900-01-01,Europe/Moscow") >= wa, + TzDate32("1900-01-01,Europe/Moscow") >= wd, + TzDate32("1900-01-01,Europe/Moscow") >= wt, + TzDate32("1900-01-01,Europe/Moscow") >= waz, + TzDate32("1900-01-01,Europe/Moscow") >= wdz, + TzDate32("1900-01-01,Europe/Moscow") >= wtz, + + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") >= na, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") >= naz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") >= nd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") >= ndz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") >= nt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") >= ntz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") >= wa, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") >= wd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") >= wt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") >= waz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") >= wdz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") >= wtz, + + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") >= na, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") >= naz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") >= nd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") >= ndz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") >= nt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") >= ntz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") >= wa, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") >= wd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") >= wt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") >= waz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") >= wdz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") >= wtz, + + Interval("P1D") >= ni, + Interval("P1D") >= wi, + Interval64("P1D") >= ni, + Interval64("P1D") >= wi, +FROM Dates; + +SELECT + na >= Date("2000-01-01"), + naz >= Date("2000-01-01"), + nd >= Date("2000-01-01"), + ndz >= Date("2000-01-01"), + nt >= Date("2000-01-01"), + ntz >= Date("2000-01-01"), + wa >= Date("2000-01-01"), + wd >= Date("2000-01-01"), + wt >= Date("2000-01-01"), + waz >= Date("2000-01-01"), + wdz >= Date("2000-01-01"), + wtz >= Date("2000-01-01"), + + na >= TzDate("2000-01-01,Europe/Moscow"), + naz >= TzDate("2000-01-01,Europe/Moscow"), + nd >= TzDate("2000-01-01,Europe/Moscow"), + ndz >= TzDate("2000-01-01,Europe/Moscow"), + nt >= TzDate("2000-01-01,Europe/Moscow"), + ntz >= TzDate("2000-01-01,Europe/Moscow"), + wa >= TzDate("2000-01-01,Europe/Moscow"), + wd >= TzDate("2000-01-01,Europe/Moscow"), + wt >= TzDate("2000-01-01,Europe/Moscow"), + waz >= TzDate("2000-01-01,Europe/Moscow"), + wdz >= TzDate("2000-01-01,Europe/Moscow"), + wtz >= TzDate("2000-01-01,Europe/Moscow"), + + na >= Datetime("2000-01-01T03:04:05Z"), + naz >= Datetime("2000-01-01T03:04:05Z"), + nd >= Datetime("2000-01-01T03:04:05Z"), + ndz >= Datetime("2000-01-01T03:04:05Z"), + nt >= Datetime("2000-01-01T03:04:05Z"), + ntz >= Datetime("2000-01-01T03:04:05Z"), + wa >= Datetime("2000-01-01T03:04:05Z"), + wd >= Datetime("2000-01-01T03:04:05Z"), + wt >= Datetime("2000-01-01T03:04:05Z"), + waz >= Datetime("2000-01-01T03:04:05Z"), + wdz >= Datetime("2000-01-01T03:04:05Z"), + wtz >= Datetime("2000-01-01T03:04:05Z"), + + na >= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + naz >= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nd >= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ndz >= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nt >= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ntz >= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wa >= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wd >= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wt >= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + waz >= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wdz >= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wtz >= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + + na >= Timestamp("2000-01-01T03:04:05.678912Z"), + naz >= Timestamp("2000-01-01T03:04:05.678912Z"), + nd >= Timestamp("2000-01-01T03:04:05.678912Z"), + ndz >= Timestamp("2000-01-01T03:04:05.678912Z"), + nt >= Timestamp("2000-01-01T03:04:05.678912Z"), + ntz >= Timestamp("2000-01-01T03:04:05.678912Z"), + wa >= Timestamp("2000-01-01T03:04:05.678912Z"), + wd >= Timestamp("2000-01-01T03:04:05.678912Z"), + wt >= Timestamp("2000-01-01T03:04:05.678912Z"), + waz >= Timestamp("2000-01-01T03:04:05.678912Z"), + wdz >= Timestamp("2000-01-01T03:04:05.678912Z"), + wtz >= Timestamp("2000-01-01T03:04:05.678912Z"), + + na >= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + naz >= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nd >= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ndz >= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nt >= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ntz >= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wa >= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wd >= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wt >= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + waz >= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wdz >= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wtz >= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") +FROM Dates; + +SELECT + na >= Date32("1900-01-01"), + naz >= Date32("1900-01-01"), + nd >= Date32("1900-01-01"), + ndz >= Date32("1900-01-01"), + nt >= Date32("1900-01-01"), + ntz >= Date32("1900-01-01"), + wa >= Date32("1900-01-01"), + wd >= Date32("1900-01-01"), + wt >= Date32("1900-01-01"), + waz >= Date32("1900-01-01"), + wdz >= Date32("1900-01-01"), + wtz >= Date32("1900-01-01"), + + na >= Datetime64("1900-01-01T03:04:05Z"), + naz >= Datetime64("1900-01-01T03:04:05Z"), + nd >= Datetime64("1900-01-01T03:04:05Z"), + ndz >= Datetime64("1900-01-01T03:04:05Z"), + nt >= Datetime64("1900-01-01T03:04:05Z"), + ntz >= Datetime64("1900-01-01T03:04:05Z"), + wa >= Datetime64("1900-01-01T03:04:05Z"), + wd >= Datetime64("1900-01-01T03:04:05Z"), + wt >= Datetime64("1900-01-01T03:04:05Z"), + waz >= Datetime64("1900-01-01T03:04:05Z"), + wdz >= Datetime64("1900-01-01T03:04:05Z"), + wtz >= Datetime64("1900-01-01T03:04:05Z"), + + na >= Timestamp64("1900-01-01T03:04:05.678912Z"), + naz >= Timestamp64("1900-01-01T03:04:05.678912Z"), + nd >= Timestamp64("1900-01-01T03:04:05.678912Z"), + ndz >= Timestamp64("1900-01-01T03:04:05.678912Z"), + nt >= Timestamp64("1900-01-01T03:04:05.678912Z"), + ntz >= Timestamp64("1900-01-01T03:04:05.678912Z"), + wa >= Timestamp64("1900-01-01T03:04:05.678912Z"), + wd >= Timestamp64("1900-01-01T03:04:05.678912Z"), + wt >= Timestamp64("1900-01-01T03:04:05.678912Z"), + waz >= Timestamp64("1900-01-01T03:04:05.678912Z"), + wdz >= Timestamp64("1900-01-01T03:04:05.678912Z"), + wtz >= Timestamp64("1900-01-01T03:04:05.678912Z"), + + na >= TzDate32("1900-01-01,Europe/Moscow"), + naz >= TzDate32("1900-01-01,Europe/Moscow"), + nd >= TzDate32("1900-01-01,Europe/Moscow"), + ndz >= TzDate32("1900-01-01,Europe/Moscow"), + nt >= TzDate32("1900-01-01,Europe/Moscow"), + ntz >= TzDate32("1900-01-01,Europe/Moscow"), + wa >= TzDate32("1900-01-01,Europe/Moscow"), + wd >= TzDate32("1900-01-01,Europe/Moscow"), + wt >= TzDate32("1900-01-01,Europe/Moscow"), + waz >= TzDate32("1900-01-01,Europe/Moscow"), + wdz >= TzDate32("1900-01-01,Europe/Moscow"), + wtz >= TzDate32("1900-01-01,Europe/Moscow"), + + na >= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + naz >= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nd >= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ndz >= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nt >= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ntz >= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wa >= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wd >= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wt >= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + waz >= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wdz >= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wtz >= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + + na >= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + naz >= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nd >= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ndz >= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nt >= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ntz >= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wa >= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wd >= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wt >= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + waz >= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wdz >= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wtz >= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + + ni >= Interval("P1D"), + wi >= Interval("P1D"), + ni >= Interval64("P1D"), + wi >= Interval64("P1D"), +FROM Dates; diff --git a/yt/yql/tests/sql/suites/blocks/date_greater_scalar.cfg b/yt/yql/tests/sql/suites/blocks/date_greater_scalar.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_greater_scalar.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_greater_scalar.sql b/yt/yql/tests/sql/suites/blocks/date_greater_scalar.sql new file mode 100644 index 0000000000..b390aab2ec --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_greater_scalar.sql @@ -0,0 +1,332 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + Date("2000-01-01") > na, + Date("2000-01-01") > naz, + Date("2000-01-01") > nd, + Date("2000-01-01") > ndz, + Date("2000-01-01") > nt, + Date("2000-01-01") > ntz, + Date("2000-01-01") > wa, + Date("2000-01-01") > wd, + Date("2000-01-01") > wt, + Date("2000-01-01") > waz, + Date("2000-01-01") > wdz, + Date("2000-01-01") > wtz, + + TzDate("2000-01-01,Europe/Moscow") > na, + TzDate("2000-01-01,Europe/Moscow") > naz, + TzDate("2000-01-01,Europe/Moscow") > nd, + TzDate("2000-01-01,Europe/Moscow") > ndz, + TzDate("2000-01-01,Europe/Moscow") > nt, + TzDate("2000-01-01,Europe/Moscow") > ntz, + TzDate("2000-01-01,Europe/Moscow") > wa, + TzDate("2000-01-01,Europe/Moscow") > wd, + TzDate("2000-01-01,Europe/Moscow") > wt, + TzDate("2000-01-01,Europe/Moscow") > waz, + TzDate("2000-01-01,Europe/Moscow") > wdz, + TzDate("2000-01-01,Europe/Moscow") > wtz, + + Datetime("2000-01-01T03:04:05Z") > na, + Datetime("2000-01-01T03:04:05Z") > naz, + Datetime("2000-01-01T03:04:05Z") > nd, + Datetime("2000-01-01T03:04:05Z") > ndz, + Datetime("2000-01-01T03:04:05Z") > nt, + Datetime("2000-01-01T03:04:05Z") > ntz, + Datetime("2000-01-01T03:04:05Z") > wa, + Datetime("2000-01-01T03:04:05Z") > wd, + Datetime("2000-01-01T03:04:05Z") > wt, + Datetime("2000-01-01T03:04:05Z") > waz, + Datetime("2000-01-01T03:04:05Z") > wdz, + Datetime("2000-01-01T03:04:05Z") > wtz, + + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") > na, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") > naz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") > nd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") > ndz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") > nt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") > ntz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") > wa, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") > wd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") > wt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") > waz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") > wdz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") > wtz, + + Timestamp("2000-01-01T03:04:05.678912Z") > na, + Timestamp("2000-01-01T03:04:05.678912Z") > naz, + Timestamp("2000-01-01T03:04:05.678912Z") > nd, + Timestamp("2000-01-01T03:04:05.678912Z") > ndz, + Timestamp("2000-01-01T03:04:05.678912Z") > nt, + Timestamp("2000-01-01T03:04:05.678912Z") > ntz, + Timestamp("2000-01-01T03:04:05.678912Z") > wa, + Timestamp("2000-01-01T03:04:05.678912Z") > wd, + Timestamp("2000-01-01T03:04:05.678912Z") > wt, + Timestamp("2000-01-01T03:04:05.678912Z") > waz, + Timestamp("2000-01-01T03:04:05.678912Z") > wdz, + Timestamp("2000-01-01T03:04:05.678912Z") > wtz, + + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") > na, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") > naz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") > nd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") > ndz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") > nt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") > ntz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") > wa, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") > wd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") > wt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") > waz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") > wdz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") > wtz +FROM Dates; + +SELECT + Date32("1900-01-01") > na, + Date32("1900-01-01") > naz, + Date32("1900-01-01") > nd, + Date32("1900-01-01") > ndz, + Date32("1900-01-01") > nt, + Date32("1900-01-01") > ntz, + Date32("1900-01-01") > wa, + Date32("1900-01-01") > wd, + Date32("1900-01-01") > wt, + Date32("1900-01-01") > waz, + Date32("1900-01-01") > wdz, + Date32("1900-01-01") > wtz, + + Datetime64("1900-01-01T03:04:05Z") > na, + Datetime64("1900-01-01T03:04:05Z") > naz, + Datetime64("1900-01-01T03:04:05Z") > nd, + Datetime64("1900-01-01T03:04:05Z") > ndz, + Datetime64("1900-01-01T03:04:05Z") > nt, + Datetime64("1900-01-01T03:04:05Z") > ntz, + Datetime64("1900-01-01T03:04:05Z") > wa, + Datetime64("1900-01-01T03:04:05Z") > wd, + Datetime64("1900-01-01T03:04:05Z") > wt, + Datetime64("1900-01-01T03:04:05Z") > waz, + Datetime64("1900-01-01T03:04:05Z") > wdz, + Datetime64("1900-01-01T03:04:05Z") > wtz, + + Timestamp64("1900-01-01T03:04:05.678912Z") > na, + Timestamp64("1900-01-01T03:04:05.678912Z") > naz, + Timestamp64("1900-01-01T03:04:05.678912Z") > nd, + Timestamp64("1900-01-01T03:04:05.678912Z") > ndz, + Timestamp64("1900-01-01T03:04:05.678912Z") > nt, + Timestamp64("1900-01-01T03:04:05.678912Z") > ntz, + Timestamp64("1900-01-01T03:04:05.678912Z") > wa, + Timestamp64("1900-01-01T03:04:05.678912Z") > wd, + Timestamp64("1900-01-01T03:04:05.678912Z") > wt, + Timestamp64("1900-01-01T03:04:05.678912Z") > waz, + Timestamp64("1900-01-01T03:04:05.678912Z") > wdz, + Timestamp64("1900-01-01T03:04:05.678912Z") > wtz, + + TzDate32("1900-01-01,Europe/Moscow") > na, + TzDate32("1900-01-01,Europe/Moscow") > naz, + TzDate32("1900-01-01,Europe/Moscow") > nd, + TzDate32("1900-01-01,Europe/Moscow") > ndz, + TzDate32("1900-01-01,Europe/Moscow") > nt, + TzDate32("1900-01-01,Europe/Moscow") > ntz, + TzDate32("1900-01-01,Europe/Moscow") > wa, + TzDate32("1900-01-01,Europe/Moscow") > wd, + TzDate32("1900-01-01,Europe/Moscow") > wt, + TzDate32("1900-01-01,Europe/Moscow") > waz, + TzDate32("1900-01-01,Europe/Moscow") > wdz, + TzDate32("1900-01-01,Europe/Moscow") > wtz, + + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") > na, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") > naz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") > nd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") > ndz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") > nt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") > ntz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") > wa, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") > wd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") > wt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") > waz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") > wdz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") > wtz, + + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") > na, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") > naz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") > nd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") > ndz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") > nt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") > ntz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") > wa, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") > wd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") > wt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") > waz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") > wdz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") > wtz, + + Interval("P1D") > ni, + Interval("P1D") > wi, + Interval64("P1D") > ni, + Interval64("P1D") > wi, +FROM Dates; + +SELECT + na > Date("2000-01-01"), + naz > Date("2000-01-01"), + nd > Date("2000-01-01"), + ndz > Date("2000-01-01"), + nt > Date("2000-01-01"), + ntz > Date("2000-01-01"), + wa > Date("2000-01-01"), + wd > Date("2000-01-01"), + wt > Date("2000-01-01"), + waz > Date("2000-01-01"), + wdz > Date("2000-01-01"), + wtz > Date("2000-01-01"), + + na > TzDate("2000-01-01,Europe/Moscow"), + naz > TzDate("2000-01-01,Europe/Moscow"), + nd > TzDate("2000-01-01,Europe/Moscow"), + ndz > TzDate("2000-01-01,Europe/Moscow"), + nt > TzDate("2000-01-01,Europe/Moscow"), + ntz > TzDate("2000-01-01,Europe/Moscow"), + wa > TzDate("2000-01-01,Europe/Moscow"), + wd > TzDate("2000-01-01,Europe/Moscow"), + wt > TzDate("2000-01-01,Europe/Moscow"), + waz > TzDate("2000-01-01,Europe/Moscow"), + wdz > TzDate("2000-01-01,Europe/Moscow"), + wtz > TzDate("2000-01-01,Europe/Moscow"), + + na > Datetime("2000-01-01T03:04:05Z"), + naz > Datetime("2000-01-01T03:04:05Z"), + nd > Datetime("2000-01-01T03:04:05Z"), + ndz > Datetime("2000-01-01T03:04:05Z"), + nt > Datetime("2000-01-01T03:04:05Z"), + ntz > Datetime("2000-01-01T03:04:05Z"), + wa > Datetime("2000-01-01T03:04:05Z"), + wd > Datetime("2000-01-01T03:04:05Z"), + wt > Datetime("2000-01-01T03:04:05Z"), + waz > Datetime("2000-01-01T03:04:05Z"), + wdz > Datetime("2000-01-01T03:04:05Z"), + wtz > Datetime("2000-01-01T03:04:05Z"), + + na > TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + naz > TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nd > TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ndz > TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nt > TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ntz > TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wa > TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wd > TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wt > TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + waz > TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wdz > TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wtz > TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + + na > Timestamp("2000-01-01T03:04:05.678912Z"), + naz > Timestamp("2000-01-01T03:04:05.678912Z"), + nd > Timestamp("2000-01-01T03:04:05.678912Z"), + ndz > Timestamp("2000-01-01T03:04:05.678912Z"), + nt > Timestamp("2000-01-01T03:04:05.678912Z"), + ntz > Timestamp("2000-01-01T03:04:05.678912Z"), + wa > Timestamp("2000-01-01T03:04:05.678912Z"), + wd > Timestamp("2000-01-01T03:04:05.678912Z"), + wt > Timestamp("2000-01-01T03:04:05.678912Z"), + waz > Timestamp("2000-01-01T03:04:05.678912Z"), + wdz > Timestamp("2000-01-01T03:04:05.678912Z"), + wtz > Timestamp("2000-01-01T03:04:05.678912Z"), + + na > TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + naz > TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nd > TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ndz > TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nt > TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ntz > TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wa > TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wd > TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wt > TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + waz > TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wdz > TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wtz > TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") +FROM Dates; + +SELECT + na > Date32("1900-01-01"), + naz > Date32("1900-01-01"), + nd > Date32("1900-01-01"), + ndz > Date32("1900-01-01"), + nt > Date32("1900-01-01"), + ntz > Date32("1900-01-01"), + wa > Date32("1900-01-01"), + wd > Date32("1900-01-01"), + wt > Date32("1900-01-01"), + waz > Date32("1900-01-01"), + wdz > Date32("1900-01-01"), + wtz > Date32("1900-01-01"), + + na > Datetime64("1900-01-01T03:04:05Z"), + naz > Datetime64("1900-01-01T03:04:05Z"), + nd > Datetime64("1900-01-01T03:04:05Z"), + ndz > Datetime64("1900-01-01T03:04:05Z"), + nt > Datetime64("1900-01-01T03:04:05Z"), + ntz > Datetime64("1900-01-01T03:04:05Z"), + wa > Datetime64("1900-01-01T03:04:05Z"), + wd > Datetime64("1900-01-01T03:04:05Z"), + wt > Datetime64("1900-01-01T03:04:05Z"), + waz > Datetime64("1900-01-01T03:04:05Z"), + wdz > Datetime64("1900-01-01T03:04:05Z"), + wtz > Datetime64("1900-01-01T03:04:05Z"), + + na > Timestamp64("1900-01-01T03:04:05.678912Z"), + naz > Timestamp64("1900-01-01T03:04:05.678912Z"), + nd > Timestamp64("1900-01-01T03:04:05.678912Z"), + ndz > Timestamp64("1900-01-01T03:04:05.678912Z"), + nt > Timestamp64("1900-01-01T03:04:05.678912Z"), + ntz > Timestamp64("1900-01-01T03:04:05.678912Z"), + wa > Timestamp64("1900-01-01T03:04:05.678912Z"), + wd > Timestamp64("1900-01-01T03:04:05.678912Z"), + wt > Timestamp64("1900-01-01T03:04:05.678912Z"), + waz > Timestamp64("1900-01-01T03:04:05.678912Z"), + wdz > Timestamp64("1900-01-01T03:04:05.678912Z"), + wtz > Timestamp64("1900-01-01T03:04:05.678912Z"), + + na > TzDate32("1900-01-01,Europe/Moscow"), + naz > TzDate32("1900-01-01,Europe/Moscow"), + nd > TzDate32("1900-01-01,Europe/Moscow"), + ndz > TzDate32("1900-01-01,Europe/Moscow"), + nt > TzDate32("1900-01-01,Europe/Moscow"), + ntz > TzDate32("1900-01-01,Europe/Moscow"), + wa > TzDate32("1900-01-01,Europe/Moscow"), + wd > TzDate32("1900-01-01,Europe/Moscow"), + wt > TzDate32("1900-01-01,Europe/Moscow"), + waz > TzDate32("1900-01-01,Europe/Moscow"), + wdz > TzDate32("1900-01-01,Europe/Moscow"), + wtz > TzDate32("1900-01-01,Europe/Moscow"), + + na > TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + naz > TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nd > TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ndz > TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nt > TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ntz > TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wa > TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wd > TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wt > TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + waz > TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wdz > TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wtz > TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + + na > TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + naz > TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nd > TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ndz > TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nt > TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ntz > TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wa > TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wd > TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wt > TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + waz > TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wdz > TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wtz > TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + + ni > Interval("P1D"), + wi > Interval("P1D"), + ni > Interval64("P1D"), + wi > Interval64("P1D"), +FROM Dates; diff --git a/yt/yql/tests/sql/suites/blocks/date_group_by.cfg b/yt/yql/tests/sql/suites/blocks/date_group_by.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_group_by.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_group_by.sql b/yt/yql/tests/sql/suites/blocks/date_group_by.sql new file mode 100644 index 0000000000..52354c9ea8 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_group_by.sql @@ -0,0 +1,9 @@ +USE plato; +pragma yt.UseNativeDescSort; +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +SELECT + count(*),min(i8) +FROM (SELECT * FROM concat(Dates,Dates)) as t +GROUP BY na,wa,naz,waz,nd,ndz,wd,wdz,nt,ntz,wt,wtz,ni,wi; + diff --git a/yt/yql/tests/sql/suites/blocks/date_less.cfg b/yt/yql/tests/sql/suites/blocks/date_less.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_less.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_less.sql b/yt/yql/tests/sql/suites/blocks/date_less.sql new file mode 100644 index 0000000000..7145452b86 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_less.sql @@ -0,0 +1,169 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + a.na < b.na, + a.na < b.naz, + a.na < b.nd, + a.na < b.ndz, + a.na < b.nt, + a.na < b.ntz, + a.na < b.wa, + a.na < b.wd, + a.na < b.wt, + a.na < b.waz, + a.na < b.wdz, + a.na < b.wtz, + + a.naz < b.na, + a.naz < b.naz, + a.naz < b.nd, + a.naz < b.ndz, + a.naz < b.nt, + a.naz < b.ntz, + a.naz < b.wa, + a.naz < b.wd, + a.naz < b.wt, + a.naz < b.waz, + a.naz < b.wdz, + a.naz < b.wtz, + + a.nd < b.na, + a.nd < b.naz, + a.nd < b.nd, + a.nd < b.ndz, + a.nd < b.nt, + a.nd < b.ntz, + a.nd < b.wa, + a.nd < b.wd, + a.nd < b.wt, + a.nd < b.waz, + a.nd < b.wdz, + a.nd < b.wtz, + + a.ndz < b.na, + a.ndz < b.naz, + a.ndz < b.nd, + a.ndz < b.ndz, + a.ndz < b.nt, + a.ndz < b.ntz, + a.ndz < b.wa, + a.ndz < b.wd, + a.ndz < b.wt, + a.ndz < b.waz, + a.ndz < b.wdz, + a.ndz < b.wtz, + + a.nt < b.na, + a.nt < b.naz, + a.nt < b.nd, + a.nt < b.ndz, + a.nt < b.nt, + a.nt < b.ntz, + a.nt < b.wa, + a.nt < b.wd, + a.nt < b.wt, + a.nt < b.waz, + a.nt < b.wdz, + a.nt < b.wtz, + + a.ntz < b.na, + a.ntz < b.naz, + a.ntz < b.nd, + a.ntz < b.ndz, + a.ntz < b.nt, + a.ntz < b.ntz, + a.ntz < b.wa, + a.ntz < b.wd, + a.ntz < b.wt, + a.ntz < b.waz, + a.ntz < b.wdz, + a.ntz < b.wtz, + + a.ni < b.ni, + a.ni < b.wi, + a.wi < b.ni, + a.wi < b.wi + +FROM Dates as a CROSS JOIN Dates as b; + +SELECT + a.wa < b.na, + a.wa < b.naz, + a.wa < b.nd, + a.wa < b.ndz, + a.wa < b.nt, + a.wa < b.ntz, + a.wa < b.wa, + a.wa < b.wd, + a.wa < b.wt, + a.wa < b.waz, + a.wa < b.wdz, + a.wa < b.wtz, + + a.wd < b.na, + a.wd < b.naz, + a.wd < b.nd, + a.wd < b.ndz, + a.wd < b.nt, + a.wd < b.ntz, + a.wd < b.wa, + a.wd < b.wd, + a.wd < b.wt, + a.wd < b.waz, + a.wd < b.wdz, + a.wd < b.wtz, + + a.wt < b.na, + a.wt < b.naz, + a.wt < b.nd, + a.wt < b.ndz, + a.wt < b.nt, + a.wt < b.ntz, + a.wt < b.wa, + a.wt < b.wd, + a.wt < b.wt, + a.wt < b.waz, + a.wt < b.wdz, + a.wt < b.wtz, + + a.waz < b.na, + a.waz < b.naz, + a.waz < b.nd, + a.waz < b.ndz, + a.waz < b.nt, + a.waz < b.ntz, + a.waz < b.wa, + a.waz < b.wd, + a.waz < b.wt, + a.waz < b.waz, + a.waz < b.wdz, + a.waz < b.wtz, + + a.wdz < b.na, + a.wdz < b.naz, + a.wdz < b.nd, + a.wdz < b.ndz, + a.wdz < b.nt, + a.wdz < b.ntz, + a.wdz < b.wa, + a.wdz < b.wd, + a.wdz < b.wt, + a.wdz < b.waz, + a.wdz < b.wdz, + a.wdz < b.wtz, + + a.wtz < b.na, + a.wtz < b.naz, + a.wtz < b.nd, + a.wtz < b.ndz, + a.wtz < b.nt, + a.wtz < b.ntz, + a.wtz < b.wa, + a.wtz < b.wd, + a.wtz < b.wt, + a.wtz < b.waz, + a.wtz < b.wdz, + a.wtz < b.wtz + +FROM Dates as a CROSS JOIN Dates as b; diff --git a/yt/yql/tests/sql/suites/blocks/date_less_or_equal.cfg b/yt/yql/tests/sql/suites/blocks/date_less_or_equal.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_less_or_equal.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_less_or_equal.sql b/yt/yql/tests/sql/suites/blocks/date_less_or_equal.sql new file mode 100644 index 0000000000..e0ea714ca5 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_less_or_equal.sql @@ -0,0 +1,169 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + a.na <= b.na, + a.na <= b.naz, + a.na <= b.nd, + a.na <= b.ndz, + a.na <= b.nt, + a.na <= b.ntz, + a.na <= b.wa, + a.na <= b.wd, + a.na <= b.wt, + a.na <= b.waz, + a.na <= b.wdz, + a.na <= b.wtz, + + a.naz <= b.na, + a.naz <= b.naz, + a.naz <= b.nd, + a.naz <= b.ndz, + a.naz <= b.nt, + a.naz <= b.ntz, + a.naz <= b.wa, + a.naz <= b.wd, + a.naz <= b.wt, + a.naz <= b.waz, + a.naz <= b.wdz, + a.naz <= b.wtz, + + a.nd <= b.na, + a.nd <= b.naz, + a.nd <= b.nd, + a.nd <= b.ndz, + a.nd <= b.nt, + a.nd <= b.ntz, + a.nd <= b.wa, + a.nd <= b.wd, + a.nd <= b.wt, + a.nd <= b.waz, + a.nd <= b.wdz, + a.nd <= b.wtz, + + a.ndz <= b.na, + a.ndz <= b.naz, + a.ndz <= b.nd, + a.ndz <= b.ndz, + a.ndz <= b.nt, + a.ndz <= b.ntz, + a.ndz <= b.wa, + a.ndz <= b.wd, + a.ndz <= b.wt, + a.ndz <= b.waz, + a.ndz <= b.wdz, + a.ndz <= b.wtz, + + a.nt <= b.na, + a.nt <= b.naz, + a.nt <= b.nd, + a.nt <= b.ndz, + a.nt <= b.nt, + a.nt <= b.ntz, + a.nt <= b.wa, + a.nt <= b.wd, + a.nt <= b.wt, + a.nt <= b.waz, + a.nt <= b.wdz, + a.nt <= b.wtz, + + a.ntz <= b.na, + a.ntz <= b.naz, + a.ntz <= b.nd, + a.ntz <= b.ndz, + a.ntz <= b.nt, + a.ntz <= b.ntz, + a.ntz <= b.wa, + a.ntz <= b.wd, + a.ntz <= b.wt, + a.ntz <= b.waz, + a.ntz <= b.wdz, + a.ntz <= b.wtz, + + a.ni <= b.ni, + a.ni <= b.wi, + a.wi <= b.ni, + a.wi <= b.wi + +FROM Dates as a CROSS JOIN Dates as b; + +SELECT + a.wa <= b.na, + a.wa <= b.naz, + a.wa <= b.nd, + a.wa <= b.ndz, + a.wa <= b.nt, + a.wa <= b.ntz, + a.wa <= b.wa, + a.wa <= b.wd, + a.wa <= b.wt, + a.wa <= b.waz, + a.wa <= b.wdz, + a.wa <= b.wtz, + + a.wd <= b.na, + a.wd <= b.naz, + a.wd <= b.nd, + a.wd <= b.ndz, + a.wd <= b.nt, + a.wd <= b.ntz, + a.wd <= b.wa, + a.wd <= b.wd, + a.wd <= b.wt, + a.wd <= b.waz, + a.wd <= b.wdz, + a.wd <= b.wtz, + + a.wt <= b.na, + a.wt <= b.naz, + a.wt <= b.nd, + a.wt <= b.ndz, + a.wt <= b.nt, + a.wt <= b.ntz, + a.wt <= b.wa, + a.wt <= b.wd, + a.wt <= b.wt, + a.wt <= b.waz, + a.wt <= b.wdz, + a.wt <= b.wtz, + + a.waz <= b.na, + a.waz <= b.naz, + a.waz <= b.nd, + a.waz <= b.ndz, + a.waz <= b.nt, + a.waz <= b.ntz, + a.waz <= b.wa, + a.waz <= b.wd, + a.waz <= b.wt, + a.waz <= b.waz, + a.waz <= b.wdz, + a.waz <= b.wtz, + + a.wdz <= b.na, + a.wdz <= b.naz, + a.wdz <= b.nd, + a.wdz <= b.ndz, + a.wdz <= b.nt, + a.wdz <= b.ntz, + a.wdz <= b.wa, + a.wdz <= b.wd, + a.wdz <= b.wt, + a.wdz <= b.waz, + a.wdz <= b.wdz, + a.wdz <= b.wtz, + + a.wtz <= b.na, + a.wtz <= b.naz, + a.wtz <= b.nd, + a.wtz <= b.ndz, + a.wtz <= b.nt, + a.wtz <= b.ntz, + a.wtz <= b.wa, + a.wtz <= b.wd, + a.wtz <= b.wt, + a.wtz <= b.waz, + a.wtz <= b.wdz, + a.wtz <= b.wtz + +FROM Dates as a CROSS JOIN Dates as b; diff --git a/yt/yql/tests/sql/suites/blocks/date_less_or_equal_scalar.cfg b/yt/yql/tests/sql/suites/blocks/date_less_or_equal_scalar.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_less_or_equal_scalar.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_less_or_equal_scalar.sql b/yt/yql/tests/sql/suites/blocks/date_less_or_equal_scalar.sql new file mode 100644 index 0000000000..2f2db17af9 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_less_or_equal_scalar.sql @@ -0,0 +1,332 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + Date("2000-01-01") <= na, + Date("2000-01-01") <= naz, + Date("2000-01-01") <= nd, + Date("2000-01-01") <= ndz, + Date("2000-01-01") <= nt, + Date("2000-01-01") <= ntz, + Date("2000-01-01") <= wa, + Date("2000-01-01") <= wd, + Date("2000-01-01") <= wt, + Date("2000-01-01") <= waz, + Date("2000-01-01") <= wdz, + Date("2000-01-01") <= wtz, + + TzDate("2000-01-01,Europe/Moscow") <= na, + TzDate("2000-01-01,Europe/Moscow") <= naz, + TzDate("2000-01-01,Europe/Moscow") <= nd, + TzDate("2000-01-01,Europe/Moscow") <= ndz, + TzDate("2000-01-01,Europe/Moscow") <= nt, + TzDate("2000-01-01,Europe/Moscow") <= ntz, + TzDate("2000-01-01,Europe/Moscow") <= wa, + TzDate("2000-01-01,Europe/Moscow") <= wd, + TzDate("2000-01-01,Europe/Moscow") <= wt, + TzDate("2000-01-01,Europe/Moscow") <= waz, + TzDate("2000-01-01,Europe/Moscow") <= wdz, + TzDate("2000-01-01,Europe/Moscow") <= wtz, + + Datetime("2000-01-01T03:04:05Z") <= na, + Datetime("2000-01-01T03:04:05Z") <= naz, + Datetime("2000-01-01T03:04:05Z") <= nd, + Datetime("2000-01-01T03:04:05Z") <= ndz, + Datetime("2000-01-01T03:04:05Z") <= nt, + Datetime("2000-01-01T03:04:05Z") <= ntz, + Datetime("2000-01-01T03:04:05Z") <= wa, + Datetime("2000-01-01T03:04:05Z") <= wd, + Datetime("2000-01-01T03:04:05Z") <= wt, + Datetime("2000-01-01T03:04:05Z") <= waz, + Datetime("2000-01-01T03:04:05Z") <= wdz, + Datetime("2000-01-01T03:04:05Z") <= wtz, + + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") <= na, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") <= naz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") <= nd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") <= ndz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") <= nt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") <= ntz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") <= wa, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") <= wd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") <= wt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") <= waz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") <= wdz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") <= wtz, + + Timestamp("2000-01-01T03:04:05.678912Z") <= na, + Timestamp("2000-01-01T03:04:05.678912Z") <= naz, + Timestamp("2000-01-01T03:04:05.678912Z") <= nd, + Timestamp("2000-01-01T03:04:05.678912Z") <= ndz, + Timestamp("2000-01-01T03:04:05.678912Z") <= nt, + Timestamp("2000-01-01T03:04:05.678912Z") <= ntz, + Timestamp("2000-01-01T03:04:05.678912Z") <= wa, + Timestamp("2000-01-01T03:04:05.678912Z") <= wd, + Timestamp("2000-01-01T03:04:05.678912Z") <= wt, + Timestamp("2000-01-01T03:04:05.678912Z") <= waz, + Timestamp("2000-01-01T03:04:05.678912Z") <= wdz, + Timestamp("2000-01-01T03:04:05.678912Z") <= wtz, + + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") <= na, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") <= naz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") <= nd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") <= ndz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") <= nt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") <= ntz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") <= wa, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") <= wd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") <= wt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") <= waz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") <= wdz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") <= wtz +FROM Dates; + +SELECT + Date32("1900-01-01") <= na, + Date32("1900-01-01") <= naz, + Date32("1900-01-01") <= nd, + Date32("1900-01-01") <= ndz, + Date32("1900-01-01") <= nt, + Date32("1900-01-01") <= ntz, + Date32("1900-01-01") <= wa, + Date32("1900-01-01") <= wd, + Date32("1900-01-01") <= wt, + Date32("1900-01-01") <= waz, + Date32("1900-01-01") <= wdz, + Date32("1900-01-01") <= wtz, + + Datetime64("1900-01-01T03:04:05Z") <= na, + Datetime64("1900-01-01T03:04:05Z") <= naz, + Datetime64("1900-01-01T03:04:05Z") <= nd, + Datetime64("1900-01-01T03:04:05Z") <= ndz, + Datetime64("1900-01-01T03:04:05Z") <= nt, + Datetime64("1900-01-01T03:04:05Z") <= ntz, + Datetime64("1900-01-01T03:04:05Z") <= wa, + Datetime64("1900-01-01T03:04:05Z") <= wd, + Datetime64("1900-01-01T03:04:05Z") <= wt, + Datetime64("1900-01-01T03:04:05Z") <= waz, + Datetime64("1900-01-01T03:04:05Z") <= wdz, + Datetime64("1900-01-01T03:04:05Z") <= wtz, + + Timestamp64("1900-01-01T03:04:05.678912Z") <= na, + Timestamp64("1900-01-01T03:04:05.678912Z") <= naz, + Timestamp64("1900-01-01T03:04:05.678912Z") <= nd, + Timestamp64("1900-01-01T03:04:05.678912Z") <= ndz, + Timestamp64("1900-01-01T03:04:05.678912Z") <= nt, + Timestamp64("1900-01-01T03:04:05.678912Z") <= ntz, + Timestamp64("1900-01-01T03:04:05.678912Z") <= wa, + Timestamp64("1900-01-01T03:04:05.678912Z") <= wd, + Timestamp64("1900-01-01T03:04:05.678912Z") <= wt, + Timestamp64("1900-01-01T03:04:05.678912Z") <= waz, + Timestamp64("1900-01-01T03:04:05.678912Z") <= wdz, + Timestamp64("1900-01-01T03:04:05.678912Z") <= wtz, + + TzDate32("1900-01-01,Europe/Moscow") <= na, + TzDate32("1900-01-01,Europe/Moscow") <= naz, + TzDate32("1900-01-01,Europe/Moscow") <= nd, + TzDate32("1900-01-01,Europe/Moscow") <= ndz, + TzDate32("1900-01-01,Europe/Moscow") <= nt, + TzDate32("1900-01-01,Europe/Moscow") <= ntz, + TzDate32("1900-01-01,Europe/Moscow") <= wa, + TzDate32("1900-01-01,Europe/Moscow") <= wd, + TzDate32("1900-01-01,Europe/Moscow") <= wt, + TzDate32("1900-01-01,Europe/Moscow") <= waz, + TzDate32("1900-01-01,Europe/Moscow") <= wdz, + TzDate32("1900-01-01,Europe/Moscow") <= wtz, + + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") <= na, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") <= naz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") <= nd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") <= ndz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") <= nt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") <= ntz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") <= wa, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") <= wd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") <= wt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") <= waz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") <= wdz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") <= wtz, + + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") <= na, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") <= naz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") <= nd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") <= ndz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") <= nt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") <= ntz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") <= wa, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") <= wd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") <= wt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") <= waz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") <= wdz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") <= wtz, + + Interval("P1D") <= ni, + Interval("P1D") <= wi, + Interval64("P1D") <= ni, + Interval64("P1D") <= wi, +FROM Dates; + +SELECT + na <= Date("2000-01-01"), + naz <= Date("2000-01-01"), + nd <= Date("2000-01-01"), + ndz <= Date("2000-01-01"), + nt <= Date("2000-01-01"), + ntz <= Date("2000-01-01"), + wa <= Date("2000-01-01"), + wd <= Date("2000-01-01"), + wt <= Date("2000-01-01"), + waz <= Date("2000-01-01"), + wdz <= Date("2000-01-01"), + wtz <= Date("2000-01-01"), + + na <= TzDate("2000-01-01,Europe/Moscow"), + naz <= TzDate("2000-01-01,Europe/Moscow"), + nd <= TzDate("2000-01-01,Europe/Moscow"), + ndz <= TzDate("2000-01-01,Europe/Moscow"), + nt <= TzDate("2000-01-01,Europe/Moscow"), + ntz <= TzDate("2000-01-01,Europe/Moscow"), + wa <= TzDate("2000-01-01,Europe/Moscow"), + wd <= TzDate("2000-01-01,Europe/Moscow"), + wt <= TzDate("2000-01-01,Europe/Moscow"), + waz <= TzDate("2000-01-01,Europe/Moscow"), + wdz <= TzDate("2000-01-01,Europe/Moscow"), + wtz <= TzDate("2000-01-01,Europe/Moscow"), + + na <= Datetime("2000-01-01T03:04:05Z"), + naz <= Datetime("2000-01-01T03:04:05Z"), + nd <= Datetime("2000-01-01T03:04:05Z"), + ndz <= Datetime("2000-01-01T03:04:05Z"), + nt <= Datetime("2000-01-01T03:04:05Z"), + ntz <= Datetime("2000-01-01T03:04:05Z"), + wa <= Datetime("2000-01-01T03:04:05Z"), + wd <= Datetime("2000-01-01T03:04:05Z"), + wt <= Datetime("2000-01-01T03:04:05Z"), + waz <= Datetime("2000-01-01T03:04:05Z"), + wdz <= Datetime("2000-01-01T03:04:05Z"), + wtz <= Datetime("2000-01-01T03:04:05Z"), + + na <= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + naz <= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nd <= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ndz <= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nt <= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ntz <= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wa <= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wd <= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wt <= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + waz <= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wdz <= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wtz <= TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + + na <= Timestamp("2000-01-01T03:04:05.678912Z"), + naz <= Timestamp("2000-01-01T03:04:05.678912Z"), + nd <= Timestamp("2000-01-01T03:04:05.678912Z"), + ndz <= Timestamp("2000-01-01T03:04:05.678912Z"), + nt <= Timestamp("2000-01-01T03:04:05.678912Z"), + ntz <= Timestamp("2000-01-01T03:04:05.678912Z"), + wa <= Timestamp("2000-01-01T03:04:05.678912Z"), + wd <= Timestamp("2000-01-01T03:04:05.678912Z"), + wt <= Timestamp("2000-01-01T03:04:05.678912Z"), + waz <= Timestamp("2000-01-01T03:04:05.678912Z"), + wdz <= Timestamp("2000-01-01T03:04:05.678912Z"), + wtz <= Timestamp("2000-01-01T03:04:05.678912Z"), + + na <= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + naz <= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nd <= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ndz <= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nt <= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ntz <= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wa <= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wd <= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wt <= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + waz <= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wdz <= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wtz <= TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") +FROM Dates; + +SELECT + na <= Date32("1900-01-01"), + naz <= Date32("1900-01-01"), + nd <= Date32("1900-01-01"), + ndz <= Date32("1900-01-01"), + nt <= Date32("1900-01-01"), + ntz <= Date32("1900-01-01"), + wa <= Date32("1900-01-01"), + wd <= Date32("1900-01-01"), + wt <= Date32("1900-01-01"), + waz <= Date32("1900-01-01"), + wdz <= Date32("1900-01-01"), + wtz <= Date32("1900-01-01"), + + na <= Datetime64("1900-01-01T03:04:05Z"), + naz <= Datetime64("1900-01-01T03:04:05Z"), + nd <= Datetime64("1900-01-01T03:04:05Z"), + ndz <= Datetime64("1900-01-01T03:04:05Z"), + nt <= Datetime64("1900-01-01T03:04:05Z"), + ntz <= Datetime64("1900-01-01T03:04:05Z"), + wa <= Datetime64("1900-01-01T03:04:05Z"), + wd <= Datetime64("1900-01-01T03:04:05Z"), + wt <= Datetime64("1900-01-01T03:04:05Z"), + waz <= Datetime64("1900-01-01T03:04:05Z"), + wdz <= Datetime64("1900-01-01T03:04:05Z"), + wtz <= Datetime64("1900-01-01T03:04:05Z"), + + na <= Timestamp64("1900-01-01T03:04:05.678912Z"), + naz <= Timestamp64("1900-01-01T03:04:05.678912Z"), + nd <= Timestamp64("1900-01-01T03:04:05.678912Z"), + ndz <= Timestamp64("1900-01-01T03:04:05.678912Z"), + nt <= Timestamp64("1900-01-01T03:04:05.678912Z"), + ntz <= Timestamp64("1900-01-01T03:04:05.678912Z"), + wa <= Timestamp64("1900-01-01T03:04:05.678912Z"), + wd <= Timestamp64("1900-01-01T03:04:05.678912Z"), + wt <= Timestamp64("1900-01-01T03:04:05.678912Z"), + waz <= Timestamp64("1900-01-01T03:04:05.678912Z"), + wdz <= Timestamp64("1900-01-01T03:04:05.678912Z"), + wtz <= Timestamp64("1900-01-01T03:04:05.678912Z"), + + na <= TzDate32("1900-01-01,Europe/Moscow"), + naz <= TzDate32("1900-01-01,Europe/Moscow"), + nd <= TzDate32("1900-01-01,Europe/Moscow"), + ndz <= TzDate32("1900-01-01,Europe/Moscow"), + nt <= TzDate32("1900-01-01,Europe/Moscow"), + ntz <= TzDate32("1900-01-01,Europe/Moscow"), + wa <= TzDate32("1900-01-01,Europe/Moscow"), + wd <= TzDate32("1900-01-01,Europe/Moscow"), + wt <= TzDate32("1900-01-01,Europe/Moscow"), + waz <= TzDate32("1900-01-01,Europe/Moscow"), + wdz <= TzDate32("1900-01-01,Europe/Moscow"), + wtz <= TzDate32("1900-01-01,Europe/Moscow"), + + na <= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + naz <= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nd <= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ndz <= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nt <= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ntz <= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wa <= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wd <= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wt <= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + waz <= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wdz <= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wtz <= TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + + na <= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + naz <= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nd <= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ndz <= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nt <= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ntz <= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wa <= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wd <= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wt <= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + waz <= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wdz <= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wtz <= TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + + ni <= Interval("P1D"), + wi <= Interval("P1D"), + ni <= Interval64("P1D"), + wi <= Interval64("P1D"), +FROM Dates; diff --git a/yt/yql/tests/sql/suites/blocks/date_less_scalar.cfg b/yt/yql/tests/sql/suites/blocks/date_less_scalar.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_less_scalar.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_less_scalar.sql b/yt/yql/tests/sql/suites/blocks/date_less_scalar.sql new file mode 100644 index 0000000000..d62f54d430 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_less_scalar.sql @@ -0,0 +1,332 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + Date("2000-01-01") < na, + Date("2000-01-01") < naz, + Date("2000-01-01") < nd, + Date("2000-01-01") < ndz, + Date("2000-01-01") < nt, + Date("2000-01-01") < ntz, + Date("2000-01-01") < wa, + Date("2000-01-01") < wd, + Date("2000-01-01") < wt, + Date("2000-01-01") < waz, + Date("2000-01-01") < wdz, + Date("2000-01-01") < wtz, + + TzDate("2000-01-01,Europe/Moscow") < na, + TzDate("2000-01-01,Europe/Moscow") < naz, + TzDate("2000-01-01,Europe/Moscow") < nd, + TzDate("2000-01-01,Europe/Moscow") < ndz, + TzDate("2000-01-01,Europe/Moscow") < nt, + TzDate("2000-01-01,Europe/Moscow") < ntz, + TzDate("2000-01-01,Europe/Moscow") < wa, + TzDate("2000-01-01,Europe/Moscow") < wd, + TzDate("2000-01-01,Europe/Moscow") < wt, + TzDate("2000-01-01,Europe/Moscow") < waz, + TzDate("2000-01-01,Europe/Moscow") < wdz, + TzDate("2000-01-01,Europe/Moscow") < wtz, + + Datetime("2000-01-01T03:04:05Z") < na, + Datetime("2000-01-01T03:04:05Z") < naz, + Datetime("2000-01-01T03:04:05Z") < nd, + Datetime("2000-01-01T03:04:05Z") < ndz, + Datetime("2000-01-01T03:04:05Z") < nt, + Datetime("2000-01-01T03:04:05Z") < ntz, + Datetime("2000-01-01T03:04:05Z") < wa, + Datetime("2000-01-01T03:04:05Z") < wd, + Datetime("2000-01-01T03:04:05Z") < wt, + Datetime("2000-01-01T03:04:05Z") < waz, + Datetime("2000-01-01T03:04:05Z") < wdz, + Datetime("2000-01-01T03:04:05Z") < wtz, + + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") < na, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") < naz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") < nd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") < ndz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") < nt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") < ntz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") < wa, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") < wd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") < wt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") < waz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") < wdz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") < wtz, + + Timestamp("2000-01-01T03:04:05.678912Z") < na, + Timestamp("2000-01-01T03:04:05.678912Z") < naz, + Timestamp("2000-01-01T03:04:05.678912Z") < nd, + Timestamp("2000-01-01T03:04:05.678912Z") < ndz, + Timestamp("2000-01-01T03:04:05.678912Z") < nt, + Timestamp("2000-01-01T03:04:05.678912Z") < ntz, + Timestamp("2000-01-01T03:04:05.678912Z") < wa, + Timestamp("2000-01-01T03:04:05.678912Z") < wd, + Timestamp("2000-01-01T03:04:05.678912Z") < wt, + Timestamp("2000-01-01T03:04:05.678912Z") < waz, + Timestamp("2000-01-01T03:04:05.678912Z") < wdz, + Timestamp("2000-01-01T03:04:05.678912Z") < wtz, + + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") < na, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") < naz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") < nd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") < ndz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") < nt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") < ntz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") < wa, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") < wd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") < wt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") < waz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") < wdz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") < wtz +FROM Dates; + +SELECT + Date32("1900-01-01") < na, + Date32("1900-01-01") < naz, + Date32("1900-01-01") < nd, + Date32("1900-01-01") < ndz, + Date32("1900-01-01") < nt, + Date32("1900-01-01") < ntz, + Date32("1900-01-01") < wa, + Date32("1900-01-01") < wd, + Date32("1900-01-01") < wt, + Date32("1900-01-01") < waz, + Date32("1900-01-01") < wdz, + Date32("1900-01-01") < wtz, + + Datetime64("1900-01-01T03:04:05Z") < na, + Datetime64("1900-01-01T03:04:05Z") < naz, + Datetime64("1900-01-01T03:04:05Z") < nd, + Datetime64("1900-01-01T03:04:05Z") < ndz, + Datetime64("1900-01-01T03:04:05Z") < nt, + Datetime64("1900-01-01T03:04:05Z") < ntz, + Datetime64("1900-01-01T03:04:05Z") < wa, + Datetime64("1900-01-01T03:04:05Z") < wd, + Datetime64("1900-01-01T03:04:05Z") < wt, + Datetime64("1900-01-01T03:04:05Z") < waz, + Datetime64("1900-01-01T03:04:05Z") < wdz, + Datetime64("1900-01-01T03:04:05Z") < wtz, + + Timestamp64("1900-01-01T03:04:05.678912Z") < na, + Timestamp64("1900-01-01T03:04:05.678912Z") < naz, + Timestamp64("1900-01-01T03:04:05.678912Z") < nd, + Timestamp64("1900-01-01T03:04:05.678912Z") < ndz, + Timestamp64("1900-01-01T03:04:05.678912Z") < nt, + Timestamp64("1900-01-01T03:04:05.678912Z") < ntz, + Timestamp64("1900-01-01T03:04:05.678912Z") < wa, + Timestamp64("1900-01-01T03:04:05.678912Z") < wd, + Timestamp64("1900-01-01T03:04:05.678912Z") < wt, + Timestamp64("1900-01-01T03:04:05.678912Z") < waz, + Timestamp64("1900-01-01T03:04:05.678912Z") < wdz, + Timestamp64("1900-01-01T03:04:05.678912Z") < wtz, + + TzDate32("1900-01-01,Europe/Moscow") < na, + TzDate32("1900-01-01,Europe/Moscow") < naz, + TzDate32("1900-01-01,Europe/Moscow") < nd, + TzDate32("1900-01-01,Europe/Moscow") < ndz, + TzDate32("1900-01-01,Europe/Moscow") < nt, + TzDate32("1900-01-01,Europe/Moscow") < ntz, + TzDate32("1900-01-01,Europe/Moscow") < wa, + TzDate32("1900-01-01,Europe/Moscow") < wd, + TzDate32("1900-01-01,Europe/Moscow") < wt, + TzDate32("1900-01-01,Europe/Moscow") < waz, + TzDate32("1900-01-01,Europe/Moscow") < wdz, + TzDate32("1900-01-01,Europe/Moscow") < wtz, + + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") < na, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") < naz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") < nd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") < ndz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") < nt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") < ntz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") < wa, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") < wd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") < wt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") < waz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") < wdz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") < wtz, + + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") < na, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") < naz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") < nd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") < ndz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") < nt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") < ntz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") < wa, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") < wd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") < wt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") < waz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") < wdz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") < wtz, + + Interval("P1D") < ni, + Interval("P1D") < wi, + Interval64("P1D") < ni, + Interval64("P1D") < wi, +FROM Dates; + +SELECT + na < Date("2000-01-01"), + naz < Date("2000-01-01"), + nd < Date("2000-01-01"), + ndz < Date("2000-01-01"), + nt < Date("2000-01-01"), + ntz < Date("2000-01-01"), + wa < Date("2000-01-01"), + wd < Date("2000-01-01"), + wt < Date("2000-01-01"), + waz < Date("2000-01-01"), + wdz < Date("2000-01-01"), + wtz < Date("2000-01-01"), + + na < TzDate("2000-01-01,Europe/Moscow"), + naz < TzDate("2000-01-01,Europe/Moscow"), + nd < TzDate("2000-01-01,Europe/Moscow"), + ndz < TzDate("2000-01-01,Europe/Moscow"), + nt < TzDate("2000-01-01,Europe/Moscow"), + ntz < TzDate("2000-01-01,Europe/Moscow"), + wa < TzDate("2000-01-01,Europe/Moscow"), + wd < TzDate("2000-01-01,Europe/Moscow"), + wt < TzDate("2000-01-01,Europe/Moscow"), + waz < TzDate("2000-01-01,Europe/Moscow"), + wdz < TzDate("2000-01-01,Europe/Moscow"), + wtz < TzDate("2000-01-01,Europe/Moscow"), + + na < Datetime("2000-01-01T03:04:05Z"), + naz < Datetime("2000-01-01T03:04:05Z"), + nd < Datetime("2000-01-01T03:04:05Z"), + ndz < Datetime("2000-01-01T03:04:05Z"), + nt < Datetime("2000-01-01T03:04:05Z"), + ntz < Datetime("2000-01-01T03:04:05Z"), + wa < Datetime("2000-01-01T03:04:05Z"), + wd < Datetime("2000-01-01T03:04:05Z"), + wt < Datetime("2000-01-01T03:04:05Z"), + waz < Datetime("2000-01-01T03:04:05Z"), + wdz < Datetime("2000-01-01T03:04:05Z"), + wtz < Datetime("2000-01-01T03:04:05Z"), + + na < TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + naz < TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nd < TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ndz < TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nt < TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ntz < TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wa < TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wd < TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wt < TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + waz < TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wdz < TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wtz < TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + + na < Timestamp("2000-01-01T03:04:05.678912Z"), + naz < Timestamp("2000-01-01T03:04:05.678912Z"), + nd < Timestamp("2000-01-01T03:04:05.678912Z"), + ndz < Timestamp("2000-01-01T03:04:05.678912Z"), + nt < Timestamp("2000-01-01T03:04:05.678912Z"), + ntz < Timestamp("2000-01-01T03:04:05.678912Z"), + wa < Timestamp("2000-01-01T03:04:05.678912Z"), + wd < Timestamp("2000-01-01T03:04:05.678912Z"), + wt < Timestamp("2000-01-01T03:04:05.678912Z"), + waz < Timestamp("2000-01-01T03:04:05.678912Z"), + wdz < Timestamp("2000-01-01T03:04:05.678912Z"), + wtz < Timestamp("2000-01-01T03:04:05.678912Z"), + + na < TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + naz < TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nd < TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ndz < TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nt < TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ntz < TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wa < TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wd < TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wt < TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + waz < TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wdz < TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wtz < TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") +FROM Dates; + +SELECT + na < Date32("1900-01-01"), + naz < Date32("1900-01-01"), + nd < Date32("1900-01-01"), + ndz < Date32("1900-01-01"), + nt < Date32("1900-01-01"), + ntz < Date32("1900-01-01"), + wa < Date32("1900-01-01"), + wd < Date32("1900-01-01"), + wt < Date32("1900-01-01"), + waz < Date32("1900-01-01"), + wdz < Date32("1900-01-01"), + wtz < Date32("1900-01-01"), + + na < Datetime64("1900-01-01T03:04:05Z"), + naz < Datetime64("1900-01-01T03:04:05Z"), + nd < Datetime64("1900-01-01T03:04:05Z"), + ndz < Datetime64("1900-01-01T03:04:05Z"), + nt < Datetime64("1900-01-01T03:04:05Z"), + ntz < Datetime64("1900-01-01T03:04:05Z"), + wa < Datetime64("1900-01-01T03:04:05Z"), + wd < Datetime64("1900-01-01T03:04:05Z"), + wt < Datetime64("1900-01-01T03:04:05Z"), + waz < Datetime64("1900-01-01T03:04:05Z"), + wdz < Datetime64("1900-01-01T03:04:05Z"), + wtz < Datetime64("1900-01-01T03:04:05Z"), + + na < Timestamp64("1900-01-01T03:04:05.678912Z"), + naz < Timestamp64("1900-01-01T03:04:05.678912Z"), + nd < Timestamp64("1900-01-01T03:04:05.678912Z"), + ndz < Timestamp64("1900-01-01T03:04:05.678912Z"), + nt < Timestamp64("1900-01-01T03:04:05.678912Z"), + ntz < Timestamp64("1900-01-01T03:04:05.678912Z"), + wa < Timestamp64("1900-01-01T03:04:05.678912Z"), + wd < Timestamp64("1900-01-01T03:04:05.678912Z"), + wt < Timestamp64("1900-01-01T03:04:05.678912Z"), + waz < Timestamp64("1900-01-01T03:04:05.678912Z"), + wdz < Timestamp64("1900-01-01T03:04:05.678912Z"), + wtz < Timestamp64("1900-01-01T03:04:05.678912Z"), + + na < TzDate32("1900-01-01,Europe/Moscow"), + naz < TzDate32("1900-01-01,Europe/Moscow"), + nd < TzDate32("1900-01-01,Europe/Moscow"), + ndz < TzDate32("1900-01-01,Europe/Moscow"), + nt < TzDate32("1900-01-01,Europe/Moscow"), + ntz < TzDate32("1900-01-01,Europe/Moscow"), + wa < TzDate32("1900-01-01,Europe/Moscow"), + wd < TzDate32("1900-01-01,Europe/Moscow"), + wt < TzDate32("1900-01-01,Europe/Moscow"), + waz < TzDate32("1900-01-01,Europe/Moscow"), + wdz < TzDate32("1900-01-01,Europe/Moscow"), + wtz < TzDate32("1900-01-01,Europe/Moscow"), + + na < TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + naz < TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nd < TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ndz < TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nt < TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ntz < TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wa < TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wd < TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wt < TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + waz < TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wdz < TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wtz < TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + + na < TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + naz < TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nd < TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ndz < TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nt < TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ntz < TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wa < TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wd < TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wt < TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + waz < TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wdz < TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wtz < TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + + ni < Interval("P1D"), + wi < Interval("P1D"), + ni < Interval64("P1D"), + wi < Interval64("P1D"), +FROM Dates; diff --git a/yt/yql/tests/sql/suites/blocks/date_not_equals.cfg b/yt/yql/tests/sql/suites/blocks/date_not_equals.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_not_equals.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_not_equals.sql b/yt/yql/tests/sql/suites/blocks/date_not_equals.sql new file mode 100644 index 0000000000..098dbd0d58 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_not_equals.sql @@ -0,0 +1,169 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + a.na != b.na, + a.na != b.naz, + a.na != b.nd, + a.na != b.ndz, + a.na != b.nt, + a.na != b.ntz, + a.na != b.wa, + a.na != b.wd, + a.na != b.wt, + a.na != b.waz, + a.na != b.wdz, + a.na != b.wtz, + + a.naz != b.na, + a.naz != b.naz, + a.naz != b.nd, + a.naz != b.ndz, + a.naz != b.nt, + a.naz != b.ntz, + a.naz != b.wa, + a.naz != b.wd, + a.naz != b.wt, + a.naz != b.waz, + a.naz != b.wdz, + a.naz != b.wtz, + + a.nd != b.na, + a.nd != b.naz, + a.nd != b.nd, + a.nd != b.ndz, + a.nd != b.nt, + a.nd != b.ntz, + a.nd != b.wa, + a.nd != b.wd, + a.nd != b.wt, + a.nd != b.waz, + a.nd != b.wdz, + a.nd != b.wtz, + + a.ndz != b.na, + a.ndz != b.naz, + a.ndz != b.nd, + a.ndz != b.ndz, + a.ndz != b.nt, + a.ndz != b.ntz, + a.ndz != b.wa, + a.ndz != b.wd, + a.ndz != b.wt, + a.ndz != b.waz, + a.ndz != b.wdz, + a.ndz != b.wtz, + + a.nt != b.na, + a.nt != b.naz, + a.nt != b.nd, + a.nt != b.ndz, + a.nt != b.nt, + a.nt != b.ntz, + a.nt != b.wa, + a.nt != b.wd, + a.nt != b.wt, + a.nt != b.waz, + a.nt != b.wdz, + a.nt != b.wtz, + + a.ntz != b.na, + a.ntz != b.naz, + a.ntz != b.nd, + a.ntz != b.ndz, + a.ntz != b.nt, + a.ntz != b.ntz, + a.ntz != b.wa, + a.ntz != b.wd, + a.ntz != b.wt, + a.ntz != b.waz, + a.ntz != b.wdz, + a.ntz != b.wtz, + + a.ni != b.ni, + a.ni != b.wi, + a.wi != b.ni, + a.wi != b.wi + +FROM Dates as a CROSS JOIN Dates as b; + +SELECT + a.wa != b.na, + a.wa != b.naz, + a.wa != b.nd, + a.wa != b.ndz, + a.wa != b.nt, + a.wa != b.ntz, + a.wa != b.wa, + a.wa != b.wd, + a.wa != b.wt, + a.wa != b.waz, + a.wa != b.wdz, + a.wa != b.wtz, + + a.wd != b.na, + a.wd != b.naz, + a.wd != b.nd, + a.wd != b.ndz, + a.wd != b.nt, + a.wd != b.ntz, + a.wd != b.wa, + a.wd != b.wd, + a.wd != b.wt, + a.wd != b.waz, + a.wd != b.wdz, + a.wd != b.wtz, + + a.wt != b.na, + a.wt != b.naz, + a.wt != b.nd, + a.wt != b.ndz, + a.wt != b.nt, + a.wt != b.ntz, + a.wt != b.wa, + a.wt != b.wd, + a.wt != b.wt, + a.wt != b.waz, + a.wt != b.wdz, + a.wt != b.wtz, + + a.waz != b.na, + a.waz != b.naz, + a.waz != b.nd, + a.waz != b.ndz, + a.waz != b.nt, + a.waz != b.ntz, + a.waz != b.wa, + a.waz != b.wd, + a.waz != b.wt, + a.waz != b.waz, + a.waz != b.wdz, + a.waz != b.wtz, + + a.wdz != b.na, + a.wdz != b.naz, + a.wdz != b.nd, + a.wdz != b.ndz, + a.wdz != b.nt, + a.wdz != b.ntz, + a.wdz != b.wa, + a.wdz != b.wd, + a.wdz != b.wt, + a.wdz != b.waz, + a.wdz != b.wdz, + a.wdz != b.wtz, + + a.wtz != b.na, + a.wtz != b.naz, + a.wtz != b.nd, + a.wtz != b.ndz, + a.wtz != b.nt, + a.wtz != b.ntz, + a.wtz != b.wa, + a.wtz != b.wd, + a.wtz != b.wt, + a.wtz != b.waz, + a.wtz != b.wdz, + a.wtz != b.wtz + +FROM Dates as a CROSS JOIN Dates as b; diff --git a/yt/yql/tests/sql/suites/blocks/date_not_equals_scalar.cfg b/yt/yql/tests/sql/suites/blocks/date_not_equals_scalar.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_not_equals_scalar.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_not_equals_scalar.sql b/yt/yql/tests/sql/suites/blocks/date_not_equals_scalar.sql new file mode 100644 index 0000000000..803fcc49ee --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_not_equals_scalar.sql @@ -0,0 +1,332 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + Date("2000-01-01") != na, + Date("2000-01-01") != naz, + Date("2000-01-01") != nd, + Date("2000-01-01") != ndz, + Date("2000-01-01") != nt, + Date("2000-01-01") != ntz, + Date("2000-01-01") != wa, + Date("2000-01-01") != wd, + Date("2000-01-01") != wt, + Date("2000-01-01") != waz, + Date("2000-01-01") != wdz, + Date("2000-01-01") != wtz, + + TzDate("2000-01-01,Europe/Moscow") != na, + TzDate("2000-01-01,Europe/Moscow") != naz, + TzDate("2000-01-01,Europe/Moscow") != nd, + TzDate("2000-01-01,Europe/Moscow") != ndz, + TzDate("2000-01-01,Europe/Moscow") != nt, + TzDate("2000-01-01,Europe/Moscow") != ntz, + TzDate("2000-01-01,Europe/Moscow") != wa, + TzDate("2000-01-01,Europe/Moscow") != wd, + TzDate("2000-01-01,Europe/Moscow") != wt, + TzDate("2000-01-01,Europe/Moscow") != waz, + TzDate("2000-01-01,Europe/Moscow") != wdz, + TzDate("2000-01-01,Europe/Moscow") != wtz, + + Datetime("2000-01-01T03:04:05Z") != na, + Datetime("2000-01-01T03:04:05Z") != naz, + Datetime("2000-01-01T03:04:05Z") != nd, + Datetime("2000-01-01T03:04:05Z") != ndz, + Datetime("2000-01-01T03:04:05Z") != nt, + Datetime("2000-01-01T03:04:05Z") != ntz, + Datetime("2000-01-01T03:04:05Z") != wa, + Datetime("2000-01-01T03:04:05Z") != wd, + Datetime("2000-01-01T03:04:05Z") != wt, + Datetime("2000-01-01T03:04:05Z") != waz, + Datetime("2000-01-01T03:04:05Z") != wdz, + Datetime("2000-01-01T03:04:05Z") != wtz, + + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") != na, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") != naz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") != nd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") != ndz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") != nt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") != ntz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") != wa, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") != wd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") != wt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") != waz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") != wdz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") != wtz, + + Timestamp("2000-01-01T03:04:05.678912Z") != na, + Timestamp("2000-01-01T03:04:05.678912Z") != naz, + Timestamp("2000-01-01T03:04:05.678912Z") != nd, + Timestamp("2000-01-01T03:04:05.678912Z") != ndz, + Timestamp("2000-01-01T03:04:05.678912Z") != nt, + Timestamp("2000-01-01T03:04:05.678912Z") != ntz, + Timestamp("2000-01-01T03:04:05.678912Z") != wa, + Timestamp("2000-01-01T03:04:05.678912Z") != wd, + Timestamp("2000-01-01T03:04:05.678912Z") != wt, + Timestamp("2000-01-01T03:04:05.678912Z") != waz, + Timestamp("2000-01-01T03:04:05.678912Z") != wdz, + Timestamp("2000-01-01T03:04:05.678912Z") != wtz, + + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") != na, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") != naz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") != nd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") != ndz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") != nt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") != ntz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") != wa, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") != wd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") != wt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") != waz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") != wdz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") != wtz +FROM Dates; + +SELECT + Date32("1900-01-01") != na, + Date32("1900-01-01") != naz, + Date32("1900-01-01") != nd, + Date32("1900-01-01") != ndz, + Date32("1900-01-01") != nt, + Date32("1900-01-01") != ntz, + Date32("1900-01-01") != wa, + Date32("1900-01-01") != wd, + Date32("1900-01-01") != wt, + Date32("1900-01-01") != waz, + Date32("1900-01-01") != wdz, + Date32("1900-01-01") != wtz, + + Datetime64("1900-01-01T03:04:05Z") != na, + Datetime64("1900-01-01T03:04:05Z") != naz, + Datetime64("1900-01-01T03:04:05Z") != nd, + Datetime64("1900-01-01T03:04:05Z") != ndz, + Datetime64("1900-01-01T03:04:05Z") != nt, + Datetime64("1900-01-01T03:04:05Z") != ntz, + Datetime64("1900-01-01T03:04:05Z") != wa, + Datetime64("1900-01-01T03:04:05Z") != wd, + Datetime64("1900-01-01T03:04:05Z") != wt, + Datetime64("1900-01-01T03:04:05Z") != waz, + Datetime64("1900-01-01T03:04:05Z") != wdz, + Datetime64("1900-01-01T03:04:05Z") != wtz, + + Timestamp64("1900-01-01T03:04:05.678912Z") != na, + Timestamp64("1900-01-01T03:04:05.678912Z") != naz, + Timestamp64("1900-01-01T03:04:05.678912Z") != nd, + Timestamp64("1900-01-01T03:04:05.678912Z") != ndz, + Timestamp64("1900-01-01T03:04:05.678912Z") != nt, + Timestamp64("1900-01-01T03:04:05.678912Z") != ntz, + Timestamp64("1900-01-01T03:04:05.678912Z") != wa, + Timestamp64("1900-01-01T03:04:05.678912Z") != wd, + Timestamp64("1900-01-01T03:04:05.678912Z") != wt, + Timestamp64("1900-01-01T03:04:05.678912Z") != waz, + Timestamp64("1900-01-01T03:04:05.678912Z") != wdz, + Timestamp64("1900-01-01T03:04:05.678912Z") != wtz, + + TzDate32("1900-01-01,Europe/Moscow") != na, + TzDate32("1900-01-01,Europe/Moscow") != naz, + TzDate32("1900-01-01,Europe/Moscow") != nd, + TzDate32("1900-01-01,Europe/Moscow") != ndz, + TzDate32("1900-01-01,Europe/Moscow") != nt, + TzDate32("1900-01-01,Europe/Moscow") != ntz, + TzDate32("1900-01-01,Europe/Moscow") != wa, + TzDate32("1900-01-01,Europe/Moscow") != wd, + TzDate32("1900-01-01,Europe/Moscow") != wt, + TzDate32("1900-01-01,Europe/Moscow") != waz, + TzDate32("1900-01-01,Europe/Moscow") != wdz, + TzDate32("1900-01-01,Europe/Moscow") != wtz, + + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") != na, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") != naz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") != nd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") != ndz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") != nt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") != ntz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") != wa, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") != wd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") != wt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") != waz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") != wdz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") != wtz, + + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") != na, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") != naz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") != nd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") != ndz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") != nt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") != ntz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") != wa, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") != wd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") != wt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") != waz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") != wdz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") != wtz, + + Interval("P1D") != ni, + Interval("P1D") != wi, + Interval64("P1D") != ni, + Interval64("P1D") != wi, +FROM Dates; + +SELECT + na != Date("2000-01-01"), + naz != Date("2000-01-01"), + nd != Date("2000-01-01"), + ndz != Date("2000-01-01"), + nt != Date("2000-01-01"), + ntz != Date("2000-01-01"), + wa != Date("2000-01-01"), + wd != Date("2000-01-01"), + wt != Date("2000-01-01"), + waz != Date("2000-01-01"), + wdz != Date("2000-01-01"), + wtz != Date("2000-01-01"), + + na != TzDate("2000-01-01,Europe/Moscow"), + naz != TzDate("2000-01-01,Europe/Moscow"), + nd != TzDate("2000-01-01,Europe/Moscow"), + ndz != TzDate("2000-01-01,Europe/Moscow"), + nt != TzDate("2000-01-01,Europe/Moscow"), + ntz != TzDate("2000-01-01,Europe/Moscow"), + wa != TzDate("2000-01-01,Europe/Moscow"), + wd != TzDate("2000-01-01,Europe/Moscow"), + wt != TzDate("2000-01-01,Europe/Moscow"), + waz != TzDate("2000-01-01,Europe/Moscow"), + wdz != TzDate("2000-01-01,Europe/Moscow"), + wtz != TzDate("2000-01-01,Europe/Moscow"), + + na != Datetime("2000-01-01T03:04:05Z"), + naz != Datetime("2000-01-01T03:04:05Z"), + nd != Datetime("2000-01-01T03:04:05Z"), + ndz != Datetime("2000-01-01T03:04:05Z"), + nt != Datetime("2000-01-01T03:04:05Z"), + ntz != Datetime("2000-01-01T03:04:05Z"), + wa != Datetime("2000-01-01T03:04:05Z"), + wd != Datetime("2000-01-01T03:04:05Z"), + wt != Datetime("2000-01-01T03:04:05Z"), + waz != Datetime("2000-01-01T03:04:05Z"), + wdz != Datetime("2000-01-01T03:04:05Z"), + wtz != Datetime("2000-01-01T03:04:05Z"), + + na != TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + naz != TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nd != TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ndz != TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nt != TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ntz != TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wa != TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wd != TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wt != TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + waz != TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wdz != TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wtz != TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + + na != Timestamp("2000-01-01T03:04:05.678912Z"), + naz != Timestamp("2000-01-01T03:04:05.678912Z"), + nd != Timestamp("2000-01-01T03:04:05.678912Z"), + ndz != Timestamp("2000-01-01T03:04:05.678912Z"), + nt != Timestamp("2000-01-01T03:04:05.678912Z"), + ntz != Timestamp("2000-01-01T03:04:05.678912Z"), + wa != Timestamp("2000-01-01T03:04:05.678912Z"), + wd != Timestamp("2000-01-01T03:04:05.678912Z"), + wt != Timestamp("2000-01-01T03:04:05.678912Z"), + waz != Timestamp("2000-01-01T03:04:05.678912Z"), + wdz != Timestamp("2000-01-01T03:04:05.678912Z"), + wtz != Timestamp("2000-01-01T03:04:05.678912Z"), + + na != TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + naz != TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nd != TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ndz != TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nt != TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ntz != TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wa != TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wd != TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wt != TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + waz != TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wdz != TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wtz != TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") +FROM Dates; + +SELECT + na != Date32("1900-01-01"), + naz != Date32("1900-01-01"), + nd != Date32("1900-01-01"), + ndz != Date32("1900-01-01"), + nt != Date32("1900-01-01"), + ntz != Date32("1900-01-01"), + wa != Date32("1900-01-01"), + wd != Date32("1900-01-01"), + wt != Date32("1900-01-01"), + waz != Date32("1900-01-01"), + wdz != Date32("1900-01-01"), + wtz != Date32("1900-01-01"), + + na != Datetime64("1900-01-01T03:04:05Z"), + naz != Datetime64("1900-01-01T03:04:05Z"), + nd != Datetime64("1900-01-01T03:04:05Z"), + ndz != Datetime64("1900-01-01T03:04:05Z"), + nt != Datetime64("1900-01-01T03:04:05Z"), + ntz != Datetime64("1900-01-01T03:04:05Z"), + wa != Datetime64("1900-01-01T03:04:05Z"), + wd != Datetime64("1900-01-01T03:04:05Z"), + wt != Datetime64("1900-01-01T03:04:05Z"), + waz != Datetime64("1900-01-01T03:04:05Z"), + wdz != Datetime64("1900-01-01T03:04:05Z"), + wtz != Datetime64("1900-01-01T03:04:05Z"), + + na != Timestamp64("1900-01-01T03:04:05.678912Z"), + naz != Timestamp64("1900-01-01T03:04:05.678912Z"), + nd != Timestamp64("1900-01-01T03:04:05.678912Z"), + ndz != Timestamp64("1900-01-01T03:04:05.678912Z"), + nt != Timestamp64("1900-01-01T03:04:05.678912Z"), + ntz != Timestamp64("1900-01-01T03:04:05.678912Z"), + wa != Timestamp64("1900-01-01T03:04:05.678912Z"), + wd != Timestamp64("1900-01-01T03:04:05.678912Z"), + wt != Timestamp64("1900-01-01T03:04:05.678912Z"), + waz != Timestamp64("1900-01-01T03:04:05.678912Z"), + wdz != Timestamp64("1900-01-01T03:04:05.678912Z"), + wtz != Timestamp64("1900-01-01T03:04:05.678912Z"), + + na != TzDate32("1900-01-01,Europe/Moscow"), + naz != TzDate32("1900-01-01,Europe/Moscow"), + nd != TzDate32("1900-01-01,Europe/Moscow"), + ndz != TzDate32("1900-01-01,Europe/Moscow"), + nt != TzDate32("1900-01-01,Europe/Moscow"), + ntz != TzDate32("1900-01-01,Europe/Moscow"), + wa != TzDate32("1900-01-01,Europe/Moscow"), + wd != TzDate32("1900-01-01,Europe/Moscow"), + wt != TzDate32("1900-01-01,Europe/Moscow"), + waz != TzDate32("1900-01-01,Europe/Moscow"), + wdz != TzDate32("1900-01-01,Europe/Moscow"), + wtz != TzDate32("1900-01-01,Europe/Moscow"), + + na != TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + naz != TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nd != TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ndz != TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nt != TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ntz != TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wa != TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wd != TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wt != TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + waz != TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wdz != TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wtz != TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + + na != TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + naz != TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nd != TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ndz != TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nt != TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ntz != TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wa != TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wd != TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wt != TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + waz != TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wdz != TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wtz != TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + + ni != Interval("P1D"), + wi != Interval("P1D"), + ni != Interval64("P1D"), + wi != Interval64("P1D"), +FROM Dates; diff --git a/yt/yql/tests/sql/suites/blocks/date_sub.cfg b/yt/yql/tests/sql/suites/blocks/date_sub.cfg new file mode 100644 index 0000000000..8d2d2a19fc --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_sub.cfg @@ -0,0 +1 @@ +in Dates dates.txt diff --git a/yt/yql/tests/sql/suites/blocks/date_sub.sql b/yt/yql/tests/sql/suites/blocks/date_sub.sql new file mode 100644 index 0000000000..ec839a4199 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_sub.sql @@ -0,0 +1,165 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + a.na - b.na, + a.na - b.naz, + a.na - b.nd, + a.na - b.ndz, + a.na - b.nt, + a.na - b.ntz, + a.na - b.wa, + a.na - b.wd, + a.na - b.wt, + a.na - b.waz, + a.na - b.wdz, + a.na - b.wtz, + + a.naz - b.na, + a.naz - b.naz, + a.naz - b.nd, + a.naz - b.ndz, + a.naz - b.nt, + a.naz - b.ntz, + a.naz - b.wa, + a.naz - b.wd, + a.naz - b.wt, + a.naz - b.waz, + a.naz - b.wdz, + a.naz - b.wtz, + + a.nd - b.na, + a.nd - b.naz, + a.nd - b.nd, + a.nd - b.ndz, + a.nd - b.nt, + a.nd - b.ntz, + a.nd - b.wa, + a.nd - b.wd, + a.nd - b.wt, + a.nd - b.waz, + a.nd - b.wdz, + a.nd - b.wtz, + + a.ndz - b.na, + a.ndz - b.naz, + a.ndz - b.nd, + a.ndz - b.ndz, + a.ndz - b.nt, + a.ndz - b.ntz, + a.ndz - b.wa, + a.ndz - b.wd, + a.ndz - b.wt, + a.ndz - b.waz, + a.ndz - b.wdz, + a.ndz - b.wtz, + + a.nt - b.na, + a.nt - b.naz, + a.nt - b.nd, + a.nt - b.ndz, + a.nt - b.nt, + a.nt - b.ntz, + a.nt - b.wa, + a.nt - b.wd, + a.nt - b.wt, + a.nt - b.waz, + a.nt - b.wdz, + a.nt - b.wtz, + + a.ntz - b.na, + a.ntz - b.naz, + a.ntz - b.nd, + a.ntz - b.ndz, + a.ntz - b.nt, + a.ntz - b.ntz, + a.ntz - b.wa, + a.ntz - b.wd, + a.ntz - b.wt, + a.ntz - b.waz, + a.ntz - b.wdz, + a.ntz - b.wtz + +FROM Dates as a CROSS JOIN Dates as b; + +SELECT + a.wa - b.na, + a.wa - b.naz, + a.wa - b.nd, + a.wa - b.ndz, + a.wa - b.nt, + a.wa - b.ntz, + a.wa - b.wa, + a.wa - b.wd, + a.wa - b.wt, + a.wa - b.waz, + a.wa - b.wdz, + a.wa - b.wtz, + + a.wd - b.na, + a.wd - b.naz, + a.wd - b.nd, + a.wd - b.ndz, + a.wd - b.nt, + a.wd - b.ntz, + a.wd - b.wa, + a.wd - b.wd, + a.wd - b.wt, + a.wd - b.waz, + a.wd - b.wdz, + a.wd - b.wtz, + + a.wt - b.na, + a.wt - b.naz, + a.wt - b.nd, + a.wt - b.ndz, + a.wt - b.nt, + a.wt - b.ntz, + a.wt - b.wa, + a.wt - b.wd, + a.wt - b.wt, + a.wt - b.waz, + a.wt - b.wdz, + a.wt - b.wtz, + + a.waz - b.na, + a.waz - b.naz, + a.waz - b.nd, + a.waz - b.ndz, + a.waz - b.nt, + a.waz - b.ntz, + a.waz - b.wa, + a.waz - b.wd, + a.waz - b.wt, + a.waz - b.waz, + a.waz - b.wdz, + a.waz - b.wtz, + + a.wdz - b.na, + a.wdz - b.naz, + a.wdz - b.nd, + a.wdz - b.ndz, + a.wdz - b.nt, + a.wdz - b.ntz, + a.wdz - b.wa, + a.wdz - b.wd, + a.wdz - b.wt, + a.wdz - b.waz, + a.wdz - b.wdz, + a.wdz - b.wtz, + + a.wtz - b.na, + a.wtz - b.naz, + a.wtz - b.nd, + a.wtz - b.ndz, + a.wtz - b.nt, + a.wtz - b.ntz, + a.wtz - b.wa, + a.wtz - b.wd, + a.wtz - b.wt, + a.wtz - b.waz, + a.wtz - b.wdz, + a.wtz - b.wtz, + +FROM Dates as a CROSS JOIN Dates as b; + diff --git a/yt/yql/tests/sql/suites/blocks/date_sub_interval.cfg b/yt/yql/tests/sql/suites/blocks/date_sub_interval.cfg new file mode 100644 index 0000000000..8d2d2a19fc --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_sub_interval.cfg @@ -0,0 +1 @@ +in Dates dates.txt diff --git a/yt/yql/tests/sql/suites/blocks/date_sub_interval.sql b/yt/yql/tests/sql/suites/blocks/date_sub_interval.sql new file mode 100644 index 0000000000..9e9c6ce95b --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_sub_interval.sql @@ -0,0 +1,31 @@ +USE plato; + +SELECT + a.na - b.ni, + a.na - b.wi, + a.naz - b.ni, + a.naz - b.wi, + a.nd - b.ni, + a.nd - b.wi, + a.ndz - b.ni, + a.ndz - b.wi, + a.nt - b.ni, + a.nt - b.wi, + a.ntz - b.ni, + a.ntz - b.wi, + + a.wa - b.ni, + a.wa - b.wi, + a.waz - b.ni, + a.waz - b.wi, + a.wd - b.ni, + a.wd - b.wi, + a.wdz - b.ni, + a.wdz - b.wi, + a.wt - b.ni, + a.wt - b.wi, + a.wtz - b.ni, + a.wtz - b.wi + +FROM Dates as a CROSS JOIN Dates as b + diff --git a/yt/yql/tests/sql/suites/blocks/date_sub_interval_scalar.cfg b/yt/yql/tests/sql/suites/blocks/date_sub_interval_scalar.cfg new file mode 100644 index 0000000000..8d2d2a19fc --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_sub_interval_scalar.cfg @@ -0,0 +1 @@ +in Dates dates.txt diff --git a/yt/yql/tests/sql/suites/blocks/date_sub_interval_scalar.sql b/yt/yql/tests/sql/suites/blocks/date_sub_interval_scalar.sql new file mode 100644 index 0000000000..8b5aee81fa --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_sub_interval_scalar.sql @@ -0,0 +1,58 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + Date("2000-01-01") - ni, + Date("2000-01-01") - wi, + TzDate("2000-01-01,Europe/Moscow") - ni, + TzDate("2000-01-01,Europe/Moscow") - wi, + Datetime("2000-01-01T03:04:05Z") - ni, + Datetime("2000-01-01T03:04:05Z") - wi, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - ni, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - wi, + Timestamp("2000-01-01T03:04:05.678912Z") - ni, + Timestamp("2000-01-01T03:04:05.678912Z") - wi, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - ni, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - wi, + Date32("1900-01-01") - ni, + Date32("1900-01-01") - wi, + Datetime64("1900-01-01T03:04:05Z") - ni, + Datetime64("1900-01-01T03:04:05Z") - wi, + Timestamp64("1900-01-01T03:04:05.678912Z") - ni, + Timestamp64("1900-01-01T03:04:05.678912Z") - wi, + TzDate32("1900-01-01,Europe/Moscow") - ni, + TzDate32("1900-01-01,Europe/Moscow") - wi, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - ni, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - wi, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - ni, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - wi +FROM Dates; + +SELECT + na - Interval("P1D"), + na - Interval64("P1D"), + naz - Interval("P1D"), + naz - Interval64("P1D"), + nd - Interval("P1D"), + nd - Interval64("P1D"), + ndz - Interval("P1D"), + ndz - Interval64("P1D"), + nt - Interval("P1D"), + nt - Interval64("P1D"), + ntz - Interval("P1D"), + ntz - Interval64("P1D"), + wa - Interval("P1D"), + wa - Interval64("P1D"), + wd - Interval("P1D"), + wd - Interval64("P1D"), + wt - Interval("P1D"), + wt - Interval64("P1D"), + waz - Interval("P1D"), + waz - Interval64("P1D"), + wdz - Interval("P1D"), + wdz - Interval64("P1D"), + wtz - Interval("P1D"), + wtz - Interval64("P1D") +FROM Dates; + + diff --git a/yt/yql/tests/sql/suites/blocks/date_sub_scalar.cfg b/yt/yql/tests/sql/suites/blocks/date_sub_scalar.cfg new file mode 100644 index 0000000000..8d2d2a19fc --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_sub_scalar.cfg @@ -0,0 +1 @@ +in Dates dates.txt diff --git a/yt/yql/tests/sql/suites/blocks/date_sub_scalar.sql b/yt/yql/tests/sql/suites/blocks/date_sub_scalar.sql new file mode 100644 index 0000000000..efe5c86006 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_sub_scalar.sql @@ -0,0 +1,326 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + Date("2000-01-01") - na, + Date("2000-01-01") - naz, + Date("2000-01-01") - nd, + Date("2000-01-01") - ndz, + Date("2000-01-01") - nt, + Date("2000-01-01") - ntz, + Date("2000-01-01") - wa, + Date("2000-01-01") - wd, + Date("2000-01-01") - wt, + Date("2000-01-01") - waz, + Date("2000-01-01") - wdz, + Date("2000-01-01") - wtz, + + TzDate("2000-01-01,Europe/Moscow") - na, + TzDate("2000-01-01,Europe/Moscow") - naz, + TzDate("2000-01-01,Europe/Moscow") - nd, + TzDate("2000-01-01,Europe/Moscow") - ndz, + TzDate("2000-01-01,Europe/Moscow") - nt, + TzDate("2000-01-01,Europe/Moscow") - ntz, + TzDate("2000-01-01,Europe/Moscow") - wa, + TzDate("2000-01-01,Europe/Moscow") - wd, + TzDate("2000-01-01,Europe/Moscow") - wt, + TzDate("2000-01-01,Europe/Moscow") - waz, + TzDate("2000-01-01,Europe/Moscow") - wdz, + TzDate("2000-01-01,Europe/Moscow") - wtz, + + Datetime("2000-01-01T03:04:05Z") - na, + Datetime("2000-01-01T03:04:05Z") - naz, + Datetime("2000-01-01T03:04:05Z") - nd, + Datetime("2000-01-01T03:04:05Z") - ndz, + Datetime("2000-01-01T03:04:05Z") - nt, + Datetime("2000-01-01T03:04:05Z") - ntz, + Datetime("2000-01-01T03:04:05Z") - wa, + Datetime("2000-01-01T03:04:05Z") - wd, + Datetime("2000-01-01T03:04:05Z") - wt, + Datetime("2000-01-01T03:04:05Z") - waz, + Datetime("2000-01-01T03:04:05Z") - wdz, + Datetime("2000-01-01T03:04:05Z") - wtz, + + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - na, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - naz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - nd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - ndz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - nt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - ntz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - wa, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - wd, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - wt, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - waz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - wdz, + TzDatetime("2000-01-01T03:04:05,Europe/Moscow") - wtz, + + Timestamp("2000-01-01T03:04:05.678912Z") - na, + Timestamp("2000-01-01T03:04:05.678912Z") - naz, + Timestamp("2000-01-01T03:04:05.678912Z") - nd, + Timestamp("2000-01-01T03:04:05.678912Z") - ndz, + Timestamp("2000-01-01T03:04:05.678912Z") - nt, + Timestamp("2000-01-01T03:04:05.678912Z") - ntz, + Timestamp("2000-01-01T03:04:05.678912Z") - wa, + Timestamp("2000-01-01T03:04:05.678912Z") - wd, + Timestamp("2000-01-01T03:04:05.678912Z") - wt, + Timestamp("2000-01-01T03:04:05.678912Z") - waz, + Timestamp("2000-01-01T03:04:05.678912Z") - wdz, + Timestamp("2000-01-01T03:04:05.678912Z") - wtz, + + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - na, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - naz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - nd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - ndz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - nt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - ntz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - wa, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - wd, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - wt, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - waz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - wdz, + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow") - wtz, + +FROM Dates; + +SELECT + Date32("1900-01-01") - na, + Date32("1900-01-01") - naz, + Date32("1900-01-01") - nd, + Date32("1900-01-01") - ndz, + Date32("1900-01-01") - nt, + Date32("1900-01-01") - ntz, + Date32("1900-01-01") - wa, + Date32("1900-01-01") - wd, + Date32("1900-01-01") - wt, + Date32("1900-01-01") - waz, + Date32("1900-01-01") - wdz, + Date32("1900-01-01") - wtz, + + Datetime64("1900-01-01T03:04:05Z") - na, + Datetime64("1900-01-01T03:04:05Z") - naz, + Datetime64("1900-01-01T03:04:05Z") - nd, + Datetime64("1900-01-01T03:04:05Z") - ndz, + Datetime64("1900-01-01T03:04:05Z") - nt, + Datetime64("1900-01-01T03:04:05Z") - ntz, + Datetime64("1900-01-01T03:04:05Z") - wa, + Datetime64("1900-01-01T03:04:05Z") - wd, + Datetime64("1900-01-01T03:04:05Z") - wt, + Datetime64("1900-01-01T03:04:05Z") - waz, + Datetime64("1900-01-01T03:04:05Z") - wdz, + Datetime64("1900-01-01T03:04:05Z") - wtz, + + Timestamp64("1900-01-01T03:04:05.678912Z") - na, + Timestamp64("1900-01-01T03:04:05.678912Z") - naz, + Timestamp64("1900-01-01T03:04:05.678912Z") - nd, + Timestamp64("1900-01-01T03:04:05.678912Z") - ndz, + Timestamp64("1900-01-01T03:04:05.678912Z") - nt, + Timestamp64("1900-01-01T03:04:05.678912Z") - ntz, + Timestamp64("1900-01-01T03:04:05.678912Z") - wa, + Timestamp64("1900-01-01T03:04:05.678912Z") - wd, + Timestamp64("1900-01-01T03:04:05.678912Z") - wt, + Timestamp64("1900-01-01T03:04:05.678912Z") - waz, + Timestamp64("1900-01-01T03:04:05.678912Z") - wdz, + Timestamp64("1900-01-01T03:04:05.678912Z") - wtz, + + TzDate32("1900-01-01,Europe/Moscow") - na, + TzDate32("1900-01-01,Europe/Moscow") - naz, + TzDate32("1900-01-01,Europe/Moscow") - nd, + TzDate32("1900-01-01,Europe/Moscow") - ndz, + TzDate32("1900-01-01,Europe/Moscow") - nt, + TzDate32("1900-01-01,Europe/Moscow") - ntz, + TzDate32("1900-01-01,Europe/Moscow") - wa, + TzDate32("1900-01-01,Europe/Moscow") - wd, + TzDate32("1900-01-01,Europe/Moscow") - wt, + TzDate32("1900-01-01,Europe/Moscow") - waz, + TzDate32("1900-01-01,Europe/Moscow") - wdz, + TzDate32("1900-01-01,Europe/Moscow") - wtz, + + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - na, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - naz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - nd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - ndz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - nt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - ntz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - wa, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - wd, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - wt, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - waz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - wdz, + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow") - wtz, + + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - na, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - naz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - nd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - ndz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - nt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - ntz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - wa, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - wd, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - wt, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - waz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - wdz, + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") - wtz + +FROM Dates; + +SELECT + na - Date("2000-01-01"), + naz - Date("2000-01-01"), + nd - Date("2000-01-01"), + ndz - Date("2000-01-01"), + nt - Date("2000-01-01"), + ntz - Date("2000-01-01"), + wa - Date("2000-01-01"), + wd - Date("2000-01-01"), + wt - Date("2000-01-01"), + waz - Date("2000-01-01"), + wdz - Date("2000-01-01"), + wtz - Date("2000-01-01"), + + na - TzDate("2000-01-01,Europe/Moscow"), + naz - TzDate("2000-01-01,Europe/Moscow"), + nd - TzDate("2000-01-01,Europe/Moscow"), + ndz - TzDate("2000-01-01,Europe/Moscow"), + nt - TzDate("2000-01-01,Europe/Moscow"), + ntz - TzDate("2000-01-01,Europe/Moscow"), + wa - TzDate("2000-01-01,Europe/Moscow"), + wd - TzDate("2000-01-01,Europe/Moscow"), + wt - TzDate("2000-01-01,Europe/Moscow"), + waz - TzDate("2000-01-01,Europe/Moscow"), + wdz - TzDate("2000-01-01,Europe/Moscow"), + wtz - TzDate("2000-01-01,Europe/Moscow"), + + na - Datetime("2000-01-01T03:04:05Z"), + naz - Datetime("2000-01-01T03:04:05Z"), + nd - Datetime("2000-01-01T03:04:05Z"), + ndz - Datetime("2000-01-01T03:04:05Z"), + nt - Datetime("2000-01-01T03:04:05Z"), + ntz - Datetime("2000-01-01T03:04:05Z"), + wa - Datetime("2000-01-01T03:04:05Z"), + wd - Datetime("2000-01-01T03:04:05Z"), + wt - Datetime("2000-01-01T03:04:05Z"), + waz - Datetime("2000-01-01T03:04:05Z"), + wdz - Datetime("2000-01-01T03:04:05Z"), + wtz - Datetime("2000-01-01T03:04:05Z"), + + na - TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + naz - TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nd - TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ndz - TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + nt - TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ntz - TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wa - TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wd - TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wt - TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + waz - TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wdz - TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wtz - TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + + na - Timestamp("2000-01-01T03:04:05.678912Z"), + naz - Timestamp("2000-01-01T03:04:05.678912Z"), + nd - Timestamp("2000-01-01T03:04:05.678912Z"), + ndz - Timestamp("2000-01-01T03:04:05.678912Z"), + nt - Timestamp("2000-01-01T03:04:05.678912Z"), + ntz - Timestamp("2000-01-01T03:04:05.678912Z"), + wa - Timestamp("2000-01-01T03:04:05.678912Z"), + wd - Timestamp("2000-01-01T03:04:05.678912Z"), + wt - Timestamp("2000-01-01T03:04:05.678912Z"), + waz - Timestamp("2000-01-01T03:04:05.678912Z"), + wdz - Timestamp("2000-01-01T03:04:05.678912Z"), + wtz - Timestamp("2000-01-01T03:04:05.678912Z"), + + na - TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + naz - TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nd - TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ndz - TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + nt - TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ntz - TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wa - TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wd - TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wt - TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + waz - TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wdz - TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wtz - TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), +FROM Dates; + +SELECT + na - Date32("1900-01-01"), + naz - Date32("1900-01-01"), + nd - Date32("1900-01-01"), + ndz - Date32("1900-01-01"), + nt - Date32("1900-01-01"), + ntz - Date32("1900-01-01"), + wa - Date32("1900-01-01"), + wd - Date32("1900-01-01"), + wt - Date32("1900-01-01"), + waz - Date32("1900-01-01"), + wdz - Date32("1900-01-01"), + wtz - Date32("1900-01-01"), + + na - Datetime64("1900-01-01T03:04:05Z"), + naz - Datetime64("1900-01-01T03:04:05Z"), + nd - Datetime64("1900-01-01T03:04:05Z"), + ndz - Datetime64("1900-01-01T03:04:05Z"), + nt - Datetime64("1900-01-01T03:04:05Z"), + ntz - Datetime64("1900-01-01T03:04:05Z"), + wa - Datetime64("1900-01-01T03:04:05Z"), + wd - Datetime64("1900-01-01T03:04:05Z"), + wt - Datetime64("1900-01-01T03:04:05Z"), + waz - Datetime64("1900-01-01T03:04:05Z"), + wdz - Datetime64("1900-01-01T03:04:05Z"), + wtz - Datetime64("1900-01-01T03:04:05Z"), + + na - Timestamp64("1900-01-01T03:04:05.678912Z"), + naz - Timestamp64("1900-01-01T03:04:05.678912Z"), + nd - Timestamp64("1900-01-01T03:04:05.678912Z"), + ndz - Timestamp64("1900-01-01T03:04:05.678912Z"), + nt - Timestamp64("1900-01-01T03:04:05.678912Z"), + ntz - Timestamp64("1900-01-01T03:04:05.678912Z"), + wa - Timestamp64("1900-01-01T03:04:05.678912Z"), + wd - Timestamp64("1900-01-01T03:04:05.678912Z"), + wt - Timestamp64("1900-01-01T03:04:05.678912Z"), + waz - Timestamp64("1900-01-01T03:04:05.678912Z"), + wdz - Timestamp64("1900-01-01T03:04:05.678912Z"), + wtz - Timestamp64("1900-01-01T03:04:05.678912Z"), + + na - TzDate32("1900-01-01,Europe/Moscow"), + naz - TzDate32("1900-01-01,Europe/Moscow"), + nd - TzDate32("1900-01-01,Europe/Moscow"), + ndz - TzDate32("1900-01-01,Europe/Moscow"), + nt - TzDate32("1900-01-01,Europe/Moscow"), + ntz - TzDate32("1900-01-01,Europe/Moscow"), + wa - TzDate32("1900-01-01,Europe/Moscow"), + wd - TzDate32("1900-01-01,Europe/Moscow"), + wt - TzDate32("1900-01-01,Europe/Moscow"), + waz - TzDate32("1900-01-01,Europe/Moscow"), + wdz - TzDate32("1900-01-01,Europe/Moscow"), + wtz - TzDate32("1900-01-01,Europe/Moscow"), + + na - TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + naz - TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nd - TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ndz - TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + nt - TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ntz - TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wa - TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wd - TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wt - TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + waz - TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wdz - TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wtz - TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + + na - TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + naz - TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nd - TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ndz - TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + nt - TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + ntz - TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wa - TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wd - TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wt - TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + waz - TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wdz - TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wtz - TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow") + +FROM Dates; + diff --git a/yt/yql/tests/sql/suites/blocks/date_top_sort.cfg b/yt/yql/tests/sql/suites/blocks/date_top_sort.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_top_sort.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/date_top_sort.sql b/yt/yql/tests/sql/suites/blocks/date_top_sort.sql new file mode 100644 index 0000000000..a2cc856c56 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/date_top_sort.sql @@ -0,0 +1,9 @@ +USE plato; +pragma yt.UseNativeDescSort; + +SELECT + t.*, i8+1 +FROM (SELECT * FROM concat(Dates,Dates)) as t +ORDER BY na,wa,naz,waz,nd,ndz,wd,wdz,nt,ntz,wt,wtz,ni,wi +LIMIT 1; + diff --git a/yt/yql/tests/sql/suites/blocks/dates.txt.attr b/yt/yql/tests/sql/suites/blocks/dates.txt.attr new file mode 100644 index 0000000000..d2ce0ed49f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/dates.txt.attr @@ -0,0 +1,27 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["na";["DataType";"Date"]]; + ["nd";["DataType";"Datetime"]]; + ["nt";["DataType";"Timestamp"]]; + ["naz";["DataType";"TzDate"]]; + ["ndz";["DataType";"TzDatetime"]]; + ["ntz";["DataType";"TzTimestamp"]]; + ["wa";["DataType";"Date32"]]; + ["wd";["DataType";"Datetime64"]]; + ["wt";["DataType";"Timestamp64"]]; + ["ni";["DataType";"Interval"]]; + ["wi";["DataType";"Interval64"]]; + ["i8";["DataType";"Int8"]]; + ["u8";["DataType";"Uint8"]]; + ["i16";["DataType";"Int16"]]; + ["u16";["DataType";"Uint16"]]; + ["i32";["DataType";"Int32"]]; + ["u32";["DataType";"Uint32"]]; + ["i64";["DataType";"Int64"]]; + ["u64";["DataType";"Uint64"]]; + ["waz";["DataType";"TzDate32"]]; + ["wdz";["DataType";"TzDatetime64"]]; + ["wtz";["DataType";"TzTimestamp64"]]; + ]]; +}} + diff --git a/yt/yql/tests/sql/suites/blocks/decimal_avg.cfg b/yt/yql/tests/sql/suites/blocks/decimal_avg.cfg new file mode 100644 index 0000000000..a21c6560ed --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/decimal_avg.cfg @@ -0,0 +1 @@ +in Input input_decimal.txt diff --git a/yt/yql/tests/sql/suites/blocks/decimal_avg.sql b/yt/yql/tests/sql/suites/blocks/decimal_avg.sql new file mode 100644 index 0000000000..3e1dd49983 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/decimal_avg.sql @@ -0,0 +1,8 @@ +USE plato; + +SELECT + avg(cs_ext_list_price), avg(cs_ext_tax), + avg(cs_ext_list_price) * decimal("1.1", 7, 2), + decimal("1.1", 7, 2) * avg(cs_ext_tax), +FROM Input; + diff --git a/yt/yql/tests/sql/suites/blocks/decimal_comparison.cfg b/yt/yql/tests/sql/suites/blocks/decimal_comparison.cfg new file mode 100644 index 0000000000..a21c6560ed --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/decimal_comparison.cfg @@ -0,0 +1 @@ +in Input input_decimal.txt diff --git a/yt/yql/tests/sql/suites/blocks/decimal_comparison.sql b/yt/yql/tests/sql/suites/blocks/decimal_comparison.sql new file mode 100644 index 0000000000..c41cc5540e --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/decimal_comparison.sql @@ -0,0 +1,25 @@ +USE plato; + +SELECT + cs_ext_list_price == cs_ext_tax, + cs_ext_list_price != cs_ext_tax, + cs_ext_list_price < cs_ext_tax, + cs_ext_list_price <= cs_ext_tax, + cs_ext_list_price > cs_ext_tax, + cs_ext_list_price >= cs_ext_tax, + + cs_ext_tax == decimal("26.91", 7, 2), + cs_ext_tax != decimal("26.91", 7, 2), + cs_ext_tax < decimal("26.91", 7, 2), + cs_ext_tax <= decimal("26.91", 7, 2), + cs_ext_tax > decimal("26.91", 7, 2), + cs_ext_tax >= decimal("26.91", 7, 2), + + decimal("26.91", 7, 2) == cs_ext_tax, + decimal("26.91", 7, 2) != cs_ext_tax, + decimal("26.91", 7, 2) < cs_ext_tax, + decimal("26.91", 7, 2) <= cs_ext_tax, + decimal("26.91", 7, 2) > cs_ext_tax, + decimal("26.91", 7, 2) >= cs_ext_tax, +FROM Input; + diff --git a/yt/yql/tests/sql/suites/blocks/decimal_multiplicative_ops.cfg b/yt/yql/tests/sql/suites/blocks/decimal_multiplicative_ops.cfg new file mode 100644 index 0000000000..a21c6560ed --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/decimal_multiplicative_ops.cfg @@ -0,0 +1 @@ +in Input input_decimal.txt diff --git a/yt/yql/tests/sql/suites/blocks/decimal_multiplicative_ops.sql b/yt/yql/tests/sql/suites/blocks/decimal_multiplicative_ops.sql new file mode 100644 index 0000000000..4d3166b6a5 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/decimal_multiplicative_ops.sql @@ -0,0 +1,18 @@ +USE plato; + +SELECT + cs_ext_list_price, cs_ext_tax, + cs_ext_list_price * cs_ext_tax, cs_ext_list_price * Just(decimal("13.37", 7, 2)), Just(decimal("42.0", 7, 2)) * cs_ext_tax, + cs_ext_list_price * decimal("13.37", 7, 2), decimal("42.0", 7, 2) * cs_ext_tax, + + cs_ext_list_price / cs_ext_tax, cs_ext_list_price / Just(decimal("13.37", 7, 2)), Just(decimal("42.0", 7, 2)) / cs_ext_tax, + cs_ext_list_price / decimal("13.37", 7, 2), decimal("42.0", 7, 2) / cs_ext_tax, + + cs_ext_list_price % cs_ext_tax, cs_ext_list_price % Just(decimal("13.37", 7, 2)), Just(decimal("42.0", 7, 2)) % cs_ext_tax, + cs_ext_list_price % decimal("13.37", 7, 2), decimal("42.0", 7, 2) % cs_ext_tax, + + cs_ext_list_price * Just(13), cs_ext_list_price * 13, + cs_ext_list_price / Just(13), cs_ext_list_price / 13, + cs_ext_list_price % Just(13), cs_ext_list_price % 13, +FROM Input; + diff --git a/yt/yql/tests/sql/suites/blocks/decimal_op_decimal.cfg b/yt/yql/tests/sql/suites/blocks/decimal_op_decimal.cfg new file mode 100644 index 0000000000..a21c6560ed --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/decimal_op_decimal.cfg @@ -0,0 +1 @@ +in Input input_decimal.txt diff --git a/yt/yql/tests/sql/suites/blocks/decimal_op_decimal.sql b/yt/yql/tests/sql/suites/blocks/decimal_op_decimal.sql new file mode 100644 index 0000000000..996ea73835 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/decimal_op_decimal.sql @@ -0,0 +1,7 @@ +USE plato; + +SELECT + cs_ext_list_price + cs_ext_tax, + cs_ext_list_price - cs_ext_tax, +FROM Input; + diff --git a/yt/yql/tests/sql/suites/blocks/decimal_op_decimal_scalar.cfg b/yt/yql/tests/sql/suites/blocks/decimal_op_decimal_scalar.cfg new file mode 100644 index 0000000000..a21c6560ed --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/decimal_op_decimal_scalar.cfg @@ -0,0 +1 @@ +in Input input_decimal.txt diff --git a/yt/yql/tests/sql/suites/blocks/decimal_op_decimal_scalar.sql b/yt/yql/tests/sql/suites/blocks/decimal_op_decimal_scalar.sql new file mode 100644 index 0000000000..81ce0f5dbf --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/decimal_op_decimal_scalar.sql @@ -0,0 +1,16 @@ +USE plato; + +SELECT + cs_ext_list_price + cast("10.2" as decimal(7,2)), + cs_ext_list_price + cast("99999.99" as decimal(7,2)), + cs_ext_list_price - cast("11.22" as decimal(7,2)), + cs_ext_list_price - cast("99999.99" as decimal(7,2)), +FROM Input; + +SELECT + cast("10.2" as decimal(7,2)) + cs_ext_list_price, + cast("99999.99" as decimal(7,2)) + cs_ext_list_price, + cast("11.22" as decimal(7,2)) - cs_ext_list_price, + cast("99999.99" as decimal(7,2)) - cs_ext_list_price, +FROM Input; + diff --git a/yt/yql/tests/sql/suites/blocks/decimal_unary.cfg b/yt/yql/tests/sql/suites/blocks/decimal_unary.cfg new file mode 100644 index 0000000000..a21c6560ed --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/decimal_unary.cfg @@ -0,0 +1 @@ +in Input input_decimal.txt diff --git a/yt/yql/tests/sql/suites/blocks/decimal_unary.sql b/yt/yql/tests/sql/suites/blocks/decimal_unary.sql new file mode 100644 index 0000000000..77d1170ef6 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/decimal_unary.sql @@ -0,0 +1,7 @@ +USE plato; + +SELECT + -cs_ext_list_price, + abs(cs_ext_tax), +FROM Input; + diff --git a/yt/yql/tests/sql/suites/blocks/default.cfg b/yt/yql/tests/sql/suites/blocks/default.cfg new file mode 100644 index 0000000000..41a0f8a733 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/default.cfg @@ -0,0 +1,4 @@ +canonize_peephole +peephole_use_blocks + + diff --git a/yt/yql/tests/sql/suites/blocks/distinct_mixed_all.cfg b/yt/yql/tests/sql/suites/blocks/distinct_mixed_all.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/distinct_mixed_all.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/distinct_mixed_all.sql b/yt/yql/tests/sql/suites/blocks/distinct_mixed_all.sql new file mode 100644 index 0000000000..dae808a395 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/distinct_mixed_all.sql @@ -0,0 +1,8 @@ +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +USE plato; + +SELECT + count(*), + sum(distinct key),min(distinct key) +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/distinct_mixed_keys.cfg b/yt/yql/tests/sql/suites/blocks/distinct_mixed_keys.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/distinct_mixed_keys.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/distinct_mixed_keys.sql b/yt/yql/tests/sql/suites/blocks/distinct_mixed_keys.sql new file mode 100644 index 0000000000..8c3aac0c0b --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/distinct_mixed_keys.sql @@ -0,0 +1,10 @@ +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +USE plato; + +SELECT + key, count(*), count(distinct subkey), sum(distinct subkey), + count(distinct Unwrap(subkey/2u)), sum(distinct Unwrap(subkey/2u)) +FROM Input +GROUP BY key +ORDER BY key diff --git a/yt/yql/tests/sql/suites/blocks/distinct_opt_state_all.cfg b/yt/yql/tests/sql/suites/blocks/distinct_opt_state_all.cfg new file mode 100644 index 0000000000..6ba971b075 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/distinct_opt_state_all.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/distinct_opt_state_all.sql b/yt/yql/tests/sql/suites/blocks/distinct_opt_state_all.sql new file mode 100644 index 0000000000..1f45427b87 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/distinct_opt_state_all.sql @@ -0,0 +1,7 @@ +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +USE plato; + +SELECT + count(*),max(subkey),sum(distinct subkey),avg(subkey),count(distinct subkey/2u),avg(distinct subkey/2u) +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/distinct_opt_state_keys.cfg b/yt/yql/tests/sql/suites/blocks/distinct_opt_state_keys.cfg new file mode 100644 index 0000000000..6ba971b075 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/distinct_opt_state_keys.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/distinct_opt_state_keys.sql b/yt/yql/tests/sql/suites/blocks/distinct_opt_state_keys.sql new file mode 100644 index 0000000000..9b5d778b98 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/distinct_opt_state_keys.sql @@ -0,0 +1,10 @@ +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +USE plato; + +SELECT + key,count(*),max(subkey),sum(distinct subkey),avg(subkey),count(distinct subkey/2u),avg(distinct subkey/2u) +FROM Input +GROUP BY key +ORDER BY key + diff --git a/yt/yql/tests/sql/suites/blocks/distinct_pure_all.cfg b/yt/yql/tests/sql/suites/blocks/distinct_pure_all.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/distinct_pure_all.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/distinct_pure_all.sql b/yt/yql/tests/sql/suites/blocks/distinct_pure_all.sql new file mode 100644 index 0000000000..aa2865f46d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/distinct_pure_all.sql @@ -0,0 +1,7 @@ +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +USE plato; + +SELECT + sum(distinct key),min(distinct key) +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/distinct_pure_keys.cfg b/yt/yql/tests/sql/suites/blocks/distinct_pure_keys.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/distinct_pure_keys.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/distinct_pure_keys.sql b/yt/yql/tests/sql/suites/blocks/distinct_pure_keys.sql new file mode 100644 index 0000000000..2acc401488 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/distinct_pure_keys.sql @@ -0,0 +1,10 @@ +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +USE plato; + +SELECT + key, count(distinct subkey), sum(distinct subkey), + count(distinct Unwrap(subkey/2u)), sum(distinct Unwrap(subkey/2u)) +FROM Input +GROUP BY key +ORDER BY key diff --git a/yt/yql/tests/sql/suites/blocks/div_uint64.cfg b/yt/yql/tests/sql/suites/blocks/div_uint64.cfg new file mode 100644 index 0000000000..5ee9471fc0 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/div_uint64.cfg @@ -0,0 +1 @@ +in Input input_uint64.txt diff --git a/yt/yql/tests/sql/suites/blocks/div_uint64.sql b/yt/yql/tests/sql/suites/blocks/div_uint64.sql new file mode 100644 index 0000000000..3eff1d864b --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/div_uint64.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key/subkey,1000ul/key,subkey/0ul +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/div_uint64_opt2.cfg b/yt/yql/tests/sql/suites/blocks/div_uint64_opt2.cfg new file mode 100644 index 0000000000..46fee85c7f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/div_uint64_opt2.cfg @@ -0,0 +1 @@ +in Input input_uint64_opt2.txt diff --git a/yt/yql/tests/sql/suites/blocks/div_uint64_opt2.sql b/yt/yql/tests/sql/suites/blocks/div_uint64_opt2.sql new file mode 100644 index 0000000000..3eff1d864b --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/div_uint64_opt2.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key/subkey,1000ul/key,subkey/0ul +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/exists.cfg b/yt/yql/tests/sql/suites/blocks/exists.cfg new file mode 100644 index 0000000000..87522c685e --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/exists.cfg @@ -0,0 +1 @@ +in Input input_exists.txt diff --git a/yt/yql/tests/sql/suites/blocks/exists.sql b/yt/yql/tests/sql/suites/blocks/exists.sql new file mode 100644 index 0000000000..a4a0b91d5f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/exists.sql @@ -0,0 +1,9 @@ +USE plato; + +SELECT + key, + maybe_null is NULL as is_maybe_null, + always_null is NULL as is_always_null, + never_null is NULL as is_never_null, +FROM Input +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/blocks/filter_by_column_with_drop.cfg b/yt/yql/tests/sql/suites/blocks/filter_by_column_with_drop.cfg new file mode 100644 index 0000000000..490bd1a7a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/filter_by_column_with_drop.cfg @@ -0,0 +1 @@ +in Input input_bools.txt diff --git a/yt/yql/tests/sql/suites/blocks/filter_by_column_with_drop.sql b/yt/yql/tests/sql/suites/blocks/filter_by_column_with_drop.sql new file mode 100644 index 0000000000..6fd08e1d67 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/filter_by_column_with_drop.sql @@ -0,0 +1,7 @@ +USE plato; + +select + key, +from Input +where b1 +order by key; diff --git a/yt/yql/tests/sql/suites/blocks/filter_direct_col.cfg b/yt/yql/tests/sql/suites/blocks/filter_direct_col.cfg new file mode 100644 index 0000000000..63c656a58f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/filter_direct_col.cfg @@ -0,0 +1 @@ +in Input input_uint32_optbool_bool.txt diff --git a/yt/yql/tests/sql/suites/blocks/filter_direct_col.sql b/yt/yql/tests/sql/suites/blocks/filter_direct_col.sql new file mode 100644 index 0000000000..363a005ca3 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/filter_direct_col.sql @@ -0,0 +1 @@ +select * from plato.Input where value order by key; diff --git a/yt/yql/tests/sql/suites/blocks/filter_expr.cfg b/yt/yql/tests/sql/suites/blocks/filter_expr.cfg new file mode 100644 index 0000000000..63c656a58f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/filter_expr.cfg @@ -0,0 +1 @@ +in Input input_uint32_optbool_bool.txt diff --git a/yt/yql/tests/sql/suites/blocks/filter_expr.sql b/yt/yql/tests/sql/suites/blocks/filter_expr.sql new file mode 100644 index 0000000000..07efda8677 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/filter_expr.sql @@ -0,0 +1 @@ +select key, subkey from plato.Input where not value order by key; diff --git a/yt/yql/tests/sql/suites/blocks/filter_partial_expr.cfg b/yt/yql/tests/sql/suites/blocks/filter_partial_expr.cfg new file mode 100644 index 0000000000..63c656a58f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/filter_partial_expr.cfg @@ -0,0 +1 @@ +in Input input_uint32_optbool_bool.txt diff --git a/yt/yql/tests/sql/suites/blocks/filter_partial_expr.sql b/yt/yql/tests/sql/suites/blocks/filter_partial_expr.sql new file mode 100644 index 0000000000..df187d75f2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/filter_partial_expr.sql @@ -0,0 +1 @@ +select key, subkey from plato.Input where not value or Random(key) >= 0.0 order by key; diff --git a/yt/yql/tests/sql/suites/blocks/finalize_hashed_keys.cfg b/yt/yql/tests/sql/suites/blocks/finalize_hashed_keys.cfg new file mode 100644 index 0000000000..57e52ccabb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/finalize_hashed_keys.cfg @@ -0,0 +1 @@ +in Input input_hashed_uint32.txt diff --git a/yt/yql/tests/sql/suites/blocks/finalize_hashed_keys.sql b/yt/yql/tests/sql/suites/blocks/finalize_hashed_keys.sql new file mode 100644 index 0000000000..1609c02088 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/finalize_hashed_keys.sql @@ -0,0 +1,9 @@ +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +USE plato; + +SELECT + key, count(*), count(subkey), min(subkey), max(subkey), sum(subkey), avg(subkey) +FROM Input +GROUP by key +ORDER by key; diff --git a/yt/yql/tests/sql/suites/blocks/group_by_complex_key.cfg b/yt/yql/tests/sql/suites/blocks/group_by_complex_key.cfg new file mode 100644 index 0000000000..b65712414d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/group_by_complex_key.cfg @@ -0,0 +1 @@ +in Input input_strings.txt diff --git a/yt/yql/tests/sql/suites/blocks/group_by_complex_key.sql b/yt/yql/tests/sql/suites/blocks/group_by_complex_key.sql new file mode 100644 index 0000000000..59e121f52f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/group_by_complex_key.sql @@ -0,0 +1,16 @@ +USE plato; + +$src = +SELECT + if (key != '075', AsTuple(Just(Just(key)), 123)) as k, + subkey, + value +FROM Input; + +SELECT + k, + min(subkey) as min, + max(value) as max, +FROM $src +GROUP by k +ORDER by k diff --git a/yt/yql/tests/sql/suites/blocks/if.cfg b/yt/yql/tests/sql/suites/blocks/if.cfg new file mode 100644 index 0000000000..b65712414d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/if.cfg @@ -0,0 +1 @@ +in Input input_strings.txt diff --git a/yt/yql/tests/sql/suites/blocks/if.sql b/yt/yql/tests/sql/suites/blocks/if.sql new file mode 100644 index 0000000000..829699ce50 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/if.sql @@ -0,0 +1,16 @@ +select + key, + subkey, + if (1 > 0, key, subkey) as same_as_key, + if (0 > 100, key, subkey) as same_as_subkey, + if (10 > 0, 'scalar1 selected', key) as sc1, + if (0 > 11, subkey, 'scalar2 selected') as sc2, + + + if(key > subkey, key, subkey) as max_of_key_subkey, + if(key > subkey, key, 'subkey is greater') as sc3, + if(subkey >= key, 'subkey is greater or eq', key) as sc4, + if(subkey >= key, 'subkey is greater or eq', 'key is greater') as sc5, + +from plato.Input +order by key, subkey; diff --git a/yt/yql/tests/sql/suites/blocks/input1.txt.attr b/yt/yql/tests/sql/suites/blocks/input1.txt.attr new file mode 100644 index 0000000000..157b4f5c1f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input1.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input2.txt.attr b/yt/yql/tests/sql/suites/blocks/input2.txt.attr new file mode 100644 index 0000000000..157b4f5c1f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input2.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_allnums.txt.attr b/yt/yql/tests/sql/suites/blocks/input_allnums.txt.attr new file mode 100644 index 0000000000..aaf80d991f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_allnums.txt.attr @@ -0,0 +1,23 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["i8";["DataType";"Int8"]]; + ["i16";["DataType";"Int16"]]; + ["i32";["DataType";"Int32"]]; + ["i64";["DataType";"Int64"]]; + + ["i8opt";["OptionalType"; ["DataType";"Int8"]]]; + ["i16opt";["OptionalType"; ["DataType";"Int16"]]]; + ["i32opt";["OptionalType"; ["DataType";"Int32"]]]; + ["i64opt";["OptionalType"; ["DataType";"Int64"]]]; + + ["ui8";["DataType";"Uint8"]]; + ["ui16";["DataType";"Uint16"]]; + ["ui32";["DataType";"Uint32"]]; + ["ui64";["DataType";"Uint64"]]; + + ["ui8opt";["OptionalType"; ["DataType";"Uint8"]]]; + ["ui16opt";["OptionalType"; ["DataType";"Uint16"]]]; + ["ui32opt";["OptionalType"; ["DataType";"Uint32"]]]; + ["ui64opt";["OptionalType"; ["DataType";"Uint64"]]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_bool.txt.attr b/yt/yql/tests/sql/suites/blocks/input_bool.txt.attr new file mode 100644 index 0000000000..f59e3e2a04 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_bool.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Bool"]]; + ["subkey";["DataType";"Bool"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_bool_opt.txt.attr b/yt/yql/tests/sql/suites/blocks/input_bool_opt.txt.attr new file mode 100644 index 0000000000..c9690dfe89 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_bool_opt.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["OptionalType";["DataType";"Bool"]]]; + ["subkey";["OptionalType";["DataType";"Bool"]]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_bools.txt.attr b/yt/yql/tests/sql/suites/blocks/input_bools.txt.attr new file mode 100644 index 0000000000..22b4be69d8 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_bools.txt.attr @@ -0,0 +1,9 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int32"]]; + ["b1";["DataType";"Bool"]]; + ["b2";["DataType";"Bool"]]; + ["ob1";["OptionalType";["DataType";"Bool"]]]; + ["ob2";["OptionalType";["DataType";"Bool"]]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_decimal.txt.attr b/yt/yql/tests/sql/suites/blocks/input_decimal.txt.attr new file mode 100644 index 0000000000..ebddf8b641 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_decimal.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["cs_ext_list_price";["OptionalType";["DataType";"Decimal";"7";"2"]]]; + ["cs_ext_tax";["OptionalType";["DataType";"Decimal";"7";"2"]]]; + ["cs_sales_price";["OptionalType";["DataType";"Decimal";"7";"2"]]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_double.txt.attr b/yt/yql/tests/sql/suites/blocks/input_double.txt.attr new file mode 100644 index 0000000000..da7771ff13 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_double.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint32"]]; + ["subkey";["DataType";"Double"]]; + ]; + ]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_exists.txt.attr b/yt/yql/tests/sql/suites/blocks/input_exists.txt.attr new file mode 100644 index 0000000000..16f4c78734 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_exists.txt.attr @@ -0,0 +1,8 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int32"]]; + ["always_null";["OptionalType";["DataType";"Int32"]]]; + ["never_null";["OptionalType";["DataType";"Int32"]]]; + ["maybe_null";["OptionalType";["DataType";"Int32"]]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_from_pg_dates.txt.attr b/yt/yql/tests/sql/suites/blocks/input_from_pg_dates.txt.attr new file mode 100644 index 0000000000..c7b3104a66 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_from_pg_dates.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["a";["PgType";"date"]]; + ["b";["PgType";"timestamp"]]; + ]]; +}} + diff --git a/yt/yql/tests/sql/suites/blocks/input_hashed_uint32.txt.attr b/yt/yql/tests/sql/suites/blocks/input_hashed_uint32.txt.attr new file mode 100644 index 0000000000..3a10c2a1ea --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_hashed_uint32.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint32"]]; + ["subkey";["DataType";"Uint32"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_hashed_uint32_opt.txt.attr b/yt/yql/tests/sql/suites/blocks/input_hashed_uint32_opt.txt.attr new file mode 100644 index 0000000000..1c249a645e --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_hashed_uint32_opt.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint32"]]; + ["subkey";["OptionalType";["DataType";"Uint32"]]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_int16.txt.attr b/yt/yql/tests/sql/suites/blocks/input_int16.txt.attr new file mode 100644 index 0000000000..083adc01e3 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_int16.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int16"]]; + ["subkey";["DataType";"Int16"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_int32.txt.attr b/yt/yql/tests/sql/suites/blocks/input_int32.txt.attr new file mode 100644 index 0000000000..4776c0c3e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_int32.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int32"]]; + ["subkey";["DataType";"Int32"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_int32_opt.txt.attr b/yt/yql/tests/sql/suites/blocks/input_int32_opt.txt.attr new file mode 100644 index 0000000000..3b099f504e --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_int32_opt.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["k1";["DataType";"Int32"]]; + ["k2";["OptionalType";["DataType";"Int32"]]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_int32_string.txt.attr b/yt/yql/tests/sql/suites/blocks/input_int32_string.txt.attr new file mode 100644 index 0000000000..52153089c5 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_int32_string.txt.attr @@ -0,0 +1,8 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int32"]]; + ["subkey";["DataType";"Int32"]]; + ["value";["DataType";"String"]]; + ["value_utf";["DataType";"Utf8"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_int64.txt.attr b/yt/yql/tests/sql/suites/blocks/input_int64.txt.attr new file mode 100644 index 0000000000..763e1cad96 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_int64.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int64"]]; + ["subkey";["DataType";"Int64"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_int8.txt.attr b/yt/yql/tests/sql/suites/blocks/input_int8.txt.attr new file mode 100644 index 0000000000..c25d3bbf54 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_int8.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int8"]]; + ["subkey";["DataType";"Int8"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_json_document.txt.attr b/yt/yql/tests/sql/suites/blocks/input_json_document.txt.attr new file mode 100644 index 0000000000..d8a67034ac --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_json_document.txt.attr @@ -0,0 +1,9 @@ +{"_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + ["key";["DataType";"Int32"]]; + ["val";["DataType";"JsonDocument"]] + ] + ] +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_nested.txt.attr b/yt/yql/tests/sql/suites/blocks/input_nested.txt.attr new file mode 100644 index 0000000000..da87d9df75 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_nested.txt.attr @@ -0,0 +1,8 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint32"]]; + ["subkey";["DataType";"Uint32"]]; + ["value";["OptionalType";["TupleType";[["DataType";"Int32"];["OptionalType"; ["OptionalType";["DataType";"Double"]]]]]] + ]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_pg.txt.attr b/yt/yql/tests/sql/suites/blocks/input_pg.txt.attr new file mode 100644 index 0000000000..2e13cdd656 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_pg.txt.attr @@ -0,0 +1,8 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["a";["PgType";"text"]]; + ["b";["PgType";"cstring"]]; + ["c";["PgType";"int2"]]; + ["d";["DataType";"String"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_pg_arr.txt.attr b/yt/yql/tests/sql/suites/blocks/input_pg_arr.txt.attr new file mode 100644 index 0000000000..f3588e8e3c --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_pg_arr.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["a";["PgType";"int2"]]; + ["b";["PgType";"text"]]; + ["c";["PgType";"_int2"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_strings.txt.attr b/yt/yql/tests/sql/suites/blocks/input_strings.txt.attr new file mode 100644 index 0000000000..157b4f5c1f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_strings.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_strings_opt.txt.attr b/yt/yql/tests/sql/suites/blocks/input_strings_opt.txt.attr new file mode 100644 index 0000000000..563f941406 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_strings_opt.txt.attr @@ -0,0 +1,8 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["OptionalType"; ["DataType";"String"]]]; + ["s";["DataType";"String"]]; + ["s_opt";["OptionalType"; ["DataType";"String"]]]; + ["utf";["DataType";"Utf8"]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_struct.txt.attr b/yt/yql/tests/sql/suites/blocks/input_struct.txt.attr new file mode 100644 index 0000000000..a28cc27044 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_struct.txt.attr @@ -0,0 +1,10 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int32"]]; + ["val";["StructType";[ + ["a";["DataType";"Int32"]]; + ["x";["DataType";"Int32"]]; + ["o";["OptionalType";["DataType";"Int32"]]]; + ]]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_to_pg_dates.txt.attr b/yt/yql/tests/sql/suites/blocks/input_to_pg_dates.txt.attr new file mode 100644 index 0000000000..28015822b6 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_to_pg_dates.txt.attr @@ -0,0 +1,10 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["a";["DataType";"Date"]]; + ["b";["DataType";"Datetime"]]; + ["c";["DataType";"Timestamp"]]; + ["d";["DataType";"Date32"]]; + ["e";["DataType";"Datetime64"]]; + ["f";["DataType";"Timestamp64"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_to_pg_interval.txt.attr b/yt/yql/tests/sql/suites/blocks/input_to_pg_interval.txt.attr new file mode 100644 index 0000000000..5a665b0202 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_to_pg_interval.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["a";["DataType";"Interval"]]; + ["b";["DataType";"Interval64"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_to_pg_numbers.txt.attr b/yt/yql/tests/sql/suites/blocks/input_to_pg_numbers.txt.attr new file mode 100644 index 0000000000..fea8a89ee2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_to_pg_numbers.txt.attr @@ -0,0 +1,15 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["i8";["DataType";"Int8"]]; + ["ui8";["DataType";"Uint8"]]; + ["i16";["DataType";"Int16"]]; + ["ui16";["DataType";"Uint16"]]; + ["i32";["DataType";"Int32"]]; + ["ui32";["DataType";"Uint32"]]; + ["i64";["DataType";"Int64"]]; + ["ui64";["DataType";"Uint64"]]; + ["f4";["DataType";"Float"]]; + ["f8";["DataType";"Double"]]; + ]]; +}} + diff --git a/yt/yql/tests/sql/suites/blocks/input_to_pg_strings.txt.attr b/yt/yql/tests/sql/suites/blocks/input_to_pg_strings.txt.attr new file mode 100644 index 0000000000..8c64c6f3cc --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_to_pg_strings.txt.attr @@ -0,0 +1,14 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["s";["DataType";"String"]]; + ["u";["DataType";"Utf8"]]; + ["y";["DataType";"Yson"]]; + ["j";["DataType";"Json"]]; + ["jd";["DataType";"JsonDocument"]]; + ["ud";["DataType";"Uuid"]]; + ["tzd";["DataType";"TzDate"]]; + ["tzdt";["DataType";"TzDatetime"]]; + ["tzts";["DataType";"TzTimestamp"]]; + ]]; +}} + diff --git a/yt/yql/tests/sql/suites/blocks/input_tofrom_pg.txt.attr b/yt/yql/tests/sql/suites/blocks/input_tofrom_pg.txt.attr new file mode 100644 index 0000000000..507d3a002b --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_tofrom_pg.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["a";["DataType";"Utf8"]]; + ["b";["PgType";"text"]]; + ["c";["PgType";"cstring"]]; + ["d";["OptionalType";["DataType";"Utf8"]]]; + ["e";["DataType";"Int64"]]; + ["f";["PgType";"int8"]]; + ["g";["OptionalType";["DataType";"Int64"]]]; + ]]; +}}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/blocks/input_top.txt.attr b/yt/yql/tests/sql/suites/blocks/input_top.txt.attr new file mode 100644 index 0000000000..3ddddb86b8 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_top.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int32"]]; + ["subkey";["DataType";"Int32"]]; + ["value";["DataType";"String"]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_tuple.txt.attr b/yt/yql/tests/sql/suites/blocks/input_tuple.txt.attr new file mode 100644 index 0000000000..bad356fdd4 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_tuple.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint32"]]; + ["subkey";["DataType";"Uint32"]]; + ["value";["TupleType";[["DataType";"Int32"];["DataType";"Double"]]]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_uint16.txt.attr b/yt/yql/tests/sql/suites/blocks/input_uint16.txt.attr new file mode 100644 index 0000000000..99a1ee195f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_uint16.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint16"]]; + ["subkey";["DataType";"Uint16"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_uint32.txt.attr b/yt/yql/tests/sql/suites/blocks/input_uint32.txt.attr new file mode 100644 index 0000000000..3a10c2a1ea --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_uint32.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint32"]]; + ["subkey";["DataType";"Uint32"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_uint32_optbool_bool.txt.attr b/yt/yql/tests/sql/suites/blocks/input_uint32_optbool_bool.txt.attr new file mode 100644 index 0000000000..f0670909b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_uint32_optbool_bool.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint32"]]; + ["subkey";["OptionalType"; ["DataType";"Bool"]]]; + ["value";["DataType";"Bool"]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_uint64.txt.attr b/yt/yql/tests/sql/suites/blocks/input_uint64.txt.attr new file mode 100644 index 0000000000..7240806897 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_uint64.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint64"]]; + ["subkey";["DataType";"Uint64"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_uint64_filter.txt.attr b/yt/yql/tests/sql/suites/blocks/input_uint64_filter.txt.attr new file mode 100644 index 0000000000..7240806897 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_uint64_filter.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint64"]]; + ["subkey";["DataType";"Uint64"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_uint64_filter_opt.txt.attr b/yt/yql/tests/sql/suites/blocks/input_uint64_filter_opt.txt.attr new file mode 100644 index 0000000000..6107e21eaa --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_uint64_filter_opt.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["OptionalType";["DataType";"Uint64"]]]; + ["subkey";["DataType";"Uint64"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_uint64_nested_opt.txt.attr b/yt/yql/tests/sql/suites/blocks/input_uint64_nested_opt.txt.attr new file mode 100644 index 0000000000..3633a48f45 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_uint64_nested_opt.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint64"]]; + ["subkey";["OptionalType";["OptionalType";["DataType";"Uint64"]]]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_uint64_opt.txt.attr b/yt/yql/tests/sql/suites/blocks/input_uint64_opt.txt.attr new file mode 100644 index 0000000000..6107e21eaa --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_uint64_opt.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["OptionalType";["DataType";"Uint64"]]]; + ["subkey";["DataType";"Uint64"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_uint64_opt2.txt.attr b/yt/yql/tests/sql/suites/blocks/input_uint64_opt2.txt.attr new file mode 100644 index 0000000000..738708acf1 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_uint64_opt2.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["OptionalType";["DataType";"Uint64"]]]; + ["subkey";["OptionalType";["DataType";"Uint64"]]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_uint8.txt.attr b/yt/yql/tests/sql/suites/blocks/input_uint8.txt.attr new file mode 100644 index 0000000000..619dbdd1bf --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_uint8.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint8"]]; + ["subkey";["DataType";"Uint8"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/input_uint8_big.txt.attr b/yt/yql/tests/sql/suites/blocks/input_uint8_big.txt.attr new file mode 100644 index 0000000000..619dbdd1bf --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/input_uint8_big.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint8"]]; + ["subkey";["DataType";"Uint8"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/blocks/interval_add_date.cfg b/yt/yql/tests/sql/suites/blocks/interval_add_date.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_add_date.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/interval_add_date.sql b/yt/yql/tests/sql/suites/blocks/interval_add_date.sql new file mode 100644 index 0000000000..bb395b7f75 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_add_date.sql @@ -0,0 +1,31 @@ +USE plato; + +SELECT + b.ni + a.na, + b.wi + a.na, + b.ni + a.naz, + b.wi + a.naz, + b.ni + a.nd, + b.wi + a.nd, + b.ni + a.ndz, + b.wi + a.ndz, + b.ni + a.nt, + b.wi + a.nt, + b.ni + a.ntz, + b.wi + a.ntz, + + b.ni + a.wa, + b.wi + a.wa, + b.ni + a.waz, + b.wi + a.waz, + b.ni + a.wd, + b.wi + a.wd, + b.ni + a.wdz, + b.wi + a.wdz, + b.ni + a.wt, + b.wi + a.wt, + b.ni + a.wtz, + b.wi + a.wtz +FROM Dates as a CROSS JOIN Dates as b + + diff --git a/yt/yql/tests/sql/suites/blocks/interval_add_date_scalar.cfg b/yt/yql/tests/sql/suites/blocks/interval_add_date_scalar.cfg new file mode 100644 index 0000000000..8d2d2a19fc --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_add_date_scalar.cfg @@ -0,0 +1 @@ +in Dates dates.txt diff --git a/yt/yql/tests/sql/suites/blocks/interval_add_date_scalar.sql b/yt/yql/tests/sql/suites/blocks/interval_add_date_scalar.sql new file mode 100644 index 0000000000..1cc7f48940 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_add_date_scalar.sql @@ -0,0 +1,57 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin,FuseMultiOutsWithOuterMaps"; + +SELECT + ni + Date("2000-01-01") , + wi + Date("2000-01-01"), + ni + TzDate("2000-01-01,Europe/Moscow"), + wi + TzDate("2000-01-01,Europe/Moscow"), + ni + Datetime("2000-01-01T03:04:05Z"), + wi + Datetime("2000-01-01T03:04:05Z"), + ni + TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + wi + TzDatetime("2000-01-01T03:04:05,Europe/Moscow"), + ni + Timestamp("2000-01-01T03:04:05.678912Z"), + wi + Timestamp("2000-01-01T03:04:05.678912Z"), + ni + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + wi + TzTimestamp("2000-01-01T03:04:05.678912,Europe/Moscow"), + ni + Date32("1900-01-01"), + wi + Date32("1900-01-01"), + ni + Datetime64("1900-01-01T03:04:05Z"), + wi + Datetime64("1900-01-01T03:04:05Z"), + ni + Timestamp64("1900-01-01T03:04:05.678912Z"), + wi + Timestamp64("1900-01-01T03:04:05.678912Z"), + ni + TzDate32("1900-01-01,Europe/Moscow"), + wi + TzDate32("1900-01-01,Europe/Moscow"), + ni + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + wi + TzDatetime64("1900-01-01T03:04:05,Europe/Moscow"), + ni + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), + wi + TzTimestamp64("1900-01-01T03:04:05.678912,Europe/Moscow"), +FROM Dates; + +SELECT + Interval("P1D") + na, + Interval64("P1D") + na, + Interval("P1D") + naz, + Interval64("P1D") + naz, + Interval("P1D") + nd, + Interval64("P1D") + nd, + Interval("P1D") + ndz, + Interval64("P1D") + ndz, + Interval("P1D") + nt, + Interval64("P1D") + nt, + Interval("P1D") + ntz, + Interval64("P1D") + ntz, + Interval("P1D") + wa, + Interval64("P1D") + wa, + Interval("P1D") + wd, + Interval64("P1D") + wd, + Interval("P1D") + wt, + Interval64("P1D") + wt, + Interval("P1D") + waz, + Interval64("P1D") + waz, + Interval("P1D") + wdz, + Interval64("P1D") + wdz, + Interval("P1D") + wtz, + Interval64("P1D") + wtz +FROM Dates; + diff --git a/yt/yql/tests/sql/suites/blocks/interval_add_interval.cfg b/yt/yql/tests/sql/suites/blocks/interval_add_interval.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_add_interval.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/interval_add_interval.sql b/yt/yql/tests/sql/suites/blocks/interval_add_interval.sql new file mode 100644 index 0000000000..e1e84d209a --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_add_interval.sql @@ -0,0 +1,10 @@ +USE plato; + +SELECT + a.ni + b.ni, + a.ni + b.wi, + a.wi + b.ni, + a.wi + b.wi +FROM Dates AS a CROSS JOIN Dates as b + + diff --git a/yt/yql/tests/sql/suites/blocks/interval_add_interval_scalar.cfg b/yt/yql/tests/sql/suites/blocks/interval_add_interval_scalar.cfg new file mode 100644 index 0000000000..8d2d2a19fc --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_add_interval_scalar.cfg @@ -0,0 +1 @@ +in Dates dates.txt diff --git a/yt/yql/tests/sql/suites/blocks/interval_add_interval_scalar.sql b/yt/yql/tests/sql/suites/blocks/interval_add_interval_scalar.sql new file mode 100644 index 0000000000..df0d35160c --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_add_interval_scalar.sql @@ -0,0 +1,16 @@ +USE plato; + +SELECT + ni + Interval("P1D"), + wi + Interval("P1D"), + ni + Interval64("P1D"), + wi + Interval64("P1D") +FROM Dates; + +SELECT + Interval("P1D") + ni, + Interval("P1D") + wi, + Interval64("P1D") + ni, + Interval64("P1D") + wi +FROM Dates; + diff --git a/yt/yql/tests/sql/suites/blocks/interval_div.cfg b/yt/yql/tests/sql/suites/blocks/interval_div.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_div.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/interval_div.sql b/yt/yql/tests/sql/suites/blocks/interval_div.sql new file mode 100644 index 0000000000..acbb470663 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_div.sql @@ -0,0 +1,22 @@ +USE plato; + +SELECT + a.ni / b.i8, + a.wi / b.i8, + a.ni / b.u8, + a.wi / b.u8, + a.ni / b.i16, + a.wi / b.i16, + a.ni / b.u16, + a.wi / b.u16, + a.ni / b.i32, + a.wi / b.i32, + a.ni / b.u32, + a.wi / b.u32, + a.ni / b.i64, + a.wi / b.i64, + a.ni / b.u64, + a.wi / b.u64, +FROM Dates as a CROSS JOIN Dates as b; + + diff --git a/yt/yql/tests/sql/suites/blocks/interval_div_scalar.cfg b/yt/yql/tests/sql/suites/blocks/interval_div_scalar.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_div_scalar.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/interval_div_scalar.sql b/yt/yql/tests/sql/suites/blocks/interval_div_scalar.sql new file mode 100644 index 0000000000..2c9dbb8cb9 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_div_scalar.sql @@ -0,0 +1,41 @@ +USE plato; + +SELECT + ni / Int8("10"), + wi / Int8("10"), + ni / Uint8("11"), + wi / Uint8("11"), + ni / Int16("12"), + wi / Int16("12"), + ni / Uint16("13"), + wi / Uint16("13"), + ni / Int32("14"), + wi / Int32("14"), + ni / Uint32("15"), + wi / Uint32("15"), + ni / Int64("16"), + wi / Int64("16"), + ni / Uint64("17"), + wi / Uint64("17"), +FROM Dates; + +SELECT + Interval("P1D") / i8, + Interval64("P1D") / i8, + Interval("P1D") / u8, + Interval64("P1D") / u8, + Interval("P1D") / i16, + Interval64("P1D") / i16, + Interval("P1D") / u16, + Interval64("P1D") / u16, + Interval("P1D") / i32, + Interval64("P1D") / i32, + Interval("P1D") / u32, + Interval64("P1D") / u32, + Interval("P1D") / i64, + Interval64("P1D") / i64, + Interval("P1D") / u64, + Interval64("P1D") / u64 +FROM Dates; + + diff --git a/yt/yql/tests/sql/suites/blocks/interval_mul.cfg b/yt/yql/tests/sql/suites/blocks/interval_mul.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_mul.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/interval_mul.sql b/yt/yql/tests/sql/suites/blocks/interval_mul.sql new file mode 100644 index 0000000000..bd5727a48e --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_mul.sql @@ -0,0 +1,40 @@ +USE plato; + +SELECT + a.ni * b.i8, + a.wi * b.i8, + a.ni * b.u8, + a.wi * b.u8, + a.ni * b.i16, + a.wi * b.i16, + a.ni * b.u16, + a.wi * b.u16, + a.ni * b.i32, + a.wi * b.i32, + a.ni * b.u32, + a.wi * b.u32, + a.ni * b.i64, + a.wi * b.i64, + a.ni * b.u64, + a.wi * b.u64, +FROM Dates as a CROSS JOIN Dates as b; + +SELECT + b.i8 * a.ni, + b.i8 * a.wi, + b.u8 * a.ni, + b.u8 * a.wi, + b.i16 * a.ni, + b.i16 * a.wi, + b.u16 * a.ni, + b.u16 * a.wi, + b.i32 * a.ni, + b.i32 * a.wi, + b.u32 * a.ni, + b.u32 * a.wi, + b.i64 * a.ni, + b.i64 * a.wi, + b.u64 * a.ni, + b.u64 * a.wi, +FROM Dates as a CROSS JOIN Dates as b; + diff --git a/yt/yql/tests/sql/suites/blocks/interval_mul_scalar.cfg b/yt/yql/tests/sql/suites/blocks/interval_mul_scalar.cfg new file mode 100644 index 0000000000..d0a66cb111 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_mul_scalar.cfg @@ -0,0 +1,2 @@ +in Dates dates.txt + diff --git a/yt/yql/tests/sql/suites/blocks/interval_mul_scalar.sql b/yt/yql/tests/sql/suites/blocks/interval_mul_scalar.sql new file mode 100644 index 0000000000..6fc2e88ad3 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_mul_scalar.sql @@ -0,0 +1,79 @@ +USE plato; + +SELECT + ni * Int8("10"), + wi * Int8("10"), + ni * Uint8("11"), + wi * Uint8("11"), + ni * Int16("12"), + wi * Int16("12"), + ni * Uint16("13"), + wi * Uint16("13"), + ni * Int32("14"), + wi * Int32("14"), + ni * Uint32("15"), + wi * Uint32("15"), + ni * Int64("16"), + wi * Int64("16"), + ni * Uint64("17"), + wi * Uint64("17"), +FROM Dates; + +SELECT + Int8("10") * ni, + Int8("10") * wi, + Uint8("11") * ni, + Uint8("11") * wi, + Int16("12") * ni, + Int16("12") * wi, + Uint16("13") * ni, + Uint16("13") * wi, + Int32("14") * ni, + Int32("14") * wi, + Uint32("15") * ni, + Uint32("15") * wi, + Int64("16") * ni, + Int64("16") * wi, + Uint64("17") * ni, + Uint64("17") * wi +FROM Dates; + +SELECT + Interval("P1D") * i8, + Interval64("P1D") * i8, + Interval("P1D") * u8, + Interval64("P1D") * u8, + Interval("P1D") * i16, + Interval64("P1D") * i16, + Interval("P1D") * u16, + Interval64("P1D") * u16, + Interval("P1D") * i32, + Interval64("P1D") * i32, + Interval("P1D") * u32, + Interval64("P1D") * u32, + Interval("P1D") * i64, + Interval64("P1D") * i64, + Interval("P1D") * u64, + Interval64("P1D") * u64 +FROM Dates; + +SELECT + i8 * Interval("P1D"), + i8 * Interval64("P1D"), + u8 * Interval("P1D"), + u8 * Interval64("P1D"), + i16 * Interval("P1D"), + i16 * Interval64("P1D"), + u16 * Interval("P1D"), + u16 * Interval64("P1D"), + i32 * Interval("P1D"), + i32 * Interval64("P1D"), + u32 * Interval("P1D"), + u32 * Interval64("P1D"), + i64 * Interval("P1D"), + i64 * Interval64("P1D"), + u64 * Interval("P1D"), + u64 * Interval64("P1D") +FROM Dates; + + diff --git a/yt/yql/tests/sql/suites/blocks/interval_sub_interval.cfg b/yt/yql/tests/sql/suites/blocks/interval_sub_interval.cfg new file mode 100644 index 0000000000..8d2d2a19fc --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_sub_interval.cfg @@ -0,0 +1 @@ +in Dates dates.txt diff --git a/yt/yql/tests/sql/suites/blocks/interval_sub_interval.sql b/yt/yql/tests/sql/suites/blocks/interval_sub_interval.sql new file mode 100644 index 0000000000..eaf0809d0b --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_sub_interval.sql @@ -0,0 +1,9 @@ +USE plato; + +SELECT + a.ni - b.ni, + a.ni - b.wi, + a.wi - b.ni, + a.wi - b.wi +FROM Dates as a CROSS JOIN Dates as b + diff --git a/yt/yql/tests/sql/suites/blocks/interval_sub_interval_scalar.cfg b/yt/yql/tests/sql/suites/blocks/interval_sub_interval_scalar.cfg new file mode 100644 index 0000000000..8d2d2a19fc --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_sub_interval_scalar.cfg @@ -0,0 +1 @@ +in Dates dates.txt diff --git a/yt/yql/tests/sql/suites/blocks/interval_sub_interval_scalar.sql b/yt/yql/tests/sql/suites/blocks/interval_sub_interval_scalar.sql new file mode 100644 index 0000000000..4339da03f9 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/interval_sub_interval_scalar.sql @@ -0,0 +1,16 @@ +USE plato; + +SELECT + ni - Interval("P1D"), + wi - Interval("P1D"), + ni - Interval64("P1D"), + wi - Interval64("P1D") +FROM Dates; + +SELECT + Interval("P1D") - ni, + Interval("P1D") - wi, + Interval64("P1D") - ni, + Interval64("P1D") - wi +FROM Dates; + diff --git a/yt/yql/tests/sql/suites/blocks/json_document_type.cfg b/yt/yql/tests/sql/suites/blocks/json_document_type.cfg new file mode 100644 index 0000000000..8e18b34b94 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/json_document_type.cfg @@ -0,0 +1 @@ +in Input input_json_document.txt diff --git a/yt/yql/tests/sql/suites/blocks/json_document_type.sql b/yt/yql/tests/sql/suites/blocks/json_document_type.sql new file mode 100644 index 0000000000..942f54bf80 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/json_document_type.sql @@ -0,0 +1,8 @@ +USE plato; + +SELECT + key, + SOME(val) as someVal, +FROM Input +GROUP BY key +ORDER BY key diff --git a/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_basic.cfg b/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_basic.cfg new file mode 100644 index 0000000000..34475912cb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_basic.cfg @@ -0,0 +1,2 @@ +in Input input_strings.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_basic.sql b/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_basic.sql new file mode 100644 index 0000000000..81a521ab93 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_basic.sql @@ -0,0 +1,17 @@ +USE plato; + +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin"; + + +$ns_tolower = ($x) -> (AssumeNonStrict(String::AsciiToLower($x))); +$ns_toupper = ($x) -> (AssumeNonStrict(String::AsciiToUpper($x))); + +-- full block +select * from Input where $ns_tolower(value) > "aaa" and subkey == "1"; + +-- partial block due to lazy non-strict node +select * from Input where subkey == "2" and $ns_toupper(value) <= "ZZZ"; + +-- full block - same non strict is used in first arg of AND +select * from Input where $ns_toupper(value) >= "AAA" and $ns_toupper(value) <= "ZZZ" and subkey == "3"; + diff --git a/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_nested.cfg b/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_nested.cfg new file mode 100644 index 0000000000..34475912cb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_nested.cfg @@ -0,0 +1,2 @@ +in Input input_strings.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_nested.sql b/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_nested.sql new file mode 100644 index 0000000000..2ae846ae4c --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_nested.sql @@ -0,0 +1,4 @@ +USE plato; + +-- partial blocks due to non strict in second arg of AND +select if(value > "aaa" and String::AsciiToLower(AssumeNonStrict(subkey)) > "3", "foo", "bar"), value, subkey from Input; diff --git a/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_with_scalar_ctx.cfg b/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_with_scalar_ctx.cfg new file mode 100644 index 0000000000..b65712414d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_with_scalar_ctx.cfg @@ -0,0 +1 @@ +in Input input_strings.txt diff --git a/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_with_scalar_ctx.sql b/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_with_scalar_ctx.sql new file mode 100644 index 0000000000..647de993e7 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/lazy_nonstrict_with_scalar_ctx.sql @@ -0,0 +1,10 @@ +USE plato; + +$one = select min(AssumeNonStrict(value)) from Input; +$two = select AssumeNonStrict(min(value)) from Input; + +-- fully converted to blocks - scalar context is assumed strict +select * from Input where subkey != "1" and value > $one; + +-- partially converted to blocks - AssumeStrict is calculated outside of scalar context +select * from Input where subkey != "2" and value > $two; diff --git a/yt/yql/tests/sql/suites/blocks/member.cfg b/yt/yql/tests/sql/suites/blocks/member.cfg new file mode 100644 index 0000000000..ed506aaf28 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/member.cfg @@ -0,0 +1 @@ +in Input input_struct.txt diff --git a/yt/yql/tests/sql/suites/blocks/member.sql b/yt/yql/tests/sql/suites/blocks/member.sql new file mode 100644 index 0000000000..199d5c17bd --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/member.sql @@ -0,0 +1,10 @@ +USE plato; + +SELECT + val.a as a, + <|qq:key,qkrq:"QKRQ"|> as q, + /* XXX: <AddMember> callable always expands to <AsStruct>. */ + AddMember(val, "k", key) as wik, + /* XXX: <RemoveMember> callable always expands to <AsStruct>. */ + RemoveMember(val, "x") as wox, +FROM Input; diff --git a/yt/yql/tests/sql/suites/blocks/minmax_strings.cfg b/yt/yql/tests/sql/suites/blocks/minmax_strings.cfg new file mode 100644 index 0000000000..476f4bfed1 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/minmax_strings.cfg @@ -0,0 +1 @@ +in Input input_strings_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/minmax_strings.sql b/yt/yql/tests/sql/suites/blocks/minmax_strings.sql new file mode 100644 index 0000000000..776834e93a --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/minmax_strings.sql @@ -0,0 +1,21 @@ +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +USE plato; + +select + key, + + max(s) as maxs, + min(s) as mins, + min(s_opt) as mins_opt, + max(s_opt) as maxs_opt, + + max(distinct utf) as dmaxs, + min(distinct utf) as dmins, + min(distinct s_opt) as dmins_opt, + max(distinct s_opt) as dmaxs_opt, + +from Input +group by key +order by key; + diff --git a/yt/yql/tests/sql/suites/blocks/minmax_strings_filter.cfg b/yt/yql/tests/sql/suites/blocks/minmax_strings_filter.cfg new file mode 100644 index 0000000000..476f4bfed1 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/minmax_strings_filter.cfg @@ -0,0 +1 @@ +in Input input_strings_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/minmax_strings_filter.sql b/yt/yql/tests/sql/suites/blocks/minmax_strings_filter.sql new file mode 100644 index 0000000000..3fe3c7b524 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/minmax_strings_filter.sql @@ -0,0 +1,17 @@ +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +USE plato; + +select + key, + + max(s) as maxs, + min(s) as mins, + min(s_opt) as mins_opt, + max(s_opt) as maxs_opt, + +from Input +where key != "1" and s not in ("7", "8") +group by key +order by key; + diff --git a/yt/yql/tests/sql/suites/blocks/minmax_tuple.cfg b/yt/yql/tests/sql/suites/blocks/minmax_tuple.cfg new file mode 100644 index 0000000000..b65712414d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/minmax_tuple.cfg @@ -0,0 +1 @@ +in Input input_strings.txt diff --git a/yt/yql/tests/sql/suites/blocks/minmax_tuple.sql b/yt/yql/tests/sql/suites/blocks/minmax_tuple.sql new file mode 100644 index 0000000000..a785e7c958 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/minmax_tuple.sql @@ -0,0 +1,16 @@ +pragma yt.UsePartitionsByKeysForFinalAgg="false"; + +USE plato; + +select + key, + min(AsTuple(subkey, value)) as min, + max(AsTuple(subkey, value)) as max, +from Input +group by key +order by key; + +select + min(AsTuple(subkey, value)) as min, + max(AsTuple(subkey, value)) as max, +from Input; diff --git a/yt/yql/tests/sql/suites/blocks/mod_uint64.cfg b/yt/yql/tests/sql/suites/blocks/mod_uint64.cfg new file mode 100644 index 0000000000..5ee9471fc0 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/mod_uint64.cfg @@ -0,0 +1 @@ +in Input input_uint64.txt diff --git a/yt/yql/tests/sql/suites/blocks/mod_uint64.sql b/yt/yql/tests/sql/suites/blocks/mod_uint64.sql new file mode 100644 index 0000000000..9de44e5756 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/mod_uint64.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key%subkey,999ul%key,subkey%0ul +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/mod_uint64_opt2.cfg b/yt/yql/tests/sql/suites/blocks/mod_uint64_opt2.cfg new file mode 100644 index 0000000000..46fee85c7f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/mod_uint64_opt2.cfg @@ -0,0 +1 @@ +in Input input_uint64_opt2.txt diff --git a/yt/yql/tests/sql/suites/blocks/mod_uint64_opt2.sql b/yt/yql/tests/sql/suites/blocks/mod_uint64_opt2.sql new file mode 100644 index 0000000000..9de44e5756 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/mod_uint64_opt2.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key%subkey,999ul%key,subkey%0ul +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/mul_uint64_opt2.cfg b/yt/yql/tests/sql/suites/blocks/mul_uint64_opt2.cfg new file mode 100644 index 0000000000..46fee85c7f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/mul_uint64_opt2.cfg @@ -0,0 +1 @@ +in Input input_uint64_opt2.txt diff --git a/yt/yql/tests/sql/suites/blocks/mul_uint64_opt2.sql b/yt/yql/tests/sql/suites/blocks/mul_uint64_opt2.sql new file mode 100644 index 0000000000..52cda1db0d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/mul_uint64_opt2.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key*subkey,1000ul*key,subkey*1ul +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/nested_optionals.cfg b/yt/yql/tests/sql/suites/blocks/nested_optionals.cfg new file mode 100644 index 0000000000..c0f7c37ee1 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/nested_optionals.cfg @@ -0,0 +1 @@ +in Input input_uint64_nested_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/nested_optionals.sql b/yt/yql/tests/sql/suites/blocks/nested_optionals.sql new file mode 100644 index 0000000000..f14105be2e --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/nested_optionals.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key+1u,subkey +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/not.cfg b/yt/yql/tests/sql/suites/blocks/not.cfg new file mode 100644 index 0000000000..e4a99991a0 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/not.cfg @@ -0,0 +1 @@ +in Input input_bool.txt diff --git a/yt/yql/tests/sql/suites/blocks/not.sql b/yt/yql/tests/sql/suites/blocks/not.sql new file mode 100644 index 0000000000..6b7883d03d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/not.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key,subkey,not key +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/not_opt.cfg b/yt/yql/tests/sql/suites/blocks/not_opt.cfg new file mode 100644 index 0000000000..a159493a2b --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/not_opt.cfg @@ -0,0 +1 @@ +in Input input_bool_opt.txt diff --git a/yt/yql/tests/sql/suites/blocks/not_opt.sql b/yt/yql/tests/sql/suites/blocks/not_opt.sql new file mode 100644 index 0000000000..6b7883d03d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/not_opt.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key,subkey,not key +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/partial_blocks1.cfg b/yt/yql/tests/sql/suites/blocks/partial_blocks1.cfg new file mode 100644 index 0000000000..5ee9471fc0 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/partial_blocks1.cfg @@ -0,0 +1 @@ +in Input input_uint64.txt diff --git a/yt/yql/tests/sql/suites/blocks/partial_blocks1.sql b/yt/yql/tests/sql/suites/blocks/partial_blocks1.sql new file mode 100644 index 0000000000..98b1bbd00d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/partial_blocks1.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + 2*(key+subkey),1ul+key+key+key,subkey+2ul,key +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/pg.cfg b/yt/yql/tests/sql/suites/blocks/pg.cfg new file mode 100644 index 0000000000..72b51dc777 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg.cfg @@ -0,0 +1 @@ +in Input input_pg.txt diff --git a/yt/yql/tests/sql/suites/blocks/pg.sql b/yt/yql/tests/sql/suites/blocks/pg.sql new file mode 100644 index 0000000000..050d81b633 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg.sql @@ -0,0 +1,9 @@ +USE plato; + +SELECT + a, + b, + c, + d, + len(d) +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/pg_call.cfg b/yt/yql/tests/sql/suites/blocks/pg_call.cfg new file mode 100644 index 0000000000..72b51dc777 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_call.cfg @@ -0,0 +1 @@ +in Input input_pg.txt diff --git a/yt/yql/tests/sql/suites/blocks/pg_call.sql b/yt/yql/tests/sql/suites/blocks/pg_call.sql new file mode 100644 index 0000000000..cb5def9f51 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_call.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + a || a, a || 'x'p, c + c, c * 10p, Pg::upper(a), Pg::concat(a,99) +FROM Input + diff --git a/yt/yql/tests/sql/suites/blocks/pg_from_dates.cfg b/yt/yql/tests/sql/suites/blocks/pg_from_dates.cfg new file mode 100644 index 0000000000..76186af27f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_from_dates.cfg @@ -0,0 +1 @@ +in Input input_from_pg_dates.txt diff --git a/yt/yql/tests/sql/suites/blocks/pg_from_dates.sql b/yt/yql/tests/sql/suites/blocks/pg_from_dates.sql new file mode 100644 index 0000000000..d8fe47bd32 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_from_dates.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + FromPg(a), FromPg(b) +FROM Input + diff --git a/yt/yql/tests/sql/suites/blocks/pg_sort.cfg b/yt/yql/tests/sql/suites/blocks/pg_sort.cfg new file mode 100644 index 0000000000..5356944180 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_sort.cfg @@ -0,0 +1 @@ +in Input input_pg_arr.txt diff --git a/yt/yql/tests/sql/suites/blocks/pg_sort.sql b/yt/yql/tests/sql/suites/blocks/pg_sort.sql new file mode 100644 index 0000000000..8d5fcffce2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_sort.sql @@ -0,0 +1,5 @@ +USE plato; +SELECT + * +FROM Input +ORDER BY a,b desc,c desc diff --git a/yt/yql/tests/sql/suites/blocks/pg_to_dates.cfg b/yt/yql/tests/sql/suites/blocks/pg_to_dates.cfg new file mode 100644 index 0000000000..e0f8a9c251 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_to_dates.cfg @@ -0,0 +1 @@ +in Input input_to_pg_dates.txt diff --git a/yt/yql/tests/sql/suites/blocks/pg_to_dates.sql b/yt/yql/tests/sql/suites/blocks/pg_to_dates.sql new file mode 100644 index 0000000000..95dcb9db02 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_to_dates.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + ToPg(a), ToPg(b), ToPg(c), ToPg(d), ToPg(e), ToPg(f) +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/pg_to_interval.cfg b/yt/yql/tests/sql/suites/blocks/pg_to_interval.cfg new file mode 100644 index 0000000000..9280de6a86 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_to_interval.cfg @@ -0,0 +1 @@ +in Input input_to_pg_interval.txt diff --git a/yt/yql/tests/sql/suites/blocks/pg_to_interval.sql b/yt/yql/tests/sql/suites/blocks/pg_to_interval.sql new file mode 100644 index 0000000000..094f64ae04 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_to_interval.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + ToPg(a), ToPg(b) +FROM Input + diff --git a/yt/yql/tests/sql/suites/blocks/pg_to_numbers.cfg b/yt/yql/tests/sql/suites/blocks/pg_to_numbers.cfg new file mode 100644 index 0000000000..5d629ee015 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_to_numbers.cfg @@ -0,0 +1,2 @@ +in Input input_to_pg_numbers.txt + diff --git a/yt/yql/tests/sql/suites/blocks/pg_to_numbers.sql b/yt/yql/tests/sql/suites/blocks/pg_to_numbers.sql new file mode 100644 index 0000000000..b220cc3050 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_to_numbers.sql @@ -0,0 +1,10 @@ +USE plato; + +SELECT + ToPg(i8), ToPg(ui8), + ToPg(i16), ToPg(ui16), + ToPg(i32), ToPg(ui32), + ToPg(i64), ToPg(ui64), + ToPg(f4), ToPg(f8) +FROM Input + diff --git a/yt/yql/tests/sql/suites/blocks/pg_to_strings.cfg b/yt/yql/tests/sql/suites/blocks/pg_to_strings.cfg new file mode 100644 index 0000000000..1b143d34c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_to_strings.cfg @@ -0,0 +1,2 @@ +in Input input_to_pg_strings.txt + diff --git a/yt/yql/tests/sql/suites/blocks/pg_to_strings.sql b/yt/yql/tests/sql/suites/blocks/pg_to_strings.sql new file mode 100644 index 0000000000..e1c3ad8b3d --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_to_strings.sql @@ -0,0 +1,15 @@ +USE plato; +pragma yt.DisableOptimizers="OutHorizontalJoin,HorizontalJoin,MultiHorizontalJoin"; + +SELECT + ToPg(s), ToPg(u), + ToPg(y), ToPg(j), + ToPg(jd) +FROM Input; + + +SELECT + ToPg(tzd), + ToPg(tzdt), ToPg(tzts), + ToPg(ud) +FROM Input; diff --git a/yt/yql/tests/sql/suites/blocks/pg_tofrom.cfg b/yt/yql/tests/sql/suites/blocks/pg_tofrom.cfg new file mode 100644 index 0000000000..eebfc3c8df --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_tofrom.cfg @@ -0,0 +1 @@ +in Input input_tofrom_pg.txt diff --git a/yt/yql/tests/sql/suites/blocks/pg_tofrom.sql b/yt/yql/tests/sql/suites/blocks/pg_tofrom.sql new file mode 100644 index 0000000000..0b6724ffa7 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_tofrom.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + ToPg(a), FromPg(b), FromPg(c), ToPg(d), ToPg(e), FromPg(f), ToPg(g) +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/pg_top_sort.cfg b/yt/yql/tests/sql/suites/blocks/pg_top_sort.cfg new file mode 100644 index 0000000000..5356944180 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_top_sort.cfg @@ -0,0 +1 @@ +in Input input_pg_arr.txt diff --git a/yt/yql/tests/sql/suites/blocks/pg_top_sort.sql b/yt/yql/tests/sql/suites/blocks/pg_top_sort.sql new file mode 100644 index 0000000000..0eabce49df --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/pg_top_sort.sql @@ -0,0 +1,5 @@ +USE plato; +SELECT + * +FROM Input +ORDER BY a,b desc,c desc LIMIT 3 diff --git a/yt/yql/tests/sql/suites/blocks/sort_one_asc.cfg b/yt/yql/tests/sql/suites/blocks/sort_one_asc.cfg new file mode 100644 index 0000000000..346b6ff2a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/sort_one_asc.cfg @@ -0,0 +1 @@ +in Input input_top.txt diff --git a/yt/yql/tests/sql/suites/blocks/sort_one_asc.sql b/yt/yql/tests/sql/suites/blocks/sort_one_asc.sql new file mode 100644 index 0000000000..311e4b871b --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/sort_one_asc.sql @@ -0,0 +1,7 @@ +USE plato; +pragma yt.UseNativeDescSort; + +SELECT + subkey+0 as subkey1, value +FROM Input +ORDER BY subkey1, value; diff --git a/yt/yql/tests/sql/suites/blocks/sort_one_desc.cfg b/yt/yql/tests/sql/suites/blocks/sort_one_desc.cfg new file mode 100644 index 0000000000..346b6ff2a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/sort_one_desc.cfg @@ -0,0 +1 @@ +in Input input_top.txt diff --git a/yt/yql/tests/sql/suites/blocks/sort_one_desc.sql b/yt/yql/tests/sql/suites/blocks/sort_one_desc.sql new file mode 100644 index 0000000000..154842bc63 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/sort_one_desc.sql @@ -0,0 +1,7 @@ +USE plato; +pragma yt.UseNativeDescSort; + +SELECT + subkey+0 as subkey1, value +FROM Input +ORDER BY subkey1, value desc; diff --git a/yt/yql/tests/sql/suites/blocks/sort_two_asc.cfg b/yt/yql/tests/sql/suites/blocks/sort_two_asc.cfg new file mode 100644 index 0000000000..346b6ff2a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/sort_two_asc.cfg @@ -0,0 +1 @@ +in Input input_top.txt diff --git a/yt/yql/tests/sql/suites/blocks/sort_two_asc.sql b/yt/yql/tests/sql/suites/blocks/sort_two_asc.sql new file mode 100644 index 0000000000..a379cc27bf --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/sort_two_asc.sql @@ -0,0 +1,7 @@ +USE plato; +pragma yt.UseNativeDescSort; + +SELECT + key, subkey+0 as subkey1, value +FROM Input +ORDER BY key, subkey1, value; diff --git a/yt/yql/tests/sql/suites/blocks/sort_two_desc.cfg b/yt/yql/tests/sql/suites/blocks/sort_two_desc.cfg new file mode 100644 index 0000000000..346b6ff2a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/sort_two_desc.cfg @@ -0,0 +1 @@ +in Input input_top.txt diff --git a/yt/yql/tests/sql/suites/blocks/sort_two_desc.sql b/yt/yql/tests/sql/suites/blocks/sort_two_desc.sql new file mode 100644 index 0000000000..bbb338cf3b --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/sort_two_desc.sql @@ -0,0 +1,7 @@ +USE plato; +pragma yt.UseNativeDescSort; + +SELECT + key, subkey+0 as subkey1, value +FROM Input +ORDER BY key desc, subkey1 desc, value; diff --git a/yt/yql/tests/sql/suites/blocks/sort_two_mix.cfg b/yt/yql/tests/sql/suites/blocks/sort_two_mix.cfg new file mode 100644 index 0000000000..346b6ff2a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/sort_two_mix.cfg @@ -0,0 +1 @@ +in Input input_top.txt diff --git a/yt/yql/tests/sql/suites/blocks/sort_two_mix.sql b/yt/yql/tests/sql/suites/blocks/sort_two_mix.sql new file mode 100644 index 0000000000..9d7e8fd637 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/sort_two_mix.sql @@ -0,0 +1,7 @@ +USE plato; +pragma yt.UseNativeDescSort; + +SELECT + key, subkey+0 as subkey1, value +FROM Input +ORDER BY key asc, subkey1 desc, value; diff --git a/yt/yql/tests/sql/suites/blocks/string_as_agg_key.cfg b/yt/yql/tests/sql/suites/blocks/string_as_agg_key.cfg new file mode 100644 index 0000000000..84150a8314 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/string_as_agg_key.cfg @@ -0,0 +1 @@ +in Input input_int32_string.txt diff --git a/yt/yql/tests/sql/suites/blocks/string_as_agg_key.sql b/yt/yql/tests/sql/suites/blocks/string_as_agg_key.sql new file mode 100644 index 0000000000..25ead30441 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/string_as_agg_key.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT DISTINCT value, value_utf FROM Input ORDER BY value; +SELECT DISTINCT value, FROM Input ORDER BY value; + diff --git a/yt/yql/tests/sql/suites/blocks/string_filter.cfg b/yt/yql/tests/sql/suites/blocks/string_filter.cfg new file mode 100644 index 0000000000..84150a8314 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/string_filter.cfg @@ -0,0 +1 @@ +in Input input_int32_string.txt diff --git a/yt/yql/tests/sql/suites/blocks/string_filter.sql b/yt/yql/tests/sql/suites/blocks/string_filter.sql new file mode 100644 index 0000000000..2cb1054487 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/string_filter.sql @@ -0,0 +1,7 @@ +USE plato; + +SELECT + key, key + subkey, value, value_utf +FROM Input +WHERE subkey != 4 +ORDER BY key diff --git a/yt/yql/tests/sql/suites/blocks/string_len_and_cmp.cfg b/yt/yql/tests/sql/suites/blocks/string_len_and_cmp.cfg new file mode 100644 index 0000000000..84150a8314 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/string_len_and_cmp.cfg @@ -0,0 +1 @@ +in Input input_int32_string.txt diff --git a/yt/yql/tests/sql/suites/blocks/string_len_and_cmp.sql b/yt/yql/tests/sql/suites/blocks/string_len_and_cmp.sql new file mode 100644 index 0000000000..6450080bd5 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/string_len_and_cmp.sql @@ -0,0 +1,42 @@ +USE plato; + +SELECT + key, + + value == value_utf, + value_utf != value, + value < value_utf, + value_utf <= value_utf, + value > value_utf, + value_utf >= value_utf, + + value == 'foo', + 'foo' != value, + value < 'foo', + 'тест' <= value_utf, + value > 'foo', + 'проверка'u >= value_utf, + + '' == value_utf, + '' != value, + '' < value_utf, + '' <= value_utf, + '' > value_utf, + '' >= value_utf, + + value == ''u, + value_utf != ''u, + value < ''u, + value_utf <= ''u, + value > ''u, + value_utf >= ''u, + + len(value), + len(value_utf), + len(''), + len(''u), + len('проверка'), + len('тест'u), + +FROM Input +ORDER BY key diff --git a/yt/yql/tests/sql/suites/blocks/string_pass.cfg b/yt/yql/tests/sql/suites/blocks/string_pass.cfg new file mode 100644 index 0000000000..84150a8314 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/string_pass.cfg @@ -0,0 +1 @@ +in Input input_int32_string.txt diff --git a/yt/yql/tests/sql/suites/blocks/string_pass.sql b/yt/yql/tests/sql/suites/blocks/string_pass.sql new file mode 100644 index 0000000000..e58e6abd97 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/string_pass.sql @@ -0,0 +1,6 @@ +USE plato; + +SELECT + key, key + subkey, value, value_utf +FROM Input +ORDER BY key diff --git a/yt/yql/tests/sql/suites/blocks/string_with.cfg b/yt/yql/tests/sql/suites/blocks/string_with.cfg new file mode 100644 index 0000000000..84150a8314 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/string_with.cfg @@ -0,0 +1 @@ +in Input input_int32_string.txt diff --git a/yt/yql/tests/sql/suites/blocks/string_with.sql b/yt/yql/tests/sql/suites/blocks/string_with.sql new file mode 100644 index 0000000000..dc677c8c28 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/string_with.sql @@ -0,0 +1,22 @@ +pragma AnsiLike; +pragma warning("disable", "4510"); + +USE plato; + +SELECT + key, + + YQL::StringContains(value, value_utf), + YQL::StringContains(value, 'o'), + value like 'o', + YQL::StringContains('foobar'u, value), + + StartsWith(value, value_utf), + EndsWith(value, 'ar'u), + StartsWith('тестпроверка'u, value_utf), + EndsWith('тестпроверка'u, value_utf), + + value like 'ba%ar', + value_utf like 'про%ерка', +FROM Input +ORDER BY key diff --git a/yt/yql/tests/sql/suites/blocks/struct_type.cfg b/yt/yql/tests/sql/suites/blocks/struct_type.cfg new file mode 100644 index 0000000000..ed506aaf28 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/struct_type.cfg @@ -0,0 +1 @@ +in Input input_struct.txt diff --git a/yt/yql/tests/sql/suites/blocks/struct_type.sql b/yt/yql/tests/sql/suites/blocks/struct_type.sql new file mode 100644 index 0000000000..942f54bf80 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/struct_type.sql @@ -0,0 +1,8 @@ +USE plato; + +SELECT + key, + SOME(val) as someVal, +FROM Input +GROUP BY key +ORDER BY key diff --git a/yt/yql/tests/sql/suites/blocks/sub_uint64_opt2.cfg b/yt/yql/tests/sql/suites/blocks/sub_uint64_opt2.cfg new file mode 100644 index 0000000000..46fee85c7f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/sub_uint64_opt2.cfg @@ -0,0 +1 @@ +in Input input_uint64_opt2.txt diff --git a/yt/yql/tests/sql/suites/blocks/sub_uint64_opt2.sql b/yt/yql/tests/sql/suites/blocks/sub_uint64_opt2.sql new file mode 100644 index 0000000000..28a74bab35 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/sub_uint64_opt2.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key-subkey,1000ul-key,subkey-1ul +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/top_sort_one_asc.cfg b/yt/yql/tests/sql/suites/blocks/top_sort_one_asc.cfg new file mode 100644 index 0000000000..346b6ff2a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/top_sort_one_asc.cfg @@ -0,0 +1 @@ +in Input input_top.txt diff --git a/yt/yql/tests/sql/suites/blocks/top_sort_one_asc.sql b/yt/yql/tests/sql/suites/blocks/top_sort_one_asc.sql new file mode 100644 index 0000000000..6db7f8ea15 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/top_sort_one_asc.sql @@ -0,0 +1,7 @@ +USE plato; +pragma yt.UseNativeDescSort; + +SELECT + subkey+0 as subkey1, value +FROM Input +ORDER BY subkey1, value limit 2; diff --git a/yt/yql/tests/sql/suites/blocks/top_sort_one_desc.cfg b/yt/yql/tests/sql/suites/blocks/top_sort_one_desc.cfg new file mode 100644 index 0000000000..346b6ff2a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/top_sort_one_desc.cfg @@ -0,0 +1 @@ +in Input input_top.txt diff --git a/yt/yql/tests/sql/suites/blocks/top_sort_one_desc.sql b/yt/yql/tests/sql/suites/blocks/top_sort_one_desc.sql new file mode 100644 index 0000000000..d0f391964f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/top_sort_one_desc.sql @@ -0,0 +1,7 @@ +USE plato; +pragma yt.UseNativeDescSort; + +SELECT + subkey+0 as subkey1, value +FROM Input +ORDER BY subkey1 desc, value limit 2; diff --git a/yt/yql/tests/sql/suites/blocks/top_sort_two_asc.cfg b/yt/yql/tests/sql/suites/blocks/top_sort_two_asc.cfg new file mode 100644 index 0000000000..346b6ff2a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/top_sort_two_asc.cfg @@ -0,0 +1 @@ +in Input input_top.txt diff --git a/yt/yql/tests/sql/suites/blocks/top_sort_two_asc.sql b/yt/yql/tests/sql/suites/blocks/top_sort_two_asc.sql new file mode 100644 index 0000000000..3e056b21be --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/top_sort_two_asc.sql @@ -0,0 +1,7 @@ +USE plato; +pragma yt.UseNativeDescSort; + +SELECT + key, subkey+0 as subkey1, value +FROM Input +ORDER BY key, subkey1, value limit 2; diff --git a/yt/yql/tests/sql/suites/blocks/top_sort_two_desc.cfg b/yt/yql/tests/sql/suites/blocks/top_sort_two_desc.cfg new file mode 100644 index 0000000000..346b6ff2a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/top_sort_two_desc.cfg @@ -0,0 +1 @@ +in Input input_top.txt diff --git a/yt/yql/tests/sql/suites/blocks/top_sort_two_desc.sql b/yt/yql/tests/sql/suites/blocks/top_sort_two_desc.sql new file mode 100644 index 0000000000..d8b6927e0a --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/top_sort_two_desc.sql @@ -0,0 +1,7 @@ +USE plato; +pragma yt.UseNativeDescSort; + +SELECT + key, subkey+0 as subkey1, value +FROM Input +ORDER BY key desc, subkey1 desc, value limit 2; diff --git a/yt/yql/tests/sql/suites/blocks/top_sort_two_mix.cfg b/yt/yql/tests/sql/suites/blocks/top_sort_two_mix.cfg new file mode 100644 index 0000000000..346b6ff2a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/top_sort_two_mix.cfg @@ -0,0 +1 @@ +in Input input_top.txt diff --git a/yt/yql/tests/sql/suites/blocks/top_sort_two_mix.sql b/yt/yql/tests/sql/suites/blocks/top_sort_two_mix.sql new file mode 100644 index 0000000000..067e45fde2 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/top_sort_two_mix.sql @@ -0,0 +1,7 @@ +USE plato; +pragma yt.UseNativeDescSort; + +SELECT + key, subkey+0 as subkey1, value +FROM Input +ORDER BY key asc, subkey1 desc, value limit 2; diff --git a/yt/yql/tests/sql/suites/blocks/tuple_nth.cfg b/yt/yql/tests/sql/suites/blocks/tuple_nth.cfg new file mode 100644 index 0000000000..d2b033ce45 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/tuple_nth.cfg @@ -0,0 +1 @@ +in Input input_int64.txt diff --git a/yt/yql/tests/sql/suites/blocks/tuple_nth.sql b/yt/yql/tests/sql/suites/blocks/tuple_nth.sql new file mode 100644 index 0000000000..74b1c9d800 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/tuple_nth.sql @@ -0,0 +1,16 @@ +USE plato; + +insert into @tmp +SELECT + key, + (subkey,key) as a, + (1,key) as b, + Just((subkey,key)) as c, + Just((Just(subkey),key)) as d, + Nothing(Tuple<Int32,Int32>?) as e, + Nothing(Tuple<Int32?,Int32>?) as f, +FROM Input; + +commit; + +select a.0,a.1,b.0,b.1,c.0,c.1,d.0,d.1,e.0,e.1,f.0,f.1 from @tmp; diff --git a/yt/yql/tests/sql/suites/blocks/tuple_type.cfg b/yt/yql/tests/sql/suites/blocks/tuple_type.cfg new file mode 100644 index 0000000000..2c1468d47f --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/tuple_type.cfg @@ -0,0 +1 @@ +in Input input_tuple.txt diff --git a/yt/yql/tests/sql/suites/blocks/tuple_type.sql b/yt/yql/tests/sql/suites/blocks/tuple_type.sql new file mode 100644 index 0000000000..e1f04fe2de --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/tuple_type.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + key+1u, (3, 4.0), value +FROM Input diff --git a/yt/yql/tests/sql/suites/blocks/type_and_callable_stats.cfg b/yt/yql/tests/sql/suites/blocks/type_and_callable_stats.cfg new file mode 100644 index 0000000000..6a38002573 --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/type_and_callable_stats.cfg @@ -0,0 +1,4 @@ +with_final_result_issues +in Input input_strings.txt +udf string_udf +udf re2_udf diff --git a/yt/yql/tests/sql/suites/blocks/type_and_callable_stats.sql b/yt/yql/tests/sql/suites/blocks/type_and_callable_stats.sql new file mode 100644 index 0000000000..5357170adb --- /dev/null +++ b/yt/yql/tests/sql/suites/blocks/type_and_callable_stats.sql @@ -0,0 +1,16 @@ +pragma BlockEngine='force'; + +USE plato; +$match = Re2::Match(@@\d+@@); +$grep = Re2::Grep('911'); + +SELECT + key, + String::EscapeC(value) as ok1, + $match(key) as no_block_udf1, + $grep(key) as no_block_udf2, + AsList(key) as no_block_list, + AsSet(key) as no_block_set_and_void, + cast(key as Double) as no_block_cast, + AsTuple(key, DyNumber("123")) as no_block_dynumber, +FROM Input; diff --git a/yt/yql/tests/sql/suites/case/case_multi_val.sql b/yt/yql/tests/sql/suites/case/case_multi_val.sql new file mode 100644 index 0000000000..2a70a03167 --- /dev/null +++ b/yt/yql/tests/sql/suites/case/case_multi_val.sql @@ -0,0 +1 @@ +select key, subkey, case value when "jar" then "JAR" when "foo" then "FOO" else value end as value from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/case/case_size_eq_cast.sql b/yt/yql/tests/sql/suites/case/case_size_eq_cast.sql new file mode 100644 index 0000000000..e5c5be7605 --- /dev/null +++ b/yt/yql/tests/sql/suites/case/case_size_eq_cast.sql @@ -0,0 +1 @@ +select key, subkey, case length(value) when cast(3 as smallint) then "JAR" else value end as value from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/case/case_then_else.sql b/yt/yql/tests/sql/suites/case/case_then_else.sql new file mode 100644 index 0000000000..5bdda9497f --- /dev/null +++ b/yt/yql/tests/sql/suites/case/case_then_else.sql @@ -0,0 +1 @@ +select case when key != subkey then subkey else value end from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/case/case_val_then_else.sql b/yt/yql/tests/sql/suites/case/case_val_then_else.sql new file mode 100644 index 0000000000..78ec7d4080 --- /dev/null +++ b/yt/yql/tests/sql/suites/case/case_val_then_else.sql @@ -0,0 +1 @@ +select case value when key then subkey else value end from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/case/case_val_when_then.sql b/yt/yql/tests/sql/suites/case/case_val_when_then.sql new file mode 100644 index 0000000000..55b6740500 --- /dev/null +++ b/yt/yql/tests/sql/suites/case/case_val_when_then.sql @@ -0,0 +1 @@ +select key, subkey, case value when subkey then "WAT" else value end as value from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/case/case_when_then.sql b/yt/yql/tests/sql/suites/case/case_when_then.sql new file mode 100644 index 0000000000..5d38925caa --- /dev/null +++ b/yt/yql/tests/sql/suites/case/case_when_then.sql @@ -0,0 +1 @@ +select key, subkey, case when value != subkey then "WAT" else value end as value from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/case/default.cfg b/yt/yql/tests/sql/suites/case/default.cfg new file mode 100644 index 0000000000..a1f7a5a9b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/case/default.cfg @@ -0,0 +1,4 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/coalesce/coalesce.cfg b/yt/yql/tests/sql/suites/coalesce/coalesce.cfg new file mode 100644 index 0000000000..5640285809 --- /dev/null +++ b/yt/yql/tests/sql/suites/coalesce/coalesce.cfg @@ -0,0 +1 @@ +in Input input_coalesce.txt diff --git a/yt/yql/tests/sql/suites/coalesce/coalesce.sql b/yt/yql/tests/sql/suites/coalesce/coalesce.sql new file mode 100644 index 0000000000..92c4778505 --- /dev/null +++ b/yt/yql/tests/sql/suites/coalesce/coalesce.sql @@ -0,0 +1 @@ +select coalesce(cast(value as int), 999) from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/coalesce/coalesce_few_opt.cfg b/yt/yql/tests/sql/suites/coalesce/coalesce_few_opt.cfg new file mode 100644 index 0000000000..64b3f61710 --- /dev/null +++ b/yt/yql/tests/sql/suites/coalesce/coalesce_few_opt.cfg @@ -0,0 +1 @@ +in Input optional.txt diff --git a/yt/yql/tests/sql/suites/coalesce/coalesce_few_opt.sql b/yt/yql/tests/sql/suites/coalesce/coalesce_few_opt.sql new file mode 100644 index 0000000000..1e2d541f60 --- /dev/null +++ b/yt/yql/tests/sql/suites/coalesce/coalesce_few_opt.sql @@ -0,0 +1,24 @@ +select + 'first', + coalesce(first_null, 22), + coalesce(first_num, 33), + coalesce(coalesce(first_null, 122), 42), + coalesce(coalesce(first_num, 133), 43), + coalesce(coalesce(coalesce(first_null, 222), 442), 100500), + coalesce(coalesce(coalesce(first_num, 233), 443), 100501), + 'second', + coalesce(second_null, 22), + coalesce(second_num, 33), + coalesce(coalesce(second_null, 122), 42), + coalesce(coalesce(second_num, 133), 43), + coalesce(coalesce(coalesce(second_null, 222), 442), 100500), + coalesce(coalesce(coalesce(second_num, 233), 443), 100501), + 'third', + coalesce(third_null, 22), + coalesce(third_num, 33), + coalesce(coalesce(third_null, 122), 42), + coalesce(coalesce(third_num, 133), 43), + coalesce(coalesce(coalesce(third_null, 222), 442), 100500), + coalesce(coalesce(coalesce(third_num, 233), 443), 100501), + 'end' +from plato.Input; diff --git a/yt/yql/tests/sql/suites/coalesce/coalesce_few_real.sql b/yt/yql/tests/sql/suites/coalesce/coalesce_few_real.sql new file mode 100644 index 0000000000..0eebc69cc2 --- /dev/null +++ b/yt/yql/tests/sql/suites/coalesce/coalesce_few_real.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +$optDuoFloat=Just(Just(cast(2.71 as float))); +$optDuoDouble=Just(Just(cast(3.14 as double))); +$optDuoFloatN=Just(Just(cast(null as float))); +$optDuoDoubleN=Just(Just(cast(null as double))); + +select + ($optDuoFloat ?? 0) ?? 1, + ($optDuoDouble ?? 41) ?? 42, + ($optDuoFloatN ?? 0) ?? 1., + ($optDuoDoubleN ?? 41.) ?? 42, + ($optDuoFloatN ?? cast(40.1 as float)) ?? cast(40.2 as float), + ($optDuoDoubleN ?? cast(40.1 as float)) ?? cast(40.2 as float), + (($optDuoFloatN ?? 0) ?? 1.) ?? 3, + (($optDuoDoubleN ?? 41) ?? 42) ?? 4, + 'end' +from plato.Input; diff --git a/yt/yql/tests/sql/suites/coalesce/coalesce_sugar.sql b/yt/yql/tests/sql/suites/coalesce/coalesce_sugar.sql new file mode 100644 index 0000000000..c9d2442ee8 --- /dev/null +++ b/yt/yql/tests/sql/suites/coalesce/coalesce_sugar.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +$data = (select key, cast(key as Int64)/100 as eval from plato.Input); +select case when eval < 5 then eval else cast(Null as Int64) end ?? -1, key from $data; diff --git a/yt/yql/tests/sql/suites/coalesce/default.cfg b/yt/yql/tests/sql/suites/coalesce/default.cfg new file mode 100644 index 0000000000..a1f7a5a9b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/coalesce/default.cfg @@ -0,0 +1,4 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/coalesce/optional.txt.attr b/yt/yql/tests/sql/suites/coalesce/optional.txt.attr new file mode 100644 index 0000000000..7962199d3e --- /dev/null +++ b/yt/yql/tests/sql/suites/coalesce/optional.txt.attr @@ -0,0 +1,85 @@ +{ + "_yql_row_spec" = {"Type" = [ + "StructType"; + [ + [ + "first_null"; + [ + "OptionalType"; + [ + "DataType"; + "Uint32" + ] + ] + ]; + [ + "first_num"; + [ + "OptionalType"; + [ + "DataType"; + "Uint32" + ] + ] + ]; + [ + "second_null"; + [ + "OptionalType"; + [ + "OptionalType"; + [ + "DataType"; + "Uint32" + ] + ] + ] + ]; + [ + "second_num"; + [ + "OptionalType"; + [ + "OptionalType"; + [ + "DataType"; + "Uint32" + ] + ] + ] + ]; + [ + "third_null"; + [ + "OptionalType"; + [ + "OptionalType"; + [ + "OptionalType"; + [ + "DataType"; + "Uint32" + ] + ] + ] + ] + ]; + [ + "third_num"; + [ + "OptionalType"; + [ + "OptionalType"; + [ + "OptionalType"; + [ + "DataType"; + "Uint32" + ] + ] + ] + ] + ] + ] + ]}; +} diff --git a/yt/yql/tests/sql/suites/column_group/default.cfg b/yt/yql/tests/sql/suites/column_group/default.cfg new file mode 100644 index 0000000000..ef47dfff66 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/default.cfg @@ -0,0 +1,3 @@ +in Input input.txt +providers yt +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/groups-lookup.cfg b/yt/yql/tests/sql/suites/column_group/groups-lookup.cfg new file mode 100644 index 0000000000..5bd531763a --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/groups-lookup.cfg @@ -0,0 +1,4 @@ +in Input input.txt +providers yt +pragma yt.ColumnGroupMode="perusage" +pragma yt.OptimizeFor="lookup" diff --git a/yt/yql/tests/sql/suites/column_group/groups-max.cfg b/yt/yql/tests/sql/suites/column_group/groups-max.cfg new file mode 100644 index 0000000000..dd3af3af12 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/groups-max.cfg @@ -0,0 +1,5 @@ +in Input input.txt +providers yt +pragma yt.ColumnGroupMode="perusage" +pragma yt.MaxColumnGroups="2" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/groups-perusage.cfg b/yt/yql/tests/sql/suites/column_group/groups-perusage.cfg new file mode 100644 index 0000000000..be63fb17e4 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/groups-perusage.cfg @@ -0,0 +1,4 @@ +in Input input.txt +providers yt +pragma yt.ColumnGroupMode="perusage" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/groups-single.cfg b/yt/yql/tests/sql/suites/column_group/groups-single.cfg new file mode 100644 index 0000000000..0ccae305ff --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/groups-single.cfg @@ -0,0 +1,4 @@ +in Input input.txt +providers yt +pragma yt.ColumnGroupMode="single" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/groups.sql b/yt/yql/tests/sql/suites/column_group/groups.sql new file mode 100644 index 0000000000..fe8ebf9ce9 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/groups.sql @@ -0,0 +1,6 @@ +USE plato; + +$i = select * from Input where a > "a"; + +select a,b,c,d from $i; +select c,d,e,f from $i; diff --git a/yt/yql/tests/sql/suites/column_group/hint-disable.cfg b/yt/yql/tests/sql/suites/column_group/hint-disable.cfg new file mode 100644 index 0000000000..eb97f5b81d --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint-disable.cfg @@ -0,0 +1,8 @@ +in Input input.txt +out Output1 output1.txt +out Output2 output2.txt +out Output3 output3.txt +out Output4 output4.txt +providers yt +pragma yt.ColumnGroupMode="disable" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/hint-perusage.cfg b/yt/yql/tests/sql/suites/column_group/hint-perusage.cfg new file mode 100644 index 0000000000..c426193038 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint-perusage.cfg @@ -0,0 +1,8 @@ +in Input input.txt +out Output1 output1.txt +out Output2 output2.txt +out Output3 output3.txt +out Output4 output4.txt +providers yt +pragma yt.ColumnGroupMode="perusage" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/hint-single.cfg b/yt/yql/tests/sql/suites/column_group/hint-single.cfg new file mode 100644 index 0000000000..2aab65b91e --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint-single.cfg @@ -0,0 +1,8 @@ +in Input input.txt +out Output1 output1.txt +out Output2 output2.txt +out Output3 output3.txt +out Output4 output4.txt +providers yt +pragma yt.ColumnGroupMode="single" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/hint.sql b/yt/yql/tests/sql/suites/column_group/hint.sql new file mode 100644 index 0000000000..5a04cc74f0 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint.sql @@ -0,0 +1,20 @@ +USE plato; + +$i1 = select * from Input where a > "a"; -- several publish consumers with same groups +$i2 = select * from Input where a > "a1"; -- several publish consumers with different groups +$i3 = select * from Input where a < "a2"; -- several consumers including publish +$i4 = select * from Input where a != "a"; -- several publish consumers with and without groups + +-- test column group spec normalization +insert into Output1 with column_groups="{g1=[a;b;c];def=#}" select * from $i1; +insert into Output1 with column_groups="{def=#;g1=[c;a;b];}" select * from $i2; + +insert into Output2 with column_groups="{def=#}" select * from $i2; +insert into Output2 with column_groups="{def=#}" select * from $i3; + +insert into Output3 with column_groups="{g1=[a;b;c];def=#}" select * from $i1; +insert into Output3 with column_groups="{g1=[a;b;c];def=#}" select * from $i4; + +insert into Output4 select * from $i4; + +select a,b,c,d from $i3; diff --git a/yt/yql/tests/sql/suites/column_group/hint_anon-disable.cfg b/yt/yql/tests/sql/suites/column_group/hint_anon-disable.cfg new file mode 100644 index 0000000000..648ff62ddc --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_anon-disable.cfg @@ -0,0 +1,4 @@ +in Input input.txt +providers yt +pragma yt.ColumnGroupMode="disable" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/hint_anon-perusage.cfg b/yt/yql/tests/sql/suites/column_group/hint_anon-perusage.cfg new file mode 100644 index 0000000000..be63fb17e4 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_anon-perusage.cfg @@ -0,0 +1,4 @@ +in Input input.txt +providers yt +pragma yt.ColumnGroupMode="perusage" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/hint_anon-single.cfg b/yt/yql/tests/sql/suites/column_group/hint_anon-single.cfg new file mode 100644 index 0000000000..0ccae305ff --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_anon-single.cfg @@ -0,0 +1,4 @@ +in Input input.txt +providers yt +pragma yt.ColumnGroupMode="single" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/hint_anon.sql b/yt/yql/tests/sql/suites/column_group/hint_anon.sql new file mode 100644 index 0000000000..b1d85f2d15 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_anon.sql @@ -0,0 +1,9 @@ +USE plato; + +$i = select * from Input where a > "a"; + +select a,b,c,d from $i; +select c,d,e,f from $i; + +-- Forces single group for $i +insert into @tmp select * from $i; diff --git a/yt/yql/tests/sql/suites/column_group/hint_anon_groups-disable.cfg b/yt/yql/tests/sql/suites/column_group/hint_anon_groups-disable.cfg new file mode 100644 index 0000000000..648ff62ddc --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_anon_groups-disable.cfg @@ -0,0 +1,4 @@ +in Input input.txt +providers yt +pragma yt.ColumnGroupMode="disable" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/hint_anon_groups-perusage.cfg b/yt/yql/tests/sql/suites/column_group/hint_anon_groups-perusage.cfg new file mode 100644 index 0000000000..be63fb17e4 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_anon_groups-perusage.cfg @@ -0,0 +1,4 @@ +in Input input.txt +providers yt +pragma yt.ColumnGroupMode="perusage" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/hint_anon_groups-single.cfg b/yt/yql/tests/sql/suites/column_group/hint_anon_groups-single.cfg new file mode 100644 index 0000000000..0ccae305ff --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_anon_groups-single.cfg @@ -0,0 +1,4 @@ +in Input input.txt +providers yt +pragma yt.ColumnGroupMode="single" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/hint_anon_groups.sql b/yt/yql/tests/sql/suites/column_group/hint_anon_groups.sql new file mode 100644 index 0000000000..384dbcfd3b --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_anon_groups.sql @@ -0,0 +1,9 @@ +USE plato; + +$i = select * from Input where a > "a"; + +select a,b,c,d from $i; +select c,d,e,f from $i; + +-- Forces specific group for $i +insert into @tmp with column_groups="{grp=[b;c;d]}" select * from $i; diff --git a/yt/yql/tests/sql/suites/column_group/hint_append_fail.cfg b/yt/yql/tests/sql/suites/column_group/hint_append_fail.cfg new file mode 100644 index 0000000000..f508c61b27 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_append_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output input.txt +providers yt +pragma yt.ColumnGroupMode="perusage" diff --git a/yt/yql/tests/sql/suites/column_group/hint_append_fail.sql b/yt/yql/tests/sql/suites/column_group/hint_append_fail.sql new file mode 100644 index 0000000000..720052d6e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_append_fail.sql @@ -0,0 +1,6 @@ +/* custom error:Insert with "column_groups" to existing table is not allowed*/ +USE plato; + +insert into Output +with column_groups="{g1=[a;b];def=#}" +select * from Input; diff --git a/yt/yql/tests/sql/suites/column_group/hint_diff_grp_fail.cfg b/yt/yql/tests/sql/suites/column_group/hint_diff_grp_fail.cfg new file mode 100644 index 0000000000..f5c8eefa7e --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_diff_grp_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="perusage" diff --git a/yt/yql/tests/sql/suites/column_group/hint_diff_grp_fail.sql b/yt/yql/tests/sql/suites/column_group/hint_diff_grp_fail.sql new file mode 100644 index 0000000000..f47f4f81f9 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_diff_grp_fail.sql @@ -0,0 +1,10 @@ +/* custom error:All appends within the same commit should have the equal "column_groups" value*/ +USE plato; + +insert into Output +with column_groups="{g1=[a;b];def=#}" +select * from Input; + +insert into Output +with column_groups="{g1=[c;d];def=#}" +select * from Input; diff --git a/yt/yql/tests/sql/suites/column_group/hint_dup_col_fail.cfg b/yt/yql/tests/sql/suites/column_group/hint_dup_col_fail.cfg new file mode 100644 index 0000000000..f5c8eefa7e --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_dup_col_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="perusage" diff --git a/yt/yql/tests/sql/suites/column_group/hint_dup_col_fail.sql b/yt/yql/tests/sql/suites/column_group/hint_dup_col_fail.sql new file mode 100644 index 0000000000..1acaba9f6d --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_dup_col_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Duplicate column "a"*/ +USE plato; + +-- duplicate column +insert into Output +with column_groups="{g1=[a;a;b];def=#}" +select * from Input; diff --git a/yt/yql/tests/sql/suites/column_group/hint_dup_def_fail.cfg b/yt/yql/tests/sql/suites/column_group/hint_dup_def_fail.cfg new file mode 100644 index 0000000000..f5c8eefa7e --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_dup_def_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="perusage" diff --git a/yt/yql/tests/sql/suites/column_group/hint_dup_def_fail.sql b/yt/yql/tests/sql/suites/column_group/hint_dup_def_fail.sql new file mode 100644 index 0000000000..8f0db30396 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_dup_def_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Not more than one group should have # value: "def2"*/ +USE plato; + +-- duplicate column +insert into Output +with column_groups="{def1=#;def2=#}" +select * from Input; diff --git a/yt/yql/tests/sql/suites/column_group/hint_empty_grp_fail.cfg b/yt/yql/tests/sql/suites/column_group/hint_empty_grp_fail.cfg new file mode 100644 index 0000000000..f5c8eefa7e --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_empty_grp_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="perusage" diff --git a/yt/yql/tests/sql/suites/column_group/hint_empty_grp_fail.sql b/yt/yql/tests/sql/suites/column_group/hint_empty_grp_fail.sql new file mode 100644 index 0000000000..521675ee5d --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_empty_grp_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Expected list with at least two columns, group: "g1"*/ +USE plato; + +-- empty group +insert into Output +with column_groups="{g1=[];def=#}" +select * from Input; diff --git a/yt/yql/tests/sql/suites/column_group/hint_non_lst_yson_fail.cfg b/yt/yql/tests/sql/suites/column_group/hint_non_lst_yson_fail.cfg new file mode 100644 index 0000000000..f5c8eefa7e --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_non_lst_yson_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="perusage" diff --git a/yt/yql/tests/sql/suites/column_group/hint_non_lst_yson_fail.sql b/yt/yql/tests/sql/suites/column_group/hint_non_lst_yson_fail.sql new file mode 100644 index 0000000000..00d0a444b5 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_non_lst_yson_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Expected list value, group: "g1"*/ +USE plato; + +-- bad yson +insert into Output +with column_groups=@@{g1="a"}@@ +select * from Input; diff --git a/yt/yql/tests/sql/suites/column_group/hint_non_map_yson_fail.cfg b/yt/yql/tests/sql/suites/column_group/hint_non_map_yson_fail.cfg new file mode 100644 index 0000000000..f5c8eefa7e --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_non_map_yson_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="perusage" diff --git a/yt/yql/tests/sql/suites/column_group/hint_non_map_yson_fail.sql b/yt/yql/tests/sql/suites/column_group/hint_non_map_yson_fail.sql new file mode 100644 index 0000000000..58b413af20 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_non_map_yson_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Expected Yson map, got: list_node*/ +USE plato; + +-- bad yson +insert into Output +with column_groups="[abc]" +select * from Input; diff --git a/yt/yql/tests/sql/suites/column_group/hint_non_str_yson_fail.cfg b/yt/yql/tests/sql/suites/column_group/hint_non_str_yson_fail.cfg new file mode 100644 index 0000000000..f5c8eefa7e --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_non_str_yson_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="perusage" diff --git a/yt/yql/tests/sql/suites/column_group/hint_non_str_yson_fail.sql b/yt/yql/tests/sql/suites/column_group/hint_non_str_yson_fail.sql new file mode 100644 index 0000000000..8ed51c1871 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_non_str_yson_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Expected string value in list, found int64_node, group: "g1"*/ +USE plato; + +-- bad yson +insert into Output +with column_groups="{g1=[3;a]}" +select * from Input; diff --git a/yt/yql/tests/sql/suites/column_group/hint_non_yson_fail.cfg b/yt/yql/tests/sql/suites/column_group/hint_non_yson_fail.cfg new file mode 100644 index 0000000000..f5c8eefa7e --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_non_yson_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="perusage" diff --git a/yt/yql/tests/sql/suites/column_group/hint_non_yson_fail.sql b/yt/yql/tests/sql/suites/column_group/hint_non_yson_fail.sql new file mode 100644 index 0000000000..209aef0e43 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_non_yson_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Unexpected '!' while parsing node*/ +USE plato; + +-- bad yson +insert into Output +with column_groups="!" +select * from Input; diff --git a/yt/yql/tests/sql/suites/column_group/hint_short_grp_fail.cfg b/yt/yql/tests/sql/suites/column_group/hint_short_grp_fail.cfg new file mode 100644 index 0000000000..f5c8eefa7e --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_short_grp_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="perusage" diff --git a/yt/yql/tests/sql/suites/column_group/hint_short_grp_fail.sql b/yt/yql/tests/sql/suites/column_group/hint_short_grp_fail.sql new file mode 100644 index 0000000000..895f4cbd61 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_short_grp_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Expected list with at least two columns, group: "g1"*/ +USE plato; + +-- too short group +insert into Output +with column_groups="{g1=[a];def=#}" +select * from Input; diff --git a/yt/yql/tests/sql/suites/column_group/hint_unk_col_fail.cfg b/yt/yql/tests/sql/suites/column_group/hint_unk_col_fail.cfg new file mode 100644 index 0000000000..f5c8eefa7e --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_unk_col_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="perusage" diff --git a/yt/yql/tests/sql/suites/column_group/hint_unk_col_fail.sql b/yt/yql/tests/sql/suites/column_group/hint_unk_col_fail.sql new file mode 100644 index 0000000000..64a49820a9 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/hint_unk_col_fail.sql @@ -0,0 +1,8 @@ +/* custom error:Column group "g1" refers to unknown column "l"*/ +USE plato; + +-- unknown column +insert into Output +with column_groups="{g1=[l;b;c];def=#}" +select * from Input; + diff --git a/yt/yql/tests/sql/suites/column_group/input.txt.attr b/yt/yql/tests/sql/suites/column_group/input.txt.attr new file mode 100644 index 0000000000..b337b62c6b --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/input.txt.attr @@ -0,0 +1,10 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["a";["DataType";"String"]]; + ["b";["DataType";"String"]]; + ["c";["DataType";"String"]]; + ["d";["DataType";"String"]]; + ["e";["DataType";"String"]]; + ["f";["DataType";"String"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/column_group/insert_diff_groups1_fail.cfg b/yt/yql/tests/sql/suites/column_group/insert_diff_groups1_fail.cfg new file mode 100644 index 0000000000..351cce8968 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/insert_diff_groups1_fail.cfg @@ -0,0 +1,4 @@ +xfail +in Input input.txt +providers yt +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/insert_diff_groups1_fail.sql b/yt/yql/tests/sql/suites/column_group/insert_diff_groups1_fail.sql new file mode 100644 index 0000000000..e962ccf194 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/insert_diff_groups1_fail.sql @@ -0,0 +1,15 @@ +/* custom error:Insert with different "column_groups" to existing table is not allowed*/ +USE plato; + +pragma yt.ColumnGroupMode="perusage"; + +$s1 = select * from Input where a != ""; +$s2 = select * from Input where a > "a1"; + +insert into @a +select * from $s1; + +commit; + +insert into @a with column_groups="{a=#}" +select * from $s2; diff --git a/yt/yql/tests/sql/suites/column_group/insert_diff_groups2_fail.cfg b/yt/yql/tests/sql/suites/column_group/insert_diff_groups2_fail.cfg new file mode 100644 index 0000000000..ab4dec69ea --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/insert_diff_groups2_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output output.txt +providers yt +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/insert_diff_groups2_fail.sql b/yt/yql/tests/sql/suites/column_group/insert_diff_groups2_fail.sql new file mode 100644 index 0000000000..18ef3246fa --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/insert_diff_groups2_fail.sql @@ -0,0 +1,15 @@ +/* custom error:Insert with different "column_groups" to existing table is not allowed*/ +USE plato; + +pragma yt.ColumnGroupMode="perusage"; + +$s1 = select * from Input where a != ""; +$s2 = select * from Input where a > "a1"; + +insert into Output +select * from $s1; + +commit; + +insert into Output with column_groups="{a=#}" +select * from $s2; diff --git a/yt/yql/tests/sql/suites/column_group/insert_diff_groups3_fail.cfg b/yt/yql/tests/sql/suites/column_group/insert_diff_groups3_fail.cfg new file mode 100644 index 0000000000..356863d2ae --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/insert_diff_groups3_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +out Output input.txt +providers yt +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/insert_diff_groups3_fail.sql b/yt/yql/tests/sql/suites/column_group/insert_diff_groups3_fail.sql new file mode 100644 index 0000000000..1e0a1a4734 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/insert_diff_groups3_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Insert with "column_groups" to existing table is not allowed*/ +USE plato; + +pragma yt.ColumnGroupMode="perusage"; + +insert into Output with column_groups="{a=#}" +select * from Input where a != ""; diff --git a/yt/yql/tests/sql/suites/column_group/length-perusage.cfg b/yt/yql/tests/sql/suites/column_group/length-perusage.cfg new file mode 100644 index 0000000000..eaefb06bd5 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/length-perusage.cfg @@ -0,0 +1,5 @@ +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="perusage" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/length-single.cfg b/yt/yql/tests/sql/suites/column_group/length-single.cfg new file mode 100644 index 0000000000..c48072ee21 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/length-single.cfg @@ -0,0 +1,5 @@ +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="single" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/length.sql b/yt/yql/tests/sql/suites/column_group/length.sql new file mode 100644 index 0000000000..85ef54124a --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/length.sql @@ -0,0 +1,7 @@ +USE plato; + +$i = select * from Input where a > "a"; + +select a,b,c,d from $i; +select c,d,e,f from $i; +select count(*) from $i; diff --git a/yt/yql/tests/sql/suites/column_group/many_inserts.cfg b/yt/yql/tests/sql/suites/column_group/many_inserts.cfg new file mode 100644 index 0000000000..4a98bc6feb --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/many_inserts.cfg @@ -0,0 +1,4 @@ +in Input input.txt +out Output output.txt +providers yt +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/many_inserts.sql b/yt/yql/tests/sql/suites/column_group/many_inserts.sql new file mode 100644 index 0000000000..b0ead4fad6 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/many_inserts.sql @@ -0,0 +1,32 @@ +USE plato; + +pragma yt.ColumnGroupMode="perusage"; + +$s1 = select * from Input where a != ""; +$s2 = select * from Input where a > "a1"; + +insert into @a with column_groups="{a=#}" +select * from $s1; + +insert into @b +select * from $s1; + +insert into @c +select * from $s1; + +insert into Output with column_groups="{a=#}" +select * from $s1; + +commit; + +insert into @a with column_groups="{a=#}" +select * from $s2; + +insert into @b +select * from $s2; + +insert into @c with column_groups="{default=#}" +select * from $s2; + +insert into Output with column_groups="{a=#}" +select * from $s2; diff --git a/yt/yql/tests/sql/suites/column_group/min_group.sql b/yt/yql/tests/sql/suites/column_group/min_group.sql new file mode 100644 index 0000000000..f99d380f15 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/min_group.sql @@ -0,0 +1,8 @@ +USE plato; +pragma yt.MinColumnGroupSize="3"; +pragma yt.ColumnGroupMode="perusage"; + +$i = select * from Input where a > "a"; + +select a,b from $i; +select c,d,e,f from $i; diff --git a/yt/yql/tests/sql/suites/column_group/publish-perusage.cfg b/yt/yql/tests/sql/suites/column_group/publish-perusage.cfg new file mode 100644 index 0000000000..eaefb06bd5 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/publish-perusage.cfg @@ -0,0 +1,5 @@ +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="perusage" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/publish-single.cfg b/yt/yql/tests/sql/suites/column_group/publish-single.cfg new file mode 100644 index 0000000000..c48072ee21 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/publish-single.cfg @@ -0,0 +1,5 @@ +in Input input.txt +out Output output.txt +providers yt +pragma yt.ColumnGroupMode="single" +pragma yt.OptimizeFor="scan" diff --git a/yt/yql/tests/sql/suites/column_group/publish.sql b/yt/yql/tests/sql/suites/column_group/publish.sql new file mode 100644 index 0000000000..d9f7b9e855 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_group/publish.sql @@ -0,0 +1,8 @@ +USE plato; + +$i = select * from Input where a > "a"; + +select a,b,c,d from $i; +select c,d,e,f from $i; + +insert into Output select * from $i; diff --git a/yt/yql/tests/sql/suites/column_order/align_publish.cfg b/yt/yql/tests/sql/suites/column_order/align_publish.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/align_publish.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/column_order/align_publish.sql b/yt/yql/tests/sql/suites/column_order/align_publish.sql new file mode 100644 index 0000000000..7c56456e8c --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/align_publish.sql @@ -0,0 +1,10 @@ +PRAGMA OrderedColumns; +USE plato; + +INSERT INTO @table1 WITH TRUNCATE (a, c, b) VALUES ('1', '2', '3'); +COMMIT; + +INSERT INTO Output WITH TRUNCATE +SELECT x.c AS d, x.b AS b, json('{}') AS a +FROM @table1 AS x +ORDER BY d diff --git a/yt/yql/tests/sql/suites/column_order/align_publish_native.cfg b/yt/yql/tests/sql/suites/column_order/align_publish_native.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/align_publish_native.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/column_order/align_publish_native.sql b/yt/yql/tests/sql/suites/column_order/align_publish_native.sql new file mode 100644 index 0000000000..f483b40019 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/align_publish_native.sql @@ -0,0 +1,12 @@ +/* ignore runonopt plan diff */ +PRAGMA OrderedColumns; +PRAGMA yt.UseNativeYtTypes; +USE plato; + +INSERT INTO @table1 WITH TRUNCATE (a, c, b) VALUES ('1', '2', '3'); +COMMIT; + +INSERT INTO Output WITH TRUNCATE +SELECT x.c AS d, x.b AS b, json('{}') AS a +FROM @table1 AS x +ORDER BY d diff --git a/yt/yql/tests/sql/suites/column_order/default.cfg b/yt/yql/tests/sql/suites/column_order/default.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/default.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/column_order/input.txt.attr b/yt/yql/tests/sql/suites/column_order/input.txt.attr new file mode 100644 index 0000000000..88356bebbc --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/input.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["value";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["key";["DataType";"String"]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/column_order/insert.cfg b/yt/yql/tests/sql/suites/column_order/insert.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/insert.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/column_order/insert.sql b/yt/yql/tests/sql/suites/column_order/insert.sql new file mode 100644 index 0000000000..5367b6913b --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/insert.sql @@ -0,0 +1,26 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +insert into Input +select key, subkey, value from Input; + +commit; + +select * from Input order by subkey, key; + +insert into Output +select * from Input order by subkey, key; + +commit; + +select * from Output order by subkey, key; + +insert into Output with truncate +select key,value,subkey from Input order by subkey, key; + +select * from Output order by subkey, key; +commit; +select * from Output order by subkey, key; + diff --git a/yt/yql/tests/sql/suites/column_order/insert_reorder_without_columnorder.cfg b/yt/yql/tests/sql/suites/column_order/insert_reorder_without_columnorder.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/insert_reorder_without_columnorder.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/column_order/insert_reorder_without_columnorder.sql b/yt/yql/tests/sql/suites/column_order/insert_reorder_without_columnorder.sql new file mode 100644 index 0000000000..0b9f6613ac --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/insert_reorder_without_columnorder.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +use plato; +pragma DisableOrderedColumns; +pragma warning("disable", "4517"); + +$Group = 1u; + +INSERT INTO Output(Group, Name) +SELECT + $Group, + value +FROM Input +WHERE key = "150" +LIMIT 1; diff --git a/yt/yql/tests/sql/suites/column_order/insert_tmp.sql b/yt/yql/tests/sql/suites/column_order/insert_tmp.sql new file mode 100644 index 0000000000..be3485553e --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/insert_tmp.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +insert into @tmp +select * from Input order by subkey, key; +commit; + +select * from @tmp order by subkey, key; + +insert into @tmp with truncate +select key, value, subkey from Input order by subkey, key; + +select * from @tmp order by subkey, key; +commit; +select * from @tmp order by subkey, key; + diff --git a/yt/yql/tests/sql/suites/column_order/insert_with_desc_sort_and_native_types.sql b/yt/yql/tests/sql/suites/column_order/insert_with_desc_sort_and_native_types.sql new file mode 100644 index 0000000000..a97c43f38b --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/insert_with_desc_sort_and_native_types.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* hybridfile can not YQL-17743 */ +USE plato; + +PRAGMA OrderedColumns; +PRAGMA yt.UseNativeYtTypes; + +insert into @tmp +select key, AsList(subkey), value +from Input +where key > '000' +order by value desc; diff --git a/yt/yql/tests/sql/suites/column_order/insert_with_new_cols.cfg b/yt/yql/tests/sql/suites/column_order/insert_with_new_cols.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/insert_with_new_cols.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/column_order/insert_with_new_cols.sql b/yt/yql/tests/sql/suites/column_order/insert_with_new_cols.sql new file mode 100644 index 0000000000..54c1afc925 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/insert_with_new_cols.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +insert into Output with truncate +select a.* +, count(key) over (partition by subkey) as cnt +from Input as a diff --git a/yt/yql/tests/sql/suites/column_order/insert_with_reorder_cols.cfg b/yt/yql/tests/sql/suites/column_order/insert_with_reorder_cols.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/insert_with_reorder_cols.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/column_order/insert_with_reorder_cols.sql b/yt/yql/tests/sql/suites/column_order/insert_with_reorder_cols.sql new file mode 100644 index 0000000000..eff98969d9 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/insert_with_reorder_cols.sql @@ -0,0 +1,20 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +PRAGMA PositionalUnionAll; +PRAGMA yt.UseNativeYtTypes; + +$i = +SELECT + key, + AGGREGATE_LIST(subkey) as lst +FROM Input +GROUP BY key; + +INSERT INTO Output +SELECT + a.key as key, + lst ?? [] as lst, + 2 as anum, +FROM $i as a;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/column_order/join.cfg b/yt/yql/tests/sql/suites/column_order/join.cfg new file mode 100644 index 0000000000..1acaa00cf7 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/join.cfg @@ -0,0 +1,3 @@ +in Input input.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/column_order/join.sql b/yt/yql/tests/sql/suites/column_order/join.sql new file mode 100644 index 0000000000..9b356e0a4f --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/join.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +$foo = select 1 as sk, "150" as key, 2 as v; + +select * from $foo as b join Input as a using(key); +select a.* from $foo as b join Input as a using(key); +select b.* from $foo as b join Input as a using(key); +select a.*, b.* from $foo as b join Input as a using(key); diff --git a/yt/yql/tests/sql/suites/column_order/join_nosimple.cfg b/yt/yql/tests/sql/suites/column_order/join_nosimple.cfg new file mode 100644 index 0000000000..1acaa00cf7 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/join_nosimple.cfg @@ -0,0 +1,3 @@ +in Input input.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/column_order/join_nosimple.sql b/yt/yql/tests/sql/suites/column_order/join_nosimple.sql new file mode 100644 index 0000000000..8784238898 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/join_nosimple.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; +pragma DisableSimpleColumns; + +$foo = select 1 as sk, "150" as key, 2 as v; + +select * from $foo as b join Input as a using(key); +select a.* from $foo as b join Input as a using(key); +select b.* from $foo as b join Input as a using(key); +select a.*, b.* from $foo as b join Input as a using(key); diff --git a/yt/yql/tests/sql/suites/column_order/ordered_plus_native.cfg b/yt/yql/tests/sql/suites/column_order/ordered_plus_native.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/ordered_plus_native.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/column_order/ordered_plus_native.sql b/yt/yql/tests/sql/suites/column_order/ordered_plus_native.sql new file mode 100644 index 0000000000..589b74ccc8 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/ordered_plus_native.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +PRAGMA OrderedColumns; +PRAGMA yt.UseNativeYtTypes; + + +INSERT INTO Output WITH TRUNCATE +SELECT + aggr_list(subkey) as subkey, + key, +FROM Input AS a +GROUP BY a.key as key; diff --git a/yt/yql/tests/sql/suites/column_order/select_action.sql b/yt/yql/tests/sql/suites/column_order/select_action.sql new file mode 100644 index 0000000000..e26c75a06f --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/select_action.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +evaluate for $i in ["1", "2", "3"] do begin + select * from Input where subkey = $i; +end do; diff --git a/yt/yql/tests/sql/suites/column_order/select_distinct_star.sql b/yt/yql/tests/sql/suites/column_order/select_distinct_star.sql new file mode 100644 index 0000000000..5c229a512f --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/select_distinct_star.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +select distinct * from Input order by subkey, key; + diff --git a/yt/yql/tests/sql/suites/column_order/select_groupby_with_star.sql b/yt/yql/tests/sql/suites/column_order/select_groupby_with_star.sql new file mode 100644 index 0000000000..ffb116362a --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/select_groupby_with_star.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +select * from Input group by value, key order by key, value; +select * from Input group by value, key having key = "150"; +select * from Input group by subkey, key || "x" as key order by subkey, key; diff --git a/yt/yql/tests/sql/suites/column_order/select_limit_offset.sql b/yt/yql/tests/sql/suites/column_order/select_limit_offset.sql new file mode 100644 index 0000000000..2da2186ca6 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/select_limit_offset.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +select * from Input order by key limit 1 offset 3; +select * from Input order by value limit 0 offset 3; +select * from Input limit 0; + diff --git a/yt/yql/tests/sql/suites/column_order/select_limit_offset_reorder.sql b/yt/yql/tests/sql/suites/column_order/select_limit_offset_reorder.sql new file mode 100644 index 0000000000..e8a9cf93db --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/select_limit_offset_reorder.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +select subkey, key, value from (select * from Input) as x order by key, subkey limit 1 offset 1; diff --git a/yt/yql/tests/sql/suites/column_order/select_orderby.sql b/yt/yql/tests/sql/suites/column_order/select_orderby.sql new file mode 100644 index 0000000000..12bfaa33d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/select_orderby.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +select * from Input order by key; + diff --git a/yt/yql/tests/sql/suites/column_order/select_plain.sql b/yt/yql/tests/sql/suites/column_order/select_plain.sql new file mode 100644 index 0000000000..b495924f3d --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/select_plain.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +select * from Input order by subkey; +select * without key from Input order by subkey; + +select a.* from Input as a order by a.subkey; +select a.* without key from Input as a order by a.subkey; + +select 1 as z, 2 as x, a.* from Input as a order by a.subkey; +select 1 as z, 2 as x, a.* without key from Input as a order by a.subkey; + +select 1 as c, 2 as b, 3 as a; + diff --git a/yt/yql/tests/sql/suites/column_order/select_plain_nosimple.sql b/yt/yql/tests/sql/suites/column_order/select_plain_nosimple.sql new file mode 100644 index 0000000000..9f3c6de79b --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/select_plain_nosimple.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; +pragma DisableSimpleColumns; + +select * from Input; +select * without key from Input; + +select a.* from Input as a; +select a.* without key from Input as a; + +select 1 as z, 2 as x, a.* from Input as a; +select 1 as z, 2 as x, a.* without key from Input as a; + +select 1 as c, 2 as b, 3 as a; + diff --git a/yt/yql/tests/sql/suites/column_order/select_sample.sql b/yt/yql/tests/sql/suites/column_order/select_sample.sql new file mode 100644 index 0000000000..af4555f2a4 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/select_sample.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +select * from Input tablesample bernoulli(100.0); + diff --git a/yt/yql/tests/sql/suites/column_order/select_subquery.sql b/yt/yql/tests/sql/suites/column_order/select_subquery.sql new file mode 100644 index 0000000000..c00407dfdc --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/select_subquery.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +define subquery $select_star($table) as + select * without subkey from $table; +end define; + +select * from $select_star("Input"); + diff --git a/yt/yql/tests/sql/suites/column_order/select_where.sql b/yt/yql/tests/sql/suites/column_order/select_where.sql new file mode 100644 index 0000000000..d08d7cae43 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/select_where.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +select * from Input where key="150"; + diff --git a/yt/yql/tests/sql/suites/column_order/select_win_func.sql b/yt/yql/tests/sql/suites/column_order/select_win_func.sql new file mode 100644 index 0000000000..4ce0668d97 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/select_win_func.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; + +select + min(subkey) over (partition by key) as zz, + row_number() over (order by key, subkey) as z, + a.* +from Input as a +order by key, subkey; diff --git a/yt/yql/tests/sql/suites/column_order/union_all.sql b/yt/yql/tests/sql/suites/column_order/union_all.sql new file mode 100644 index 0000000000..ea88506906 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/union_all.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +/* syntax version 1 */ +pragma OrderedColumns; + +select 1 as z, 2 as y, 3 as x +union all +select 1 as z, 2 as y +union all +select 1 as z; + +select 1 as z, 2 as y, 3 as x +union all +select 1 as z, 2 as y +union all +select 1 as a; diff --git a/yt/yql/tests/sql/suites/column_order/union_all_positional_columns_count_fail.cfg b/yt/yql/tests/sql/suites/column_order/union_all_positional_columns_count_fail.cfg new file mode 100644 index 0000000000..5dae597903 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/union_all_positional_columns_count_fail.cfg @@ -0,0 +1 @@ +xfail diff --git a/yt/yql/tests/sql/suites/column_order/union_all_positional_columns_count_fail.sql b/yt/yql/tests/sql/suites/column_order/union_all_positional_columns_count_fail.sql new file mode 100644 index 0000000000..3b5fd2428b --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/union_all_positional_columns_count_fail.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +/* syntax version 1 */ +/* custom error:Different column counts in UNION ALL inputs: input #0 has 3 column, input #1 has 2 columns*/ +pragma PositionalUnionAll; + +select 1 as c, 2 as b, 3 as a +union all +select 1 as c, 2 as b; diff --git a/yt/yql/tests/sql/suites/column_order/union_all_positional_unordered_fail.cfg b/yt/yql/tests/sql/suites/column_order/union_all_positional_unordered_fail.cfg new file mode 100644 index 0000000000..5dae597903 --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/union_all_positional_unordered_fail.cfg @@ -0,0 +1 @@ +xfail diff --git a/yt/yql/tests/sql/suites/column_order/union_all_positional_unordered_fail.sql b/yt/yql/tests/sql/suites/column_order/union_all_positional_unordered_fail.sql new file mode 100644 index 0000000000..c4128ac9be --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/union_all_positional_unordered_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Input #1 does not have ordered columns. Consider making column order explicit by using SELECT with column names*/ +pragma PositionalUnionAll; + +select 1 as c, 2 as b, 3 as a +union all +select * from as_table([<|c:1, b:2, a:3|>]); + diff --git a/yt/yql/tests/sql/suites/column_order/winfunc.sql b/yt/yql/tests/sql/suites/column_order/winfunc.sql new file mode 100644 index 0000000000..eb5751334a --- /dev/null +++ b/yt/yql/tests/sql/suites/column_order/winfunc.sql @@ -0,0 +1,9 @@ +use plato; +pragma OrderedColumns; + +select + a.* + , lag(key) over (order by subkey) as prev_k + , min(key) over (order by subkey) as min_k +from Input as a +order by subkey diff --git a/yt/yql/tests/sql/suites/count/boolean_count.cfg b/yt/yql/tests/sql/suites/count/boolean_count.cfg new file mode 100644 index 0000000000..28975418d4 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/boolean_count.cfg @@ -0,0 +1 @@ +in Input count_input.txt diff --git a/yt/yql/tests/sql/suites/count/boolean_count.sql b/yt/yql/tests/sql/suites/count/boolean_count.sql new file mode 100644 index 0000000000..8ecebf2391 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/boolean_count.sql @@ -0,0 +1,3 @@ +select count(*) from plato.Input; +select count(e) from plato.Input; +select count(distinct e) from plato.Input; diff --git a/yt/yql/tests/sql/suites/count/count.cfg b/yt/yql/tests/sql/suites/count/count.cfg new file mode 100644 index 0000000000..28975418d4 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count.cfg @@ -0,0 +1 @@ +in Input count_input.txt diff --git a/yt/yql/tests/sql/suites/count/count.sql b/yt/yql/tests/sql/suites/count/count.sql new file mode 100644 index 0000000000..9c01b87439 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +select a, aggregate_list(b), count(*) from plato.Input group by a order by a; +select b, aggregate_list(a), count(*) from plato.Input group by b order by b; +select c, aggregate_list(a), count(*) from plato.Input group by c order by c; +select d, aggregate_list(a), count(*) from plato.Input group by d order by d; +select e, aggregate_list(a), count(*) from plato.Input group by e order by e; diff --git a/yt/yql/tests/sql/suites/count/count_all.sql b/yt/yql/tests/sql/suites/count/count_all.sql new file mode 100644 index 0000000000..1e638449b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_all.sql @@ -0,0 +1 @@ +select count(*) from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/count/count_all_grouped-empty.cfg b/yt/yql/tests/sql/suites/count/count_all_grouped-empty.cfg new file mode 100644 index 0000000000..3bccc051db --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_all_grouped-empty.cfg @@ -0,0 +1 @@ +in Input empty.txt diff --git a/yt/yql/tests/sql/suites/count/count_all_grouped.cfg b/yt/yql/tests/sql/suites/count/count_all_grouped.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_all_grouped.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/count/count_all_grouped.sql b/yt/yql/tests/sql/suites/count/count_all_grouped.sql new file mode 100644 index 0000000000..234ad3625a --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_all_grouped.sql @@ -0,0 +1 @@ +select key, count(*) from plato.Input group by key order by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/count/count_all_view_concat.cfg b/yt/yql/tests/sql/suites/count/count_all_view_concat.cfg new file mode 100644 index 0000000000..8b7633b301 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_all_view_concat.cfg @@ -0,0 +1 @@ +in Input view_input.txt diff --git a/yt/yql/tests/sql/suites/count/count_all_view_concat.sql b/yt/yql/tests/sql/suites/count/count_all_view_concat.sql new file mode 100644 index 0000000000..1dba44bcdd --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_all_view_concat.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* syntax version 1 */ +select count(*) as count from plato.concat(Input view ksv, Input view ksv); diff --git a/yt/yql/tests/sql/suites/count/count_by_nulls.cfg b/yt/yql/tests/sql/suites/count/count_by_nulls.cfg new file mode 100644 index 0000000000..1af92ac7be --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_by_nulls.cfg @@ -0,0 +1 @@ +in Input input_intersect_with_holes.txt diff --git a/yt/yql/tests/sql/suites/count/count_by_nulls.sql b/yt/yql/tests/sql/suites/count/count_by_nulls.sql new file mode 100644 index 0000000000..6265a21122 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_by_nulls.sql @@ -0,0 +1 @@ +select count(cast(subkey as int)) as not_null_subkeys from plato.Input; diff --git a/yt/yql/tests/sql/suites/count/count_const_no_grouping.sql b/yt/yql/tests/sql/suites/count/count_const_no_grouping.sql new file mode 100644 index 0000000000..0590d2c282 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_const_no_grouping.sql @@ -0,0 +1 @@ +select count(1) from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/count/count_distinct_from_view_concat.cfg b/yt/yql/tests/sql/suites/count/count_distinct_from_view_concat.cfg new file mode 100644 index 0000000000..8b7633b301 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_distinct_from_view_concat.cfg @@ -0,0 +1 @@ +in Input view_input.txt diff --git a/yt/yql/tests/sql/suites/count/count_distinct_from_view_concat.sql b/yt/yql/tests/sql/suites/count/count_distinct_from_view_concat.sql new file mode 100644 index 0000000000..d45d8742ad --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_distinct_from_view_concat.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* syntax version 1 */ +select count(distinct k) as count from plato.concat(Input view ksv, Input view ksv); diff --git a/yt/yql/tests/sql/suites/count/count_input.txt.attr b/yt/yql/tests/sql/suites/count/count_input.txt.attr new file mode 100644 index 0000000000..3176be619e --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_input.txt.attr @@ -0,0 +1,3 @@ +{ + "_read_schema"=[{"type"="int64";"name"="a"};{"type"="uint64";"name"="b"};{"type"="double";"name"="c"};{"type"="string";"name"="d"};{"type"="boolean";name="e"};{"type"="any";"name"="f"}] +} diff --git a/yt/yql/tests/sql/suites/count/count_no_grouping.sql b/yt/yql/tests/sql/suites/count/count_no_grouping.sql new file mode 100644 index 0000000000..7b0b662f41 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_no_grouping.sql @@ -0,0 +1 @@ +select count(value) from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/count/count_nullable.cfg b/yt/yql/tests/sql/suites/count/count_nullable.cfg new file mode 100644 index 0000000000..8153a1f3e5 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_nullable.cfg @@ -0,0 +1 @@ +in Input avg_and_sum_by_value.txt diff --git a/yt/yql/tests/sql/suites/count/count_nullable.sql b/yt/yql/tests/sql/suites/count/count_nullable.sql new file mode 100644 index 0000000000..4b70423490 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_nullable.sql @@ -0,0 +1 @@ +select count(cast(key as int)), value from plato.Input group by value order by value;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/count/count_nullable_sub.sql b/yt/yql/tests/sql/suites/count/count_nullable_sub.sql new file mode 100644 index 0000000000..0f962a7138 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/count_nullable_sub.sql @@ -0,0 +1,8 @@ +select + count(val) as subkey, + cast(avg(val) as int) as value, + value as key +from + (select case key when '0' then NULL else cast(subkey as int) / cast(key as int) end as val, value from plato.Input2) as res +group by value +order by value;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/count/default.cfg b/yt/yql/tests/sql/suites/count/default.cfg new file mode 100644 index 0000000000..8d2f379d10 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/default.cfg @@ -0,0 +1,2 @@ +in Input input.txt +in Input2 input2.txt diff --git a/yt/yql/tests/sql/suites/count/view_input.txt.attr b/yt/yql/tests/sql/suites/count/view_input.txt.attr new file mode 100644 index 0000000000..07386c98e5 --- /dev/null +++ b/yt/yql/tests/sql/suites/count/view_input.txt.attr @@ -0,0 +1,32 @@ +{ + "_yql_view_ksv"="SELECT key as k, subkey as s, value as v FROM self"; + "_yql_view_key"="SELECT key FROM self"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/csee/default.cfg b/yt/yql/tests/sql/suites/csee/default.cfg new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/yt/yql/tests/sql/suites/csee/default.cfg diff --git a/yt/yql/tests/sql/suites/csee/yql-7237.cfg b/yt/yql/tests/sql/suites/csee/yql-7237.cfg new file mode 100644 index 0000000000..c7f999ccb9 --- /dev/null +++ b/yt/yql/tests/sql/suites/csee/yql-7237.cfg @@ -0,0 +1 @@ +udf strings_udf diff --git a/yt/yql/tests/sql/suites/csee/yql-7237.sql b/yt/yql/tests/sql/suites/csee/yql-7237.sql new file mode 100644 index 0000000000..52a0a68ea7 --- /dev/null +++ b/yt/yql/tests/sql/suites/csee/yql-7237.sql @@ -0,0 +1,68 @@ +/* syntax version 1 */ +USE plato; + +$push_final_data = AsList( + AsStruct("manufacturer" AS manufacturer, "state" AS state)); + +INSERT INTO @push_final +SELECT * FROM AS_TABLE($push_final_data); +COMMIT; + +$manufacturer_name_fix = ($manufacturer) -> { + $lowered_manufacturer = CAST(Unicode::ToLower(CAST(String::Strip($manufacturer) AS Utf8)) AS String); + $in = AsList( + "oysters", -- bullshit in naming + "qumo", -- bullshit in naming + "texet", -- bullshit in naming + "alcatel", -- bullshit in naming + "dexp", -- bullshit in naming + "haier", -- bullshit in naming + "dexp", -- bullshit in naming + "asus", -- ASUSTek Computer Inc & ASUS both usable + "yota", -- Yota Devices & Yota Devices Limited ... + "ark" -- "ark" & "ark electronic technology" & "ark_electronic_technology" + ); + $lambda = ($substring) -> { + RETURN FIND($lowered_manufacturer, $substring) IS NULL; + }; + $list = ListSkipWhile($in, $lambda); + RETURN IF(ListHasItems($list), $list[0], $lowered_manufacturer); +}; + +$manufacturers_whitelist = ( + SELECT + man as manufacturer + FROM + ( + SELECT + man, COUNT(*) as cnt + FROM + @push_final + GROUP BY + $manufacturer_name_fix(manufacturer) as man + ) + WHERE + cnt > 1000 +); + +$push_final_preprocessing = ( + SELECT + $manufacturer_name_fix(manufacturer) as manufacturer, + state + FROM + @push_final +); + +SELECT + COALESCE(fixed_manufacturer, "other") as manufacturer, + L.* WITHOUT L.manufacturer +FROM + $push_final_preprocessing as L + LEFT JOIN + ( + SELECT + manufacturer as fixed_manufacturer + FROM + $manufacturers_whitelist + ) as R + ON(L.manufacturer = R.fixed_manufacturer); diff --git a/yt/yql/tests/sql/suites/datetime/date_tz_table_sort_asc.cfg b/yt/yql/tests/sql/suites/datetime/date_tz_table_sort_asc.cfg new file mode 100644 index 0000000000..4e01ee544a --- /dev/null +++ b/yt/yql/tests/sql/suites/datetime/date_tz_table_sort_asc.cfg @@ -0,0 +1,2 @@ +in Input date_tz.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/datetime/date_tz_table_sort_asc.sql b/yt/yql/tests/sql/suites/datetime/date_tz_table_sort_asc.sql new file mode 100644 index 0000000000..72954c51bf --- /dev/null +++ b/yt/yql/tests/sql/suites/datetime/date_tz_table_sort_asc.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* multirun can not */ +use plato; + +insert into Output with truncate +select + cast(value as tzdatetime) as x +from Input +order by x asc; +commit; + +select * from Output; diff --git a/yt/yql/tests/sql/suites/datetime/date_tz_table_sort_desc.cfg b/yt/yql/tests/sql/suites/datetime/date_tz_table_sort_desc.cfg new file mode 100644 index 0000000000..4e01ee544a --- /dev/null +++ b/yt/yql/tests/sql/suites/datetime/date_tz_table_sort_desc.cfg @@ -0,0 +1,2 @@ +in Input date_tz.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/datetime/date_tz_table_sort_desc.sql b/yt/yql/tests/sql/suites/datetime/date_tz_table_sort_desc.sql new file mode 100644 index 0000000000..4f21122ede --- /dev/null +++ b/yt/yql/tests/sql/suites/datetime/date_tz_table_sort_desc.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* multirun can not */ +use plato; + +insert into Output with truncate +select + cast(value as tzdatetime) as x +from Input +order by x desc; +commit; + +select * from Output; diff --git a/yt/yql/tests/sql/suites/datetime/default.cfg b/yt/yql/tests/sql/suites/datetime/default.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/datetime/default.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/distinct/default.cfg b/yt/yql/tests/sql/suites/distinct/default.cfg new file mode 100644 index 0000000000..389a8e8f21 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/default.cfg @@ -0,0 +1,4 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/distinct/distinct_and_join.cfg b/yt/yql/tests/sql/suites/distinct/distinct_and_join.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_and_join.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/distinct/distinct_and_join.sql b/yt/yql/tests/sql/suites/distinct/distinct_and_join.sql new file mode 100644 index 0000000000..3f36ed9841 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_and_join.sql @@ -0,0 +1,8 @@ +SELECT +DISTINCT + i1.key, + i2.key, + i1.subkey +FROM plato.Input AS i1 JOIN plato.Input AS i2 on i1.key == i2.subkey +ORDER BY i1.key, i2.key, i1.subkey +; diff --git a/yt/yql/tests/sql/suites/distinct/distinct_by_tuple.sql b/yt/yql/tests/sql/suites/distinct/distinct_by_tuple.sql new file mode 100644 index 0000000000..ba6c707502 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_by_tuple.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select distinct key from (select AsTuple(Just(key), Just(key)) as key, subkey, value from plato.Input) order by key; diff --git a/yt/yql/tests/sql/suites/distinct/distinct_columns.sql b/yt/yql/tests/sql/suites/distinct/distinct_columns.sql new file mode 100644 index 0000000000..75428df492 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_columns.sql @@ -0,0 +1 @@ +select distinct key, subkey, value from plato.Input3 order by key, subkey; diff --git a/yt/yql/tests/sql/suites/distinct/distinct_columns_after_group.sql b/yt/yql/tests/sql/suites/distinct/distinct_columns_after_group.sql new file mode 100644 index 0000000000..0d98c79f1d --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_columns_after_group.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +select distinct avg_key, min_val from ( + select avg(cast(key as int)) as avg_key, min(value) as min_val from plato.Input3 group by subkey +) as x order by avg_key, min_val;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/distinct/distinct_count_and_avg.sql b/yt/yql/tests/sql/suites/distinct/distinct_count_and_avg.sql new file mode 100644 index 0000000000..ac99b592f4 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_count_and_avg.sql @@ -0,0 +1 @@ +select count(distinct key) as count, avg(numKey) as avg from (select key, cast(key as int) as numKey, value from plato.Input2) as x group by value order by count;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/distinct/distinct_count_and_full_count.sql b/yt/yql/tests/sql/suites/distinct/distinct_count_and_full_count.sql new file mode 100644 index 0000000000..84900dc016 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_count_and_full_count.sql @@ -0,0 +1 @@ +select value, count(distinct key) as dist, count(key) as full from plato.Input2 group by value order by value;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/distinct/distinct_count_no_gouping.sql b/yt/yql/tests/sql/suites/distinct/distinct_count_no_gouping.sql new file mode 100644 index 0000000000..aec6be38e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_count_no_gouping.sql @@ -0,0 +1 @@ +select count(distinct key) as dist, count(key) as full from plato.Input2;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/distinct/distinct_count_only.sql b/yt/yql/tests/sql/suites/distinct/distinct_count_only.sql new file mode 100644 index 0000000000..45c1ec2740 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_count_only.sql @@ -0,0 +1 @@ +select count(distinct key) from plato.Input2;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/distinct/distinct_groupby.sql b/yt/yql/tests/sql/suites/distinct/distinct_groupby.sql new file mode 100644 index 0000000000..232a2b5a96 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_groupby.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ + +use plato; + +select distinct k || "_" as k1, "_" || v as v1 from Input2 group by key as k, value as v order by k1,v1; + diff --git a/yt/yql/tests/sql/suites/distinct/distinct_having_no_agg.sql b/yt/yql/tests/sql/suites/distinct/distinct_having_no_agg.sql new file mode 100644 index 0000000000..dfc8943362 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_having_no_agg.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +pragma warning("disable", "4526"); +use plato; + +select distinct key from Input2 having key != '0'; + diff --git a/yt/yql/tests/sql/suites/distinct/distinct_join.sql b/yt/yql/tests/sql/suites/distinct/distinct_join.sql new file mode 100644 index 0000000000..0e2aba1c5c --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_join.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ + +use plato; + +select distinct * from (select Unwrap(cast(key as Int32)) as key, value from Input2) as a +join (select Just(1ul) as key, 123 as subkey) as b +using(key) order by value; + diff --git a/yt/yql/tests/sql/suites/distinct/distinct_list_after_group.sql b/yt/yql/tests/sql/suites/distinct/distinct_list_after_group.sql new file mode 100644 index 0000000000..33a780ea0d --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_list_after_group.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +select listsort(aggregate_list(distinct key)) as key_list, value as name from plato.Input3 group by value order by name; diff --git a/yt/yql/tests/sql/suites/distinct/distinct_one_count.sql b/yt/yql/tests/sql/suites/distinct/distinct_one_count.sql new file mode 100644 index 0000000000..a5778dfe30 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_one_count.sql @@ -0,0 +1 @@ +select value, count(distinct key) as count from plato.Input2 group by value order by value;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/distinct/distinct_star.sql b/yt/yql/tests/sql/suites/distinct/distinct_star.sql new file mode 100644 index 0000000000..ac96695c1f --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_star.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ + +use plato; + +select distinct * from Input2 order by key, subkey; + +select distinct * without subkey from Input2 order by key, value; + +select distinct a.*, TableName() as tn, without subkey from Input2 as a order by key, value; diff --git a/yt/yql/tests/sql/suites/distinct/distinct_star1.cfg b/yt/yql/tests/sql/suites/distinct/distinct_star1.cfg new file mode 100644 index 0000000000..d1dbe1ff8c --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_star1.cfg @@ -0,0 +1 @@ +in Input input_dups.txt diff --git a/yt/yql/tests/sql/suites/distinct/distinct_star1.sql b/yt/yql/tests/sql/suites/distinct/distinct_star1.sql new file mode 100644 index 0000000000..775d2ac81d --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_star1.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ + +select distinct * from plato.Input order by key, subkey; diff --git a/yt/yql/tests/sql/suites/distinct/distinct_union_all.sql b/yt/yql/tests/sql/suites/distinct/distinct_union_all.sql new file mode 100644 index 0000000000..7ddf2e4906 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_union_all.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ + +use plato; +pragma AnsiOrderByLimitInUnionAll; + +select distinct key, value from Input2 +union all +select key, value from Input2 order by key, value; + diff --git a/yt/yql/tests/sql/suites/distinct/distinct_window.sql b/yt/yql/tests/sql/suites/distinct/distinct_window.sql new file mode 100644 index 0000000000..ab37cd91a6 --- /dev/null +++ b/yt/yql/tests/sql/suites/distinct/distinct_window.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ + +use plato; + +select distinct AGGREGATE_LIST(value) over w as values, key from Input2 +window w as (partition by key order by value rows between unbounded preceding and unbounded following) +order by key; + diff --git a/yt/yql/tests/sql/suites/dq/blacklisted_pragmas.cfg b/yt/yql/tests/sql/suites/dq/blacklisted_pragmas.cfg new file mode 100644 index 0000000000..628ba758c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/blacklisted_pragmas.cfg @@ -0,0 +1,3 @@ +providers dq +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/dq/blacklisted_pragmas.sql b/yt/yql/tests/sql/suites/dq/blacklisted_pragmas.sql new file mode 100644 index 0000000000..48ed7e56a7 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/blacklisted_pragmas.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +/* dq can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; +pragma yt.MaxRowWeight='32M'; + +insert into Input +select key, subkey, value from Input; + diff --git a/yt/yql/tests/sql/suites/dq/blacklisted_pragmas1.cfg b/yt/yql/tests/sql/suites/dq/blacklisted_pragmas1.cfg new file mode 100644 index 0000000000..628ba758c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/blacklisted_pragmas1.cfg @@ -0,0 +1,3 @@ +providers dq +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/dq/blacklisted_pragmas1.sql b/yt/yql/tests/sql/suites/dq/blacklisted_pragmas1.sql new file mode 100644 index 0000000000..a5ff262828 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/blacklisted_pragmas1.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +/* dq can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; +pragma yt.PoolTrees='test'; + +insert into Input +select key, subkey, value from Input; + diff --git a/yt/yql/tests/sql/suites/dq/default.cfg b/yt/yql/tests/sql/suites/dq/default.cfg new file mode 100644 index 0000000000..5a04bd7d71 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/default.cfg @@ -0,0 +1,2 @@ +providers dq +in Input input.txt diff --git a/yt/yql/tests/sql/suites/dq/dq_replicate_ok.sql b/yt/yql/tests/sql/suites/dq/dq_replicate_ok.sql new file mode 100644 index 0000000000..7fe22bdd86 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/dq_replicate_ok.sql @@ -0,0 +1,6 @@ +use plato; +SELECT key + , COUNT(*) AS cnt + , COUNT(DISTINCT value) AS uniq +FROM Input +GROUP BY key diff --git a/yt/yql/tests/sql/suites/dq/join_cbo_native_3_tables.cfg b/yt/yql/tests/sql/suites/dq/join_cbo_native_3_tables.cfg new file mode 100644 index 0000000000..041e8638ac --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/join_cbo_native_3_tables.cfg @@ -0,0 +1,5 @@ +providers dq +in Input1 input.txt +in Input2 input.txt +in Input3 input.txt +in Input4 input.txt diff --git a/yt/yql/tests/sql/suites/dq/join_cbo_native_3_tables.sql b/yt/yql/tests/sql/suites/dq/join_cbo_native_3_tables.sql new file mode 100644 index 0000000000..163762e45a --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/join_cbo_native_3_tables.sql @@ -0,0 +1,10 @@ +use plato; + +pragma CostBasedOptimizer="native"; + +select i1.value, i2.value, i3.value, i4.value +from Input1 as i1 +join Input2 as i2 on i1.key=i2.key +join Input3 as i3 on i1.key=i3.key +join Input4 as i4 on i1.key=i4.key +order by i1.value, i2.value, i3.value, i4.value; diff --git a/yt/yql/tests/sql/suites/dq/mem_limit.cfg b/yt/yql/tests/sql/suites/dq/mem_limit.cfg new file mode 100644 index 0000000000..33c765a8f2 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/mem_limit.cfg @@ -0,0 +1,2 @@ +xfail +providers dq diff --git a/yt/yql/tests/sql/suites/dq/mem_limit.sql b/yt/yql/tests/sql/suites/dq/mem_limit.sql new file mode 100644 index 0000000000..b3bac08441 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/mem_limit.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* dqfile can not */ +USE plato; + +PRAGMA DqEngine="force"; +PRAGMA dq.MemoryLimit="1M"; +SELECT String::JoinFromList(ListMap(ListFromRange(0, 1000000), ($_) -> { return "0"; }), ""); diff --git a/yt/yql/tests/sql/suites/dq/pool_trees_whitelist.cfg b/yt/yql/tests/sql/suites/dq/pool_trees_whitelist.cfg new file mode 100644 index 0000000000..628ba758c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/pool_trees_whitelist.cfg @@ -0,0 +1,3 @@ +providers dq +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/dq/pool_trees_whitelist.sql b/yt/yql/tests/sql/suites/dq/pool_trees_whitelist.sql new file mode 100644 index 0000000000..cb4b754ff4 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/pool_trees_whitelist.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma OrderedColumns; +pragma yt.PoolTrees='physical,cloud'; + +insert into Input +select key, subkey, value from Input; diff --git a/yt/yql/tests/sql/suites/dq/precompute_asyncfile.cfg b/yt/yql/tests/sql/suites/dq/precompute_asyncfile.cfg new file mode 100644 index 0000000000..144206fd2c --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/precompute_asyncfile.cfg @@ -0,0 +1,4 @@ +providers dq +in Input input.txt +file list.txt list.txt +udf file_udf
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/dq/precompute_asyncfile.sql b/yt/yql/tests/sql/suites/dq/precompute_asyncfile.sql new file mode 100644 index 0000000000..a75d060c8e --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/precompute_asyncfile.sql @@ -0,0 +1,5 @@ +use plato; + +$a = select max(key) from Input where key in ParseFile("String", "list.txt"); + +select * from Input where key >= $a; diff --git a/yt/yql/tests/sql/suites/dq/precompute_parallel.cfg b/yt/yql/tests/sql/suites/dq/precompute_parallel.cfg new file mode 100644 index 0000000000..cf64efcf8e --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/precompute_parallel.cfg @@ -0,0 +1,4 @@ +providers dq +in Input input.txt +out Output1 output1.txt +out Output2 output2.txt diff --git a/yt/yql/tests/sql/suites/dq/precompute_parallel.sql b/yt/yql/tests/sql/suites/dq/precompute_parallel.sql new file mode 100644 index 0000000000..4f3924af4c --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/precompute_parallel.sql @@ -0,0 +1,7 @@ +use plato; + +$a = select key from Input order by key limit 1; + +insert into Output1 select * from Input where key <= $a; +insert into Output2 select * from Input where key >= $a; + diff --git a/yt/yql/tests/sql/suites/dq/precompute_parallel_indep.cfg b/yt/yql/tests/sql/suites/dq/precompute_parallel_indep.cfg new file mode 100644 index 0000000000..1ff2e85554 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/precompute_parallel_indep.cfg @@ -0,0 +1,5 @@ +providers dq +in Input1 input.txt +in Input2 input.txt +in Input3 input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/dq/precompute_parallel_indep.sql b/yt/yql/tests/sql/suites/dq/precompute_parallel_indep.sql new file mode 100644 index 0000000000..c9a5dbc8f4 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/precompute_parallel_indep.sql @@ -0,0 +1,5 @@ +use plato; + +insert into Output select sum(cast(key as int32)) from Input1; +insert into Output select sum(cast(key as int32)) from Input2; +insert into Output select sum(cast(key as int32)) from Input3; diff --git a/yt/yql/tests/sql/suites/dq/precompute_parallel_mix.cfg b/yt/yql/tests/sql/suites/dq/precompute_parallel_mix.cfg new file mode 100644 index 0000000000..cf64efcf8e --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/precompute_parallel_mix.cfg @@ -0,0 +1,4 @@ +providers dq +in Input input.txt +out Output1 output1.txt +out Output2 output2.txt diff --git a/yt/yql/tests/sql/suites/dq/precompute_parallel_mix.sql b/yt/yql/tests/sql/suites/dq/precompute_parallel_mix.sql new file mode 100644 index 0000000000..f68eaabcc9 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/precompute_parallel_mix.sql @@ -0,0 +1,7 @@ +use plato; + +$a = select key from Input order by key limit 1; +$b = select key from Input order by key limit 1 offset 1; + +insert into Output1 select * from Input where key <= $a; +insert into Output2 select * from Input where key >= $a and key != $b; diff --git a/yt/yql/tests/sql/suites/dq/precompute_result.sql b/yt/yql/tests/sql/suites/dq/precompute_result.sql new file mode 100644 index 0000000000..c00a9af0de --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/precompute_result.sql @@ -0,0 +1,6 @@ +use plato; + +$l = select min(cast(key as uint64)) as key from Input; +$l = EvaluateExpr($l); + +select * from Input limit $l ?? 0; diff --git a/yt/yql/tests/sql/suites/dq/precompute_tree.sql b/yt/yql/tests/sql/suites/dq/precompute_tree.sql new file mode 100644 index 0000000000..2073f261e3 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/precompute_tree.sql @@ -0,0 +1,9 @@ +use plato; + +$a = select max(key) from Input; + +$b = select min(subkey) from Input where key < $a; + +$c = select min(key) from Input where key < "080"; + +select * from Input where key > $c and subkey > $b; diff --git a/yt/yql/tests/sql/suites/dq/read_cost.sql b/yt/yql/tests/sql/suites/dq/read_cost.sql new file mode 100644 index 0000000000..173c2f1593 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/read_cost.sql @@ -0,0 +1,8 @@ +pragma warning("disable", "4510"); +pragma CostBasedOptimizer="PG"; +use plato; + +$foo = select subkey, key, value as v from Input order by subkey asc, key desc limit 10; +$x = process $foo; + +select YQL::CostsOf($x) as costs; diff --git a/yt/yql/tests/sql/suites/dq/read_cost_native.sql b/yt/yql/tests/sql/suites/dq/read_cost_native.sql new file mode 100644 index 0000000000..65e744bb77 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/read_cost_native.sql @@ -0,0 +1,8 @@ +pragma warning("disable", "4510"); +pragma CostBasedOptimizer="Native"; +use plato; + +$foo = select subkey, key, value as v from Input order by subkey asc, key desc limit 10; +$x = process $foo; + +select YQL::CostsOf($x) as costs; diff --git a/yt/yql/tests/sql/suites/dq/truncate_local.sql b/yt/yql/tests/sql/suites/dq/truncate_local.sql new file mode 100644 index 0000000000..71872dcf16 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/truncate_local.sql @@ -0,0 +1,3 @@ +pragma DqEngine="auto"; +select * from AS_TABLE(ListMap(ListFromRange(1,10000),($x)->(<|a:$x|>))); + diff --git a/yt/yql/tests/sql/suites/dq/wrong_script.cfg b/yt/yql/tests/sql/suites/dq/wrong_script.cfg new file mode 100644 index 0000000000..33c765a8f2 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/wrong_script.cfg @@ -0,0 +1,2 @@ +xfail +providers dq diff --git a/yt/yql/tests/sql/suites/dq/wrong_script.sql b/yt/yql/tests/sql/suites/dq/wrong_script.sql new file mode 100644 index 0000000000..7774e498a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/wrong_script.sql @@ -0,0 +1,13 @@ +/* custom error:Failed to cast arguments*/ +/* dqfile can not */ +USE plato; + +$f=Python3::f(@@ +def f(x): + """ + Callable<(Int32)->Int32> + """ + return "" +@@); + +select $f(0); diff --git a/yt/yql/tests/sql/suites/dq/wrong_script_segf.cfg b/yt/yql/tests/sql/suites/dq/wrong_script_segf.cfg new file mode 100644 index 0000000000..33c765a8f2 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/wrong_script_segf.cfg @@ -0,0 +1,2 @@ +xfail +providers dq diff --git a/yt/yql/tests/sql/suites/dq/wrong_script_segf.sql b/yt/yql/tests/sql/suites/dq/wrong_script_segf.sql new file mode 100644 index 0000000000..a679ed4c2c --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/wrong_script_segf.sql @@ -0,0 +1,17 @@ +/* custom error:PrintBacktraceToStderr*/ +/* dqfile can not */ +USE plato; + +$f=Python3::f(@@ +def f(x): + """ + Callable<(Int32)->Int32> + """ + import ctypes + def deref(addr, typ): + return ctypes.cast(addr, ctypes.POINTER(typ)).contents + print(deref(1, ctypes.c_int)) + return 0 +@@); + +select $f(0); diff --git a/yt/yql/tests/sql/suites/dq/wrong_script_timeout.sql b/yt/yql/tests/sql/suites/dq/wrong_script_timeout.sql new file mode 100644 index 0000000000..8493ab87e8 --- /dev/null +++ b/yt/yql/tests/sql/suites/dq/wrong_script_timeout.sql @@ -0,0 +1,14 @@ +/* dqfile can not */ +USE plato; + +$f=Python3::f(@@ +def f(x): + """ + Callable<(Int32)->Int32> + """ + import time + time.sleep(60) + return 0 +@@); + +select $f(0); diff --git a/yt/yql/tests/sql/suites/epochs/default.cfg b/yt/yql/tests/sql/suites/epochs/default.cfg new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/yt/yql/tests/sql/suites/epochs/default.cfg diff --git a/yt/yql/tests/sql/suites/epochs/modify.txt.attr b/yt/yql/tests/sql/suites/epochs/modify.txt.attr new file mode 100644 index 0000000000..36b3c00c90 --- /dev/null +++ b/yt/yql/tests/sql/suites/epochs/modify.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["key";["DataType";"String";];];["subkey";["DataType";"String";];];["value";["DataType";"String";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/epochs/read_modified.cfg b/yt/yql/tests/sql/suites/epochs/read_modified.cfg new file mode 100644 index 0000000000..91ba34f663 --- /dev/null +++ b/yt/yql/tests/sql/suites/epochs/read_modified.cfg @@ -0,0 +1,2 @@ +out Output modify.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/epochs/read_modified.sql b/yt/yql/tests/sql/suites/epochs/read_modified.sql new file mode 100644 index 0000000000..b30996c785 --- /dev/null +++ b/yt/yql/tests/sql/suites/epochs/read_modified.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +/* multirun can not */ +use plato; + +insert into Output select * from Output; +insert into Output select * from Output; + +commit; + +select count(*) from Output; + +insert into Output select * from Output; +insert into Output select * from Output; + +commit; + +select count(*) from Output; diff --git a/yt/yql/tests/sql/suites/epochs/reset_sortness_on_append.cfg b/yt/yql/tests/sql/suites/epochs/reset_sortness_on_append.cfg new file mode 100644 index 0000000000..7cbf80703f --- /dev/null +++ b/yt/yql/tests/sql/suites/epochs/reset_sortness_on_append.cfg @@ -0,0 +1,2 @@ +out Output output.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/epochs/reset_sortness_on_append.sql b/yt/yql/tests/sql/suites/epochs/reset_sortness_on_append.sql new file mode 100644 index 0000000000..8127e25a0a --- /dev/null +++ b/yt/yql/tests/sql/suites/epochs/reset_sortness_on_append.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +/* multirun can not */ +use plato; + +insert into Output with truncate (a, b) values +('00', '10'), +('11', '20'), +('21', '30'), +('31', '40'), +('41', '50'); + +commit; + +insert into Output select * from Output order by a; + +commit; + +select * from Output where a > '11' diff --git a/yt/yql/tests/sql/suites/epochs/use_and_drop_anonymous.cfg b/yt/yql/tests/sql/suites/epochs/use_and_drop_anonymous.cfg new file mode 100644 index 0000000000..2e3eaf9682 --- /dev/null +++ b/yt/yql/tests/sql/suites/epochs/use_and_drop_anonymous.cfg @@ -0,0 +1,4 @@ +in Input input.txt +out Output output.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/epochs/use_and_drop_anonymous.sql b/yt/yql/tests/sql/suites/epochs/use_and_drop_anonymous.sql new file mode 100644 index 0000000000..ee5c907dc9 --- /dev/null +++ b/yt/yql/tests/sql/suites/epochs/use_and_drop_anonymous.sql @@ -0,0 +1,21 @@ +/* postgres can not */ +/* multirun can not */ +use plato; + +insert into @tmp select * from Input where key > "100"; +commit; + +insert into Output +select * from @tmp where key != "150"; + +drop table @tmp; +commit; + +insert into @tmp select * from Input where key > "200"; +commit; + +insert into Output +select * from @tmp where key != "150"; + +drop table @tmp; +commit; diff --git a/yt/yql/tests/sql/suites/epochs/use_sorted_by_complex_type.cfg b/yt/yql/tests/sql/suites/epochs/use_sorted_by_complex_type.cfg new file mode 100644 index 0000000000..fe2b19a9ff --- /dev/null +++ b/yt/yql/tests/sql/suites/epochs/use_sorted_by_complex_type.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/epochs/use_sorted_by_complex_type.sql b/yt/yql/tests/sql/suites/epochs/use_sorted_by_complex_type.sql new file mode 100644 index 0000000000..28c1f2e062 --- /dev/null +++ b/yt/yql/tests/sql/suites/epochs/use_sorted_by_complex_type.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +/* multirun can not */ +USE plato; + +insert into Output +select + key as key, + aggr_list(subkey) as lst +from Input +group by key +order by key, lst; + +commit; + +select * from Output where key > "150";
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/expr/as_table_emptylist.cfg b/yt/yql/tests/sql/suites/expr/as_table_emptylist.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/as_table_emptylist.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/expr/as_table_emptylist.sql b/yt/yql/tests/sql/suites/expr/as_table_emptylist.sql new file mode 100644 index 0000000000..6896846199 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/as_table_emptylist.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ +select * from as_table([]); +select x+1 from as_table([]); +select * from as_table([]) order by x limit 5 offset 2; +select x from as_table([]) order by x; +select count(*) from as_table([]); +select x, count(*) from as_table([]) group by x; +select x, count(*) from as_table([]) group by x having count(x) > 1; +select lead(x) over w, lag(x) over w, row_number() over w, + count(*) over w from as_table([]) window w as (); + +select lead(x) over w, lag(x) over w, rank() over w, denserank() over w, + count(*) over w from as_table([]) window w as (order by x); + +insert into plato.Output +select * from as_table([]); diff --git a/yt/yql/tests/sql/suites/expr/constraints_of.cfg b/yt/yql/tests/sql/suites/expr/constraints_of.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/constraints_of.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/expr/constraints_of.sql b/yt/yql/tests/sql/suites/expr/constraints_of.sql new file mode 100644 index 0000000000..2306ba3532 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/constraints_of.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma warning("disable", "4510"); +use plato; + +$foo = select subkey, key, value as v from Input order by subkey asc, key desc limit 0; +$x = process $foo; + +select YQL::ConstraintsOf($x) as constraints; + diff --git a/yt/yql/tests/sql/suites/expr/default.cfg b/yt/yql/tests/sql/suites/expr/default.cfg new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/default.cfg diff --git a/yt/yql/tests/sql/suites/expr/double.txt.attr b/yt/yql/tests/sql/suites/expr/double.txt.attr new file mode 100644 index 0000000000..f0f906d3f7 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/double.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Double"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]] +}} diff --git a/yt/yql/tests/sql/suites/expr/double_join_with_list_from_range.cfg b/yt/yql/tests/sql/suites/expr/double_join_with_list_from_range.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/double_join_with_list_from_range.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/expr/double_join_with_list_from_range.sql b/yt/yql/tests/sql/suites/expr/double_join_with_list_from_range.sql new file mode 100644 index 0000000000..9a430a536d --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/double_join_with_list_from_range.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +$list = select lst, row_number() over (order by lst) as rn from ( + select * from ( + select ListFromRange(1us, 333us) as lst + ) FLATTEN LIST by lst +); + +$usr = select value, CAST(key AS Uint16) + 3us AS age, CAST(key AS Uint16) + 7us as age1 +from plato.Input; + +select + u.*, + l1.rn as rn1, + l2.rn as rn2 +from $usr as u +join $list as l1 on u.age == l1.lst +join $list as l2 on u.age1 == l2.lst +order by value; diff --git a/yt/yql/tests/sql/suites/expr/empty_iterator.cfg b/yt/yql/tests/sql/suites/expr/empty_iterator.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/empty_iterator.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/expr/empty_iterator.sql b/yt/yql/tests/sql/suites/expr/empty_iterator.sql new file mode 100644 index 0000000000..0399f810a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/empty_iterator.sql @@ -0,0 +1,20 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$train = +SELECT * FROM Input WHERE key > "900" GROUP BY value; + +$method = ($stream) -> { + $func = Callable( + CallableType(0, TypeOf($stream), TypeOf($stream)), + ($_1) -> { return $_1; } + ); + RETURN $func($stream); +}; + +$prediction = + PROCESS $train + USING $method(TableRows()); + +SELECT * FROM $prediction; diff --git a/yt/yql/tests/sql/suites/expr/empty_iterator2.cfg b/yt/yql/tests/sql/suites/expr/empty_iterator2.cfg new file mode 100644 index 0000000000..e68191f82c --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/empty_iterator2.cfg @@ -0,0 +1 @@ +in Input input.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/expr/empty_iterator2.sql b/yt/yql/tests/sql/suites/expr/empty_iterator2.sql new file mode 100644 index 0000000000..39164341d4 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/empty_iterator2.sql @@ -0,0 +1,20 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$train = +SELECT key, value FROM Input GROUP BY key, value having key > "900"; + +$method = ($stream) -> { + $func = Callable( + CallableType(0, TypeOf($stream), TypeOf($stream)), + ($_1) -> { return $_1; } + ); + RETURN $func($stream); +}; + +$prediction = + PROCESS $train + USING $method(TableRows()); + +SELECT * FROM $prediction; diff --git a/yt/yql/tests/sql/suites/expr/evaluate_parse_inf_nan.cfg b/yt/yql/tests/sql/suites/expr/evaluate_parse_inf_nan.cfg new file mode 100644 index 0000000000..88d007fa60 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/evaluate_parse_inf_nan.cfg @@ -0,0 +1,3 @@ +in Input double.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/expr/evaluate_parse_inf_nan.sql b/yt/yql/tests/sql/suites/expr/evaluate_parse_inf_nan.sql new file mode 100644 index 0000000000..ee49564f89 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/evaluate_parse_inf_nan.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +use plato; + +$foo = process Input; +select ListSort(EvaluateExpr($foo), ($item) -> (AsTuple($item.key, $item.subkey))); + diff --git a/yt/yql/tests/sql/suites/expr/inline_call.cfg b/yt/yql/tests/sql/suites/expr/inline_call.cfg new file mode 100644 index 0000000000..2c6a0d040b --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/inline_call.cfg @@ -0,0 +1,3 @@ +in Input input.txt +udf math_udf + diff --git a/yt/yql/tests/sql/suites/expr/inline_call.sql b/yt/yql/tests/sql/suites/expr/inline_call.sql new file mode 100644 index 0000000000..f93b2b64fc --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/inline_call.sql @@ -0,0 +1,28 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$x = AsStruct(1 as a); +select $x.a; + +$y = AsTuple(2,3); +select $y.1; + +select length("foo"); + +select Math::Pi(); + +$f = () -> { + return () -> { + return AsDict(AsTuple("foo",AsList(AsStruct(AsTuple(1) as bar)))); + } +}; + +select $f()()["foo"][0].bar.0; + +select ()->{return 1}(); + +$type = Callable<()->List<Int32>>; +$g = AsStruct(Yql::Callable($type, ()->{return AsList(1,2,3)}) as foo); + +select $g.foo()[0]; diff --git a/yt/yql/tests/sql/suites/expr/len.cfg b/yt/yql/tests/sql/suites/expr/len.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/len.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/expr/len.sql b/yt/yql/tests/sql/suites/expr/len.sql new file mode 100644 index 0000000000..9e35dda177 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/len.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT LEN("My String"); + +SELECT LEN(key) from Input; diff --git a/yt/yql/tests/sql/suites/expr/non_persistable_group_by_column_fail.cfg b/yt/yql/tests/sql/suites/expr/non_persistable_group_by_column_fail.cfg new file mode 100644 index 0000000000..4f32e1efb8 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/non_persistable_group_by_column_fail.cfg @@ -0,0 +1,2 @@ +xfail +in Input input.txt diff --git a/yt/yql/tests/sql/suites/expr/non_persistable_group_by_column_fail.sql b/yt/yql/tests/sql/suites/expr/non_persistable_group_by_column_fail.sql new file mode 100644 index 0000000000..b20bac6443 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/non_persistable_group_by_column_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Expected hashable and equatable type for key column: key, but got: Resource<'MTRand'>*/ +PRAGMA Warning("error", '1104'); + +USE plato; + +SELECT COUNT(*) FROM Input +GROUP BY YQL::NewMTRand(length(value)) as key; diff --git a/yt/yql/tests/sql/suites/expr/non_persistable_group_by_having_some_fail.cfg b/yt/yql/tests/sql/suites/expr/non_persistable_group_by_having_some_fail.cfg new file mode 100644 index 0000000000..4f32e1efb8 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/non_persistable_group_by_having_some_fail.cfg @@ -0,0 +1,2 @@ +xfail +in Input input.txt diff --git a/yt/yql/tests/sql/suites/expr/non_persistable_group_by_having_some_fail.sql b/yt/yql/tests/sql/suites/expr/non_persistable_group_by_having_some_fail.sql new file mode 100644 index 0000000000..d7e1dba4ad --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/non_persistable_group_by_having_some_fail.sql @@ -0,0 +1,10 @@ +/* custom error:Persistable required*/ +PRAGMA Warning("error", '1104'); + +USE plato; + +SELECT + key +FROM Input +GROUP BY key +HAVING Yql::NextMtRand(SOME(YQL::NewMTRand(1))).0 > 100; diff --git a/yt/yql/tests/sql/suites/expr/non_persistable_group_by_some_fail.cfg b/yt/yql/tests/sql/suites/expr/non_persistable_group_by_some_fail.cfg new file mode 100644 index 0000000000..4f32e1efb8 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/non_persistable_group_by_some_fail.cfg @@ -0,0 +1,2 @@ +xfail +in Input input.txt diff --git a/yt/yql/tests/sql/suites/expr/non_persistable_group_by_some_fail.sql b/yt/yql/tests/sql/suites/expr/non_persistable_group_by_some_fail.sql new file mode 100644 index 0000000000..9c99d9a10f --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/non_persistable_group_by_some_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Persistable required*/ +PRAGMA Warning("error", '1104'); + +USE plato; + +SELECT SOME(YQL::NewMTRand(1)) FROM Input +GROUP BY key; diff --git a/yt/yql/tests/sql/suites/expr/non_persistable_inner_select_fail.cfg b/yt/yql/tests/sql/suites/expr/non_persistable_inner_select_fail.cfg new file mode 100644 index 0000000000..4f32e1efb8 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/non_persistable_inner_select_fail.cfg @@ -0,0 +1,2 @@ +xfail +in Input input.txt diff --git a/yt/yql/tests/sql/suites/expr/non_persistable_inner_select_fail.sql b/yt/yql/tests/sql/suites/expr/non_persistable_inner_select_fail.sql new file mode 100644 index 0000000000..a01042a41c --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/non_persistable_inner_select_fail.sql @@ -0,0 +1,10 @@ +/* custom error:Persistable required*/ +PRAGMA Warning("error", '1104'); + +USE plato; + +SELECT 1 FROM ( + SELECT + YQL::NewMTRand(1) as x + FROM Input +) diff --git a/yt/yql/tests/sql/suites/expr/non_persistable_insert_into_fail.cfg b/yt/yql/tests/sql/suites/expr/non_persistable_insert_into_fail.cfg new file mode 100644 index 0000000000..5625fb3b45 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/non_persistable_insert_into_fail.cfg @@ -0,0 +1,2 @@ +xfail +out Output output.txt diff --git a/yt/yql/tests/sql/suites/expr/non_persistable_insert_into_fail.sql b/yt/yql/tests/sql/suites/expr/non_persistable_insert_into_fail.sql new file mode 100644 index 0000000000..56b73236a9 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/non_persistable_insert_into_fail.sql @@ -0,0 +1,9 @@ +/* custom error:Persistable required*/ +PRAGMA Warning("error", '1104'); + +USE plato; + +INSERT INTO + Output (key, value) +VALUES + ("foo", YQL::NewMTRand(1)); diff --git a/yt/yql/tests/sql/suites/expr/non_persistable_order_by_fail.cfg b/yt/yql/tests/sql/suites/expr/non_persistable_order_by_fail.cfg new file mode 100644 index 0000000000..4f32e1efb8 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/non_persistable_order_by_fail.cfg @@ -0,0 +1,2 @@ +xfail +in Input input.txt diff --git a/yt/yql/tests/sql/suites/expr/non_persistable_order_by_fail.sql b/yt/yql/tests/sql/suites/expr/non_persistable_order_by_fail.sql new file mode 100644 index 0000000000..d600f8d474 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/non_persistable_order_by_fail.sql @@ -0,0 +1,7 @@ +/* custom error:Persistable required*/ +PRAGMA Warning("error", '1104'); + +USE plato; + +SELECT key, value FROM Input +ORDER BY YQL::NewMTRand(length(value)); diff --git a/yt/yql/tests/sql/suites/expr/tagged_runtime.sql b/yt/yql/tests/sql/suites/expr/tagged_runtime.sql new file mode 100644 index 0000000000..8d185b767e --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/tagged_runtime.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +use plato; +insert into @tmp +select Just(( + AsTagged(1,"A"), + AsTagged(just(2),"B"), + AsTagged(null,"C"), + AsTagged(Nothing(Int32?),"D"), + AsTagged(Nothing(pgint4?),"E") + )) as x; +commit; +select x.0, x.1, x.2, x.3, x.4 from @tmp diff --git a/yt/yql/tests/sql/suites/expr/yql-10180.sql b/yt/yql/tests/sql/suites/expr/yql-10180.sql new file mode 100644 index 0000000000..9fa1d68e31 --- /dev/null +++ b/yt/yql/tests/sql/suites/expr/yql-10180.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ +USE plato; + +$logs_path = "//logs/antirobot-daemon-log2/1d"; +$results_path = "//home/antispam/antirobot/sharding_daily"; +$logs_per_run = 10; + +DEFINE SUBQUERY $last_tables($path, $limit) AS + SELECT AGGREGATE_LIST(Name) + FROM ( + SELECT ListLast(String::SplitToList(Path, "/")) as Name + FROM FOLDER($path) + WHERE Type = "table" + ORDER BY Name DESC + LIMIT $limit + ) +END DEFINE; + + +$logs = (SELECT * FROM $last_tables($logs_path, $logs_per_run)); +$processed_logs = (SELECT * FROM $last_tables($results_path, $logs_per_run)); + +SELECT SetDifference(ToSet($logs), ToSet($processed_logs)) diff --git a/yt/yql/tests/sql/suites/file/bools.lst b/yt/yql/tests/sql/suites/file/bools.lst new file mode 100644 index 0000000000..f811fea266 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/bools.lst @@ -0,0 +1,8 @@ +0 +1 +1 +false +0 +1 +true +0 diff --git a/yt/yql/tests/sql/suites/file/file_constness.cfg b/yt/yql/tests/sql/suites/file/file_constness.cfg new file mode 100644 index 0000000000..34dab9d3e0 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/file_constness.cfg @@ -0,0 +1,3 @@ +in Input input_intersect.txt +file keyid.lst keyid.lst +udf file_udf diff --git a/yt/yql/tests/sql/suites/file/file_constness.sql b/yt/yql/tests/sql/suites/file/file_constness.sql new file mode 100644 index 0000000000..b0adb1b5ee --- /dev/null +++ b/yt/yql/tests/sql/suites/file/file_constness.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* syntax version 1 */ +select key, + FileContent("keyid.lst") as content, + ListCollect(ParseFile('int32', "keyid.lst")) as content_list, +from plato.Input group by key order by key; diff --git a/yt/yql/tests/sql/suites/file/file_list_simple.cfg b/yt/yql/tests/sql/suites/file/file_list_simple.cfg new file mode 100644 index 0000000000..9756b704ec --- /dev/null +++ b/yt/yql/tests/sql/suites/file/file_list_simple.cfg @@ -0,0 +1,4 @@ +in Input input_intersect.txt +file keyid.lst keyid.lst +udf file_udf +udf string_udf
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/file/file_list_simple.sql b/yt/yql/tests/sql/suites/file/file_list_simple.sql new file mode 100644 index 0000000000..aabaacc753 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/file_list_simple.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +/* syntax version 1 */ +-- compiles to different code in v0/v1 due to different SplitToList settings +select * from plato.Input where key in String::SplitToList(FileContent("keyid.lst"), "\n", true); diff --git a/yt/yql/tests/sql/suites/file/keyid.lst b/yt/yql/tests/sql/suites/file/keyid.lst new file mode 100644 index 0000000000..5c9644f627 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/keyid.lst @@ -0,0 +1,7 @@ +911 +884 +350 +23 +150 +200 +250 diff --git a/yt/yql/tests/sql/suites/file/parse_file_in_select_as_int.cfg b/yt/yql/tests/sql/suites/file/parse_file_in_select_as_int.cfg new file mode 100644 index 0000000000..0b503dd816 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/parse_file_in_select_as_int.cfg @@ -0,0 +1,3 @@ +in Input input_intersect.txt +file keyid.lst keyid.lst +udf file_udf
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/file/parse_file_in_select_as_int.sql b/yt/yql/tests/sql/suites/file/parse_file_in_select_as_int.sql new file mode 100644 index 0000000000..ca58dc1af0 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/parse_file_in_select_as_int.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select key, value, cast(key as int32) ?? 0 in ParseFile('int32', "keyid.lst") as privilege from plato.Input; diff --git a/yt/yql/tests/sql/suites/file/parse_file_in_select_as_str.cfg b/yt/yql/tests/sql/suites/file/parse_file_in_select_as_str.cfg new file mode 100644 index 0000000000..0b503dd816 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/parse_file_in_select_as_str.cfg @@ -0,0 +1,3 @@ +in Input input_intersect.txt +file keyid.lst keyid.lst +udf file_udf
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/file/parse_file_in_select_as_str.sql b/yt/yql/tests/sql/suites/file/parse_file_in_select_as_str.sql new file mode 100644 index 0000000000..47bf7969a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/parse_file_in_select_as_str.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select key, value, key in ParseFile('string', "keyid.lst") as privilege from plato.Input; diff --git a/yt/yql/tests/sql/suites/file/parse_file_in_select_as_uint64.cfg b/yt/yql/tests/sql/suites/file/parse_file_in_select_as_uint64.cfg new file mode 100644 index 0000000000..34dab9d3e0 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/parse_file_in_select_as_uint64.cfg @@ -0,0 +1,3 @@ +in Input input_intersect.txt +file keyid.lst keyid.lst +udf file_udf diff --git a/yt/yql/tests/sql/suites/file/parse_file_in_select_as_uint64.sql b/yt/yql/tests/sql/suites/file/parse_file_in_select_as_uint64.sql new file mode 100644 index 0000000000..2e1b948ef1 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/parse_file_in_select_as_uint64.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select key, value, cast(key as int32) in ParseFile('uint64', "keyid.lst") as privilege from plato.Input; diff --git a/yt/yql/tests/sql/suites/file/where_key_in_file_content.cfg b/yt/yql/tests/sql/suites/file/where_key_in_file_content.cfg new file mode 100644 index 0000000000..34dab9d3e0 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/where_key_in_file_content.cfg @@ -0,0 +1,3 @@ +in Input input_intersect.txt +file keyid.lst keyid.lst +udf file_udf diff --git a/yt/yql/tests/sql/suites/file/where_key_in_file_content.sql b/yt/yql/tests/sql/suites/file/where_key_in_file_content.sql new file mode 100644 index 0000000000..12579fbf51 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/where_key_in_file_content.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input where key in ParseFile('String', "keyid.lst"); diff --git a/yt/yql/tests/sql/suites/file/where_key_in_file_content_typed.cfg b/yt/yql/tests/sql/suites/file/where_key_in_file_content_typed.cfg new file mode 100644 index 0000000000..34dab9d3e0 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/where_key_in_file_content_typed.cfg @@ -0,0 +1,3 @@ +in Input input_intersect.txt +file keyid.lst keyid.lst +udf file_udf diff --git a/yt/yql/tests/sql/suites/file/where_key_in_file_content_typed.sql b/yt/yql/tests/sql/suites/file/where_key_in_file_content_typed.sql new file mode 100644 index 0000000000..337a419ac5 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/where_key_in_file_content_typed.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input where cast(key as Uint32) in ParseFile('uint32', "keyid.lst"); diff --git a/yt/yql/tests/sql/suites/file/where_key_in_get_file_content.cfg b/yt/yql/tests/sql/suites/file/where_key_in_get_file_content.cfg new file mode 100644 index 0000000000..9ad7c33313 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/where_key_in_get_file_content.cfg @@ -0,0 +1,4 @@ +in Input input_intersect.txt +file keyid.lst keyid.lst +udf file_udf +udf string_udf diff --git a/yt/yql/tests/sql/suites/file/where_key_in_get_file_content.sql b/yt/yql/tests/sql/suites/file/where_key_in_get_file_content.sql new file mode 100644 index 0000000000..aabaacc753 --- /dev/null +++ b/yt/yql/tests/sql/suites/file/where_key_in_get_file_content.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +/* syntax version 1 */ +-- compiles to different code in v0/v1 due to different SplitToList settings +select * from plato.Input where key in String::SplitToList(FileContent("keyid.lst"), "\n", true); diff --git a/yt/yql/tests/sql/suites/flatten_by/default.cfg b/yt/yql/tests/sql/suites/flatten_by/default.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/default.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_and_where.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_and_where.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_and_where.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_and_where.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_and_where.sql new file mode 100644 index 0000000000..df60a53b83 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_and_where.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +$data = (select mod, aggregate_list(value) as lv from plato.Input group by cast(key as uint32) % 10 as mod); + +select mod, iv from $data as d flatten by lv as iv where iv < 'd' order by mod, iv; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_by_aster_opt.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_by_aster_opt.sql new file mode 100644 index 0000000000..7294949685 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_by_aster_opt.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* syntax version 1 */ +select * from (select d.*, Just(key) as ok from plato.Input as d) flatten by ok; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_by_opt_dict.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_by_opt_dict.cfg new file mode 100644 index 0000000000..bf1b560b58 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_by_opt_dict.cfg @@ -0,0 +1 @@ +in Input input_intersect_sorted.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_by_opt_dict.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_by_opt_dict.sql new file mode 100644 index 0000000000..1182060308 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_by_opt_dict.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +$data_dict = (select mod, Just(ToDict(ListEnumerate(ListTake(ListSort(aggregate_list(key)), 1)))) as dk, ListTake(ListSort(aggregate_list(value)), 1) as lv from plato.Input group by cast(subkey as uint32) % 10 as mod); + +select * from $data_dict flatten dict by dk order by mod; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_by_typed_table.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_by_typed_table.cfg new file mode 100644 index 0000000000..eaccb9ef55 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_by_typed_table.cfg @@ -0,0 +1 @@ +in Input typed_table.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_by_typed_table.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_by_typed_table.sql new file mode 100644 index 0000000000..10cf6ca887 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_by_typed_table.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* syntax version 1 */ +select bb from plato.Input view opt_struct flatten by b as bb; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_columns.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_columns.sql new file mode 100644 index 0000000000..12fe13e98d --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_columns.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +USE plato; + +SELECT * FROM ( +SELECT + AsStruct(key as key, subkey as subkey), + AsStruct("value: " || value as value) +FROM Input +) +FLATTEN COLUMNS; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_columns_by_aggregate.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_columns_by_aggregate.sql new file mode 100644 index 0000000000..3ab01cc18d --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_columns_by_aggregate.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +USE plato; + +$input = (SELECT * + FROM ( + SELECT Unwrap(some(row)) + FROM ( + SELECT TableRow() as row + FROM Input + ) + ) FLATTEN COLUMNS +); + +--INSERT INTO Output WITH TRUNCATE +SELECT * +FROM $input diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_corr_name_column.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_corr_name_column.sql new file mode 100644 index 0000000000..666a9f5706 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_corr_name_column.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$data = select 1 as n, AsList(4, 5, 6) as l, AsStruct(10 as n, AsList(1, 2, 3) as l) as s union all + select 2 as n, AsList(4, 5) as l, AsStruct(20 as n, AsList(1, 2) as l) as s; + +select n,l from $data as l flatten by l order by n,l; +select n,l from $data as l flatten by l.l order by n,l; + +select n,l from $data as s flatten by s.l order by n,l; +select n,newl from $data as s flatten by (s.l as newl) order by n,newl; + +select n,l from $data as s flatten by (s.s.l as l) order by n,l; + diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_dict.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_dict.cfg new file mode 100644 index 0000000000..bf1b560b58 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_dict.cfg @@ -0,0 +1 @@ +in Input input_intersect_sorted.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_dict.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_dict.sql new file mode 100644 index 0000000000..a9618c7aac --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_dict.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma sampleselect; + +$data_dict = (select mod, YQL::ToIndexDict(ListSort(aggregate_list(key))) as dk, ListSort(aggregate_list(subkey)) as ls, ListSort(aggregate_list(value)) as lv from plato.Input group by cast(key as uint32) % 10 as mod); + +select + mod, iv, ls, + dd.di.0 as key, + dd.di.1 as value +from $data_dict as dd +flatten by (dk as di, lv as iv, ls) +order by mod, iv, ls, key, value; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_dict_by_opt.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_dict_by_opt.cfg new file mode 100644 index 0000000000..bf1b560b58 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_dict_by_opt.cfg @@ -0,0 +1 @@ +in Input input_intersect_sorted.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_dict_by_opt.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_dict_by_opt.sql new file mode 100644 index 0000000000..79acee152b --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_dict_by_opt.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +$data_dict = (select mod, YQL::ToIndexDict(ListTake(ListSort(aggregate_list(Just(key))), 1)) as dk, ListTake(ListSort(aggregate_list(subkey)), 1) as ls from plato.Input group by cast(key as uint32) % 10 as mod); + +select * from $data_dict flatten by (dk as di, ls, mod) order by mod; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_expr_join.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_expr_join.cfg new file mode 100644 index 0000000000..c1a1de6dd0 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_expr_join.cfg @@ -0,0 +1,4 @@ +in Input input.txt +udf string_udf +providers yt + diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_expr_join.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_expr_join.sql new file mode 100644 index 0000000000..810c8b615d --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_expr_join.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$data = SELECT "075,020,075,020" AS a, "x" AS c; + +SELECT * FROM ANY $data as x FLATTEN BY (String::SplitToList(a, ",") as aa) JOIN Input as y ON x.aa = y.key ORDER BY aa; + diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_expr_struct.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_expr_struct.sql new file mode 100644 index 0000000000..35ca94eeb8 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_expr_struct.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$data = select 1 as n, AsList(4, 5, 6) as l, AsStruct(10 as n, AsList(1, 2, 3) as l) as s union all + select 2 as n, AsList(4, 5) as l, AsStruct(20 as n, AsList(1, 2) as l) as s; + +select n,l from $data flatten by s.l as l order by n,l; +select n,l from $data flatten by (s.l as l) order by n,l; +select n,l from $data flatten by (ListExtend(s.l, AsList(100)) as l) order by n,l; + +select n,l,sl from $data flatten by (l, s.l as sl) order by n,l,sl diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_few_fields.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_few_fields.cfg new file mode 100644 index 0000000000..bf1b560b58 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_few_fields.cfg @@ -0,0 +1 @@ +in Input input_intersect_sorted.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_few_fields.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_few_fields.sql new file mode 100644 index 0000000000..2f7ccd4bbb --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_few_fields.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma sampleselect; + +$data_deep = (select mod, aggregate_list(key) as lk, aggregate_list(subkey) as ls, aggregate_list(value) as lv from plato.Input group by cast(key as uint32) % 10 as mod); + +-- order to have same results on yamr and yt +select * from $data_deep flatten by (lk as ik, ls, lv) order by mod, ik, ls, lv; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_list.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_list.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_list.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_list.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_list.sql new file mode 100644 index 0000000000..4a7c16bac7 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_list.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +$data = (select mod, aggregate_list(value) as lv from plato.Input group by cast(key as uint32) % 10 as mod); + +select mod, iv from $data flatten by lv as iv order by mod, iv; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_list_on_flatten_by.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_list_on_flatten_by.cfg new file mode 100644 index 0000000000..2513e0a9c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_list_on_flatten_by.cfg @@ -0,0 +1 @@ +in Input flatten_list_on_flatten_by.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_list_on_flatten_by.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_list_on_flatten_by.sql new file mode 100644 index 0000000000..dfb14aea15 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_list_on_flatten_by.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +USE plato; + +$flatten = ( + SELECT + answer_and_clicks.0 AS permalink, + bc_type_tuple + FROM Input AS a + FLATTEN BY parsed_answers_and_clicks as answer_and_clicks + WHERE answer_and_clicks.1 = 1 +); + +SELECT + bc_type, + permalink, +FROM ( + SELECT + asList(bc_type_tuple.0, 'total') as bc_type, + a.* WITHOUT bc_type_tuple + FROM $flatten as a + ) +FLATTEN LIST BY bc_type; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_list_on_flatten_by.txt.attr b/yt/yql/tests/sql/suites/flatten_by/flatten_list_on_flatten_by.txt.attr new file mode 100644 index 0000000000..1f5a7568d4 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_list_on_flatten_by.txt.attr @@ -0,0 +1,55 @@ +{ +"_yql_row_spec"= { + "StrictSchema"= true; +"Type"= [ + "StructType"; + [ + [ + "bc_type_tuple"; + [ + "TupleType"; + [ + [ + "DataType"; + "String" + ]; + [ + "DataType"; + "String" + ] + ] + ] + ]; + [ + "parsed_answers_and_clicks"; + [ + "ListType"; + [ + "TupleType"; + [ + [ + "OptionalType"; + [ + "DataType"; + "Int64" + ] + ]; + [ + "DataType"; + "Int32" + ]; + [ + "OptionalType"; + [ + "DataType"; + "String" + ] + ] + ] + ] + ] + ] + ] + ] + }; +} diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_member_is_struct.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_member_is_struct.cfg new file mode 100644 index 0000000000..ff4186ea03 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_member_is_struct.cfg @@ -0,0 +1 @@ +in Input input_opt_struct_field.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_member_is_struct.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_member_is_struct.sql new file mode 100644 index 0000000000..20bcbb42be --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_member_is_struct.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + countIf(kkstritem % 10 == 0) as count_dec, + countIf(kkstritem < 100) as count_small, + countIf(kkstritem > 900) as count_huge +FROM ( + SELECT keyitem.kk as kkstr FROM Input as d FLATTEN BY key as keyitem +) +FLATTEN BY kkstr as kkstritem diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_mode.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_mode.sql new file mode 100644 index 0000000000..655c4940e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_mode.sql @@ -0,0 +1,40 @@ +/* postgres can not */ +USE plato; + +SELECT + * +FROM (SELECT Just(1) AS x) +FLATTEN OPTIONAL BY x; + +$lst = AsList(1,2,3); +SELECT + * +FROM (SELECT $lst AS x) +FLATTEN LIST BY x ORDER BY x; + +SELECT + x +FROM (SELECT Just($lst) AS x) +FLATTEN LIST BY x ORDER BY x; + +SELECT + * +FROM (SELECT Just($lst) AS x) +FLATTEN OPTIONAL BY x ORDER BY x; + +$dct = AsDict(AsTuple(1,"foo"),AsTuple(2,"bar"),AsTuple(3,"baz")); + +SELECT + * +FROM (SELECT $dct AS x) +FLATTEN DICT BY x ORDER BY x; + +SELECT + x +FROM (SELECT Just($dct) AS x) +FLATTEN DICT BY x ORDER BY x; + +SELECT + ListSort(DictItems(x)) +FROM (SELECT Just($dct) AS x) +FLATTEN OPTIONAL BY x; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_one_field.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_one_field.cfg new file mode 100644 index 0000000000..bf1b560b58 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_one_field.cfg @@ -0,0 +1 @@ +in Input input_intersect_sorted.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_one_field.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_one_field.sql new file mode 100644 index 0000000000..c96cad25fb --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_one_field.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +$data = (select mod, aggregate_list(value) as lv from plato.Input group by cast(key as uint32) % 10 as mod); + +select * from $data flatten by lv as iv order by iv; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_one_field_another.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_one_field_another.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_one_field_another.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_one_field_another.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_one_field_another.sql new file mode 100644 index 0000000000..6145dcecbd --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_one_field_another.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +$data = (select mod, aggregate_list(value) as lv from plato.Input group by cast(key as uint32) % 10 as mod); + +select d.lv, d.mod from $data as d flatten by (lv) order by lv; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_two_fields.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_two_fields.cfg new file mode 100644 index 0000000000..bf1b560b58 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_two_fields.cfg @@ -0,0 +1 @@ +in Input input_intersect_sorted.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_two_fields.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_two_fields.sql new file mode 100644 index 0000000000..85633c4ae5 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_two_fields.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +$data_deep = (select mod, aggregate_list(key) as lk, aggregate_list(subkey) as ls, aggregate_list(value) as lv from plato.Input group by cast(key as uint32) % 10 as mod); + +select * from $data_deep flatten by (lk as ik, lv) order by ik, lv, mod; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_with_group_by.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_with_group_by.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_with_group_by.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_with_group_by.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_with_group_by.sql new file mode 100644 index 0000000000..9d68c54e9f --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_with_group_by.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +$data_deep = (select mod, aggregate_list(cast(key as uint32)) as lk, aggregate_list(cast(subkey as uint32)) as ls, Count(*) as cc from plato.Input group by cast(key as uint32) % 10 as mod); + +select sum(cc) as sc, sum(mod) as sm from $data_deep as d flatten by (lk as itk, ls as its) group by its + itk as ss order by sc, sm; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_with_group_by_expr.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_with_group_by_expr.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_with_group_by_expr.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_with_group_by_expr.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_with_group_by_expr.sql new file mode 100644 index 0000000000..cb6da4021f --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_with_group_by_expr.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +$data_deep = (select mod, aggregate_list(cast(key as uint32)) as lk, aggregate_list(cast(subkey as uint32)) as ls, Count(*) as cc from plato.Input group by cast(key as uint32) % 10 as mod); + +select ss, sum(cc) as sc, sum(mod) as sm from $data_deep as d flatten by (lk as itk, ls as its) group by its + itk as ss order by ss; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_with_join.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_with_join.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_with_join.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_with_join.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_with_join.sql new file mode 100644 index 0000000000..b7139810ec --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_with_join.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +/* postgres can not */ +$data = (select mod, aggregate_list(value) as lv from plato.Input group by cast(key as uint32) % 10 as mod); + +select d.mod, d.lv, j.key +from $data as d +flatten by lv +join plato.Input as j on d.mod == cast(j.key as uint32) / 10 % 10 +order by d.mod, d.lv; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_with_resource.cfg b/yt/yql/tests/sql/suites/flatten_by/flatten_with_resource.cfg new file mode 100644 index 0000000000..289c4251bb --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_with_resource.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf python3_udf diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_with_resource.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_with_resource.sql new file mode 100644 index 0000000000..8dda0726f4 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_with_resource.sql @@ -0,0 +1,19 @@ +/* postgres can not */ +/* kikimr can not */ +/* syntax version 1 */ +$script = @@ +def save(item): + return item + +def load(item): + return item +@@; + +$save = Python3::save(Callable<(String)->Resource<Python3>>, $script); +$load = Python3::load(Callable<(Resource<Python3>)->String>, $script); + +$input = ( + SELECT key, AsList($save(value), $save(subkey)) AS resourceList FROM plato.Input +); + +SELECT key, $load(resourceList) AS value FROM $input FLATTEN BY resourceList; diff --git a/yt/yql/tests/sql/suites/flatten_by/flatten_with_subquery.sql b/yt/yql/tests/sql/suites/flatten_by/flatten_with_subquery.sql new file mode 100644 index 0000000000..ac7cab2094 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/flatten_with_subquery.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +/* postgres can not */ + +define subquery $bar() as + select [1,2] as ks; +end define; + +select key from $bar() flatten list by ks as key order by key; +select key from $bar() flatten list by (ListExtend(ks, [3]) as key) order by key; diff --git a/yt/yql/tests/sql/suites/flatten_by/input_opt_struct_field.txt.attr b/yt/yql/tests/sql/suites/flatten_by/input_opt_struct_field.txt.attr new file mode 100644 index 0000000000..b5a76775f2 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/input_opt_struct_field.txt.attr @@ -0,0 +1,11 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["OptionalType";["StructType";[ + ["kk";["OptionalType";["DataType";"Uint32"]]]; + ]]]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]]; + ]]; + } +} diff --git a/yt/yql/tests/sql/suites/flatten_by/struct_without_correlation.sql b/yt/yql/tests/sql/suites/flatten_by/struct_without_correlation.sql new file mode 100644 index 0000000000..b280873d88 --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/struct_without_correlation.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma sampleselect; +use plato; + +$data_dict = (select mod, aggregate_list(AsStruct(key as `struct`, subkey as subkey)) as list_struct from Input group by cast(key as uint32) % 10 as mod); + +--insert into plato.Output +select + mod, `struct`.`struct` +from $data_dict as dd +flatten by list_struct as `struct` +order by mod, column1; +--order by mod, iv, ls; diff --git a/yt/yql/tests/sql/suites/flatten_by/typed_table.txt.attr b/yt/yql/tests/sql/suites/flatten_by/typed_table.txt.attr new file mode 100644 index 0000000000..67a1eb4bde --- /dev/null +++ b/yt/yql/tests/sql/suites/flatten_by/typed_table.txt.attr @@ -0,0 +1,31 @@ +{ + "_yql_view_opt_struct"="SELECT YQL::AsList(1,2,3) as b FROM self;"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/hor_join/default.cfg b/yt/yql/tests/sql/suites/hor_join/default.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/default.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/hor_join/double_input.sql b/yt/yql/tests/sql/suites/hor_join/double_input.sql new file mode 100644 index 0000000000..33eb738f9d --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/double_input.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +/* kikimr can not */ + +SELECT * FROM ( + SELECT key, value || "a" as value FROM plato.Input + union all + SELECT key, "1" as value from plato.Input + union all + SELECT key, "1" as value from plato.Input + union all + SELECT key, "3" as value from plato.Input +) AS x +ORDER BY key, value +; diff --git a/yt/yql/tests/sql/suites/hor_join/empty_out_hor_join.sql b/yt/yql/tests/sql/suites/hor_join/empty_out_hor_join.sql new file mode 100644 index 0000000000..347407a3be --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/empty_out_hor_join.sql @@ -0,0 +1,8 @@ +/* postgres can not */ + +USE plato; + +$i = (select * from Input where key == "0" order by key limit 100); + +select key, some(value) from $i group by key; +select key, some(subkey) from $i group by key; diff --git a/yt/yql/tests/sql/suites/hor_join/filters.cfg b/yt/yql/tests/sql/suites/hor_join/filters.cfg new file mode 100644 index 0000000000..9b1926e035 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/filters.cfg @@ -0,0 +1,2 @@ +in Input1 input.txt +in Input2 input.txt diff --git a/yt/yql/tests/sql/suites/hor_join/filters.sql b/yt/yql/tests/sql/suites/hor_join/filters.sql new file mode 100644 index 0000000000..dfb4317e24 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/filters.sql @@ -0,0 +1,8 @@ +USE plato; + +SELECT * FROM ( + SELECT key, value FROM plato.Input1 where key > "010" + UNION ALL + SELECT key, value FROM plato.Input2 where key > "020" +) AS x ORDER BY key, value +; diff --git a/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs1-outlimit.cfg b/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs1-outlimit.cfg new file mode 100644 index 0000000000..35111685c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs1-outlimit.cfg @@ -0,0 +1,3 @@ +in Input input.txt +providers yt +pragma yt.MaxOutputTables="2" diff --git a/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs1.cfg b/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs1.cfg new file mode 100644 index 0000000000..1f1d2747db --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs1.cfg @@ -0,0 +1,2 @@ +in Input input.txt +providers yt diff --git a/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs1.sql b/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs1.sql new file mode 100644 index 0000000000..4846907f41 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs1.sql @@ -0,0 +1,41 @@ +use plato; + +$udf = YQL::@@(lambda '(flow) +(Map flow + (lambda '(item) (block '( + (let varTuple (VariantType (TupleType + (StructType + '('key (DataType 'String)) + '('subkey (DataType 'String)) + '('value (DataType 'String)) + ) + (StructType + '('key (DataType 'String)) + '('subkey (DataType 'String)) + '('value (DataType 'String)) + ) + ))) + (let intValue (FromString (Member item 'key) 'Int32)) + (let res + (If (Coalesce (Equal (% intValue (Int32 '2)) (Int32 '0)) (Bool 'false)) + (Variant item '0 varTuple) + (Variant item '1 varTuple) + ) + ) + (return res) + ))) +))@@; + +$i, $j = (PROCESS Input USING $udf(TableRows())); + +select key, value from $i where key > "100" +order by key; + +insert into @a +select * from $j; + +insert into @b +select key from $i where key > "200"; + +insert into @c +select key from $j where key > "300"; diff --git a/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs2-outlimit.cfg b/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs2-outlimit.cfg new file mode 100644 index 0000000000..35111685c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs2-outlimit.cfg @@ -0,0 +1,3 @@ +in Input input.txt +providers yt +pragma yt.MaxOutputTables="2" diff --git a/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs2.cfg b/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs2.cfg new file mode 100644 index 0000000000..1f1d2747db --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs2.cfg @@ -0,0 +1,2 @@ +in Input input.txt +providers yt diff --git a/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs2.sql b/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs2.sql new file mode 100644 index 0000000000..02de4aae7b --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/fuse_multi_outs2.sql @@ -0,0 +1,38 @@ +use plato; + +$udf = YQL::@@(lambda '(flow) +(Map flow + (lambda '(item) (block '( + (let varTuple (VariantType (TupleType + (StructType + '('key (DataType 'String)) + '('subkey (DataType 'String)) + '('value (DataType 'String)) + ) + (StructType + '('key (DataType 'String)) + '('subkey (DataType 'String)) + '('value (DataType 'String)) + ) + ))) + (let intValue (FromString (Member item 'key) 'Int32)) + (let res + (If (Coalesce (Equal (% intValue (Int32 '2)) (Int32 '0)) (Bool 'false)) + (Variant item '0 varTuple) + (Variant item '1 varTuple) + ) + ) + (return res) + ))) +))@@; + +$i, $j = (PROCESS Input USING $udf(TableRows())); + +select key, value from $i where key > "100" +order by key; + +insert into @a +select * from $j; + +insert into @b +select key from $j where key > "200"; diff --git a/yt/yql/tests/sql/suites/hor_join/fuse_multi_usage-outlimit.cfg b/yt/yql/tests/sql/suites/hor_join/fuse_multi_usage-outlimit.cfg new file mode 100644 index 0000000000..35111685c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/fuse_multi_usage-outlimit.cfg @@ -0,0 +1,3 @@ +in Input input.txt +providers yt +pragma yt.MaxOutputTables="2" diff --git a/yt/yql/tests/sql/suites/hor_join/fuse_multi_usage.cfg b/yt/yql/tests/sql/suites/hor_join/fuse_multi_usage.cfg new file mode 100644 index 0000000000..1f1d2747db --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/fuse_multi_usage.cfg @@ -0,0 +1,2 @@ +in Input input.txt +providers yt diff --git a/yt/yql/tests/sql/suites/hor_join/fuse_multi_usage.sql b/yt/yql/tests/sql/suites/hor_join/fuse_multi_usage.sql new file mode 100644 index 0000000000..630c5285d0 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/fuse_multi_usage.sql @@ -0,0 +1,12 @@ +USE plato; + +$input = select key, some(subkey) as subkey, some(value) as value from Input group by key; + +select key from $input where subkey > "0" +order by key; + +insert into @a +select t.*, RandomNumber(TableRow()) as rnd from $input as t where value > "a"; + +insert into @b +select * from $input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/hor_join/group_ranges.cfg b/yt/yql/tests/sql/suites/hor_join/group_ranges.cfg new file mode 100644 index 0000000000..c9c5c39ac1 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/group_ranges.cfg @@ -0,0 +1,4 @@ +in Input1 input.txt +in Input2 input.txt +in Input3 input.txt +in Input4 input.txt diff --git a/yt/yql/tests/sql/suites/hor_join/group_ranges.sql b/yt/yql/tests/sql/suites/hor_join/group_ranges.sql new file mode 100644 index 0000000000..25d8e78cd4 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/group_ranges.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +/* kikimr can not */ +USE plato; + +$i = (SELECT * FROM plato.range(``, Input1, Input4)); + +SELECT * FROM ( + SELECT 1 as key, subkey, value FROM $i + UNION ALL + SELECT 2 as key, subkey, value FROM $i +) AS x +ORDER BY key, subkey, value +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/hor_join/group_sampling.cfg b/yt/yql/tests/sql/suites/hor_join/group_sampling.cfg new file mode 100644 index 0000000000..c9c5c39ac1 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/group_sampling.cfg @@ -0,0 +1,4 @@ +in Input1 input.txt +in Input2 input.txt +in Input3 input.txt +in Input4 input.txt diff --git a/yt/yql/tests/sql/suites/hor_join/group_sampling.sql b/yt/yql/tests/sql/suites/hor_join/group_sampling.sql new file mode 100644 index 0000000000..45d57fc7d5 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/group_sampling.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +/* kikimr can not */ +/* hybridfile can not YQL-17284 */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 16 */ +USE plato; + +SELECT * FROM ( + SELECT CAST(key AS int) as key, '' as subkey, '' as value FROM plato.Input1 SAMPLE 0.1 + UNION ALL + SELECT CAST(key AS int) as key, subkey, '' as value FROM plato.Input2 SAMPLE 0.1 + UNION ALL + SELECT 1 as key, subkey, '' as value from plato.Input3 + UNION ALL + SELECT 1 as key, '' as subkey, value from plato.Input4 +) AS x +ORDER BY key, subkey, value +; diff --git a/yt/yql/tests/sql/suites/hor_join/group_yamr.cfg b/yt/yql/tests/sql/suites/hor_join/group_yamr.cfg new file mode 100644 index 0000000000..280feec6cc --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/group_yamr.cfg @@ -0,0 +1,4 @@ +in Input1 input.txt +in Input2 input.txt +in Input3 yamred_dsv.txt yamred_dsv +in Input4 yamred_dsv.txt yamred_dsv diff --git a/yt/yql/tests/sql/suites/hor_join/group_yamr.sql b/yt/yql/tests/sql/suites/hor_join/group_yamr.sql new file mode 100644 index 0000000000..d781971f1e --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/group_yamr.sql @@ -0,0 +1,13 @@ +USE plato; + +SELECT * FROM ( + SELECT 1 as key, subkey, '' as value from plato.Input1 + UNION ALL + SELECT 2 as key, '' as subkey, value from plato.Input2 + UNION ALL + SELECT 3 as key, subkey, '' as value from plato.Input3 + UNION ALL + SELECT 4 as key, '' as subkey, value from plato.Input4 +) AS x +ORDER BY key, subkey, value +; diff --git a/yt/yql/tests/sql/suites/hor_join/input.txt.attr b/yt/yql/tests/sql/suites/hor_join/input.txt.attr new file mode 100644 index 0000000000..b6100e5fd0 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/input.txt.attr @@ -0,0 +1,30 @@ +{ + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/hor_join/less_outs.cfg b/yt/yql/tests/sql/suites/hor_join/less_outs.cfg new file mode 100644 index 0000000000..a06e20d35e --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/less_outs.cfg @@ -0,0 +1,7 @@ +in Input1 input.txt +in Input2 input.txt +in Input3 input.txt +in Input4 input.txt +in Input5 input.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/hor_join/less_outs.sql b/yt/yql/tests/sql/suites/hor_join/less_outs.sql new file mode 100644 index 0000000000..a8594fe2dd --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/less_outs.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ + +$i1 = SELECT CAST(key AS Int32) ?? 0 as key, '' as value FROM plato.Input1; +$i2 = SELECT 0 as key, value from plato.Input2 UNION ALL SELECT 1 as key, value from plato.Input3; +$i3 = (SELECT 2 as key, value from plato.Input4 UNION ALL SELECT 3 as key, value from plato.Input5); + +$udf = ($x) -> { return Yql::VariantItem($x) }; + +PROCESS $i1, $i2, $i3 using $udf(TableRow()); diff --git a/yt/yql/tests/sql/suites/hor_join/max_in_tables.cfg b/yt/yql/tests/sql/suites/hor_join/max_in_tables.cfg new file mode 100644 index 0000000000..1d540ef27f --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/max_in_tables.cfg @@ -0,0 +1,5 @@ +in Input1 input.txt +in Input2 input.txt +in Input3 input.txt +in Input4 input.txt +in Input5 input.txt diff --git a/yt/yql/tests/sql/suites/hor_join/max_in_tables.sql b/yt/yql/tests/sql/suites/hor_join/max_in_tables.sql new file mode 100644 index 0000000000..684ceb32fc --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/max_in_tables.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +/* kikimr can not */ +pragma yt.MaxInputTables="3"; + +SELECT * FROM ( + SELECT CAST(key AS int) as key, '' as value FROM plato.Input1 + UNION ALL + SELECT 0 as key, value from plato.Input2 + UNION ALL + SELECT 1 as key, value from plato.Input3 + UNION ALL + SELECT 2 as key, value from plato.Input4 + UNION ALL + SELECT 3 as key, value from plato.Input5 +) AS x +ORDER BY key, value +; diff --git a/yt/yql/tests/sql/suites/hor_join/max_outtables.cfg b/yt/yql/tests/sql/suites/hor_join/max_outtables.cfg new file mode 100644 index 0000000000..a06e20d35e --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/max_outtables.cfg @@ -0,0 +1,7 @@ +in Input1 input.txt +in Input2 input.txt +in Input3 input.txt +in Input4 input.txt +in Input5 input.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/hor_join/max_outtables.sql b/yt/yql/tests/sql/suites/hor_join/max_outtables.sql new file mode 100644 index 0000000000..0ce459d466 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/max_outtables.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ +/* kikimr can not */ +pragma yt.MaxOutputTables="3"; + +$i1 = (SELECT CAST(key AS Int32) ?? 0 as key, '' as value FROM plato.Input1); +$i2 = (SELECT 0 as key, value from plato.Input2); +$i3 = (SELECT 1 as key, value from plato.Input3); +$i4 = (SELECT 2 as key, value from plato.Input4); +$i5 = (SELECT 3 as key, value from plato.Input5); + + +$udf = ($x) -> { return Yql::VariantItem($x) }; + +PROCESS $i1, $i2, $i3, $i4, $i5 using $udf(TableRow()); diff --git a/yt/yql/tests/sql/suites/hor_join/merge_multiouts_all.cfg b/yt/yql/tests/sql/suites/hor_join/merge_multiouts_all.cfg new file mode 100644 index 0000000000..b9e77a0bd0 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/merge_multiouts_all.cfg @@ -0,0 +1,5 @@ +in Input input.txt +out Output output.txt +res result.txt +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/hor_join/merge_multiouts_all.sql b/yt/yql/tests/sql/suites/hor_join/merge_multiouts_all.sql new file mode 100644 index 0000000000..f413af69ee --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/merge_multiouts_all.sql @@ -0,0 +1,43 @@ +use plato; + +/* syntax version 1 */ +/* postgres can not */ +$udfScript = @@ +def MyFunc(list): + return [(int(x.key) % 4, x) for x in list] +@@; + +$record = (SELECT TableRow() FROM Input); +$recordType =TypeOf(Unwrap($record)); + +$udf = Python::MyFunc( + CallableType(0, + StreamType( + VariantType(TupleType($recordType, $recordType, $recordType, $recordType)) + ), + StreamType($recordType)), + $udfScript +); + +$i0, $i1, $i2, $i3 = (PROCESS Input USING $udf(TableRows())); + +select * from ( + select * from $i0 + union all + select * from $i1 + union all + select * from $i2 + union all + select * from $i3 +) order by key; + +insert into Output +select * from ( + select * from $i0 + union all + select * from $i1 + union all + select * from $i2 + union all + select * from $i3 +); diff --git a/yt/yql/tests/sql/suites/hor_join/merge_multiouts_part.cfg b/yt/yql/tests/sql/suites/hor_join/merge_multiouts_part.cfg new file mode 100644 index 0000000000..b9e77a0bd0 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/merge_multiouts_part.cfg @@ -0,0 +1,5 @@ +in Input input.txt +out Output output.txt +res result.txt +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/hor_join/merge_multiouts_part.sql b/yt/yql/tests/sql/suites/hor_join/merge_multiouts_part.sql new file mode 100644 index 0000000000..640fd4a086 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/merge_multiouts_part.sql @@ -0,0 +1,39 @@ +use plato; + +/* syntax version 1 */ +/* postgres can not */ +$udfScript = @@ +def MyFunc(list): + return [(int(x.key) % 4, x) for x in list] +@@; + +$record = (SELECT TableRow() FROM plato.Input); +$recordType =TypeOf(Unwrap($record)); + +$udf = Python::MyFunc( + CallableType(0, + StreamType( + VariantType(TupleType($recordType, $recordType, $recordType, $recordType)) + ), + StreamType($recordType)), + $udfScript +); + +$i0, $i1, $i2, $i3 = (PROCESS plato.Input USING $udf(TableRows())); + +select * from ( + select * from $i0 + union all + select * from $i1 + union all + select * from $i2 +) order by key; + +insert into Output +select * from ( + select * from $i1 + union all + select * from $i2 + union all + select * from $i3 +); diff --git a/yt/yql/tests/sql/suites/hor_join/merge_multiouts_reuse.cfg b/yt/yql/tests/sql/suites/hor_join/merge_multiouts_reuse.cfg new file mode 100644 index 0000000000..b9e77a0bd0 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/merge_multiouts_reuse.cfg @@ -0,0 +1,5 @@ +in Input input.txt +out Output output.txt +res result.txt +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/hor_join/merge_multiouts_reuse.sql b/yt/yql/tests/sql/suites/hor_join/merge_multiouts_reuse.sql new file mode 100644 index 0000000000..d0068e031c --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/merge_multiouts_reuse.sql @@ -0,0 +1,43 @@ +use plato; + +/* syntax version 1 */ +/* postgres can not */ +$udfScript = @@ +def MyFunc(list): + return [(int(x.key) % 4, x) for x in list] +@@; + +$record = (SELECT TableRow() FROM Input); +$recordType =TypeOf(Unwrap($record)); + +$udf = Python::MyFunc( + CallableType(0, + StreamType( + VariantType(TupleType($recordType, $recordType, $recordType, $recordType)) + ), + StreamType($recordType)), + $udfScript +); + +$i0, $i1, $i2, $i3 = (PROCESS Input USING $udf(TableRows())); + +select * from ( + select * from $i0 + union all + select * from $i1 + union all + select * from $i2 + union all + select * from $i0 +) order by key; + +insert into Output +select * from ( + select * from $i3 + union all + select * from $i1 + union all + select * from $i2 + union all + select * from $i3 +); diff --git a/yt/yql/tests/sql/suites/hor_join/nonstrict.txt.attr b/yt/yql/tests/sql/suites/hor_join/nonstrict.txt.attr new file mode 100644 index 0000000000..49d98771a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/nonstrict.txt.attr @@ -0,0 +1,17 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="string";"name"="key"}; + {"type"="string";"name"="subkey"}; + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "type" = "string" + }; + { + "name" = "subkey"; + "type" = "string" + } + ] +} diff --git a/yt/yql/tests/sql/suites/hor_join/out_hor_join.sql b/yt/yql/tests/sql/suites/hor_join/out_hor_join.sql new file mode 100644 index 0000000000..0e410fbb55 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/out_hor_join.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +USE plato; + +$i = (SELECT * FROM Input WHERE key < "900"); + +SELECT key, some(value) as s FROM $i GROUP BY key ORDER BY key, s; + +SELECT key, sum(cast(subkey as Int32)) as s FROM $i GROUP BY key ORDER BY key, s; + +SELECT key, some(subkey) as s FROM $i GROUP BY key ORDER BY key, s; diff --git a/yt/yql/tests/sql/suites/hor_join/out_max_outtables.sql b/yt/yql/tests/sql/suites/hor_join/out_max_outtables.sql new file mode 100644 index 0000000000..399028196d --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/out_max_outtables.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +/* kikimr can not */ +pragma yt.MaxOutputTables="3"; +pragma yt.DisableOptimizers="HorizontalJoin,MultiHorizontalJoin"; + +SELECT * FROM ( + SELECT CAST(key AS int) as key, '' as value FROM plato.Input + UNION ALL + SELECT 0 as key, value from plato.Input + UNION ALL + SELECT 1 as key, value from plato.Input + UNION ALL + SELECT 2 as key, value from plato.Input + UNION ALL + SELECT 3 as key, value from plato.Input +) AS x +ORDER BY key, value +; diff --git a/yt/yql/tests/sql/suites/hor_join/out_mem_limit.sql b/yt/yql/tests/sql/suites/hor_join/out_mem_limit.sql new file mode 100644 index 0000000000..508ddfd6cd --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/out_mem_limit.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +/* kikimr can not - yt pragma */ +USE plato; + +PRAGMA yt.MaxExtraJobMemoryToFuseOperations="550m"; +PRAGMA yt.CombineCoreLimit="128m"; + +$i = (SELECT * FROM Input WHERE key < "900"); + +SELECT key, sum(cast(subkey as Int32)) as s FROM $i GROUP BY key ORDER BY key, s; + +SELECT key, some(subkey) as s FROM $i GROUP BY key ORDER by key, s; + +SELECT key, some(value) as s FROM $i GROUP BY key ORDER BY key, s; diff --git a/yt/yql/tests/sql/suites/hor_join/out_range.sql b/yt/yql/tests/sql/suites/hor_join/out_range.sql new file mode 100644 index 0000000000..c734fd9441 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/out_range.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +USE plato; + +SELECT key, some(value) as s FROM Input GROUP BY key ORDER BY key, s; + +SELECT key, sum(cast(subkey as Int32)) as s FROM Input WHERE key > "100" GROUP BY key ORDER BY key, s; + +SELECT key, some(subkey) as s FROM Input WHERE key > "100" GROUP BY key ORDER BY key, s; diff --git a/yt/yql/tests/sql/suites/hor_join/out_sampling.cfg b/yt/yql/tests/sql/suites/hor_join/out_sampling.cfg new file mode 100644 index 0000000000..a654f9117d --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/out_sampling.cfg @@ -0,0 +1 @@ +in Input input1.txt diff --git a/yt/yql/tests/sql/suites/hor_join/out_sampling.sql b/yt/yql/tests/sql/suites/hor_join/out_sampling.sql new file mode 100644 index 0000000000..ec303c6cdc --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/out_sampling.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* kikimr can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) == 10 and len(yt_res_yson[1][b'Write'][0][b'Data']) < 10 and len(yt_res_yson[2][b'Write'][0][b'Data']) < 10 and len(yt_res_yson[3][b'Write'][0][b'Data']) == 10 */ +USE plato; + +SELECT key, some(value) FROM Input GROUP BY key; + +SELECT key, sum(cast(subkey as Int32)) FROM Input SAMPLE 0.3 GROUP BY key; + +SELECT key, some(subkey) FROM Input SAMPLE 0.3 GROUP BY key; + +SELECT key, sum(length(value)) FROM Input GROUP BY key; diff --git a/yt/yql/tests/sql/suites/hor_join/out_table_record.sql b/yt/yql/tests/sql/suites/hor_join/out_table_record.sql new file mode 100644 index 0000000000..25cc1dcc62 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/out_table_record.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +pragma yt.DisableOptimizers="HorizontalJoin,MultiHorizontalJoin"; + +SELECT * FROM ( + select key, TableRecordIndex() as record, TablePath() as path from Input + union all + select key, TableRecordIndex() as record, "d" as path from Input +) AS x +ORDER BY key, record, path +; diff --git a/yt/yql/tests/sql/suites/hor_join/row_num_per_sect.cfg b/yt/yql/tests/sql/suites/hor_join/row_num_per_sect.cfg new file mode 100644 index 0000000000..2d1eb20046 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/row_num_per_sect.cfg @@ -0,0 +1,2 @@ +in Input1 nonstrict.txt +in Input2 input.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/hor_join/row_num_per_sect.sql b/yt/yql/tests/sql/suites/hor_join/row_num_per_sect.sql new file mode 100644 index 0000000000..e3477cc693 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/row_num_per_sect.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* kikimr can not */ +/* syntax version 1 */ +USE plato; + +$with_row1 = (SELECT t.*, ROW_NUMBER() OVER () as row_num FROM Input1 as t); +$with_row2 = (SELECT t.*, ROW_NUMBER() OVER () as row_num FROM Input2 as t); + +SELECT a.key as key, b.subkey as subkey, b.value as value FROM $with_row1 as a LEFT JOIN $with_row2 as b USING(row_num); diff --git a/yt/yql/tests/sql/suites/hor_join/runtime_dep.sql b/yt/yql/tests/sql/suites/hor_join/runtime_dep.sql new file mode 100644 index 0000000000..183635ba58 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/runtime_dep.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +use plato; + +INSERT INTO @ttt WITH TRUNCATE +SELECT CAST(key AS int) as key, subkey, value FROM Input; + +COMMIT; + +SELECT * FROM ( + SELECT key, '' as value FROM @ttt + UNION ALL + SELECT 0 as key, value from @ttt +) AS x +ORDER BY key, value +; diff --git a/yt/yql/tests/sql/suites/hor_join/skip_sampling.cfg b/yt/yql/tests/sql/suites/hor_join/skip_sampling.cfg new file mode 100644 index 0000000000..15b84c0426 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/skip_sampling.cfg @@ -0,0 +1,3 @@ +in Input1 input.txt +in Input2 input.txt +in Input3 input.txt diff --git a/yt/yql/tests/sql/suites/hor_join/skip_sampling.sql b/yt/yql/tests/sql/suites/hor_join/skip_sampling.sql new file mode 100644 index 0000000000..cdd14e3ee7 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/skip_sampling.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +/* kikimr can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 12 */ +USE plato; + +SELECT * FROM ( + SELECT CAST(key AS int) as key, '' as subkey, '' as value FROM plato.Input1 SAMPLE 0.1 + UNION ALL + SELECT 1 as key, subkey, '' as value from plato.Input2 + UNION ALL + SELECT 1 as key, '' as subkey, value from plato.Input3 +) AS x +ORDER BY key, subkey, value +; diff --git a/yt/yql/tests/sql/suites/hor_join/skip_yamr.cfg b/yt/yql/tests/sql/suites/hor_join/skip_yamr.cfg new file mode 100644 index 0000000000..d16bb7a691 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/skip_yamr.cfg @@ -0,0 +1,3 @@ +in Input1 input.txt +in Input2 input.txt +in Input3 yamred_dsv.txt yamred_dsv diff --git a/yt/yql/tests/sql/suites/hor_join/skip_yamr.sql b/yt/yql/tests/sql/suites/hor_join/skip_yamr.sql new file mode 100644 index 0000000000..8161e83e83 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/skip_yamr.sql @@ -0,0 +1,10 @@ +USE plato; + +SELECT * FROM ( + SELECT 1 as key, subkey, '' as value from plato.Input1 + UNION ALL + SELECT 1 as key, '' as subkey, value from plato.Input2 + UNION ALL + SELECT CAST(key as Int32) as key, '' as subkey, value from plato.Input3 +) ORDER BY key, subkey, value +; diff --git a/yt/yql/tests/sql/suites/hor_join/sorted.txt.attr b/yt/yql/tests/sql/suites/hor_join/sorted.txt.attr new file mode 100644 index 0000000000..36f279e4a0 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/sorted.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]]] + ]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/hor_join/sorted_out.cfg b/yt/yql/tests/sql/suites/hor_join/sorted_out.cfg new file mode 100644 index 0000000000..186d94fcae --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/sorted_out.cfg @@ -0,0 +1,5 @@ +in Input1 sorted.txt +in Input2 input.txt +in Input3 input.txt +in Input4 input.txt +in Input5 input.txt diff --git a/yt/yql/tests/sql/suites/hor_join/sorted_out.sql b/yt/yql/tests/sql/suites/hor_join/sorted_out.sql new file mode 100644 index 0000000000..d0a017508a --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/sorted_out.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +/* kikimr can not */ +pragma yt.DisableOptimizers="UnorderedOuts"; + +SELECT * FROM ( + SELECT key, value || "a" as value FROM plato.Input1 + union all + SELECT key, "1" as value from plato.Input2 + union all + SELECT key, "2" as value from plato.Input3 + union all + SELECT key, "3" as value from plato.Input4 + union all + SELECT key, "4" as value from plato.Input5 +) AS x +ORDER BY key, value +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/hor_join/sorted_out_mix.cfg b/yt/yql/tests/sql/suites/hor_join/sorted_out_mix.cfg new file mode 100644 index 0000000000..8bc2f58496 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/sorted_out_mix.cfg @@ -0,0 +1,5 @@ +in Input1 input.txt +in Input2 sorted.txt +in Input3 input.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/hor_join/sorted_out_mix.sql b/yt/yql/tests/sql/suites/hor_join/sorted_out_mix.sql new file mode 100644 index 0000000000..19aec3111b --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/sorted_out_mix.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ +/* kikimr can not */ +pragma yt.DisableOptimizers="UnorderedOuts"; + +$i1 = (SELECT key, value || "a" as value1 FROM plato.Input1); +$i2 = (SELECT key, "1" as value2 from plato.Input2); +$i3 = (SELECT key, "2" as value3 from plato.Input3); + +$udf = ($x) -> { + return AsStruct(Yql::Visit($x + , AsAtom("0"), ($i) -> { return Yql::Member($i, AsAtom("key")) } + , AsAtom("1"), ($i) -> { return Yql::Member($i, AsAtom("key")) } + , AsAtom("2"), ($i) -> { return Yql::Member($i, AsAtom("key")) } + ) AS key) +}; + +SELECT * FROM (PROCESS $i1, $i2, $i3 using $udf(TableRow())) ORDER BY key; diff --git a/yt/yql/tests/sql/suites/hor_join/table_record.cfg b/yt/yql/tests/sql/suites/hor_join/table_record.cfg new file mode 100644 index 0000000000..9b1926e035 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/table_record.cfg @@ -0,0 +1,2 @@ +in Input1 input.txt +in Input2 input.txt diff --git a/yt/yql/tests/sql/suites/hor_join/table_record.sql b/yt/yql/tests/sql/suites/hor_join/table_record.sql new file mode 100644 index 0000000000..af5f42281a --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/table_record.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +SELECT * FROM ( + select key, TableRecordIndex() as record, TablePath() as path from Input1 + union all + select key, TableRecordIndex() as record, "d" as path from Input2 +) AS x +ORDER BY key, record, path +; diff --git a/yt/yql/tests/sql/suites/hor_join/yamred_dsv.txt.attr b/yt/yql/tests/sql/suites/hor_join/yamred_dsv.txt.attr new file mode 100644 index 0000000000..f52f445c2c --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/yamred_dsv.txt.attr @@ -0,0 +1,10 @@ +{ + "_format"=< + "fs"="\t"; + "rs"="\n"; + "has_subkey"=%true; + "escape_carriage_return"=%true; + "key_column_names"=["key"]; + "subkey_column_names"=["subkey"] + >"yamred_dsv"; +} diff --git a/yt/yql/tests/sql/suites/hor_join/yield_off.cfg b/yt/yql/tests/sql/suites/hor_join/yield_off.cfg new file mode 100644 index 0000000000..3c11f9c54b --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/yield_off.cfg @@ -0,0 +1,3 @@ +in Input input.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/hor_join/yield_off.sql b/yt/yql/tests/sql/suites/hor_join/yield_off.sql new file mode 100644 index 0000000000..a1635ae3e2 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/yield_off.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; +pragma config.flags("UdfSupportsYield","false"); + +$s = @@ +import yql + +def f(input, a): + for x in input: + yield x +@@; + +$f = Python::f(Callable<(Stream<Struct<key:String,subkey:String,value:String>>,Int32)->Stream<Struct<key:String,subkey:String,value:String>>>, $s); + + +SELECT * FROM ( + PROCESS Input using $f(TableRows(), 1) + UNION ALL + PROCESS Input using $f(TableRows(), 2) +) AS x +ORDER BY key, subkey, value +; diff --git a/yt/yql/tests/sql/suites/hor_join/yield_on.sql b/yt/yql/tests/sql/suites/hor_join/yield_on.sql new file mode 100644 index 0000000000..62efa85744 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/yield_on.sql @@ -0,0 +1,20 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; +pragma config.flags("UdfSupportsYield","true"); + +$s = @@ +def f(input, a): + for x in input: + yield x +@@; + +$f = Python::f(Callable<(Stream<Struct<key:String,subkey:String,value:String>>,Int32)->Stream<Struct<key:String,subkey:String,value:String>>>, $s); + +SELECT * FROM ( + PROCESS Input using $f(TableRows(), 1) + UNION ALL + PROCESS Input using $f(TableRows(), 2) +) AS x +ORDER BY key, subkey, value +; diff --git a/yt/yql/tests/sql/suites/hor_join/yql-12610_old_table_props.cfg b/yt/yql/tests/sql/suites/hor_join/yql-12610_old_table_props.cfg new file mode 100644 index 0000000000..1f1d2747db --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/yql-12610_old_table_props.cfg @@ -0,0 +1,2 @@ +in Input input.txt +providers yt diff --git a/yt/yql/tests/sql/suites/hor_join/yql-12610_old_table_props.sql b/yt/yql/tests/sql/suites/hor_join/yql-12610_old_table_props.sql new file mode 100644 index 0000000000..3f36d0e6e3 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/yql-12610_old_table_props.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +/* syntax version 1 */ +/* kikimr can not - yt pragma */ +USE plato; +pragma yt.UseSystemColumns="0"; + +SELECT * FROM ( + select key, TableRecordIndex() as record, TablePath() as path from Input + union all + select key, TableRecordIndex() as record, "d" as path from Input +) AS x +ORDER BY key, record, path +; diff --git a/yt/yql/tests/sql/suites/hor_join/yql-6477_table_path.sql b/yt/yql/tests/sql/suites/hor_join/yql-6477_table_path.sql new file mode 100644 index 0000000000..893cd776de --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/yql-6477_table_path.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +/* syntax version 1 */ +/* kikimr can not - yt pragma */ +USE plato; + +pragma yt.MaxExtraJobMemoryToFuseOperations="512M"; + +$udfScript = @@ +def AsIs(s): + return s +@@; + +$udf = Python::AsIs(Callable<(String)->String>, $udfScript); + +select TablePath() as path from Input +union all +select TablePath() as path from Input where $udf(key) > "080" +; diff --git a/yt/yql/tests/sql/suites/hor_join/yql19332_aux_cols.cfg b/yt/yql/tests/sql/suites/hor_join/yql19332_aux_cols.cfg new file mode 100644 index 0000000000..3eb7660ec9 --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/yql19332_aux_cols.cfg @@ -0,0 +1,3 @@ +in Input1 sorted.txt +in Input2 sorted.txt +in Input3 sorted.txt diff --git a/yt/yql/tests/sql/suites/hor_join/yql19332_aux_cols.sql b/yt/yql/tests/sql/suites/hor_join/yql19332_aux_cols.sql new file mode 100644 index 0000000000..c84769777c --- /dev/null +++ b/yt/yql/tests/sql/suites/hor_join/yql19332_aux_cols.sql @@ -0,0 +1,9 @@ +-- ignore runonopt plan diff +USE plato; +pragma DisableSimpleColumns; +pragma yt.JoinMergeTablesLimit="10"; + +$i = select * from concat(Input2, Input3) where value != "1"; + +select b.key, b.subkey, a.value from Input1 as a +join $i as b on (a.key, a.subkey) == (b.key, b.subkey) diff --git a/yt/yql/tests/sql/suites/in/basic_in.sql b/yt/yql/tests/sql/suites/in/basic_in.sql new file mode 100644 index 0000000000..fdb8c00408 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/basic_in.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +SELECT + 1 IN (1, 2), + 3 NOT IN (1, 2), + "1" IN (key, subkey, value), + key NOT IN (key, subkey, value), + key NOT IN AsList(subkey), + CAST(subkey AS Int32) IN (1, 2) AS optional_key_i32, + CAST(subkey AS Int64) IN (1, 2) AS optional_key_i64, + CAST(subkey AS Uint32) IN (1, 2) AS optional_key_ui32, + CAST(subkey AS Uint64) IN (1, 2) AS optional_key_ui64, + CAST(subkey AS Uint8) IN (1, 2) AS optional_key_to_larger_type +FROM plato.Input; diff --git a/yt/yql/tests/sql/suites/in/default.cfg b/yt/yql/tests/sql/suites/in/default.cfg new file mode 100644 index 0000000000..3d282ff63b --- /dev/null +++ b/yt/yql/tests/sql/suites/in/default.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +in InputWithTuples input_with_tuples.txt diff --git a/yt/yql/tests/sql/suites/in/huge_in.sql b/yt/yql/tests/sql/suites/in/huge_in.sql new file mode 100644 index 0000000000..f2d164b254 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/huge_in.sql @@ -0,0 +1,2495 @@ +SELECT + * +FROM plato.Input +WHERE value IN ( +'rambler.ru', +'worldoftanks.ru', +'pikabu.ru', +'rbc.ru', +'ria.ru', +'lenta.ru', +'4pda.ru', +'lostfilm.tv', +'yaplakal.com', +'auto.mail.ru', +'lady.mail.ru', +'echo.msk.ru', +'gazeta.ru', +'lifenews.ru', +'drive2.ru', +'vesti.ru', +'ivi.ru', +'russian.rt.com', +'championat.com', +'habrahabr.ru', +'tass.ru', +'kp.ru', +'games.mail.ru', +'sports.ru', +'hi-tech.mail.ru', +'fishki.net', +'news.sportbox.ru', +'playground.ru', +'1tv.ru', +'fb.ru', +'rg.ru', +'ntv.ru', +'kakprosto.ru', +'vz.ru', +'deti.mail.ru', +'dom2.ru', +'e1.ru', +'aif.ru', +'adme.ru', +'regnum.ru', +'livejournal.com', +'interfax.ru', +'tvzvezda.ru', +'infox.sg', +'sport-express.ru', +'health.mail.ru', +'kommersant.ru', +'izvestia.ru', +'topwar.ru', +'meduza.io', +'mk.ru', +'geektimes.ru', +'worldofwarships.ru', +'newsru.com', +'tvrain.ru', +'stream.1tv.ru', +'dota2.ru', +'woman.ru', +'banki.ru', +'3dnews.ru', +'weekend.rambler.ru', +'womanadvice.ru', +'video-dom2.ru', +'ren.tv', +'rusvesna.su', +'vedomosti.ru', +'tvc.ru', +'forexpf.ru', +'inosmi.ru', +'goodgame.ru', +'rusnovosti.ru', +'cont.ws', +'overclockers.ru', +'politikus.ru', +'autorambler.ru', +'bbc.com', +'fontanka.ru', +'lifehacker.ru', +'novayagazeta.ru', +'ixbt.com', +'oper.ru', +'m24.ru', +'stopgame.ru', +'rustoria.ru', +'russianfood.com', +'russia.tv', +'football.kulichki.net', +'svpressa.ru', +'igromania.ru', +'finance.rambler.ru', +'kinopati.ru', +'elhow.ru', +'ngs.ru', +'navalny.com', +'ru.investing.com', +'shazoo.ru', +'carambatv.ru', +'colonelcassad.livejournal.com', +'turkcinema.tv', +'syl.ru', +'gamebomb.ru', +'ctc.ru', +'hltv.org', +'khl.ru', +'slon.ru', +'101.ru', +'rusplt.ru', +'lostfilm.info', +'matchtv.ru', +'svoboda.org', +'finam.ru', +'virtus.pro', +'tjournal.ru', +'livelib.ru', +'tvigle.ru', +'sovsport.ru', +'expert.ru', +'rns.online', +'varlamov.ru', +'astromeridian.ru', +'74.ru', +'quto.ru', +'mobile-review.com', +'stranamasterov.ru', +'the-village.ru', +'quote.rbc.ru', +'rosbalt.ru', +'eurosport.ru', +'bash.im', +'1prime.ru', +'coop-land.ru', +'kanobu.ru', +'radiopotok.ru', +'bfm.ru', +'dni.ru', +'soccer.ru', +'europaplus.ru', +'warfiles.ru', +'radiovesti.ru', +'nnm.me', +'eadaily.com', +'unian.net', +'drive.ru', +'afisha.ru', +'wot-news.com', +'forbes.ru', +'ferra.ru', +'vc.ru', +'rusnext.ru', +'tema.livejournal.com', +'u-mama.ru', +'eda.ru', +'f1news.ru', +'bazaistoria.ru', +'ura.ru', +'24auto.ru', +'utro.ru', +'edimdoma.ru', +'politobzor.net', +'sibnet.ru', +'snob.ru', +'news.drom.ru', +'newsland.com', +'popmech.ru', +'trinixy.ru', +'politrussia.com', +'iphones.ru', +'uznayvse.ru', +'alogvinov.com', +'ru-m.org', +'vashmnenie.ru', +'buhonline.ru', +'politota.dirty.ru', +'referatwork.ru', +'gooool.org', +'news-front.info', +'vokrug.tv', +'pravda.ru', +'autonews.ru', +'gamer.ru', +'zr.ru', +'govoritmoskva.ru', +'gamemag.ru', +'letidor.ru', +'vestifinance.ru', +'spletnik.ru', +'cosmo.ru', +'9gag.com', +'exler.ru', +'kolesa.ru', +'bombardir.ru', +'km.ru', +'eva.ru', +'maximonline.ru', +'pedsovet.su', +'megamozg.ru', +'film.ru', +'ondom2.com', +'topnews.ru', +'zdravotvet.ru', +'schlock.ru', +'kinomania.ru', +'wday.ru', +'life-dom2.ru', +'kosmetista.ru', +'rusfootball.info', +'infoniac.ru', +'sql.ru', +'sport.rbc.ru', +'narutoplanet.ru', +'chelyabinsk.ru', +'trashbox.ru', +'ng.ru', +'msk.kp.ru', +'thg.ru', +'soccer365.ru', +'ridus.ru', +'audit-it.ru', +'mix.sibnet.ru', +'fanat1k.ru', +'riafan.ru', +'gameguru.ru', +'oko-planet.su', +'gmbox.ru', +'macdigger.ru', +'kudago.com', +'goha.ru', +'style.rbc.ru', +'avmalgin.livejournal.com', +'pure-t.ru', +'toastedballs.com', +'66.ru', +'kremlin.ru', +'ppt.ru', +'pix.playground.ru', +'gotovim.ru', +'zhenskoe-mnenie.ru', +'motor.ru', +'moslenta.ru', +'dp.ru', +'pravoslavie.ru', +'footballhd.ru', +'72.ru', +'hmn.ru', +'ruposters.ru', +'ag.ru', +'youloveit.ru', +'7days.ru', +'bmpd.livejournal.com', +'nplus1.ru', +'finanz.ru', +'fantasy-worlds.org', +'07kbr.ru', +'glavbukh.ru', +'newsvl.ru', +'avtovzglyad.ru', +'sdelanounas.ru', +'rbctv.rbc.ru', +'gorod48.ru', +'elle.ru', +'realty.rbc.ru', +'fashiony.ru', +'super.ru', +'opennet.ru', +'rusfishing.ru', +'weburg.net', +'znak.com', +'smotrisport.tv', +'eurolab.ua', +'tonkosti.ru', +'irk.ru', +'kramola.info', +'yurasumy.livejournal.com', +'u-f.ru', +'liveresult.ru', +'starhit.ru', +'allboxing.ru', +'shkolazhizni.ru', +'bloknot.ru', +'babyplan.ru', +'klerk.ru', +'notebook-center.ru', +'pravmir.ru', +'eg.ru', +'cn.ru', +'anekdotov.net', +'info.drom.ru', +'comss.info', +'oszone.net', +'orsk.ru', +'blogistars.com', +'inopressa.ru', +'xakep.ru', +'riotpixels.com', +'rsport.ru', +'peremogi.livejournal.com', +'moe-online.ru', +'newkaliningrad.ru', +'cxem.net', +'nash-dom2.ru', +'vprognoze.ru', +'glav.su', +'mama.ru', +'nhl.com', +'ekabu.ru', +'59.ru', +'ucrazy.ru', +'euro-football.ru', +'tvzavr.ru', +'moevideo.net', +'ibigdan.livejournal.com', +'7ya.ru', +'sadalskij.livejournal.com', +'vm.ru', +'rusdialog.ru', +'factroom.ru', +'mir24.tv', +'voenhronika.ru', +'argumenti.ru', +'63.ru', +'politnavigator.net', +'peoples.ru', +'medkrug.ru', +'vladtime.ru', +'3ddd.ru', +'business-gazeta.ru', +'moya-planeta.ru', +'gorod.afisha.ru', +'openrussia.org', +'strana-sovetov.com', +'allhockey.ru', +'mobiltelefon.ru', +'interfax-russia.ru', +'politonline.ru', +'filmpro.ru', +'bugaga.ru', +'iguides.ru', +'urod.ru', +'westwing.ru', +'timeout.ru', +'dw.com', +'pandoraopen.ru', +'autochel.ru', +'tourister.ru', +'cnews.ru', +'pronedra.ru', +'zadolba.li', +'rap.ru', +'112.ua', +'molodost.bz', +'mirsovetov.ru', +'conf.7ya.ru', +'disgustingmen.com', +'hi-news.ru', +'anna-news.info', +'e-news.su', +'warandpeace.ru', +'tvkultura.ru', +'mirfactov.com', +'koolinar.ru', +'evrl.to', +'cinemate.cc', +'roem.ru', +'libertycity.ru', +'informing.ru', +'ofigenno.cc', +'kolmovo.ru', +'amic.ru', +'mhealth.ru', +'autoreview.ru', +'itc.ua', +'161.ru', +'mmohelper.ru', +'wow-impulse.ru', +'appleinsider.ru', +'pravda-tv.ru', +'avtomarket.ru', +'newsrbk.ru', +'gtavicecity.ru', +'radiomayak.ru', +'rsute.ru', +'spbdnevnik.ru', +'dailymail.co.uk', +'svopi.ru', +'akaoray.ru', +'fc-zenit.ru', +'macos.livejournal.com', +'vozduh.afisha.ru', +'city-n.ru', +'furfur.me', +'ru.euronews.com', +'metronews.ru', +'vgtimes.ru', +'nstarikov.ru', +'polit.ru', +'zoom.cnews.ru', +'hiji.ru', +'gordonua.com', +'bigpicture.ru', +'prestige-gaming.ru', +'5-tv.ru', +'rb.ru', +'spbvoditel.ru', +'overclockers.ua', +'moddb.com', +'7dach.ru', +'ohranatruda.ru', +'ngs24.ru', +'russian7.ru', +'nashgorod.ru', +'rockstargame.ru', +'nat-geo.ru', +'gastronom.ru', +'hitech.vesti.ru', +'burdastyle.ru', +'rfpl.org', +'audi-club.ru', +'allnokia.ru', +'3mv.ru', +'zavuch.ru', +'news.ykt.ru', +'lawmix.ru', +'chita.ru', +'altapress.ru', +'domchel.ru', +'dooralei.ru', +'be-in.ru', +'newslab.ru', +'geekcity.ru', +'rueconomics.ru', +'cheat-master.ru', +'takprosto.cc', +'dofiga.net', +'nacrestike.ru', +'24smi.org', +'voffka.com', +'mpsh.ru', +'vhlru.ru', +'infox.ru', +'bbc.co.uk', +'newstube.ru', +'womenhealthnet.ru', +'gazeta.spb.ru', +'lookatme.ru', +'ivona.bigmir.net', +'economics.unian.net', +'pozneronline.ru', +'rlocman.ru', +'w-o-s.ru', +'wowhead.com', +'nashpoz.ru', +'tverigrad.ru', +'ign.com', +'diets.ru', +'demotivation.me', +'ru.gecid.com', +'golos-ameriki.ru', +'finmarket.ru', +'theguardian.com', +'amur.info', +'monavista.ru', +'arzamas.academy', +'pravo.ru', +'edition.cnn.com', +'ukr.net', +'travel.drom.ru', +'cluber.com.ua', +'bibika.ru', +'sharij.net', +'pedsovet.org', +'masterok.livejournal.com', +'psychologies.ru', +'gorod55.ru', +'esquire.ru', +'myslo.ru', +'postnauka.ru', +'abc-news.ru', +'dom2.su', +'volshebnaya-eda.ru', +'ucheba.ru', +'medialeaks.ru', +'artstation.com', +'kaifolog.ru', +'relax.ru', +'bikepost.ru', +'rusbiathlon.ru', +'bookmakersrating.ru', +'culture.ru', +'7kingdoms.ru', +'wroom.ru', +'sobesednik.ru', +'proufu.ru', +'chezasite.com', +'bnkomi.ru', +'piter.tv', +'computerra.ru', +'eer.ru', +'yaom.ru', +'rrnews.ru', +'kpfu.ru', +'ukraina.ru', +'gagadget.com', +'buhgalteria.ru', +'atlib.ru', +'wonderzine.com', +'mmoboom.ru', +'bucwar.ru', +'primamedia.ru', +'47news.ru', +'klub-drug.ru', +'kulturologia.ru', +'bk55.ru', +'2do2go.ru', +'securitylab.ru', +'nakanune.ru', +'zdorovieinfo.ru', +'medportal.ru', +'novate.ru', +'smotra.ru', +'hibiny.com', +'penzainform.ru', +'buh.ru', +'hi-fi.ru', +'dwg.ru', +'naked-science.ru', +'ibusiness.ru', +'fresher.ru', +'carsguru.net', +'fit4brain.com', +'muz-tv.ru', +'kavkaz-uzel.ru', +'kitchenmag.ru', +'ruspoll.ru', +'wowlol.ru', +'bcs-express.ru', +'uralweb.ru', +'nv.ua', +'liveleak.com', +'vasi.net', +'topspb.tv', +'sobaka.ru', +'inmyroom.ru', +'detkityumen.ru', +'mirkosmosa.ru', +'allwomens.ru', +'kp40.ru', +'optimakomp.ru', +'29.ru', +'trendymen.ru', +'hardwareluxx.ru', +'pln-pskov.ru', +'klops.ru', +'lfootball.ws', +'kleo.ru', +'sputnikipogrom.com', +'pg21.ru', +'medikforum.ru', +'donnews.ru', +'bankir.ru', +'news.vse42.ru', +'searchnews.info', +'fedpress.ru', +'fishingsib.ru', +'podelki-rukami-svoimi.ru', +'jv.ru', +'nashaplaneta.su', +'ideas.vdolevke.ru', +'diletant.media', +'gta.com.ua', +'zagopod.com', +'rian.com.ua', +'gov.spb.ru', +'glamius.ru', +'yablyk.com', +'uapress.info', +'komarovskiy.net', +'stolica.onego.ru', +'popcornnews.ru', +'qrz.ru', +'rutraveller.ru', +'ohotniki.ru', +'progorodsamara.ru', +'24tv.ua', +'rusdtp.ru', +'houzz.ru', +'chto-proishodit.ru', +'dnpmag.com', +'ru.hellomagazine.com', +'runews24.ru', +'kak2z.ru', +'pcgamer.com', +'ruskline.ru', +'dr-piliulkin.livejournal.com', +'dezinfo.net', +'korzik.net', +'3rm.info', +'tv-soyuz.ru', +'knitka.ru', +'alimero.ru', +'planeta.moy.su', +'elementy.ru', +'newsli.ru', +'zabmedia.ru', +'antifashist.com', +'tvoytrener.com', +'elec.ru', +'domechti.ru', +'ulpressa.ru', +'babiki.ru', +'realty.newsru.com', +'1obl.ru', +'motorpage.ru', +'winline.ru', +'earth-chronicles.ru', +'amdn.news', +'ochepyatki.ru', +'goodhouse.ru', +'rt.com', +'vzsar.ru', +'buzzfeed.com', +'bragazeta.ru', +'tks.ru', +'womanhit.ru', +'sostav.ru', +'ruspravda.info', +'androidinsider.ru', +'gdekluet.ru', +'dejurka.ru', +'keddr.com', +'prokazan.ru', +'vladmama.ru', +'newtimes.ru', +'voicesevas.ru', +'v1.ru', +'komiinform.ru', +'chipstone.livejournal.com', +'properm.ru', +'searchengines.ru', +'38mama.ru', +'videoboom.cc', +'newsru.co.il', +'4tololo.ru', +'mosday.ru', +'deita.ru', +'cars.ru', +'news.allcrimea.net', +'ufa1.ru', +'gq.ru', +'uafootball.org.ua', +'travel.ru', +'bn.ru', +'news.am', +'tvernews.ru', +'tomshardware.co.uk', +'ok-inform.ru', +'tproger.ru', +'shophelp.ru', +'news.tut.by', +'spb.aif.ru', +'nytimes.com', +'verstov.info', +'droider.ru', +'batona.net', +'gamespot.com', +'sarbc.ru', +'dribbble.com', +'nkj.ru', +'vokrugsveta.ru', +'vestiprim.ru', +'kp.ua', +'restate.ru', +'glamour.ru', +'doctorpiter.ru', +'76.ru', +'inforesist.org', +'rzn.info', +'spartak.com', +'progorod11.ru', +'e-xecutive.ru', +'kdelo.ru', +'jevons1.com', +'news.day.az', +'hochu.ua', +'prophotos.ru', +'4living.ru', +'rusradio.ru', +'kvadroom.ru', +'nevnov.ru', +'om1.ru', +'omskinform.ru', +'nahnews.org', +'riarealty.ru', +'avtoradio.ru', +'homyak55.ru', +'papaimama.ru', +'reuters.com', +'ngs55.ru', +'lvrach.ru', +'nvworld.ru', +'autopeople.ru', +'livesport.ru', +'wmj.ru', +'ru.uefa.com', +'doseng.org', +'techpowerup.com', +'trud.ru', +'khabmama.ru', +'vtambove.ru', +'patriarchia.ru', +'progorodnn.ru', +'art-assorty.ru', +'gazeta.a42.ru', +'vev.ru', +'sdelaysam-svoimirukami.ru', +'rusjev.net', +'zagolovki.ru', +'pressa.tv', +'sarnovosti.ru', +'kazanfirst.ru', +'copypast.ru', +'mignews.com', +'gameawards.ru', +'bloomberg.com', +'facenewss.ru', +'mforum.ru', +'samru.ru', +'rockpapershotgun.com', +'gallerix.ru', +'pravdoryb.info', +'diy.ru', +'rmnt.ru', +'autosaratov.ru', +'antipriunil.ru', +'yuga.ru', +'vitaportal.ru', +'vogue.ru', +'newsonline24.com.ua', +'android-help.ru', +'joinfo.ua', +'meganovosti.net', +'planet-today.ru', +'chinamobil.ru', +'tltgorod.ru', +'freeseller.ru', +'nversia.ru', +'jpgazeta.ru', +'ellegirl.ru', +'tele.ru', +'probirka.org', +'pribalt.info', +'bg.ru', +'vashgorod.ru', +'1gai.ru', +'fithacker.ru', +'darievna.ru', +'36on.ru', +'readtoday.ru', +'domihobby.ru', +'internet-technologies.ru', +'irinazaytseva.ru', +'nsknews.info', +'telegraf.com.ua', +'chemport.ru', +'fotokomok.ru', +'cameralabs.org', +'mchs.gov.ru', +'rostovdrive.ru', +'grimnir74.livejournal.com', +'riavrn.ru', +'province.ru', +'letnews.ru', +'progorod43.ru', +'andychef.ru', +'dk.ru', +'dni24.com', +'rus.newsru.ua', +'mr7.ru', +'wordyou.ru', +'stereo.ru', +'gay.ru', +'utmagazine.ru', +'ya62.ru', +'purmix.ru', +'5koleso.ru', +'zakon.ru', +'seonews.ru', +'metaltorg.ru', +'unn.com.ua', +'kgd.ru', +'onedio.ru', +'flot.com', +'zol.ru', +'eg-online.ru', +'fakty.ictv.ua', +'newsforamericans.com', +'zn.ua', +'rifey.ru', +'dialog.ua', +'psycabi.net', +'gorodskoyportal.ru', +'blackpantera.ru', +'tv2.tomsk.ru', +'brodude.ru', +'bloknot-volgograd.ru', +'aillarionov.livejournal.com', +'gotps3.ru', +'lady.tochka.net', +'medicinform.net', +'videozal.net', +'zhenskiy-sait.ru', +'ru.tv', +'arms-expo.ru', +'prikol.ru', +'krabov.net', +'n4k.ru', +'museum.ru', +'fontanka.fi', +'the-challenger.ru', +'sledcomrf.ru', +'newsader.com', +'zelenograd.ru', +'avia.pro', +'bloknot-voronezh.ru', +'theoryandpractice.ru', +'buro247.ru', +'telegraph.co.uk', +'njcar.ru', +'iphone-gps.ru', +'sport.bigmir.net', +'soccerlivehd.com', +'topgearrussia.ru', +'argumentiru.com', +'metrolyrics.com', +'dvnovosti.ru', +'infowoman.com.ua', +'riasv.ru', +'bankingsite.ru', +'mgnews.ru', +'sredstva.ru', +'cossa.ru', +'vg247.com', +'molnet.ru', +'grammio.com', +'sovsekretno.ru', +'etotdom.com', +'lipetskmedia.ru', +'video.bigmir.net', +'nexplorer.ru', +'beremennost.net', +'filmz.ru', +'ski.ru', +'24gadget.ru', +'rus.delfi.lv', +'sotovik.ru', +'online812.ru', +'knowyourmeme.com', +'howtogeek.com', +'nsn.fm', +'mobiledevice.ru', +'ozpp.ru', +'colta.ru', +'guru3d.com', +'31tv.ru', +'gorodkirov.ru', +'nikolaeva.livejournal.com', +'hitech.newsru.com', +'starslife.ru', +'gazeta-unp.ru', +'rosteplo.ru', +'allcarz.ru', +'tourprom.ru', +'devaka.ru', +'bloknot-rostov.ru', +'peterburg2.ru', +'nur.kz', +'gardenia.ru', +'ug.ru', +'independent.co.uk', +'bashinform.ru', +'etoday.ru', +'autonet.ru', +'vostokmedia.com', +'krsk.sibnovosti.ru', +'medlinks.ru', +'xage.ru', +'myfreesoft.ru', +'viperson.ru', +'trkterra.ru', +'kinokadr.ru', +'interviewrussia.ru', +'aksakal.tv', +'vicer.ru', +'irn.ru', +'yugopolis.ru', +'islam-today.ru', +'btimes.ru', +'rusactors.ru', +'gaming.msi.com', +'redigo.ru', +'vpk-news.ru', +'politolog.net', +'hronika.info', +'oilru.com', +'sntat.ru', +'ekburg.ru', +'auto.newsru.com', +'teknoblog.ru', +'washingtonpost.com', +'kinofilms.ua', +'pics.ru', +'tumix.ru', +'cnet.com', +'rustelegraph.ru', +'marrietta.ru', +'botanichka.ru', +'piterburger.ru', +'fitseven.ru', +'okino.ua', +'mastera-rukodeliya.ru', +'domnika.ru', +'newizv.ru', +'army-news.ru', +'korfiati.ru', +'otr-online.ru', +'pravdaurfo.ru', +'mngz.ru', +'nevsedoma.com.ua', +'product-test.ru', +'newrezume.org', +'blognews.am', +'philologist.livejournal.com', +'almodi.org', +'carobka.ru', +'exkavator.ru', +'by24.org', +'news.auto.ru', +'tvk6.ru', +'yoursputnik.ru', +'mylitta.ru', +'mel.fm', +'livekuban.ru', +'perm.aif.ru', +'turizm.ru', +'osp.ru', +'uralinform.ru', +'procrf.ru', +'finam.info', +'saratovnews.ru', +'marieclaire.ru', +'secure.avaaz.org', +'womenclub.ru', +'signorina.ru', +'kapital-rus.ru', +'nedeli.org', +'vtb.ru', +'allure.ru', +'myspace.com', +'health-ua.org', +'huffingtonpost.com', +'ain.ua', +'ufacitynews.ru', +'trikky.ru', +'tv.ua', +'passion.ru', +'storyfox.ru', +'crimea.kp.ru', +'ipadstory.ru', +'mycharm.ru', +'forbes.com', +'prelest.com', +'foodclub.ru', +'idi-k-nam.ru', +'spicami.ru', +'medicus.ru', +'android4all.ru', +'novostroy-m.ru', +'moscow-post.com', +'fashiontime.ru', +'mk-london.co.uk', +'htn.su', +'paperpaper.ru', +'rospres.com', +'unikassa.ru', +'zoopicture.ru', +'knitplanet.ru', +'resobr.ru', +'novayagazeta-ug.ru', +'energovopros.ru', +'lyxavto.ru', +'vsezdorovo.com', +'dela-ruk.ru', +'top-antropos.com', +'crimea.ria.ru', +'taxpravo.ru', +'ikirov.ru', +'interfax.com.ua', +'goodvesti.ru', +'sofascore.com', +'vremyan.ru', +'mag.relax.by', +'myjane.ru', +'supersadovnik.ru', +'povozcar.ru', +'animal.ru', +'an-crimea.ru', +'informnapalm.org', +'menobr.ru', +'depo.ua', +'ntpo.com', +'domovouyasha.ru', +'comandir.com', +'mobiset.ru', +'turbina.ru', +'tribuna.ru', +'wek.ru', +'updiet.info', +'insider.pro', +'kvedomosti.com', +'saint-petersburg.ru', +'restoran.ru', +'tatar-inform.ru', +'blogimam.com', +'carexpert.ru', +'techno.bigmir.net', +'mirror.co.uk', +'f1cd.ru', +'vlasti.net', +'ukranews.com', +'lifehacker.com', +'prikol.i.ua', +'imenno.ru', +'whoswho.com.ua', +'nbcnews.com', +'indystar.com', +'zergulio.livejournal.com', +'116.ru', +'zina-korzina.livejournal.com', +'pe.com', +'cyber.sports.ru', +'news.meta.ua', +'lingorado.com', +'ampravda.ru', +'ru.golos.ua', +'gwinplane.livejournal.com', +'cbssports.com', +'sport.tut.by', +'fapl.ru', +'profile.ru', +'shpilenok.livejournal.com', +'volgograd.kp.ru', +'sapojnik.livejournal.com', +'chicagotribune.com', +'portal-credo.ru', +'fintraining.livejournal.com', +'kungurov.livejournal.com', +'oldfisher-mk.livejournal.com', +'kosmos-x.net.ru', +'npr.org', +'twincities.com', +'aex.ru', +'mb.onliner.by', +'vesiskitim.ru', +'rua.gr', +'gusev-online.ru', +'blog.yandex.ru', +'heraldsun.com.au', +'chel.mk.ru', +'info-tses.kz', +'militaryexp.com', +'cikavosti.com', +'vestnik-rm.ru', +'nsk.dk.ru', +'chistoprudov.livejournal.com', +'ru-healthlife.livejournal.com', +'vestitambov.ru', +'jobs.tut.by', +'kurer-sreda.ru', +'bloombergview.com', +'thenewstribune.com', +'izh.kp.ru', +'tv21.ru', +'hindustantimes.com', +'businesswire.com', +'bankfax.ru', +'ato.ru', +'bryansktoday.ru', +'dtpptz.ru', +'mzadornov.livejournal.com', +'doktor-killer.livejournal.com', +'motonews.ru', +'penza-press.ru', +'iran.ru', +'9to5mac.com', +'dima-pashchenko.livejournal.com', +'bloknot-stavropol.ru', +'dynamo.kiev.ua', +'motogonki.ru', +'fortune.com', +'pushba.livejournal.com', +'yarnovosti.com', +'uralpress.ru', +'wsj.com', +'rabochy-put.ru', +'eurointegration.com.ua', +'prosportkz.kz', +'ufa-room.ru', +'brainpickings.org', +'sport.business-gazeta.ru', +'radulova.livejournal.com', +'pg12.ru', +'asfera.info', +'smbc-comics.com', +'whatculture.com', +'foto-history.livejournal.com', +'zdnet.com', +'motogp-news.ru', +'media-polesye.by', +'vsenovostint.ru', +'kolyan.net', +'dirty.ru', +'kineshemec.ru', +'izrus.co.il', +'dailyherald.com', +'csmonitor.com', +'mogilev.jobs.tut.by', +'in-news.ru', +'novostink.ru', +'xn----8sbeybxdibygm.ru-an.info', +'spb-auto.livejournal.com', +'strangernn.livejournal.com', +'ngs42.ru', +'kriminalnn.ru', +'newsmsk.com', +'esotericblog.ru', +'rweek.ru', +'grey-croco.livejournal.com', +'volg.mk.ru', +'comingsoon.net', +'siliconrus.com', +'nvo.ng.ru', +'alternathistory.livejournal.com', +'krasnoturinsk.info', +'oblgazeta.ru', +'engadget.com', +'sportfm.ru', +'politichanka.livejournal.com', +'androidauthority.com', +'fondsk.ru', +'bankrate.com', +'neowin.net', +'vestikavkaza.ru', +'flackelf.livejournal.com', +'readwrite.com', +'radonezh.ru', +'kase.kz', +'cracked.com', +'udmtv.ru', +'arigus-tv.ru', +'otvprim.ru', +'ufa.rbc.ru', +'sibdepo.ru', +'eu-shestakov.livejournal.com', +'i4u.com', +'newsday.com', +'yug.svpressa.ru', +'krasnoyarsk.dk.ru', +'lib.komarovskiy.net', +'lada.kz', +'baikal-media.ru', +'news.sky.com', +'belnovosti.by', +'otdam-darom.livejournal.com', +'recode.net', +'vice.com', +'grozny.tv', +'ru-chp.livejournal.com', +'stalic.livejournal.com', +'gosh100.livejournal.com', +'vibirai.ru', +'buzulukmedia.ru', +'chessok.net', +'tula.aif.ru', +'dvinainform.ru', +'rgvktv.ru', +'vinauto777.livejournal.com', +'azcentral.com', +'newsler.ru', +'top.rbc.ru', +'kvnews.ru', +'altai.aif.ru', +'kazan.kp.ru', +'irk.kp.ru', +'pravdoiskatel77.livejournal.com', +'dailydot.com', +'limonov-eduard.livejournal.com', +'fastcompany.com', +'zpravda.ru', +'belapan.com', +'washingtontimes.com', +'journalstar.com', +'articles.chita.ru', +'cnbc.com', +'spulers.livejournal.com', +'telegraf.by', +'stoletie.ru', +'nnov.kp.ru', +'startribune.com', +'vsluh.ru', +'finance.nur.kz', +'gorno-altaisk.info', +'gipsyteam.ru', +'prikol.bigmir.net', +'gotennis.ru', +'chelseablues.ru', +'themarysue.com', +'sl-lopatnikov.livejournal.com', +'chehov-vid.ru', +'economist.com', +'cultofmac.com', +'el-murid.livejournal.com', +'shel-gilbo.livejournal.com', +'serfilatov.livejournal.com', +'mr-rf.ru', +'go31.ru', +'bulochnikov.livejournal.com', +'beauty.passion.ru', +'ru.publika.md', +'dangerousminds.net', +'gorodskievesti.ru', +'cnn.com', +'nasdaq.com', +'geektyrant.com', +'realt.onliner.by', +'gorod-che.ru', +'islamdag.ru', +'42.tut.by', +'verola.livejournal.com', +'news.vtomske.ru', +'muravei-s.livejournal.com', +'goal.com', +'eugenyshultz.livejournal.com', +'nbcbayarea.com', +'dobryanka.net', +'gawker.com', +'contracostatimes.com', +'spin.com', +'thestar.com', +'belta.by', +'ria56.ru', +'abc.net.au', +'e-kazan.ru', +'zaks.ru', +'hollywoodreporter.com', +'a-nikonov.livejournal.com', +'vluki.ru', +'factmag.com', +'auto.kz', +'sport-igrok.ru', +'karpovka.net', +'dymontiger.livejournal.com', +'doc.rt.com', +'metroelf.livejournal.com', +'michurinsk.ru', +'scmp.com', +'your-look-today.livejournal.com', +'computerworld.com', +'chelny-izvest.ru', +'wired.com', +'pressdemocrat.com', +'revda-info.ru', +'vesti.irk.ru', +'chepetsk.ru', +'dnr-news.com', +'1news.az', +'philly.com', +'kt.kz', +'sochi-express.ru', +'alexandrafl.livejournal.com', +'omskzdes.ru', +'gazetaby.com', +'ugra-news.ru', +'csnphilly.com', +'ij-adult.livejournal.com', +'u74.ru', +'lubernet.ru', +'russos.livejournal.com', +'intex-press.by', +'yesasia.ru', +'bostonherald.com', +'androidcentral.com', +'blagin-anton.livejournal.com', +'friend.livejournal.com', +'novgaz-rzn.ru', +'prokopievsk.ru', +'spb.kp.ru', +'prophotos-ru.livejournal.com', +'mentalfloss.com', +'av.by', +'soba4ki.livejournal.com', +'pro.tonkosti.ru', +'salamnews.org', +'fsrussia.ru', +'9tv.co.il', +'gtrk-omsk.ru', +'te-st.ru', +'gubdaily.ru', +'gomel.today', +'kirovnet.ru', +'news.join.ua', +'novostroy-spb.ru', +'musictimes.com', +'blastr.com', +'yp.fedpress.ru', +'usatoday.com', +'blog.fontanka.ru', +'usolie.info', +'profit.kz', +'marpravda.ru', +'france24.com', +'sutynews.ru', +'wolsk.ru', +'vdomodedovo.info', +'chervonec-001.livejournal.com', +'comicvine.com', +'kavkaz.mk.ru', +'oregonlive.com', +'social.ridus.ru', +'evo-lutio.livejournal.com', +'astrakhan-24.ru', +'uchvatovsb.livejournal.com', +'avvakoum.livejournal.com', +'onliner.by', +'burckina-faso.livejournal.com', +'spydell.livejournal.com', +'freedom.livejournal.com', +'ru.ign.com', +'ria-m.tv', +'interesno.co', +'smh.com.au', +'pg13.ru', +'syasnews.ru', +'vestivrn.ru', +'phonearena.com', +'nme.com', +'timesunion.com', +'charsov.livejournal.com', +'isra.com', +'astanatv.kz', +'moygorod-online.ru', +'sem40.ru', +'militariorg.ucoz.ru', +'news.com.au', +'espn.go.com', +'deseretnews.com', +'azerisport.com', +'sciencealert.com', +'orlandosentinel.com', +'vgoroden.ru', +'novorosinform.org', +'novosti.dn.ua', +'liwli.ru', +'likeni.ru', +'tettie.livejournal.com', +'gothamist.com', +'vrn.mk.ru', +'comicbookresources.com', +'tlt.ru', +'inter.ua', +'govorun26.ru', +'sport.nur.kz', +'7info.ru', +'infpol.ru', +'ng.kz', +'gmorder.livejournal.com', +'sibkray.ru', +'thedenverchannel.com', +'kurgan.ru', +'vseprosport.ru', +'crimsonalter.livejournal.com', +'lady.nur.kz', +'moto-magazine.ru', +'geeksaresexy.net', +'vv-34.ru', +'wow-impulse.net', +'echonedeli.ru', +'globalaffairs.ru', +'ibigdan.com', +'kansascity.com', +'the-day-x.ru', +'vesti.az', +'melon-panda.livejournal.com', +'tatler.ru', +'novorus.info', +'gorky-look.livejournal.com', +'waralbum.ru', +'shri-boomer.livejournal.com', +'text.khl.ru', +'thecrimson.com', +'briansk.ru', +'shakkar.livejournal.com', +'saracinua.livejournal.com', +'nsk.kp.ru', +'kentucky.com', +'astronews.ru', +'mikle1.livejournal.com', +'ptoday.ru', +'novgorod.ru', +'vesti-sochi.tv', +'samara.kp.ru', +'swissinfo.ch', +'ufatime.ru', +'holmogor.livejournal.com', +'alt.kp.ru', +'humus.livejournal.com', +'ancient-origins.net', +'russianshowbiz.info', +'sv.ru-m.org', +'interfax.by', +'skisport.ru', +'zakon.kz', +'sochi.com', +'pro-n.by', +'greenchelman-3.livejournal.com', +'consequenceofsound.net', +'nyka-huldra.livejournal.com', +'perevodika.ru', +'ntv.livejournal.com', +'wired.co.uk', +'total.kz', +'morena-morana.livejournal.com', +'ru.delfi.lt', +'katysha.livejournal.com', +'media.club4x4.ru', +'dilbert.com', +'droid-life.com', +'mainfun.ru', +'screenrant.com', +'domodedovod.ru', +'ont.by', +'news.vdv-s.ru', +'kalmykia-online.ru', +'kaluga24.tv', +'ok-magazine.ru', +'sense-life.com', +'ctv.ca', +'grantland.com', +'kolomna-spravka.ru', +'sport.kazanfirst.ru', +'gazetairkutsk.ru', +'t.rbc.ru', +'pcworld.com', +'opposingviews.com', +'rbcdaily.ru', +'dom.63.ru', +'trisosny.ru', +'progorod33.ru', +'kaliningrad.kp.ru', +'bgr.com', +'reason.com', +'al.com', +'mediamatters.org', +'businessspectator.com.au', +'kashin.guru', +'syracuse.com', +'dubikvit.livejournal.com', +'fritzmorgen.livejournal.com', +'foodclub-ru.livejournal.com', +'goloskarpat.info', +'paparazzi.ru', +'malyshi.livejournal.com', +'bit.ua', +'netall.ru', +'news.megatyumen.ru', +'rus.azattyq.org', +'isurok.livejournal.com', +'inamora.livejournal.com', +'volha.livejournal.com', +'mediaite.com', +'cinemablend.com', +'potsreotizm.livejournal.com', +'ufa.kp.ru', +'dymovskiy-name.livejournal.com', +'hor.passion.ru', +'168.ru', +'huffingtonpost.co.uk', +'reb.by', +'caravan.kz', +'vesti48.ru', +'vott.ru', +'kirov-portal.ru', +'news.vitebsk.cc', +'110km.ru', +'theglobeandmail.com', +'novokuznetsk.su', +'ivanoctober.livejournal.com', +'kuban.mk.ru', +'uproxx.com', +'gezitter.org', +'thestreet.com', +'letchikleha.livejournal.com', +'slashgear.com', +'rusanalit.livejournal.com', +'reporter.akipress.org', +'moneycontrol.com', +'polygon.com', +'mashkind.livejournal.com', +'cheremuha.com', +'odsgomel.org', +'chaskor.ru', +'bespridanitsa.livejournal.com', +'frant.me', +'prilepin.livejournal.com', +'pgatour.com', +'hqroom.ru', +'kotaku.com', +'dolboeb.livejournal.com', +'ej.by', +'gizmodo.com', +'irek-murtazin.livejournal.com', +'barrons.com', +'syzran-small.ru', +'sportbo.ru', +'xn----ctbsbazhbctieai.ru-an.info', +'holodilnik.info', +'digitalspy.com', +'fratria.ru', +'time.com', +'vesti42.ru', +'365news.biz', +'upi.com', +'xn--h1akeme.ru-an.info', +'dengi.59.ru', +'ast-news.ru', +'blogs.pravda.com.ua', +'sergeydolya.livejournal.com', +'independent.ie', +'sibved.livejournal.com', +'nypost.com', +'bimru.ru', +'ru-aviation.livejournal.com', +'theregister.co.uk', +'thestir.cafemom.com', +'forbes.kz', +'roman-n.livejournal.com', +'realty.vesti.ru', +'indianexpress.com', +'rapsinews.ru', +'ulan.mk.ru', +'vg-saveliev.livejournal.com', +'secondstreet.ru', +'vnnews.ru', +'ara-bublik.livejournal.com', +'yurayakunin.livejournal.com', +'zelenyikot.livejournal.com', +'newsko.ru', +'visualhistory.livejournal.com', +'bnews.kz', +'tomsk.ru', +'alternet.org', +'ural.kp.ru', +'zarulem.by', +'blog.netpeak.ua', +'macworld.com', +'sport.ru', +'desmoinesregister.com', +'vsegda-tvoj.livejournal.com', +'news.1777.ru', +'nfl.com', +'putin-today.ru', +'dw.de', +'hurriyetdailynews.com', +'tampabay.com', +'7mednews.ru', +'macleans.ca', +'malka-lorenz.livejournal.com', +'dv.kp.ru', +'chastnik.ru', +'gazetarb.ru', +'alexandr-rogers.livejournal.com', +'astrakhanfm.ru', +'newsweek.com', +'novorossy.ru', +'365info.kz', +'baltimoresun.com', +'saratov.kp.ru', +'region15.ru', +'nsktv.ru', +'ft.com', +'kak-eto-sdelano.livejournal.com', +'spb.sovsport.ru', +'theoatmeal.com', +'avclub.com', +'auto.29.ru', +'apsny.ge', +'omg.md', +'obninsk.name', +'journalufa.com', +'ndn.info', +'tayga.info', +'sciencedump.com', +'homester.com.ua', +'krylov.livejournal.com', +'beerplace.com.ua', +'natamax.livejournal.com', +'rusathletics.com', +'cursiv.ru', +'mmaboxing.ru', +'facte.ru', +'dorkly.com', +'ofeliyadd.livejournal.com', +'kazan.mk.ru', +'fototelegraf.ru', +'tv29.ru', +'tut.by', +'35media.ru', +'rgo.ru', +'yarjal.com', +'bleacherreport.com', +'hata.by', +'oper-1974.livejournal.com', +'livescience.com', +'io9.com', +'people.com', +'theweek.com', +'nymag.com', +'businessinsider.com', +'primecrime.ru', +'gazeta13.ru', +'irsenas.livejournal.com', +'russiapost.su', +'trend.az', +'tkgorod.ru', +'politico.com', +'apn.ru', +'andreistp.livejournal.com', +'adweek.com', +'stuff.co.nz', +'space.com', +'sarapul.net', +'ko44.ru', +'yar.kp.ru', +'exler.livejournal.com', +'newser.com', +'penzanews.ru', +'sportsgrid.com', +'vlast.kz', +'informationweek.com', +'vidsboku.com', +'mstrok.ru', +'webmastermaksim.ru', +'ukrinform.ua', +'geo.ru', +'galkovsky.livejournal.com', +'karel.mk.ru', +'mir-mag.livejournal.com', +'prosto-gost.livejournal.com', +'k-ur.ru', +'mhl.khl.ru', +'news.novgorod.ru', +'cleveland.com', +'theage.com.au', +'kenigtiger.livejournal.com', +'unian.ua', +'starshinazapasa.livejournal.com', +'yuripasholok.livejournal.com', +'deadline.com', +'aljazeera.com', +'timesofisrael.com', +'people-press.org', +'medpagetoday.com', +'freep.com', +'aviaport.ru', +'make-your-style.livejournal.com', +'examiner.com', +'phys.org', +'andrei-bt.livejournal.com', +'glamurchik.tochka.net', +'newsinfo.inquirer.net', +'altpress.com', +'ibtimes.co.uk', +'rul.by', +'nationalreview.com', +'lasvegassun.com', +'gagauzinfo.md', +'dailynews.com', +'bohemicus.livejournal.com', +'amfora.livejournal.com', +'adindex.ru', +'chispa1707.livejournal.com', +'autoban.by', +'portal-kultura.ru', +'matrony.ru', +'omsk.kp.ru', +'podrobno.uz', +'rusila.su', +'dom.72.ru', +'fn-volga.ru', +'martin.livejournal.com', +'thehindu.com', +'miloserdie.ru', +'sportingnews.com', +'networkworld.com', +'seattlepi.com', +'ctv.by', +'vseneobichnoe.livejournal.com', +'techtimes.com', +'macrumors.com', +'novayagazeta.livejournal.com', +'spiked-online.com', +'aquatek-filips.livejournal.com', +'sitv.ru', +'arbaletfire.livejournal.com', +'zavtra.ru', +'chernovik.net', +'evrazia.org', +'news29.ru', +'alex-aka-jj.livejournal.com', +'luki.ru', +'usnews.com', +'xn--90aiasbk5as2f.xn--p1ai', +'cardesign.ru', +'newsbabr.com', +'info.sibnet.ru', +'wik-end.com', +'flytothesky.ru', +'rostov.rbc.ru', +'ryazan.kp.ru', +'rostov.kp.ru', +'billionnews.ru', +'admagazine.ru', +'rebro-a-dama.livejournal.com', +'velolive.com', +'vb.kg', +'sarinform.ru', +'stainlesstlrat.livejournal.com', +'metalinjection.net', +'amurmedia.ru', +'top.thepo.st', +'che-online.com', +'volga-tv.ru', +'mercurynews.com', +'rodgor-vlg.ru', +'komikz.ru', +'ca-news.org', +'greenpeace.org', +'alex-leshy.livejournal.com', +'valyaeva.ru', +'usmagazine.com', +'sergeytsvetkov.livejournal.com', +'tradelikeapro.ru', +'autostat.ru', +'go32.ru', +'mediapost.com', +'ru-an.info', +'mixednews.ru', +'auto.161.ru', +'most.tv', +'yarnews.net', +'tvtomsk.ru', +'xkcd.com', +'riatomsk.ru', +'ais.by', +'4vsar.ru', +'khabar.ibnlive.com', +'infodoktor.by', +'eaomedia.ru', +'laughingsquid.com', +'islamnews.ru', +'masslive.com', +'glazovportal.net', +'forum.gipsyteam.ru', +'sport-weekend.com', +'express.co.uk', +'riadagestan.ru', +'politsovet.ru', +'pryf.livejournal.com', +'chrono-tm.org', +'newsroom24.ru', +'rbworld.org', +'sports.kz', +'puerrtto.livejournal.com', +'konkretno.ru', +'kursiv.kz', +'money.rbc.ru', +'tutuskania.livejournal.com', +'arbatovagidepar.livejournal.com', +'rollingstone.com', +'nslovo.info', +'newsbel.by', +'thestate.com', +'theatlantic.com', +'ivanovonews.ru', +'ao.by', +'sportsdaily.ru', +'pushkino.tv', +'kg.akipress.org', +'kopeika.org', +'royalcheese.ru', +'tmz.com', +'ab.onliner.by', +'zwezda.net', +'diapazon.kz', +'kagemushanatako.livejournal.com', +'pravdapfo.ru', +'afn.by', +'24.kg', +'niann.ru', +'cbsnews.com', +'weeklystandard.com', +'ufacity.info', +'gorodusinsk.ru', +'newsarama.com', +'pinwin.ru', +'indiatimes.com', +'doodoo.ru', +'sun-sentinel.com', +'variety.com', +'diak-kuraev.livejournal.com', +'maks-portal.ru', +'73online.ru', +'slate.com', +'beautyinsider.ru', +'kiss-my-abs.livejournal.com', +'auto.altapress.ru', +'day.az', +'dawn.com', +'prima-tv.ru', +'ruscur.ru', +'omskpress.ru', +'awas1952.livejournal.com', +'dom.59.ru', +'samara.ru', +'bikeradar.com', +'engineering-ru.livejournal.com', +'xn----ctbsbaa3aibxhck.ru-an.info', +'video.khl.ru', +'thesun.co.uk', +'ajc.com', +'technologyreview.com', +'vesti-ukr.com', +'ekb.rbc.ru', +'8plus1.ru', +'korabel.ru', +'k1news.ru', +'mixnews.lv', +'ekb.dk.ru', +'pavel-sviridov.livejournal.com', +'courant.com', +'scientificamerican.com', +'dnaindia.com', +'popsci.com', +'aftershock-1.livejournal.com', +'ubergizmo.com', +'ndtv.com', +'zabinfo.ru', +'prochepetsk.ru', +'superomsk.ru', +'ivakin-alexey.livejournal.com', +'discovery.com', +'utexas.edu', +'gts.tv', +'footballtop.ru', +'bloody-disgusting.com', +'arstechnica.com', +'vykza.ru', +'vaduhan-08.livejournal.com', +'bither.livejournal.com', +'rus-obr.ru', +'sakhalin.info', +'bocharik.livejournal.com', +'drugoigorod.ru', +'topic.lt', +'putin-slil.livejournal.com', +'pavel-shipilin.livejournal.com', +'geek.com', +'darsik-dasha.livejournal.com', +'tver.kp.ru', +'aktau-business.com', +'volna.afisha.ru', +'informpskov.ru', +'susanin.udm.ru', +'venturebeat.com', +'mcall.com', +'denofgeek.com', +'artemdragunov.livejournal.com', +'niasam.ru', +'communitarian.ru', +'kalugahouse.ru', +'solnyszka.livejournal.com', +'stltoday.com', +'periskop.livejournal.com', +'technobuffalo.com', +'rugrad.eu', +'extremetech.com', +'miamiherald.com', +'digitaltrends.com', +'kuban.rbc.ru', +'fox4kc.com', +'newsok.com', +'gtrk.tv', +'yerkramas.org', +'rt.rbc.ru', +'nbcsports.com', +'bizjournals.com', +'2x2.su', +'dailycaller.com', +'v102.ru', +'nydailynews.com', +'ysia.ru', +'biathlonrus.com', +'bloodandsweat.ru', +'newsvo.ru', +'nn.mk.ru', +'people.passion.ru', +'biserok.org', +'orenday.ru', +'marketwatch.com', +'afanasy.biz', +'ya-kadyrov.livejournal.com', +'chelnyltd.ru', +'truthdig.com', +'uk.eonline.com', +'bobsoccer.ru', +'kv.by', +'realty.ngs.ru', +'mirf.ru', +'u-tv.ru', +'mk.tula.ru', +'adn.com', +'star-telegram.com', +'techradar.com', +'ru-cats.livejournal.com', +'marvel.com', +'pppirate.livejournal.com', +'proboknet.livejournal.com', +'superkarate.ru', +'drugoi.livejournal.com', +'mycity.by', +'pskov.kp.ru', +'benzinga.com', +'velikiynovgorod.ru', +'qestigra.ru', +'5min.by', +'kirov.kp.ru', +'onlinetambov.ru', +'ibtimes.com', +'hueviebin1.livejournal.com', +'pachom.livejournal.com', +'auto.onliner.by', +'wrestdag.ru', +'ex-press.by', +'beauty-nax.livejournal.com', +'andreyvadjra.livejournal.com', +'nesn.com', +'hrono61.livejournal.com', +'dailyfinance.com', +'discred.ru', +'devyatka.ru', +'skysports.com', +'kaluga-poisk.ru', +'politsib.ru', +'nationalgeographic.com', +'ru.reuters.com', +'alau.kz', +'perm.rbc.ru', +'fighttime.ru', +'ru.apa.az', +'home-and-garden.livejournal.com', +'news.nashbryansk.ru', +'legatus-pretor.livejournal.com', +'presstv.ir', +'kuban.kp.ru', +'kot-de-azur.livejournal.com', +'kuzpress.ru', +'comicsalliance.com', +'tbo.com', +'viking-nord.livejournal.com', +'abrod.livejournal.com', +'svodka.akipress.org', +'cosharel.livejournal.com', +'onedivision.ru', +'tazabek.kg', +'thinkprogress.org', +'zasekin.ru', +'aif.by', +'strajj.livejournal.com', +'prweb.com', +'infobank.by', +'gg34.ru', +'sib.fm', +'koketka.livejournal.com', +'td5howard.livejournal.com', +'megatyumen.ru', +'timbuktoo.livejournal.com', +'charlotteobserver.com', +'latimes.com', +'gazeta-n1.ru', +'doneck-news.com', +'scandaly.ru', +'vesti.ua', +'newsobserver.com', +'news.ngs.ru', +'vkarpinsk.info', +'putnik1.livejournal.com', +'pesen-net.livejournal.com', +'newdaynews.ru', +'equestrian.ru', +'fotografersha.livejournal.com', +'serovglobus.ru', +'foxbusiness.com', +'jacksonville.com', +'ural56.ru', +'maxfux.livejournal.com', +'dostup1.ru', +'tatpressa.ru', +'nasa.gov', +'jewish.ru', +'t-itanium.livejournal.com', +'dimabalakirev.livejournal.com', +'mb.com.ph', +'mosaica.ru', +'tainy.net', +'bel.ru', +'inform.kz', +'votkinsk.net', +'odintsovo.info', +'klaxon.ru', +'teh-nomad.livejournal.com', +'lev-sharansky2.livejournal.com', +'iflscience.com', +'foxsports.com', +'got.vg', +'5sfer.com', +'android.mobile-review.com', +'xn--80ajoghfjyj0a.xn--p1ai', +'irishtimes.com', +'emelamud.livejournal.com', +'mnenia.zahav.ru', +'mgorod.kz', +'news.ircity.ru', +'novorossia.su', +'sexmotor.livejournal.com', +'wod-1958.livejournal.com', +'andrey-kuprikov.livejournal.com', +'kerzak-1.livejournal.com', +'maxkatz.livejournal.com', +'portamur.ru', +'avto.kazanfirst.ru', +'sledcom.ru', +'p-i-f.livejournal.com', +'chern-molnija.livejournal.com', +'sokol-ff.livejournal.com', +'cbc.ca', +'paranormal-news.ru', +'pitchfork.com', +'azh.kz', +'archi.ru', +'tvcom-tv.ru', +'salon.com', +'pora-valit.livejournal.com', +'cherinfo.ru', +'football.ua', +'ai-zhilin.livejournal.com', +'doktorbel.livejournal.com', +'tsn.ua', +'gorobzor.ru', +'auto.72.ru', +'dobre.stb.ua', +'hypetrak.com', +'53news.ru', +'mozhga.net', +'uglich-jj.livejournal.com', +'npubop.livejournal.com', +'vox.com', +'sbnation.com', +'iskra-kungur.ru', +'arabic.rt.com', +'lovigin.livejournal.com', +'pennlive.com', +'miss-tramell.livejournal.com', +'open.by', +'sacbee.com', +'udf.by', +'40161.ru', +'panzerbar.livejournal.com', +'rotoworld.com', +'b-online.ru', +'oppps.ru', +'ruscesar.livejournal.com', +'theins.ru', +'vesti-yamal.ru', +'euroradio.fm', +'grodno24.com', +'flgr.ru', +'actualcomment.ru', +'asiarussia.ru', +'pravdasevera.ru', +'apn-spb.ru', +'samara-ru.livejournal.com', +'tech.onliner.by', +'gazetavolgodonsk.ru', +'walera11.livejournal.com', +'motherjones.com', +'techspot.com', +'molonlabe.livejournal.com', +'billboard.com', +'ocregister.com', +'ctv7.ru', +'tobolsk.ru', +'kado4nikov.livejournal.com', +'tv-rb.ru', +'fool.com', +'gorodche.ru', +'f1-world.ru', +'tourdom.ru', +'techbrowsing.com', +'szhaman.livejournal.com', +'sb.by', +'rostec.ru', +'zacks.com', +'i-news.kz', +'chexov.net', +'mockwa.com', +'varjag-2007.livejournal.com', +'privetsochi.ru', +'waitbutwhy.com', +'prnewswire.com', +'chaiknet.ru', +'prostitutka-ket.livejournal.com', +'ulyanovskcity.ru', +'auto.vesti.ru', +'ihoraksjuta.livejournal.com', +'rostov.dk.ru', +'abw.by', +'avtosreda.ru', +'segodnia.ru', +'tanya-mass.livejournal.com', +'rebenok.by', +'12news.uz', +'albert-lex.livejournal.com', +'boingboing.net', +'u-96.livejournal.com', +'denverpost.com', +'nikitskij.livejournal.com', +'tavto.ru', +'odin-moy-den.livejournal.com', +'nerdist.com', +'hotnewhiphop.com', +'newregion.kz', +'kanchukov-sa.livejournal.com', +'zebra-tv.ru', +'chel.kp.ru', +'primeminister.kz', +'sfgate.com', +'murmansk.kp.ru', +'novos.mk.ru', +'islam.ru', +'mlb.com', +'charter97.org', +'echo.az', +'rk.karelia.ru', +'tvnz.co.nz', +'volgograd-trv.ru', +'progorod76.ru', +'1istochnik.ru', +'varandej.livejournal.com', +'newskaz.ru', +'statesman.com', +'bleedingcool.com', +'chel.dk.ru', +'nemoold.livejournal.com', +'uborshizzza.livejournal.com', +'select.by', +'kem.kp.ru', +'kapital.kz', +'uraldaily.ru', +'abs-cbnnews.com', +'volkovysk.by', +'today.com', +'mi3ch.livejournal.com', +'rus.ozodi.org', +'volzsky.ru', +'macradar.ru', +'kolobok1973.livejournal.com', +'littlehirosima.livejournal.com', +'tofight.ru', +'canadianbusiness.com', +'gmichailov.livejournal.com', +'seva-riga.livejournal.com', +'stuff.tv', +'uk.eurosport.yahoo.com', +'deccanherald.com', +'rollingstone.ru', +'eurofootball.ru', +'palmbeachpost.com', +'21.by', +'vmolo.by', +'hawk.ru', +'nj.com', +'vlg.aif.ru', +'nv-online.info', +'korea-blog.livejournal.com', +'baltinfo.ru', +'rossosh.bloknot-voronezh.ru', +'meditation-portal.com', +'bloknot-volzhsky.ru', +'dpmmax.livejournal.com', +'ru-auto.livejournal.com', +'frontpagemag.com', +'mkala.mk.ru', +'citysakh.ru', +'rovego.livejournal.com', +'allsportinfo.ru', +'miumau.livejournal.com', +'rawstory.com', +'lady.ru', +'comicbookmovie.com', +'homes.e1.ru', +'myudm.ru', +'nola.com', +'tengrinews.kz', +'foxnews.com', +'stars365.livejournal.com', +'zt16.ru', +'vesti-kpss.livejournal.com', +'weacom.ru', +'actualidad.rt.com', +'polosa.co.il', +'1777.ru', +'twower.livejournal.com', +'gigaom.com', +'pravdanews.info', +'katun24.ru', +'barnaul.fm', +'altaynews.kz', +'denokan.livejournal.com', +'uralpolit.ru', +'tumen.kp.ru', +'cjonline.com', +'post-gazette.com', +'superherohype.com', +'medicalnewstoday.com', +'amsrus.ru', +'om-saratov.ru', +'nstarikov.livejournal.com', +'rusrep.ru', +'oblast45.ru', +'mtv.com', +'canadafreepress.com', +'voanews.com', +'oleglurie-new.livejournal.com', +'russkiy-malchik.livejournal.com', +'finance.tut.by', +'m-kalashnikov.livejournal.com', +'vyatka.ru', +'business-class.su', +'nationalpost.com', +'63ru.livejournal.com', +'mchs.gov.by', +'naviny.by', +'ew.com', +'bloknot-volgodonsk.ru', +'stogova.livejournal.com', +'tv.mk.ru', +'realty.altapress.ru', +'i-korotchenko.livejournal.com', +'scalemodels.ru', +'etoonda.livejournal.com', +'evening-kazan.ru', +'bryansknovosti.ru', +'kushva-online.ru', +'belaruspartisan.org', +'inquisitr.com', +'infokam.su', +'healthinfo.ua', +'comicbook.com', +'mashable.com', +'washingtonexaminer.com', +'a-s-k-e-t.livejournal.com', +'sayanogorsk.info', +'dgl.ru', +'pervo.ru', +'omaha.com', +'mid-day.com', +'myfin.by', +'kotelnich.info', +'alex-anpilogov.livejournal.com', +'wrestrus.ru', +'7x7-journal.ru', +'natabelu.livejournal.com', +'biser.info', +'rus.postimees.ee', +'dela.ru', +'digitall-angell.livejournal.com', +'chron.com', +'chelny-biz.ru', +'a-nalgin.livejournal.com', +'kukmor.livejournal.com', +'crimerussia.ru', +'mordovmedia.ru', +'parade.com', +'3dtoday.ru', +'vkusnyblog.ru', +'newstula.ru', +'soccernews.ru', +'eilin-o-connor.livejournal.com', +'mentbuster.livejournal.com', +'kaotic.com', +'rossoshru.ru', +'she.ngs.ru', +'news.sarbc.ru', +'baikal-daily.ru', +'thequietus.com', +'flb.ru', +'stockinfocus.ru', +'xobi.com.ua', +'eonline.com', +'ru-railway.livejournal.com', +'andrey-cruz.livejournal.com', +'19rus.info', +'pauluskp.livejournal.com', +'calipsodellmar.livejournal.com', +'newtimes.kz', +'abcnews.go.com', +'plush-koala.livejournal.com', +'newscientist.com', +'ss69100.livejournal.com', +'contactmusic.com', +'smolnarod.ru', +'bnkirov.ru', +'norg-norg.livejournal.com', +'slashfilm.com', +'dallasnews.com', +'oren.ru', +'point.md', +'orelgrad.ru', +'pressball.by', +'forum-msk.org', +'gradus.pro', +'gazeta.uz', +'matveychev-oleg.livejournal.com', +'apsnypress.info', +'46tv.ru', +'ku66.ru', +'video.komarovskiy.net', +'mysanantonio.com', +'kavpolit.com', +'dima-piterski.livejournal.com', +'made-inussr.livejournal.com', +'thehill.com', +'sciencemag.org', +'pcmag.com', +'europaplustv.com', +'rjadovoj-rus.livejournal.com', +'govp.info', +'heritage.org', +'perm.kp.ru', +'shurigin.livejournal.com', +'tuday.ru', +'knews.kg', +'shushpanzer-ru.livejournal.com', +'webtous.ru', +'boston.com', +'odnako.org', +'ironworld.ru', +'dailybest.me', +'da-dzi.livejournal.com', +'versia.ru', +'autosport.com.ru', +'pravda-news.ru', +'pocketnow.com', +'asaratov.livejournal.com', +'dddkursk.ru', +'letohin.livejournal.com', +'theaustralian.com.au', +'steptohealth.ru', +'alexcheban.livejournal.com', +'lleo.me', +'prodengi.kz', +'readovka.ru', +'efir24.tv', +'ru-bykov.livejournal.com', +'today.kz', +'kasparov.ru.', +'chelsea-fc.ru', +'academ.info', +'feministki.livejournal.com', +'iarex.ru', +'marimedia.ru', +'androidcommunity.com', +'uzoranet.livejournal.com', +'ru-vederko.livejournal.com', +'tanjand.livejournal.com', +'komionline.ru', +'gazette.com', +'auto.tut.by', +'ted.com', +'mic.com', +'spb.mk.ru', +'berdsk-online.ru', +'ossetia.ru', +'ki-bella.livejournal.com', +'keytas.ru', +'severinform.ru', +'tvolk.ru', +'balashover.ru', +'tor.com', +'news.21.by', +'karelinform.ru', +'marv.livejournal.com', +'seekingalpha.com', +'ntsk.ru', +'ksy-putan.livejournal.com', +'universetoday.com', +'thenextweb.com', +'foma.ru', +'kchetverg.ru', +'ftbl.ru', +'altyn-orda.kz', +'ua.tribuna.com', +'56orb.ru', +'vesti.karelia.ru', +'haaretz.com', +'twentysix.ru', +'primorye24.ru', +'jsonline.com', +'tobolsk.info', +'tennessean.com', +'moment-istini.com', +'vrn.kp.ru', +'navalny.livejournal.com', +'roomble.com', +'observer.com', +'kyky.org', +'news.chita.ru', +'gov.cap.ru', +'ammo1.livejournal.com', +'wnyc.org', +'whrussia.ru', +'belan-olga.livejournal.com', +'arguendi.livejournal.com', +'freesmi.by', +'greenbot.com', +'(nemihail.livejournal.com', +'obltv.ru', +'sterlegrad.ru', +'mlive.com', +'gpk.gov.by', +'fanatik.kz', +'marina-yudenich.livejournal.com', +'afisha.ngs.ru', +'kupchinonews.ru', +'shakin.ru', +'silver.ru', +'mirnov.ru', +'techcrunch.com', +'streetinsider.com', +'otyrar.kz', +'siapress.ru', +'krsk.kp.ru', +'becky-sharpe.livejournal.com', +'mkala.ru', +'prosto-vova.livejournal.com', +'tagilcity.ru', +'bloknot-krasnodar.ru', +'greg-butcher.livejournal.com', +'popados.livejournal.com', +'mossudmed.livejournal.com', +'s13.ru', +'globalconflict.ru', +'newyorker.com', +'vladnews.ru', +'kadykchanskiy.livejournal.com', +'vladimir-krm.livejournal.com', +'globalpost.com', +'smolensk-i.ru', +'newsmax.com', +'providers.by', +'theverge.com', +'samsebeskazal.livejournal.com', +'vb.by', +'people.onliner.by', +'peopleandcountries.com', +'roizman.livejournal.com', +'omvesti.ru', +'sterlitamak.ru', +'patch.com', +'khabtime.info', +'winnipegfreepress.com', +'davydov-index.livejournal.com' +); diff --git a/yt/yql/tests/sql/suites/in/in_ansi_join.cfg b/yt/yql/tests/sql/suites/in/in_ansi_join.cfg new file mode 100644 index 0000000000..ebb9b67252 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_ansi_join.cfg @@ -0,0 +1,2 @@ +in Input input_optkey1.txt +in Dict optdict.txt diff --git a/yt/yql/tests/sql/suites/in/in_ansi_join.sql b/yt/yql/tests/sql/suites/in/in_ansi_join.sql new file mode 100644 index 0000000000..48bfb9d637 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_ansi_join.sql @@ -0,0 +1,52 @@ +/* syntax version 1 */ +/* postgres can not */ + +PRAGMA AnsiInForEmptyOrNullableItemsCollections; + +USE plato; + +-- Input: optkeys are 1-10,null +-- Dict: keys are 1,5,7,9,11,null + +-- Either side can be: non-optional (P), optional without nulls (O), optional with nulls (N) - we test each of possible combination + +$lp = (SELECT Unwrap(optkey) AS optkey FROM Input WHERE optkey IS NOT NULL); +$lo = (SELECT optkey FROM Input WHERE optkey IS NOT NULL); +$ln = (SELECT optkey FROM Input); + +$rp = (SELECT Unwrap(key) AS key FROM Dict WHERE key IS NOT NULL); +$ro = (SELECT key FROM Dict WHERE key IS NOT NULL); +$rn = (SELECT key FROM Dict); + + +-- Right is P +SELECT optkey FROM $lp WHERE optkey NOT IN $rp ORDER BY optkey; -- [2,3,4,6,8,10] +SELECT optkey FROM $lo WHERE optkey NOT IN $rp ORDER BY optkey; -- [2,3,4,6,8,10] +SELECT optkey FROM $ln WHERE optkey NOT IN $rp ORDER BY optkey; -- [2,3,4,6,8,10] + +-- Right is O +SELECT optkey FROM $lp WHERE optkey NOT IN $ro ORDER BY optkey; -- [2,3,4,6,8,10] +SELECT optkey FROM $lo WHERE optkey NOT IN $ro ORDER BY optkey; -- [2,3,4,6,8,10] +SELECT optkey FROM $ln WHERE optkey NOT IN $ro ORDER BY optkey; -- [2,3,4,6,8,10] + +-- Right is N +SELECT optkey FROM $lp WHERE optkey NOT IN $rn ORDER BY optkey; -- [] +SELECT optkey FROM $lo WHERE optkey NOT IN $rn ORDER BY optkey; -- [] +SELECT optkey FROM $ln WHERE optkey NOT IN $rn ORDER BY optkey; -- [] + + +-- 2, 4, 6, null +$extraDict = ( + SELECT 2 AS key UNION ALL + SELECT 4 AS key UNION ALL + SELECT 6 AS key UNION ALL + SELECT NULL AS key +); + +SELECT optkey FROM $lo WHERE optkey != 10 AND optkey NOT IN $ro AND optkey IN $extraDict AND optkey != 4 ORDER BY optkey; -- [2,6] +SELECT optkey FROM $ln WHERE optkey != 10 AND optkey NOT IN $rn AND optkey IN $extraDict AND optkey != 4 ORDER BY optkey; -- [] + + +-- Empty dict +SELECT optkey FROM $ln WHERE optkey NOT IN (SELECT * FROM $rn LIMIT 0) ORDER BY optkey; -- [1-10,null] + diff --git a/yt/yql/tests/sql/suites/in/in_compact_distinct-empty.cfg b/yt/yql/tests/sql/suites/in/in_compact_distinct-empty.cfg new file mode 100644 index 0000000000..6fe36b7db3 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_compact_distinct-empty.cfg @@ -0,0 +1,2 @@ +in Input input.txt +in Input1 empty.txt diff --git a/yt/yql/tests/sql/suites/in/in_compact_distinct.cfg b/yt/yql/tests/sql/suites/in/in_compact_distinct.cfg new file mode 100644 index 0000000000..50ebbf3511 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_compact_distinct.cfg @@ -0,0 +1,2 @@ +in Input input.txt +in Input1 input.txt diff --git a/yt/yql/tests/sql/suites/in/in_compact_distinct.sql b/yt/yql/tests/sql/suites/in/in_compact_distinct.sql new file mode 100644 index 0000000000..f941a8facd --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_compact_distinct.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +use plato; + +select * from Input +where key in compact (select distinct key from Input1) +order by key; diff --git a/yt/yql/tests/sql/suites/in/in_enum_single0.sql b/yt/yql/tests/sql/suites/in/in_enum_single0.sql new file mode 100644 index 0000000000..f29aa9092e --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_enum_single0.sql @@ -0,0 +1 @@ +select * from plato.Input where key in ("023") diff --git a/yt/yql/tests/sql/suites/in/in_enum_single1.sql b/yt/yql/tests/sql/suites/in/in_enum_single1.sql new file mode 100644 index 0000000000..33d6f33878 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_enum_single1.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input where cast(key as uint32) not in (150,) diff --git a/yt/yql/tests/sql/suites/in/in_exists_immediate_nested_subq.cfg b/yt/yql/tests/sql/suites/in/in_exists_immediate_nested_subq.cfg new file mode 100644 index 0000000000..a6d8867ac9 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_exists_immediate_nested_subq.cfg @@ -0,0 +1,6 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/in/in_exists_immediate_nested_subq.sql b/yt/yql/tests/sql/suites/in/in_exists_immediate_nested_subq.sql new file mode 100644 index 0000000000..44928dec83 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_exists_immediate_nested_subq.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +/* ignore runonopt plan diff */ + +use plato; + +$q = (select key from Input order by key limit 100); +$q1 = (select * from $q order by key limit 100); + +select * from Input where key in (select * from $q order by key limit 100) order by key; +select * from Input where key in $q1 order by key; + +SELECT EXISTS (select key from $q) from Input; + +SELECT $q; diff --git a/yt/yql/tests/sql/suites/in/in_immediate_subquery.sql b/yt/yql/tests/sql/suites/in/in_immediate_subquery.sql new file mode 100644 index 0000000000..e3a7202fc5 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_immediate_subquery.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +use plato; + +select * from Input4 where subkey not in (select key || "0" from Input4) order by key,subkey; + +select * from Input4 where subkey in compact(select key || "0" from Input4) order by key,subkey; diff --git a/yt/yql/tests/sql/suites/in/in_noansi_join.cfg b/yt/yql/tests/sql/suites/in/in_noansi_join.cfg new file mode 100644 index 0000000000..ebb9b67252 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_noansi_join.cfg @@ -0,0 +1,2 @@ +in Input input_optkey1.txt +in Dict optdict.txt diff --git a/yt/yql/tests/sql/suites/in/in_noansi_join.sql b/yt/yql/tests/sql/suites/in/in_noansi_join.sql new file mode 100644 index 0000000000..ee043447f3 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_noansi_join.sql @@ -0,0 +1,52 @@ +/* syntax version 1 */ +/* postgres can not */ + +PRAGMA DisableAnsiInForEmptyOrNullableItemsCollections; + +USE plato; + +-- Input: optkeys are 1-10,null +-- Dict: keys are 1,5,7,9,11,null + +-- Either side can be: non-optional (P), optional without nulls (O), optional with nulls (N) - we test each of possible combination + +$lp = (SELECT Unwrap(optkey) AS optkey FROM Input WHERE optkey IS NOT NULL); +$lo = (SELECT optkey FROM Input WHERE optkey IS NOT NULL); +$ln = (SELECT optkey FROM Input); + +$rp = (SELECT Unwrap(key) AS key FROM Dict WHERE key IS NOT NULL); +$ro = (SELECT key FROM Dict WHERE key IS NOT NULL); +$rn = (SELECT key FROM Dict); + + +-- Right is P +SELECT optkey FROM $lp WHERE optkey NOT IN $rp ORDER BY optkey; -- [2,3,4,6,8,10] +SELECT optkey FROM $lo WHERE optkey NOT IN $rp ORDER BY optkey; -- [2,3,4,6,8,10] +SELECT optkey FROM $ln WHERE optkey NOT IN $rp ORDER BY optkey; -- [null,2,3,4,6,8,10] + +-- Right is O +SELECT optkey FROM $lp WHERE optkey NOT IN $ro ORDER BY optkey; -- [2,3,4,6,8,10] +SELECT optkey FROM $lo WHERE optkey NOT IN $ro ORDER BY optkey; -- [2,3,4,6,8,10] +SELECT optkey FROM $ln WHERE optkey NOT IN $ro ORDER BY optkey; -- [null,2,3,4,6,8,10] + +-- Right is N +SELECT optkey FROM $lp WHERE optkey NOT IN $rn ORDER BY optkey; -- [2,3,4,6,8,10] +SELECT optkey FROM $lo WHERE optkey NOT IN $rn ORDER BY optkey; -- [2,3,4,6,8,10] +SELECT optkey FROM $ln WHERE optkey NOT IN $rn ORDER BY optkey; -- [null,2,3,4,6,8,10] + + +-- 2, 4, 6, null +$extraDict = ( + SELECT 2 AS key UNION ALL + SELECT 4 AS key UNION ALL + SELECT 6 AS key UNION ALL + SELECT NULL AS key +); + +SELECT optkey FROM $lo WHERE optkey != 10 AND optkey NOT IN $ro AND optkey IN $extraDict AND optkey != 4 ORDER BY optkey; -- [2,6] +SELECT optkey FROM $ln WHERE optkey != 10 AND optkey NOT IN $rn AND optkey IN $extraDict AND optkey != 4 ORDER BY optkey; -- [2,6] + + +-- Empty dict +SELECT optkey FROM $ln WHERE optkey NOT IN (SELECT * FROM $rn LIMIT 0) ORDER BY optkey; -- [1-10,null] + diff --git a/yt/yql/tests/sql/suites/in/in_scalar_vector_subquery.sql b/yt/yql/tests/sql/suites/in/in_scalar_vector_subquery.sql new file mode 100644 index 0000000000..b92955efde --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_scalar_vector_subquery.sql @@ -0,0 +1,29 @@ +/* postgres can not */ + +use plato; + +$bar = (select "1" union all select "2"); +$barr = (select "1" as subkey union all select "2" as subkey); + +select "1" in $bar, "2" in $bar; +select "3" in $bar; + +select "1" in AsList($barr), "2" in AsList($barr); +select "3" in AsList($barr); + +select * from Input where subkey in $bar order by subkey; +select * from Input where subkey in AsList($barr) order by subkey; + +-- same content as $bar +$baz = (select subkey from Input where subkey == "1" or subkey == "2"); +$bazz = (select subkey from Input where subkey < "3" order by subkey asc limit 1); + +select "1" in $baz, "2" in $baz; +select "3" in $baz; + +select "1" in AsList($bazz), "2" in AsList($bazz); +select "3" in AsList($bazz); + +select * from Input where subkey in $baz order by subkey; +select * from Input where subkey in AsList($bazz) order by subkey; + diff --git a/yt/yql/tests/sql/suites/in/in_sorted.cfg b/yt/yql/tests/sql/suites/in/in_sorted.cfg new file mode 100644 index 0000000000..1ab381f28d --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_sorted.cfg @@ -0,0 +1 @@ +in InputSorted sorted.txt diff --git a/yt/yql/tests/sql/suites/in/in_sorted.sql b/yt/yql/tests/sql/suites/in/in_sorted.sql new file mode 100644 index 0000000000..20907b1bee --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_sorted.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$in = select key from InputSorted where key < "100"; + +select * from InputSorted where key in $in; diff --git a/yt/yql/tests/sql/suites/in/in_sorted_by_tuple.cfg b/yt/yql/tests/sql/suites/in/in_sorted_by_tuple.cfg new file mode 100644 index 0000000000..8d8f865ecc --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_sorted_by_tuple.cfg @@ -0,0 +1,2 @@ +in InputSorted sorted.txt +in Input input.txt diff --git a/yt/yql/tests/sql/suites/in/in_sorted_by_tuple.sql b/yt/yql/tests/sql/suites/in/in_sorted_by_tuple.sql new file mode 100644 index 0000000000..ff3e72a710 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_sorted_by_tuple.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +select value, AGG_LIST_DISTINCT(tpl) as tuples +from ( + select AsTuple(key, subkey, value) as tpl, value from InputSorted +) +where value in (select DISTINCT value from Input) +group by value; diff --git a/yt/yql/tests/sql/suites/in/in_tablesource_on_raw_list.cfg b/yt/yql/tests/sql/suites/in/in_tablesource_on_raw_list.cfg new file mode 100644 index 0000000000..a6d8867ac9 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_tablesource_on_raw_list.cfg @@ -0,0 +1,6 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/in/in_tablesource_on_raw_list.sql b/yt/yql/tests/sql/suites/in/in_tablesource_on_raw_list.sql new file mode 100644 index 0000000000..07522e60f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_tablesource_on_raw_list.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +use plato; +PRAGMA AnsiInForEmptyOrNullableItemsCollections; + +$src = (select cast(key as Int32) from Input); + +select ListFilter(ListFromRange(1, 100), ($i) -> { RETURN $i IN $src; }); diff --git a/yt/yql/tests/sql/suites/in/in_tablesource_to_equijoin.cfg b/yt/yql/tests/sql/suites/in/in_tablesource_to_equijoin.cfg new file mode 100644 index 0000000000..35c6d38395 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_tablesource_to_equijoin.cfg @@ -0,0 +1 @@ +in Input input_optkey.txt diff --git a/yt/yql/tests/sql/suites/in/in_tablesource_to_equijoin.sql b/yt/yql/tests/sql/suites/in/in_tablesource_to_equijoin.sql new file mode 100644 index 0000000000..60ebfb97d9 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_tablesource_to_equijoin.sql @@ -0,0 +1,27 @@ +/* postgres can not */ + +USE plato; + +$r4_20 = (SELECT optkey FROM Input WHERE optkey BETWEEN 4 AND 20); +$r6_20 = (SELECT key FROM Input WHERE optkey BETWEEN 6 AND 20); +$r8_20 = (SELECT key FROM Input WHERE optkey BETWEEN 8 AND 20); +$r10_20 = (SELECT optkey FROM Input WHERE optkey BETWEEN 10 AND 20); + +$r1_16 = (SELECT optkey FROM Input WHERE optkey BETWEEN 1 AND 16); +$r1_12 = (SELECT key FROM Input WHERE optkey BETWEEN 1 AND 12); + +SELECT key FROM Input WHERE + (key + 1) IN $r4_20 AND -- key = [3, 19] -- 2 joinable + optkey IN $r6_20 AND -- key = [6, 19] + + key IN /*+ COMPACT() */ $r8_20 AND -- key = [8, 19] -- 1 nonjoinable (due to COMPACT) + + (optkey + 3) IN $r10_20 AND -- key = [8, 17] -- 3 joinable + (key + 4) NOT IN $r1_12 AND -- key = [9, 17] + key IN $r10_20 AND -- key = [10, 17] + + (optkey IN $r1_16 OR key IN $r1_16) AND -- key = [10, 16] -- 1 nonjoinable (not SqlIn) + + (key - 1) IN $r1_12 AND -- key = [10, 13] -- 2 joinable + (key - 3) NOT IN $r8_20 -- key = [10] + diff --git a/yt/yql/tests/sql/suites/in/in_tuple_table.sql b/yt/yql/tests/sql/suites/in/in_tuple_table.sql new file mode 100644 index 0000000000..a36004f819 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_tuple_table.sql @@ -0,0 +1,4 @@ +USE Plato; +SELECT 'c' IN t +FROM InputWithTuples; + diff --git a/yt/yql/tests/sql/suites/in/in_types_cast.sql b/yt/yql/tests/sql/suites/in/in_types_cast.sql new file mode 100644 index 0000000000..8b3e5c71de --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_types_cast.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input where cast(key as uint32) not in (150,150ul) diff --git a/yt/yql/tests/sql/suites/in/in_types_cast_all.sql b/yt/yql/tests/sql/suites/in/in_types_cast_all.sql new file mode 100644 index 0000000000..709882ae86 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_types_cast_all.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +select * from plato.Input where cast(key as Uint8) in +( + 1u, + 3l, + 23ul, + 255, -- out of Uint8 + 0, +) diff --git a/yt/yql/tests/sql/suites/in/in_with_list_dict.sql b/yt/yql/tests/sql/suites/in/in_with_list_dict.sql new file mode 100644 index 0000000000..44993dd1d8 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_with_list_dict.sql @@ -0,0 +1,7 @@ +/* postgres can not */ + +$l = AsList(1, 2, 3, 800); +$d = AsDict(AsTuple(1, 0), AsTuple(2, 0), AsTuple(3, 0), AsTuple(800, 0)); + +SELECT key, CAST(key AS int32) IN $l, CAST(key AS int32) IN $d FROM plato.Input; + diff --git a/yt/yql/tests/sql/suites/in/in_with_opt_tuple.sql b/yt/yql/tests/sql/suites/in/in_with_opt_tuple.sql new file mode 100644 index 0000000000..98735c8ead --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_with_opt_tuple.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +SELECT * +FROM plato.Input +WHERE AsTuple(cast(key as int32), cast(subkey as int32)) in ( + AsTuple(42, 5), + AsTuple(75, 1), + AsTuple(20, 3), +); diff --git a/yt/yql/tests/sql/suites/in/in_with_table_of_tuples.sql b/yt/yql/tests/sql/suites/in/in_with_table_of_tuples.sql new file mode 100644 index 0000000000..1e07ae5548 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_with_table_of_tuples.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +use plato; + +$t1 = AsList( + AsStruct(75 as key, 1 as subkey), + AsStruct(800 as key, 2 as subkey)); + +insert into @t1 +select * from AS_TABLE($t1); + +commit; + +$tuples = (select AsTuple(key, subkey) from @t1); + +select * from Input +where AsTuple(cast(key as uint64), cast(subkey as uint64)) in $tuples diff --git a/yt/yql/tests/sql/suites/in/in_with_tuple.sql b/yt/yql/tests/sql/suites/in/in_with_tuple.sql new file mode 100644 index 0000000000..bb280827f9 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/in_with_tuple.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +SELECT * +FROM plato.Input +WHERE AsTuple(cast(key as int32) ?? 0, cast(subkey as int32) ?? 0) in ( + AsTuple(800, 1), + AsTuple(800, 2), + AsTuple(800, 3), + AsTuple(800, 4), +); diff --git a/yt/yql/tests/sql/suites/in/input_optkey.txt.attr b/yt/yql/tests/sql/suites/in/input_optkey.txt.attr new file mode 100644 index 0000000000..1ca6ee6155 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/input_optkey.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int32"]]; + ["optkey";["OptionalType";["DataType";"Int32"]]]; + ["value";["DataType";"String"]]] + ]; +}} diff --git a/yt/yql/tests/sql/suites/in/input_optkey1.txt.attr b/yt/yql/tests/sql/suites/in/input_optkey1.txt.attr new file mode 100644 index 0000000000..1ca6ee6155 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/input_optkey1.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int32"]]; + ["optkey";["OptionalType";["DataType";"Int32"]]]; + ["value";["DataType";"String"]]] + ]; +}} diff --git a/yt/yql/tests/sql/suites/in/input_with_tuples.txt.attr b/yt/yql/tests/sql/suites/in/input_with_tuples.txt.attr new file mode 100644 index 0000000000..429fb94586 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/input_with_tuples.txt.attr @@ -0,0 +1,9 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["t"; ["TupleType"; [ + ["DataType"; "String"]; + ["DataType"; "String"]; + ["DataType"; "String"] + ]]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/in/optdict.txt.attr b/yt/yql/tests/sql/suites/in/optdict.txt.attr new file mode 100644 index 0000000000..c57013cea5 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/optdict.txt.attr @@ -0,0 +1,5 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["OptionalType";["DataType";"Int32"]]]] + ]; +}} diff --git a/yt/yql/tests/sql/suites/in/sorted.txt.attr b/yt/yql/tests/sql/suites/in/sorted.txt.attr new file mode 100644 index 0000000000..ed13e20223 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/sorted.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/in/yql-10038.sql b/yt/yql/tests/sql/suites/in/yql-10038.sql new file mode 100644 index 0000000000..f5f75a1990 --- /dev/null +++ b/yt/yql/tests/sql/suites/in/yql-10038.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +use plato; + +insert into @input +select "foo" as reqid, "touch" as ui, AsList(1,2,236273) as test_ids; +commit; + +$dict = (select "foo" as reqid); + +select + * +from + @input +where + ui='touch' and + reqid in (select reqid from $dict) + and 236273 in test_ids + diff --git a/yt/yql/tests/sql/suites/in/yql-14677.sql b/yt/yql/tests/sql/suites/in/yql-14677.sql new file mode 100644 index 0000000000..abbe56ce7b --- /dev/null +++ b/yt/yql/tests/sql/suites/in/yql-14677.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +USE plato; +pragma yt.MapJoinLimit="1m"; + +$l1 = select key from `Input`; + +select * from Input +where true + and value != "" + and key in $l1 diff --git a/yt/yql/tests/sql/suites/insert/after_group_by.sql b/yt/yql/tests/sql/suites/insert/after_group_by.sql new file mode 100644 index 0000000000..c2abecae36 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/after_group_by.sql @@ -0,0 +1,2 @@ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output (key, subkey, value) select key, subkey, max(value) from plato.Input group by key, subkey order by key; diff --git a/yt/yql/tests/sql/suites/insert/anonymous_tables.sql b/yt/yql/tests/sql/suites/insert/anonymous_tables.sql new file mode 100644 index 0000000000..93e6b3b041 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/anonymous_tables.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +use plato; +pragma yt.MapJoinLimit="1M"; + +insert into @a +select * from Input; + +commit; + +select count(*) from @a; +select * from @a limit 2; +select count(*) from @a as a cross join @a as b; + +commit; diff --git a/yt/yql/tests/sql/suites/insert/append-with_view.cfg b/yt/yql/tests/sql/suites/insert/append-with_view.cfg new file mode 100644 index 0000000000..4feca3f4ed --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append-with_view.cfg @@ -0,0 +1,4 @@ +in Input input.txt +out Output input_with_view.txt +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/insert/append.cfg b/yt/yql/tests/sql/suites/insert/append.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/append.sql b/yt/yql/tests/sql/suites/insert/append.sql new file mode 100644 index 0000000000..e4ce8e6422 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +/* multirun can not */ +insert into plato.Output +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/append_after_replace.sql b/yt/yql/tests/sql/suites/insert/append_after_replace.sql new file mode 100644 index 0000000000..96894b317c --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_after_replace.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* multirun can not */ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output with truncate (key, subkey, value) select key, subkey, value from plato.Input; +commit; +insert into plato.Output (key, subkey, value) select key, subkey, value from plato.Output; diff --git a/yt/yql/tests/sql/suites/insert/append_missing_null.sql b/yt/yql/tests/sql/suites/insert/append_missing_null.sql new file mode 100644 index 0000000000..e92b426132 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_missing_null.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +use plato; + +insert into @foo +select null as x, 1 as y; + +commit; + +insert into @foo +select 2 as y; + +commit; + +select * from @foo; diff --git a/yt/yql/tests/sql/suites/insert/append_proto_fail.cfg b/yt/yql/tests/sql/suites/insert/append_proto_fail.cfg new file mode 100644 index 0000000000..6d87958c65 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_proto_fail.cfg @@ -0,0 +1,4 @@ +xfail +in Input input.txt +out Output input_proto.txt +udf protobuf_udf diff --git a/yt/yql/tests/sql/suites/insert/append_proto_fail.sql b/yt/yql/tests/sql/suites/insert/append_proto_fail.sql new file mode 100644 index 0000000000..437e165a80 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_proto_fail.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* multirun can not */ +/* custom error:Table "Output" has udf remappers, append is not allowed*/ +insert into plato.Output +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/append_sorted-to_sorted.cfg b/yt/yql/tests/sql/suites/insert/append_sorted-to_sorted.cfg new file mode 100644 index 0000000000..1f640b66af --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_sorted-to_sorted.cfg @@ -0,0 +1,9 @@ +in Input input.txt +out Output1 sorted.txt +out Output2 sorted.txt +out Output3 sorted.txt +out Output4 sorted.txt +out Output5 sorted.txt +out Output6 sorted.txt +out Output7 sorted.txt +out Output8 sorted.txt diff --git a/yt/yql/tests/sql/suites/insert/append_sorted-to_sorted_calc.cfg b/yt/yql/tests/sql/suites/insert/append_sorted-to_sorted_calc.cfg new file mode 100644 index 0000000000..a47ebbb46d --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_sorted-to_sorted_calc.cfg @@ -0,0 +1,9 @@ +in Input input.txt +out Output1 sorted_calc.txt +out Output2 sorted_calc.txt +out Output3 sorted_calc.txt +out Output4 sorted_calc.txt +out Output5 sorted_calc.txt +out Output6 sorted_calc.txt +out Output7 sorted_calc.txt +out Output8 sorted_calc.txt diff --git a/yt/yql/tests/sql/suites/insert/append_sorted-to_sorted_desc.cfg b/yt/yql/tests/sql/suites/insert/append_sorted-to_sorted_desc.cfg new file mode 100644 index 0000000000..e337a07d80 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_sorted-to_sorted_desc.cfg @@ -0,0 +1,9 @@ +in Input input.txt +out Output1 sorted_desc.txt +out Output2 sorted_desc.txt +out Output3 sorted_desc.txt +out Output4 sorted_desc.txt +out Output5 sorted_desc.txt +out Output6 sorted_desc.txt +out Output7 sorted_desc.txt +out Output8 sorted_desc.txt diff --git a/yt/yql/tests/sql/suites/insert/append_sorted.cfg b/yt/yql/tests/sql/suites/insert/append_sorted.cfg new file mode 100644 index 0000000000..8014b80c06 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_sorted.cfg @@ -0,0 +1,9 @@ +in Input input.txt +out Output1 input.txt +out Output2 input.txt +out Output3 input.txt +out Output4 input.txt +out Output5 input.txt +out Output6 input.txt +out Output7 input.txt +out Output8 input.txt diff --git a/yt/yql/tests/sql/suites/insert/append_sorted.sql b/yt/yql/tests/sql/suites/insert/append_sorted.sql new file mode 100644 index 0000000000..cefc494453 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_sorted.sql @@ -0,0 +1,25 @@ +/* multirun can not */ + +insert into plato.Output1 +select * from plato.Input order by key; + +insert into plato.Output2 +select * from plato.Input order by key, subkey; + +insert into plato.Output3 +select * from plato.Input order by key, subkey, value; + +insert into plato.Output4 +select * from plato.Input; + +insert into plato.Output5 +select * from plato.Input order by subkey; + +insert into plato.Output6 +select * from plato.Input order by key desc; + +insert into plato.Output7 +select * from plato.Input order by key desc, subkey; + +insert into plato.Output8 +select * from plato.Input order by key || subkey; diff --git a/yt/yql/tests/sql/suites/insert/append_view_fail.cfg b/yt/yql/tests/sql/suites/insert/append_view_fail.cfg new file mode 100644 index 0000000000..db398a8d2f --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_view_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +in Input1 input.txt +in Input2 input2.txt +out Output input_view.txt diff --git a/yt/yql/tests/sql/suites/insert/append_view_fail.sql b/yt/yql/tests/sql/suites/insert/append_view_fail.sql new file mode 100644 index 0000000000..3a9f61a60c --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_view_fail.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* multirun can not */ +/* custom error:Modification of "Output" view is not supported*/ +insert into plato.Output +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/append_with_read_udf_fail.cfg b/yt/yql/tests/sql/suites/insert/append_with_read_udf_fail.cfg new file mode 100644 index 0000000000..1d043c6420 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_with_read_udf_fail.cfg @@ -0,0 +1,4 @@ +xfail +in Input input.txt +out Output input_with_read_udf.txt +udf dsv_udf diff --git a/yt/yql/tests/sql/suites/insert/append_with_read_udf_fail.sql b/yt/yql/tests/sql/suites/insert/append_with_read_udf_fail.sql new file mode 100644 index 0000000000..437e165a80 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/append_with_read_udf_fail.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* multirun can not */ +/* custom error:Table "Output" has udf remappers, append is not allowed*/ +insert into plato.Output +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/default.cfg b/yt/yql/tests/sql/suites/insert/default.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/default.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/double_append_to_anonymous.cfg b/yt/yql/tests/sql/suites/insert/double_append_to_anonymous.cfg new file mode 100644 index 0000000000..00dec6c3f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/double_append_to_anonymous.cfg @@ -0,0 +1 @@ +res result.txt diff --git a/yt/yql/tests/sql/suites/insert/double_append_to_anonymous.sql b/yt/yql/tests/sql/suites/insert/double_append_to_anonymous.sql new file mode 100644 index 0000000000..af6aba3132 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/double_append_to_anonymous.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +use plato; + +INSERT INTO @tmp +SELECT 1 as id, "qwer" as val; +COMMIT; + +INSERT INTO @tmp +SELECT 2 as id, "asdf" as val; + +COMMIT; + +SELECT * +FROM @tmp;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert/drop_sortness-calc.cfg b/yt/yql/tests/sql/suites/insert/drop_sortness-calc.cfg new file mode 100644 index 0000000000..da3506e2e7 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/drop_sortness-calc.cfg @@ -0,0 +1,2 @@ +in Input sorted_calc.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/drop_sortness-desc.cfg b/yt/yql/tests/sql/suites/insert/drop_sortness-desc.cfg new file mode 100644 index 0000000000..803556470a --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/drop_sortness-desc.cfg @@ -0,0 +1,2 @@ +in Input sorted_desc.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/drop_sortness.cfg b/yt/yql/tests/sql/suites/insert/drop_sortness.cfg new file mode 100644 index 0000000000..66737248b8 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/drop_sortness.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/drop_sortness.sql b/yt/yql/tests/sql/suites/insert/drop_sortness.sql new file mode 100644 index 0000000000..ccd7972ca6 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/drop_sortness.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +insert into plato.Output with truncate +SELECT + value +FROM plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert/erasure.txt.attr b/yt/yql/tests/sql/suites/insert/erasure.txt.attr new file mode 100644 index 0000000000..0214647b1c --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/erasure.txt.attr @@ -0,0 +1,10 @@ +{ + "_yql_row_spec" = { + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]]; + ]] + }; + "erasure_codec" = "lrc_12_2_2" +} diff --git a/yt/yql/tests/sql/suites/insert/fail_read_view_after_modify.cfg b/yt/yql/tests/sql/suites/insert/fail_read_view_after_modify.cfg new file mode 100644 index 0000000000..a26fadcaa7 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/fail_read_view_after_modify.cfg @@ -0,0 +1,3 @@ +xfail +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/fail_read_view_after_modify.sql b/yt/yql/tests/sql/suites/insert/fail_read_view_after_modify.sql new file mode 100644 index 0000000000..a58b0d5d89 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/fail_read_view_after_modify.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* syntax version 1 */ +/* custom error:Table "Output" cannot have any view after replacing its content*/ +insert into plato.Output with truncate +select * from plato.Input; + +commit; + +select * from plato.Output view raw; diff --git a/yt/yql/tests/sql/suites/insert/from_erasure_to_none.cfg b/yt/yql/tests/sql/suites/insert/from_erasure_to_none.cfg new file mode 100644 index 0000000000..b761812b2d --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/from_erasure_to_none.cfg @@ -0,0 +1,2 @@ +in Input erasure.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/from_erasure_to_none.sql b/yt/yql/tests/sql/suites/insert/from_erasure_to_none.sql new file mode 100644 index 0000000000..240cac66fb --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/from_erasure_to_none.sql @@ -0,0 +1,8 @@ +USE plato; + +PRAGMA yt.PublishedErasureCodec = 'none'; + +INSERT INTO Output +SELECT * +FROM Input +LIMIT 100; diff --git a/yt/yql/tests/sql/suites/insert/from_two_sorted_by_calc.sql b/yt/yql/tests/sql/suites/insert/from_two_sorted_by_calc.sql new file mode 100644 index 0000000000..d2c42ab47e --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/from_two_sorted_by_calc.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +use plato; + +insert into @f1 select * from Input order by key || "1"; +insert into @f2 select * from Input order by key || "2"; + +commit; + +insert into Output +select * from +( + select * from @f1 + union all + select * from @f2 +); diff --git a/yt/yql/tests/sql/suites/insert/inferschema.txt.attr b/yt/yql/tests/sql/suites/insert/inferschema.txt.attr new file mode 100644 index 0000000000..ada1f836f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/inferschema.txt.attr @@ -0,0 +1,3 @@ +{ + "infer_schema"=%true +} diff --git a/yt/yql/tests/sql/suites/insert/input.txt.attr b/yt/yql/tests/sql/suites/insert/input.txt.attr new file mode 100644 index 0000000000..36b3c00c90 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/input.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["key";["DataType";"String";];];["subkey";["DataType";"String";];];["value";["DataType";"String";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/insert/input_proto.txt.attr b/yt/yql/tests/sql/suites/insert/input_proto.txt.attr new file mode 100644 index 0000000000..c924675835 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/input_proto.txt.attr @@ -0,0 +1,32 @@ +{ + "_yql_proto_field_value"="#TA+H4sIAAAAAAAAA42Puw6CQBBFszw0DEp0Y4E2GmyolriJHyAPS6rVflFMTBCUR8Hn+KcuD0ui3WRy59wzcIJ1co9yntfOM8/KLKpuTv1KnKp0rqTdWBQk5uM5SEFhKhvZNqhKmE8CPAHF5yU30QbZmqUDCvAIpONuhmA/jL30WCywXsMI+SPuGJAOn0XdGVZDFhfl6qf1VuBdPAX1zJOq46vYAOSbkhh1Kosf4I2GC/mfhb3YcOD78EoYHfACkNva6FQjLZow11rCmJ3SqoivjaPXB4Sj9wEBmoL3ogEAAA=="; + "_yql_proto_field_subkey"="#TA+H4sIAAAAAAAAA42Puw6CQBBFszw0DEp0Y4E2GmyolriJHyAPS6rVflFMTBCUR8Hn+KcuD0ui3WRy59wzcIJ1co9yntfOM8/KLKpuTv1KnKp0rqTdWBQk5uM5SEFhKhvZNqhKmE8CPAHF5yU30QbZmqUDCvAIpONuhmA/jL30WCywXsMI+SPuGJAOn0XdGVZDFhfl6qf1VuBdPAX1zJOq46vYAOSbkhh1Kosf4I2GC/mfhb3YcOD78EoYHfACkNva6FQjLZow11rCmJ3SqoivjaPXB4Sj9wEBmoL3ogEAAA=="; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/insert/input_view.txt.attr b/yt/yql/tests/sql/suites/insert/input_view.txt.attr new file mode 100644 index 0000000000..41ea51e276 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/input_view.txt.attr @@ -0,0 +1,4 @@ +{ + "_yql_type"="view"; + "type"="document"; +} diff --git a/yt/yql/tests/sql/suites/insert/input_with_read_udf.txt.attr b/yt/yql/tests/sql/suites/insert/input_with_read_udf.txt.attr new file mode 100644 index 0000000000..14544c6d7b --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/input_with_read_udf.txt.attr @@ -0,0 +1,32 @@ +{ + "_yql_read_udf"="Dsv.ReadRecord"; + "_yql_read_udf_run_config"="@@"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/insert/input_with_view.txt.attr b/yt/yql/tests/sql/suites/insert/input_with_view.txt.attr new file mode 100644 index 0000000000..501fdca6db --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/input_with_view.txt.attr @@ -0,0 +1,31 @@ +{ + "_yql_view_my"="$udfScript=\"def f(row):\n\treturn {'myvalue':b'm' + row.value}\n\";$udf=Python::f(Callable<(Struct<key:String,subkey:String,value:String>)->Struct<myvalue:String>>, $udfScript);PROCESS self USING $udf(TableRow());"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/insert/insert_from_other.cfg b/yt/yql/tests/sql/suites/insert/insert_from_other.cfg new file mode 100644 index 0000000000..7cc1222553 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/insert_from_other.cfg @@ -0,0 +1,2 @@ +in Input other.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/insert_from_other.sql b/yt/yql/tests/sql/suites/insert/insert_from_other.sql new file mode 100644 index 0000000000..9c295718ba --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/insert_from_other.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +insert into plato.Output with truncate +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/insert_null.sql b/yt/yql/tests/sql/suites/insert/insert_null.sql new file mode 100644 index 0000000000..3aafd6c5a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/insert_null.sql @@ -0,0 +1,4 @@ +use plato; + +insert into Output +select NULL as x; diff --git a/yt/yql/tests/sql/suites/insert/insert_relabeled.sql b/yt/yql/tests/sql/suites/insert/insert_relabeled.sql new file mode 100644 index 0000000000..cbe93546dd --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/insert_relabeled.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output (key, subkey, new_value, one_more_value) select key, subkey, value as new_value, "x" from plato.Input; diff --git a/yt/yql/tests/sql/suites/insert/keepmeta-with_view.cfg b/yt/yql/tests/sql/suites/insert/keepmeta-with_view.cfg new file mode 100644 index 0000000000..4feca3f4ed --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/keepmeta-with_view.cfg @@ -0,0 +1,4 @@ +in Input input.txt +out Output input_with_view.txt +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/insert/keepmeta.cfg b/yt/yql/tests/sql/suites/insert/keepmeta.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/keepmeta.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/keepmeta.sql b/yt/yql/tests/sql/suites/insert/keepmeta.sql new file mode 100644 index 0000000000..360c609748 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/keepmeta.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +/* multirun can not */ +insert into plato.Output with (truncate, keepmeta) +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/keepmeta_nonstrict_fail.cfg b/yt/yql/tests/sql/suites/insert/keepmeta_nonstrict_fail.cfg new file mode 100644 index 0000000000..1f376d1f93 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/keepmeta_nonstrict_fail.cfg @@ -0,0 +1,3 @@ +xfail +in Input input.txt +out Output other.txt diff --git a/yt/yql/tests/sql/suites/insert/keepmeta_nonstrict_fail.sql b/yt/yql/tests/sql/suites/insert/keepmeta_nonstrict_fail.sql new file mode 100644 index 0000000000..4ca22363d6 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/keepmeta_nonstrict_fail.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* multirun can not */ +/* custom error:Table "Output" has non-strict schema, truncate with keep meta is not allowed*/ +insert into plato.Output with (truncate, keepmeta) +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/keepmeta_proto_fail.cfg b/yt/yql/tests/sql/suites/insert/keepmeta_proto_fail.cfg new file mode 100644 index 0000000000..6d87958c65 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/keepmeta_proto_fail.cfg @@ -0,0 +1,4 @@ +xfail +in Input input.txt +out Output input_proto.txt +udf protobuf_udf diff --git a/yt/yql/tests/sql/suites/insert/keepmeta_proto_fail.sql b/yt/yql/tests/sql/suites/insert/keepmeta_proto_fail.sql new file mode 100644 index 0000000000..57967fed0f --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/keepmeta_proto_fail.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* multirun can not */ +/* custom error:Table "Output" has udf remappers, truncate with keep meta is not allowed*/ +insert into plato.Output with (truncate, keepmeta) +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/keepmeta_view_fail.cfg b/yt/yql/tests/sql/suites/insert/keepmeta_view_fail.cfg new file mode 100644 index 0000000000..db398a8d2f --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/keepmeta_view_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +in Input1 input.txt +in Input2 input2.txt +out Output input_view.txt diff --git a/yt/yql/tests/sql/suites/insert/keepmeta_view_fail.sql b/yt/yql/tests/sql/suites/insert/keepmeta_view_fail.sql new file mode 100644 index 0000000000..e4cea9e1cd --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/keepmeta_view_fail.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* multirun can not */ +/* custom error:Modification of "Output" view is not supported*/ +insert into plato.Output with (truncate, keepmeta) +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/keepmeta_with_read_udf_fail.cfg b/yt/yql/tests/sql/suites/insert/keepmeta_with_read_udf_fail.cfg new file mode 100644 index 0000000000..1d043c6420 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/keepmeta_with_read_udf_fail.cfg @@ -0,0 +1,4 @@ +xfail +in Input input.txt +out Output input_with_read_udf.txt +udf dsv_udf diff --git a/yt/yql/tests/sql/suites/insert/keepmeta_with_read_udf_fail.sql b/yt/yql/tests/sql/suites/insert/keepmeta_with_read_udf_fail.sql new file mode 100644 index 0000000000..57967fed0f --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/keepmeta_with_read_udf_fail.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* multirun can not */ +/* custom error:Table "Output" has udf remappers, truncate with keep meta is not allowed*/ +insert into plato.Output with (truncate, keepmeta) +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/literals_to_string.sql b/yt/yql/tests/sql/suites/insert/literals_to_string.sql new file mode 100644 index 0000000000..d3cb1ae817 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/literals_to_string.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output (key, subkey, value) values (YQL::ToString(1), YQL::ToString(2), "3"); diff --git a/yt/yql/tests/sql/suites/insert/merge_publish.cfg b/yt/yql/tests/sql/suites/insert/merge_publish.cfg new file mode 100644 index 0000000000..1abba632a5 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/merge_publish.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output1 output1.txt +out Output2 input.txt diff --git a/yt/yql/tests/sql/suites/insert/merge_publish.sql b/yt/yql/tests/sql/suites/insert/merge_publish.sql new file mode 100644 index 0000000000..741b5dc366 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/merge_publish.sql @@ -0,0 +1,20 @@ +/* postgres can not */ +/* kikimr can not */ +/* ignore plan diff */ +use plato; + +pragma yt.ScriptCpu="1.0"; + +insert into Output1 select "1" as key, subkey, value from Input; + +insert into Output2 select "2" as key, subkey, value from Input; + +insert into Output2 select "3" as key, subkey, value from Input; + +insert into Output1 select "4" as key, subkey, value from Input; + +pragma yt.ScriptCpu="2.0"; + +insert into Output1 select "5" as key, subkey, value from Input; + +insert into Output1 select "6" as key, subkey, value from Input; diff --git a/yt/yql/tests/sql/suites/insert/multiappend_sorted.sql b/yt/yql/tests/sql/suites/insert/multiappend_sorted.sql new file mode 100644 index 0000000000..bd33297afb --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/multiappend_sorted.sql @@ -0,0 +1,63 @@ +/* postgres can not */ +/* multirun can not */ + +insert into plato.Output with truncate +select * from plato.Input order by key; + +insert into plato.Output +select * from plato.Input; + +commit; +---------------------------------------- + +insert into plato.Output with truncate +select * from plato.Input; + +insert into plato.Output +select * from plato.Input order by key; + +commit; +---------------------------------------- + +insert into plato.Output with truncate +select * from plato.Input order by key, subkey; + +insert into plato.Output +select * from plato.Input order by key, subkey; + +commit; +---------------------------------------- + +insert into plato.Output with truncate +select * from plato.Input order by key; + +insert into plato.Output +select * from plato.Input order by key desc; + +commit; +---------------------------------------- + +insert into plato.Output with truncate +select * from plato.Input order by key; + +insert into plato.Output +select * from plato.Input order by key || subkey; + +commit; +---------------------------------------- + +insert into plato.Output with truncate +select * from plato.Input order by key desc; + +insert into plato.Output +select * from plato.Input order by key desc; + +commit; +---------------------------------------- + +insert into plato.Output with truncate +select * from plato.Input order by key || subkey; + +insert into plato.Output +select * from plato.Input order by key || subkey; + diff --git a/yt/yql/tests/sql/suites/insert/other.txt.attr b/yt/yql/tests/sql/suites/insert/other.txt.attr new file mode 100644 index 0000000000..e6092cd69d --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/other.txt.attr @@ -0,0 +1,13 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="string";"name"="key"} + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "sort_order" = "ascending"; + "type" = "string" + } + ] +} diff --git a/yt/yql/tests/sql/suites/insert/override-from_sorted.cfg b/yt/yql/tests/sql/suites/insert/override-from_sorted.cfg new file mode 100644 index 0000000000..66737248b8 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/override-from_sorted.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/override-from_sorted_calc.cfg b/yt/yql/tests/sql/suites/insert/override-from_sorted_calc.cfg new file mode 100644 index 0000000000..da3506e2e7 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/override-from_sorted_calc.cfg @@ -0,0 +1,2 @@ +in Input sorted_calc.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/override-from_sorted_desc.cfg b/yt/yql/tests/sql/suites/insert/override-from_sorted_desc.cfg new file mode 100644 index 0000000000..803556470a --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/override-from_sorted_desc.cfg @@ -0,0 +1,2 @@ +in Input sorted_desc.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/override-proto.cfg b/yt/yql/tests/sql/suites/insert/override-proto.cfg new file mode 100644 index 0000000000..499362d95f --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/override-proto.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output input_proto.txt +udf protobuf_udf diff --git a/yt/yql/tests/sql/suites/insert/override-with_read_udf.cfg b/yt/yql/tests/sql/suites/insert/override-with_read_udf.cfg new file mode 100644 index 0000000000..8edc95b521 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/override-with_read_udf.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output input_with_read_udf.txt +udf dsv_udf diff --git a/yt/yql/tests/sql/suites/insert/override-with_view.cfg b/yt/yql/tests/sql/suites/insert/override-with_view.cfg new file mode 100644 index 0000000000..4feca3f4ed --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/override-with_view.cfg @@ -0,0 +1,4 @@ +in Input input.txt +out Output input_with_view.txt +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/insert/override.cfg b/yt/yql/tests/sql/suites/insert/override.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/override.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/override.sql b/yt/yql/tests/sql/suites/insert/override.sql new file mode 100644 index 0000000000..9c295718ba --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/override.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +insert into plato.Output with truncate +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/override_view_fail.cfg b/yt/yql/tests/sql/suites/insert/override_view_fail.cfg new file mode 100644 index 0000000000..db398a8d2f --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/override_view_fail.cfg @@ -0,0 +1,5 @@ +xfail +in Input input.txt +in Input1 input.txt +in Input2 input2.txt +out Output input_view.txt diff --git a/yt/yql/tests/sql/suites/insert/override_view_fail.sql b/yt/yql/tests/sql/suites/insert/override_view_fail.sql new file mode 100644 index 0000000000..9a2e8ed269 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/override_view_fail.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +/* custom error:Modification of "Output" view is not supported*/ +insert into plato.Output with truncate +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/part_sortness-desc.cfg b/yt/yql/tests/sql/suites/insert/part_sortness-desc.cfg new file mode 100644 index 0000000000..803556470a --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/part_sortness-desc.cfg @@ -0,0 +1,2 @@ +in Input sorted_desc.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/part_sortness.cfg b/yt/yql/tests/sql/suites/insert/part_sortness.cfg new file mode 100644 index 0000000000..66737248b8 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/part_sortness.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/part_sortness.sql b/yt/yql/tests/sql/suites/insert/part_sortness.sql new file mode 100644 index 0000000000..291ae5ae7e --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/part_sortness.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +insert into plato.Output with truncate +SELECT + key,value +FROM plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert/read_schema.txt.attr b/yt/yql/tests/sql/suites/insert/read_schema.txt.attr new file mode 100644 index 0000000000..3176be619e --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/read_schema.txt.attr @@ -0,0 +1,3 @@ +{ + "_read_schema"=[{"type"="int64";"name"="a"};{"type"="uint64";"name"="b"};{"type"="double";"name"="c"};{"type"="string";"name"="d"};{"type"="boolean";name="e"};{"type"="any";"name"="f"}] +} diff --git a/yt/yql/tests/sql/suites/insert/replace_inferred.cfg b/yt/yql/tests/sql/suites/insert/replace_inferred.cfg new file mode 100644 index 0000000000..b5b1813964 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/replace_inferred.cfg @@ -0,0 +1 @@ +out Output inferschema.txt diff --git a/yt/yql/tests/sql/suites/insert/replace_inferred.sql b/yt/yql/tests/sql/suites/insert/replace_inferred.sql new file mode 100644 index 0000000000..ec481c4771 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/replace_inferred.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* kikimr can not */ +use plato; + +pragma yt.InferSchema; +pragma yt.InferSchemaTableCountThreshold="100000"; + +insert into Output with truncate +select * from Output; diff --git a/yt/yql/tests/sql/suites/insert/replace_inferred_op.cfg b/yt/yql/tests/sql/suites/insert/replace_inferred_op.cfg new file mode 100644 index 0000000000..b5b1813964 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/replace_inferred_op.cfg @@ -0,0 +1 @@ +out Output inferschema.txt diff --git a/yt/yql/tests/sql/suites/insert/replace_inferred_op.sql b/yt/yql/tests/sql/suites/insert/replace_inferred_op.sql new file mode 100644 index 0000000000..40e1d5e3cd --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/replace_inferred_op.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* kikimr can not */ +use plato; + +pragma yt.InferSchema; +pragma yt.InferSchemaTableCountThreshold="0"; + +insert into Output with truncate +select * from Output; diff --git a/yt/yql/tests/sql/suites/insert/replace_ordered_by_key.sql b/yt/yql/tests/sql/suites/insert/replace_ordered_by_key.sql new file mode 100644 index 0000000000..02057e2951 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/replace_ordered_by_key.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output with truncate (key, subkey, value) select key, subkey, value from plato.Input order by key; diff --git a/yt/yql/tests/sql/suites/insert/replace_ordered_by_key_desc.sql b/yt/yql/tests/sql/suites/insert/replace_ordered_by_key_desc.sql new file mode 100644 index 0000000000..46f2024768 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/replace_ordered_by_key_desc.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output with truncate (key, subkey, value) select key, subkey, value from plato.Input order by key desc; diff --git a/yt/yql/tests/sql/suites/insert/select_after_insert_relabeled.sql b/yt/yql/tests/sql/suites/insert/select_after_insert_relabeled.sql new file mode 100644 index 0000000000..774cea8db9 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/select_after_insert_relabeled.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* multirun can not */ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output (key, subkey, new_value, one_more_value) select key, subkey, value as new_value, "x" from plato.Input; +commit; +select key, subkey, new_value, one_more_value from plato.Output; diff --git a/yt/yql/tests/sql/suites/insert/select_after_replace.sql b/yt/yql/tests/sql/suites/insert/select_after_replace.sql new file mode 100644 index 0000000000..6c176e12be --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/select_after_replace.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* multirun can not */ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output with truncate (key, subkey, value) select key, subkey, value from plato.Input; +commit; +select key, subkey, value from plato.Output; diff --git a/yt/yql/tests/sql/suites/insert/select_after_replace_unwrap.sql b/yt/yql/tests/sql/suites/insert/select_after_replace_unwrap.sql new file mode 100644 index 0000000000..d16e715ff9 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/select_after_replace_unwrap.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* multirun can not */ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output with truncate (key, subkey, value) select key, subkey, value from plato.Input; +commit; +select coalesce(key, ""), coalesce(subkey, ""), coalesce(value, "") from plato.Output; diff --git a/yt/yql/tests/sql/suites/insert/select_operate_with_columns.cfg b/yt/yql/tests/sql/suites/insert/select_operate_with_columns.cfg new file mode 100644 index 0000000000..9421c82dab --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/select_operate_with_columns.cfg @@ -0,0 +1,3 @@ +in Input read_schema.txt +out Output output.txt + diff --git a/yt/yql/tests/sql/suites/insert/select_operate_with_columns.sql b/yt/yql/tests/sql/suites/insert/select_operate_with_columns.sql new file mode 100644 index 0000000000..12fe8035a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/select_operate_with_columns.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +insert into plato.Output with truncate +select a + b + c as a, coalesce(d, "") as b, f as f, cast(coalesce(e, true) as varchar) as e from plato.Input; + diff --git a/yt/yql/tests/sql/suites/insert/select_relabel.sql b/yt/yql/tests/sql/suites/insert/select_relabel.sql new file mode 100644 index 0000000000..71b5507666 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/select_relabel.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output with truncate (key, subkey, value) select key, subkey, "1" as value from plato.Input; diff --git a/yt/yql/tests/sql/suites/insert/select_subquery.cfg b/yt/yql/tests/sql/suites/insert/select_subquery.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/select_subquery.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/select_subquery.sql b/yt/yql/tests/sql/suites/insert/select_subquery.sql new file mode 100644 index 0000000000..08015031cc --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/select_subquery.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +use plato; + +$a = (select key from Input order by key limit 1); + +insert into Output (key) select $a; diff --git a/yt/yql/tests/sql/suites/insert/select_with_sort_limit.sql b/yt/yql/tests/sql/suites/insert/select_with_sort_limit.sql new file mode 100644 index 0000000000..97a8f11be7 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/select_with_sort_limit.sql @@ -0,0 +1,3 @@ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output +select * from plato.Input order by key limit 2; diff --git a/yt/yql/tests/sql/suites/insert/sorted.txt.attr b/yt/yql/tests/sql/suites/insert/sorted.txt.attr new file mode 100644 index 0000000000..ed13e20223 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/sorted.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/insert/sorted_calc.txt.attr b/yt/yql/tests/sql/suites/insert/sorted_calc.txt.attr new file mode 100644 index 0000000000..60103163df --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/sorted_calc.txt.attr @@ -0,0 +1,44 @@ +{ + "_yql_row_spec" = { + "SortDirections" = [ + 1 + ]; + "UniqueKeys" = %false; + "SortedByTypes" = [ + [ + "DataType"; + "String" + ] + ]; + "StrictSchema" = %true; + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ]; + "SortedBy" = [ + "_yql_column_0" + ] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert/sorted_desc.txt.attr b/yt/yql/tests/sql/suites/insert/sorted_desc.txt.attr new file mode 100644 index 0000000000..5a6ca5761e --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/sorted_desc.txt.attr @@ -0,0 +1,47 @@ +{ + "_yql_row_spec" = { + "SortMembers" = [ + "key" + ]; + "SortDirections" = [ + 0 + ]; + "UniqueKeys" = %false; + "SortedByTypes" = [ + [ + "DataType"; + "String" + ] + ]; + "StrictSchema" = %true; + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ]; + "SortedBy" = [ + "_yql_column_0" + ] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert/sorted_empty.txt.attr b/yt/yql/tests/sql/suites/insert/sorted_empty.txt.attr new file mode 100644 index 0000000000..ed13e20223 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/sorted_empty.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/insert/sorted_unique.txt.attr b/yt/yql/tests/sql/suites/insert/sorted_unique.txt.attr new file mode 100644 index 0000000000..eeee4c32ca --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/sorted_unique.txt.attr @@ -0,0 +1,21 @@ +{ + "schema"=< + "strict" = %true; + "unique_keys" = %true + >[ + { + "name" = "key"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "value"; + "type" = "string"; + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert/trivial_literals.sql b/yt/yql/tests/sql/suites/insert/trivial_literals.sql new file mode 100644 index 0000000000..5d0a0e557a --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/trivial_literals.sql @@ -0,0 +1,2 @@ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output (key, subkey, value) values ("1", "2", "3"); diff --git a/yt/yql/tests/sql/suites/insert/trivial_literals_multirow.sql b/yt/yql/tests/sql/suites/insert/trivial_literals_multirow.sql new file mode 100644 index 0000000000..8ea32ffc35 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/trivial_literals_multirow.sql @@ -0,0 +1,4 @@ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +/* postgres can not */ +insert into plato.Output (key, subkey, value) +values ("1", "2", "3"), ("4", "5", "6"), ("7", "8", "9"); diff --git a/yt/yql/tests/sql/suites/insert/trivial_select.sql b/yt/yql/tests/sql/suites/insert/trivial_select.sql new file mode 100644 index 0000000000..26b1075133 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/trivial_select.sql @@ -0,0 +1,2 @@ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output (key, subkey, value) select key, subkey, value from plato.Input; diff --git a/yt/yql/tests/sql/suites/insert/two_input_tables.cfg b/yt/yql/tests/sql/suites/insert/two_input_tables.cfg new file mode 100644 index 0000000000..369f783dcd --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/two_input_tables.cfg @@ -0,0 +1,4 @@ +in Input input.txt +in Input2 input2.txt +out Output output.txt + diff --git a/yt/yql/tests/sql/suites/insert/two_input_tables.sql b/yt/yql/tests/sql/suites/insert/two_input_tables.sql new file mode 100644 index 0000000000..9a02779e6d --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/two_input_tables.sql @@ -0,0 +1,3 @@ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output (key, subkey, value) select key, subkey, value from plato.Input; +insert into plato.Output (key, subkey, value) select key, subkey, value from plato.Input2; diff --git a/yt/yql/tests/sql/suites/insert/udf_empty.cfg b/yt/yql/tests/sql/suites/insert/udf_empty.cfg new file mode 100644 index 0000000000..57571ef968 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/udf_empty.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +udf simple_udf diff --git a/yt/yql/tests/sql/suites/insert/udf_empty.sql b/yt/yql/tests/sql/suites/insert/udf_empty.sql new file mode 100644 index 0000000000..65823f12cd --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/udf_empty.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +-- kikimr only: pragma kikimr.UnwrapReadTableValues = "false"; create table plato.Output (key varchar null, subkey varchar null, value varchar null, primary key (key)); commit; +insert into plato.Output(key, subkey, value) values (SimpleUdf::ReturnNull(""), SimpleUdf::ReturnVoid(""), coalesce(SimpleUdf::ReturnEmpty(""), "!")); diff --git a/yt/yql/tests/sql/suites/insert/unique_distinct_hints.cfg b/yt/yql/tests/sql/suites/insert/unique_distinct_hints.cfg new file mode 100644 index 0000000000..eddd32c5cb --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/unique_distinct_hints.cfg @@ -0,0 +1,10 @@ +in Input input.txt +out Output1 output1.txt +out Output2 output2.txt +out Output3 output3.txt +out Output4 output4.txt +out Output5 output5.txt +out Output6 output6.txt +out Output7 output7.txt +out Output8 output8.txt + diff --git a/yt/yql/tests/sql/suites/insert/unique_distinct_hints.sql b/yt/yql/tests/sql/suites/insert/unique_distinct_hints.sql new file mode 100644 index 0000000000..9029434ebc --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/unique_distinct_hints.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +USE plato; + +INSERT INTO Output1 WITH TRUNCATE SELECT /*+ unique() */ * FROM Input; +INSERT INTO Output2 WITH TRUNCATE SELECT /*+ distinct() */ * FROM Input; + +INSERT INTO Output3 WITH TRUNCATE SELECT /*+ distinct(key subkey) unique(value) */ * FROM Input; +INSERT INTO Output4 WITH TRUNCATE SELECT /*+ unique(key) distinct(subkey value) */ * FROM Input; +INSERT INTO Output5 WITH TRUNCATE SELECT /*+ unique(key value) unique(subkey) */ * FROM Input; +INSERT INTO Output6 WITH TRUNCATE SELECT /*+ distinct(key) distinct(subkey) */ * FROM Input; + +-- Bad case: missed column - ignore hint with warning. +INSERT INTO Output7 WITH TRUNCATE SELECT /*+ unique(subkey value) */ key, value FROM Input; + +INSERT INTO Output8 WITH TRUNCATE SELECT /*+ distinct(key subkey) */ key, subkey FROM Input ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/insert/use_anon_table_before_commit_fail.cfg b/yt/yql/tests/sql/suites/insert/use_anon_table_before_commit_fail.cfg new file mode 100644 index 0000000000..4f32e1efb8 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/use_anon_table_before_commit_fail.cfg @@ -0,0 +1,2 @@ +xfail +in Input input.txt diff --git a/yt/yql/tests/sql/suites/insert/use_anon_table_before_commit_fail.sql b/yt/yql/tests/sql/suites/insert/use_anon_table_before_commit_fail.sql new file mode 100644 index 0000000000..befe8e1209 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/use_anon_table_before_commit_fail.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* custom error:Anonymous table "@a" must be materialized. Use COMMIT before reading from it*/ +use plato; + +insert into @a +select * from Input; + +select * from @a; + diff --git a/yt/yql/tests/sql/suites/insert/use_anon_table_without_fill_fail.cfg b/yt/yql/tests/sql/suites/insert/use_anon_table_without_fill_fail.cfg new file mode 100644 index 0000000000..4f32e1efb8 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/use_anon_table_without_fill_fail.cfg @@ -0,0 +1,2 @@ +xfail +in Input input.txt diff --git a/yt/yql/tests/sql/suites/insert/use_anon_table_without_fill_fail.sql b/yt/yql/tests/sql/suites/insert/use_anon_table_without_fill_fail.sql new file mode 100644 index 0000000000..fcb33546b6 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/use_anon_table_without_fill_fail.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* custom error:Anonymous table "@a" must be materialized. Use COMMIT before reading from it*/ +use plato; + +select * from @a; + diff --git a/yt/yql/tests/sql/suites/insert/values_subquery.cfg b/yt/yql/tests/sql/suites/insert/values_subquery.cfg new file mode 100644 index 0000000000..38b2bc62d7 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/values_subquery.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +providers yt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert/values_subquery.sql b/yt/yql/tests/sql/suites/insert/values_subquery.sql new file mode 100644 index 0000000000..a409e91d8e --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/values_subquery.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +use plato; + +$a = (select key from Input order by key limit 1); + +insert into Output (key) values ($a); diff --git a/yt/yql/tests/sql/suites/insert/yql-13083-existig.cfg b/yt/yql/tests/sql/suites/insert/yql-13083-existig.cfg new file mode 100644 index 0000000000..97aa89b9bd --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/yql-13083-existig.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output1 sorted.txt +out Output2 sorted.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert/yql-13083.cfg b/yt/yql/tests/sql/suites/insert/yql-13083.cfg new file mode 100644 index 0000000000..09952ac4de --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/yql-13083.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output1 output.txt +out Output2 output.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert/yql-13083.sql b/yt/yql/tests/sql/suites/insert/yql-13083.sql new file mode 100644 index 0000000000..92c8c6ec79 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/yql-13083.sql @@ -0,0 +1,32 @@ +/* postgres can not */ +use plato; + +INSERT INTO Output1 +SELECT + key as key, + "" as subkey, + "value:" || value as value +FROM Input +WHERE key < "100" +ORDER BY key; + +INSERT INTO Output2 +SELECT + key as key, + "" as subkey, + "value:" || value as value +FROM Input +WHERE key < "200" +ORDER BY key; + +INSERT INTO Output1 +SELECT + * +FROM Input +ORDER BY key; + +INSERT INTO Output2 +SELECT + * +FROM Input +ORDER BY key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert/yql-14538.cfg b/yt/yql/tests/sql/suites/insert/yql-14538.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/yql-14538.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert/yql-14538.sql b/yt/yql/tests/sql/suites/insert/yql-14538.sql new file mode 100644 index 0000000000..73c2c6267a --- /dev/null +++ b/yt/yql/tests/sql/suites/insert/yql-14538.sql @@ -0,0 +1,18 @@ +use plato; + +INSERT INTO Output +SELECT + key as key, + "" as subkey, + "value:" || value as value +FROM Input +WHERE key < "100" +ORDER BY key +LIMIT 5; + +INSERT INTO Output +SELECT + * +FROM Input +ORDER BY key +LIMIT 4; diff --git a/yt/yql/tests/sql/suites/insert_monotonic/break_sort_fail.cfg b/yt/yql/tests/sql/suites/insert_monotonic/break_sort_fail.cfg new file mode 100644 index 0000000000..f534ef41b5 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/break_sort_fail.cfg @@ -0,0 +1,3 @@ +xfail +in Input1 input1.txt +out Output sorted.txt diff --git a/yt/yql/tests/sql/suites/insert_monotonic/break_sort_fail.sql b/yt/yql/tests/sql/suites/insert_monotonic/break_sort_fail.sql new file mode 100644 index 0000000000..9aeefc479d --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/break_sort_fail.sql @@ -0,0 +1,6 @@ +/* custom error:Inserts with "monotonic_keys" setting must not change output table sorting*/ +use plato; + +INSERT INTO Output WITH MONOTONIC_KEYS +SELECT * FROM Input1 +; diff --git a/yt/yql/tests/sql/suites/insert_monotonic/break_unique_fail.cfg b/yt/yql/tests/sql/suites/insert_monotonic/break_unique_fail.cfg new file mode 100644 index 0000000000..281562f784 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/break_unique_fail.cfg @@ -0,0 +1,4 @@ +xfail +in Input input4.txt +out Output sorted_unique.txt +providers yt diff --git a/yt/yql/tests/sql/suites/insert_monotonic/break_unique_fail.sql b/yt/yql/tests/sql/suites/insert_monotonic/break_unique_fail.sql new file mode 100644 index 0000000000..ea673eab1c --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/break_unique_fail.sql @@ -0,0 +1,7 @@ +/* ytfile can not */ +/* custom error:Duplicate key*/ +USE plato; + +INSERT INTO Output WITH MONOTONIC_KEYS +SELECT DISTINCT * FROM Input +ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/insert_monotonic/default.cfg b/yt/yql/tests/sql/suites/insert_monotonic/default.cfg new file mode 100644 index 0000000000..a615fc5955 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/default.cfg @@ -0,0 +1,6 @@ +in Input1 input1.txt +in Input2 input2.txt +in Input4 input4.txt +in Input5 input5.txt +out Output sorted.txt + diff --git a/yt/yql/tests/sql/suites/insert_monotonic/from_empty.cfg b/yt/yql/tests/sql/suites/insert_monotonic/from_empty.cfg new file mode 100644 index 0000000000..cbcd5e6ebb --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/from_empty.cfg @@ -0,0 +1,2 @@ +in EmptyInput sorted_empty.txt +out Output sorted.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert_monotonic/from_empty.sql b/yt/yql/tests/sql/suites/insert_monotonic/from_empty.sql new file mode 100644 index 0000000000..12a4cd2d3b --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/from_empty.sql @@ -0,0 +1,5 @@ +USE plato; + +INSERT INTO Output WITH MONOTONIC_KEYS +SELECT * FROM EmptyInput +ORDER BY key, subkey;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert_monotonic/input1.txt.attr b/yt/yql/tests/sql/suites/insert_monotonic/input1.txt.attr new file mode 100644 index 0000000000..ed13e20223 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/input1.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/insert_monotonic/input2.txt.attr b/yt/yql/tests/sql/suites/insert_monotonic/input2.txt.attr new file mode 100644 index 0000000000..ed13e20223 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/input2.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/insert_monotonic/input3.txt.attr b/yt/yql/tests/sql/suites/insert_monotonic/input3.txt.attr new file mode 100644 index 0000000000..f4e2c10c67 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/input3.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/insert_monotonic/input4.txt.attr b/yt/yql/tests/sql/suites/insert_monotonic/input4.txt.attr new file mode 100644 index 0000000000..dda2f66d5e --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/input4.txt.attr @@ -0,0 +1,21 @@ +{ + "schema"=< + "strict" = %true; + "unique_keys" = %false + >[ + { + "name" = "key"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "value"; + "type" = "string"; + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert_monotonic/keep_meta.sql b/yt/yql/tests/sql/suites/insert_monotonic/keep_meta.sql new file mode 100644 index 0000000000..cf797537e8 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/keep_meta.sql @@ -0,0 +1,5 @@ +USE plato; + +INSERT INTO Output WITH (MONOTONIC_KEYS, KEEP_META, TRUNCATE) +SELECT * FROM Input1 +ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/insert_monotonic/keep_unique.cfg b/yt/yql/tests/sql/suites/insert_monotonic/keep_unique.cfg new file mode 100644 index 0000000000..407769fc34 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/keep_unique.cfg @@ -0,0 +1,2 @@ +in Input input1.txt +out Output sorted_unique.txt diff --git a/yt/yql/tests/sql/suites/insert_monotonic/keep_unique.sql b/yt/yql/tests/sql/suites/insert_monotonic/keep_unique.sql new file mode 100644 index 0000000000..9721c1b113 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/keep_unique.sql @@ -0,0 +1,9 @@ +/* ytfile can not */ +/* dqfile can not */ +USE plato; + +INSERT INTO Output WITH MONOTONIC_KEYS +SELECT key, subkey, some(value) as value +FROM Input +GROUP BY key, subkey +ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/insert_monotonic/non_existing_fail.cfg b/yt/yql/tests/sql/suites/insert_monotonic/non_existing_fail.cfg new file mode 100644 index 0000000000..5625fb3b45 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/non_existing_fail.cfg @@ -0,0 +1,2 @@ +xfail +out Output output.txt diff --git a/yt/yql/tests/sql/suites/insert_monotonic/non_existing_fail.sql b/yt/yql/tests/sql/suites/insert_monotonic/non_existing_fail.sql new file mode 100644 index 0000000000..b60c6bb81f --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/non_existing_fail.sql @@ -0,0 +1,6 @@ +/* custom error:Insert with "monotonic_keys" setting cannot be used with a non-existent table*/ +USE plato; + +INSERT INTO Output WITH MONOTONIC_KEYS +SELECT 1 as key +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/insert_monotonic/not_all_fail.cfg b/yt/yql/tests/sql/suites/insert_monotonic/not_all_fail.cfg new file mode 100644 index 0000000000..be41f68e2e --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/not_all_fail.cfg @@ -0,0 +1,4 @@ +xfail +in Input1 input1.txt +in Input2 input2.txt +out Output sorted.txt diff --git a/yt/yql/tests/sql/suites/insert_monotonic/not_all_fail.sql b/yt/yql/tests/sql/suites/insert_monotonic/not_all_fail.sql new file mode 100644 index 0000000000..b00b52d880 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/not_all_fail.sql @@ -0,0 +1,10 @@ +/* custom error:All appends within the same commit should have the same "monotonic_keys" flag*/ +USE plato; + +INSERT INTO Output WITH MONOTONIC_KEYS +SELECT * FROM Input1 +ORDER BY key, subkey; + +INSERT INTO Output +SELECT * FROM Input2 +ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/insert_monotonic/overlaping_fail.cfg b/yt/yql/tests/sql/suites/insert_monotonic/overlaping_fail.cfg new file mode 100644 index 0000000000..c8b120c0b3 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/overlaping_fail.cfg @@ -0,0 +1,4 @@ +xfail +in Input input3.txt +out Output sorted.txt +providers yt diff --git a/yt/yql/tests/sql/suites/insert_monotonic/overlaping_fail.sql b/yt/yql/tests/sql/suites/insert_monotonic/overlaping_fail.sql new file mode 100644 index 0000000000..4064ac0b9b --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/overlaping_fail.sql @@ -0,0 +1,7 @@ +/* ytfile can not */ +/* custom error:job outputs overlap with original table*/ +USE plato; + +INSERT INTO Output WITH MONOTONIC_KEYS +SELECT * FROM Input +ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/insert_monotonic/several1.sql b/yt/yql/tests/sql/suites/insert_monotonic/several1.sql new file mode 100644 index 0000000000..f0f3f00b24 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/several1.sql @@ -0,0 +1,8 @@ +USE plato; + +INSERT INTO Output +WITH MONOTONIC_KEYS +SELECT * FROM Input1 +UNION ALL +SELECT * FROM Input2 +ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/insert_monotonic/several2.sql b/yt/yql/tests/sql/suites/insert_monotonic/several2.sql new file mode 100644 index 0000000000..409f0b120e --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/several2.sql @@ -0,0 +1,9 @@ +USE plato; + +INSERT INTO Output WITH MONOTONIC_KEYS +SELECT * FROM Input1 +ORDER BY key, subkey; + +INSERT INTO Output WITH MONOTONIC_KEYS +SELECT * FROM Input2 +ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/insert_monotonic/sorted.txt.attr b/yt/yql/tests/sql/suites/insert_monotonic/sorted.txt.attr new file mode 100644 index 0000000000..ed13e20223 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/sorted.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/insert_monotonic/sorted_empty.txt.attr b/yt/yql/tests/sql/suites/insert_monotonic/sorted_empty.txt.attr new file mode 100644 index 0000000000..ed13e20223 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/sorted_empty.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/insert_monotonic/sorted_unique.txt.attr b/yt/yql/tests/sql/suites/insert_monotonic/sorted_unique.txt.attr new file mode 100644 index 0000000000..eeee4c32ca --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/sorted_unique.txt.attr @@ -0,0 +1,21 @@ +{ + "schema"=< + "strict" = %true; + "unique_keys" = %true + >[ + { + "name" = "key"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "value"; + "type" = "string"; + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/insert_monotonic/to_empty.cfg b/yt/yql/tests/sql/suites/insert_monotonic/to_empty.cfg new file mode 100644 index 0000000000..01364c3d38 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/to_empty.cfg @@ -0,0 +1,2 @@ +in Input input1.txt +out EmptyOutput sorted_empty.txt diff --git a/yt/yql/tests/sql/suites/insert_monotonic/to_empty.sql b/yt/yql/tests/sql/suites/insert_monotonic/to_empty.sql new file mode 100644 index 0000000000..b9cfd780bb --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/to_empty.sql @@ -0,0 +1,5 @@ +USE plato; + +INSERT INTO EmptyOutput WITH MONOTONIC_KEYS +SELECT * FROM Input +ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/insert_monotonic/truncate_and_append.sql b/yt/yql/tests/sql/suites/insert_monotonic/truncate_and_append.sql new file mode 100644 index 0000000000..6279af1bd9 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/truncate_and_append.sql @@ -0,0 +1,9 @@ +USE plato; + +INSERT INTO Output WITH TRUNCATE +SELECT * FROM Input1 +ORDER BY key, subkey; + +INSERT INTO Output WITH MONOTONIC_KEYS +SELECT * FROM Input2 +ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/insert_monotonic/truncate_fail.cfg b/yt/yql/tests/sql/suites/insert_monotonic/truncate_fail.cfg new file mode 100644 index 0000000000..88b7afd164 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/truncate_fail.cfg @@ -0,0 +1,3 @@ +xfail +in Input input1.txt +out Output sorted.txt diff --git a/yt/yql/tests/sql/suites/insert_monotonic/truncate_fail.sql b/yt/yql/tests/sql/suites/insert_monotonic/truncate_fail.sql new file mode 100644 index 0000000000..50f8700e82 --- /dev/null +++ b/yt/yql/tests/sql/suites/insert_monotonic/truncate_fail.sql @@ -0,0 +1,6 @@ +/* custom error:"monotonic_keys" setting can not be used with TRUNCATE mode*/ +USE plato; + +INSERT INTO Output WITH (MONOTONIC_KEYS, TRUNCATE) +SELECT * FROM Input +ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/join/aggr_diff_order.sql b/yt/yql/tests/sql/suites/join/aggr_diff_order.sql new file mode 100644 index 0000000000..21762aa6c1 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/aggr_diff_order.sql @@ -0,0 +1,14 @@ +USE plato; + +PRAGMA yt.JoinMergeForce = "1"; +pragma yt.JoinMergeTablesLimit="10"; + +SELECT key1, subkey1 +FROM + ( + SELECT a.key as key1, a.subkey as subkey1 + FROM ANY (SELECT * FROM Input8 WHERE subkey != "bar") AS a + JOIN ANY (SELECT * FROM Input8 WHERE subkey != "foo") AS b + ON a.key = b.key AND a.subkey = b.subkey + ) +GROUP COMPACT BY subkey1, key1; diff --git a/yt/yql/tests/sql/suites/join/alias_where_group-off.cfg b/yt/yql/tests/sql/suites/join/alias_where_group-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/alias_where_group-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/alias_where_group.cfg b/yt/yql/tests/sql/suites/join/alias_where_group.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/alias_where_group.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/alias_where_group.sql b/yt/yql/tests/sql/suites/join/alias_where_group.sql new file mode 100644 index 0000000000..bc7f28419c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/alias_where_group.sql @@ -0,0 +1,16 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +SELECT + key, + subkey +FROM Input3 as ia +INNER JOIN Input4 as ib +USING(key) +WHERE + ib.subkey = '2' +GROUP BY + ia.key as key, + ia.value as subkey +ORDER BY key
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/anyjoin_common_dup-off.cfg b/yt/yql/tests/sql/suites/join/anyjoin_common_dup-off.cfg new file mode 100644 index 0000000000..ada3709d76 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/anyjoin_common_dup-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1_dup.txt +in Input2 sorted_by_kv2_dup.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/anyjoin_common_dup.cfg b/yt/yql/tests/sql/suites/join/anyjoin_common_dup.cfg new file mode 100644 index 0000000000..5186b3d003 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/anyjoin_common_dup.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1_dup.txt +in Input2 sorted_by_kv2_dup.txt diff --git a/yt/yql/tests/sql/suites/join/anyjoin_common_dup.sql b/yt/yql/tests/sql/suites/join/anyjoin_common_dup.sql new file mode 100644 index 0000000000..977215d43a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/anyjoin_common_dup.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +PRAGMA DisableSimpleColumns; +use plato; + +select * from Input1 as a right join Input2 as b on a.k1 = b.k2 order by a.v1, b.v2; +select * from any Input1 as a right join Input2 as b on a.k1 = b.k2 order by a.v1, b.v2; +select * from Input1 as a right join any Input2 as b on a.k1 = b.k2 order by a.v1, b.v2; +select * from any Input1 as a right join any Input2 as b on a.k1 = b.k2 order by a.v1, b.v2; + diff --git a/yt/yql/tests/sql/suites/join/anyjoin_common_nodata_keys-off.cfg b/yt/yql/tests/sql/suites/join/anyjoin_common_nodata_keys-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/anyjoin_common_nodata_keys-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/anyjoin_common_nodata_keys.cfg b/yt/yql/tests/sql/suites/join/anyjoin_common_nodata_keys.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/anyjoin_common_nodata_keys.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/anyjoin_common_nodata_keys.sql b/yt/yql/tests/sql/suites/join/anyjoin_common_nodata_keys.sql new file mode 100644 index 0000000000..bbde851b43 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/anyjoin_common_nodata_keys.sql @@ -0,0 +1,23 @@ +/* postgres can not */ +/* syntax version 1 */ + +USE plato; + +$a = SELECT AsTuple(1, 2) AS k1, 1 AS k2, 2 AS v; + +$b = SELECT AsTuple(1, 2) AS k1, 1 AS k2, 3 AS v1 + UNION ALL + SELECT AsTuple(1, 2) AS k1, 1 AS k2, 3 AS v1; + +INSERT INTO @a +SELECT * FROM $a; + +INSERT INTO @b +SELECT * FROM $b; + +COMMIT; + +SELECT * FROM @a AS a LEFT JOIN ANY @b AS b using(k1,k2); +SELECT * FROM @a AS a LEFT JOIN @b AS b using(k1,k2); + + diff --git a/yt/yql/tests/sql/suites/join/anyjoin_common_nodup-off.cfg b/yt/yql/tests/sql/suites/join/anyjoin_common_nodup-off.cfg new file mode 100644 index 0000000000..1f7a620911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/anyjoin_common_nodup-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/anyjoin_common_nodup.cfg b/yt/yql/tests/sql/suites/join/anyjoin_common_nodup.cfg new file mode 100644 index 0000000000..df8cd9f2c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/anyjoin_common_nodup.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/anyjoin_common_nodup.sql b/yt/yql/tests/sql/suites/join/anyjoin_common_nodup.sql new file mode 100644 index 0000000000..977215d43a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/anyjoin_common_nodup.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +PRAGMA DisableSimpleColumns; +use plato; + +select * from Input1 as a right join Input2 as b on a.k1 = b.k2 order by a.v1, b.v2; +select * from any Input1 as a right join Input2 as b on a.k1 = b.k2 order by a.v1, b.v2; +select * from Input1 as a right join any Input2 as b on a.k1 = b.k2 order by a.v1, b.v2; +select * from any Input1 as a right join any Input2 as b on a.k1 = b.k2 order by a.v1, b.v2; + diff --git a/yt/yql/tests/sql/suites/join/anyjoin_merge_nodup-off.cfg b/yt/yql/tests/sql/suites/join/anyjoin_merge_nodup-off.cfg new file mode 100644 index 0000000000..1f7a620911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/anyjoin_merge_nodup-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/anyjoin_merge_nodup.cfg b/yt/yql/tests/sql/suites/join/anyjoin_merge_nodup.cfg new file mode 100644 index 0000000000..df8cd9f2c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/anyjoin_merge_nodup.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/anyjoin_merge_nodup.sql b/yt/yql/tests/sql/suites/join/anyjoin_merge_nodup.sql new file mode 100644 index 0000000000..7d9a857905 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/anyjoin_merge_nodup.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; + +select * from Input1 as a join Input2 as b on a.k1 = b.k2 order by a.v1, b.v2; +select * from any Input1 as a join Input2 as b on a.k1 = b.k2 order by a.v1, b.v2; +select * from Input1 as a join any Input2 as b on a.k1 = b.k2 order by a.v1, b.v2; +select * from any Input1 as a join any Input2 as b on a.k1 = b.k2 order by a.v1, b.v2; + diff --git a/yt/yql/tests/sql/suites/join/branch.txt.attr b/yt/yql/tests/sql/suites/join/branch.txt.attr new file mode 100644 index 0000000000..4a77dc3233 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/branch.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint64"]]; + ["leaf";["OptionalType";["DataType";"Uint64"]]]; + ["value";["OptionalType";["DataType";"String"]]]] + ]; +}} diff --git a/yt/yql/tests/sql/suites/join/bush_dis_in-off.cfg b/yt/yql/tests/sql/suites/join/bush_dis_in-off.cfg new file mode 100644 index 0000000000..f091bc1467 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_dis_in-off.cfg @@ -0,0 +1,5 @@ +in Roots root.txt +in Leaves leaf.txt +in Branches branch.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/bush_dis_in.cfg b/yt/yql/tests/sql/suites/join/bush_dis_in.cfg new file mode 100644 index 0000000000..684f34abfd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_dis_in.cfg @@ -0,0 +1,3 @@ +in Roots root.txt +in Leaves leaf.txt +in Branches branch.txt diff --git a/yt/yql/tests/sql/suites/join/bush_dis_in.sql b/yt/yql/tests/sql/suites/join/bush_dis_in.sql new file mode 100644 index 0000000000..82a9d54d6f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_dis_in.sql @@ -0,0 +1,11 @@ +PRAGMA DisableSimpleColumns; +USE plato; +select * from ( + SELECT DISTINCT i1.key AS Key, i1.value as Value, i2.value as Join + FROM Roots AS i1 + INNER JOIN Leaves AS i2 ON i1.leaf = i2.key + UNION ALL + SELECT DISTINCT i1.key AS Key, i1.value as Value, i2.value as Join + FROM Roots AS i1 + INNER JOIN Branches AS i2 ON i1.branch = i2.key +) order by Key, Value, Join; diff --git a/yt/yql/tests/sql/suites/join/bush_dis_in_in-off.cfg b/yt/yql/tests/sql/suites/join/bush_dis_in_in-off.cfg new file mode 100644 index 0000000000..f091bc1467 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_dis_in_in-off.cfg @@ -0,0 +1,5 @@ +in Roots root.txt +in Leaves leaf.txt +in Branches branch.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/bush_dis_in_in.cfg b/yt/yql/tests/sql/suites/join/bush_dis_in_in.cfg new file mode 100644 index 0000000000..684f34abfd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_dis_in_in.cfg @@ -0,0 +1,3 @@ +in Roots root.txt +in Leaves leaf.txt +in Branches branch.txt diff --git a/yt/yql/tests/sql/suites/join/bush_dis_in_in.sql b/yt/yql/tests/sql/suites/join/bush_dis_in_in.sql new file mode 100644 index 0000000000..bd1989e82d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_dis_in_in.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +USE plato; +SELECT DISTINCT i1.key AS Key, i1.value AS Value, i2.value AS Leaf, i3.value AS Branch +FROM Roots AS i1 +INNER JOIN Leaves AS i2 ON i1.leaf = i2.key +INNER JOIN Branches AS i3 ON i1.branch = i3.key +ORDER BY Leaf, Branch; diff --git a/yt/yql/tests/sql/suites/join/bush_dis_in_in_in-off.cfg b/yt/yql/tests/sql/suites/join/bush_dis_in_in_in-off.cfg new file mode 100644 index 0000000000..f091bc1467 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_dis_in_in_in-off.cfg @@ -0,0 +1,5 @@ +in Roots root.txt +in Leaves leaf.txt +in Branches branch.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/bush_dis_in_in_in.cfg b/yt/yql/tests/sql/suites/join/bush_dis_in_in_in.cfg new file mode 100644 index 0000000000..684f34abfd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_dis_in_in_in.cfg @@ -0,0 +1,3 @@ +in Roots root.txt +in Leaves leaf.txt +in Branches branch.txt diff --git a/yt/yql/tests/sql/suites/join/bush_dis_in_in_in.sql b/yt/yql/tests/sql/suites/join/bush_dis_in_in_in.sql new file mode 100644 index 0000000000..22d12df7c5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_dis_in_in_in.sql @@ -0,0 +1,8 @@ +PRAGMA DisableSimpleColumns; +USE plato; +SELECT DISTINCT i1.key AS Key, i1.value as Value, i2.value As Leaf, i3.value AS Branch, i4.value AS Branch_Leaf +FROM Roots AS i1 +INNER JOIN Leaves AS i2 ON i1.leaf = i2.key +INNER JOIN Branches AS i3 ON i1.branch = i3.key +INNER JOIN Leaves AS i4 ON i3.leaf = i4.key +ORDER BY Leaf, Branch, Branch_Leaf; diff --git a/yt/yql/tests/sql/suites/join/bush_in-off.cfg b/yt/yql/tests/sql/suites/join/bush_in-off.cfg new file mode 100644 index 0000000000..f091bc1467 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_in-off.cfg @@ -0,0 +1,5 @@ +in Roots root.txt +in Leaves leaf.txt +in Branches branch.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/bush_in.cfg b/yt/yql/tests/sql/suites/join/bush_in.cfg new file mode 100644 index 0000000000..684f34abfd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_in.cfg @@ -0,0 +1,3 @@ +in Roots root.txt +in Leaves leaf.txt +in Branches branch.txt diff --git a/yt/yql/tests/sql/suites/join/bush_in.sql b/yt/yql/tests/sql/suites/join/bush_in.sql new file mode 100644 index 0000000000..af77ba34e3 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_in.sql @@ -0,0 +1,11 @@ +PRAGMA DisableSimpleColumns; +USE plato; +select * from ( + SELECT i1.key AS Key, i1.value as Value, i2.value as Join + FROM Roots AS i1 + INNER JOIN Leaves AS i2 ON i1.leaf = i2.key + UNION ALL + SELECT i1.key AS Key, i1.value as Value, i2.value as Join + FROM Roots AS i1 + INNER JOIN Branches AS i2 ON i1.branch = i2.key +) order by Key, Value, Join; diff --git a/yt/yql/tests/sql/suites/join/bush_in_in-off.cfg b/yt/yql/tests/sql/suites/join/bush_in_in-off.cfg new file mode 100644 index 0000000000..f091bc1467 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_in_in-off.cfg @@ -0,0 +1,5 @@ +in Roots root.txt +in Leaves leaf.txt +in Branches branch.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/bush_in_in.cfg b/yt/yql/tests/sql/suites/join/bush_in_in.cfg new file mode 100644 index 0000000000..684f34abfd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_in_in.cfg @@ -0,0 +1,3 @@ +in Roots root.txt +in Leaves leaf.txt +in Branches branch.txt diff --git a/yt/yql/tests/sql/suites/join/bush_in_in.sql b/yt/yql/tests/sql/suites/join/bush_in_in.sql new file mode 100644 index 0000000000..bf385a0ea9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_in_in.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +USE plato; +SELECT i1.key AS Key, i1.value AS Value, i2.value AS Leaf, i3.value AS Branch +FROM Roots AS i1 +INNER JOIN Leaves AS i2 ON i1.leaf = i2.key +INNER JOIN Branches AS i3 ON i1.branch = i3.key +ORDER BY Leaf, Branch; diff --git a/yt/yql/tests/sql/suites/join/bush_in_in_in-off.cfg b/yt/yql/tests/sql/suites/join/bush_in_in_in-off.cfg new file mode 100644 index 0000000000..f091bc1467 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_in_in_in-off.cfg @@ -0,0 +1,5 @@ +in Roots root.txt +in Leaves leaf.txt +in Branches branch.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/bush_in_in_in.cfg b/yt/yql/tests/sql/suites/join/bush_in_in_in.cfg new file mode 100644 index 0000000000..684f34abfd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_in_in_in.cfg @@ -0,0 +1,3 @@ +in Roots root.txt +in Leaves leaf.txt +in Branches branch.txt diff --git a/yt/yql/tests/sql/suites/join/bush_in_in_in.sql b/yt/yql/tests/sql/suites/join/bush_in_in_in.sql new file mode 100644 index 0000000000..901aa219d9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/bush_in_in_in.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +USE plato; +SELECT i1.key AS Key, i1.value as Value, i2.value As Leaf, i3.value AS Branch, i4.value AS Branch_Leaf +FROM Roots AS i1 +INNER JOIN Leaves AS i2 ON i1.leaf = i2.key +INNER JOIN Branches AS i3 ON i1.branch = i3.key +INNER JOIN Leaves AS i4 ON i3.leaf = i4.key; diff --git a/yt/yql/tests/sql/suites/join/cbo_4tables.cfg b/yt/yql/tests/sql/suites/join/cbo_4tables.cfg new file mode 100644 index 0000000000..a5101acc8c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/cbo_4tables.cfg @@ -0,0 +1,5 @@ +providers yt +in InputA cbo_4tables_a.txt +in InputB cbo_4tables_b.txt +in InputC cbo_4tables_c.txt +in InputD cbo_4tables_d.txt diff --git a/yt/yql/tests/sql/suites/join/cbo_4tables.sql b/yt/yql/tests/sql/suites/join/cbo_4tables.sql new file mode 100644 index 0000000000..1629efa144 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/cbo_4tables.sql @@ -0,0 +1,18 @@ +/* ytfile can not */ +USE plato; +pragma warning("disable", "8001"); -- CBO_MISSING_TABLE_STATS + +pragma CostBasedOptimizer="native"; +pragma yt.MapJoinLimit="1000"; +pragma yt.LookupJoinLimit="1000"; +pragma yt.LookupJoinMaxRows="100"; +pragma yt.ExtendedStatsMaxChunkCount="0"; +pragma yt.JoinMergeTablesLimit="100"; + +SELECT + InputA.Key1, InputA.Key2, InputA.Value, InputB.val, InputC.v, InputD.value as vald +FROM + InputA + INNER JOIN InputD ON InputA.Key2 = InputD.k + INNER JOIN InputB ON InputA.Fk1 = InputB.k + INNER JOIN InputC ON InputA.Key1 = InputC.k diff --git a/yt/yql/tests/sql/suites/join/cbo_4tables_a.txt.attr b/yt/yql/tests/sql/suites/join/cbo_4tables_a.txt.attr new file mode 100644 index 0000000000..295e5a3d06 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/cbo_4tables_a.txt.attr @@ -0,0 +1,61 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["Key1";["DataType";"Int32"]]; + ["Key2";["DataType";"String"]]; + ["Fk1";["OptionalType";["DataType";"String"]]]; + ["Value";["OptionalType";["DataType";"String"]]]] + ]; + "SortDirections"=[1;1]; + "SortedBy"=["Key1";"Key2"]; + "SortedByTypes"=[["DataType";"Int32";];["DataType";"String"]]; + "SortMembers"=["Key1";"Key2"]; + }; + "schema" = <"strict" = %true; "unique_keys" = %false> + [ + { + "name" = "Key1"; + "sort_order" = "ascending"; + "type" = "int64"; + "type_v3" = {"type_name" = "optional"; item = "int64"} + }; + { + "name" = "Key2"; + "sort_order" = "ascending"; + "type" = "string"; + "type_v3" = {"type_name" = "optional"; item = "string"} + }; + { + "name" = "Fk1"; + "type" = "string"; + "type_v3" = {"type_name" = "optional"; item = "string"} + }; + { + "name" = "Value"; + "type" = "string"; + "type_v3" = {"type_name" = "optional"; item = "string"} + }; + ]; + "extended_stats" = [ + { + "column_name" = "Key1"; + "data_weight" = 56; + "num_unique_vals" = 11; + }; + { + "column_name" = "Key2"; + "data_weight" = 66; + "num_unique_vals" = 5; + }; + { + "column_name" = "Fk1"; + "data_weight" = 70; + "num_unique_vals" = 5; + }; + { + "column_name" = "Value"; + "data_weight" = 98; + "num_unique_vals" = 6; + } + ] +} diff --git a/yt/yql/tests/sql/suites/join/cbo_4tables_b.txt.attr b/yt/yql/tests/sql/suites/join/cbo_4tables_b.txt.attr new file mode 100644 index 0000000000..460ca717f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/cbo_4tables_b.txt.attr @@ -0,0 +1,34 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["k";["OptionalType";["DataType";"String"]]]; + ["val";["OptionalType";["DataType";"String"]]]] + ]; + }; + + "schema" = <"strict" = %true; "unique_keys" = %false> + [ + { + "name" = "k"; + "type" = "string"; + "type_v3" = {"type_name" = "optional"; item = "string"} + }; + { + "name" = "val"; + "type" = "string"; + "type_v3" = {"type_name" = "optional"; item = "string"} + }; + ]; + "extended_stats" = [ + { + "column_name" = "k"; + "data_weight" = 18; + "num_unique_vals" = 2; + }; + { + "column_name" = "val"; + "data_weight" = 20; + "num_unique_vals" = 3; + } + ] +} diff --git a/yt/yql/tests/sql/suites/join/cbo_4tables_c.txt.attr b/yt/yql/tests/sql/suites/join/cbo_4tables_c.txt.attr new file mode 100644 index 0000000000..fb108546cd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/cbo_4tables_c.txt.attr @@ -0,0 +1,34 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["k";["OptionalType";["DataType";"Int64"]]]; + ["v";["OptionalType";["DataType";"Int64"]]]] + ]; + }; + + "schema" = <"strict" = %true; "unique_keys" = %false> + [ + { + "name" = "k"; + "type" = "int64"; + "type_v3" = {"type_name" = "optional"; item = "int64"} + }; + { + "name" = "v"; + "type" = "int64"; + "type_v3" = {"type_name" = "optional"; item = "int64"} + }; + ]; + "extended_stats" = [ + { + "column_name" = "k"; + "data_weight" = 12; + "num_unique_vals" = 3; + }; + { + "column_name" = "v"; + "data_weight" = 12; + "num_unique_vals" = 3; + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/cbo_4tables_d.txt.attr b/yt/yql/tests/sql/suites/join/cbo_4tables_d.txt.attr new file mode 100644 index 0000000000..8050807ed9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/cbo_4tables_d.txt.attr @@ -0,0 +1,50 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["id";["DataType";"Int32"]]; + ["k";["OptionalType";["DataType";"String"]]]; + ["value";["OptionalType";["DataType";"Int64"]]]] + ]; + "SortDirections"=[1]; + "SortedBy"=["id"]; + "SortedByTypes"=[["DataType";"Int32"]]; + "SortMembers"=["id"]; + }; + + "schema" = <"strict" = %true; "unique_keys" = %false> + [ + { + "name" = "id"; + "sort_order" = "ascending"; + "type" = "int64"; + "type_v3" = {"type_name" = "optional"; item = "int64"} + }; + { + "name" = "k"; + "type" = "string"; + "type_v3" = {"type_name" = "optional"; item = "string"} + }; + { + "name" = "value"; + "type" = "int64"; + "type_v3" = {"type_name" = "optional"; item = "int64"} + }; + ]; + "extended_stats" = [ + { + "column_name" = "id"; + "data_weight" = 44; + "num_unique_vals" = 11; + }; + { + "column_name" = "k"; + "data_weight" = 66; + "num_unique_vals" = 7; + }; + { + "column_name" = "value"; + "data_weight" = 44; + "num_unique_vals" = 6; + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/cbo_4tables_only_sorted_merge.cfg b/yt/yql/tests/sql/suites/join/cbo_4tables_only_sorted_merge.cfg new file mode 100644 index 0000000000..a5101acc8c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/cbo_4tables_only_sorted_merge.cfg @@ -0,0 +1,5 @@ +providers yt +in InputA cbo_4tables_a.txt +in InputB cbo_4tables_b.txt +in InputC cbo_4tables_c.txt +in InputD cbo_4tables_d.txt diff --git a/yt/yql/tests/sql/suites/join/cbo_4tables_only_sorted_merge.sql b/yt/yql/tests/sql/suites/join/cbo_4tables_only_sorted_merge.sql new file mode 100644 index 0000000000..7d5eddb167 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/cbo_4tables_only_sorted_merge.sql @@ -0,0 +1,19 @@ +/* ytfile can not */ +USE plato; +pragma warning("disable", "8001"); -- CBO_MISSING_TABLE_STATS + +pragma CostBasedOptimizer="native"; +pragma yt.MapJoinLimit="1000"; +pragma yt.LookupJoinLimit="1000"; +pragma yt.LookupJoinMaxRows="100"; +pragma yt.ExtendedStatsMaxChunkCount="0"; +pragma yt.JoinMergeTablesLimit="100"; +pragma yt.JoinMergeForce="true"; + +SELECT + InputA.Key1, InputA.Key2, InputA.Value, InputB.val, InputC.v, InputD.value as vald +FROM + InputA + INNER JOIN InputD ON InputA.Key2 = InputD.k + INNER JOIN InputB ON InputA.Fk1 = InputB.k + INNER JOIN InputC ON InputA.Key1 = InputC.k diff --git a/yt/yql/tests/sql/suites/join/commonjoin_unused_keys.cfg b/yt/yql/tests/sql/suites/join/commonjoin_unused_keys.cfg new file mode 100644 index 0000000000..9a930ffe48 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/commonjoin_unused_keys.cfg @@ -0,0 +1,6 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +in Input5 kv5_sorted.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/commonjoin_unused_keys.sql b/yt/yql/tests/sql/suites/join/commonjoin_unused_keys.sql new file mode 100644 index 0000000000..8d4a07952d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/commonjoin_unused_keys.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +use plato; + +select + +v3 + +from Input1 as a +join Input2 as b on (a.k1 = b.k2) +join Input3 as c on (a.k1 = c.k3) +order by v3; diff --git a/yt/yql/tests/sql/suites/join/compact_join.cfg b/yt/yql/tests/sql/suites/join/compact_join.cfg new file mode 100644 index 0000000000..936236defd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/compact_join.cfg @@ -0,0 +1,2 @@ +in InputLeft input_left.txt +in InputRight input_right.txt diff --git a/yt/yql/tests/sql/suites/join/compact_join.sql b/yt/yql/tests/sql/suites/join/compact_join.sql new file mode 100644 index 0000000000..505bdb34fc --- /dev/null +++ b/yt/yql/tests/sql/suites/join/compact_join.sql @@ -0,0 +1,11 @@ +USE plato; + +$stream = SELECT a.k AS k, a.sk AS ask, a.v AS av +FROM InputLeft AS a +INNER JOIN /*+ merge() compact() */ InputRight AS b +USING (k, sk, v); + +SELECT k, ask, av +FROM $stream +GROUP /*+ compact() */ BY (k, ask, av) +ORDER BY k, ask, av;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/convert_key-off.cfg b/yt/yql/tests/sql/suites/join/convert_key-off.cfg new file mode 100644 index 0000000000..9e8955692d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/convert_key-off.cfg @@ -0,0 +1,4 @@ +in Input convert_key.txt +res result.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/convert_key.cfg b/yt/yql/tests/sql/suites/join/convert_key.cfg new file mode 100644 index 0000000000..dd4bfb988d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/convert_key.cfg @@ -0,0 +1,2 @@ +in Input convert_key.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/join/convert_key.sql b/yt/yql/tests/sql/suites/join/convert_key.sql new file mode 100644 index 0000000000..0d5ca60885 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/convert_key.sql @@ -0,0 +1,31 @@ +/* postgres can not */ +USE plato; + +PRAGMA SimpleColumns; +pragma yt.MapJoinLimit="1m"; + +$join_result = +( + SELECT + i1.k1 as i1_k1, + i1.k2 as i1_k2, + i1.value as i1_value, + i2.k1 as i2_k1, + i2.k2 as i2_k2, + i2.value as i2_value + FROM + Input as i1 + LEFT JOIN + ( + SELECT + i2.value as value, + cast(i2.k1 as double) as k1, + cast(i2.k2 as double) as k2 + FROM Input as i2 + ) as i2 + ON + i1.k1 == i2.k1 AND + i1.k2 == i2.k2 +); + +SELECT * FROM $join_result; diff --git a/yt/yql/tests/sql/suites/join/convert_key.txt.attr b/yt/yql/tests/sql/suites/join/convert_key.txt.attr new file mode 100644 index 0000000000..63d2666582 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/convert_key.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["k1";["DataType";"Int64"]]; + ["k2";["DataType";"Int64"]]; + ["value";["DataType";"String"]]] + ]; +}} diff --git a/yt/yql/tests/sql/suites/join/count_bans-off.cfg b/yt/yql/tests/sql/suites/join/count_bans-off.cfg new file mode 100644 index 0000000000..764ce5fc59 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/count_bans-off.cfg @@ -0,0 +1,4 @@ +in spider_info spider_info.txt +udf url_udf +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/count_bans.cfg b/yt/yql/tests/sql/suites/join/count_bans.cfg new file mode 100644 index 0000000000..2e4220b630 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/count_bans.cfg @@ -0,0 +1,2 @@ +in spider_info spider_info.txt +udf url_udf diff --git a/yt/yql/tests/sql/suites/join/count_bans.sql b/yt/yql/tests/sql/suites/join/count_bans.sql new file mode 100644 index 0000000000..499db2c7f7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/count_bans.sql @@ -0,0 +1,45 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +$records = ( +SELECT + key as ip, + subkey AS recordType, + Url::GetHost(value) AS host +FROM spider_info +); + +$results = ( +SELECT + ip, + host, + count(*) AS request_count +FROM $records +WHERE host IS NOT NULL AND recordType == "RESULT" +GROUP BY ip, host +); + +$bans = ( +SELECT + ip, + host, + count(*) AS fetcher_count +FROM $records +WHERE host IS NOT NULL AND recordType == "BAN_DETECTED" +GROUP BY ip, host +); + +SELECT + results.ip AS ip, + results.host AS host, + results.request_count AS request_count, + bans.fetcher_count AS fetcher_count +FROM + $results AS results + INNER JOIN + $bans AS bans + ON bans.ip == results.ip + AND bans.host == results.host +ORDER BY fetcher_count DESC +; diff --git a/yt/yql/tests/sql/suites/join/default.cfg b/yt/yql/tests/sql/suites/join/default.cfg new file mode 100644 index 0000000000..429c022594 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/default.cfg @@ -0,0 +1,6 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +in Input8 input8.txt diff --git a/yt/yql/tests/sql/suites/join/do_not_suppres_equijoin_input_sorts.cfg b/yt/yql/tests/sql/suites/join/do_not_suppres_equijoin_input_sorts.cfg new file mode 100644 index 0000000000..89a1fdcc94 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/do_not_suppres_equijoin_input_sorts.cfg @@ -0,0 +1,3 @@ +in Input1 sorted_by_kv1_opt.txt +in Input2 sorted_by_kv1_1.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/do_not_suppres_equijoin_input_sorts.sql b/yt/yql/tests/sql/suites/join/do_not_suppres_equijoin_input_sorts.sql new file mode 100644 index 0000000000..314c680b69 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/do_not_suppres_equijoin_input_sorts.sql @@ -0,0 +1,8 @@ +USE plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma DisableSimpleColumns; + +select + * +from Input1 as t1 cross join Input2 as t2 +where t1.k1 == t2.k1 and t1.k1 < "zzz"; diff --git a/yt/yql/tests/sql/suites/join/empty_dynamic.txt.attr b/yt/yql/tests/sql/suites/join/empty_dynamic.txt.attr new file mode 100644 index 0000000000..fad9c383f9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/empty_dynamic.txt.attr @@ -0,0 +1,22 @@ +{ + "_yql_dynamic"=%true; + "schema"=< + "strict" = %true; + "unique_keys" = %true + >[ + { + "name" = "key"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "value"; + "type" = "string"; + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/emptyjoin_unused_keys.cfg b/yt/yql/tests/sql/suites/join/emptyjoin_unused_keys.cfg new file mode 100644 index 0000000000..9a930ffe48 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/emptyjoin_unused_keys.cfg @@ -0,0 +1,6 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +in Input5 kv5_sorted.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/emptyjoin_unused_keys.sql b/yt/yql/tests/sql/suites/join/emptyjoin_unused_keys.sql new file mode 100644 index 0000000000..3e50bfd2df --- /dev/null +++ b/yt/yql/tests/sql/suites/join/emptyjoin_unused_keys.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +use plato; + +insert into @Input1 +select '' as k1, '' as v1, '' as u1 limit 0; +commit; + +select + +v3 + +from @Input1 as a +join Input2 as b on (a.k1 = b.k2) +right join Input3 as c on (a.k1 = c.k3) +order by v3; diff --git a/yt/yql/tests/sql/suites/join/equi_join_by_expr-off.cfg b/yt/yql/tests/sql/suites/join/equi_join_by_expr-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_by_expr-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/equi_join_by_expr.cfg b/yt/yql/tests/sql/suites/join/equi_join_by_expr.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_by_expr.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/equi_join_by_expr.sql b/yt/yql/tests/sql/suites/join/equi_join_by_expr.sql new file mode 100644 index 0000000000..d2cad73469 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_by_expr.sql @@ -0,0 +1,3 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +SELECT * FROM plato.Input2 as A JOIN plato.Input3 as B ON CAST(A.key AS INT) + 1 == CAST(B.key AS INT); diff --git a/yt/yql/tests/sql/suites/join/equi_join_three_asterisk-off.cfg b/yt/yql/tests/sql/suites/join/equi_join_three_asterisk-off.cfg new file mode 100644 index 0000000000..3ff2f86249 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_three_asterisk-off.cfg @@ -0,0 +1,5 @@ +in A input1.txt +in B input2.txt +in C input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/equi_join_three_asterisk.cfg b/yt/yql/tests/sql/suites/join/equi_join_three_asterisk.cfg new file mode 100644 index 0000000000..24c926d868 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_three_asterisk.cfg @@ -0,0 +1,3 @@ +in A input1.txt +in B input2.txt +in C input4.txt diff --git a/yt/yql/tests/sql/suites/join/equi_join_three_asterisk.sql b/yt/yql/tests/sql/suites/join/equi_join_three_asterisk.sql new file mode 100644 index 0000000000..9c56228f58 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_three_asterisk.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +SELECT A.*, C.subkey as goal,B.* +FROM plato.A +JOIN plato.B ON A.key == B.key +JOIN plato.C ON B.subkey == C.subkey +ORDER BY A.key; diff --git a/yt/yql/tests/sql/suites/join/equi_join_three_asterisk_eval-off.cfg b/yt/yql/tests/sql/suites/join/equi_join_three_asterisk_eval-off.cfg new file mode 100644 index 0000000000..3ff2f86249 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_three_asterisk_eval-off.cfg @@ -0,0 +1,5 @@ +in A input1.txt +in B input2.txt +in C input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/equi_join_three_asterisk_eval.cfg b/yt/yql/tests/sql/suites/join/equi_join_three_asterisk_eval.cfg new file mode 100644 index 0000000000..24c926d868 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_three_asterisk_eval.cfg @@ -0,0 +1,3 @@ +in A input1.txt +in B input2.txt +in C input4.txt diff --git a/yt/yql/tests/sql/suites/join/equi_join_three_asterisk_eval.sql b/yt/yql/tests/sql/suites/join/equi_join_three_asterisk_eval.sql new file mode 100644 index 0000000000..8ad0ef844c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_three_asterisk_eval.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +SELECT A.*, C.subkey as goal,B.*, A.value || C.value as ac_val_concat +FROM plato.A +JOIN plato.B ON A.key == B.key +JOIN plato.C ON B.subkey == C.subkey +ORDER BY A.key, goal, ac_val_concat; diff --git a/yt/yql/tests/sql/suites/join/equi_join_three_simple-off.cfg b/yt/yql/tests/sql/suites/join/equi_join_three_simple-off.cfg new file mode 100644 index 0000000000..3ff2f86249 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_three_simple-off.cfg @@ -0,0 +1,5 @@ +in A input1.txt +in B input2.txt +in C input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/equi_join_three_simple.cfg b/yt/yql/tests/sql/suites/join/equi_join_three_simple.cfg new file mode 100644 index 0000000000..24c926d868 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_three_simple.cfg @@ -0,0 +1,3 @@ +in A input1.txt +in B input2.txt +in C input4.txt diff --git a/yt/yql/tests/sql/suites/join/equi_join_three_simple.sql b/yt/yql/tests/sql/suites/join/equi_join_three_simple.sql new file mode 100644 index 0000000000..c620849a45 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_three_simple.sql @@ -0,0 +1,3 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +SELECT * FROM plato.A JOIN plato.B ON A.key == B.key JOIN plato.C ON A.subkey == C.subkey; diff --git a/yt/yql/tests/sql/suites/join/equi_join_two_mult_keys-off.cfg b/yt/yql/tests/sql/suites/join/equi_join_two_mult_keys-off.cfg new file mode 100644 index 0000000000..c0badaaad9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_two_mult_keys-off.cfg @@ -0,0 +1,4 @@ +in A input1.txt +in B input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/equi_join_two_mult_keys.cfg b/yt/yql/tests/sql/suites/join/equi_join_two_mult_keys.cfg new file mode 100644 index 0000000000..661ab46dee --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_two_mult_keys.cfg @@ -0,0 +1,2 @@ +in A input1.txt +in B input4.txt diff --git a/yt/yql/tests/sql/suites/join/equi_join_two_mult_keys.sql b/yt/yql/tests/sql/suites/join/equi_join_two_mult_keys.sql new file mode 100644 index 0000000000..1119ca50ea --- /dev/null +++ b/yt/yql/tests/sql/suites/join/equi_join_two_mult_keys.sql @@ -0,0 +1,3 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +SELECT * FROM plato.A JOIN plato.B ON A.key == B.key AND A.subkey == B.subkey; diff --git a/yt/yql/tests/sql/suites/join/filter_joined-off.cfg b/yt/yql/tests/sql/suites/join/filter_joined-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/filter_joined-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/filter_joined.cfg b/yt/yql/tests/sql/suites/join/filter_joined.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/filter_joined.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/filter_joined.sql b/yt/yql/tests/sql/suites/join/filter_joined.sql new file mode 100644 index 0000000000..2b75c56856 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/filter_joined.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +use plato; +SELECT b.key +FROM Input2 as a +RIGHT JOIN Input3 as b ON a.key == b.key +WHERE a.key IS NULL +ORDER BY b.key; diff --git a/yt/yql/tests/sql/suites/join/flatten_columns1-off.cfg b/yt/yql/tests/sql/suites/join/flatten_columns1-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/flatten_columns1-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/flatten_columns1.cfg b/yt/yql/tests/sql/suites/join/flatten_columns1.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/flatten_columns1.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/flatten_columns1.sql b/yt/yql/tests/sql/suites/join/flatten_columns1.sql new file mode 100644 index 0000000000..ada242dc80 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/flatten_columns1.sql @@ -0,0 +1,14 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +SELECT * FROM ( +SELECT + AsStruct(key as key, subkey as subkey), + AsStruct("value: " || value as value) +FROM Input1 +) as a +FLATTEN COLUMNS +JOIN Input2 +USING (key) +ORDER BY Input2.key; diff --git a/yt/yql/tests/sql/suites/join/flatten_columns2-off.cfg b/yt/yql/tests/sql/suites/join/flatten_columns2-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/flatten_columns2-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/flatten_columns2.cfg b/yt/yql/tests/sql/suites/join/flatten_columns2.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/flatten_columns2.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/flatten_columns2.sql b/yt/yql/tests/sql/suites/join/flatten_columns2.sql new file mode 100644 index 0000000000..9ae2d879e4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/flatten_columns2.sql @@ -0,0 +1,20 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +SELECT * FROM ( +SELECT + AsStruct(key as key, subkey as subkey), + AsStruct("value1: " || value as value) +FROM Input1 +) as a +FLATTEN COLUMNS +JOIN ( +SELECT + AsStruct(key as key, subkey as subkey), + AsStruct("value2: " || value as value) +FROM Input2 +) as b +FLATTEN COLUMNS +USING (key) +ORDER BY a.key; diff --git a/yt/yql/tests/sql/suites/join/force_merge_join.sql b/yt/yql/tests/sql/suites/join/force_merge_join.sql new file mode 100644 index 0000000000..80aaedfb0a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/force_merge_join.sql @@ -0,0 +1,9 @@ +USE plato; + +PRAGMA yt.JoinMergeForce = "1"; +pragma yt.JoinMergeTablesLimit="10"; + +SELECT a.key as key1 + FROM (SELECT * FROM plato.Input1 WHERE subkey != "bar") AS a + JOIN (SELECT * FROM plato.Input1 WHERE subkey != "foo") AS b ON a.key = b.key +WHERE a.key != "1" OR b.key != "2"; diff --git a/yt/yql/tests/sql/suites/join/from_in_front_join-off.cfg b/yt/yql/tests/sql/suites/join/from_in_front_join-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/from_in_front_join-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/from_in_front_join.cfg b/yt/yql/tests/sql/suites/join/from_in_front_join.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/from_in_front_join.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/from_in_front_join.sql b/yt/yql/tests/sql/suites/join/from_in_front_join.sql new file mode 100644 index 0000000000..2e1c8489de --- /dev/null +++ b/yt/yql/tests/sql/suites/join/from_in_front_join.sql @@ -0,0 +1,3 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +from plato.Input1 inner join plato.Input3 using (key) select Input1.key, Input1.subkey, Input3.value;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/full_equal_not_null-off.cfg b/yt/yql/tests/sql/suites/join/full_equal_not_null-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_equal_not_null-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/full_equal_not_null.cfg b/yt/yql/tests/sql/suites/join/full_equal_not_null.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_equal_not_null.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/full_equal_not_null.sql b/yt/yql/tests/sql/suites/join/full_equal_not_null.sql new file mode 100644 index 0000000000..39de950979 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_equal_not_null.sql @@ -0,0 +1,2 @@ +PRAGMA DisableSimpleColumns; +select count(*) from (select cast(subkey as int) as v1, subkey from plato.Input1) as a full join (select cast(subkey as int) as v2, subkey from plato.Input1) as b on a.v1 = b.v2;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/full_equal_null-off.cfg b/yt/yql/tests/sql/suites/join/full_equal_null-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_equal_null-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/full_equal_null.cfg b/yt/yql/tests/sql/suites/join/full_equal_null.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_equal_null.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/full_equal_null.sql b/yt/yql/tests/sql/suites/join/full_equal_null.sql new file mode 100644 index 0000000000..ed1d8077cd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_equal_null.sql @@ -0,0 +1,2 @@ +PRAGMA DisableSimpleColumns; +select count(*) from (select cast(value as int) as v1, subkey from plato.Input1) as a full join (select cast(value as int) as v2, subkey from plato.Input1) as b on a.v1 = b.v2; diff --git a/yt/yql/tests/sql/suites/join/full_join-off.cfg b/yt/yql/tests/sql/suites/join/full_join-off.cfg new file mode 100644 index 0000000000..483714d007 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_join-off.cfg @@ -0,0 +1,4 @@ +in test_join_1 test_join_1.txt +in test_join_2 test_join_2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/full_join.cfg b/yt/yql/tests/sql/suites/join/full_join.cfg new file mode 100644 index 0000000000..ec3dcd7a74 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_join.cfg @@ -0,0 +1,2 @@ +in test_join_1 test_join_1.txt +in test_join_2 test_join_2.txt diff --git a/yt/yql/tests/sql/suites/join/full_join.sql b/yt/yql/tests/sql/suites/join/full_join.sql new file mode 100644 index 0000000000..4f1e839311 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_join.sql @@ -0,0 +1,19 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; +SELECT + a.key AS a_key, + b.key AS b_key, + a.value AS a_value, + b.value AS b_value +FROM + `test_join_1` AS a +FULL JOIN + `test_join_2` AS b +ON + a.key == b.subkey +ORDER BY + b_key, a_key +LIMIT 25 +; + diff --git a/yt/yql/tests/sql/suites/join/full_trivial-off.cfg b/yt/yql/tests/sql/suites/join/full_trivial-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_trivial-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/full_trivial.cfg b/yt/yql/tests/sql/suites/join/full_trivial.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_trivial.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/full_trivial.sql b/yt/yql/tests/sql/suites/join/full_trivial.sql new file mode 100644 index 0000000000..bb6fa176f7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_trivial.sql @@ -0,0 +1,5 @@ +PRAGMA DisableSimpleColumns; +select coalesce(Input1.key, "_null") as a, coalesce(Input1.subkey, "_null") as b, coalesce(Input3.value, "_null") as c +from plato.Input1 +full join plato.Input3 using (key) +order by a, b, c;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/full_trivial_udf_call-off.cfg b/yt/yql/tests/sql/suites/join/full_trivial_udf_call-off.cfg new file mode 100644 index 0000000000..2c2cb4cb8d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_trivial_udf_call-off.cfg @@ -0,0 +1,7 @@ +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +udf simple_udf +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/full_trivial_udf_call.cfg b/yt/yql/tests/sql/suites/join/full_trivial_udf_call.cfg new file mode 100644 index 0000000000..4d2ebba571 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_trivial_udf_call.cfg @@ -0,0 +1,5 @@ +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +udf simple_udf diff --git a/yt/yql/tests/sql/suites/join/full_trivial_udf_call.sql b/yt/yql/tests/sql/suites/join/full_trivial_udf_call.sql new file mode 100644 index 0000000000..d2acbd2b88 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/full_trivial_udf_call.sql @@ -0,0 +1,6 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +select Input1.key, Input1.subkey, SimpleUdf::Concat(coalesce(Input1.value, ""), coalesce(Input3.value, "")) as value +from plato.Input1 +full join plato.Input3 using (key) +order by Input1.key, Input1.subkey, value;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/gj_countries1.txt.attr b/yt/yql/tests/sql/suites/join/gj_countries1.txt.attr new file mode 100644 index 0000000000..f9b5e0e010 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/gj_countries1.txt.attr @@ -0,0 +1,18 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "country_id"; + "required" = %true; + "type" = "string" + }; + { + "name" = "country_name"; + "required" = %true; + "type" = "string" + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/join/gj_customers1.txt.attr b/yt/yql/tests/sql/suites/join/gj_customers1.txt.attr new file mode 100644 index 0000000000..34f229c4fa --- /dev/null +++ b/yt/yql/tests/sql/suites/join/gj_customers1.txt.attr @@ -0,0 +1,18 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "customer_id"; + "required" = %true; + "type" = "string" + }; + { + "name" = "country_id"; + "required" = %true; + "type" = "string" + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/join/grace_join1-grace.cfg b/yt/yql/tests/sql/suites/join/grace_join1-grace.cfg new file mode 100644 index 0000000000..11f6f5b18b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/grace_join1-grace.cfg @@ -0,0 +1,4 @@ +in customers1 gj_customers1.txt +in countries1 gj_countries1.txt +providers dq +pragma Dq.HashJoinMode='grace'; diff --git a/yt/yql/tests/sql/suites/join/grace_join1-map.cfg b/yt/yql/tests/sql/suites/join/grace_join1-map.cfg new file mode 100644 index 0000000000..f787c0665b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/grace_join1-map.cfg @@ -0,0 +1,4 @@ +in customers1 gj_customers1.txt +in countries1 gj_countries1.txt +providers dq +pragma Dq.HashJoinMode='map'; diff --git a/yt/yql/tests/sql/suites/join/grace_join1-off.cfg b/yt/yql/tests/sql/suites/join/grace_join1-off.cfg new file mode 100644 index 0000000000..5c48d49545 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/grace_join1-off.cfg @@ -0,0 +1,5 @@ +in customers1 gj_customers1.txt +in countries1 gj_countries1.txt +providers dq +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/grace_join1.cfg b/yt/yql/tests/sql/suites/join/grace_join1.cfg new file mode 100644 index 0000000000..a64c260418 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/grace_join1.cfg @@ -0,0 +1,3 @@ +in customers1 gj_customers1.txt +in countries1 gj_countries1.txt +providers dq diff --git a/yt/yql/tests/sql/suites/join/grace_join1.sql b/yt/yql/tests/sql/suites/join/grace_join1.sql new file mode 100644 index 0000000000..42d4fdf492 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/grace_join1.sql @@ -0,0 +1,11 @@ +USE plato; +pragma DisableSimpleColumns; + +select +cust.customer_id, cntr.country_name +from +plato.countries1 as cntr +join +plato.customers1 as cust +on cntr.country_id = cust.country_id +where cntr.country_id = "11"; diff --git a/yt/yql/tests/sql/suites/join/grace_join2.cfg b/yt/yql/tests/sql/suites/join/grace_join2.cfg new file mode 100644 index 0000000000..7fa7de708f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/grace_join2.cfg @@ -0,0 +1,3 @@ +in customers1 gj_customers1.txt +providers dq +pragma Dq.HashJoinMode='graceandself'; diff --git a/yt/yql/tests/sql/suites/join/grace_join2.sql b/yt/yql/tests/sql/suites/join/grace_join2.sql new file mode 100644 index 0000000000..1b10d992e3 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/grace_join2.sql @@ -0,0 +1,10 @@ +USE plato; +pragma DisableSimpleColumns; + +select +c1.customer_id, c2.customer_id +from +plato.customers1 as c1 +join +plato.customers1 as c2 +on c1.country_id = c2.country_id order by c1.customer_id, c2.customer_id; diff --git a/yt/yql/tests/sql/suites/join/group_compact_by.cfg b/yt/yql/tests/sql/suites/join/group_compact_by.cfg new file mode 100644 index 0000000000..7697efeaa2 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/group_compact_by.cfg @@ -0,0 +1 @@ +in Input input8.txt diff --git a/yt/yql/tests/sql/suites/join/group_compact_by.sql b/yt/yql/tests/sql/suites/join/group_compact_by.sql new file mode 100644 index 0000000000..d5f33612df --- /dev/null +++ b/yt/yql/tests/sql/suites/join/group_compact_by.sql @@ -0,0 +1,14 @@ +USE plato; + +PRAGMA yt.JoinMergeForce = "1"; +pragma yt.JoinMergeTablesLimit="10"; + +SELECT key1, subkey1 +FROM + ( + SELECT a.key as key1, a.subkey as subkey1 + FROM (SELECT * FROM Input WHERE subkey != "bar") AS a + JOIN (SELECT * FROM Input WHERE subkey != "foo") AS b + ON a.key = b.key AND a.subkey = b.subkey + ) +GROUP COMPACT BY key1, subkey1; diff --git a/yt/yql/tests/sql/suites/join/inner_all-off.cfg b/yt/yql/tests/sql/suites/join/inner_all-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_all-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/inner_all.cfg b/yt/yql/tests/sql/suites/join/inner_all.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_all.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/inner_all.sql b/yt/yql/tests/sql/suites/join/inner_all.sql new file mode 100644 index 0000000000..22803ca6b6 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_all.sql @@ -0,0 +1,6 @@ +PRAGMA DisableSimpleColumns; +use plato; +SELECT * +FROM Input2 AS a +JOIN Input3 AS b +ON a.value == b.value; diff --git a/yt/yql/tests/sql/suites/join/inner_all_right-off.cfg b/yt/yql/tests/sql/suites/join/inner_all_right-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_all_right-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/inner_all_right.cfg b/yt/yql/tests/sql/suites/join/inner_all_right.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_all_right.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/inner_all_right.sql b/yt/yql/tests/sql/suites/join/inner_all_right.sql new file mode 100644 index 0000000000..ec84b11ad4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_all_right.sql @@ -0,0 +1,6 @@ +PRAGMA DisableSimpleColumns; +use plato; +SELECT b.* +FROM Input2 AS a +JOIN Input3 AS b +ON a.value == b.value; diff --git a/yt/yql/tests/sql/suites/join/inner_grouped-off.cfg b/yt/yql/tests/sql/suites/join/inner_grouped-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_grouped-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/inner_grouped.cfg b/yt/yql/tests/sql/suites/join/inner_grouped.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_grouped.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/inner_grouped.sql b/yt/yql/tests/sql/suites/join/inner_grouped.sql new file mode 100644 index 0000000000..14d580b119 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_grouped.sql @@ -0,0 +1,2 @@ +PRAGMA DisableSimpleColumns; +select Input1.key as key, max(Input3.value) as value from plato.Input1 inner join plato.Input3 using (key) group by Input1.key order by key; diff --git a/yt/yql/tests/sql/suites/join/inner_grouped_by_expr-off.cfg b/yt/yql/tests/sql/suites/join/inner_grouped_by_expr-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_grouped_by_expr-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/inner_grouped_by_expr.cfg b/yt/yql/tests/sql/suites/join/inner_grouped_by_expr.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_grouped_by_expr.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/inner_grouped_by_expr.sql b/yt/yql/tests/sql/suites/join/inner_grouped_by_expr.sql new file mode 100644 index 0000000000..97f05fef2d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_grouped_by_expr.sql @@ -0,0 +1,3 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +select keyz, max(Input3.value) as value from plato.Input1 inner join plato.Input3 using (key) group by Input1.key as keyz order by keyz; diff --git a/yt/yql/tests/sql/suites/join/inner_on_key_only-off.cfg b/yt/yql/tests/sql/suites/join/inner_on_key_only-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_on_key_only-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/inner_on_key_only.cfg b/yt/yql/tests/sql/suites/join/inner_on_key_only.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_on_key_only.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/inner_on_key_only.sql b/yt/yql/tests/sql/suites/join/inner_on_key_only.sql new file mode 100644 index 0000000000..e2d7e57d63 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_on_key_only.sql @@ -0,0 +1,2 @@ +PRAGMA DisableSimpleColumns; +select Input1.key, Input1.subkey, Input3.value from plato.Input1 inner join plato.Input3 on Input1.key = Input3.key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/inner_table_and_view.cfg b/yt/yql/tests/sql/suites/join/inner_table_and_view.cfg new file mode 100644 index 0000000000..8b7633b301 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_table_and_view.cfg @@ -0,0 +1 @@ +in Input view_input.txt diff --git a/yt/yql/tests/sql/suites/join/inner_trivial-off.cfg b/yt/yql/tests/sql/suites/join/inner_trivial-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_trivial-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/inner_trivial.cfg b/yt/yql/tests/sql/suites/join/inner_trivial.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_trivial.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/inner_trivial.sql b/yt/yql/tests/sql/suites/join/inner_trivial.sql new file mode 100644 index 0000000000..19db34045c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_trivial.sql @@ -0,0 +1,2 @@ +PRAGMA DisableSimpleColumns; +select Input1.key, Input1.subkey, Input3.value from plato.Input1 inner join plato.Input3 using (key);
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/inner_trivial_from_concat-off.cfg b/yt/yql/tests/sql/suites/join/inner_trivial_from_concat-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_trivial_from_concat-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/inner_trivial_from_concat.cfg b/yt/yql/tests/sql/suites/join/inner_trivial_from_concat.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_trivial_from_concat.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/inner_trivial_from_concat.sql b/yt/yql/tests/sql/suites/join/inner_trivial_from_concat.sql new file mode 100644 index 0000000000..aa317b9784 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_trivial_from_concat.sql @@ -0,0 +1,3 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +select A.key, A.subkey, B.value from plato.concat(Input1, Input2) as A inner join plato.Input3 as B using (key);
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/inner_with_order-off.cfg b/yt/yql/tests/sql/suites/join/inner_with_order-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_with_order-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/inner_with_order.cfg b/yt/yql/tests/sql/suites/join/inner_with_order.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_with_order.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/inner_with_order.sql b/yt/yql/tests/sql/suites/join/inner_with_order.sql new file mode 100644 index 0000000000..471fb485ec --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_with_order.sql @@ -0,0 +1,2 @@ +PRAGMA DisableSimpleColumns; +select Input1.key as key, Input1.subkey, Input3.value from plato.Input1 inner join plato.Input3 using (key) order by key desc;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/inner_with_select-off.cfg b/yt/yql/tests/sql/suites/join/inner_with_select-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_with_select-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/inner_with_select.cfg b/yt/yql/tests/sql/suites/join/inner_with_select.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_with_select.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/inner_with_select.sql b/yt/yql/tests/sql/suites/join/inner_with_select.sql new file mode 100644 index 0000000000..b1e0c35edd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/inner_with_select.sql @@ -0,0 +1,9 @@ +PRAGMA DisableSimpleColumns; +select + Input1.key as key, + Input1.subkey as subkey, + selected.value as value +from plato.Input1 +inner join (select key, value || value as value from plato.Input3) as selected + using (key) +order by key desc;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/input6.txt.attr b/yt/yql/tests/sql/suites/join/input6.txt.attr new file mode 100644 index 0000000000..ad1624a955 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/input6.txt.attr @@ -0,0 +1,9 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key1";["DataType";"Utf8"]]; + ["subkey1";["DataType";"Utf8"]]; + ["key";["DataType";"Utf8"]]; + ["subkey";["DataType";"Utf8"]]; + ["value";["DataType";"Utf8"]]] + ]; +}} diff --git a/yt/yql/tests/sql/suites/join/input8.txt.attr b/yt/yql/tests/sql/suites/join/input8.txt.attr new file mode 100644 index 0000000000..7ec3f318dc --- /dev/null +++ b/yt/yql/tests/sql/suites/join/input8.txt.attr @@ -0,0 +1,13 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]]] + ]; + "SortDirections"=[1;1]; + "SortedBy"=["key";"subkey"]; + "SortedByTypes"=[["DataType";"String"];["DataType";"String"]]; + "SortMembers"=["key";"subkey"]; + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/input9.txt.attr b/yt/yql/tests/sql/suites/join/input9.txt.attr new file mode 100644 index 0000000000..ed13e20223 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/input9.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/join/input_left.txt.attr b/yt/yql/tests/sql/suites/join/input_left.txt.attr new file mode 100644 index 0000000000..58ca2c84ba --- /dev/null +++ b/yt/yql/tests/sql/suites/join/input_left.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["k";["DataType";"Uint64"]]; + ["sk";["DataType";"Utf8"]]; + ["v";["DataType";"Utf8"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/join/input_right.txt.attr b/yt/yql/tests/sql/suites/join/input_right.txt.attr new file mode 100644 index 0000000000..58ca2c84ba --- /dev/null +++ b/yt/yql/tests/sql/suites/join/input_right.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["k";["DataType";"Uint64"]]; + ["sk";["DataType";"Utf8"]]; + ["v";["DataType";"Utf8"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/join/join_and_distinct_key-off.cfg b/yt/yql/tests/sql/suites/join/join_and_distinct_key-off.cfg new file mode 100644 index 0000000000..76a2a2b6a4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_and_distinct_key-off.cfg @@ -0,0 +1,3 @@ +in Input input_intersect.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/join_and_distinct_key.cfg b/yt/yql/tests/sql/suites/join/join_and_distinct_key.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_and_distinct_key.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/join/join_and_distinct_key.sql b/yt/yql/tests/sql/suites/join/join_and_distinct_key.sql new file mode 100644 index 0000000000..08037b8f7d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_and_distinct_key.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +SELECT + count(i1.key) as count, + count(distinct i1.key) as uniq_count +FROM plato.Input as i1 JOIN plato.Input AS i2 on cast(i1.key as uint32) / 100 == cast(i2.subkey as uint32) / 100 +; diff --git a/yt/yql/tests/sql/suites/join/join_cbo_3_tables.cfg b/yt/yql/tests/sql/suites/join/join_cbo_3_tables.cfg new file mode 100644 index 0000000000..6978b80cd9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_cbo_3_tables.cfg @@ -0,0 +1,4 @@ +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/join_cbo_3_tables.sql b/yt/yql/tests/sql/suites/join/join_cbo_3_tables.sql new file mode 100644 index 0000000000..b848360746 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_cbo_3_tables.sql @@ -0,0 +1,11 @@ +use plato; +pragma warning("disable", "8001"); -- CBO_MISSING_TABLE_STATS + +pragma CostBasedOptimizer="pg"; + +select i1.value, i2.value, i3.value, i4.value +from Input1 as i1 +join Input2 as i2 on i1.key=i2.key +join Input3 as i3 on i1.key=i3.key +join Input4 as i4 on i1.key=i4.key +order by i1.value, i2.value, i3.value, i4.value; diff --git a/yt/yql/tests/sql/suites/join/join_comp_common_table-off.cfg b/yt/yql/tests/sql/suites/join/join_comp_common_table-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_comp_common_table-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/join_comp_common_table.cfg b/yt/yql/tests/sql/suites/join/join_comp_common_table.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_comp_common_table.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/join_comp_common_table.sql b/yt/yql/tests/sql/suites/join/join_comp_common_table.sql new file mode 100644 index 0000000000..770d18ecd5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_comp_common_table.sql @@ -0,0 +1,15 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +use plato; + +$i = (select AsList(key) as x from Input); +$j = (select Just(AsList(key)) as y from Input); +select a.x as zzz,b.y as fff from $i as a inner join $j as b on a.x = b.y order by zzz,fff; +select a.x as zzz,b.y as fff from $i as a right join $j as b on a.x = b.y order by zzz,fff; +select a.x as zzz,b.y as fff from $i as a left join $j as b on a.x = b.y order by zzz,fff; +select a.x as zzz from $i as a left semi join $j as b on a.x = b.y order by zzz; +select a.x as zzz from $i as a left only join $j as b on a.x = b.y order by zzz; +select b.y as fff from $i as a right semi join $j as b on a.x = b.y order by fff; +select b.y as fff from $i as a right only join $j as b on a.x = b.y order by fff; +select a.x as zzz,b.y as fff from $i as a full join $j as b on a.x = b.y order by zzz,fff; +select a.x as zzz,b.y as fff from $i as a exclusion join $j as b on a.x = b.y order by zzz,fff; diff --git a/yt/yql/tests/sql/suites/join/join_comp_map_table-off.cfg b/yt/yql/tests/sql/suites/join/join_comp_map_table-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_comp_map_table-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/join_comp_map_table.cfg b/yt/yql/tests/sql/suites/join/join_comp_map_table.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_comp_map_table.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/join_comp_map_table.sql b/yt/yql/tests/sql/suites/join/join_comp_map_table.sql new file mode 100644 index 0000000000..4f64d5e685 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_comp_map_table.sql @@ -0,0 +1,14 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +pragma yt.MapJoinLimit="1m"; +use plato; + +$i = (select AsList(key) as x from Input); +$j = (select Just(AsList(key)) as y from Input); +select a.x as zzz,b.y as fff from $i as a inner join $j as b on a.x = b.y; +select a.x as zzz,b.y as fff from $i as a right join $j as b on a.x = b.y; +select a.x as zzz,b.y as fff from $i as a left join $j as b on a.x = b.y; +select a.x as zzz from $i as a left semi join $j as b on a.x = b.y; +select a.x as zzz from $i as a left only join $j as b on a.x = b.y; +select b.y as fff from $i as a right semi join $j as b on a.x = b.y; +select b.y as fff from $i as a right only join $j as b on a.x = b.y; diff --git a/yt/yql/tests/sql/suites/join/join_key_cmp_udf-off.cfg b/yt/yql/tests/sql/suites/join/join_key_cmp_udf-off.cfg new file mode 100644 index 0000000000..3892ddff67 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_key_cmp_udf-off.cfg @@ -0,0 +1,4 @@ +in Input input.txt +udf string_udf +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/join_key_cmp_udf.cfg b/yt/yql/tests/sql/suites/join/join_key_cmp_udf.cfg new file mode 100644 index 0000000000..c6596e362c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_key_cmp_udf.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/join/join_key_cmp_udf.sql b/yt/yql/tests/sql/suites/join/join_key_cmp_udf.sql new file mode 100644 index 0000000000..70a160e96d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_key_cmp_udf.sql @@ -0,0 +1,11 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + ib.* +FROM Input as ia +JOIN Input as ib +ON Unicode::ToUpper(CAST(ia.key AS Utf8)) == ib.subkey +ORDER BY ib.key, ib.subkey diff --git a/yt/yql/tests/sql/suites/join/join_left_cbo.cfg b/yt/yql/tests/sql/suites/join/join_left_cbo.cfg new file mode 100644 index 0000000000..559fde513f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_left_cbo.cfg @@ -0,0 +1,2 @@ +in Input1 input1.txt +in Input2 input2.txt diff --git a/yt/yql/tests/sql/suites/join/join_left_cbo.sql b/yt/yql/tests/sql/suites/join/join_left_cbo.sql new file mode 100644 index 0000000000..d3f698da2c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_left_cbo.sql @@ -0,0 +1,9 @@ +use plato; +pragma warning("disable", "8001"); -- CBO_MISSING_TABLE_STATS + +pragma CostBasedOptimizer="PG"; + +select i1.value, i2.value +from Input1 as i1 +left join Input2 as i2 on i1.key=i2.key +order by i1.value, i2.value; diff --git a/yt/yql/tests/sql/suites/join/join_no_correlation_in_order_by-off.cfg b/yt/yql/tests/sql/suites/join/join_no_correlation_in_order_by-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_no_correlation_in_order_by-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/join_no_correlation_in_order_by.cfg b/yt/yql/tests/sql/suites/join/join_no_correlation_in_order_by.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_no_correlation_in_order_by.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/join_no_correlation_in_order_by.sql b/yt/yql/tests/sql/suites/join/join_no_correlation_in_order_by.sql new file mode 100644 index 0000000000..1f3f1f4d95 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_no_correlation_in_order_by.sql @@ -0,0 +1,12 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +$data = (SELECT key as kk, subkey as sk, value as val FROM Input WHERE cast(key as uint32)/100 > 3); + +--INSERT INTO Output +SELECT + * +FROM Input JOIN $data as d ON Input.subkey = d.kk +ORDER BY key, val +; diff --git a/yt/yql/tests/sql/suites/join/join_right_cbo.cfg b/yt/yql/tests/sql/suites/join/join_right_cbo.cfg new file mode 100644 index 0000000000..559fde513f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_right_cbo.cfg @@ -0,0 +1,2 @@ +in Input1 input1.txt +in Input2 input2.txt diff --git a/yt/yql/tests/sql/suites/join/join_right_cbo.sql b/yt/yql/tests/sql/suites/join/join_right_cbo.sql new file mode 100644 index 0000000000..99ed74da72 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_right_cbo.sql @@ -0,0 +1,9 @@ +use plato; +pragma warning("disable", "8001"); -- CBO_MISSING_TABLE_STATS + +pragma CostBasedOptimizer="PG"; + +select i1.value, i2.value +from Input1 as i1 +right join Input2 as i2 on i1.key=i2.key +order by i1.value, i2.value; diff --git a/yt/yql/tests/sql/suites/join/join_semi_correlation_in_order_by-off.cfg b/yt/yql/tests/sql/suites/join/join_semi_correlation_in_order_by-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_semi_correlation_in_order_by-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/join_semi_correlation_in_order_by.cfg b/yt/yql/tests/sql/suites/join/join_semi_correlation_in_order_by.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_semi_correlation_in_order_by.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/join_semi_correlation_in_order_by.sql b/yt/yql/tests/sql/suites/join/join_semi_correlation_in_order_by.sql new file mode 100644 index 0000000000..4065705a77 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_semi_correlation_in_order_by.sql @@ -0,0 +1,12 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +$data = (SELECT key as kk, subkey as sk, value as val FROM Input WHERE cast(key as uint32)/100 > 3); + +--INSERT INTO Output +SELECT + * +FROM Input JOIN $data as d ON Input.subkey = d.kk +ORDER BY key, d.val +; diff --git a/yt/yql/tests/sql/suites/join/join_table_conflict_fail.cfg b/yt/yql/tests/sql/suites/join/join_table_conflict_fail.cfg new file mode 100644 index 0000000000..9217c920f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_table_conflict_fail.cfg @@ -0,0 +1,2 @@ +xfail +in Input input.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/join_table_conflict_fail.sql b/yt/yql/tests/sql/suites/join/join_table_conflict_fail.sql new file mode 100644 index 0000000000..45fb1781a5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_table_conflict_fail.sql @@ -0,0 +1,11 @@ +/* custom error:column name: value conflicted without correlation name it may be one of: Input.value, d.value*/ +PRAGMA DisableSimpleColumns; +USE plato; + +$data = (SELECT key as kk, subkey as sk, value || value as value FROM Input WHERE cast(key as uint32)/100 > 3); + +--INSERT INTO Output +SELECT + value, key -- value is conflicted between Input and d sources +FROM Input JOIN $data as d ON Input.subkey = d.kk +; diff --git a/yt/yql/tests/sql/suites/join/join_with_dot_without_alias.cfg b/yt/yql/tests/sql/suites/join/join_with_dot_without_alias.cfg new file mode 100644 index 0000000000..702bbb5a52 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_with_dot_without_alias.cfg @@ -0,0 +1,2 @@ +in Input input.txt +in Input.with.dot input_tutorial_users.txt diff --git a/yt/yql/tests/sql/suites/join/join_with_duplicate_keys_on_sorted-off.cfg b/yt/yql/tests/sql/suites/join/join_with_duplicate_keys_on_sorted-off.cfg new file mode 100644 index 0000000000..49af2b95f4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_with_duplicate_keys_on_sorted-off.cfg @@ -0,0 +1,4 @@ +in SortedByKey sorted_by_key1.txt +in SortedByKeySubkey sorted_by_key_subkey.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/join_with_duplicate_keys_on_sorted.cfg b/yt/yql/tests/sql/suites/join/join_with_duplicate_keys_on_sorted.cfg new file mode 100644 index 0000000000..464068db6a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_with_duplicate_keys_on_sorted.cfg @@ -0,0 +1,2 @@ +in SortedByKey sorted_by_key1.txt +in SortedByKeySubkey sorted_by_key_subkey.txt diff --git a/yt/yql/tests/sql/suites/join/join_with_duplicate_keys_on_sorted.sql b/yt/yql/tests/sql/suites/join/join_with_duplicate_keys_on_sorted.sql new file mode 100644 index 0000000000..9b350d29a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_with_duplicate_keys_on_sorted.sql @@ -0,0 +1,8 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="3.0"; + + +FROM SortedByKeySubkey AS a JOIN SortedByKey AS b ON a.key=b.key AND a.subkey=b.key +SELECT * ORDER BY a.value, b.value; diff --git a/yt/yql/tests/sql/suites/join/join_without_column-off.cfg b/yt/yql/tests/sql/suites/join/join_without_column-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_without_column-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/join_without_column.cfg b/yt/yql/tests/sql/suites/join/join_without_column.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_without_column.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/join_without_column.sql b/yt/yql/tests/sql/suites/join/join_without_column.sql new file mode 100644 index 0000000000..4c9c4bd612 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_without_column.sql @@ -0,0 +1,14 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +$data = (SELECT key as kk, subkey as sk, value FROM Input WHERE cast(key as uint32)/100 < 5); + +--INSERT INTO Output +SELECT + * +WITHOUT + d.value +FROM Input JOIN $data as d ON Input.subkey = cast(cast(d.kk as uint32)/100 as string) +ORDER BY key +; diff --git a/yt/yql/tests/sql/suites/join/join_without_correlation_and_dict_access-off.cfg b/yt/yql/tests/sql/suites/join/join_without_correlation_and_dict_access-off.cfg new file mode 100644 index 0000000000..76a2a2b6a4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_without_correlation_and_dict_access-off.cfg @@ -0,0 +1,3 @@ +in Input input_intersect.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/join_without_correlation_and_dict_access.cfg b/yt/yql/tests/sql/suites/join/join_without_correlation_and_dict_access.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_without_correlation_and_dict_access.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/join/join_without_correlation_and_dict_access.sql b/yt/yql/tests/sql/suites/join/join_without_correlation_and_dict_access.sql new file mode 100644 index 0000000000..280a971538 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_without_correlation_and_dict_access.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +use plato; + +$data_dict = (select + mod, + YQL::ToIndexDict(ListSort(aggregate_list(key))) as dk, + ListSort(aggregate_list(subkey)) as ls, + ListSort(aggregate_list(value)) as lv +from Input +group by cast(key as uint32) % 10 as mod); + +--INSERT INTO Output +SELECT +--DISTINCT + dk[2], + key, + value +FROM Input JOIN $data_dict AS d on cast(Input.key as uint32) / 100 == d.mod +order by key, value +; diff --git a/yt/yql/tests/sql/suites/join/join_without_correlation_and_struct_access-off.cfg b/yt/yql/tests/sql/suites/join/join_without_correlation_and_struct_access-off.cfg new file mode 100644 index 0000000000..76a2a2b6a4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_without_correlation_and_struct_access-off.cfg @@ -0,0 +1,3 @@ +in Input input_intersect.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/join_without_correlation_and_struct_access.cfg b/yt/yql/tests/sql/suites/join/join_without_correlation_and_struct_access.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_without_correlation_and_struct_access.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/join/join_without_correlation_and_struct_access.sql b/yt/yql/tests/sql/suites/join/join_without_correlation_and_struct_access.sql new file mode 100644 index 0000000000..d1934f0bfc --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_without_correlation_and_struct_access.sql @@ -0,0 +1,18 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +use plato; + +$data = ( select + cast(key as uint32) % 10 as mod, + (key as kk, subkey as sk) as struct_field +from Input); + +--INSERT INTO Output +SELECT + mod, + struct_field.kk as mod_key, + key, + value +FROM Input JOIN $data AS d on cast(Input.key as uint32) / 100 == d.mod +order by key, mod_key, value +; diff --git a/yt/yql/tests/sql/suites/join/join_without_correlation_names-off.cfg b/yt/yql/tests/sql/suites/join/join_without_correlation_names-off.cfg new file mode 100644 index 0000000000..76a2a2b6a4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_without_correlation_names-off.cfg @@ -0,0 +1,3 @@ +in Input input_intersect.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/join_without_correlation_names.cfg b/yt/yql/tests/sql/suites/join/join_without_correlation_names.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_without_correlation_names.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/join/join_without_correlation_names.sql b/yt/yql/tests/sql/suites/join/join_without_correlation_names.sql new file mode 100644 index 0000000000..98922c13e0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/join_without_correlation_names.sql @@ -0,0 +1,11 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +$data = (SELECT key as kk, subkey as sk, value as val FROM Input WHERE cast(key as uint32)/100 > 3); + +--INSERT INTO Output +SELECT + value, val, key, sk +FROM Input JOIN $data as d ON Input.subkey = d.kk +ORDER BY value, val; diff --git a/yt/yql/tests/sql/suites/join/kv1_sorted.txt.attr b/yt/yql/tests/sql/suites/join/kv1_sorted.txt.attr new file mode 100644 index 0000000000..0b9487ba64 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/kv1_sorted.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k1"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v1"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u1"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/kv1_sorted1.txt.attr b/yt/yql/tests/sql/suites/join/kv1_sorted1.txt.attr new file mode 100644 index 0000000000..0b9487ba64 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/kv1_sorted1.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k1"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v1"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u1"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/kv2_sorted.txt.attr b/yt/yql/tests/sql/suites/join/kv2_sorted.txt.attr new file mode 100644 index 0000000000..387ceb1b55 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/kv2_sorted.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u2"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/kv2_sorted1.txt.attr b/yt/yql/tests/sql/suites/join/kv2_sorted1.txt.attr new file mode 100644 index 0000000000..387ceb1b55 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/kv2_sorted1.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u2"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/kv3_sorted.txt.attr b/yt/yql/tests/sql/suites/join/kv3_sorted.txt.attr new file mode 100644 index 0000000000..90e6a79548 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/kv3_sorted.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k3"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v3"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u3"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/kv4_sorted.txt.attr b/yt/yql/tests/sql/suites/join/kv4_sorted.txt.attr new file mode 100644 index 0000000000..ea731dd20b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/kv4_sorted.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %true + > + [ + { + "name" = "k4"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v4"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u4"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/kv5_sorted.txt.attr b/yt/yql/tests/sql/suites/join/kv5_sorted.txt.attr new file mode 100644 index 0000000000..05a419bcca --- /dev/null +++ b/yt/yql/tests/sql/suites/join/kv5_sorted.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k5"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v5"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u5"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/late_mergejoin_on_empty.cfg b/yt/yql/tests/sql/suites/join/late_mergejoin_on_empty.cfg new file mode 100644 index 0000000000..04719e2ed1 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/late_mergejoin_on_empty.cfg @@ -0,0 +1,2 @@ +in Input input1.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/late_mergejoin_on_empty.sql b/yt/yql/tests/sql/suites/join/late_mergejoin_on_empty.sql new file mode 100644 index 0000000000..b0dd13c10d --- /dev/null +++ b/yt/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/yt/yql/tests/sql/suites/join/leaf.txt.attr b/yt/yql/tests/sql/suites/join/leaf.txt.attr new file mode 100644 index 0000000000..0a764a6b82 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/leaf.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint64"]]; + ["value";["OptionalType";["DataType";"String"]]]] + ]; +}} diff --git a/yt/yql/tests/sql/suites/join/left_all-off.cfg b/yt/yql/tests/sql/suites/join/left_all-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_all-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/left_all.cfg b/yt/yql/tests/sql/suites/join/left_all.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_all.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/left_all.sql b/yt/yql/tests/sql/suites/join/left_all.sql new file mode 100644 index 0000000000..b980bc85d2 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_all.sql @@ -0,0 +1,6 @@ +PRAGMA DisableSimpleColumns; +use plato; +SELECT * +FROM Input2 AS a +LEFT JOIN Input3 AS b +ON a.value == b.value; diff --git a/yt/yql/tests/sql/suites/join/left_cast_to_string-off.cfg b/yt/yql/tests/sql/suites/join/left_cast_to_string-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_cast_to_string-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/left_cast_to_string.cfg b/yt/yql/tests/sql/suites/join/left_cast_to_string.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_cast_to_string.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/left_cast_to_string.sql b/yt/yql/tests/sql/suites/join/left_cast_to_string.sql new file mode 100644 index 0000000000..5d41a78255 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_cast_to_string.sql @@ -0,0 +1,2 @@ +PRAGMA DisableSimpleColumns; +select Input1.key as key, Input1.subkey, Cast(Input3.value as varchar) as value from plato.Input1 left join plato.Input3 using (key) order by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/left_join_input1.txt.attr b/yt/yql/tests/sql/suites/join/left_join_input1.txt.attr new file mode 100644 index 0000000000..4f113053bc --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_input1.txt.attr @@ -0,0 +1,10 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["Key1";["OptionalType";["DataType";"Int32"]]]; + ["Key2";["OptionalType";["DataType";"String"]]]; + ["Fk1";["OptionalType";["DataType";"String"]]]; + ["Value";["OptionalType";["DataType";"String"]]]] + ]; + }; +} diff --git a/yt/yql/tests/sql/suites/join/left_join_input2.txt.attr b/yt/yql/tests/sql/suites/join/left_join_input2.txt.attr new file mode 100644 index 0000000000..be5e16e2ca --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_input2.txt.attr @@ -0,0 +1,8 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["Key";["DataType";"String"]]; + ["Value";["OptionalType";["DataType";"Int32"]]]] + ]; + } +} diff --git a/yt/yql/tests/sql/suites/join/left_join_input3.txt.attr b/yt/yql/tests/sql/suites/join/left_join_input3.txt.attr new file mode 100644 index 0000000000..be5e16e2ca --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_input3.txt.attr @@ -0,0 +1,8 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["Key";["DataType";"String"]]; + ["Value";["OptionalType";["DataType";"Int32"]]]] + ]; + } +} diff --git a/yt/yql/tests/sql/suites/join/left_join_null_column-off.cfg b/yt/yql/tests/sql/suites/join/left_join_null_column-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_null_column-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/left_join_null_column.cfg b/yt/yql/tests/sql/suites/join/left_join_null_column.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_null_column.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/left_join_null_column.sql b/yt/yql/tests/sql/suites/join/left_join_null_column.sql new file mode 100644 index 0000000000..c7e38d6e0c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_null_column.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +/* postgres can not */ + +USE plato; + +$t = [<|"x":"150", "y":1, "z":Null|>, <|"x":"150", "y":2, "z":Null|>]; + +SELECT * FROM Input1 AS a LEFT JOIN AS_TABLE($t) AS b ON a.key = b.x ORDER BY key, y; + diff --git a/yt/yql/tests/sql/suites/join/left_join_right_pushdown_nested_left.cfg b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_nested_left.cfg new file mode 100644 index 0000000000..a0d2d24b7f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_nested_left.cfg @@ -0,0 +1,3 @@ +in Input1 left_join_input1.txt +in Input2 left_join_input2.txt +in Input3 left_join_input3.txt diff --git a/yt/yql/tests/sql/suites/join/left_join_right_pushdown_nested_left.sql b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_nested_left.sql new file mode 100644 index 0000000000..da815ce13b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_nested_left.sql @@ -0,0 +1,11 @@ +PRAGMA FilterPushdownOverJoinOptionalSide; + +SELECT t1.Key1, t1.Key2, t1.Fk1, t1.Value, t2.Key, t2.Value, t3.Value + +FROM plato.Input1 AS t1 +LEFT JOIN plato.Input2 AS t2 +ON t1.Fk1 = t2.Key +INNER JOIN plato.Input3 as t3 +ON t1.Fk1 = t3.Key + +WHERE t2.Value > 1001; diff --git a/yt/yql/tests/sql/suites/join/left_join_right_pushdown_nested_right.cfg b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_nested_right.cfg new file mode 100644 index 0000000000..a0d2d24b7f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_nested_right.cfg @@ -0,0 +1,3 @@ +in Input1 left_join_input1.txt +in Input2 left_join_input2.txt +in Input3 left_join_input3.txt diff --git a/yt/yql/tests/sql/suites/join/left_join_right_pushdown_nested_right.sql b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_nested_right.sql new file mode 100644 index 0000000000..fe7fdeea48 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_nested_right.sql @@ -0,0 +1,10 @@ +PRAGMA FilterPushdownOverJoinOptionalSide; + +SELECT t1.Key1, t1.Key2, t1.Fk1, t1.Value, t2.Key, t2.Value, t3.Value + +FROM plato.Input1 AS t1 +CROSS JOIN plato.Input3 AS t3 +LEFT JOIN plato.Input2 AS t2 +ON t1.Fk1 = t2.Key + +WHERE t2.Value > 1001; diff --git a/yt/yql/tests/sql/suites/join/left_join_right_pushdown_no_opt.cfg b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_no_opt.cfg new file mode 100644 index 0000000000..a0d2d24b7f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_no_opt.cfg @@ -0,0 +1,3 @@ +in Input1 left_join_input1.txt +in Input2 left_join_input2.txt +in Input3 left_join_input3.txt diff --git a/yt/yql/tests/sql/suites/join/left_join_right_pushdown_no_opt.sql b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_no_opt.sql new file mode 100644 index 0000000000..de596ae77b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_no_opt.sql @@ -0,0 +1,7 @@ +PRAGMA FilterPushdownOverJoinOptionalSide; + +SELECT t1.Key1, t1.Key2, t1.Fk1, t1.Value, t2.Key, t2.Value FROM plato.Input2 AS t2 +RIGHT JOIN plato.Input1 AS t1 +ON t2.Key = t1.Fk1 +WHERE t1.Key1 > 104 +ORDER BY t1.Key1, t1.Key2; diff --git a/yt/yql/tests/sql/suites/join/left_join_right_pushdown_null.cfg b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_null.cfg new file mode 100644 index 0000000000..a0d2d24b7f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_null.cfg @@ -0,0 +1,3 @@ +in Input1 left_join_input1.txt +in Input2 left_join_input2.txt +in Input3 left_join_input3.txt diff --git a/yt/yql/tests/sql/suites/join/left_join_right_pushdown_null.sql b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_null.sql new file mode 100644 index 0000000000..ec45c754b4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_null.sql @@ -0,0 +1,7 @@ +PRAGMA FilterPushdownOverJoinOptionalSide; + +SELECT t1.Key1, t1.Key2, t1.Fk1, t1.Value, t2.Key, t2.Value FROM plato.Input1 AS t1 +LEFT JOIN plato.Input2 AS t2 +ON t1.Fk1 = t2.Key +WHERE t2.Value IS NULL +ORDER BY t1.Key1, t1.Key2; diff --git a/yt/yql/tests/sql/suites/join/left_join_right_pushdown_simple.cfg b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_simple.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_simple.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/left_join_right_pushdown_simple.sql b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_simple.sql new file mode 100644 index 0000000000..e1c15a8d52 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_join_right_pushdown_simple.sql @@ -0,0 +1,9 @@ +PRAGMA DisableSimpleColumns; +PRAGMA FilterPushdownOverJoinOptionalSide; + +use plato; +SELECT * +FROM Input2 AS a +LEFT JOIN Input3 AS b +ON a.value == b.value +WHERE b.value >= "ddd"; diff --git a/yt/yql/tests/sql/suites/join/left_null_literal-off.cfg b/yt/yql/tests/sql/suites/join/left_null_literal-off.cfg new file mode 100644 index 0000000000..a838c2cc3a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_null_literal-off.cfg @@ -0,0 +1,3 @@ +out Output output.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/left_null_literal.cfg b/yt/yql/tests/sql/suites/join/left_null_literal.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_null_literal.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/join/left_null_literal.sql b/yt/yql/tests/sql/suites/join/left_null_literal.sql new file mode 100644 index 0000000000..4325869895 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_null_literal.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +use plato; + +$foo = [<|"x":1|>]; +$bar = [<|"x":1, "y":Null|>]; + +insert into Output +select * from AS_TABLE($foo) as a LEFT JOIN AS_TABLE($bar) as b USING(x); diff --git a/yt/yql/tests/sql/suites/join/left_only_semi_and_other-off.cfg b/yt/yql/tests/sql/suites/join/left_only_semi_and_other-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_only_semi_and_other-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/left_only_semi_and_other.cfg b/yt/yql/tests/sql/suites/join/left_only_semi_and_other.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_only_semi_and_other.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/left_only_semi_and_other.sql b/yt/yql/tests/sql/suites/join/left_only_semi_and_other.sql new file mode 100644 index 0000000000..3258c30324 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_only_semi_and_other.sql @@ -0,0 +1,15 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +$data1 = (select cast(key as uint32) as key, subkey, value from Input1); +$data2 = (select cast(key as uint32) % 100u as key, subkey, value from Input3); + +--INSERT INTO Output +SELECT + i1.* +FROM $data1 as i1 +LEFT ONLY JOIN $data2 as i2 ON i1.key = i2.key +LEFT SEMI JOIN $data1 as i3 ON i1.key = i3.key +LEFT OUTER JOIN $data1 as i4 ON i1.key = i4.key +ORDER BY i1.key diff --git a/yt/yql/tests/sql/suites/join/left_only_with_other-off.cfg b/yt/yql/tests/sql/suites/join/left_only_with_other-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_only_with_other-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/left_only_with_other.cfg b/yt/yql/tests/sql/suites/join/left_only_with_other.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_only_with_other.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/left_only_with_other.sql b/yt/yql/tests/sql/suites/join/left_only_with_other.sql new file mode 100644 index 0000000000..65b1bf178d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_only_with_other.sql @@ -0,0 +1,14 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +$data1 = (select cast(key as uint32) as key, subkey, value from Input1); +$data2 = (select cast(key as uint32) % 100u as key, subkey, value from Input1); + +--INSERT INTO Output +SELECT + i1.* +FROM $data1 as i1 +LEFT ONLY JOIN $data2 as i2 ON i1.key = i2.key +JOIN $data1 as i3 ON i1.key = i3.key +; diff --git a/yt/yql/tests/sql/suites/join/left_semi_with_other-off.cfg b/yt/yql/tests/sql/suites/join/left_semi_with_other-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_semi_with_other-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/left_semi_with_other.cfg b/yt/yql/tests/sql/suites/join/left_semi_with_other.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_semi_with_other.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/left_semi_with_other.sql b/yt/yql/tests/sql/suites/join/left_semi_with_other.sql new file mode 100644 index 0000000000..0ac01a9e53 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_semi_with_other.sql @@ -0,0 +1,15 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +$data1 = (select cast(key as uint32) as key, subkey, value from Input1); +$data2 = (select cast(key as uint32) % 100u as key, subkey, value from Input2); + +--INSERT INTO Output +SELECT + i1.* +FROM $data1 as i1 +LEFT SEMI JOIN $data2 as i2 ON i1.key = i2.key +LEFT OUTER JOIN $data1 as i3 ON i1.key = i3.key +ORDER BY i1.key +; diff --git a/yt/yql/tests/sql/suites/join/left_trivial-off.cfg b/yt/yql/tests/sql/suites/join/left_trivial-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_trivial-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/left_trivial.cfg b/yt/yql/tests/sql/suites/join/left_trivial.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_trivial.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/left_trivial.sql b/yt/yql/tests/sql/suites/join/left_trivial.sql new file mode 100644 index 0000000000..ae448327da --- /dev/null +++ b/yt/yql/tests/sql/suites/join/left_trivial.sql @@ -0,0 +1,5 @@ +PRAGMA DisableSimpleColumns; +select Input1.key, Input1.subkey, Input3.value +from plato.Input1 +left join plato.Input3 using (key) +order by Input1.key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_csee-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_csee-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_csee-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_csee.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_csee.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_csee.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_csee.sql b/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_csee.sql new file mode 100644 index 0000000000..63d400bf94 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_csee.sql @@ -0,0 +1,30 @@ +/* ignore runonopt plan diff */ +USE plato; +PRAGMA DisableSimpleColumns; +PRAGMA yt.LookupJoinLimit="64k"; +PRAGMA yt.LookupJoinMaxRows="100"; + +$campaigns_data = AsList( + AsStruct(Just(1) as id), + AsStruct(Just(2) as id)); + +$strategies_data = AsList( + AsStruct(Just(1) as id), + AsStruct(Just(2) as id)); + +$lottery_data = AsList( + AsStruct(Just(1) as id, Just(2) as campaign_id, Just(3) as strategy_id)); + + +INSERT INTO @campaigns SELECT * FROM AS_TABLE($campaigns_data) ORDER BY id; +INSERT INTO @strategies SELECT * FROM AS_TABLE($strategies_data) ORDER BY id; +INSERT INTO @lottery SELECT * FROM AS_TABLE($lottery_data) ORDER BY id; + +COMMIT; + +SELECT + lottery.id AS lottery_id +FROM @lottery AS lottery + JOIN @campaigns AS campaigns ON lottery.campaign_id = campaigns.id + JOIN @strategies AS strategies ON lottery.strategy_id = strategies.id +WHERE 1 < 0 diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_subst-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_subst-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_subst-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_subst.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_subst.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_subst.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_subst.sql b/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_subst.sql new file mode 100644 index 0000000000..e91ef8f7c2 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_bug7646_subst.sql @@ -0,0 +1,28 @@ +USE plato; +PRAGMA DisableSimpleColumns; +PRAGMA yt.LookupJoinLimit="64k"; +PRAGMA yt.LookupJoinMaxRows="100"; + +$campaigns_data = AsList( + AsStruct(Just(1) as id), + AsStruct(Just(2) as id)); + +$strategies_data = AsList( + AsStruct(Just(1) as id), + AsStruct(Just(2) as id)); + +$lottery_data = AsList( + AsStruct(Just(1) as id, Just(2) as campaign_id, Just(3) as strategy_id)); + + +INSERT INTO @campaigns SELECT * FROM AS_TABLE($campaigns_data) ORDER BY id; +INSERT INTO @strategies SELECT * FROM AS_TABLE($strategies_data) ORDER BY id; +INSERT INTO @lottery SELECT * FROM AS_TABLE($lottery_data) ORDER BY id; + +COMMIT; + +SELECT + lottery.id AS lottery_id +FROM @lottery AS lottery + JOIN @campaigns AS campaigns ON lottery.campaign_id = campaigns.id + JOIN @strategies AS strategies ON lottery.strategy_id = strategies.id diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_bug8533-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_bug8533-off.cfg new file mode 100644 index 0000000000..1f7a620911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_bug8533-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_bug8533.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_bug8533.cfg new file mode 100644 index 0000000000..df8cd9f2c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_bug8533.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_bug8533.sql b/yt/yql/tests/sql/suites/join/lookupjoin_bug8533.sql new file mode 100644 index 0000000000..8e2b401fa0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_bug8533.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +-- tables should be swapped (Input1 is bigger) +select * from Input2 as a +inner join any Input1 as b on a.k2 = b.k1; + diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_inner-off.cfg new file mode 100644 index 0000000000..1f7a620911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_inner.cfg new file mode 100644 index 0000000000..df8cd9f2c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner.sql b/yt/yql/tests/sql/suites/join/lookupjoin_inner.sql new file mode 100644 index 0000000000..a85dec245c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +-- tables should be swapped (Input1 is bigger) +select * from Input2 as a +inner join Input1 as b on a.k2 = b.k1 and a.v2 = b.v1; + diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o-off.cfg new file mode 100644 index 0000000000..473c367b92 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1_opt.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o.cfg new file mode 100644 index 0000000000..0e1c5e12b2 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1_opt.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o.sql b/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o.sql new file mode 100644 index 0000000000..a85dec245c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +-- tables should be swapped (Input1 is bigger) +select * from Input2 as a +inner join Input1 as b on a.k2 = b.k1 and a.v2 = b.v1; + diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o2o-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o2o-off.cfg new file mode 100644 index 0000000000..cb6cc9dbbf --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o2o-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1_opt.txt +in Input2 sorted_by_kv2_opt.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o2o.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o2o.cfg new file mode 100644 index 0000000000..a567b5178d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o2o.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1_opt.txt +in Input2 sorted_by_kv2_opt.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o2o.sql b/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o2o.sql new file mode 100644 index 0000000000..a85dec245c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner_1o2o.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +-- tables should be swapped (Input1 is bigger) +select * from Input2 as a +inner join Input1 as b on a.k2 = b.k1 and a.v2 = b.v1; + diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner_2o-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_inner_2o-off.cfg new file mode 100644 index 0000000000..8dc359be1d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner_2o-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2_opt.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner_2o.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_inner_2o.cfg new file mode 100644 index 0000000000..a636052ccc --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner_2o.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2_opt.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner_2o.sql b/yt/yql/tests/sql/suites/join/lookupjoin_inner_2o.sql new file mode 100644 index 0000000000..a85dec245c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner_2o.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +-- tables should be swapped (Input1 is bigger) +select * from Input2 as a +inner join Input1 as b on a.k2 = b.k1 and a.v2 = b.v1; + diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner_empty_subq-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_inner_empty_subq-off.cfg new file mode 100644 index 0000000000..1f7a620911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner_empty_subq-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner_empty_subq.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_inner_empty_subq.cfg new file mode 100644 index 0000000000..df8cd9f2c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner_empty_subq.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_inner_empty_subq.sql b/yt/yql/tests/sql/suites/join/lookupjoin_inner_empty_subq.sql new file mode 100644 index 0000000000..afbfb0757b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_inner_empty_subq.sql @@ -0,0 +1,9 @@ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +select * from Input1 as a +inner join (select * from Input2 where k2 = "not_existent") as b on a.k1 = b.k2; + diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_not_selected-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_not_selected-off.cfg new file mode 100644 index 0000000000..1f7a620911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_not_selected-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_not_selected.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_not_selected.cfg new file mode 100644 index 0000000000..df8cd9f2c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_not_selected.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_not_selected.sql b/yt/yql/tests/sql/suites/join/lookupjoin_not_selected.sql new file mode 100644 index 0000000000..1f0f03b410 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_not_selected.sql @@ -0,0 +1,9 @@ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +-- no lookup join in this case +select * from Input1 as a +left join Input2 as b on a.k1 = b.k2; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_semi-off.cfg new file mode 100644 index 0000000000..1f7a620911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_semi.cfg new file mode 100644 index 0000000000..df8cd9f2c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi.sql b/yt/yql/tests/sql/suites/join/lookupjoin_semi.sql new file mode 100644 index 0000000000..79093ae0fb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +-- prefix of sort keys +select * from Input1 as a +left semi join Input2 as b on a.k1 = b.k2 +order by a.k1; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o-off.cfg new file mode 100644 index 0000000000..473c367b92 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1_opt.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o.cfg new file mode 100644 index 0000000000..0e1c5e12b2 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1_opt.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o.sql b/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o.sql new file mode 100644 index 0000000000..79093ae0fb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +-- prefix of sort keys +select * from Input1 as a +left semi join Input2 as b on a.k1 = b.k2 +order by a.k1; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o2o-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o2o-off.cfg new file mode 100644 index 0000000000..cb6cc9dbbf --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o2o-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1_opt.txt +in Input2 sorted_by_kv2_opt.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o2o.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o2o.cfg new file mode 100644 index 0000000000..a567b5178d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o2o.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1_opt.txt +in Input2 sorted_by_kv2_opt.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o2o.sql b/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o2o.sql new file mode 100644 index 0000000000..79093ae0fb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_1o2o.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +-- prefix of sort keys +select * from Input1 as a +left semi join Input2 as b on a.k1 = b.k2 +order by a.k1; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_2o-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_semi_2o-off.cfg new file mode 100644 index 0000000000..8dc359be1d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_2o-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2_opt.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_2o.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_semi_2o.cfg new file mode 100644 index 0000000000..a636052ccc --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_2o.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2_opt.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_2o.sql b/yt/yql/tests/sql/suites/join/lookupjoin_semi_2o.sql new file mode 100644 index 0000000000..79093ae0fb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_2o.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +-- prefix of sort keys +select * from Input1 as a +left semi join Input2 as b on a.k1 = b.k2 +order by a.k1; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_empty-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_semi_empty-off.cfg new file mode 100644 index 0000000000..29c54dddd7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_empty-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2_empty.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_empty.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_semi_empty.cfg new file mode 100644 index 0000000000..b8938b393e --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_empty.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2_empty.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_empty.sql b/yt/yql/tests/sql/suites/join/lookupjoin_semi_empty.sql new file mode 100644 index 0000000000..79093ae0fb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_empty.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +-- prefix of sort keys +select * from Input1 as a +left semi join Input2 as b on a.k1 = b.k2 +order by a.k1; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_subq-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_semi_subq-off.cfg new file mode 100644 index 0000000000..1f7a620911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_subq-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_subq.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_semi_subq.cfg new file mode 100644 index 0000000000..df8cd9f2c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_subq.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_semi_subq.sql b/yt/yql/tests/sql/suites/join/lookupjoin_semi_subq.sql new file mode 100644 index 0000000000..96cb5ca79a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_semi_subq.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; + +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +-- prefix of sort keys +select * from Input1 as a +left semi join (select * from Input2 where k2 != "ccc") as b on a.k1 = b.k2 +order by a.k1; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_take_skip.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_take_skip.cfg new file mode 100644 index 0000000000..8790d17dc7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_take_skip.cfg @@ -0,0 +1,2 @@ +in Input input9.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_take_skip.sql b/yt/yql/tests/sql/suites/join/lookupjoin_take_skip.sql new file mode 100644 index 0000000000..de1195209c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_take_skip.sql @@ -0,0 +1,12 @@ +USE plato; +PRAGMA yt.LookupJoinMaxRows="3"; +pragma yt.LookupJoinLimit = '10M'; + +insert into @big +select * from (select ListMap(ListFromRange(1, 100), ($x)->(Unwrap(CAST($x as String)))) as key) flatten list by key order by key; +commit; + +$small = select substring(key, 0, 2) as key, subkey || '000' as subkey from Input order by key limit 5 offset 8; + +select * from @big as a join $small as b using(key) order by key; + diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_unused_keys.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_unused_keys.cfg new file mode 100644 index 0000000000..9a930ffe48 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_unused_keys.cfg @@ -0,0 +1,6 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +in Input5 kv5_sorted.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_unused_keys.sql b/yt/yql/tests/sql/suites/join/lookupjoin_unused_keys.sql new file mode 100644 index 0000000000..cd0840eefe --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_unused_keys.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +use plato; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; + +select + +v3 + +from Input1 as a +join Input2 as b on (a.k1 = b.k2) +join Input3 as c on (a.k1 = c.k3) +order by v3; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_with_cache-off.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_with_cache-off.cfg new file mode 100644 index 0000000000..e7286dfd15 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_with_cache-off.cfg @@ -0,0 +1,3 @@ +in Input sorted_by_key_subkey.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_with_cache.cfg b/yt/yql/tests/sql/suites/join/lookupjoin_with_cache.cfg new file mode 100644 index 0000000000..2e90092760 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_with_cache.cfg @@ -0,0 +1 @@ +in Input sorted_by_key_subkey.txt diff --git a/yt/yql/tests/sql/suites/join/lookupjoin_with_cache.sql b/yt/yql/tests/sql/suites/join/lookupjoin_with_cache.sql new file mode 100644 index 0000000000..0aeadca09a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/lookupjoin_with_cache.sql @@ -0,0 +1,19 @@ +/* postgres can not */ +/* kikimr can not */ +use plato; +PRAGMA DisableSimpleColumns; +pragma yt.LookupJoinLimit="64k"; +pragma yt.LookupJoinMaxRows="100"; +pragma yt.QueryCacheMode="normal"; +pragma yt.QueryCacheUseForCalc="true"; + +insert into @tmp with truncate +select * from Input +where subkey == "bbb" +order by key; + +commit; + +select * from Input as a +inner join @tmp as b on a.key = b.key +order by a.key, a.subkey; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_dup_key-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_dup_key-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_dup_key-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_dup_key.cfg b/yt/yql/tests/sql/suites/join/mapjoin_dup_key.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_dup_key.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_dup_key.sql b/yt/yql/tests/sql/suites/join/mapjoin_dup_key.sql new file mode 100644 index 0000000000..54066e1d90 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_dup_key.sql @@ -0,0 +1,10 @@ +use plato; + +/* postgres can not */ +/* kikimr can not */ + +pragma DisableSimpleColumns; +pragma yt.MapJoinLimit="1m"; + +select * +from Input1 as a join Input2 as b on a.key = b.key and a.subkey = b.key; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite-off.cfg new file mode 100644 index 0000000000..e76fa257e2 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite-off.cfg @@ -0,0 +1,4 @@ +in Input uniqkeys.txt +res result.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite.cfg b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite.cfg new file mode 100644 index 0000000000..0e7b4058e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite.cfg @@ -0,0 +1,2 @@ +in Input uniqkeys.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite.sql b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite.sql new file mode 100644 index 0000000000..de352022c9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +USE plato; +pragma DisableSimpleColumns; +pragma yt.MapJoinLimit="1m"; + +$subq = (SELECT CAST((CAST(subkey AS Int32) + 1) AS String) AS subkey_plus_one FROM Input); + +SELECT * FROM Input AS a JOIN $subq AS b ON a.subkey = b.subkey_plus_one order by subkey, key; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_sequence-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_sequence-off.cfg new file mode 100644 index 0000000000..03784127c6 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_sequence-off.cfg @@ -0,0 +1,6 @@ +in Input uniqkeys.txt +in Dict1 sorted_uniq.txt +in Dict2 sorted_uniq1.txt +res result.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_sequence.cfg b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_sequence.cfg new file mode 100644 index 0000000000..eff6a05aeb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_sequence.cfg @@ -0,0 +1,4 @@ +in Input uniqkeys.txt +in Dict1 sorted_uniq.txt +in Dict2 sorted_uniq1.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_sequence.sql b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_sequence.sql new file mode 100644 index 0000000000..bd93d67218 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_sequence.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +USE plato; +pragma DisableSimpleColumns; +pragma yt.MapJoinLimit="1m"; + +$subq = (SELECT key, CAST((CAST(subkey AS Int32) + 1) AS String) AS subkey_plus_one FROM Input); + +FROM $subq AS a +JOIN Dict1 AS d1 +ON a.subkey_plus_one = d1.subkey +JOIN Dict2 AS d2 +ON a.key = d2.key +SELECT * ORDER BY a.key, a.subkey_plus_one; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_star-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_star-off.cfg new file mode 100644 index 0000000000..e76fa257e2 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_star-off.cfg @@ -0,0 +1,4 @@ +in Input uniqkeys.txt +res result.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_star.cfg b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_star.cfg new file mode 100644 index 0000000000..0e7b4058e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_star.cfg @@ -0,0 +1,2 @@ +in Input uniqkeys.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_star.sql b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_star.sql new file mode 100644 index 0000000000..806a6ad8c9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_early_rewrite_star.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +USE plato; +pragma DisableSimpleColumns; +pragma yt.MapJoinLimit="1m"; +pragma yt.JoinEnableStarJoin="true"; + +$subq = (SELECT CAST((CAST(subkey AS Int32) + 1) AS String) AS subkey_plus_one FROM Input); + +SELECT * FROM Input AS a JOIN $subq AS b ON a.subkey = b.subkey_plus_one order by subkey, key; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_left_null_column-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_left_null_column-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_left_null_column-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_left_null_column.cfg b/yt/yql/tests/sql/suites/join/mapjoin_left_null_column.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_left_null_column.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_left_null_column.sql b/yt/yql/tests/sql/suites/join/mapjoin_left_null_column.sql new file mode 100644 index 0000000000..df7b2ab987 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_left_null_column.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ + +PRAGMA yt.MapJoinLimit="1m"; + +USE plato; + +$t = [<|"x":"150", "y":1, "z":Null|>, <|"x":"150", "y":2, "z":Null|>]; + +SELECT * FROM Input1 AS a LEFT JOIN AS_TABLE($t) AS b ON a.key = b.x ORDER BY key, y; + diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_non_optional_left_only_single-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_non_optional_left_only_single-off.cfg new file mode 100644 index 0000000000..c658c9ddb5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_non_optional_left_only_single-off.cfg @@ -0,0 +1,3 @@ +in Input input6.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_non_optional_left_only_single.cfg b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_non_optional_left_only_single.cfg new file mode 100644 index 0000000000..684f1dbee4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_non_optional_left_only_single.cfg @@ -0,0 +1 @@ +in Input input6.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_non_optional_left_only_single.sql b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_non_optional_left_only_single.sql new file mode 100644 index 0000000000..518d33b511 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_non_optional_left_only_single.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ + +USE plato; + +$t = [<|"key1":"1", "subkey1":"a", "key":"1", "subkey":"a", "value":"value2_1"|>, <|"key1":"4", "subkey1":"d", "key":"4", "subkey":"d", "value":"value2_4"|>, <|"key1":"-5", "subkey1":"e", "key":"-5", "subkey":"e", "value":"value2_5"|>]; + +SELECT * +FROM + Input AS A +LEFT ONLY JOIN + AS_TABLE($t) AS B +ON + AsTuple(A.key, AsTuple(A.subkey, A.subkey1)) = AsTuple(B.key, AsTuple(B.subkey, B.subkey1)) +ORDER BY `key`; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_only_single-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_only_single-off.cfg new file mode 100644 index 0000000000..440cd8b680 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_only_single-off.cfg @@ -0,0 +1,3 @@ +in Input input5.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_only_single.cfg b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_only_single.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_only_single.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_only_single.sql b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_only_single.sql new file mode 100644 index 0000000000..d6eab69ed8 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_only_single.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ + +USE plato; + +$t = [<|"key":"1", "subkey":"a", "value":"value2_1"|>, <|"key":"4", "subkey":"d", "value":"value2_4"|>, <|"key":"-5", "subkey":"e", "value":"value2_5"|>]; + +SELECT * +FROM + Input AS A +LEFT ONLY JOIN + AS_TABLE($t) AS B +ON + AsTuple(cast(A.key as uint64), cast(A.subkey as String)) = AsTuple(cast(B.key as int64), cast(B.subkey as Utf8)) +ORDER BY `key`; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_many-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_many-off.cfg new file mode 100644 index 0000000000..c658c9ddb5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_many-off.cfg @@ -0,0 +1,3 @@ +in Input input6.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_many.cfg b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_many.cfg new file mode 100644 index 0000000000..684f1dbee4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_many.cfg @@ -0,0 +1 @@ +in Input input6.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_many.sql b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_many.sql new file mode 100644 index 0000000000..1175356b1d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_many.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +USE plato; + +$t = [<|"key1":"1", "subkey1":"a", "key":"1", "subkey":"a", "value":"value2_1"|>, <|"key1":"4", "subkey1":"d", "key":"4", "subkey":"d", "value":"value2_4"|>, <|"key1":"-5", "subkey1":"e", "key":"-5", "subkey":"e", "value":"value2_5"|>]; + +SELECT * +FROM + Input AS A +LEFT SEMI JOIN + AS_TABLE($t) AS B +ON + AsTuple(cast(A.key as uint64), cast(A.subkey as String)) = AsTuple(cast(B.key as int64), cast(B.subkey as Utf8)) + AND AsTuple(cast(A.key1 as uint64), cast(A.subkey1 as String)) = AsTuple(cast(B.key1 as int64), cast(B.subkey1 as Utf8)) +ORDER BY `key`; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_single-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_single-off.cfg new file mode 100644 index 0000000000..440cd8b680 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_single-off.cfg @@ -0,0 +1,3 @@ +in Input input5.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_single.cfg b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_single.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_single.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_single.sql b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_single.sql new file mode 100644 index 0000000000..959c476b80 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_complex_type_optional_left_semi_single.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ + +USE plato; + +$t = [<|"key":"1", "subkey":"a", "value":"value2_1"|>, <|"key":"4", "subkey":"d", "value":"value2_4"|>, <|"key":"-5", "subkey":"e", "value":"value2_5"|>]; + +SELECT * +FROM + Input AS A +LEFT SEMI JOIN + AS_TABLE($t) AS B +ON + AsTuple(cast(A.key as uint64), cast(A.subkey as String)) = AsTuple(cast(B.key as int64), cast(B.subkey as Utf8)) +ORDER BY `key`; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_tablerecord-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_on_tablerecord-off.cfg new file mode 100644 index 0000000000..2dd54c12a3 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_tablerecord-off.cfg @@ -0,0 +1,5 @@ +in Input input4.txt +res result.txt +providers yt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_tablerecord.cfg b/yt/yql/tests/sql/suites/join/mapjoin_on_tablerecord.cfg new file mode 100644 index 0000000000..b4bb56a6bb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_tablerecord.cfg @@ -0,0 +1,3 @@ +in Input input4.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_tablerecord.sql b/yt/yql/tests/sql/suites/join/mapjoin_on_tablerecord.sql new file mode 100644 index 0000000000..660b2d36b4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_tablerecord.sql @@ -0,0 +1,10 @@ +use plato; +pragma yt.MapJoinLimit="1M"; + +$i = select TableRecordIndex() as ind, t.* from Input as t; +$filter = select min(ind) as ind from $i group by subkey; + +select + * +from Input +where TableRecordIndex() in $filter; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_very_complex_type-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_on_very_complex_type-off.cfg new file mode 100644 index 0000000000..c658c9ddb5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_very_complex_type-off.cfg @@ -0,0 +1,3 @@ +in Input input6.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_very_complex_type.cfg b/yt/yql/tests/sql/suites/join/mapjoin_on_very_complex_type.cfg new file mode 100644 index 0000000000..684f1dbee4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_very_complex_type.cfg @@ -0,0 +1 @@ +in Input input6.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_on_very_complex_type.sql b/yt/yql/tests/sql/suites/join/mapjoin_on_very_complex_type.sql new file mode 100644 index 0000000000..2ee1b912b2 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_on_very_complex_type.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ + +USE plato; + +$t = [<|"key1":"1", "subkey1":"a", "key":"1", "subkey":"a", "value":"value2_1"|>, <|"key1":"4", "subkey1":"d", "key":"4", "subkey":"d", "value":"value2_4"|>, <|"key1":"-5", "subkey1":"e", "key":"-5", "subkey":"e", "value":"value2_5"|>]; + +SELECT * +FROM + Input AS A +LEFT SEMI JOIN + AS_TABLE($t) AS B +ON + AsTuple(A.subkey, AsTuple(A.subkey1, AsTuple(CAST(A.key AS Int64), CAST(A.key1 AS Uint64)))) = AsTuple(B.subkey, AsTuple(B.subkey1, AsTuple(CAST(B.key AS Uint64), CAST(B.key1 AS Int64)))) +ORDER BY `key`; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_opt_vs_2xopt-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_opt_vs_2xopt-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_opt_vs_2xopt-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_opt_vs_2xopt.cfg b/yt/yql/tests/sql/suites/join/mapjoin_opt_vs_2xopt.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_opt_vs_2xopt.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_opt_vs_2xopt.sql b/yt/yql/tests/sql/suites/join/mapjoin_opt_vs_2xopt.sql new file mode 100644 index 0000000000..73171384f0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_opt_vs_2xopt.sql @@ -0,0 +1,23 @@ +use plato; + +pragma yt.MapJoinLimit="1m"; + +$t1 = AsList( + AsStruct(Just(1) AS Key), + AsStruct(Just(2) AS Key), + AsStruct(Just(3) AS Key)); + +$t2 = AsList( + AsStruct(Just(Just(2)) AS Key), + AsStruct(Just(Just(3)) AS Key), + AsStruct(Just(Just(4)) AS Key), + AsStruct(Just(Just(5)) AS Key), + AsStruct(Just(Just(6)) AS Key)); + +insert into @t1 select * from as_table($t1); +insert into @t2 select * from as_table($t2); + +commit; + +select * +from @t1 as a join @t2 as b using(Key); diff --git a/yt/yql/tests/sql/suites/join/mapjoin_partial_uniq_keys-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_partial_uniq_keys-off.cfg new file mode 100644 index 0000000000..e76fa257e2 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_partial_uniq_keys-off.cfg @@ -0,0 +1,4 @@ +in Input uniqkeys.txt +res result.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_partial_uniq_keys.cfg b/yt/yql/tests/sql/suites/join/mapjoin_partial_uniq_keys.cfg new file mode 100644 index 0000000000..0e7b4058e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_partial_uniq_keys.cfg @@ -0,0 +1,2 @@ +in Input uniqkeys.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_partial_uniq_keys.sql b/yt/yql/tests/sql/suites/join/mapjoin_partial_uniq_keys.sql new file mode 100644 index 0000000000..2d152113e4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_partial_uniq_keys.sql @@ -0,0 +1,18 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +/* kikimr can not */ +/* ignore runonopt plan diff */ +USE plato; +pragma yt.MapJoinLimit="1m"; + +-- YQL-5582 +$join = (select + a.key as key, + a.subkey as subkey, + a.value as value +from (select * from Input where value > "bbb") as a +left join Input as b +on a.key = b.key); + + +select count(*) from $join; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_sharded.sql b/yt/yql/tests/sql/suites/join/mapjoin_sharded.sql new file mode 100644 index 0000000000..e5af0c4509 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_sharded.sql @@ -0,0 +1,13 @@ +use plato; + +/* postgres can not */ +/* kikimr can not */ + +pragma DisableSimpleColumns; +/* yt_local_var: MAP_JOIN_LIMIT = 30 */ +/* yqlrun_var: MAP_JOIN_LIMIT = 1000 */ +pragma yt.MapJoinLimit="MAP_JOIN_LIMIT"; +pragma yt.MapJoinShardCount = "10"; + +select * +from Input1 as a join Input2 as b on a.key = b.key and a.subkey = b.key; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_unused_keys.cfg b/yt/yql/tests/sql/suites/join/mapjoin_unused_keys.cfg new file mode 100644 index 0000000000..9a930ffe48 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_unused_keys.cfg @@ -0,0 +1,6 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +in Input5 kv5_sorted.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_unused_keys.sql b/yt/yql/tests/sql/suites/join/mapjoin_unused_keys.sql new file mode 100644 index 0000000000..d574e50062 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_unused_keys.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +use plato; +pragma yt.MapJoinLimit="1m"; +pragma yt.DisableOptimizers="PhysicalOptimizer-FuseInnerMap"; + +select + +v3 + +from Input1 as a +join Input2 as b on (a.k1 = b.k2) +join Input3 as c on (a.k1 = c.k3) +order by v3; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_with_anonymous-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_with_anonymous-off.cfg new file mode 100644 index 0000000000..08630ad2c5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_with_anonymous-off.cfg @@ -0,0 +1,4 @@ +in Input input1.txt +res result.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_with_anonymous.cfg b/yt/yql/tests/sql/suites/join/mapjoin_with_anonymous.cfg new file mode 100644 index 0000000000..c8889a670f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_with_anonymous.cfg @@ -0,0 +1,2 @@ +in Input input1.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_with_anonymous.sql b/yt/yql/tests/sql/suites/join/mapjoin_with_anonymous.sql new file mode 100644 index 0000000000..0a6476fbda --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_with_anonymous.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* kikimr can not */ +use plato; +pragma DisableSimpleColumns; + +pragma yt.MapJoinLimit="1m"; + +insert into @tmp select * from Input where key > "100"; +commit; + +select * from Input as a +left join @tmp as b on a.key = b.key; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_with_empty_read-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_with_empty_read-off.cfg new file mode 100644 index 0000000000..63f3b16e05 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_with_empty_read-off.cfg @@ -0,0 +1,3 @@ +in Input input1.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_with_empty_read.cfg b/yt/yql/tests/sql/suites/join/mapjoin_with_empty_read.cfg new file mode 100644 index 0000000000..5b34491eb1 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_with_empty_read.cfg @@ -0,0 +1,4 @@ +in Input input1.txt +res result.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/join/mapjoin_with_empty_read.sql b/yt/yql/tests/sql/suites/join/mapjoin_with_empty_read.sql new file mode 100644 index 0000000000..eae0db98d5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_with_empty_read.sql @@ -0,0 +1,20 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +/* kikimr can not */ +use plato; +pragma yt.mapjoinlimit="1m"; + +$cnt = (select count(*) from Input); +$offset = ($cnt + 10) ?? 0; + +$in1 = (select key from Input where key != "" order by key limit 10 offset $offset); + +select * from Input as a +left join $in1 as b on a.key = b.key; + +$limit = ($cnt / 100) ?? 0; + +$in2 = (select key from Input where key != "" limit $limit); + +select * from Input as a +left only join $in2 as b on a.key = b.key; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_with_empty_struct-off.cfg b/yt/yql/tests/sql/suites/join/mapjoin_with_empty_struct-off.cfg new file mode 100644 index 0000000000..08630ad2c5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_with_empty_struct-off.cfg @@ -0,0 +1,4 @@ +in Input input1.txt +res result.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mapjoin_with_empty_struct.cfg b/yt/yql/tests/sql/suites/join/mapjoin_with_empty_struct.cfg new file mode 100644 index 0000000000..c8889a670f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_with_empty_struct.cfg @@ -0,0 +1,2 @@ +in Input input1.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/join/mapjoin_with_empty_struct.sql b/yt/yql/tests/sql/suites/join/mapjoin_with_empty_struct.sql new file mode 100644 index 0000000000..c0fcc01374 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mapjoin_with_empty_struct.sql @@ -0,0 +1,14 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +/* kikimr can not */ +/* ignore yt detailed plan diff */ +use plato; +pragma yt.MapJoinLimit="10M"; + +$sizes = ( + SELECT + 0 AS id + FROM Input +); + +SELECT d.key FROM Input as d CROSS JOIN $sizes as s ORDER BY d.key; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_any_no_join_reduce-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_any_no_join_reduce-off.cfg new file mode 100644 index 0000000000..489ecd7e4a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_any_no_join_reduce-off.cfg @@ -0,0 +1,3 @@ +in Input sorted_uniq2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_any_no_join_reduce.cfg b/yt/yql/tests/sql/suites/join/mergejoin_any_no_join_reduce.cfg new file mode 100644 index 0000000000..de96d331e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_any_no_join_reduce.cfg @@ -0,0 +1 @@ +in Input sorted_uniq2.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_any_no_join_reduce.sql b/yt/yql/tests/sql/suites/join/mergejoin_any_no_join_reduce.sql new file mode 100644 index 0000000000..bcd9751286 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_any_no_join_reduce.sql @@ -0,0 +1,5 @@ +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="2"; + +select * from Input where key in (select "023" as key union all select "911" as key union all select "911" as key); diff --git a/yt/yql/tests/sql/suites/join/mergejoin_big_primary-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_big_primary-off.cfg new file mode 100644 index 0000000000..1f7a620911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_big_primary-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_big_primary.cfg b/yt/yql/tests/sql/suites/join/mergejoin_big_primary.cfg new file mode 100644 index 0000000000..df8cd9f2c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_big_primary.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_big_primary.sql b/yt/yql/tests/sql/suites/join/mergejoin_big_primary.sql new file mode 100644 index 0000000000..a05dcc865c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_big_primary.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinAllowColumnRenames="true"; +pragma yt.JoinMergeUseSmallAsPrimary="false"; + +-- Input2 is smaller than Input1 +select * from Input1 as a join Input2 as b on a.k1 = b.k2 +order by a.v1, b.v2; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_big_primary_unique-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_big_primary_unique-off.cfg new file mode 100644 index 0000000000..e41a2c5556 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_big_primary_unique-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1_unique.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_big_primary_unique.cfg b/yt/yql/tests/sql/suites/join/mergejoin_big_primary_unique.cfg new file mode 100644 index 0000000000..c0114c4136 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_big_primary_unique.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1_unique.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_big_primary_unique.sql b/yt/yql/tests/sql/suites/join/mergejoin_big_primary_unique.sql new file mode 100644 index 0000000000..79ac405416 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_big_primary_unique.sql @@ -0,0 +1,9 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinAllowColumnRenames="true"; +pragma yt.JoinMergeUseSmallAsPrimary="false"; + +-- Input2 is smaller than Input1, but Input1 has unique keys +select * from Input1 as a join Input2 as b on a.k1 = b.k2 and a.v1 = b.v2; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_choose_primary-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_choose_primary-off.cfg new file mode 100644 index 0000000000..1f7a620911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_choose_primary-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_choose_primary.cfg b/yt/yql/tests/sql/suites/join/mergejoin_choose_primary.cfg new file mode 100644 index 0000000000..df8cd9f2c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_choose_primary.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_choose_primary.sql b/yt/yql/tests/sql/suites/join/mergejoin_choose_primary.sql new file mode 100644 index 0000000000..97d4a93ea3 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_choose_primary.sql @@ -0,0 +1,9 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinAllowColumnRenames="true"; + +-- Input2 is smaller than Input1 +select * from Input1 as a join Input2 as b on a.k1 = b.k2 +order by a.v1, b.v2; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_choose_primary_with_retry-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_choose_primary_with_retry-off.cfg new file mode 100644 index 0000000000..1f7a620911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_choose_primary_with_retry-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_choose_primary_with_retry.cfg b/yt/yql/tests/sql/suites/join/mergejoin_choose_primary_with_retry.cfg new file mode 100644 index 0000000000..23a3ae77d0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_choose_primary_with_retry.cfg @@ -0,0 +1,3 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +pragma yt.ParallelOperationsLimit="1" diff --git a/yt/yql/tests/sql/suites/join/mergejoin_choose_primary_with_retry.sql b/yt/yql/tests/sql/suites/join/mergejoin_choose_primary_with_retry.sql new file mode 100644 index 0000000000..aad534d5dd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_choose_primary_with_retry.sql @@ -0,0 +1,12 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinAllowColumnRenames="true"; + +-- emulate monsters in big table +pragma yt.JoinMergeReduceJobMaxSize="1"; + +-- Input2 is smaller than Input1 +select * from Input1 as a join Input2 as b on a.k1 = b.k2 +order by a.v1, b.v2; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_align1-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_force_align1-off.cfg new file mode 100644 index 0000000000..9299e9217a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_align1-off.cfg @@ -0,0 +1,3 @@ +providers yt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_align1.cfg b/yt/yql/tests/sql/suites/join/mergejoin_force_align1.cfg new file mode 100644 index 0000000000..bb349dd8ab --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_align1.cfg @@ -0,0 +1 @@ +providers yt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_align1.sql b/yt/yql/tests/sql/suites/join/mergejoin_force_align1.sql new file mode 100644 index 0000000000..3504fd3cf1 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_align1.sql @@ -0,0 +1,26 @@ +/* syntax version 1 */ +/* postgres can not */ + +USE plato; + +pragma yt.JoinMergeTablesLimit="100"; +pragma yt.JoinMergeForce; + +insert into @t1 +select 1 as k1, 10 as v1; + +insert into @t2 +select 1u as k2, 100 as v2; + +insert into @t3 +select 1us as k3, 1000 as v3; + +insert into @t4 +select 1s as k4, 10000 as v4; + +commit; + + +select * from (select * from @t1 as a join @t3 as c on a.k1 = c.k3) as ac + join (select * from @t2 as b join @t4 as d on b.k2 = d.k4) as bd on ac.k1 = bd.k2 and ac.k3 = bd.k4; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_align2-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_force_align2-off.cfg new file mode 100644 index 0000000000..9299e9217a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_align2-off.cfg @@ -0,0 +1,3 @@ +providers yt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_align2.cfg b/yt/yql/tests/sql/suites/join/mergejoin_force_align2.cfg new file mode 100644 index 0000000000..bb349dd8ab --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_align2.cfg @@ -0,0 +1 @@ +providers yt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_align2.sql b/yt/yql/tests/sql/suites/join/mergejoin_force_align2.sql new file mode 100644 index 0000000000..695adedf4a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_align2.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +/* postgres can not */ + +USE plato; + +pragma yt.JoinMergeTablesLimit="100"; + +insert into @t1 +select 1 as k1, 10 as v1; + +insert into @t2 +select 1u as k2, 100 as v2; + +insert into @t3 +select 1us as k3, 1000 as v3; + +commit; + +select * from @t2 as b + left join /*+ merge() */ @t3 as c on b.k2 = c.k3 + left join @t1 as a on a.k1 = b.k2 and a.k1=c.k3; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_align3-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_force_align3-off.cfg new file mode 100644 index 0000000000..9299e9217a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_align3-off.cfg @@ -0,0 +1,3 @@ +providers yt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_align3.cfg b/yt/yql/tests/sql/suites/join/mergejoin_force_align3.cfg new file mode 100644 index 0000000000..bb349dd8ab --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_align3.cfg @@ -0,0 +1 @@ +providers yt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_align3.sql b/yt/yql/tests/sql/suites/join/mergejoin_force_align3.sql new file mode 100644 index 0000000000..1cb847dd29 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_align3.sql @@ -0,0 +1,19 @@ +/* syntax version 1 */ +/* postgres can not */ + +USE plato; + +pragma yt.JoinMergeTablesLimit="100"; +pragma yt.JoinMergeForce; + +insert into @t1 +select (1, 1u) as k1, 100u as v1; + +insert into @t2 +select (1u, 1) as k2, 100 as v2; + + +commit; + +select * from @t1 as a join @t2 as b on a.k1 = b.k2 and a.v1 = b.v2; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_no_sorted-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_force_no_sorted-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_no_sorted-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_no_sorted.cfg b/yt/yql/tests/sql/suites/join/mergejoin_force_no_sorted.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_no_sorted.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_no_sorted.sql b/yt/yql/tests/sql/suites/join/mergejoin_force_no_sorted.sql new file mode 100644 index 0000000000..a7cd554ffb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_no_sorted.sql @@ -0,0 +1,5 @@ +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeForce="true"; + +select a.key as key from Input1 as a join Input2 as b using(key) order by key; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_one_sorted-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_force_one_sorted-off.cfg new file mode 100644 index 0000000000..644d022f87 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_one_sorted-off.cfg @@ -0,0 +1,4 @@ +in Input input1.txt +in InputSorted sorted_uniq.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_one_sorted.cfg b/yt/yql/tests/sql/suites/join/mergejoin_force_one_sorted.cfg new file mode 100644 index 0000000000..a85b008cc0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_one_sorted.cfg @@ -0,0 +1,2 @@ +in Input input1.txt +in InputSorted sorted_uniq.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_one_sorted.sql b/yt/yql/tests/sql/suites/join/mergejoin_force_one_sorted.sql new file mode 100644 index 0000000000..ad74c2340b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_one_sorted.sql @@ -0,0 +1,6 @@ +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeForce="true"; +pragma yt.JoinMergeUnsortedFactor="0"; + +select a.key as key from InputSorted as a join Input as b using(key) order by key; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_per_link-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_force_per_link-off.cfg new file mode 100644 index 0000000000..7f40aa5617 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_per_link-off.cfg @@ -0,0 +1,6 @@ +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +providers yt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_per_link.cfg b/yt/yql/tests/sql/suites/join/mergejoin_force_per_link.cfg new file mode 100644 index 0000000000..f22309ab5f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_per_link.cfg @@ -0,0 +1,4 @@ +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_force_per_link.sql b/yt/yql/tests/sql/suites/join/mergejoin_force_per_link.sql new file mode 100644 index 0000000000..7a30768b9f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_force_per_link.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ + +use plato; +pragma yt.JoinMergeTablesLimit="10"; + +select + a.key as k1, + b.key as k2, + c.key as k3, + a.subkey as sk1, + b.subkey as sk2, + c.subkey as sk3 +from + Input1 as a join Input2 as b on a.key = b.key + join /*+ merge() */ Input3 as c on b.key = c.key +order by k3 +; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_input1.txt.attr b/yt/yql/tests/sql/suites/join/mergejoin_input1.txt.attr new file mode 100644 index 0000000000..6a779223f1 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_input1.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "PhraseID"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "uint64" + }; + { + "name" = "BaseNo"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "uint16" + }; + { + "name" = "Text"; + "required" = %false; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/mergejoin_input2.txt.attr b/yt/yql/tests/sql/suites/join/mergejoin_input2.txt.attr new file mode 100644 index 0000000000..1a5403e22b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_input2.txt.attr @@ -0,0 +1,60 @@ +{ + "_yql_row_spec" = { + "StrictSchema" = %true; + "Type" = [ + "StructType"; + [ + [ + "BannerID"; + [ + "OptionalType"; + [ + "DataType"; + "Int64" + ] + ] + ]; + [ + "BaseNo"; + [ + "OptionalType"; + [ + "DataType"; + "Uint16" + ] + ] + ]; + [ + "PhraseID"; + [ + "OptionalType"; + [ + "DataType"; + "Uint64" + ] + ] + ]; + [ + "ResultCost"; + [ + "OptionalType"; + [ + "DataType"; + "Int64" + ] + ] + ]; + [ + "ResultFlatCost"; + [ + "OptionalType"; + [ + "DataType"; + "Int64" + ] + ] + ] + ] + ] + }; +} diff --git a/yt/yql/tests/sql/suites/join/mergejoin_left_null_column-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_left_null_column-off.cfg new file mode 100644 index 0000000000..0eb1ab8cde --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_left_null_column-off.cfg @@ -0,0 +1,3 @@ +in Input1 sorted_by_kv1.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_left_null_column.cfg b/yt/yql/tests/sql/suites/join/mergejoin_left_null_column.cfg new file mode 100644 index 0000000000..fa48e4fa82 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_left_null_column.cfg @@ -0,0 +1 @@ +in Input1 sorted_by_kv1.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_left_null_column.sql b/yt/yql/tests/sql/suites/join/mergejoin_left_null_column.sql new file mode 100644 index 0000000000..1dd27bcc3a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_left_null_column.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ + +PRAGMA yt.JoinMergeTablesLimit="10"; +PRAGMA yt.JoinAllowColumnRenames="true"; +PRAGMA yt.JoinMergeUnsortedFactor="5.0"; + +USE plato; + +$t = [<|"x":"bbb", "y":1, "z":Null|>, <|"x":"bbb", "y":2, "z":Null|>]; + +SELECT * FROM Input1 AS a LEFT JOIN AS_TABLE($t) AS b ON a.k1 = b.x ORDER BY k1, y; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_narrows_output_sort-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_narrows_output_sort-off.cfg new file mode 100644 index 0000000000..a15ee3ce2e --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_narrows_output_sort-off.cfg @@ -0,0 +1,5 @@ +in Input1 kv1_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_narrows_output_sort.cfg b/yt/yql/tests/sql/suites/join/mergejoin_narrows_output_sort.cfg new file mode 100644 index 0000000000..4d81d34ed9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_narrows_output_sort.cfg @@ -0,0 +1,3 @@ +in Input1 kv1_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_narrows_output_sort.sql b/yt/yql/tests/sql/suites/join/mergejoin_narrows_output_sort.sql new file mode 100644 index 0000000000..c5ddba7f1b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_narrows_output_sort.sql @@ -0,0 +1,11 @@ +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="3"; +pragma yt.JoinAllowColumnRenames="true"; +pragma SimpleColumns; + +from Input3 as c +join Input4 as d on c.k3 = d.k4 +right only join Input1 as a on a.k1 = c.k3 and a.v1 = c.v3 +select * order by u1 + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort-off.cfg new file mode 100644 index 0000000000..8e80f78742 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort-off.cfg @@ -0,0 +1,4 @@ +in SortedByKey sorted_uniq.txt +in SortedBySubkeyValue sorted_uniq1.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort.cfg b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort.cfg new file mode 100644 index 0000000000..ea9e6ce443 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort.cfg @@ -0,0 +1,2 @@ +in SortedByKey sorted_uniq.txt +in SortedBySubkeyValue sorted_uniq1.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort.sql b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort.sql new file mode 100644 index 0000000000..24b8a2901b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort.sql @@ -0,0 +1,42 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="0"; +pragma yt.JoinAllowColumnRenames="true"; +pragma yt.JoinMergeSetTopLevelFullSort="true"; + +FROM SortedBySubkeyValue AS a INNER JOIN SortedByKey AS b ON a.subkey = b.key +SELECT b.key, a.subkey, a.value +ORDER BY a.subkey, a.value, b.key; + +FROM SortedBySubkeyValue AS a RIGHT JOIN SortedByKey AS b ON a.subkey = b.key +SELECT b.key, a.subkey, a.value +ORDER BY b.key; + +FROM SortedBySubkeyValue AS a LEFT JOIN SortedByKey AS b ON a.subkey = b.key +SELECT b.key, a.subkey, a.value +ORDER BY a.subkey, a.value; + +FROM SortedBySubkeyValue AS a FULL JOIN SortedByKey AS b ON a.subkey = b.key +SELECT b.key, a.subkey, a.value +ORDER BY b.key, a.subkey, a.value; + +FROM SortedBySubkeyValue AS a RIGHT ONLY JOIN SortedByKey AS b ON a.subkey = b.key +SELECT b.key +ORDER BY b.key; + +FROM SortedBySubkeyValue AS a LEFT ONLY JOIN SortedByKey AS b ON a.subkey = b.key +SELECT a.subkey, a.value +ORDER BY a.subkey, a.value; + +FROM SortedBySubkeyValue AS a EXCLUSION JOIN SortedByKey AS b ON a.subkey = b.key +SELECT b.key, a.subkey, a.value +ORDER BY b.key, a.subkey, a.value; + +FROM SortedBySubkeyValue AS a RIGHT SEMI JOIN SortedByKey AS b ON a.subkey = b.key +SELECT b.key +ORDER BY b.key; + +FROM SortedBySubkeyValue AS a LEFT SEMI JOIN SortedByKey AS b ON a.subkey = b.key +SELECT a.subkey, a.value +ORDER BY a.subkey, a.value; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_cross-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_cross-off.cfg new file mode 100644 index 0000000000..287d1fa1ed --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_cross-off.cfg @@ -0,0 +1,5 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +in Input3 sorted_by_kv3.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_cross.cfg b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_cross.cfg new file mode 100644 index 0000000000..88a5beef60 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_cross.cfg @@ -0,0 +1,3 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +in Input3 sorted_by_kv3.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_cross.sql b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_cross.sql new file mode 100644 index 0000000000..8775257805 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_cross.sql @@ -0,0 +1,11 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="0"; +pragma yt.JoinAllowColumnRenames="true"; +pragma yt.JoinMergeSetTopLevelFullSort="true"; + +FROM Input1 AS a JOIN Input2 AS b ON b.k2 = a.k1 + CROSS JOIN Input3 AS c +SELECT c.k3 AS ck3, c.k3 AS ck3_extra, c.v3, a.k1 as ak1 ORDER BY ak1, ck3; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_nested-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_nested-off.cfg new file mode 100644 index 0000000000..7859898010 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_nested-off.cfg @@ -0,0 +1,5 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_nested.cfg b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_nested.cfg new file mode 100644 index 0000000000..086641db8d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_nested.cfg @@ -0,0 +1,3 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_nested.sql b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_nested.sql new file mode 100644 index 0000000000..3e01d0acda --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_nested.sql @@ -0,0 +1,12 @@ +/* ignore yt detailed plan diff */ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="0"; +pragma yt.JoinAllowColumnRenames="true"; + +FROM Input1 AS a JOIN Input2 AS b ON b.k2 = a.k1 AND a.v1 = b.v2 + JOIN Input3 AS c ON a.k1 = c.k3 AND a.v1 = c.v3 +SELECT c.k3 AS ck3, c.k3 AS ck3_extra, c.k3 AS ck3_extra2, c.v3, a.k1 as ak1 +ORDER BY ck3, ck3_extra, ck3_extra2, c.v3 -- should be noop +; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_unmatched.cfg b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_unmatched.cfg new file mode 100644 index 0000000000..c13c3496d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_unmatched.cfg @@ -0,0 +1,3 @@ +in Input1 kv1_sorted1.txt +in Input2 kv2_sorted1.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_unmatched.sql b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_unmatched.sql new file mode 100644 index 0000000000..bc9b116f5d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_saves_output_sort_unmatched.sql @@ -0,0 +1,11 @@ +/* ignore yt detailed plan diff */ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="0"; +pragma yt.JoinAllowColumnRenames="true"; + +FROM Input1 AS a JOIN Input2 AS b ON b.k2 = a.k1 AND a.v1 = b.v2 +SELECT b.k2 AS bk2, b.v2 as bv2, a.k1 as ak1 +ORDER BY bv2 -- should be a separate sort +; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_semi_composite_to_inner-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_semi_composite_to_inner-off.cfg new file mode 100644 index 0000000000..d2366da42e --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_semi_composite_to_inner-off.cfg @@ -0,0 +1,6 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_semi_composite_to_inner.cfg b/yt/yql/tests/sql/suites/join/mergejoin_semi_composite_to_inner.cfg new file mode 100644 index 0000000000..829b6d19f2 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_semi_composite_to_inner.cfg @@ -0,0 +1,4 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_semi_composite_to_inner.sql b/yt/yql/tests/sql/suites/join/mergejoin_semi_composite_to_inner.sql new file mode 100644 index 0000000000..4897e2737b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_semi_composite_to_inner.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="3"; +pragma yt.JoinAllowColumnRenames="true"; + +$semi = select * from Input3 as c join Input4 as d on c.k3 = d.k4; + +from $semi as semi +right semi join Input1 as a on a.k1 = semi.k3 and a.v1 = semi.v3 +join Input2 as b on b.k2 = a.k1 and b.v2 = a.v1 +select * order by u1; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_semi_to_inner-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_semi_to_inner-off.cfg new file mode 100644 index 0000000000..aed2b8c61b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_semi_to_inner-off.cfg @@ -0,0 +1,4 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_semi_to_inner.cfg b/yt/yql/tests/sql/suites/join/mergejoin_semi_to_inner.cfg new file mode 100644 index 0000000000..6098eb907d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_semi_to_inner.cfg @@ -0,0 +1,2 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_semi_to_inner.sql b/yt/yql/tests/sql/suites/join/mergejoin_semi_to_inner.sql new file mode 100644 index 0000000000..3778d9f05b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_semi_to_inner.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="0"; +pragma yt.JoinAllowColumnRenames="true"; + +from Input1 as a +left semi join Input2 as b on a.k1 = b.k2 and a.v1 = b.v2 +select * order by u1 + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_small_primary-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_small_primary-off.cfg new file mode 100644 index 0000000000..1f7a620911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_small_primary-off.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_small_primary.cfg b/yt/yql/tests/sql/suites/join/mergejoin_small_primary.cfg new file mode 100644 index 0000000000..df8cd9f2c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_small_primary.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_small_primary.sql b/yt/yql/tests/sql/suites/join/mergejoin_small_primary.sql new file mode 100644 index 0000000000..be3ce895b1 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_small_primary.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinAllowColumnRenames="true"; +pragma yt.JoinMergeUseSmallAsPrimary="true"; + +-- Input2 is smaller than Input1 +select * from Input2 as b join Input1 as a on a.k1 = b.k2 +order by a.v1, b.v2; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_inner.cfg b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_inner.cfg new file mode 100644 index 0000000000..1af5db027b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_inner.cfg @@ -0,0 +1,3 @@ +providers yt +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_inner.sql b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_inner.sql new file mode 100644 index 0000000000..86a76d3573 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_inner.sql @@ -0,0 +1,15 @@ +/* ignore yt detailed plan diff */ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinAllowColumnRenames="true"; + +$inner = + (FROM Input1 AS a JOIN Input2 AS b ON b.k2 = a.k1 AND a.v1 = b.v2 + SELECT b.k2 AS bk2, b.k2 AS bk2_extra, b.v2 AS bv2, a.k1 as ak1); + +SELECT * FROM $inner ORDER BY bv2, bk2_extra; +SELECT * FROM $inner ORDER BY bk2, bk2_extra, bv2; +SELECT * FROM $inner ORDER BY bk2_extra, bv2; +SELECT * FROM $inner ORDER BY bk2_extra; +SELECT * FROM $inner ORDER BY ak1; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_left.cfg b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_left.cfg new file mode 100644 index 0000000000..2de8793752 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_left.cfg @@ -0,0 +1,3 @@ +providers yt +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_left.sql b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_left.sql new file mode 100644 index 0000000000..16c281d696 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_left.sql @@ -0,0 +1,14 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinAllowColumnRenames="true"; + +$left = + (FROM Input1 AS a LEFT JOIN Input2 AS b ON b.k2 = a.k1 + SELECT b.k2 AS bk2, b.k2 AS bk2_extra, b.v2 AS bv2, a.k1 as ak1); + +SELECT * FROM $left ORDER BY bv2, bk2_extra; +SELECT * FROM $left ORDER BY bk2, bk2_extra, bv2; +SELECT * FROM $left ORDER BY bk2_extra, bv2; +SELECT * FROM $left ORDER BY bk2_extra; +SELECT * FROM $left ORDER BY ak1; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_nomatch.cfg b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_nomatch.cfg new file mode 100644 index 0000000000..2de8793752 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_nomatch.cfg @@ -0,0 +1,3 @@ +providers yt +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_nomatch.sql b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_nomatch.sql new file mode 100644 index 0000000000..ed613582c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_nomatch.sql @@ -0,0 +1,8 @@ +/* ignore yt detailed plan diff */ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinAllowColumnRenames="true"; + +FROM Input1 AS a JOIN Input2 AS b ON b.k2 = a.k1 +SELECT b.v2 AS bv2, a.k1 as ak1 ORDER BY ak1, bv2; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_right.cfg b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_right.cfg new file mode 100644 index 0000000000..1af5db027b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_right.cfg @@ -0,0 +1,3 @@ +providers yt +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_right.sql b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_right.sql new file mode 100644 index 0000000000..2e4238f110 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_sorts_output_for_sort_right.sql @@ -0,0 +1,14 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinAllowColumnRenames="true"; + +$right = + (FROM Input1 AS a RIGHT JOIN Input2 AS b ON b.k2 = a.k1 AND a.v1 = b.v2 + SELECT b.k2 AS bk2, b.k2 AS bk2_extra, b.v2 AS bv2, a.k1 as ak1, a.v1 as av1); + +SELECT * FROM $right ORDER BY bv2, bk2_extra; +SELECT * FROM $right ORDER BY bk2, bk2_extra, bv2; +SELECT * FROM $right ORDER BY bk2_extra, bv2; +SELECT * FROM $right ORDER BY bk2_extra; +SELECT * FROM $right ORDER BY ak1, av1; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_unused_keys.cfg b/yt/yql/tests/sql/suites/join/mergejoin_unused_keys.cfg new file mode 100644 index 0000000000..9a930ffe48 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_unused_keys.cfg @@ -0,0 +1,6 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +in Input5 kv5_sorted.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_unused_keys.sql b/yt/yql/tests/sql/suites/join/mergejoin_unused_keys.sql new file mode 100644 index 0000000000..78bc056914 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_unused_keys.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinMergeTablesLimit="10"; + +select + +v3 + +from Input1 as a +join Input2 as b on (a.k1 = b.k2) +join Input3 as c on (a.k1 = c.k3) +order by v3; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names-off.cfg new file mode 100644 index 0000000000..8e80f78742 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names-off.cfg @@ -0,0 +1,4 @@ +in SortedByKey sorted_uniq.txt +in SortedBySubkeyValue sorted_uniq1.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names.cfg b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names.cfg new file mode 100644 index 0000000000..ea9e6ce443 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names.cfg @@ -0,0 +1,2 @@ +in SortedByKey sorted_uniq.txt +in SortedBySubkeyValue sorted_uniq1.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names.sql b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names.sql new file mode 100644 index 0000000000..7fe038ad6a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names.sql @@ -0,0 +1,19 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="3.0"; +pragma yt.JoinAllowColumnRenames="true"; + + +FROM SortedBySubkeyValue as a JOIN SortedByKey as b on a.subkey=b.key +SELECT * ORDER BY a.subkey, b.key; + +FROM SortedBySubkeyValue as a JOIN SortedByKey as b on a.subkey=b.key +SELECT a.subkey, b.key ORDER BY a.subkey, b.key; + + +FROM SortedBySubkeyValue as a LEFT JOIN SortedByKey as b on a.subkey=b.key +SELECT * ORDER BY a.subkey; + +FROM SortedBySubkeyValue as a RIGHT JOIN SortedByKey as b on a.subkey=b.key +SELECT * ORDER BY b.key; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nested-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nested-off.cfg new file mode 100644 index 0000000000..5d2e73b721 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nested-off.cfg @@ -0,0 +1,5 @@ +in Input sorted_by_key1.txt +in Input1 sorted_by_k1.txt +in Input2 sorted_by_k2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nested.cfg b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nested.cfg new file mode 100644 index 0000000000..15fbfe10b8 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nested.cfg @@ -0,0 +1,3 @@ +in Input sorted_by_key1.txt +in Input1 sorted_by_k1.txt +in Input2 sorted_by_k2.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nested.sql b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nested.sql new file mode 100644 index 0000000000..427553d99e --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nested.sql @@ -0,0 +1,11 @@ +/* ignore yt detailed plan diff */ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="3.0"; +pragma yt.JoinAllowColumnRenames="true"; + +FROM Input AS a JOIN Input1 AS b ON b.k1=a.key + JOIN Input2 AS c ON a.key=c.k2 +SELECT a.value as avalue, b.v1, c.k2 as ck2 ORDER BY avalue, b.v1, ck2; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nonsorted-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nonsorted-off.cfg new file mode 100644 index 0000000000..ec195ece46 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nonsorted-off.cfg @@ -0,0 +1,4 @@ +in Unsorted input2.txt +in SortedBySubkeyValue sorted_uniq1.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nonsorted.cfg b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nonsorted.cfg new file mode 100644 index 0000000000..e049d17dbf --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nonsorted.cfg @@ -0,0 +1,2 @@ +in Unsorted input2.txt +in SortedBySubkeyValue sorted_uniq1.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nonsorted.sql b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nonsorted.sql new file mode 100644 index 0000000000..d97fb38e04 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_nonsorted.sql @@ -0,0 +1,11 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="100.0"; +pragma yt.JoinAllowColumnRenames="true"; + +$unsorted = (SELECT key, CAST((CAST(subkey as Int32) + 2) as String) as sk, value as val FROM Unsorted); + +FROM SortedBySubkeyValue AS a JOIN $unsorted AS b ON a.subkey=b.sk AND a.value=b.val +SELECT * ORDER BY a.key,b.key; + diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_norename-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_norename-off.cfg new file mode 100644 index 0000000000..8e80f78742 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_norename-off.cfg @@ -0,0 +1,4 @@ +in SortedByKey sorted_uniq.txt +in SortedBySubkeyValue sorted_uniq1.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_norename.cfg b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_norename.cfg new file mode 100644 index 0000000000..ea9e6ce443 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_norename.cfg @@ -0,0 +1,2 @@ +in SortedByKey sorted_uniq.txt +in SortedBySubkeyValue sorted_uniq1.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_norename.sql b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_norename.sql new file mode 100644 index 0000000000..07ad22faf7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_different_key_names_norename.sql @@ -0,0 +1,19 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="3.0"; +pragma yt.JoinAllowColumnRenames="false"; + + +FROM SortedBySubkeyValue as a JOIN SortedByKey as b on a.subkey=b.key +SELECT * ORDER BY a.subkey, b.key; + +FROM SortedBySubkeyValue as a JOIN SortedByKey as b on a.subkey=b.key +SELECT a.subkey, b.key ORDER BY a.subkey, b.key; + + +FROM SortedBySubkeyValue as a LEFT JOIN SortedByKey as b on a.subkey=b.key +SELECT * ORDER BY a.subkey; + +FROM SortedBySubkeyValue as a RIGHT JOIN SortedByKey as b on a.subkey=b.key +SELECT * ORDER BY b.key; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_reverse_key_order-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_with_reverse_key_order-off.cfg new file mode 100644 index 0000000000..01597c0916 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_reverse_key_order-off.cfg @@ -0,0 +1,4 @@ +in Input1 mergejoin_input1.txt +in Input2 mergejoin_input2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_reverse_key_order.cfg b/yt/yql/tests/sql/suites/join/mergejoin_with_reverse_key_order.cfg new file mode 100644 index 0000000000..3ea969d8b4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_reverse_key_order.cfg @@ -0,0 +1,2 @@ +in Input1 mergejoin_input1.txt +in Input2 mergejoin_input2.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_reverse_key_order.sql b/yt/yql/tests/sql/suites/join/mergejoin_with_reverse_key_order.sql new file mode 100644 index 0000000000..5cc0731682 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_reverse_key_order.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="3.0"; + +SELECT pd.Text + FROM Input2 as m2 + INNER JOIN Input1 as pd + USING (BaseNo, PhraseID) +ORDER BY pd.Text; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_table_range-off.cfg b/yt/yql/tests/sql/suites/join/mergejoin_with_table_range-off.cfg new file mode 100644 index 0000000000..7dd23dd911 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_table_range-off.cfg @@ -0,0 +1,6 @@ +in Left1 sorted_by_key1.txt +in Left2 sorted_by_key2.txt +in Right1 sorted_by_key3.txt +in Right2 sorted_by_key4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_table_range.cfg b/yt/yql/tests/sql/suites/join/mergejoin_with_table_range.cfg new file mode 100644 index 0000000000..5182327159 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_table_range.cfg @@ -0,0 +1,4 @@ +in Left1 sorted_by_key1.txt +in Left2 sorted_by_key2.txt +in Right1 sorted_by_key3.txt +in Right2 sorted_by_key4.txt diff --git a/yt/yql/tests/sql/suites/join/mergejoin_with_table_range.sql b/yt/yql/tests/sql/suites/join/mergejoin_with_table_range.sql new file mode 100644 index 0000000000..95f96e883f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/mergejoin_with_table_range.sql @@ -0,0 +1,11 @@ +PRAGMA DisableSimpleColumns; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="3.0"; + +SELECT * + FROM CONCAT("Left1", "Left2") as a + INNER JOIN CONCAT("Right1", "Right2") as b + USING(key) +ORDER BY a.value,b.value; + diff --git a/yt/yql/tests/sql/suites/join/nested_semi_join-off.cfg b/yt/yql/tests/sql/suites/join/nested_semi_join-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/nested_semi_join-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/nested_semi_join.cfg b/yt/yql/tests/sql/suites/join/nested_semi_join.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/nested_semi_join.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/nested_semi_join.sql b/yt/yql/tests/sql/suites/join/nested_semi_join.sql new file mode 100644 index 0000000000..f8b8277292 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/nested_semi_join.sql @@ -0,0 +1,9 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +use plato; + +$w1 = (select u.subkey as subkey, u.value as value from Input1 as u left semi join Input1 as v on u.key == v.key); + +$t1 = (select x.value from Input1 as x left semi join $w1 as y on x.subkey == y.subkey); + +select * from $t1; diff --git a/yt/yql/tests/sql/suites/join/no_empty_join_for_dyn-off.cfg b/yt/yql/tests/sql/suites/join/no_empty_join_for_dyn-off.cfg new file mode 100644 index 0000000000..893ac062c3 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/no_empty_join_for_dyn-off.cfg @@ -0,0 +1,5 @@ +in Input1 empty_dynamic.txt +in Input2 empty_dynamic.txt +providers yt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/no_empty_join_for_dyn.cfg b/yt/yql/tests/sql/suites/join/no_empty_join_for_dyn.cfg new file mode 100644 index 0000000000..9b9c114a16 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/no_empty_join_for_dyn.cfg @@ -0,0 +1,3 @@ +in Input1 empty_dynamic.txt +in Input2 empty_dynamic.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/no_empty_join_for_dyn.sql b/yt/yql/tests/sql/suites/join/no_empty_join_for_dyn.sql new file mode 100644 index 0000000000..cb7b8b50d4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/no_empty_join_for_dyn.sql @@ -0,0 +1,6 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +SELECT * +FROM plato.Input1 as A +INNER JOIN plato.Input2 as B +ON A.key=B.key; diff --git a/yt/yql/tests/sql/suites/join/nopushdown_filter_over_inner-off.cfg b/yt/yql/tests/sql/suites/join/nopushdown_filter_over_inner-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/nopushdown_filter_over_inner-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/nopushdown_filter_over_inner.cfg b/yt/yql/tests/sql/suites/join/nopushdown_filter_over_inner.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/nopushdown_filter_over_inner.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/nopushdown_filter_over_inner.sql b/yt/yql/tests/sql/suites/join/nopushdown_filter_over_inner.sql new file mode 100644 index 0000000000..ed4f7c70ca --- /dev/null +++ b/yt/yql/tests/sql/suites/join/nopushdown_filter_over_inner.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +PRAGMA DisableSimpleColumns; +use plato; + +-- should not pushdown +select * from Input1 as a inner join Input2 as b on a.key = b.key where Unwrap(cast(a.key as Int32)) > 100 order by a.key; diff --git a/yt/yql/tests/sql/suites/join/nopushdown_filter_with_depends_on-off.cfg b/yt/yql/tests/sql/suites/join/nopushdown_filter_with_depends_on-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/nopushdown_filter_with_depends_on-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/nopushdown_filter_with_depends_on.cfg b/yt/yql/tests/sql/suites/join/nopushdown_filter_with_depends_on.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/nopushdown_filter_with_depends_on.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/nopushdown_filter_with_depends_on.sql b/yt/yql/tests/sql/suites/join/nopushdown_filter_with_depends_on.sql new file mode 100644 index 0000000000..6066449757 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/nopushdown_filter_with_depends_on.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +/* hybridfile can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 4 */ +use plato; + +-- should not pushdown +select * from Input1 as a left semi join Input2 as b using(key) where Random(TableRow()) < 0.1 order by key; + diff --git a/yt/yql/tests/sql/suites/join/opt_on_opt_side-off.cfg b/yt/yql/tests/sql/suites/join/opt_on_opt_side-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/opt_on_opt_side-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/opt_on_opt_side.cfg b/yt/yql/tests/sql/suites/join/opt_on_opt_side.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/opt_on_opt_side.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/opt_on_opt_side.sql b/yt/yql/tests/sql/suites/join/opt_on_opt_side.sql new file mode 100644 index 0000000000..f4abb9909e --- /dev/null +++ b/yt/yql/tests/sql/suites/join/opt_on_opt_side.sql @@ -0,0 +1,20 @@ +PRAGMA DisableSimpleColumns; +use plato; + +SELECT + A.key, + B.subkey +FROM + Input2 AS A +LEFT JOIN + ( + SELECT + key, + CAST(key AS INT) AS subkey + FROM + Input3 + ) AS B +ON + A.key == B.key +ORDER BY A.key +; diff --git a/yt/yql/tests/sql/suites/join/opt_on_opt_side_with_group-off.cfg b/yt/yql/tests/sql/suites/join/opt_on_opt_side_with_group-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/opt_on_opt_side_with_group-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/opt_on_opt_side_with_group.cfg b/yt/yql/tests/sql/suites/join/opt_on_opt_side_with_group.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/opt_on_opt_side_with_group.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/opt_on_opt_side_with_group.sql b/yt/yql/tests/sql/suites/join/opt_on_opt_side_with_group.sql new file mode 100644 index 0000000000..f01cd2147d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/opt_on_opt_side_with_group.sql @@ -0,0 +1,24 @@ +PRAGMA DisableSimpleColumns; +use plato; + +SELECT + A.key as key, + B.subkey, + COUNT(*) AS count +FROM + Input2 AS A +LEFT JOIN + ( + SELECT + key, + CAST(key AS INT) AS subkey + FROM + Input3 + ) AS B +ON + A.key == B.key +GROUP BY + A.key, B.subkey +ORDER BY + key +; diff --git a/yt/yql/tests/sql/suites/join/order_of_qualified-off.cfg b/yt/yql/tests/sql/suites/join/order_of_qualified-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/order_of_qualified-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/order_of_qualified.cfg b/yt/yql/tests/sql/suites/join/order_of_qualified.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/order_of_qualified.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/order_of_qualified.sql b/yt/yql/tests/sql/suites/join/order_of_qualified.sql new file mode 100644 index 0000000000..a28e3beaea --- /dev/null +++ b/yt/yql/tests/sql/suites/join/order_of_qualified.sql @@ -0,0 +1,6 @@ +PRAGMA DisableSimpleColumns; +use plato; +SELECT b.*,1 as q,a.* +FROM Input2 AS a +JOIN Input3 AS b +ON a.value == b.value; diff --git a/yt/yql/tests/sql/suites/join/premap_common_cross-off.cfg b/yt/yql/tests/sql/suites/join/premap_common_cross-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_cross-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_common_cross.cfg b/yt/yql/tests/sql/suites/join/premap_common_cross.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_cross.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/premap_common_cross.sql b/yt/yql/tests/sql/suites/join/premap_common_cross.sql new file mode 100644 index 0000000000..2790c4a108 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_cross.sql @@ -0,0 +1,8 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; + +from (select key as akey, subkey, value as avalue from Input1) as a +cross join Input2 as b +select a.akey, a.subkey, b.subkey, b.value +order by a.akey, a.subkey, b.subkey, b.value; diff --git a/yt/yql/tests/sql/suites/join/premap_common_inner-off.cfg b/yt/yql/tests/sql/suites/join/premap_common_inner-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_inner-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_common_inner.cfg b/yt/yql/tests/sql/suites/join/premap_common_inner.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_inner.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/premap_common_inner.sql b/yt/yql/tests/sql/suites/join/premap_common_inner.sql new file mode 100644 index 0000000000..eab52d0662 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_inner.sql @@ -0,0 +1,8 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; + +from (select key, subkey, 1 as value from Input1) as a +join Input2 as b using(key) +select a.key, a.subkey, a.value, b.value +order by a.key; diff --git a/yt/yql/tests/sql/suites/join/premap_common_inner_both_sides-off.cfg b/yt/yql/tests/sql/suites/join/premap_common_inner_both_sides-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_inner_both_sides-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_common_inner_both_sides.cfg b/yt/yql/tests/sql/suites/join/premap_common_inner_both_sides.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_inner_both_sides.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/premap_common_inner_both_sides.sql b/yt/yql/tests/sql/suites/join/premap_common_inner_both_sides.sql new file mode 100644 index 0000000000..7689cc7fa6 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_inner_both_sides.sql @@ -0,0 +1,8 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; + +from (select key, subkey, 1 as value from Input1) as a +join (select key, subkey, 2 as value from Input2) as b using(key) +select a.key as key, a.subkey, a.value, b.subkey, b.value +order by key; diff --git a/yt/yql/tests/sql/suites/join/premap_common_inner_filter-off.cfg b/yt/yql/tests/sql/suites/join/premap_common_inner_filter-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_inner_filter-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_common_inner_filter.cfg b/yt/yql/tests/sql/suites/join/premap_common_inner_filter.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_inner_filter.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/premap_common_inner_filter.sql b/yt/yql/tests/sql/suites/join/premap_common_inner_filter.sql new file mode 100644 index 0000000000..24d54e5f9c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_inner_filter.sql @@ -0,0 +1,8 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; + +from (select key, subkey || key as subkey, value from Input1 where value != "ddd") as a +join Input2 as b using(key) +select a.key, a.subkey, b.value +order by a.key; diff --git a/yt/yql/tests/sql/suites/join/premap_common_left_cross-off.cfg b/yt/yql/tests/sql/suites/join/premap_common_left_cross-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_left_cross-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_common_left_cross.cfg b/yt/yql/tests/sql/suites/join/premap_common_left_cross.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_left_cross.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/premap_common_left_cross.sql b/yt/yql/tests/sql/suites/join/premap_common_left_cross.sql new file mode 100644 index 0000000000..a7c8302df9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_left_cross.sql @@ -0,0 +1,13 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; + +$one = (select key, 1 as subkey, value from Input1); +$two = (select key, value from Input2); +$three = (select key, value, 2 as subkey from Input3); + +from $one as a +cross join $two as b +left join $three as c on (c.key = a.key and c.value = b.value) +select * order by a.key,a.subkey,b.key,b.value + diff --git a/yt/yql/tests/sql/suites/join/premap_common_multiparents-off.cfg b/yt/yql/tests/sql/suites/join/premap_common_multiparents-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_multiparents-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_common_multiparents.cfg b/yt/yql/tests/sql/suites/join/premap_common_multiparents.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_multiparents.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/premap_common_multiparents.sql b/yt/yql/tests/sql/suites/join/premap_common_multiparents.sql new file mode 100644 index 0000000000..e31ee06f4e --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_multiparents.sql @@ -0,0 +1,15 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; + +$map = (select key, subkey, 1 as value, 2 as another from Input1); + +from $map as a +join Input2 as b using(key) +select a.key, a.value, b.value +order by a.key,a.value; + +from $map as a +join Input3 as b using(key) +select a.key, a.value, a.subkey, b.value +order by a.key,a.value; diff --git a/yt/yql/tests/sql/suites/join/premap_common_multiparents_no_premap-off.cfg b/yt/yql/tests/sql/suites/join/premap_common_multiparents_no_premap-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_multiparents_no_premap-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_common_multiparents_no_premap.cfg b/yt/yql/tests/sql/suites/join/premap_common_multiparents_no_premap.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_multiparents_no_premap.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/premap_common_multiparents_no_premap.sql b/yt/yql/tests/sql/suites/join/premap_common_multiparents_no_premap.sql new file mode 100644 index 0000000000..e49c29fa42 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_multiparents_no_premap.sql @@ -0,0 +1,14 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; + +$map = (select key, subkey, 1 as value, 2 as another from Input1); + +from $map as a +join Input2 as b using(key) +select a.key, a.value, b.value +order by a.key,a.value; + +from $map as a +select a.key, a.value, a.subkey +order by a.key,a.value; diff --git a/yt/yql/tests/sql/suites/join/premap_common_right_tablecontent-off.cfg b/yt/yql/tests/sql/suites/join/premap_common_right_tablecontent-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_right_tablecontent-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_common_right_tablecontent.cfg b/yt/yql/tests/sql/suites/join/premap_common_right_tablecontent.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_right_tablecontent.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/premap_common_right_tablecontent.sql b/yt/yql/tests/sql/suites/join/premap_common_right_tablecontent.sql new file mode 100644 index 0000000000..1bd47b60a0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_right_tablecontent.sql @@ -0,0 +1,11 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; + + +$keys = (select key from Input3); + +from (select key, value, key IN $keys as flag from Input1) as a +right join (select key, key IN $keys as flag from Input2) as b using(key) +select a.key, a.value, a.flag, b.flag +order by a.key; diff --git a/yt/yql/tests/sql/suites/join/premap_common_semi-off.cfg b/yt/yql/tests/sql/suites/join/premap_common_semi-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_semi-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_common_semi.cfg b/yt/yql/tests/sql/suites/join/premap_common_semi.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_semi.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/premap_common_semi.sql b/yt/yql/tests/sql/suites/join/premap_common_semi.sql new file mode 100644 index 0000000000..343b8748b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_common_semi.sql @@ -0,0 +1,8 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; + +from (select key, subkey as asubkey, value from Input1) as a +left semi join (select key, 1 as value from Input2) as b using(key) +select a.key, a.asubkey +order by a.key; diff --git a/yt/yql/tests/sql/suites/join/premap_context_dep-off.cfg b/yt/yql/tests/sql/suites/join/premap_context_dep-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_context_dep-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_context_dep.cfg b/yt/yql/tests/sql/suites/join/premap_context_dep.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_context_dep.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/premap_context_dep.sql b/yt/yql/tests/sql/suites/join/premap_context_dep.sql new file mode 100644 index 0000000000..277a634626 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_context_dep.sql @@ -0,0 +1,8 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; + +from (select key, subkey || key as subkey, value, TableRecordIndex() as tr from Input1) as a +join Input2 as b using(key) +select a.key, a.subkey, a.tr, b.value +order by a.key, a.tr; diff --git a/yt/yql/tests/sql/suites/join/premap_map_cross-off.cfg b/yt/yql/tests/sql/suites/join/premap_map_cross-off.cfg new file mode 100644 index 0000000000..287d1fa1ed --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_map_cross-off.cfg @@ -0,0 +1,5 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +in Input3 sorted_by_kv3.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_map_cross.cfg b/yt/yql/tests/sql/suites/join/premap_map_cross.cfg new file mode 100644 index 0000000000..88a5beef60 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_map_cross.cfg @@ -0,0 +1,3 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +in Input3 sorted_by_kv3.txt diff --git a/yt/yql/tests/sql/suites/join/premap_map_cross.sql b/yt/yql/tests/sql/suites/join/premap_map_cross.sql new file mode 100644 index 0000000000..75ec5b34cf --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_map_cross.sql @@ -0,0 +1,9 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; +pragma yt.MapJoinLimit="1m"; + +from (select k1, v1, Just(1) as u1 from Input1) as a +cross join (select k2, v2, Just(2) as u2 from Input2) as b +select * +order by a.k1,b.k2,a.v1,b.v2; diff --git a/yt/yql/tests/sql/suites/join/premap_map_inner-off.cfg b/yt/yql/tests/sql/suites/join/premap_map_inner-off.cfg new file mode 100644 index 0000000000..287d1fa1ed --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_map_inner-off.cfg @@ -0,0 +1,5 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +in Input3 sorted_by_kv3.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_map_inner.cfg b/yt/yql/tests/sql/suites/join/premap_map_inner.cfg new file mode 100644 index 0000000000..88a5beef60 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_map_inner.cfg @@ -0,0 +1,3 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +in Input3 sorted_by_kv3.txt diff --git a/yt/yql/tests/sql/suites/join/premap_map_inner.sql b/yt/yql/tests/sql/suites/join/premap_map_inner.sql new file mode 100644 index 0000000000..737b8a2de0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_map_inner.sql @@ -0,0 +1,9 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; +pragma yt.MapJoinLimit="1m"; + +from (select k1, v1 as u1 from Input1) as a +join (select k2, v2 as u2 from Input2) as b on a.k1 = b.k2 +select a.k1,a.u1,b.u2 +order by a.k1,a.u1; diff --git a/yt/yql/tests/sql/suites/join/premap_map_semi-off.cfg b/yt/yql/tests/sql/suites/join/premap_map_semi-off.cfg new file mode 100644 index 0000000000..287d1fa1ed --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_map_semi-off.cfg @@ -0,0 +1,5 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +in Input3 sorted_by_kv3.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_map_semi.cfg b/yt/yql/tests/sql/suites/join/premap_map_semi.cfg new file mode 100644 index 0000000000..88a5beef60 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_map_semi.cfg @@ -0,0 +1,3 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +in Input3 sorted_by_kv3.txt diff --git a/yt/yql/tests/sql/suites/join/premap_map_semi.sql b/yt/yql/tests/sql/suites/join/premap_map_semi.sql new file mode 100644 index 0000000000..c8ea1a1ef8 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_map_semi.sql @@ -0,0 +1,9 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; +pragma yt.MapJoinLimit="1m"; + +from (select k1, v1 || u1 as v1 from Input1) as a +left semi join (select k2, u2 || v2 as u2 from Input2) as b on a.k1 = b.k2 +select * +order by a.k1,a.v1; diff --git a/yt/yql/tests/sql/suites/join/premap_merge_extrasort1-off.cfg b/yt/yql/tests/sql/suites/join/premap_merge_extrasort1-off.cfg new file mode 100644 index 0000000000..01597c0916 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_merge_extrasort1-off.cfg @@ -0,0 +1,4 @@ +in Input1 mergejoin_input1.txt +in Input2 mergejoin_input2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_merge_extrasort1.cfg b/yt/yql/tests/sql/suites/join/premap_merge_extrasort1.cfg new file mode 100644 index 0000000000..3ea969d8b4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_merge_extrasort1.cfg @@ -0,0 +1,2 @@ +in Input1 mergejoin_input1.txt +in Input2 mergejoin_input2.txt diff --git a/yt/yql/tests/sql/suites/join/premap_merge_extrasort1.sql b/yt/yql/tests/sql/suites/join/premap_merge_extrasort1.sql new file mode 100644 index 0000000000..46cc25e42e --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_merge_extrasort1.sql @@ -0,0 +1,12 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="3.0"; + + +SELECT pd.Text, pd.PhraseID, m2.BaseNo + FROM Input2 as m2 + INNER JOIN (select PhraseID, BaseNo, True as Text from Input1) as pd + USING (BaseNo, PhraseID) +ORDER BY pd.PhraseID, m2.BaseNo; diff --git a/yt/yql/tests/sql/suites/join/premap_merge_extrasort2-off.cfg b/yt/yql/tests/sql/suites/join/premap_merge_extrasort2-off.cfg new file mode 100644 index 0000000000..01597c0916 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_merge_extrasort2-off.cfg @@ -0,0 +1,4 @@ +in Input1 mergejoin_input1.txt +in Input2 mergejoin_input2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_merge_extrasort2.cfg b/yt/yql/tests/sql/suites/join/premap_merge_extrasort2.cfg new file mode 100644 index 0000000000..3ea969d8b4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_merge_extrasort2.cfg @@ -0,0 +1,2 @@ +in Input1 mergejoin_input1.txt +in Input2 mergejoin_input2.txt diff --git a/yt/yql/tests/sql/suites/join/premap_merge_extrasort2.sql b/yt/yql/tests/sql/suites/join/premap_merge_extrasort2.sql new file mode 100644 index 0000000000..b8d4f8e5f3 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_merge_extrasort2.sql @@ -0,0 +1,12 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="3.0"; + + +SELECT pd.Text, m2.BannerID + FROM (select BaseNo, PhraseID, 100 as BannerID from Input2) as m2 + INNER JOIN (select PhraseID, BaseNo, 999 as Text from Input1) as pd + USING (BaseNo, PhraseID) +ORDER BY pd.Text, m2.BannerID; diff --git a/yt/yql/tests/sql/suites/join/premap_merge_inner-off.cfg b/yt/yql/tests/sql/suites/join/premap_merge_inner-off.cfg new file mode 100644 index 0000000000..287d1fa1ed --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_merge_inner-off.cfg @@ -0,0 +1,5 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +in Input3 sorted_by_kv3.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_merge_inner.cfg b/yt/yql/tests/sql/suites/join/premap_merge_inner.cfg new file mode 100644 index 0000000000..88a5beef60 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_merge_inner.cfg @@ -0,0 +1,3 @@ +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv2.txt +in Input3 sorted_by_kv3.txt diff --git a/yt/yql/tests/sql/suites/join/premap_merge_inner.sql b/yt/yql/tests/sql/suites/join/premap_merge_inner.sql new file mode 100644 index 0000000000..2557b94ac4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_merge_inner.sql @@ -0,0 +1,9 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; +pragma yt.JoinMergeTablesLimit="10"; + +from (select k1, v1 as u1 from Input1) as a +join (select k2, v2 as u2 from Input2) as b on a.k1 = b.k2 +select a.k1,a.u1,b.u2 +order by a.k1,a.u1; diff --git a/yt/yql/tests/sql/suites/join/premap_merge_with_remap-off.cfg b/yt/yql/tests/sql/suites/join/premap_merge_with_remap-off.cfg new file mode 100644 index 0000000000..01597c0916 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_merge_with_remap-off.cfg @@ -0,0 +1,4 @@ +in Input1 mergejoin_input1.txt +in Input2 mergejoin_input2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_merge_with_remap.cfg b/yt/yql/tests/sql/suites/join/premap_merge_with_remap.cfg new file mode 100644 index 0000000000..3ea969d8b4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_merge_with_remap.cfg @@ -0,0 +1,2 @@ +in Input1 mergejoin_input1.txt +in Input2 mergejoin_input2.txt diff --git a/yt/yql/tests/sql/suites/join/premap_merge_with_remap.sql b/yt/yql/tests/sql/suites/join/premap_merge_with_remap.sql new file mode 100644 index 0000000000..6a582ffa76 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_merge_with_remap.sql @@ -0,0 +1,17 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; +pragma yt.JoinMergeTablesLimit="10"; +pragma yt.JoinMergeUnsortedFactor="3.0"; + +INSERT INTO @inp2 +SELECT * FROM Input2 +ORDER BY BaseNo DESC; + +COMMIT; + +SELECT pd.BaseNo, m2.PhraseID, m2.Extra + FROM Input1 as pd + LEFT JOIN (select BaseNo, PhraseID, 1 as Extra from @inp2) as m2 + USING (BaseNo, PhraseID) +ORDER BY pd.BaseNo, m2.PhraseID, m2.Extra; diff --git a/yt/yql/tests/sql/suites/join/premap_no_premap-off.cfg b/yt/yql/tests/sql/suites/join/premap_no_premap-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_no_premap-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_no_premap.cfg b/yt/yql/tests/sql/suites/join/premap_no_premap.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_no_premap.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/premap_no_premap.sql b/yt/yql/tests/sql/suites/join/premap_no_premap.sql new file mode 100644 index 0000000000..533fa758ce --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_no_premap.sql @@ -0,0 +1,27 @@ +PRAGMA DisableSimpleColumns; +PRAGMA DisablePullUpFlatMapOverJoin; +use plato; + +-- not renaming +from (select key, subkey || key as subkey, value from Input1) as a +join Input2 as b using(key) +select a.key, a.subkey, b.value +order by a.key; + +-- not fixed size +from (select key, "aaa" as subkey, value from Input1) as a +join Input2 as b using(key) +select a.key, a.subkey, b.value +order by a.key; + +-- to many Justs +from (select key, Just(Just(1)) as subkey, value from Input1) as a +join Input2 as b using(key) +select a.key, a.subkey, b.value +order by a.key; + +-- container +from (select key, AsTuple(1) as subkey, value from Input1) as a +join Input2 as b using(key) +select a.key, a.subkey, b.value +order by a.key; diff --git a/yt/yql/tests/sql/suites/join/premap_nonseq_flatmap-off.cfg b/yt/yql/tests/sql/suites/join/premap_nonseq_flatmap-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_nonseq_flatmap-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/premap_nonseq_flatmap.cfg b/yt/yql/tests/sql/suites/join/premap_nonseq_flatmap.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_nonseq_flatmap.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/premap_nonseq_flatmap.sql b/yt/yql/tests/sql/suites/join/premap_nonseq_flatmap.sql new file mode 100644 index 0000000000..0163d931ba --- /dev/null +++ b/yt/yql/tests/sql/suites/join/premap_nonseq_flatmap.sql @@ -0,0 +1,11 @@ +PRAGMA DisableSimpleColumns; +use plato; + +$hashes = ( + SELECT multiplier AS hash + FROM (SELECT ListFromRange(0, 3) AS multiplier) + FLATTEN BY multiplier +); + +SELECT * FROM Input1 AS a CROSS JOIN $hashes AS h +ORDER BY a.key,a.subkey,h.hash; diff --git a/yt/yql/tests/sql/suites/join/pullup_context_dep-off.cfg b/yt/yql/tests/sql/suites/join/pullup_context_dep-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_context_dep-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/pullup_context_dep.cfg b/yt/yql/tests/sql/suites/join/pullup_context_dep.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_context_dep.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/pullup_context_dep.sql b/yt/yql/tests/sql/suites/join/pullup_context_dep.sql new file mode 100644 index 0000000000..5c8b94fc25 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_context_dep.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +use plato; + +from (select key, subkey || key as subkey, value, TablePath() as tp from Input1) as a +join Input2 as b using(key) +select a.key, a.subkey, a.tp, b.value +order by a.key, a.tp; diff --git a/yt/yql/tests/sql/suites/join/pullup_cross-off.cfg b/yt/yql/tests/sql/suites/join/pullup_cross-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_cross-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/pullup_cross.cfg b/yt/yql/tests/sql/suites/join/pullup_cross.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_cross.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/pullup_cross.sql b/yt/yql/tests/sql/suites/join/pullup_cross.sql new file mode 100644 index 0000000000..7b5f75f0ba --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_cross.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +use plato; + +from (select key, subkey || key as subkey, value || "v" as value from Input1) as a +cross join Input2 as b +select a.key, a.subkey, b.subkey, b.value +order by a.key, a.subkey, b.subkey, b.value; diff --git a/yt/yql/tests/sql/suites/join/pullup_exclusion-off.cfg b/yt/yql/tests/sql/suites/join/pullup_exclusion-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_exclusion-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/pullup_exclusion.cfg b/yt/yql/tests/sql/suites/join/pullup_exclusion.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_exclusion.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/pullup_exclusion.sql b/yt/yql/tests/sql/suites/join/pullup_exclusion.sql new file mode 100644 index 0000000000..b865107bbf --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_exclusion.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +use plato; + +from (select key, subkey || key as subkey, value from Input1) as a +exclusion join (select key || subkey as subkey, key, 1 as value from Input2) as b on a.key = b.key +select a.key as akey, b.key as bkey, a.subkey, b.subkey, b.value +order by akey; diff --git a/yt/yql/tests/sql/suites/join/pullup_inner-off.cfg b/yt/yql/tests/sql/suites/join/pullup_inner-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_inner-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/pullup_inner.cfg b/yt/yql/tests/sql/suites/join/pullup_inner.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_inner.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/pullup_inner.sql b/yt/yql/tests/sql/suites/join/pullup_inner.sql new file mode 100644 index 0000000000..097302e12e --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_inner.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +use plato; + +from (select key, subkey || key as subkey, value from Input1) as a +join (select key || subkey as subkey, key, 1 as value from Input2) as b on a.key = b.key +select a.key as akey, b.key as bkey, a.subkey, b.subkey, b.value +order by akey; diff --git a/yt/yql/tests/sql/suites/join/pullup_left-off.cfg b/yt/yql/tests/sql/suites/join/pullup_left-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_left-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/pullup_left.cfg b/yt/yql/tests/sql/suites/join/pullup_left.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_left.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/pullup_left.sql b/yt/yql/tests/sql/suites/join/pullup_left.sql new file mode 100644 index 0000000000..1784fea6cc --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_left.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +use plato; + +from (select key, subkey || key as subkey, value from Input1) as a +left join (select key || subkey as subkey, key, 1 as value from Input2) as b on a.key = b.key +select a.key as akey, b.key as bkey, a.subkey, b.subkey, b.value +order by akey; diff --git a/yt/yql/tests/sql/suites/join/pullup_left_semi-off.cfg b/yt/yql/tests/sql/suites/join/pullup_left_semi-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_left_semi-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/pullup_left_semi.cfg b/yt/yql/tests/sql/suites/join/pullup_left_semi.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_left_semi.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/pullup_left_semi.sql b/yt/yql/tests/sql/suites/join/pullup_left_semi.sql new file mode 100644 index 0000000000..feeec671b6 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_left_semi.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +use plato; + +from (select key, subkey || key as subkey, value from Input1) as a +left semi join (select key || subkey as subkey, key, 1 as value from Input2) as b on a.key = b.key +select a.key as akey, a.subkey +order by akey; diff --git a/yt/yql/tests/sql/suites/join/pullup_null_column-off.cfg b/yt/yql/tests/sql/suites/join/pullup_null_column-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_null_column-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/pullup_null_column.cfg b/yt/yql/tests/sql/suites/join/pullup_null_column.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_null_column.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/pullup_null_column.sql b/yt/yql/tests/sql/suites/join/pullup_null_column.sql new file mode 100644 index 0000000000..d7a5c88783 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_null_column.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +use plato; + +from Input1 as a +left join (select key, null as subkey, 1 as value from Input2) as b on a.key = b.key +select a.key as akey, b.key as bkey, a.subkey, b.subkey, b.value +order by akey; diff --git a/yt/yql/tests/sql/suites/join/pullup_random-off.cfg b/yt/yql/tests/sql/suites/join/pullup_random-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_random-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/pullup_random.cfg b/yt/yql/tests/sql/suites/join/pullup_random.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_random.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/pullup_random.sql b/yt/yql/tests/sql/suites/join/pullup_random.sql new file mode 100644 index 0000000000..f884b2d8fb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_random.sql @@ -0,0 +1,8 @@ +/* kikimr can not - due to random */ +PRAGMA DisableSimpleColumns; +use plato; + +from (select key, subkey || key as subkey, value, RANDOM(value || "x") <= 1.0 as rn from Input1) as a +join Input2 as b using(key) +select a.key, a.subkey, a.rn, b.value +order by a.key, a.rn; diff --git a/yt/yql/tests/sql/suites/join/pullup_renaming-off.cfg b/yt/yql/tests/sql/suites/join/pullup_renaming-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_renaming-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/pullup_renaming.cfg b/yt/yql/tests/sql/suites/join/pullup_renaming.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_renaming.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/pullup_renaming.sql b/yt/yql/tests/sql/suites/join/pullup_renaming.sql new file mode 100644 index 0000000000..0f13acd39f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_renaming.sql @@ -0,0 +1,8 @@ +PRAGMA DisableSimpleColumns; +use plato; + +from (select key as akey1, key as akey2, subkey || key as subkey, value from Input1) as a +left join (select key || subkey as subkey, key as bkey1, key as bkey2, 1 as value from Input2) as b +on a.akey1 = b.bkey1 and a.akey1 = b.bkey2 and a.akey2 = b.bkey1 +select a.akey1 as akey1, b.bkey1 as bkey1, a.subkey, b.subkey, b.value +order by akey1, bkey1; diff --git a/yt/yql/tests/sql/suites/join/pullup_rownumber-off.cfg b/yt/yql/tests/sql/suites/join/pullup_rownumber-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_rownumber-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/pullup_rownumber.cfg b/yt/yql/tests/sql/suites/join/pullup_rownumber.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_rownumber.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/pullup_rownumber.sql b/yt/yql/tests/sql/suites/join/pullup_rownumber.sql new file mode 100644 index 0000000000..a40f65b939 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pullup_rownumber.sql @@ -0,0 +1,7 @@ +PRAGMA DisableSimpleColumns; +use plato; + +from (select key, subkey || key as subkey, value, ROW_NUMBER() over w as rn from Input1 window w as ()) as a +join Input2 as b using(key) +select a.key, a.subkey, a.rn, b.value +order by a.key, a.rn; diff --git a/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_assume_strict-off.cfg b/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_assume_strict-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_assume_strict-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_assume_strict.cfg b/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_assume_strict.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_assume_strict.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_assume_strict.sql b/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_assume_strict.sql new file mode 100644 index 0000000000..e6fd2ce9af --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_assume_strict.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +PRAGMA DisableSimpleColumns; +use plato; + +-- should pushdown +select * from Input1 as a inner join Input2 as b on a.key = b.key where AssumeStrict(Unwrap(cast(a.key as Int32))) > 100 order by a.key; diff --git a/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_strict_udf.cfg b/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_strict_udf.cfg new file mode 100644 index 0000000000..75143a2d4b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_strict_udf.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +in Input2 input2.txt +udf math_udf diff --git a/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_strict_udf.sql b/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_strict_udf.sql new file mode 100644 index 0000000000..12ab5e8f6d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pushdown_filter_over_inner_with_strict_udf.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +PRAGMA DisableSimpleColumns; +use plato; + +-- should pushdown +select * from Input1 as a inner join Input2 as b on a.key = b.key where Math::IsFinite(cast(a.key as Double)) order by a.key; diff --git a/yt/yql/tests/sql/suites/join/pushdown_filter_over_left-off.cfg b/yt/yql/tests/sql/suites/join/pushdown_filter_over_left-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pushdown_filter_over_left-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/pushdown_filter_over_left.cfg b/yt/yql/tests/sql/suites/join/pushdown_filter_over_left.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pushdown_filter_over_left.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/pushdown_filter_over_left.sql b/yt/yql/tests/sql/suites/join/pushdown_filter_over_left.sql new file mode 100644 index 0000000000..d5b8567576 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/pushdown_filter_over_left.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +PRAGMA DisableSimpleColumns; +use plato; + +-- should pushdown +select * from Input1 as a left join Input2 as b on a.key = b.key where Unwrap(cast(a.key as Int32)) > 100 order by a.key; diff --git a/yt/yql/tests/sql/suites/join/right_trivial-off.cfg b/yt/yql/tests/sql/suites/join/right_trivial-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/right_trivial-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/right_trivial.cfg b/yt/yql/tests/sql/suites/join/right_trivial.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/right_trivial.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/right_trivial.sql b/yt/yql/tests/sql/suites/join/right_trivial.sql new file mode 100644 index 0000000000..d63d52b615 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/right_trivial.sql @@ -0,0 +1,5 @@ +PRAGMA DisableSimpleColumns; +select coalesce(Input1.key, "_null") as a, coalesce(Input1.subkey, "_null") as b, coalesce(Input3.value, "_null") as c +from plato.Input1 +right join plato.Input3 using (key) +order by a, b, c;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/join/root.txt.attr b/yt/yql/tests/sql/suites/join/root.txt.attr new file mode 100644 index 0000000000..8cfa8bc1a9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/root.txt.attr @@ -0,0 +1,8 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint64"]]; + ["leaf";["OptionalType";["DataType";"Uint64"]]]; + ["branch";["OptionalType";["DataType";"Uint64"]]]; + ["value";["OptionalType";["DataType";"String"]]]] + ]; +}} diff --git a/yt/yql/tests/sql/suites/join/selfjoin_on_sorted-off.cfg b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted-off.cfg new file mode 100644 index 0000000000..579f91d547 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted-off.cfg @@ -0,0 +1,4 @@ +in Input sorted_uniq.txt + +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/selfjoin_on_sorted.cfg b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted.cfg new file mode 100644 index 0000000000..e6665422d5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted.cfg @@ -0,0 +1,2 @@ +in Input sorted_uniq.txt + diff --git a/yt/yql/tests/sql/suites/join/selfjoin_on_sorted.sql b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted.sql new file mode 100644 index 0000000000..dc33eadc98 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted.sql @@ -0,0 +1,2 @@ +PRAGMA DisableSimpleColumns; +select * from plato.Input as a inner join plato.Input as b on a.key = b.key; diff --git a/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_filter-off.cfg b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_filter-off.cfg new file mode 100644 index 0000000000..579f91d547 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_filter-off.cfg @@ -0,0 +1,4 @@ +in Input sorted_uniq.txt + +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_filter-replicate.cfg b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_filter-replicate.cfg new file mode 100644 index 0000000000..1aa0bdd86e --- /dev/null +++ b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_filter-replicate.cfg @@ -0,0 +1,6 @@ +in Input sorted_uniq.txt + +providers dq +pragma dq.HashJoinMode="off"; +pragma dq.SplitStageOnDqReplicate="false"; +pragma dq.SpillingEngine="disable"; diff --git a/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_filter.cfg b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_filter.cfg new file mode 100644 index 0000000000..e6665422d5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_filter.cfg @@ -0,0 +1,2 @@ +in Input sorted_uniq.txt + diff --git a/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_filter.sql b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_filter.sql new file mode 100644 index 0000000000..7134d1c830 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_filter.sql @@ -0,0 +1,4 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +$in = (select * from plato.Input where key > "100"); +select * from $in as a inner join $in as b on a.key = b.key; diff --git a/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_rename-off.cfg b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_rename-off.cfg new file mode 100644 index 0000000000..579f91d547 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_rename-off.cfg @@ -0,0 +1,4 @@ +in Input sorted_uniq.txt + +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_rename.cfg b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_rename.cfg new file mode 100644 index 0000000000..e6665422d5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_rename.cfg @@ -0,0 +1,2 @@ +in Input sorted_uniq.txt + diff --git a/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_rename.sql b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_rename.sql new file mode 100644 index 0000000000..51746196d6 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/selfjoin_on_sorted_with_rename.sql @@ -0,0 +1,2 @@ +PRAGMA DisableSimpleColumns; +select a.key as key, b.subkey as subkey, b.value as value from plato.Input as a inner join plato.Input as b on a.key = b.key; diff --git a/yt/yql/tests/sql/suites/join/simple_columns_partial-off.cfg b/yt/yql/tests/sql/suites/join/simple_columns_partial-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/simple_columns_partial-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/simple_columns_partial.cfg b/yt/yql/tests/sql/suites/join/simple_columns_partial.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/simple_columns_partial.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/simple_columns_partial.sql b/yt/yql/tests/sql/suites/join/simple_columns_partial.sql new file mode 100644 index 0000000000..da45ff2766 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/simple_columns_partial.sql @@ -0,0 +1,23 @@ +/* postgres can not */ +use plato; +pragma SimpleColumns; + +SELECT * +FROM `Input2` AS a +LEFT SEMI JOIN `Input3` AS b +ON a.value == b.value; + +SELECT * +FROM `Input2` AS a +LEFT ONLY JOIN `Input3` AS b +ON a.value == b.value; + +SELECT * +FROM `Input2` AS a +RIGHT SEMI JOIN `Input3` AS b +ON a.value == b.value; + +SELECT * +FROM `Input2` AS a +RIGHT ONLY JOIN `Input3` AS b +ON a.value == b.value; diff --git a/yt/yql/tests/sql/suites/join/sorted_by_k1.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_k1.txt.attr new file mode 100644 index 0000000000..9cef99eb90 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_k1.txt.attr @@ -0,0 +1,19 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k1"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v1"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_k2.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_k2.txt.attr new file mode 100644 index 0000000000..39faeeb22c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_k2.txt.attr @@ -0,0 +1,19 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v2"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_key1.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_key1.txt.attr new file mode 100644 index 0000000000..852ba949fb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_key1.txt.attr @@ -0,0 +1,19 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "key"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "value"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_key2.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_key2.txt.attr new file mode 100644 index 0000000000..852ba949fb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_key2.txt.attr @@ -0,0 +1,19 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "key"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "value"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_key3.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_key3.txt.attr new file mode 100644 index 0000000000..852ba949fb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_key3.txt.attr @@ -0,0 +1,19 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "key"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "value"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_key4.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_key4.txt.attr new file mode 100644 index 0000000000..852ba949fb --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_key4.txt.attr @@ -0,0 +1,19 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "key"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "value"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_key_subkey.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_key_subkey.txt.attr new file mode 100644 index 0000000000..1752b0ee6d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_key_subkey.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "key"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "subkey"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "value"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_kv1.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_kv1.txt.attr new file mode 100644 index 0000000000..4185224ec0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_kv1.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k1"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v1"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u1"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_kv1_1.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_kv1_1.txt.attr new file mode 100644 index 0000000000..4185224ec0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_kv1_1.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k1"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v1"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u1"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_kv1_dup.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_kv1_dup.txt.attr new file mode 100644 index 0000000000..4185224ec0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_kv1_dup.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k1"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v1"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u1"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_kv1_opt.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_kv1_opt.txt.attr new file mode 100644 index 0000000000..aee2f17230 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_kv1_opt.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k1"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v1"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u1"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_kv1_unique.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_kv1_unique.txt.attr new file mode 100644 index 0000000000..6059c56833 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_kv1_unique.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %true + > + [ + { + "name" = "k1"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v1"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u1"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_kv2.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_kv2.txt.attr new file mode 100644 index 0000000000..387ceb1b55 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_kv2.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u2"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_kv2_dup.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_kv2_dup.txt.attr new file mode 100644 index 0000000000..387ceb1b55 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_kv2_dup.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u2"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_kv2_empty.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_kv2_empty.txt.attr new file mode 100644 index 0000000000..387ceb1b55 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_kv2_empty.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u2"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_kv2_opt.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_kv2_opt.txt.attr new file mode 100644 index 0000000000..d10189b748 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_kv2_opt.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k2"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v2"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u2"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_by_kv3.txt.attr b/yt/yql/tests/sql/suites/join/sorted_by_kv3.txt.attr new file mode 100644 index 0000000000..3b51f7ab03 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_by_kv3.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "k3"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "v3"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u3"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/sorted_uniq.txt.attr b/yt/yql/tests/sql/suites/join/sorted_uniq.txt.attr new file mode 100644 index 0000000000..3cbe9af3fd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_uniq.txt.attr @@ -0,0 +1,12 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;]; + "SortedBy"=["key";]; + "SortedByTypes"=[["DataType";"String";];]; + "SortMembers"=["key";]; + "UniqueKeys"=%true; +}} diff --git a/yt/yql/tests/sql/suites/join/sorted_uniq1.txt.attr b/yt/yql/tests/sql/suites/join/sorted_uniq1.txt.attr new file mode 100644 index 0000000000..fad1fb2801 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_uniq1.txt.attr @@ -0,0 +1,12 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["subkey";"value"]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["subkey";"value"]; + "UniqueKeys"=%true; +}} diff --git a/yt/yql/tests/sql/suites/join/sorted_uniq2.txt.attr b/yt/yql/tests/sql/suites/join/sorted_uniq2.txt.attr new file mode 100644 index 0000000000..09cc6be90d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/sorted_uniq2.txt.attr @@ -0,0 +1,12 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;]; + "SortedBy"=["key"]; + "SortedByTypes"=[["DataType";"String";]]; + "SortMembers"=["key";]; + "UniqueKeys"=%true; +}} diff --git a/yt/yql/tests/sql/suites/join/split_to_list_as_key-off.cfg b/yt/yql/tests/sql/suites/join/split_to_list_as_key-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/split_to_list_as_key-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/split_to_list_as_key.cfg b/yt/yql/tests/sql/suites/join/split_to_list_as_key.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/split_to_list_as_key.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/split_to_list_as_key.sql b/yt/yql/tests/sql/suites/join/split_to_list_as_key.sql new file mode 100644 index 0000000000..64be5ae083 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/split_to_list_as_key.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +PRAGMA DisableSimpleColumns; +use plato; + +from Input1 as a +join Input2 as b on a.key = String::SplitToList(b.key, "_")[0] +select * order by a.key,a.subkey,b.subkey diff --git a/yt/yql/tests/sql/suites/join/star_join-off.cfg b/yt/yql/tests/sql/suites/join/star_join-off.cfg new file mode 100644 index 0000000000..64e0857bc5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join-off.cfg @@ -0,0 +1,7 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +in Input5 kv5_sorted.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/star_join.cfg b/yt/yql/tests/sql/suites/join/star_join.cfg new file mode 100644 index 0000000000..a884c15308 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join.cfg @@ -0,0 +1,5 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +in Input5 kv5_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/star_join.sql b/yt/yql/tests/sql/suites/join/star_join.sql new file mode 100644 index 0000000000..19c7c910ce --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinEnableStarJoin="true"; + + +$rightSemi = select * from Input2 as b right semi join Input1 as a on a.v1 = b.v2 and a.k1 = b.k2; +$leftOnly = select * from $rightSemi as rs left only join Input3 as c on rs.k1 = c.k3 and rs.v1 = c.v3; +$right = select * from Input4 as d right join $leftOnly as lo on d.v4 = lo.v1 and lo.k1 = d.k4; +$inner = select * from $right as r join any Input5 as e on r.k1 = e.k5 and e.v5 = r.v1; + +select * from $inner order by u1,u5; + diff --git a/yt/yql/tests/sql/suites/join/star_join_inners-off.cfg b/yt/yql/tests/sql/suites/join/star_join_inners-off.cfg new file mode 100644 index 0000000000..7859898010 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_inners-off.cfg @@ -0,0 +1,5 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/star_join_inners.cfg b/yt/yql/tests/sql/suites/join/star_join_inners.cfg new file mode 100644 index 0000000000..086641db8d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_inners.cfg @@ -0,0 +1,3 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/star_join_inners.sql b/yt/yql/tests/sql/suites/join/star_join_inners.sql new file mode 100644 index 0000000000..9396fe8f6d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_inners.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinEnableStarJoin="true"; + +from any Input2 as b +join any Input1 as a on b.k2 = a.k1 and a.v1 = b.v2 +join any Input3 as c on a.k1 = c.k3 and c.v3 = a.v1 +select * order by u1 + diff --git a/yt/yql/tests/sql/suites/join/star_join_inners_premap-off.cfg b/yt/yql/tests/sql/suites/join/star_join_inners_premap-off.cfg new file mode 100644 index 0000000000..7859898010 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_inners_premap-off.cfg @@ -0,0 +1,5 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/star_join_inners_premap.cfg b/yt/yql/tests/sql/suites/join/star_join_inners_premap.cfg new file mode 100644 index 0000000000..086641db8d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_inners_premap.cfg @@ -0,0 +1,3 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/star_join_inners_premap.sql b/yt/yql/tests/sql/suites/join/star_join_inners_premap.sql new file mode 100644 index 0000000000..4cf67ca9ab --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_inners_premap.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinEnableStarJoin="true"; +pragma DisablePullUpFlatMapOverJoin; + +$a = select k1,v1,u1, 1 as t1 from Input1; +$c = select k3,v3,u3, 3 as t3 from Input3; + +from any Input2 as b +join any $a as a on b.k2 = a.k1 and a.v1 = b.v2 +join any $c as c on a.k1 = c.k3 and c.v3 = a.v1 +select * order by u1 + diff --git a/yt/yql/tests/sql/suites/join/star_join_inners_vk_sorted-off.cfg b/yt/yql/tests/sql/suites/join/star_join_inners_vk_sorted-off.cfg new file mode 100644 index 0000000000..45c529ffa9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_inners_vk_sorted-off.cfg @@ -0,0 +1,5 @@ +in Input1 vk1_sorted.txt +in Input2 vk2_sorted.txt +in Input3 vk3_sorted.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/star_join_inners_vk_sorted.cfg b/yt/yql/tests/sql/suites/join/star_join_inners_vk_sorted.cfg new file mode 100644 index 0000000000..354c0f1d8d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_inners_vk_sorted.cfg @@ -0,0 +1,3 @@ +in Input1 vk1_sorted.txt +in Input2 vk2_sorted.txt +in Input3 vk3_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/star_join_inners_vk_sorted.sql b/yt/yql/tests/sql/suites/join/star_join_inners_vk_sorted.sql new file mode 100644 index 0000000000..9396fe8f6d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_inners_vk_sorted.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinEnableStarJoin="true"; + +from any Input2 as b +join any Input1 as a on b.k2 = a.k1 and a.v1 = b.v2 +join any Input3 as c on a.k1 = c.k3 and c.v3 = a.v1 +select * order by u1 + diff --git a/yt/yql/tests/sql/suites/join/star_join_mirror-off.cfg b/yt/yql/tests/sql/suites/join/star_join_mirror-off.cfg new file mode 100644 index 0000000000..64e0857bc5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_mirror-off.cfg @@ -0,0 +1,7 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +in Input5 kv5_sorted.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/star_join_mirror.cfg b/yt/yql/tests/sql/suites/join/star_join_mirror.cfg new file mode 100644 index 0000000000..a884c15308 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_mirror.cfg @@ -0,0 +1,5 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +in Input5 kv5_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/star_join_mirror.sql b/yt/yql/tests/sql/suites/join/star_join_mirror.sql new file mode 100644 index 0000000000..8aaf6431b0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_mirror.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinEnableStarJoin="true"; + +$leftSemi = select * from Input1 as a left semi join Input2 as b on b.k2 = a.k1 and a.v1 = b.v2; +$rightOnly = select * from Input3 as c right only join $leftSemi as ls on ls.k1 = c.k3 and ls.v1 = c.v3; +$left = select * from $rightOnly as ro left join Input4 as d on ro.v1 = d.v4 and d.k4 = ro.k1; +$inner = select * from any Input5 as e join $left as l on e.k5 = l.k1 and l.v1 = e.v5; + +select * from $inner order by u1,u5; + diff --git a/yt/yql/tests/sql/suites/join/star_join_multi-off.cfg b/yt/yql/tests/sql/suites/join/star_join_multi-off.cfg new file mode 100644 index 0000000000..64e0857bc5 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_multi-off.cfg @@ -0,0 +1,7 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +in Input5 kv5_sorted.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/star_join_multi.cfg b/yt/yql/tests/sql/suites/join/star_join_multi.cfg new file mode 100644 index 0000000000..a884c15308 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_multi.cfg @@ -0,0 +1,5 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +in Input5 kv5_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/star_join_multi.sql b/yt/yql/tests/sql/suites/join/star_join_multi.sql new file mode 100644 index 0000000000..b6553ce006 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_multi.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinEnableStarJoin="true"; + + +-- first Star JOIN chain +$rightSemi = select * from Input2 as b right semi join Input1 as a on a.v1 = b.v2 and a.k1 = b.k2; +$leftOnly = select * from $rightSemi as rs left only join Input3 as c on rs.k1 = c.k3 and rs.v1 = c.v3; +$right = select * from Input4 as d right join $leftOnly as lo on d.v4 = lo.v1 and lo.k1 = d.k4; +$chain1 = select * from $right as r join any Input5 as e on r.k1 = e.k5 and e.v5 = r.v1; + +-- second Star JOIN chain (mirror reflection of first one) +$leftSemi = select * from Input1 as a1 left semi join Input2 as b1 on b1.k2 = a1.k1 and a1.v1 = b1.v2; +$rightOnly = select * from Input3 as c1 right only join $leftSemi as ls on ls.k1 = c1.k3 and ls.v1 = c1.v3; +$left = select * from $rightOnly as ro left join Input4 as d1 on ro.v1 = d1.v4 and d1.k4 = ro.k1; +$chain2 = select * from any Input5 as e1 join $left as l on e1.k5 = l.k1 and l.v1 = e1.v5; + + +select left.k1 as k1, right.v1 as v1 from +$chain1 as left join $chain2 as right on left.k1 = right.k1 and left.v1 = right.v1 +order by k1,v1; + diff --git a/yt/yql/tests/sql/suites/join/star_join_semionly-off.cfg b/yt/yql/tests/sql/suites/join/star_join_semionly-off.cfg new file mode 100644 index 0000000000..7859898010 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_semionly-off.cfg @@ -0,0 +1,5 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/star_join_semionly.cfg b/yt/yql/tests/sql/suites/join/star_join_semionly.cfg new file mode 100644 index 0000000000..086641db8d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_semionly.cfg @@ -0,0 +1,3 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/star_join_semionly.sql b/yt/yql/tests/sql/suites/join/star_join_semionly.sql new file mode 100644 index 0000000000..bd158ea86d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_semionly.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinEnableStarJoin="true"; + +from Input1 as a +left semi join Input2 as b on a.k1 = b.k2 +left only join Input3 as c on a.k1 = c.k3 +select * order by u1 + diff --git a/yt/yql/tests/sql/suites/join/star_join_semionly_premap-off.cfg b/yt/yql/tests/sql/suites/join/star_join_semionly_premap-off.cfg new file mode 100644 index 0000000000..7859898010 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_semionly_premap-off.cfg @@ -0,0 +1,5 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/star_join_semionly_premap.cfg b/yt/yql/tests/sql/suites/join/star_join_semionly_premap.cfg new file mode 100644 index 0000000000..086641db8d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_semionly_premap.cfg @@ -0,0 +1,3 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt diff --git a/yt/yql/tests/sql/suites/join/star_join_semionly_premap.sql b/yt/yql/tests/sql/suites/join/star_join_semionly_premap.sql new file mode 100644 index 0000000000..370490c9fd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_semionly_premap.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinEnableStarJoin="true"; +pragma DisablePullUpFlatMapOverJoin; + +$a = select k1,v1,u1, 1 as t1 from Input1; +$b = select k2,v2,u2, 2 as t2 from Input2; +$c = select k3,v3,u3, 3 as t3 from Input3; + +from $a as a +left semi join $b as b on a.k1 = b.k2 +left only join $c as c on a.k1 = c.k3 +select * order by u1 + diff --git a/yt/yql/tests/sql/suites/join/star_join_with_diff_complex_key.cfg b/yt/yql/tests/sql/suites/join/star_join_with_diff_complex_key.cfg new file mode 100644 index 0000000000..00227305fc --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_with_diff_complex_key.cfg @@ -0,0 +1,5 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/star_join_with_diff_complex_key.sql b/yt/yql/tests/sql/suites/join/star_join_with_diff_complex_key.sql new file mode 100644 index 0000000000..94408a517e --- /dev/null +++ b/yt/yql/tests/sql/suites/join/star_join_with_diff_complex_key.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinEnableStarJoin="true"; + + +select * +from Input1 as a +join any Input2 as b on a.k1 = b.k2 AND a.v1 = b.v2 +join any Input3 as c on a.k1 = c.k3 AND a.v1 = c.v3 +left join Input4 as d on (c.v3, c.u3) = (d.v4, d.u4) diff --git a/yt/yql/tests/sql/suites/join/starjoin_unused_keys.cfg b/yt/yql/tests/sql/suites/join/starjoin_unused_keys.cfg new file mode 100644 index 0000000000..9a930ffe48 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/starjoin_unused_keys.cfg @@ -0,0 +1,6 @@ +in Input1 kv1_sorted.txt +in Input2 kv2_sorted.txt +in Input3 kv3_sorted.txt +in Input4 kv4_sorted.txt +in Input5 kv5_sorted.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/starjoin_unused_keys.sql b/yt/yql/tests/sql/suites/join/starjoin_unused_keys.sql new file mode 100644 index 0000000000..4f2d3d932d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/starjoin_unused_keys.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +use plato; +pragma yt.JoinEnableStarJoin="true"; + +select + +v3 + +from any Input1 as a +join any Input2 as b on (a.k1 = b.k2 and a.v1 = b.v2) +join any Input3 as c on (a.k1 = c.k3 and a.v1 = c.v3) +join Input4 as d on (a.k1 = d.k4) +order by v3; diff --git a/yt/yql/tests/sql/suites/join/strict_keys.cfg b/yt/yql/tests/sql/suites/join/strict_keys.cfg new file mode 100644 index 0000000000..b54c86b56b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/strict_keys.cfg @@ -0,0 +1,3 @@ +xfail +in Input1 sorted_by_kv1.txt +in Input2 sorted_by_kv1_opt.txt diff --git a/yt/yql/tests/sql/suites/join/strict_keys.sql b/yt/yql/tests/sql/suites/join/strict_keys.sql new file mode 100644 index 0000000000..b9ca0641f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/strict_keys.sql @@ -0,0 +1,10 @@ +/* custom error:Strict key type match requested, but keys have different types*/ +use plato; + +define subquery $strict() as + pragma StrictJoinKeyTypes; + select count(*) from Input1 as a join Input2 as b using(k1) +end define; + +select count(*) from Input1 as a join Input2 as b using(k1); +select * from $strict(); diff --git a/yt/yql/tests/sql/suites/join/three_equalities-off.cfg b/yt/yql/tests/sql/suites/join/three_equalities-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/three_equalities-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/three_equalities.cfg b/yt/yql/tests/sql/suites/join/three_equalities.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/three_equalities.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/three_equalities.sql b/yt/yql/tests/sql/suites/join/three_equalities.sql new file mode 100644 index 0000000000..51637f9154 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/three_equalities.sql @@ -0,0 +1,12 @@ +PRAGMA DisableSimpleColumns; +USE plato; +SELECT * FROM + Input1 AS A +JOIN + Input2 AS B +ON + A.key == B.key AND + (cast(A.subkey AS int) + 1 == cast(B.subkey AS int)) AND + A.value == B.value +ORDER BY A.key +; diff --git a/yt/yql/tests/sql/suites/join/three_equalities_paren-off.cfg b/yt/yql/tests/sql/suites/join/three_equalities_paren-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/three_equalities_paren-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/three_equalities_paren.cfg b/yt/yql/tests/sql/suites/join/three_equalities_paren.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/three_equalities_paren.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/three_equalities_paren.sql b/yt/yql/tests/sql/suites/join/three_equalities_paren.sql new file mode 100644 index 0000000000..b1be3c32e2 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/three_equalities_paren.sql @@ -0,0 +1,11 @@ +PRAGMA DisableSimpleColumns; +USE plato; +SELECT * FROM + Input2 AS A +JOIN + Input4 AS B +ON + (A.key == B.key) AND + (A.subkey == B.subkey) AND + (A.value == B.value) +; diff --git a/yt/yql/tests/sql/suites/join/trivial_view-off.cfg b/yt/yql/tests/sql/suites/join/trivial_view-off.cfg new file mode 100644 index 0000000000..43f157699a --- /dev/null +++ b/yt/yql/tests/sql/suites/join/trivial_view-off.cfg @@ -0,0 +1,4 @@ +in Input1 view_input.txt +in Input2 input.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/trivial_view.cfg b/yt/yql/tests/sql/suites/join/trivial_view.cfg new file mode 100644 index 0000000000..3f072cc800 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/trivial_view.cfg @@ -0,0 +1,2 @@ +in Input1 view_input.txt +in Input2 input.txt diff --git a/yt/yql/tests/sql/suites/join/trivial_view.sql b/yt/yql/tests/sql/suites/join/trivial_view.sql new file mode 100644 index 0000000000..8534f3a0c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/trivial_view.sql @@ -0,0 +1,9 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +/* syntax version 1 */ +use plato; +SELECT a.v, b.value +FROM `Input1` VIEW `ksv` AS a +JOIN `Input2` AS b +ON a.k == b.key +ORDER BY a.v; diff --git a/yt/yql/tests/sql/suites/join/two_aggrs.sql b/yt/yql/tests/sql/suites/join/two_aggrs.sql new file mode 100644 index 0000000000..1be595ca17 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/two_aggrs.sql @@ -0,0 +1,18 @@ +USE plato; + +PRAGMA yt.JoinMergeForce = "1"; +pragma yt.JoinMergeTablesLimit="10"; + +$join = + SELECT a.key as key1, a.subkey as subkey1 + FROM (SELECT * FROM Input8 WHERE subkey != "bar") AS a + JOIN (SELECT * FROM Input8 WHERE subkey != "foo") AS b + ON a.key = b.key AND a.subkey = b.subkey; + +SELECT key1, subkey1, count(*) +FROM $join +GROUP COMPACT BY subkey1, key1; + +SELECT key1, subkey1 +FROM $join +GROUP COMPACT BY key1, subkey1; diff --git a/yt/yql/tests/sql/suites/join/uniqkeys.txt.attr b/yt/yql/tests/sql/suites/join/uniqkeys.txt.attr new file mode 100644 index 0000000000..e847d48e3e --- /dev/null +++ b/yt/yql/tests/sql/suites/join/uniqkeys.txt.attr @@ -0,0 +1,12 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; + "UniqueKeys"=%true +}} diff --git a/yt/yql/tests/sql/suites/join/view_input.txt.attr b/yt/yql/tests/sql/suites/join/view_input.txt.attr new file mode 100644 index 0000000000..22c3547210 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/view_input.txt.attr @@ -0,0 +1,31 @@ +{ + "_yql_view_ksv"="SELECT key as k, subkey as s, value as v FROM self"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/join/vk1_sorted.txt.attr b/yt/yql/tests/sql/suites/join/vk1_sorted.txt.attr new file mode 100644 index 0000000000..068381b88f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/vk1_sorted.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "v1"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "k1"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u1"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/vk2_sorted.txt.attr b/yt/yql/tests/sql/suites/join/vk2_sorted.txt.attr new file mode 100644 index 0000000000..ff5c200f6b --- /dev/null +++ b/yt/yql/tests/sql/suites/join/vk2_sorted.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "v2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "k2"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u2"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/vk3_sorted.txt.attr b/yt/yql/tests/sql/suites/join/vk3_sorted.txt.attr new file mode 100644 index 0000000000..c399355613 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/vk3_sorted.txt.attr @@ -0,0 +1,25 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false + > + [ + { + "name" = "v3"; + "required" = %false; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "k3"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "string" + }; + { + "name" = "u3"; + "required" = %true; + "type" = "string" + } + ]; +} diff --git a/yt/yql/tests/sql/suites/join/yql-10654_pullup_with_sys_columns-off.cfg b/yt/yql/tests/sql/suites/join/yql-10654_pullup_with_sys_columns-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-10654_pullup_with_sys_columns-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/yql-10654_pullup_with_sys_columns.cfg b/yt/yql/tests/sql/suites/join/yql-10654_pullup_with_sys_columns.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-10654_pullup_with_sys_columns.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/yql-10654_pullup_with_sys_columns.sql b/yt/yql/tests/sql/suites/join/yql-10654_pullup_with_sys_columns.sql new file mode 100644 index 0000000000..543df58892 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-10654_pullup_with_sys_columns.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; +PRAGMA DisableSimpleColumns; + +$src = + select key, subkey || key as subkey, value from Input + union all + select * from AS_TABLE(ListCreate(Struct<key:String,subkey:String,value:String>)); + +select a.key, a.subkey, b.value +from Input as a +left join $src as b using(key) +order by a.key; diff --git a/yt/yql/tests/sql/suites/join/yql-12022-off.cfg b/yt/yql/tests/sql/suites/join/yql-12022-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-12022-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/yql-12022.cfg b/yt/yql/tests/sql/suites/join/yql-12022.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-12022.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/yql-12022.sql b/yt/yql/tests/sql/suites/join/yql-12022.sql new file mode 100644 index 0000000000..15766d3004 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-12022.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +DEFINE SUBQUERY $sub($name) AS + SELECT * FROM $name +END DEFINE; + +SELECT a.key +FROM $sub("Input") AS a +INNER JOIN Input AS b +ON a.key = b.key +WHERE JoinTableRow().`a.subkey` == "wat" diff --git a/yt/yql/tests/sql/suites/join/yql-14829_left-off.cfg b/yt/yql/tests/sql/suites/join/yql-14829_left-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-14829_left-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/yql-14829_left.cfg b/yt/yql/tests/sql/suites/join/yql-14829_left.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-14829_left.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/yql-14829_left.sql b/yt/yql/tests/sql/suites/join/yql-14829_left.sql new file mode 100644 index 0000000000..8e36a759e2 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-14829_left.sql @@ -0,0 +1,35 @@ +USE plato; + +pragma yt.JoinEnableStarJoin="true"; + +insert into @x +select Just('xxx') as id +order by id; + +insert into @y +select Just('yyy') as id +order by id; + +insert into @a +select Just('aaa') as id +order by id; + +commit; + + +$xy_left = ( + SELECT + x.id AS id + FROM + ANY @x AS x + LEFT JOIN ANY @y AS y + ON x.id == y.id +); + +SELECT + * +FROM + ANY @a AS a + LEFT JOIN ANY $xy_left AS b + ON a.id == b.id; + diff --git a/yt/yql/tests/sql/suites/join/yql-14829_leftonly-off.cfg b/yt/yql/tests/sql/suites/join/yql-14829_leftonly-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-14829_leftonly-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/yql-14829_leftonly.cfg b/yt/yql/tests/sql/suites/join/yql-14829_leftonly.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-14829_leftonly.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/yql-14829_leftonly.sql b/yt/yql/tests/sql/suites/join/yql-14829_leftonly.sql new file mode 100644 index 0000000000..50ef1bae40 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-14829_leftonly.sql @@ -0,0 +1,35 @@ +USE plato; + +pragma yt.JoinEnableStarJoin="true"; + +insert into @x +select Just('xxx') as id +order by id; + +insert into @y +select Just('yyy') as id +order by id; + +insert into @a +select Just('aaa') as id +order by id; + +commit; + + +$xy_leftonly = ( + SELECT + x.id AS id + FROM + @x AS x + LEFT ONLY JOIN @y AS y + ON x.id == y.id +); + +SELECT + * +FROM + @a AS a + LEFT ONLY JOIN $xy_leftonly AS b + ON a.id == b.id; + diff --git a/yt/yql/tests/sql/suites/join/yql-14847-off.cfg b/yt/yql/tests/sql/suites/join/yql-14847-off.cfg new file mode 100644 index 0000000000..86539293ac --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-14847-off.cfg @@ -0,0 +1,5 @@ +in Input1 input1.txt +in Input2 input7.txt +in Input3 input3.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/yql-14847.cfg b/yt/yql/tests/sql/suites/join/yql-14847.cfg new file mode 100644 index 0000000000..5cac58c60c --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-14847.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +in Input2 input7.txt +in Input3 input3.txt diff --git a/yt/yql/tests/sql/suites/join/yql-14847.sql b/yt/yql/tests/sql/suites/join/yql-14847.sql new file mode 100644 index 0000000000..25d2f0394f --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-14847.sql @@ -0,0 +1,23 @@ +USE plato; + +pragma yt.MapJoinLimit="1M"; + +$t = ( +SELECT + l.key as key, + r.subkey as subkey, + l.value || r.value as value +FROM + Input1 as l +CROSS JOIN + Input2 as r +); + +SELECT + l.*, + r.value as rvalue +FROM + $t as l +LEFT JOIN + Input3 as r +ON l.key = coalesce("" || r.key, "") diff --git a/yt/yql/tests/sql/suites/join/yql-16011.cfg b/yt/yql/tests/sql/suites/join/yql-16011.cfg new file mode 100644 index 0000000000..bb349dd8ab --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-16011.cfg @@ -0,0 +1 @@ +providers yt diff --git a/yt/yql/tests/sql/suites/join/yql-16011.sql b/yt/yql/tests/sql/suites/join/yql-16011.sql new file mode 100644 index 0000000000..bb8698027d --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-16011.sql @@ -0,0 +1,27 @@ +USE plato; + +PRAGMA AnsiInForEmptyOrNullableItemsCollections = "true"; +PRAGMA yt.MapJoinLimit="1m"; +PRAGMA yt.LookupJoinLimit="64k"; +PRAGMA yt.LookupJoinMaxRows="100"; + + +insert into @T1 +select Just('fooo'u) as ID order by ID; + +insert into @T2 +select 't' as text, '{}'y as tags, 'foo' as ID +order by ID; + +commit; + + +$lost_ids = SELECT ID FROM @T2 WHERE ID NOT IN (SELECT ID FROM @T1); +$lost_samples_after_align = SELECT * FROM @T2 WHERE ID IN $lost_ids; + +SELECT * FROM $lost_samples_after_align; + +SELECT + text || 'a' as text, + tags, +FROM $lost_samples_after_align; diff --git a/yt/yql/tests/sql/suites/join/yql-19081.cfg b/yt/yql/tests/sql/suites/join/yql-19081.cfg new file mode 100644 index 0000000000..aaba13cbfa --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-19081.cfg @@ -0,0 +1,4 @@ +in Input1 sorted_uniq.txt +in Input2 sorted_uniq.txt +in Input3 input1.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/yql-19081.sql b/yt/yql/tests/sql/suites/join/yql-19081.sql new file mode 100644 index 0000000000..215ba02fe4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-19081.sql @@ -0,0 +1,12 @@ +USE plato; + +pragma yt.JoinMergeTablesLimit="100"; +pragma yt.MapJoinLimit="10M"; +pragma yt.MaxReplicationFactorToFuseOperations="1"; + +SELECT + a.key, a.subkey, c.value +FROM Input1 as a +JOIN /*+ merge() */ Input2 as b ON a.key = b.key AND a.subkey = b.subkey +JOIN Input3 as c ON b.key = c.key AND b.subkey = c.subkey +ORDER BY c.value; diff --git a/yt/yql/tests/sql/suites/join/yql-4275-off.cfg b/yt/yql/tests/sql/suites/join/yql-4275-off.cfg new file mode 100644 index 0000000000..3e2c239448 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-4275-off.cfg @@ -0,0 +1,3 @@ +in Input yql-4275.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/yql-4275.cfg b/yt/yql/tests/sql/suites/join/yql-4275.cfg new file mode 100644 index 0000000000..4461be80f4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-4275.cfg @@ -0,0 +1 @@ +in Input yql-4275.txt diff --git a/yt/yql/tests/sql/suites/join/yql-4275.sql b/yt/yql/tests/sql/suites/join/yql-4275.sql new file mode 100644 index 0000000000..99096a7bbd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-4275.sql @@ -0,0 +1,10 @@ +PRAGMA DisableSimpleColumns; +/* postgres can not */ +USE plato; + +SELECT +* +FROM Input as x1 +JOIN (select key ?? 4 as key from Input) as x2 on x1.key == x2.key +WHERE x2.key == 4 +; diff --git a/yt/yql/tests/sql/suites/join/yql-4275.txt.attr b/yt/yql/tests/sql/suites/join/yql-4275.txt.attr new file mode 100644 index 0000000000..4c1e650192 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-4275.txt.attr @@ -0,0 +1,40 @@ +{ + "_yql_row_spec" = { + "SortMembers"=["key";"subkey"];"SortedBy"=["key";"subkey"];"SortDirections"=[1;1];"SortedByTypes"=[["OptionalType";["DataType";"Int32"]];["OptionalType";["DataType";"String"]]]; + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "OptionalType"; + [ + "DataType"; + "Int32" + ] + ] + ]; + [ + "subkey"; + [ + "OptionalType"; + [ + "DataType"; + "String" + ] + ] + ]; + [ + "value"; + [ + "OptionalType"; + [ + "DataType"; + "String" + ] + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/join/yql-8125-off.cfg b/yt/yql/tests/sql/suites/join/yql-8125-off.cfg new file mode 100644 index 0000000000..76a2a2b6a4 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-8125-off.cfg @@ -0,0 +1,3 @@ +in Input input_intersect.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/yql-8125.cfg b/yt/yql/tests/sql/suites/join/yql-8125.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-8125.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/join/yql-8125.sql b/yt/yql/tests/sql/suites/join/yql-8125.sql new file mode 100644 index 0000000000..b3d81a5509 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-8125.sql @@ -0,0 +1,29 @@ +use plato; + +PRAGMA yt.JoinCollectColumnarStatistics="async"; + +INSERT INTO @yang_ids +SELECT + * + from Input + where subkey <= "3" + LIMIT 100; +commit; + +INSERT INTO @yang_ids + SELECT + * + from Input as j + LEFT ONLY JOIN @yang_ids + USING(key); +commit; + +INSERT INTO @yang_ids + SELECT + * + from Input as j + LEFT ONLY JOIN @yang_ids + USING(key); +commit; + +select * from @yang_ids; diff --git a/yt/yql/tests/sql/suites/join/yql-8131-off.cfg b/yt/yql/tests/sql/suites/join/yql-8131-off.cfg new file mode 100644 index 0000000000..be399805c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-8131-off.cfg @@ -0,0 +1,2 @@ +in Input input_intersect.txt +providers yt diff --git a/yt/yql/tests/sql/suites/join/yql-8131.cfg b/yt/yql/tests/sql/suites/join/yql-8131.cfg new file mode 100644 index 0000000000..32d89a04e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-8131.cfg @@ -0,0 +1,3 @@ +in Input input_intersect.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/join/yql-8131.sql b/yt/yql/tests/sql/suites/join/yql-8131.sql new file mode 100644 index 0000000000..bcdb5aa485 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-8131.sql @@ -0,0 +1,14 @@ +/* kikimr can not */ +use plato; + +PRAGMA DisableSimpleColumns; +PRAGMA yt.JoinCollectColumnarStatistics="async"; +PRAGMA yt.MinTempAvgChunkSize="0"; +PRAGMA yt.MapJoinLimit="1"; + +SELECT * +FROM (select distinct key,subkey from Input where cast(key as Int32) > 100 order by key limit 100) as a +RIGHT JOIN (select key,value from Input where cast(key as Int32) < 500) as b +USING(key) +ORDER BY a.key,a.subkey,b.value; + diff --git a/yt/yql/tests/sql/suites/join/yql-8980-off.cfg b/yt/yql/tests/sql/suites/join/yql-8980-off.cfg new file mode 100644 index 0000000000..61ca79e527 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-8980-off.cfg @@ -0,0 +1,7 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/yql-8980.cfg b/yt/yql/tests/sql/suites/join/yql-8980.cfg new file mode 100644 index 0000000000..5ffa9b00c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-8980.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 input1.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/join/yql-8980.sql b/yt/yql/tests/sql/suites/join/yql-8980.sql new file mode 100644 index 0000000000..e2701ee730 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql-8980.sql @@ -0,0 +1,15 @@ +USE plato; + +$foo = (SELECT key, subkey, value IN ("wat", "bar") AS value FROM Input); + +SELECT + R0.key, R0.subkey, R0.value, + R1.key, R1.subkey, R1.value, + R2.key, R2.value +FROM $foo AS R0 +LEFT JOIN $foo AS R1 ON + R0.subkey = R1.key +LEFT JOIN $foo AS R2 ON + R1.subkey = R2.key +ORDER BY R0.key; + diff --git a/yt/yql/tests/sql/suites/join/yql_465-off.cfg b/yt/yql/tests/sql/suites/join/yql_465-off.cfg new file mode 100644 index 0000000000..e6a2551297 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql_465-off.cfg @@ -0,0 +1,4 @@ +in a input1.txt +in b input2.txt +providers dq +pragma Dq.HashJoinMode='off'; diff --git a/yt/yql/tests/sql/suites/join/yql_465.cfg b/yt/yql/tests/sql/suites/join/yql_465.cfg new file mode 100644 index 0000000000..96c331a7fd --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql_465.cfg @@ -0,0 +1,2 @@ +in a input1.txt +in b input2.txt diff --git a/yt/yql/tests/sql/suites/join/yql_465.sql b/yt/yql/tests/sql/suites/join/yql_465.sql new file mode 100644 index 0000000000..4054dc97c9 --- /dev/null +++ b/yt/yql/tests/sql/suites/join/yql_465.sql @@ -0,0 +1,3 @@ +PRAGMA DisableSimpleColumns; +use plato; +select * from (select * from a where a.key > "zzz") as a join b on a.key == b.key; diff --git a/yt/yql/tests/sql/suites/json/default.cfg b/yt/yql/tests/sql/suites/json/default.cfg new file mode 100644 index 0000000000..d47da430a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/default.cfg @@ -0,0 +1 @@ +udf json2_udf
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/json/example.txt.attr b/yt/yql/tests/sql/suites/json/example.txt.attr new file mode 100644 index 0000000000..b828b62de7 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/example.txt.attr @@ -0,0 +1,23 @@ +{ + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "K"; + [ + "DataType"; + "Int64" + ] + ]; + [ + "J"; + [ + "DataType"; + "Json" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/json/json_exists/example.cfg b/yt/yql/tests/sql/suites/json/json_exists/example.cfg new file mode 100644 index 0000000000..ae59265f21 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/json_exists/example.cfg @@ -0,0 +1,3 @@ +in T example.txt +in Filter1 json_exists/filter_example1.txt +in Filter2 json_exists/filter_example2.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/json/json_exists/example.sql b/yt/yql/tests/sql/suites/json/json_exists/example.sql new file mode 100644 index 0000000000..7c903f4fe8 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/json_exists/example.sql @@ -0,0 +1,48 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +-- These examples are taken from [ISO/IEC TR 19075-6:2017] standard (https://www.iso.org/standard/67367.html) +SELECT T.K +FROM T +WHERE JSON_EXISTS (T.J, 'lax $.where'); + +SELECT T.K +FROM T +WHERE JSON_EXISTS (T.J, 'strict $.where'); + +SELECT T.K +FROM T +WHERE JSON_EXISTS(T.J, 'strict $.where' FALSE ON ERROR); + +SELECT T.K +FROM T +WHERE JSON_EXISTS (T.J, 'strict $.friends[*].rank'); + +-- NOTE: Table "T" was renamed to "Filter{index}" to combine several filter examples in 1 test +SELECT K +FROM Filter1 +WHERE JSON_EXISTS (Filter1.J, 'lax $ ? (@.pay/@.hours > 9)'); + +SELECT K +FROM Filter1 +WHERE JSON_EXISTS (Filter1.J, 'strict $ ? (@.pay/@.hours > 9)'); + +SELECT K +FROM Filter2 +WHERE JSON_EXISTS (Filter2.J, 'lax $ ? (@.pay/@.hours > 9)'); + +SELECT K +FROM Filter2 +WHERE JSON_EXISTS (Filter2.J, 'strict $ ? (@.pay/@.hours > 9)'); + +SELECT K +FROM Filter2 +WHERE JSON_EXISTS (Filter2.J, 'lax $ ? (@.hours > 9)'); + +SELECT K +FROM Filter2 +WHERE JSON_EXISTS (Filter2.J, 'strict $ ? (@.hours > 9)'); + +-- NOTE: Standard also provides several examples with is unknown predicate. Following their inimitable style +-- standard authors do not provide data for these examples so we do not include them here diff --git a/yt/yql/tests/sql/suites/json/json_exists/filter_example1.txt.attr b/yt/yql/tests/sql/suites/json/json_exists/filter_example1.txt.attr new file mode 100644 index 0000000000..b828b62de7 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/json_exists/filter_example1.txt.attr @@ -0,0 +1,23 @@ +{ + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "K"; + [ + "DataType"; + "Int64" + ] + ]; + [ + "J"; + [ + "DataType"; + "Json" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/json/json_exists/filter_example2.txt.attr b/yt/yql/tests/sql/suites/json/json_exists/filter_example2.txt.attr new file mode 100644 index 0000000000..b828b62de7 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/json_exists/filter_example2.txt.attr @@ -0,0 +1,23 @@ +{ + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "K"; + [ + "DataType"; + "Int64" + ] + ]; + [ + "J"; + [ + "DataType"; + "Json" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/json/json_query/example.cfg b/yt/yql/tests/sql/suites/json/json_query/example.cfg new file mode 100644 index 0000000000..d23c2d6847 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/json_query/example.cfg @@ -0,0 +1 @@ +in T example.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/json/json_query/example.sql b/yt/yql/tests/sql/suites/json/json_query/example.sql new file mode 100644 index 0000000000..bdac8376bf --- /dev/null +++ b/yt/yql/tests/sql/suites/json/json_query/example.sql @@ -0,0 +1,47 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +-- These examples are taken from [ISO/IEC TR 19075-6:2017] standard (https://www.iso.org/standard/67367.html) +SELECT T.K, + JSON_VALUE (T.J, 'lax $.who') AS Who, + JSON_VALUE (T.J, 'lax $.where' NULL ON EMPTY) AS Nali, + JSON_QUERY (T.J, 'lax $.friends') AS Friends +FROM T +WHERE JSON_EXISTS (T.J, 'lax $.friends'); + +SELECT T.K, + JSON_VALUE (T.J, 'lax $.who') AS Who, + JSON_VALUE (T.J, 'lax $.where' NULL ON EMPTY) AS Nali, + JSON_QUERY (T.J, 'lax $.friends' NULL ON EMPTY) AS Friends +FROM T; + +SELECT T.K, + JSON_VALUE (T.J, 'lax $.who') AS Who, + JSON_VALUE (T.J, 'lax $.where' NULL ON EMPTY) AS Nali, + JSON_QUERY (T.J, 'lax $.friends.name' WITH ARRAY WRAPPER) AS FriendsNames +FROM T; + +-- In standard this example is demonstrated using PDF table, without any queries. +-- We represent it as set of queries, using NULL as error value. +-- Each SELECT is a row in source PDF table +$J2 = CAST(@@{ "a": "[1,2]", "b": [1,2], "c": "hi"}@@ as Json); +SELECT + JSON_VALUE($J2, "strict $.a"), + JSON_VALUE($J2, "strict $.b" NULL ON ERROR), + JSON_VALUE($J2, "strict $.c"); + +SELECT + JSON_QUERY($J2, "strict $.a" WITHOUT ARRAY WRAPPER NULL ON ERROR), + JSON_QUERY($J2, "strict $.b" WITHOUT ARRAY WRAPPER), + JSON_QUERY($J2, "strict $.c" WITHOUT ARRAY WRAPPER NULL ON ERROR); + +SELECT + JSON_QUERY($J2, "strict $.a" WITH UNCONDITIONAL ARRAY WRAPPER), + JSON_QUERY($J2, "strict $.b" WITH UNCONDITIONAL ARRAY WRAPPER), + JSON_QUERY($J2, "strict $.c" WITH UNCONDITIONAL ARRAY WRAPPER); + +SELECT + JSON_QUERY($J2, "strict $.a" WITH CONDITIONAL ARRAY WRAPPER), + JSON_QUERY($J2, "strict $.b" WITH CONDITIONAL ARRAY WRAPPER), + JSON_QUERY($J2, "strict $.c" WITH CONDITIONAL ARRAY WRAPPER); diff --git a/yt/yql/tests/sql/suites/json/json_value/example.cfg b/yt/yql/tests/sql/suites/json/json_value/example.cfg new file mode 100644 index 0000000000..d23c2d6847 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/json_value/example.cfg @@ -0,0 +1 @@ +in T example.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/json/json_value/example.sql b/yt/yql/tests/sql/suites/json/json_value/example.sql new file mode 100644 index 0000000000..b62ed6648b --- /dev/null +++ b/yt/yql/tests/sql/suites/json/json_value/example.sql @@ -0,0 +1,55 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +-- These examples are taken from [ISO/IEC TR 19075-6:2017] standard (https://www.iso.org/standard/67367.html) +SELECT T.K, + JSON_VALUE (T.J, 'lax $.who') AS Who +FROM T; + +SELECT T.K, + JSON_VALUE (T.J, 'lax $.who') AS Who, + JSON_VALUE (T.J, 'lax $.where' + NULL ON EMPTY) AS Nali +FROM T; + +SELECT T.K, + JSON_VALUE (T.J, 'strict $.who') AS Who, + JSON_VALUE (T.J, 'strict $.where' + DEFAULT 'no where there' ON ERROR ) + AS Nali +FROM T; + +SELECT T.K, + JSON_VALUE (T.J, 'lax $.who') AS Who, + JSON_VALUE (T.J, 'lax $.where' NULL ON EMPTY) AS Nali, + JSON_VALUE (T.J, 'lax $.friends.name' NULL ON EMPTY + DEFAULT '*** error ***' ON ERROR) + AS Friend +FROM T; + +SELECT T.K, + JSON_VALUE (T.J, 'strict $.who') AS Who, + JSON_VALUE (T.J, 'strict $.where' NULL ON EMPTY NULL ON ERROR) AS Nali, + + -- NOTE: output for this particular column differs with standard. + -- For row with T.K = 106 and T.J = { "who": "Louise", "where": "Iana" } output is "*** error ***", not NULL. + -- This is because answer in standard (NULL) is not correct. Query "strict $.friends[*].name" is executed in strict mode + -- where all structural errors are "hard" errors. Row with T.K = 106 does not have "friends" key in T.J. This is structural error + -- and the result of JSON_VALUE must tolerate ON ERROR section which specifies to return "*** error ***" string. + -- + -- We can check this in PostgreSQL too (at the moment of writing PostgreSQL does not support JSON_VALUE function so we use jsonb_path_query): + -- postgres=# select * from jsonb_path_query('{ "who": "Louise", "where": "Iana" }', 'strict $.friends[*].name'); + -- ERROR: JSON object does not contain key "friends" + -- PostgreSQL shows us that hard error has happened, as expected. + JSON_VALUE (T.J, 'strict $.friends[*].name' NULL ON EMPTY + DEFAULT '*** error ***' ON ERROR) + AS Friend +FROM T; + +SELECT T.K, + JSON_VALUE (T.J, 'lax $.who') AS Who, + -- NOTE: In the original example INTEGER type was used. YQL does not have INTEGER type, Int64 was used instead + JSON_VALUE (T.J, 'lax $.friends[0].rank' RETURNING Int64 NULL ON EMPTY) + AS Rank +FROM T; diff --git a/yt/yql/tests/sql/suites/json/jsondocument/input.txt.attr b/yt/yql/tests/sql/suites/json/jsondocument/input.txt.attr new file mode 100644 index 0000000000..e61c1d4837 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/jsondocument/input.txt.attr @@ -0,0 +1,23 @@ +{ + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "Id"; + [ + "DataType"; + "Int64" + ] + ]; + [ + "Profile"; + [ + "DataType"; + "JsonDocument" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/json/jsondocument/insert.cfg b/yt/yql/tests/sql/suites/json/jsondocument/insert.cfg new file mode 100644 index 0000000000..25c3682008 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/jsondocument/insert.cfg @@ -0,0 +1,2 @@ +in Input jsondocument/input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/json/jsondocument/insert.sql b/yt/yql/tests/sql/suites/json/jsondocument/insert.sql new file mode 100644 index 0000000000..a22fbb8390 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/jsondocument/insert.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +/* multirun can not */ + +INSERT INTO plato.Output +SELECT * FROM plato.Input; diff --git a/yt/yql/tests/sql/suites/json/jsondocument/select.cfg b/yt/yql/tests/sql/suites/json/jsondocument/select.cfg new file mode 100644 index 0000000000..442a3ce787 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/jsondocument/select.cfg @@ -0,0 +1 @@ +in Input jsondocument/input.txt diff --git a/yt/yql/tests/sql/suites/json/jsondocument/select.sql b/yt/yql/tests/sql/suites/json/jsondocument/select.sql new file mode 100644 index 0000000000..57361db5d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/json/jsondocument/select.sql @@ -0,0 +1,7 @@ +/* postgres can not */ + +SELECT + Id, + Profile +FROM + plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/between_with_key_filter.cfg b/yt/yql/tests/sql/suites/key_filter/between_with_key_filter.cfg new file mode 100644 index 0000000000..b71bdee53e --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/between_with_key_filter.cfg @@ -0,0 +1,2 @@ +in Input between_with_key_filter.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/between_with_key_filter.sql b/yt/yql/tests/sql/suites/key_filter/between_with_key_filter.sql new file mode 100644 index 0000000000..1cdb7cab2b --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/between_with_key_filter.sql @@ -0,0 +1,3 @@ +select * from ( + select key as key, coalesce(cast(subkey as int), 0) as subkey, value as value from plato.Input +) as x where key == "test" and subkey between 1 and 3 order by key, subkey; diff --git a/yt/yql/tests/sql/suites/key_filter/calc_dependent.sql b/yt/yql/tests/sql/suites/key_filter/calc_dependent.sql new file mode 100644 index 0000000000..724884bc5c --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/calc_dependent.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +USE plato; + +$k1 = "3" || "23"; +$k2 = "0" || SUBSTRING($k1, 1); + +SELECT + key +FROM Input +WHERE key >= $k2 and key <= $k1; diff --git a/yt/yql/tests/sql/suites/key_filter/calc_dependent_with_tmp.sql b/yt/yql/tests/sql/suites/key_filter/calc_dependent_with_tmp.sql new file mode 100644 index 0000000000..35c2a6b1b0 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/calc_dependent_with_tmp.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +USE plato; + +insert into @temp +select * from Input order by key desc limit 1; + +commit; + +$last_key = select key from @temp limit 1; + +select * from Input where key = $last_key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/complex.sql b/yt/yql/tests/sql/suites/key_filter/complex.sql new file mode 100644 index 0000000000..fa2f53e0f2 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/complex.sql @@ -0,0 +1,3 @@ +select * from plato.Input +where key in ("023", "075", "150") and (subkey="1" or subkey="3") and value>="aaa" and value<="zzz" +order by key,subkey; diff --git a/yt/yql/tests/sql/suites/key_filter/contains.sql b/yt/yql/tests/sql/suites/key_filter/contains.sql new file mode 100644 index 0000000000..8c7d155eb7 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/contains.sql @@ -0,0 +1 @@ +select * from plato.Input where key in ("075", "023", "037") order by key; diff --git a/yt/yql/tests/sql/suites/key_filter/contains_optional.cfg b/yt/yql/tests/sql/suites/key_filter/contains_optional.cfg new file mode 100644 index 0000000000..12a1e15863 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/contains_optional.cfg @@ -0,0 +1,2 @@ +in Input optional.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/contains_optional.sql b/yt/yql/tests/sql/suites/key_filter/contains_optional.sql new file mode 100644 index 0000000000..5e1aa38d93 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/contains_optional.sql @@ -0,0 +1 @@ +select * from plato.Input where key in ("075", "023") order by key; diff --git a/yt/yql/tests/sql/suites/key_filter/contains_tuples.sql b/yt/yql/tests/sql/suites/key_filter/contains_tuples.sql new file mode 100644 index 0000000000..65b9798176 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/contains_tuples.sql @@ -0,0 +1,17 @@ +/* postgres can not */ + +select * from plato.Input where AsTuple(key) in ( + AsTuple("075"), + AsTuple("037")) order by key; + +select * from plato.Input where AsTuple(key, subkey) in ( + AsTuple("075", "1"), + AsTuple("023", "3")) order by key; + +select * from plato.Input where AsTuple(key, subkey, 1 + 2, value) in ( + AsTuple("075", "1", 3u, "abc"), + AsTuple("023", "3", 1+1+1, "aaa")) order by key; + +select * from plato.Input where AsTuple(subkey, AsTuple(key, 1), value, key) in ( + AsTuple("1", AsTuple("075", 1), "abc", "075"), + AsTuple("3", AsTuple("023", 1), "aaa", "023")) order by key; diff --git a/yt/yql/tests/sql/suites/key_filter/contains_tuples_no_keyfilter.sql b/yt/yql/tests/sql/suites/key_filter/contains_tuples_no_keyfilter.sql new file mode 100644 index 0000000000..fea4b3aa7f --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/contains_tuples_no_keyfilter.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +-- right side depends on row +select * from plato.Input where AsTuple(key) in ( + AsTuple("075"), + AsTuple(key)) order by key, subkey; + +-- left side is not a prefix of sort columns +select * from plato.Input where AsTuple(subkey, value) in ( + AsTuple("1", "aaa"), + AsTuple("3", "aaa")) order by key, subkey; +-- not a member on left side +select * from plato.Input where AsTuple(subkey, AsTuple(key, 1), value, key || "x") in ( + AsTuple("1", AsTuple("075", 1), "abc", "075x"), + AsTuple("3", AsTuple("023", 1), "aaa", "023x")) order by key, subkey; diff --git a/yt/yql/tests/sql/suites/key_filter/convert.cfg b/yt/yql/tests/sql/suites/key_filter/convert.cfg new file mode 100644 index 0000000000..c3f29d9c7b --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/convert.cfg @@ -0,0 +1,2 @@ +in Input large_ui64.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/convert.sql b/yt/yql/tests/sql/suites/key_filter/convert.sql new file mode 100644 index 0000000000..ffbd15120f --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/convert.sql @@ -0,0 +1,5 @@ +select * from plato.Input +where + key = 3755112183455673684 + or key = 10790819990820982188 +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/datetime.sql b/yt/yql/tests/sql/suites/key_filter/datetime.sql new file mode 100644 index 0000000000..cc8e1330ee --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/datetime.sql @@ -0,0 +1,70 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +insert into @d +select * from as_table(AsList(<|key:Date('2021-01-03')|>)) +assume order by key +; + +insert into @dt +select * from as_table(AsList(<|key:Datetime('2021-01-03T21:15:30Z')|>)) +assume order by key +; + +insert into @ts +select * from as_table(AsList(<|key:Timestamp('2021-01-03T21:15:30.673521Z')|>)) +assume order by key +; + + +COMMIT; + +SELECT * FROM @d WHERE key > Date('2021-01-02'); +SELECT * FROM @d WHERE key >= Date('2021-01-03'); +SELECT * FROM @d WHERE key < Date('2021-01-04'); +SELECT * FROM @d WHERE key <= Date('2021-01-03'); + +SELECT * FROM @d WHERE key > Datetime('2021-01-02T23:00:00Z'); +SELECT * FROM @d WHERE key >= Datetime('2021-01-02T23:00:00Z'); +SELECT * FROM @d WHERE key < Datetime('2021-01-03T20:00:00Z'); +SELECT * FROM @d WHERE key <= Datetime('2021-01-03T20:00:00Z'); + +SELECT * FROM @d WHERE key > Timestamp('2021-01-02T23:32:01.673521Z'); +SELECT * FROM @d WHERE key >= Timestamp('2021-01-02T23:32:01.673521Z'); +SELECT * FROM @d WHERE key < Timestamp('2021-01-03T00:00:00.673521Z'); +SELECT * FROM @d WHERE key <= Timestamp('2021-01-03T00:00:00.673521Z'); + +------------------------------------------- + +SELECT * FROM @dt WHERE key > Date('2021-01-03'); +SELECT * FROM @dt WHERE key >= Date('2021-01-03'); +SELECT * FROM @dt WHERE key < Date('2021-01-04'); +SELECT * FROM @dt WHERE key <= Date('2021-01-04'); + +SELECT * FROM @dt WHERE key > Datetime('2021-01-03T21:15:29Z'); +SELECT * FROM @dt WHERE key >= Datetime('2021-01-03T21:15:30Z'); +SELECT * FROM @dt WHERE key < Datetime('2021-01-03T21:15:31Z'); +SELECT * FROM @dt WHERE key <= Datetime('2021-01-03T21:15:30Z'); + +SELECT * FROM @dt WHERE key > Timestamp('2021-01-03T21:15:29.673521Z'); +SELECT * FROM @dt WHERE key >= Timestamp('2021-01-03T21:15:29.673521Z'); +SELECT * FROM @dt WHERE key < Timestamp('2021-01-03T21:15:30.673521Z'); +SELECT * FROM @dt WHERE key <= Timestamp('2021-01-03T21:15:30.673521Z'); + +------------------------------------------- + +SELECT * FROM @ts WHERE key > Date('2021-01-03'); +SELECT * FROM @ts WHERE key >= Date('2021-01-03'); +SELECT * FROM @ts WHERE key < Date('2021-01-04'); +SELECT * FROM @ts WHERE key <= Date('2021-01-04'); + +SELECT * FROM @ts WHERE key > Datetime('2021-01-03T20:00:00Z'); +SELECT * FROM @ts WHERE key >= Datetime('2021-01-03T20:00:00Z'); +SELECT * FROM @ts WHERE key < Datetime('2021-01-03T22:00:00Z'); +SELECT * FROM @ts WHERE key <= Datetime('2021-01-03T22:00:00Z'); + +SELECT * FROM @ts WHERE key > Timestamp('2021-01-03T21:15:30.573521Z'); +SELECT * FROM @ts WHERE key >= Timestamp('2021-01-03T21:15:30.673521Z'); +SELECT * FROM @ts WHERE key < Timestamp('2021-01-03T21:15:30.773521Z'); +SELECT * FROM @ts WHERE key <= Timestamp('2021-01-03T21:15:30.673521Z'); diff --git a/yt/yql/tests/sql/suites/key_filter/decimal.cfg b/yt/yql/tests/sql/suites/key_filter/decimal.cfg new file mode 100644 index 0000000000..1f8653b25b --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/decimal.cfg @@ -0,0 +1,2 @@ +in Input key_decimal.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/decimal.sql b/yt/yql/tests/sql/suites/key_filter/decimal.sql new file mode 100644 index 0000000000..e64bfb7637 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/decimal.sql @@ -0,0 +1,37 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$asIs = Python::asIs(Callable<(String)->String>, +@@ +def asIs(arg): + return arg +@@ +); + +insert into @decimal +select cast(value as Decimal(15,10)) as value from Input order by value; + +commit; + +select * from ( + select * from @decimal where value < Decimal("4.1",15,10) and value > Decimal("10.5",15,10) -- empty + union all + select * from @decimal where value > Decimal("inf",15,10) -- empty + union all + select * from @decimal where value < Decimal("-inf",15,10) -- empty + union all + select * from @decimal where value = Decimal("nan",15,10) -- empty + union all + select * from @decimal where value = Decimal("inf",15,10) + union all + select * from @decimal where value = Decimal("-inf",15,10) + union all + select * from @decimal where value > Decimal("3.3",15,10) or value >= Decimal("3.30001",15,10) +) +order by value; + +-- Don't union all to calc nodes separatelly +select * from @decimal where value = cast("6.6" as Decimal(15,10)); -- Safe key filter calc +select * from @decimal where value = cast($asIs("3.3") as Decimal(15,10)); -- Unsafe key filter calc +select * from @decimal where value = cast($asIs("bad") as Decimal(15,10)); -- Unsafe key filter calc diff --git a/yt/yql/tests/sql/suites/key_filter/default.cfg b/yt/yql/tests/sql/suites/key_filter/default.cfg new file mode 100644 index 0000000000..2334ceb124 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/default.cfg @@ -0,0 +1,2 @@ +in Input sorted1.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/dependent_value.sql b/yt/yql/tests/sql/suites/key_filter/dependent_value.sql new file mode 100644 index 0000000000..a9dd4d6c52 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/dependent_value.sql @@ -0,0 +1,3 @@ +select * +from plato.Input +where key == subkey; diff --git a/yt/yql/tests/sql/suites/key_filter/dict_contains.sql b/yt/yql/tests/sql/suites/key_filter/dict_contains.sql new file mode 100644 index 0000000000..397df1f9d2 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/dict_contains.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input where key in YQL::DictFromKeys(ParseType("String"), AsTuple("075", "023", "037")) order by key; diff --git a/yt/yql/tests/sql/suites/key_filter/dict_contains_optional.cfg b/yt/yql/tests/sql/suites/key_filter/dict_contains_optional.cfg new file mode 100644 index 0000000000..12a1e15863 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/dict_contains_optional.cfg @@ -0,0 +1,2 @@ +in Input optional.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/dict_contains_optional.sql b/yt/yql/tests/sql/suites/key_filter/dict_contains_optional.sql new file mode 100644 index 0000000000..22006ae6d0 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/dict_contains_optional.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input where key in YQL::DictFromKeys(ParseType("String"), AsTuple("075", "023")) order by key; diff --git a/yt/yql/tests/sql/suites/key_filter/dynamic.txt.attr b/yt/yql/tests/sql/suites/key_filter/dynamic.txt.attr new file mode 100644 index 0000000000..9e3c33c4cb --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/dynamic.txt.attr @@ -0,0 +1,33 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key"; ["DataType"; "String"]]; + ["subkey"; ["DataType"; "String"]]; + ["value"; ["DataType"; "String"]]; + ]]; + "SortMembers"=["key"; "subkey"]; + "SortedBy"=["key"; "subkey"]; + "SortDirections"=[1; 1]; + "SortedByTypes"=[["DataType";"String"]; ["DataType";"String"]] + }; + "_yql_dynamic"=%true; + "schema"=< + "strict" = %true; + "unique_keys" = %true + >[ + { + "name" = "key"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "value"; + "type" = "string"; + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/empty_range.cfg b/yt/yql/tests/sql/suites/key_filter/empty_range.cfg new file mode 100644 index 0000000000..e893a2305b --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/empty_range.cfg @@ -0,0 +1,13 @@ +in InputInt8 key_i8.txt +in InputInt16 key_i16.txt +in InputInt32 key_i32.txt +in InputInt64 key_i64.txt +in InputUint8 key_ui8.txt +in InputUint16 key_ui16.txt +in InputUint32 key_ui32.txt +in InputUint64 key_ui64.txt +in InputFloat key_flt.txt +in InputDouble key_dbl.txt +in InputString key_str.txt +in InputOptString key_opt_str.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/empty_range.sql b/yt/yql/tests/sql/suites/key_filter/empty_range.sql new file mode 100644 index 0000000000..3597ec3049 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/empty_range.sql @@ -0,0 +1,17 @@ +use plato; + +select * from InputInt8 where value < -4 and value > 10; +select * from InputInt16 where value < -4 and value > 10; +select * from InputInt32 where value < -4 and value > 10; +select * from InputInt64 where value < -4 and value > 10; + +select * from InputUint8 where value < 4 and value > 10; +select * from InputUint16 where value < 4 and value > 10; +select * from InputUint32 where value < 4 and value > 10; +select * from InputUint64 where value < 4 and value > 10; + +select * from InputFloat where value < 4.1 and value > 10.5; +select * from InputDouble where value < 4.1 and value > 10.5; + +select * from InputString where value < "a" and value > "c"; +select * from InputOptString where value < "a" and value > "c"; diff --git a/yt/yql/tests/sql/suites/key_filter/empty_range_over_dynamic.cfg b/yt/yql/tests/sql/suites/key_filter/empty_range_over_dynamic.cfg new file mode 100644 index 0000000000..1908d503d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/empty_range_over_dynamic.cfg @@ -0,0 +1,2 @@ +in Input dynamic.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/empty_range_over_dynamic.sql b/yt/yql/tests/sql/suites/key_filter/empty_range_over_dynamic.sql new file mode 100644 index 0000000000..59d8924372 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/empty_range_over_dynamic.sql @@ -0,0 +1 @@ +select * from plato.Input where key<"030" and key>"200"; diff --git a/yt/yql/tests/sql/suites/key_filter/extend_over_map_with_same_schema.sql b/yt/yql/tests/sql/suites/key_filter/extend_over_map_with_same_schema.sql new file mode 100644 index 0000000000..3f5c463eb1 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/extend_over_map_with_same_schema.sql @@ -0,0 +1,10 @@ +select * from ( + SELECT "x023" as key, subkey, value FROM plato.Input WHERE key == "023" + union all + SELECT "x037" as key, subkey, value FROM plato.Input WHERE key == "037" + union all + SELECT "x075" as key, subkey, value FROM plato.Input WHERE key == "075" + union all + SELECT "x150" as key, subkey, value FROM plato.Input WHERE key == "150" +) as x +order by key, subkey;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/is_null.cfg b/yt/yql/tests/sql/suites/key_filter/is_null.cfg new file mode 100644 index 0000000000..12a1e15863 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/is_null.cfg @@ -0,0 +1,2 @@ +in Input optional.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/is_null.sql b/yt/yql/tests/sql/suites/key_filter/is_null.sql new file mode 100644 index 0000000000..5edf06b299 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/is_null.sql @@ -0,0 +1 @@ +select * from plato.Input where key is null; diff --git a/yt/yql/tests/sql/suites/key_filter/is_null_multi_key.cfg b/yt/yql/tests/sql/suites/key_filter/is_null_multi_key.cfg new file mode 100644 index 0000000000..12a1e15863 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/is_null_multi_key.cfg @@ -0,0 +1,2 @@ +in Input optional.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/is_null_multi_key.sql b/yt/yql/tests/sql/suites/key_filter/is_null_multi_key.sql new file mode 100644 index 0000000000..69b306c5f0 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/is_null_multi_key.sql @@ -0,0 +1 @@ +select * from plato.Input where key is null and subkey is null; diff --git a/yt/yql/tests/sql/suites/key_filter/is_null_or_data.cfg b/yt/yql/tests/sql/suites/key_filter/is_null_or_data.cfg new file mode 100644 index 0000000000..12a1e15863 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/is_null_or_data.cfg @@ -0,0 +1,2 @@ +in Input optional.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/is_null_or_data.sql b/yt/yql/tests/sql/suites/key_filter/is_null_or_data.sql new file mode 100644 index 0000000000..d5aa2b346c --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/is_null_or_data.sql @@ -0,0 +1 @@ +select * from plato.Input where key is null or key = "023"; diff --git a/yt/yql/tests/sql/suites/key_filter/is_null_with_condition.cfg b/yt/yql/tests/sql/suites/key_filter/is_null_with_condition.cfg new file mode 100644 index 0000000000..12a1e15863 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/is_null_with_condition.cfg @@ -0,0 +1,2 @@ +in Input optional.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/is_null_with_condition.sql b/yt/yql/tests/sql/suites/key_filter/is_null_with_condition.sql new file mode 100644 index 0000000000..bff04b59d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/is_null_with_condition.sql @@ -0,0 +1 @@ +select * from plato.Input where key is null and subkey >= "0" and subkey <= "9"; diff --git a/yt/yql/tests/sql/suites/key_filter/key_dbl.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_dbl.txt.attr new file mode 100644 index 0000000000..8aaee30aa6 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_dbl.txt.attr @@ -0,0 +1,11 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["value";["DataType";"Double"]] + ]]; + "SortMembers"=["value"]; + "SortedBy"=["value"]; + "SortDirections"=[1]; + "SortedByTypes"=[["DataType";"Double"]] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/key_decimal.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_decimal.txt.attr new file mode 100644 index 0000000000..e81b6ade45 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_decimal.txt.attr @@ -0,0 +1,5 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["value";["DataType";"String"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/key_filter/key_double_opt_suffix.cfg b/yt/yql/tests/sql/suites/key_filter/key_double_opt_suffix.cfg new file mode 100644 index 0000000000..6746e7263a --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_double_opt_suffix.cfg @@ -0,0 +1,3 @@ +out Output output.txt +providers yt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/key_double_opt_suffix.sql b/yt/yql/tests/sql/suites/key_filter/key_double_opt_suffix.sql new file mode 100644 index 0000000000..9f721723b1 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_double_opt_suffix.sql @@ -0,0 +1,13 @@ +USE plato; + +INSERT INTO Output +select 1 as key, Just(Just("x")) as subkey, +union all +select 2 as key, null as subkey, +union all +select 2 as key, Just(Nothing(String?)) as subkey, +ORDER BY key, subkey; +commit; + + +select key, subkey from Output where key == 2; diff --git a/yt/yql/tests/sql/suites/key_filter/key_flt.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_flt.txt.attr new file mode 100644 index 0000000000..69560d7e0b --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_flt.txt.attr @@ -0,0 +1,11 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["value";["DataType";"Float"]] + ]]; + "SortMembers"=["value"]; + "SortedBy"=["value"]; + "SortDirections"=[1]; + "SortedByTypes"=[["DataType";"Float"]] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/key_i16.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_i16.txt.attr new file mode 100644 index 0000000000..0c02f17123 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_i16.txt.attr @@ -0,0 +1,11 @@ +{ + "schema" = <"strict" = %true;"unique_keys" = %false> + [ + { + "name" = "value"; + "sort_order" = "ascending"; + "type" = "int16"; + "required" = %true; + } + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/key_i32.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_i32.txt.attr new file mode 100644 index 0000000000..7fcf7442be --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_i32.txt.attr @@ -0,0 +1,11 @@ +{ + "schema" = <"strict" = %true;"unique_keys" = %false> + [ + { + "name" = "value"; + "sort_order" = "ascending"; + "type" = "int32"; + "required" = %true; + } + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/key_i64.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_i64.txt.attr new file mode 100644 index 0000000000..38f5923be5 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_i64.txt.attr @@ -0,0 +1,11 @@ +{ + "schema" = <"strict" = %true;"unique_keys" = %false> + [ + { + "name" = "value"; + "sort_order" = "ascending"; + "type" = "int64"; + "required" = %true; + } + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/key_i8.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_i8.txt.attr new file mode 100644 index 0000000000..01598a2af9 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_i8.txt.attr @@ -0,0 +1,11 @@ +{ + "schema" = <"strict" = %true;"unique_keys" = %false> + [ + { + "name" = "value"; + "sort_order" = "ascending"; + "type" = "int8"; + "required" = %true; + } + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/key_opt_str.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_opt_str.txt.attr new file mode 100644 index 0000000000..3b59311748 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_opt_str.txt.attr @@ -0,0 +1,10 @@ +{ + "schema" = <"strict" = %true;"unique_keys" = %false> + [ + { + "name" = "value"; + "sort_order" = "ascending"; + "type" = "string"; + } + ] +} diff --git a/yt/yql/tests/sql/suites/key_filter/key_str.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_str.txt.attr new file mode 100644 index 0000000000..f69f774ce2 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_str.txt.attr @@ -0,0 +1,11 @@ +{ + "schema" = <"strict" = %true;"unique_keys" = %false> + [ + { + "name" = "value"; + "sort_order" = "ascending"; + "type" = "string"; + "required" = %true; + } + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/key_tzdate.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_tzdate.txt.attr new file mode 100644 index 0000000000..c8ad43a949 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_tzdate.txt.attr @@ -0,0 +1,7 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["value";["DataType";"String"]] + ]]; + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/key_ui16.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_ui16.txt.attr new file mode 100644 index 0000000000..d05297bf1b --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_ui16.txt.attr @@ -0,0 +1,11 @@ +{ + "schema" = <"strict" = %true;"unique_keys" = %false> + [ + { + "name" = "value"; + "sort_order" = "ascending"; + "type" = "uint16"; + "required" = %true; + } + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/key_ui32.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_ui32.txt.attr new file mode 100644 index 0000000000..edb661f4ea --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_ui32.txt.attr @@ -0,0 +1,11 @@ +{ + "schema" = <"strict" = %true;"unique_keys" = %false> + [ + { + "name" = "value"; + "sort_order" = "ascending"; + "type" = "uint32"; + "required" = %true; + } + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/key_ui64.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_ui64.txt.attr new file mode 100644 index 0000000000..5028e033d5 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_ui64.txt.attr @@ -0,0 +1,11 @@ +{ + "schema" = <"strict" = %true;"unique_keys" = %false> + [ + { + "name" = "value"; + "sort_order" = "ascending"; + "type" = "uint64"; + "required" = %true; + } + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/key_ui8.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_ui8.txt.attr new file mode 100644 index 0000000000..6d04b983e9 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_ui8.txt.attr @@ -0,0 +1,11 @@ +{ + "schema" = <"strict" = %true;"unique_keys" = %false> + [ + { + "name" = "value"; + "sort_order" = "ascending"; + "type" = "uint8"; + "required" = %true; + } + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/key_uuid.txt.attr b/yt/yql/tests/sql/suites/key_filter/key_uuid.txt.attr new file mode 100644 index 0000000000..9390239b63 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/key_uuid.txt.attr @@ -0,0 +1,7 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["value";["DataType";"String"]] + ]]; + } +} diff --git a/yt/yql/tests/sql/suites/key_filter/lambda_with_null_filter.cfg b/yt/yql/tests/sql/suites/key_filter/lambda_with_null_filter.cfg new file mode 100644 index 0000000000..12a1e15863 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/lambda_with_null_filter.cfg @@ -0,0 +1,2 @@ +in Input optional.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/lambda_with_null_filter.sql b/yt/yql/tests/sql/suites/key_filter/lambda_with_null_filter.sql new file mode 100644 index 0000000000..af8dcc75ba --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/lambda_with_null_filter.sql @@ -0,0 +1,4 @@ +pragma DisableSimpleColumns; +select * from plato.Input as a +inner join (select * from plato.Input where key == "075") as b on a.subkey = b.subkey +where b.value != ""; diff --git a/yt/yql/tests/sql/suites/key_filter/large_ui64.txt.attr b/yt/yql/tests/sql/suites/key_filter/large_ui64.txt.attr new file mode 100644 index 0000000000..aaf781b3ae --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/large_ui64.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint64"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;]; + "SortedBy"=["key"]; + "SortedByTypes"=[["DataType";"Uint64";];]; + "SortMembers"=["key";]; +}} diff --git a/yt/yql/tests/sql/suites/key_filter/mixed_opt_bounds.cfg b/yt/yql/tests/sql/suites/key_filter/mixed_opt_bounds.cfg new file mode 100644 index 0000000000..10d1015e7c --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/mixed_opt_bounds.cfg @@ -0,0 +1,4 @@ +in Input sorted1.txt +res result.txt +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/key_filter/mixed_opt_bounds.sql b/yt/yql/tests/sql/suites/key_filter/mixed_opt_bounds.sql new file mode 100644 index 0000000000..8955ef703b --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/mixed_opt_bounds.sql @@ -0,0 +1,19 @@ +/* postgres can not */ +/* syntax version 1 */ +$makeOpt = Python::makeOpt(Callable<(String, Bool)->String?>, +@@ +def makeOpt(arg, flag): + if flag: + return arg + else: + return None +@@ +); + +select * from plato.Input +where key >= $makeOpt("030", true) and key <= "100" +; + +select * from plato.Input +where key >= $makeOpt("030", false) and key <= "100" +; diff --git a/yt/yql/tests/sql/suites/key_filter/mixed_sort.cfg b/yt/yql/tests/sql/suites/key_filter/mixed_sort.cfg new file mode 100644 index 0000000000..ecac032a92 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/mixed_sort.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input1 sorted1.txt +in Input2 sorted2.txt +in Input3 sorted3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/mixed_sort.sql b/yt/yql/tests/sql/suites/key_filter/mixed_sort.sql new file mode 100644 index 0000000000..010ace4f8e --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/mixed_sort.sql @@ -0,0 +1,5 @@ +use plato; +/* postgres can not */ +select * from concat(Input,Input1,Input2,Input3) where key="150" and subkey="1" and value>="aaa"; + +select * from concat(Input,Input1,Input2,Input3) where subkey="1" and value>="aaa"; diff --git a/yt/yql/tests/sql/suites/key_filter/multiusage.cfg b/yt/yql/tests/sql/suites/key_filter/multiusage.cfg new file mode 100644 index 0000000000..600154f15a --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/multiusage.cfg @@ -0,0 +1,3 @@ +in Input1 sorted3.txt +in Input2 sorted3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/multiusage.sql b/yt/yql/tests/sql/suites/key_filter/multiusage.sql new file mode 100644 index 0000000000..3ce037599b --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/multiusage.sql @@ -0,0 +1,31 @@ +/* postgres can not */ +/* syntax version 1 */ + +USE plato; + +$l = ( + SELECT + t.*, TableName() as tn + FROM CONCAT(Input1, Input2) as t + WHERE + key == '023' AND + subkey == "3" +); + +$r = ( + SELECT + t.*, TableName() as tn + FROM CONCAT(Input1, Input2) as t + WHERE + key == '150' AND + subkey == "3" +); + +SELECT + lhs.key as key, + rhs.value as value, + lhs.tn as l_tn, + rhs.tn as r_tn +FROM $l as lhs +JOIN $r as rhs +ON lhs.subkey == rhs.subkey diff --git a/yt/yql/tests/sql/suites/key_filter/nile_pred.cfg b/yt/yql/tests/sql/suites/key_filter/nile_pred.cfg new file mode 100644 index 0000000000..12a1e15863 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/nile_pred.cfg @@ -0,0 +1,2 @@ +in Input optional.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/nile_pred.sql b/yt/yql/tests/sql/suites/key_filter/nile_pred.sql new file mode 100644 index 0000000000..fc0dd50197 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/nile_pred.sql @@ -0,0 +1 @@ +select * from plato.Input where (key > "023") is not null and Unwrap(key > "023") order by key, subkey; diff --git a/yt/yql/tests/sql/suites/key_filter/no_bypass_merge.cfg b/yt/yql/tests/sql/suites/key_filter/no_bypass_merge.cfg new file mode 100644 index 0000000000..18d6033408 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/no_bypass_merge.cfg @@ -0,0 +1,3 @@ +in Input sorted2.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/key_filter/no_bypass_merge.sql b/yt/yql/tests/sql/suites/key_filter/no_bypass_merge.sql new file mode 100644 index 0000000000..431fbd3014 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/no_bypass_merge.sql @@ -0,0 +1,8 @@ +/* ignore runonopt plan diff - extra LogicalOptimizer-PushdownOpColumns */ +pragma yt.PruneKeyFilterLambda = 'true'; + +USE plato; + +$src = select * from Input where key == "1" || "5" || "0"; +select key, subkey from $src; +select key, value from $src where key >= "000" and key < "999" and len(value) > 0; diff --git a/yt/yql/tests/sql/suites/key_filter/num_key.txt.attr b/yt/yql/tests/sql/suites/key_filter/num_key.txt.attr new file mode 100644 index 0000000000..8e04185d86 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/num_key.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int32"]]; + ["subkey";["DataType";"Int32"]]; + ["value";["DataType";"String"]]] + ]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"Int32";];["DataType";"Int32";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/key_filter/optional.txt.attr b/yt/yql/tests/sql/suites/key_filter/optional.txt.attr new file mode 100644 index 0000000000..9ccdbd1f1d --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/optional.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["OptionalType";["DataType";"String"]]]; + ["subkey";["OptionalType";["DataType";"String"]]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1]; + "SortedBy"=["key";"subkey"]; + "SortedByTypes"=[["OptionalType"; ["DataType";"String";]];["OptionalType"; ["DataType";"String";]]]; + "SortMembers"=["key";"subkey"]; +}} diff --git a/yt/yql/tests/sql/suites/key_filter/part_key_over_dynamic.cfg b/yt/yql/tests/sql/suites/key_filter/part_key_over_dynamic.cfg new file mode 100644 index 0000000000..1908d503d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/part_key_over_dynamic.cfg @@ -0,0 +1,2 @@ +in Input dynamic.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/part_key_over_dynamic.sql b/yt/yql/tests/sql/suites/key_filter/part_key_over_dynamic.sql new file mode 100644 index 0000000000..f0b8cac448 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/part_key_over_dynamic.sql @@ -0,0 +1,3 @@ +USE plato; + +select * from (SELECT key from Input) as a where key>="030" and key<="200"; diff --git a/yt/yql/tests/sql/suites/key_filter/pushdown_keyextract_passthrough.sql b/yt/yql/tests/sql/suites/key_filter/pushdown_keyextract_passthrough.sql new file mode 100644 index 0000000000..ad6f05abaa --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/pushdown_keyextract_passthrough.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$src = select + key, + "ZZZ" || key as subkey, + value, +from Input as u +assume order by key; + +select * from $src where key < "075" or key > "075" order by key, subkey, value; + diff --git a/yt/yql/tests/sql/suites/key_filter/pushdown_keyextract_type_adjust.sql b/yt/yql/tests/sql/suites/key_filter/pushdown_keyextract_type_adjust.sql new file mode 100644 index 0000000000..5dc914851e --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/pushdown_keyextract_type_adjust.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$src = select + Just(key) as key, + "ZZZ" || subkey as subkey, + value +from Input as u +assume order by key, subkey, value; + +select * from $src where key > "023" and key < "150" order by key; + diff --git a/yt/yql/tests/sql/suites/key_filter/r1.txt.attr b/yt/yql/tests/sql/suites/key_filter/r1.txt.attr new file mode 100644 index 0000000000..f547b66c39 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/r1.txt.attr @@ -0,0 +1,12 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["v1";["DataType";"String"]]; + ["v3";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/key_filter/r2.txt.attr b/yt/yql/tests/sql/suites/key_filter/r2.txt.attr new file mode 100644 index 0000000000..84cf89978e --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/r2.txt.attr @@ -0,0 +1,13 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["v1";["DataType";"String"]]; + ["v2";["OptionalType";["DataType";"String"]]]; + ["v3";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/key_filter/range_union.cfg b/yt/yql/tests/sql/suites/key_filter/range_union.cfg new file mode 100644 index 0000000000..ceb49907c3 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/range_union.cfg @@ -0,0 +1,2 @@ +in Input num_key.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/range_union.sql b/yt/yql/tests/sql/suites/key_filter/range_union.sql new file mode 100644 index 0000000000..4e84df8e36 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/range_union.sql @@ -0,0 +1,67 @@ +/* postgres can not */ +select * from ( + select * from plato.Input where key=8 or key>=9 --[8,) + union all + select * from plato.Input where key=8 or key>=8 --[8,) + union all + select * from plato.Input where key=8 or key>8 --[8,) + union all + select * from plato.Input where key=8 or key>7 --[8,) + union all + select * from plato.Input where key=8 or key>=7 --[7,) + union all + + select * from plato.Input where key=8 or key<=7 --(,9) + union all + select * from plato.Input where key=8 or key<=8 --(,9) + union all + select * from plato.Input where key=8 or key<8 --(,9) + union all + select * from plato.Input where key=8 or key<9 --(,9) + union all + select * from plato.Input where key=8 or key<=9 --(,10) + union all + + select * from plato.Input where key>8 or key<8 --(,8),[9,) + union all + select * from plato.Input where key>8 or key<=8 --(,) + union all + select * from plato.Input where key>8 or key<9 --(,) + union all + select * from plato.Input where key>7 or key<9 --(,) + union all + select * from plato.Input where key>=7 or key<9 --(,) + union all + select * from plato.Input where key>7 or key<=9 --(,) + union all + + select * from plato.Input where (key>5 and key<7) or (key>4 and key<8) -- [5,8) + union all + select * from plato.Input where (key>5 and key<7) or (key>5 and key<8) -- [6,8) + union all + select * from plato.Input where (key>=5 and key<7) or (key>=5 and key<8) -- [5,8) + union all + select * from plato.Input where (key>5 and key<=7) or (key>4 and key<8) -- [5,8) + union all + select * from plato.Input where (key>5 and key<=7) or (key>4 and key<=7) -- [5,8) + union all + select * from plato.Input where (key>5 and key<8) or (key>4 and key<8) -- [5,8) + union all + + select * from plato.Input where (key=1 and subkey<4 and subkey>1) or (key=2 and subkey<4 and subkey>1) --[{1,2},{1,4}),[{2,2},{2,4}) + union all + select * from plato.Input where (key=1 and subkey<3 and subkey>1) or (key=2 and subkey<3 and subkey>1) --[{1,2}],[{2,2}] + union all + select * from plato.Input where (key=1 and subkey>1) or (key=2 and subkey<3) --[{1,2},{1}],[{2},{2,3}) + union all + select * from plato.Input where (key=1 and subkey<3 and subkey>1) or key=1 --[1] + union all + select * from plato.Input where (key=1 and subkey>1) or key=1 --[1] + union all + select * from plato.Input where (key=1 and subkey<4 and subkey>1) or (key>1) --[{1,2},{1,4}),[2,) + union all + select * from plato.Input where key=1 and (subkey between 2 and 3 or subkey < 2) --[{1},{1,3}] + union all + select * from plato.Input where key=1 and (subkey >= 2 or subkey < 2) --[1] +) +order by key,subkey; diff --git a/yt/yql/tests/sql/suites/key_filter/range_union_lower_excluded.sql b/yt/yql/tests/sql/suites/key_filter/range_union_lower_excluded.sql new file mode 100644 index 0000000000..550128a88e --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/range_union_lower_excluded.sql @@ -0,0 +1,2 @@ +select * from plato.Input where key > "075" or (key == "075" and subkey == "1" and value == "abc") order by key, subkey, value; + diff --git a/yt/yql/tests/sql/suites/key_filter/ranges.cfg b/yt/yql/tests/sql/suites/key_filter/ranges.cfg new file mode 100644 index 0000000000..2334ceb124 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/ranges.cfg @@ -0,0 +1,2 @@ +in Input sorted1.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/ranges.sql b/yt/yql/tests/sql/suites/key_filter/ranges.sql new file mode 100644 index 0000000000..cf4ed498a6 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/ranges.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +select * from ( + select * from plato.Input where key<="037" and key>="037" + union all + select * from plato.Input where key>="037" and key<="037" + union all + select * from plato.Input where key between "037" and "037" +) +order by key,subkey; diff --git a/yt/yql/tests/sql/suites/key_filter/sorted1.txt.attr b/yt/yql/tests/sql/suites/key_filter/sorted1.txt.attr new file mode 100644 index 0000000000..391c1a05f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/sorted1.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;1;]; + "SortedBy"=["key";"subkey";"value";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";"value";]; +}} diff --git a/yt/yql/tests/sql/suites/key_filter/sorted2.txt.attr b/yt/yql/tests/sql/suites/key_filter/sorted2.txt.attr new file mode 100644 index 0000000000..be6e381cb4 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/sorted2.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;]; + "SortedBy"=["key";]; + "SortedByTypes"=[["DataType";"String";];]; + "SortMembers"=["key";]; +}} diff --git a/yt/yql/tests/sql/suites/key_filter/sorted3.txt.attr b/yt/yql/tests/sql/suites/key_filter/sorted3.txt.attr new file mode 100644 index 0000000000..bcd06590fb --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/sorted3.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["subkey";"value";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["subkey";"value";]; +}} diff --git a/yt/yql/tests/sql/suites/key_filter/sorted4.txt.attr b/yt/yql/tests/sql/suites/key_filter/sorted4.txt.attr new file mode 100644 index 0000000000..391c1a05f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/sorted4.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;1;]; + "SortedBy"=["key";"subkey";"value";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";"value";]; +}} diff --git a/yt/yql/tests/sql/suites/key_filter/split_input_with_key_filter1.cfg b/yt/yql/tests/sql/suites/key_filter/split_input_with_key_filter1.cfg new file mode 100644 index 0000000000..3b40f69cee --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/split_input_with_key_filter1.cfg @@ -0,0 +1,3 @@ +in Input sorted1.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/key_filter/split_input_with_key_filter1.sql b/yt/yql/tests/sql/suites/key_filter/split_input_with_key_filter1.sql new file mode 100644 index 0000000000..94f7647dcd --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/split_input_with_key_filter1.sql @@ -0,0 +1,10 @@ +USE plato; + +pragma yt.MaxInputTables="2"; +SELECT + key as key, + "" as subkey, + "value:" || value as value +FROM concat(Input, Input, Input, Input) +WHERE key = "07" || "5" +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/split_input_with_key_filter2.cfg b/yt/yql/tests/sql/suites/key_filter/split_input_with_key_filter2.cfg new file mode 100644 index 0000000000..3b40f69cee --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/split_input_with_key_filter2.cfg @@ -0,0 +1,3 @@ +in Input sorted1.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/key_filter/split_input_with_key_filter2.sql b/yt/yql/tests/sql/suites/key_filter/split_input_with_key_filter2.sql new file mode 100644 index 0000000000..b2662fbedf --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/split_input_with_key_filter2.sql @@ -0,0 +1,10 @@ +USE plato; + +pragma yt.MaxInputTables="2"; +SELECT + key as key, + "" as subkey, + "value:" || value as value +FROM concat(Input, Input, Input) +WHERE key = "07" || "5" +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/string_with.sql b/yt/yql/tests/sql/suites/key_filter/string_with.sql new file mode 100644 index 0000000000..abd53c9618 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/string_with.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +SELECT * FROM plato.Input +WHERE StartsWith(key, "0") AND EndsWith(key, "5"); + diff --git a/yt/yql/tests/sql/suites/key_filter/string_with_ff.sql b/yt/yql/tests/sql/suites/key_filter/string_with_ff.sql new file mode 100644 index 0000000000..07d85b43c9 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/string_with_ff.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +insert into @src +select "\xff\xff" || key as key from Input order by key; + +commit; + +select count(*) from ( + select * from @src where StartsWith(key, "\xff\xff") and EndsWith(key, "5") +); + diff --git a/yt/yql/tests/sql/suites/key_filter/string_with_legacy.cfg b/yt/yql/tests/sql/suites/key_filter/string_with_legacy.cfg new file mode 100644 index 0000000000..965c7fe965 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/string_with_legacy.cfg @@ -0,0 +1,2 @@ +in Input sorted4.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/string_with_legacy.sql b/yt/yql/tests/sql/suites/key_filter/string_with_legacy.sql new file mode 100644 index 0000000000..415a38d93d --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/string_with_legacy.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma yt.UseNewPredicateExtraction="false"; + +SELECT key FROM plato.Input WHERE StartsWith(key, String("150")) ORDER BY key; + +SELECT key FROM plato.Input WHERE StartsWith(key, Utf8("15")) OR StartsWith(key, Utf8("150")) ORDER BY key; + +SELECT key FROM plato.Input WHERE StartsWith(key, Utf8("тест")) OR StartsWith(key, String("тест\xff")) ORDER BY key; + +SELECT key FROM plato.Input WHERE StartsWith(key, String("\xff")) ORDER BY key; diff --git a/yt/yql/tests/sql/suites/key_filter/tzdate.cfg b/yt/yql/tests/sql/suites/key_filter/tzdate.cfg new file mode 100644 index 0000000000..2c7908c6e7 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/tzdate.cfg @@ -0,0 +1,2 @@ +in Input key_tzdate.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/tzdate.sql b/yt/yql/tests/sql/suites/key_filter/tzdate.sql new file mode 100644 index 0000000000..c5fe5ab841 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/tzdate.sql @@ -0,0 +1,35 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$asIs = Python::asIs(Callable<(String)->String>, +@@ +def asIs(arg): + return arg +@@ +); + +insert into @tzdate +select cast(value as TzDate) as value from Input order by value; + +commit; + +select * from ( + select * from @tzdate where value < TzDate("1999-01-01,Europe/Moscow") and value > TzDate("2011-01-01,Europe/Moscow") -- empty + union all + select * from @tzdate where value > TzDate("2105-12-30,posixrules") -- empty + union all + select * from @tzdate where value < TzDate("1970-01-01,GMT") -- empty + union all + select * from @tzdate where value = TzDate("2018-02-01,GMT") + union all + select * from @tzdate where value > TzDate("1999-01-01,GMT") or value >= TzDate("1999-01-01,Europe/Moscow") + union all + select * from @tzdate where value >= TzDate("2018-02-01,Europe/Moscow") and value <= TzDate("2105-12-30,America/Los_Angeles") -- Should include 2018-02-01,GMT and 2105-12-31,posixrules +) +order by value; + +-- Don't union all to calc nodes separatelly +select * from @tzdate where value = cast("1999-01-01,Europe/Moscow" as TzDate); -- Safe key filter calc +select * from @tzdate where value = cast($asIs("2105-12-30,America/Los_Angeles") as TzDate); -- Unsafe key filter calc +select * from @tzdate where value = cast($asIs("bad") as TzDate); -- Unsafe key filter calc diff --git a/yt/yql/tests/sql/suites/key_filter/utf8.txt.attr b/yt/yql/tests/sql/suites/key_filter/utf8.txt.attr new file mode 100644 index 0000000000..ef4d43d3a3 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/utf8.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Utf8"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;1;]; + "SortedBy"=["key";"subkey";"value";]; + "SortedByTypes"=[["DataType";"Utf8";];["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";"value";]; +}} diff --git a/yt/yql/tests/sql/suites/key_filter/utf8_with_legacy.cfg b/yt/yql/tests/sql/suites/key_filter/utf8_with_legacy.cfg new file mode 100644 index 0000000000..71de3c4553 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/utf8_with_legacy.cfg @@ -0,0 +1,2 @@ +in Input utf8.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/utf8_with_legacy.sql b/yt/yql/tests/sql/suites/key_filter/utf8_with_legacy.sql new file mode 100644 index 0000000000..37b892db0d --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/utf8_with_legacy.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma yt.UseNewPredicateExtraction="false"; + +SELECT key FROM plato.Input WHERE StartsWith(key, String("150")) ORDER BY key; + +SELECT key FROM plato.Input WHERE StartsWith(key, String("15")) OR StartsWith(key, String("150")) ORDER BY key; + +SELECT key FROM plato.Input WHERE StartsWith(key, String("\xf5")) ORDER BY key; + +SELECT key FROM plato.Input WHERE StartsWith(key, Utf8("тест\xf4\x8f\xbf\xbf")) ORDER BY key; + +SELECT key FROM plato.Input WHERE StartsWith(key, Utf8("тест")) OR StartsWith(key, Utf8("тест\xf4\x8f\xbf\xbf")) ORDER BY key; + +SELECT key FROM plato.Input WHERE StartsWith(key, Utf8("\xf4\x8f\xbf\xbf")) ORDER BY key; diff --git a/yt/yql/tests/sql/suites/key_filter/uuid.cfg b/yt/yql/tests/sql/suites/key_filter/uuid.cfg new file mode 100644 index 0000000000..8e98e96be2 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/uuid.cfg @@ -0,0 +1,2 @@ +in Input key_uuid.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/uuid.sql b/yt/yql/tests/sql/suites/key_filter/uuid.sql new file mode 100644 index 0000000000..6a9a392561 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/uuid.sql @@ -0,0 +1,41 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$asIs = Python::asIs(Callable<(String)->String>, +@@ +def asIs(arg): + return arg +@@ +); + +insert into @uuid +select cast(value as Uuid) as value from Input order by value; + +commit; + +select * from ( + select * from @uuid where value < Uuid("00000000-0000-0000-0000-100000000000") and value > Uuid("00000000-0000-0000-0000-400000000000") -- empty + union all + select * from @uuid where value > Uuid("FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF") -- empty + union all + select * from @uuid where value < Uuid("00000000-0000-0000-0000-000000000000") -- empty + union all + select * from @uuid where value > Uuid("00000000-0000-0000-0000-100000000000") or value >= Uuid("00000000-0000-0000-0000-200000000000") --(00000000-0000-0000-0000-100000000000,) + union all + select * from @uuid where value >= Uuid("00000000-0000-0000-0000-100000000000") or value > Uuid("00000000-0000-0000-0000-200000000000") --[00000000-0000-0000-0000-100000000000,) + union all + select * from @uuid where value = Uuid("00000000-0000-0000-0000-100000000000") or value < Uuid("00000000-0000-0000-0000-200000000000") --(,00000000-0000-0000-0000-200000000000) + union all + select * from @uuid where value < Uuid("00000000-0000-0000-0000-100000000000") or value <= Uuid("00000000-0000-0000-0000-200000000000") --(,00000000-0000-0000-0000-200000000000] + union all + select * from @uuid where value < Uuid("00000000-0000-0000-0000-100000000000") or value <= Uuid("00000000-0000-0000-0000-200000000000") --(,00000000-0000-0000-0000-200000000000] + union all + select * from @uuid where value > Uuid("00000000-0000-0000-0000-100000000000") and value <= Uuid("00000000-0000-0000-0000-400000000000") --(00000000-0000-0000-0000-100000000000,00000000-0000-0000-0000-400000000000] +) +order by value; + +-- Don't union all to calc nodes separatelly +select * from @uuid where value = cast("00000000-0000-0000-0000-100000000000" as Uuid); -- Safe key filter calc +select * from @uuid where value = cast($asIs("00000000-0000-0000-0000-200000000000") as Uuid); -- Unsafe key filter calc +select * from @uuid where value = cast($asIs("bad") as Uuid); -- Unsafe key filter calc diff --git a/yt/yql/tests/sql/suites/key_filter/yql-14157.cfg b/yt/yql/tests/sql/suites/key_filter/yql-14157.cfg new file mode 100644 index 0000000000..f2977cd84e --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/yql-14157.cfg @@ -0,0 +1,3 @@ +in Input1 r1.txt +in Input2 r2.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/yql-14157.sql b/yt/yql/tests/sql/suites/key_filter/yql-14157.sql new file mode 100644 index 0000000000..ec132b55ba --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/yql-14157.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +SELECT v1, v2 +FROM RANGE("", "Input1", "Input2") +WHERE key == "037"; + +SELECT v1, v2 +FROM RANGE("", "Input1", "Input2") +WHERE key == "150" and subkey = "1"; + diff --git a/yt/yql/tests/sql/suites/key_filter/yql-8117-table_key_filter.cfg b/yt/yql/tests/sql/suites/key_filter/yql-8117-table_key_filter.cfg new file mode 100644 index 0000000000..8dbea3de64 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/yql-8117-table_key_filter.cfg @@ -0,0 +1,4 @@ +in InputA sorted2.txt +in InputB sorted2.txt +in InputC sorted2.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/yql-8117-table_key_filter.sql b/yt/yql/tests/sql/suites/key_filter/yql-8117-table_key_filter.sql new file mode 100644 index 0000000000..5bb0744c2f --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/yql-8117-table_key_filter.sql @@ -0,0 +1,16 @@ +USE plato; + +SELECT * FROM ( + SELECT + value + FROM RANGE("", "InputA", "InputC") + WHERE + (key == "023" OR key == "037") AND value != "" + UNION ALL + SELECT + value + FROM RANGE("", "InputA", "InputC") + WHERE + (key == "075" OR key == "150") AND value != "" +) +ORDER BY value;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/yql-8663-dedup_ranges.cfg b/yt/yql/tests/sql/suites/key_filter/yql-8663-dedup_ranges.cfg new file mode 100644 index 0000000000..2334ceb124 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/yql-8663-dedup_ranges.cfg @@ -0,0 +1,2 @@ +in Input sorted1.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/key_filter/yql-8663-dedup_ranges.sql b/yt/yql/tests/sql/suites/key_filter/yql-8663-dedup_ranges.sql new file mode 100644 index 0000000000..c6a99abbaf --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/yql-8663-dedup_ranges.sql @@ -0,0 +1,4 @@ +SELECT * +FROM plato.Input +WHERE key ='023' + AND (value = "aaa" OR subkey = "3")
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/key_filter/yql_5895_or.sql b/yt/yql/tests/sql/suites/key_filter/yql_5895_or.sql new file mode 100644 index 0000000000..57116d5d35 --- /dev/null +++ b/yt/yql/tests/sql/suites/key_filter/yql_5895_or.sql @@ -0,0 +1,4 @@ +SELECT + * +FROM plato.Input +WHERE key > "023" or key > "075" or key < "075"; diff --git a/yt/yql/tests/sql/suites/lambda/default.cfg b/yt/yql/tests/sql/suites/lambda/default.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/lambda/default.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/lambda/lambda_simple.sql b/yt/yql/tests/sql/suites/lambda/lambda_simple.sql new file mode 100644 index 0000000000..93f7ea3e96 --- /dev/null +++ b/yt/yql/tests/sql/suites/lambda/lambda_simple.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +USE plato; +PRAGMA DisableSimpleColumns; + +$shiftSteps=1; +$linear = ($x, $z)->{ + $v = 10 * $z + $x; + $shift = ($item) -> {return $item << $shiftSteps}; + return $shift($v) +}; + +--INSERT INTO Output +SELECT t.*, $linear(cast(key as uint64), cast(subkey as uint64)) FROM Input as t; diff --git a/yt/yql/tests/sql/suites/lambda/lambda_udf.cfg b/yt/yql/tests/sql/suites/lambda/lambda_udf.cfg new file mode 100644 index 0000000000..b0a6e1e6b6 --- /dev/null +++ b/yt/yql/tests/sql/suites/lambda/lambda_udf.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf math_udf diff --git a/yt/yql/tests/sql/suites/lambda/lambda_udf.sql b/yt/yql/tests/sql/suites/lambda/lambda_udf.sql new file mode 100644 index 0000000000..aff4e45606 --- /dev/null +++ b/yt/yql/tests/sql/suites/lambda/lambda_udf.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +$shiftSteps = 1; +$linear = ($x, $z) -> { + $v = 10 * $z + $x; + $shift = ($item) -> { + return $item << $shiftSteps + }; + $res = Math::Floor(Math::Pi() * $shift($v)); + return $res +}; + +--INSERT INTO Output +SELECT t.*, $linear(cast(key as uint64), cast(subkey as uint64)) as linear FROM Input as t; diff --git a/yt/yql/tests/sql/suites/lambda/lambda_use_labmda_as_arg.sql b/yt/yql/tests/sql/suites/lambda/lambda_use_labmda_as_arg.sql new file mode 100644 index 0000000000..dafd67ef4f --- /dev/null +++ b/yt/yql/tests/sql/suites/lambda/lambda_use_labmda_as_arg.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +USE plato; +PRAGMA DisableSimpleColumns; + +$shiftSteps=($item) -> { return Cast($item % 4 as Uint8)??0 }; + +$linear = ($x, $z, $func) -> { + $v = 10 * $z + $x; + $shift = ($item, $sk) -> {return $item << $func($sk)}; + return $shift($v, $z) +}; + +--INSERT INTO Output +SELECT t.*, $linear(cast(key as uint64), cast(subkey as uint64), $shiftSteps) FROM Input as t; diff --git a/yt/yql/tests/sql/suites/lambda/lambda_with_tie.sql b/yt/yql/tests/sql/suites/lambda/lambda_with_tie.sql new file mode 100644 index 0000000000..83c9aa7f46 --- /dev/null +++ b/yt/yql/tests/sql/suites/lambda/lambda_with_tie.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +USE plato; + +$func = ($x, $y)->{ + $y, $x = AsTuple($x, $y); + return $x || "_" || $y; +}; + +--INSERT INTO Output +SELECT $func(key, subkey) as func FROM Input; diff --git a/yt/yql/tests/sql/suites/library/p_package_cluster.json b/yt/yql/tests/sql/suites/library/p_package_cluster.json new file mode 100644 index 0000000000..8824674974 --- /dev/null +++ b/yt/yql/tests/sql/suites/library/p_package_cluster.json @@ -0,0 +1 @@ +"plato" diff --git a/yt/yql/tests/sql/suites/library/package.cfg b/yt/yql/tests/sql/suites/library/package.cfg new file mode 100644 index 0000000000..2ec4243a95 --- /dev/null +++ b/yt/yql/tests/sql/suites/library/package.cfg @@ -0,0 +1,5 @@ +providers yt +yt_file yt://plato/package/total.sql package_total.sql.txt +yt_file yt://plato/package/detail/foo.sql package_foo.sql.txt +yt_file yt://plato/package/detail/bar.sql package_bar.sql.txt +param $cluster p_package_cluster.json diff --git a/yt/yql/tests/sql/suites/library/package.sql b/yt/yql/tests/sql/suites/library/package.sql new file mode 100644 index 0000000000..e649b298a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/library/package.sql @@ -0,0 +1,9 @@ +/* ytfile can not */ + +declare $cluster as String; + +pragma package("project.package", "yt://{$cluster}/package"); + +import pkg.project.package.total symbols $do_total; + +select $do_total(1); diff --git a/yt/yql/tests/sql/suites/library/package_override.cfg b/yt/yql/tests/sql/suites/library/package_override.cfg new file mode 100644 index 0000000000..5cc9b05eda --- /dev/null +++ b/yt/yql/tests/sql/suites/library/package_override.cfg @@ -0,0 +1,5 @@ +providers yt +file pkg/project/package/detail/bar.sql package_bar_override.sql.txt +yt_file yt://plato/package/total.sql package_total.sql.txt +yt_file yt://plato/package/detail/foo.sql package_foo.sql.txt +yt_file yt://plato/package/detail/bar.sql package_bar.sql.txt diff --git a/yt/yql/tests/sql/suites/library/package_override.sql b/yt/yql/tests/sql/suites/library/package_override.sql new file mode 100644 index 0000000000..bd0b2c7625 --- /dev/null +++ b/yt/yql/tests/sql/suites/library/package_override.sql @@ -0,0 +1,8 @@ +/* ytfile can not */ + +pragma package("project.package", "yt://plato/package"); +pragma override_library("project/package/detail/bar.sql"); + +import pkg.project.package.total symbols $do_total; + +select $do_total(1); diff --git a/yt/yql/tests/sql/suites/like/default.cfg b/yt/yql/tests/sql/suites/like/default.cfg new file mode 100644 index 0000000000..e300a83153 --- /dev/null +++ b/yt/yql/tests/sql/suites/like/default.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf re2_udf diff --git a/yt/yql/tests/sql/suites/like/ilike_clause.sql b/yt/yql/tests/sql/suites/like/ilike_clause.sql new file mode 100644 index 0000000000..42bb62c45e --- /dev/null +++ b/yt/yql/tests/sql/suites/like/ilike_clause.sql @@ -0,0 +1,2 @@ +select key, subkey, value from plato.Input +where value ilike "q_Z" or value ilike "%Q"; diff --git a/yt/yql/tests/sql/suites/like/like_clause.sql b/yt/yql/tests/sql/suites/like/like_clause.sql new file mode 100644 index 0000000000..4e190d1a05 --- /dev/null +++ b/yt/yql/tests/sql/suites/like/like_clause.sql @@ -0,0 +1,2 @@ +select key, subkey, value from plato.Input +where value like "q_z" or value like "%q";
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/like/like_clause_escape.sql b/yt/yql/tests/sql/suites/like/like_clause_escape.sql new file mode 100644 index 0000000000..9f7f67fb36 --- /dev/null +++ b/yt/yql/tests/sql/suites/like/like_clause_escape.sql @@ -0,0 +1,5 @@ +select key, subkey, value from plato.Input +where +value like "!%z" escape "!" or +value || "_" like "_?_" escape "?" or +value || "!" like "ddd!!" escape "!";
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/like/like_clause_no_pattern.sql b/yt/yql/tests/sql/suites/like/like_clause_no_pattern.sql new file mode 100644 index 0000000000..59e13dafdf --- /dev/null +++ b/yt/yql/tests/sql/suites/like/like_clause_no_pattern.sql @@ -0,0 +1,9 @@ +select + value, + case when + value like "abc" + then "true" + else "false" + end as is_abc +from plato.Input +order by is_abc desc, value asc;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/like/regexp_clause.cfg b/yt/yql/tests/sql/suites/like/regexp_clause.cfg new file mode 100644 index 0000000000..93eff5b6bc --- /dev/null +++ b/yt/yql/tests/sql/suites/like/regexp_clause.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +udf re2_udf +udf pire_udf diff --git a/yt/yql/tests/sql/suites/like/regexp_clause.sql b/yt/yql/tests/sql/suites/like/regexp_clause.sql new file mode 100644 index 0000000000..648029051d --- /dev/null +++ b/yt/yql/tests/sql/suites/like/regexp_clause.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +/* syntax version 1 */ +select key, subkey, value from plato.Input +where value regexp "^a"; diff --git a/yt/yql/tests/sql/suites/limit/default.cfg b/yt/yql/tests/sql/suites/limit/default.cfg new file mode 100644 index 0000000000..09cf05d98c --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/default.cfg @@ -0,0 +1,2 @@ +in Input input.txt +res result.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/limit/dynamic.txt.attr b/yt/yql/tests/sql/suites/limit/dynamic.txt.attr new file mode 100644 index 0000000000..9e3c33c4cb --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/dynamic.txt.attr @@ -0,0 +1,33 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key"; ["DataType"; "String"]]; + ["subkey"; ["DataType"; "String"]]; + ["value"; ["DataType"; "String"]]; + ]]; + "SortMembers"=["key"; "subkey"]; + "SortedBy"=["key"; "subkey"]; + "SortDirections"=[1; 1]; + "SortedByTypes"=[["DataType";"String"]; ["DataType";"String"]] + }; + "_yql_dynamic"=%true; + "schema"=< + "strict" = %true; + "unique_keys" = %true + >[ + { + "name" = "key"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "value"; + "type" = "string"; + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/limit/dynamic_limit.cfg b/yt/yql/tests/sql/suites/limit/dynamic_limit.cfg new file mode 100644 index 0000000000..eb1992232a --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/dynamic_limit.cfg @@ -0,0 +1,4 @@ +in Input input.txt +res result.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/limit/dynamic_limit.sql b/yt/yql/tests/sql/suites/limit/dynamic_limit.sql new file mode 100644 index 0000000000..b4eac0329a --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/dynamic_limit.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +use plato; + +$avg = (SELECT AVG(Length(key)) FROM Input); + +SELECT key FROM Input LIMIT Cast($avg as Uint64) ?? 0; diff --git a/yt/yql/tests/sql/suites/limit/dynamic_sort_limit.cfg b/yt/yql/tests/sql/suites/limit/dynamic_sort_limit.cfg new file mode 100644 index 0000000000..1bfc4d45f1 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/dynamic_sort_limit.cfg @@ -0,0 +1,4 @@ +in Input input.txt +res result.txt +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/limit/dynamic_sort_limit.sql b/yt/yql/tests/sql/suites/limit/dynamic_sort_limit.sql new file mode 100644 index 0000000000..96e033df95 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/dynamic_sort_limit.sql @@ -0,0 +1,19 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +$script = @@ +def f(s): + return int(s) +@@; + +$callable = Python::f(Callable<(String)->Uint64?>,$script); + +$i = unwrap($callable("2")); + +SELECT + key, + SOME(value) as value +FROM Input +GROUP BY key +ORDER BY key LIMIT $i; diff --git a/yt/yql/tests/sql/suites/limit/empty_input_after_limit.sql b/yt/yql/tests/sql/suites/limit/empty_input_after_limit.sql new file mode 100644 index 0000000000..3a15ab796f --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/empty_input_after_limit.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +$in = ( + select * from plato.Input where key = "150" + union all + select * from plato.Input where key = "075" +); + +select * from $in order by key limit 100 offset 90; diff --git a/yt/yql/tests/sql/suites/limit/empty_read_after_limit.sql b/yt/yql/tests/sql/suites/limit/empty_read_after_limit.sql new file mode 100644 index 0000000000..bc0dfad64e --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/empty_read_after_limit.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +pragma direct_read; +select * from plato.Input order by key limit 100 offset 90; diff --git a/yt/yql/tests/sql/suites/limit/empty_sort_after_limit.sql b/yt/yql/tests/sql/suites/limit/empty_sort_after_limit.sql new file mode 100644 index 0000000000..11ed40c1ab --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/empty_sort_after_limit.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input order by key limit 100 offset 90; diff --git a/yt/yql/tests/sql/suites/limit/empty_sort_calc_after_limit.sql b/yt/yql/tests/sql/suites/limit/empty_sort_calc_after_limit.sql new file mode 100644 index 0000000000..08033a5fef --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/empty_sort_calc_after_limit.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input order by key || subkey limit 100 offset 90; diff --git a/yt/yql/tests/sql/suites/limit/empty_sort_desc_after_limit.sql b/yt/yql/tests/sql/suites/limit/empty_sort_desc_after_limit.sql new file mode 100644 index 0000000000..8bf56e6f2d --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/empty_sort_desc_after_limit.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input order by key desc limit 100 offset 90; diff --git a/yt/yql/tests/sql/suites/limit/insert_with_limit-dynamic.cfg b/yt/yql/tests/sql/suites/limit/insert_with_limit-dynamic.cfg new file mode 100644 index 0000000000..b4ffc75e3c --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/insert_with_limit-dynamic.cfg @@ -0,0 +1,2 @@ +in Input dynamic.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/limit/insert_with_limit.cfg b/yt/yql/tests/sql/suites/limit/insert_with_limit.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/insert_with_limit.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/limit/insert_with_limit.sql b/yt/yql/tests/sql/suites/limit/insert_with_limit.sql new file mode 100644 index 0000000000..f51506c8af --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/insert_with_limit.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +insert into plato.Output with truncate +select * from plato.Input limit 2; diff --git a/yt/yql/tests/sql/suites/limit/limit-dynamic.cfg b/yt/yql/tests/sql/suites/limit/limit-dynamic.cfg new file mode 100644 index 0000000000..80e8546f07 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/limit-dynamic.cfg @@ -0,0 +1 @@ +in Input dynamic.txt diff --git a/yt/yql/tests/sql/suites/limit/limit.cfg b/yt/yql/tests/sql/suites/limit/limit.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/limit.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/limit/limit.sql b/yt/yql/tests/sql/suites/limit/limit.sql new file mode 100644 index 0000000000..8b2d036f97 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/limit.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input limit 1000;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/limit/limit_offset.sql b/yt/yql/tests/sql/suites/limit/limit_offset.sql new file mode 100644 index 0000000000..99ac57e551 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/limit_offset.sql @@ -0,0 +1 @@ +select value, subkey, key from (select * from plato.Input) as x order by key, subkey limit 1 offset 1; diff --git a/yt/yql/tests/sql/suites/limit/limit_over_sort_desc_in_subquery.cfg b/yt/yql/tests/sql/suites/limit/limit_over_sort_desc_in_subquery.cfg new file mode 100644 index 0000000000..c85115a8e4 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/limit_over_sort_desc_in_subquery.cfg @@ -0,0 +1,2 @@ +in Input sorted_desc.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/limit/limit_over_sort_desc_in_subquery.sql b/yt/yql/tests/sql/suites/limit/limit_over_sort_desc_in_subquery.sql new file mode 100644 index 0000000000..9567209c22 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/limit_over_sort_desc_in_subquery.sql @@ -0,0 +1,19 @@ +/* postgres can not */ +/* hybridfile can not YQL-17743 */ +/* syntax version 1 */ +USE plato; + +$in = ( + select + * + from Input + where subkey > '1' + order by + key desc + limit 15000 +); + +select + * +from $in +where value like "a%"; diff --git a/yt/yql/tests/sql/suites/limit/limit_skip_take.sql b/yt/yql/tests/sql/suites/limit/limit_skip_take.sql new file mode 100644 index 0000000000..d6c63e4d82 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/limit_skip_take.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select value, subkey, key from (select * from plato.Input) order by key, subkey limit 1,2; diff --git a/yt/yql/tests/sql/suites/limit/many_top_sorts.sql b/yt/yql/tests/sql/suites/limit/many_top_sorts.sql new file mode 100644 index 0000000000..ee81465874 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/many_top_sorts.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +/* ignore runonopt ast diff */ +/* ignore runonopt plan diff */ +use plato; + +$i = (select * from Input where key > "100"); + +select * from $i order by key limit 1; + +select * from $i order by subkey limit 2;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/limit/sort_calc_limit.cfg b/yt/yql/tests/sql/suites/limit/sort_calc_limit.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/sort_calc_limit.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/limit/sort_calc_limit.sql b/yt/yql/tests/sql/suites/limit/sort_calc_limit.sql new file mode 100644 index 0000000000..62bb39d249 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/sort_calc_limit.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +USE plato; + +insert into Output with truncate +select * +from Input +order by key || subkey +limit 2;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/limit/sorted_desc.txt.attr b/yt/yql/tests/sql/suites/limit/sorted_desc.txt.attr new file mode 100644 index 0000000000..5a6ca5761e --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/sorted_desc.txt.attr @@ -0,0 +1,47 @@ +{ + "_yql_row_spec" = { + "SortMembers" = [ + "key" + ]; + "SortDirections" = [ + 0 + ]; + "UniqueKeys" = %false; + "SortedByTypes" = [ + [ + "DataType"; + "String" + ] + ]; + "StrictSchema" = %true; + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ]; + "SortedBy" = [ + "_yql_column_0" + ] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/limit/yql-7900_empty_sorted_without_keys.sql b/yt/yql/tests/sql/suites/limit/yql-7900_empty_sorted_without_keys.sql new file mode 100644 index 0000000000..d61f7e9183 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/yql-7900_empty_sorted_without_keys.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +USE plato; + +$cnt = (select count(*) from Input); +$offset = ($cnt + 10) ?? 0; + +$data_limited = (select * from Input order by key || value limit 1 offset $offset); + +$result_top = (SELECT subkey, Length(key) as l, key FROM $data_limited); + +SELECT * FROM $result_top; diff --git a/yt/yql/tests/sql/suites/limit/yql-8046_empty_sorted_desc.cfg b/yt/yql/tests/sql/suites/limit/yql-8046_empty_sorted_desc.cfg new file mode 100644 index 0000000000..2e3eaf9682 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/yql-8046_empty_sorted_desc.cfg @@ -0,0 +1,4 @@ +in Input input.txt +out Output output.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/limit/yql-8046_empty_sorted_desc.sql b/yt/yql/tests/sql/suites/limit/yql-8046_empty_sorted_desc.sql new file mode 100644 index 0000000000..6647df9e90 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/yql-8046_empty_sorted_desc.sql @@ -0,0 +1,45 @@ +/* postgres can not */ +USE plato; + +$visitors = ( +SELECT + key, + subkey, + value +FROM Input +WHERE subkey != "" +); + +$over_threshold = ( +SELECT + key, + subkey, + value +FROM $visitors +WHERE key > "070" +); + +$clean = (SELECT COUNT(*) FROM $over_threshold); + +$tail = ( +SELECT + key, + subkey, + value +FROM $visitors +ORDER BY key DESC +LIMIT IF($clean ?? 0 < 2, 2 - $clean ?? 0, 0) +); + +INSERT INTO Output WITH TRUNCATE +SELECT + key, + subkey, + value +FROM $over_threshold +UNION ALL +SELECT + key, + subkey, + value +FROM $tail; diff --git a/yt/yql/tests/sql/suites/limit/yql-8611_calc_peephole.cfg b/yt/yql/tests/sql/suites/limit/yql-8611_calc_peephole.cfg new file mode 100644 index 0000000000..b3080c2484 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/yql-8611_calc_peephole.cfg @@ -0,0 +1,6 @@ +in Input input.txt +out Output0 output0.txt +out Output1 output1.txt +out Output2 output2.txt +out Output3 output3.txt +udf libyson_udf diff --git a/yt/yql/tests/sql/suites/limit/yql-8611_calc_peephole.sql b/yt/yql/tests/sql/suites/limit/yql-8611_calc_peephole.sql new file mode 100644 index 0000000000..aa1546401e --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/yql-8611_calc_peephole.sql @@ -0,0 +1,31 @@ +USE plato; + +$tableList = AsList( + AsStruct(Yson('{"row_count"=9}') as Attributes, "Input1" as Path, "table" as Type), + AsStruct(Yson('{"row_count"=19}') as Attributes, "Input2" as Path, "table" as Type) +); + +-- $bucket_size = 1000000; +$buckets = ASLIST(0, 1, 2, 3); + +$row_count = ( + SELECT Yson::LookupInt64(Attributes, "row_count") + FROM AS_TABLE($tableList) + WHERE + Type = "table" +); + +$bucket_size = unwrap(CAST($row_count / ListLength($buckets) AS Uint64)); + +DEFINE ACTION $make_bucket($bucket_number) AS + $offset = unwrap(CAST($bucket_number AS UInt8)) * $bucket_size; + $dst = "Output" || $bucket_number; + + INSERT INTO $dst ( + SELECT * FROM Input + ORDER BY key + LIMIT $bucket_size OFFSET $offset); +END DEFINE; + +EVALUATE FOR $bucket_number IN $buckets + DO $make_bucket(CAST($bucket_number AS String)); diff --git a/yt/yql/tests/sql/suites/limit/yql-9617_empty_lambda.sql b/yt/yql/tests/sql/suites/limit/yql-9617_empty_lambda.sql new file mode 100644 index 0000000000..8d438c5122 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/yql-9617_empty_lambda.sql @@ -0,0 +1,7 @@ +use plato; + +select key, some(value) as value from Input +where key > "999" +group by key +order by key +limit 10;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/limit/zero_limit.sql b/yt/yql/tests/sql/suites/limit/zero_limit.sql new file mode 100644 index 0000000000..6532fb3737 --- /dev/null +++ b/yt/yql/tests/sql/suites/limit/zero_limit.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +use plato; + +$x = (select * from Input order by value limit 10); + +select * from $x where key > "000" limit coalesce(cast(0.1 * 0 as Uint64), 0); diff --git a/yt/yql/tests/sql/suites/lineage/default.cfg b/yt/yql/tests/sql/suites/lineage/default.cfg new file mode 100644 index 0000000000..d818ef972a --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/default.cfg @@ -0,0 +1,4 @@ +in Input input.txt +out Output output.txt +providers yt +canonize_lineage
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/lineage/error_type.cfg b/yt/yql/tests/sql/suites/lineage/error_type.cfg new file mode 100644 index 0000000000..71212661a3 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/error_type.cfg @@ -0,0 +1,5 @@ +in Input input.txt +out Output output.txt +providers yt +xfail + diff --git a/yt/yql/tests/sql/suites/lineage/error_type.sql b/yt/yql/tests/sql/suites/lineage/error_type.sql new file mode 100644 index 0000000000..94fea56f9d --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/error_type.sql @@ -0,0 +1,14 @@ +/* custom error:Uncompatible member foo types: Int32 and String*/ +USE plato; + +INSERT INTO Output +SELECT + 1 as foo +FROM Input + +UNION ALL + +SELECT + 'x' as foo +FROM Input + diff --git a/yt/yql/tests/sql/suites/lineage/flatten_by.cfg b/yt/yql/tests/sql/suites/lineage/flatten_by.cfg new file mode 100644 index 0000000000..ed48d1a300 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/flatten_by.cfg @@ -0,0 +1 @@ +in Input input_list_2.txt diff --git a/yt/yql/tests/sql/suites/lineage/flatten_by.sql b/yt/yql/tests/sql/suites/lineage/flatten_by.sql new file mode 100644 index 0000000000..16bc737177 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/flatten_by.sql @@ -0,0 +1,21 @@ +use plato; + +$subquery1 = +SELECT +key, subkey, z +FROM Input +FLATTEN LIST BY value as z; + +$subquery2 = +SELECT +key, subkey, value as z, value2 +FROM Input +FLATTEN LIST BY (value, value2); + +INSERT INTO @tmp1 WITH TRUNCATE +SELECT * +FROM $subquery1; + +INSERT INTO @tmp2 WITH TRUNCATE +SELECT * +FROM $subquery2;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/lineage/flatten_list_nested_lambda.cfg b/yt/yql/tests/sql/suites/lineage/flatten_list_nested_lambda.cfg new file mode 100644 index 0000000000..0670741477 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/flatten_list_nested_lambda.cfg @@ -0,0 +1,4 @@ +in Input input_list.txt +out Output output.txt +providers yt +canonize_lineage diff --git a/yt/yql/tests/sql/suites/lineage/flatten_list_nested_lambda.sql b/yt/yql/tests/sql/suites/lineage/flatten_list_nested_lambda.sql new file mode 100644 index 0000000000..f534644d0d --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/flatten_list_nested_lambda.sql @@ -0,0 +1,19 @@ +USE plato; + +$sub = ( + select key + from Input + flatten list by + key +); + +insert into Output + select + value, + ListFilter( + [value], + ($x) -> ($x in $sub) + ) as f + from Input + order by value +
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/lineage/flatten_where.sql b/yt/yql/tests/sql/suites/lineage/flatten_where.sql new file mode 100644 index 0000000000..8f2d499356 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/flatten_where.sql @@ -0,0 +1,11 @@ +USE plato; + +INSERT INTO Output +SELECT * FROM ( + SELECT + [key, key] as key2, + value + FROM Input + WHERE value > '' +) FLATTEN LIST BY key2 + diff --git a/yt/yql/tests/sql/suites/lineage/group_by_asstruct_key.sql b/yt/yql/tests/sql/suites/lineage/group_by_asstruct_key.sql new file mode 100644 index 0000000000..ea37605e02 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/group_by_asstruct_key.sql @@ -0,0 +1,10 @@ +INSERT INTO plato.Output +SELECT * FROM ( +SELECT x FROM ( +SELECT + <|a:key,b:value|> as x +FROM plato.Input +) +group by x +) +flatten columns diff --git a/yt/yql/tests/sql/suites/lineage/grouping_sets.cfg b/yt/yql/tests/sql/suites/lineage/grouping_sets.cfg new file mode 100644 index 0000000000..90436a56f9 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/grouping_sets.cfg @@ -0,0 +1 @@ +in Input input_optional.txt diff --git a/yt/yql/tests/sql/suites/lineage/grouping_sets.sql b/yt/yql/tests/sql/suites/lineage/grouping_sets.sql new file mode 100644 index 0000000000..3bece90183 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/grouping_sets.sql @@ -0,0 +1,17 @@ +USE plato; + +$data = select + key, subkey, value +from Input +group by GROUPING SETS ( + (key, subkey), + (subkey, value) + ); + +INSERT INTO @tmp WITH TRUNCATE +SELECT + b.value +FROM $data AS a +LEFT JOIN Input AS b +USING (key) +
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/lineage/if_struct.sql b/yt/yql/tests/sql/suites/lineage/if_struct.sql new file mode 100644 index 0000000000..c8e9b16f0c --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/if_struct.sql @@ -0,0 +1,4 @@ +insert into plato.Output +select * from (select IF(key == "foo", CombineMembers(RemoveMembers(LAG(data) OVER w, ["key"]), ChooseMembers(data, ["key"])), data) from + (select TableRow() as data, key, value from plato.Input) +window w as (partition by key)) flatten columns;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/lineage/input.txt.attr b/yt/yql/tests/sql/suites/lineage/input.txt.attr new file mode 100644 index 0000000000..36b3c00c90 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/input.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["key";["DataType";"String";];];["subkey";["DataType";"String";];];["value";["DataType";"String";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/lineage/input_list.txt.attr b/yt/yql/tests/sql/suites/lineage/input_list.txt.attr new file mode 100644 index 0000000000..01a4a26d00 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/input_list.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["key";["ListType";["DataType";"String";];];];["subkey";["DataType";"String";];];["value";["DataType";"String";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/lineage/input_list_2.txt.attr b/yt/yql/tests/sql/suites/lineage/input_list_2.txt.attr new file mode 100644 index 0000000000..26fc5bf429 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/input_list_2.txt.attr @@ -0,0 +1,10 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String";];]; + ["subkey";["DataType";"String";];]; + ["value";["ListType";["DataType";"String";];];]; + ["value2";["ListType";["DataType";"String";];];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/lineage/input_optional.txt.attr b/yt/yql/tests/sql/suites/lineage/input_optional.txt.attr new file mode 100644 index 0000000000..b971d222d4 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/input_optional.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["key";["OptionalType";["DataType";"String"]]];["subkey";["OptionalType";["DataType";"String"]]];["value";["OptionalType";["DataType";"Int64"];];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/lineage/isolated.sql b/yt/yql/tests/sql/suites/lineage/isolated.sql new file mode 100644 index 0000000000..2bd18612e5 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/isolated.sql @@ -0,0 +1,8 @@ +USE plato; + +$one = select dummy from as_table([<|dummy:1|>]); + +INSERT INTO Output +SELECT key FROM Input AS a +CROSS JOIN $one AS b; + diff --git a/yt/yql/tests/sql/suites/lineage/join_as_struct.sql b/yt/yql/tests/sql/suites/lineage/join_as_struct.sql new file mode 100644 index 0000000000..2bb80fe374 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/join_as_struct.sql @@ -0,0 +1,15 @@ +INSERT INTO plato.Output +SELECT * FROM ( +SELECT x,y FROM ( +SELECT + key, <|a:key,b:value|> as x +FROM plato.Input +) as a +JOIN ( +SELECT + key, <|c:key,d:value|> as y +FROM plato.Input +) as b +ON a.key = b.key +) +flatten columns diff --git a/yt/yql/tests/sql/suites/lineage/list_literal1.sql b/yt/yql/tests/sql/suites/lineage/list_literal1.sql new file mode 100644 index 0000000000..b839e4526b --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/list_literal1.sql @@ -0,0 +1,8 @@ +USE plato; + +$key = select min(key) from Input; + +INSERT INTO Output +SELECT +$key as key; + diff --git a/yt/yql/tests/sql/suites/lineage/list_literal2.sql b/yt/yql/tests/sql/suites/lineage/list_literal2.sql new file mode 100644 index 0000000000..6fe5bf0773 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/list_literal2.sql @@ -0,0 +1,10 @@ +USE plato; + +$key = select min(key) from Input; + +INSERT INTO Output +SELECT * FROM ( + SELECT $key as key +) +where key > ''; + diff --git a/yt/yql/tests/sql/suites/lineage/list_literal3.sql b/yt/yql/tests/sql/suites/lineage/list_literal3.sql new file mode 100644 index 0000000000..6344c18387 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/list_literal3.sql @@ -0,0 +1,12 @@ +USE plato; + +$key = select min(key) from Input; +$value = select min(value) from Input; + +INSERT INTO Output +SELECT * FROM ( + SELECT $key as key + UNION ALL + SELECT $value as val +) + diff --git a/yt/yql/tests/sql/suites/lineage/list_literal4.sql b/yt/yql/tests/sql/suites/lineage/list_literal4.sql new file mode 100644 index 0000000000..8ab9cafc82 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/list_literal4.sql @@ -0,0 +1,13 @@ +USE plato; + +$key = select min(key) from Input; +$value = select min(value) from Input; + +INSERT INTO Output +SELECT * FROM ( + SELECT $key as key + UNION ALL + SELECT $value as val +) +WHERE key > ''; + diff --git a/yt/yql/tests/sql/suites/lineage/member_over_if_struct.sql b/yt/yql/tests/sql/suites/lineage/member_over_if_struct.sql new file mode 100644 index 0000000000..ceaf6df9b9 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/member_over_if_struct.sql @@ -0,0 +1,4 @@ +insert into plato.Output +select * from (select IF(key == "foo", LAG(data) over w, data) from + (select TableRow() as data, key, value from plato.Input) +window w as (partition by key)) flatten columns;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/lineage/nested_lambda_fields.sql b/yt/yql/tests/sql/suites/lineage/nested_lambda_fields.sql new file mode 100644 index 0000000000..9091bae31e --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/nested_lambda_fields.sql @@ -0,0 +1,18 @@ +USE plato; + +$v = ($x) -> { + return ListFilter(["a","b"],($y)->($y = $x)); +}; + +$k = ($x) -> { + return $x; +}; + + +insert into Output +with truncate +select + $k(key) as k, + $v(value) as v +from + Input diff --git a/yt/yql/tests/sql/suites/lineage/process.sql b/yt/yql/tests/sql/suites/lineage/process.sql new file mode 100644 index 0000000000..a97e7a237c --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/process.sql @@ -0,0 +1,8 @@ +USE plato; + +$p = ($s) -> ($s); + +INSERT INTO Output +PROCESS Input +USING $p(TableRows()); + diff --git a/yt/yql/tests/sql/suites/lineage/reduce.sql b/yt/yql/tests/sql/suites/lineage/reduce.sql new file mode 100644 index 0000000000..bc097c26af --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/reduce.sql @@ -0,0 +1,7 @@ +USE plato; + +$r = ($_key, $s) -> ($s); + +INSERT INTO Output +REDUCE Input +ON key USING $r(TableRow()); diff --git a/yt/yql/tests/sql/suites/lineage/reduce_all.sql b/yt/yql/tests/sql/suites/lineage/reduce_all.sql new file mode 100644 index 0000000000..aa16229644 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/reduce_all.sql @@ -0,0 +1,8 @@ +USE plato; + +$r = ($s) -> ($s); + +INSERT INTO Output +REDUCE Input +ON key USING ALL $r(TableRows()); + diff --git a/yt/yql/tests/sql/suites/lineage/reduce_all_row.sql b/yt/yql/tests/sql/suites/lineage/reduce_all_row.sql new file mode 100644 index 0000000000..21be7d15ed --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/reduce_all_row.sql @@ -0,0 +1,9 @@ +USE plato; + +$r = ($s) -> (Yql::FlatMap($s, ($x)->($x.1))); + +INSERT INTO Output +REDUCE Input +ON key USING ALL $r(TableRow()); + + diff --git a/yt/yql/tests/sql/suites/lineage/scalar_context.cfg b/yt/yql/tests/sql/suites/lineage/scalar_context.cfg new file mode 100644 index 0000000000..0670741477 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/scalar_context.cfg @@ -0,0 +1,4 @@ +in Input input_list.txt +out Output output.txt +providers yt +canonize_lineage diff --git a/yt/yql/tests/sql/suites/lineage/scalar_context.sql b/yt/yql/tests/sql/suites/lineage/scalar_context.sql new file mode 100644 index 0000000000..ef0f4d18f5 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/scalar_context.sql @@ -0,0 +1,12 @@ +USE plato; + +$sub = ( + select key + from Input where value = 'abc' +); + +insert into Output + select + value, $sub as s + from Input + order by value diff --git a/yt/yql/tests/sql/suites/lineage/select_all.sql b/yt/yql/tests/sql/suites/lineage/select_all.sql new file mode 100644 index 0000000000..e83b513cf5 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_all.sql @@ -0,0 +1,3 @@ +insert into plato.Output +select * from plato.Input; + diff --git a/yt/yql/tests/sql/suites/lineage/select_all_filter.sql b/yt/yql/tests/sql/suites/lineage/select_all_filter.sql new file mode 100644 index 0000000000..660930df9c --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_all_filter.sql @@ -0,0 +1,4 @@ +insert into plato.Output +select * from plato.Input +where key > '' + diff --git a/yt/yql/tests/sql/suites/lineage/select_field.sql b/yt/yql/tests/sql/suites/lineage/select_field.sql new file mode 100644 index 0000000000..af706633d9 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_field.sql @@ -0,0 +1,3 @@ +insert into plato.Output +select key from plato.Input; + diff --git a/yt/yql/tests/sql/suites/lineage/select_field_filter.sql b/yt/yql/tests/sql/suites/lineage/select_field_filter.sql new file mode 100644 index 0000000000..f07279fd60 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_field_filter.sql @@ -0,0 +1,4 @@ +insert into plato.Output +select key from plato.Input +where key > '' + diff --git a/yt/yql/tests/sql/suites/lineage/select_field_limit_offset.sql b/yt/yql/tests/sql/suites/lineage/select_field_limit_offset.sql new file mode 100644 index 0000000000..2d4e4d2d89 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_field_limit_offset.sql @@ -0,0 +1,6 @@ +insert into plato.Output +select key from plato.Input +order by key +limit 4 offset 1; + + diff --git a/yt/yql/tests/sql/suites/lineage/select_field_order_by.sql b/yt/yql/tests/sql/suites/lineage/select_field_order_by.sql new file mode 100644 index 0000000000..6168ad6662 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_field_order_by.sql @@ -0,0 +1,4 @@ +insert into plato.Output +select key, value from plato.Input +order by key; + diff --git a/yt/yql/tests/sql/suites/lineage/select_field_rename.sql b/yt/yql/tests/sql/suites/lineage/select_field_rename.sql new file mode 100644 index 0000000000..deebad403e --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_field_rename.sql @@ -0,0 +1,3 @@ +insert into plato.Output +select key as key2 from plato.Input; + diff --git a/yt/yql/tests/sql/suites/lineage/select_group_by_all.sql b/yt/yql/tests/sql/suites/lineage/select_group_by_all.sql new file mode 100644 index 0000000000..f0d0e6abd1 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_group_by_all.sql @@ -0,0 +1,3 @@ +insert into plato.Output +select count(*), min(value) from plato.Input; + diff --git a/yt/yql/tests/sql/suites/lineage/select_group_by_key.sql b/yt/yql/tests/sql/suites/lineage/select_group_by_key.sql new file mode 100644 index 0000000000..1c9e4b383d --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_group_by_key.sql @@ -0,0 +1,3 @@ +insert into plato.Output +select key, count(*), min(value) from plato.Input group by key order by key; + diff --git a/yt/yql/tests/sql/suites/lineage/select_join.sql b/yt/yql/tests/sql/suites/lineage/select_join.sql new file mode 100644 index 0000000000..fce7a756e2 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_join.sql @@ -0,0 +1,5 @@ +insert into plato.Output +select a.key as x, b.value as y from plato.Input as a +join plato.Input as b on a.key = b.key +order by x; + diff --git a/yt/yql/tests/sql/suites/lineage/select_mix_fields.sql b/yt/yql/tests/sql/suites/lineage/select_mix_fields.sql new file mode 100644 index 0000000000..61033e1f87 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_mix_fields.sql @@ -0,0 +1,3 @@ +insert into plato.Output +select key || value from plato.Input; + diff --git a/yt/yql/tests/sql/suites/lineage/select_nested_table_row.sql b/yt/yql/tests/sql/suites/lineage/select_nested_table_row.sql new file mode 100644 index 0000000000..adcc6c3619 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_nested_table_row.sql @@ -0,0 +1,3 @@ +insert into plato.Output +select StablePickle(TableRow()) from plato.Input; + diff --git a/yt/yql/tests/sql/suites/lineage/select_table_row.sql b/yt/yql/tests/sql/suites/lineage/select_table_row.sql new file mode 100644 index 0000000000..ca19dafd36 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_table_row.sql @@ -0,0 +1,3 @@ +insert into plato.Output +select TableRow() from plato.Input; + diff --git a/yt/yql/tests/sql/suites/lineage/select_union_all.sql b/yt/yql/tests/sql/suites/lineage/select_union_all.sql new file mode 100644 index 0000000000..24a56b8454 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/select_union_all.sql @@ -0,0 +1,5 @@ +insert into plato.Output +select key as x from plato.Input +union all +select value as x from plato.Input; + diff --git a/yt/yql/tests/sql/suites/lineage/some_tablerow.sql b/yt/yql/tests/sql/suites/lineage/some_tablerow.sql new file mode 100644 index 0000000000..6edbc01dce --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/some_tablerow.sql @@ -0,0 +1,6 @@ +INSERT INTO plato.Output +SELECT * FROM ( +SELECT + some(TableRow()) +FROM plato.Input) +flatten columns diff --git a/yt/yql/tests/sql/suites/lineage/topsort.sql b/yt/yql/tests/sql/suites/lineage/topsort.sql new file mode 100644 index 0000000000..2289cb02b1 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/topsort.sql @@ -0,0 +1,8 @@ +USE plato; + +INSERT INTO Output +SELECT a.value +FROM Input AS a +INNER JOIN (SELECT value FROM Input ORDER BY value LIMIT 1) AS b +USING (value); + diff --git a/yt/yql/tests/sql/suites/lineage/union_all_tablerow.sql b/yt/yql/tests/sql/suites/lineage/union_all_tablerow.sql new file mode 100644 index 0000000000..c2d3407e9e --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/union_all_tablerow.sql @@ -0,0 +1,11 @@ +INSERT INTO plato.Output +SELECT * FROM ( +SELECT + TableRow() as x +FROM plato.Input +UNION ALL +SELECT + 1 as y +FROM plato.Input +) +flatten columns diff --git a/yt/yql/tests/sql/suites/lineage/unordered_subquery.sql b/yt/yql/tests/sql/suites/lineage/unordered_subquery.sql new file mode 100644 index 0000000000..d7b657468d --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/unordered_subquery.sql @@ -0,0 +1,9 @@ +USE plato; + +define subquery $f() as + SELECT * FROM Input +end define; + +insert into Output with truncate + select * from $f() + diff --git a/yt/yql/tests/sql/suites/lineage/window_asstruct.sql b/yt/yql/tests/sql/suites/lineage/window_asstruct.sql new file mode 100644 index 0000000000..3a65047285 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/window_asstruct.sql @@ -0,0 +1,6 @@ +INSERT INTO plato.Output +SELECT * FROM ( +SELECT + lead(<|a:key,b:value|>) over () +FROM plato.Input) +flatten columns diff --git a/yt/yql/tests/sql/suites/lineage/window_many.sql b/yt/yql/tests/sql/suites/lineage/window_many.sql new file mode 100644 index 0000000000..5fe93a4226 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/window_many.sql @@ -0,0 +1,4 @@ +insert into plato.Output +select key, row_number() over w1, lag(value) over w1, lead(value) over w1, + rank(value) over w2, dense_rank(value) over w2 + from plato.Input window w1 as (order by key), w2 as (order by key desc)
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/lineage/window_member_struct.sql b/yt/yql/tests/sql/suites/lineage/window_member_struct.sql new file mode 100644 index 0000000000..ff33cb8542 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/window_member_struct.sql @@ -0,0 +1,4 @@ +insert into plato.Output WITH TRUNCATE +select * from (select lag(data) over w from + (select TableRow() as data, key from plato.Input) +window w as (partition by key)) flatten columns; diff --git a/yt/yql/tests/sql/suites/lineage/window_one.sql b/yt/yql/tests/sql/suites/lineage/window_one.sql new file mode 100644 index 0000000000..6bd40dc505 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/window_one.sql @@ -0,0 +1,2 @@ +insert into plato.Output +select key, row_number() over () from plato.Input
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/lineage/window_session.sql b/yt/yql/tests/sql/suites/lineage/window_session.sql new file mode 100644 index 0000000000..74ba0f70d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/window_session.sql @@ -0,0 +1,4 @@ +insert into plato.Output +select key, row_number() over w as r, session_start() over w as s from plato.Input +window w AS (PARTITION BY key, SessionWindow(cast(subkey as Datetime), DateTime::IntervalFromMinutes(15))); + diff --git a/yt/yql/tests/sql/suites/lineage/window_tablerow.sql b/yt/yql/tests/sql/suites/lineage/window_tablerow.sql new file mode 100644 index 0000000000..e96be1ecfb --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/window_tablerow.sql @@ -0,0 +1,6 @@ +INSERT INTO plato.Output +SELECT * FROM ( +SELECT + lead(TableRow()) over () +FROM plato.Input) +flatten columns diff --git a/yt/yql/tests/sql/suites/lineage/with_inline.sql b/yt/yql/tests/sql/suites/lineage/with_inline.sql new file mode 100644 index 0000000000..2c98d76f82 --- /dev/null +++ b/yt/yql/tests/sql/suites/lineage/with_inline.sql @@ -0,0 +1,8 @@ +USE plato; + +INSERT INTO Output +SELECT +key as key, +"" as subkey, +"value:" || value as value +FROM Input WITH INLINE diff --git a/yt/yql/tests/sql/suites/optimizers/aggregate_over_aggregate.cfg b/yt/yql/tests/sql/suites/optimizers/aggregate_over_aggregate.cfg new file mode 100644 index 0000000000..0474ee88ca --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/aggregate_over_aggregate.cfg @@ -0,0 +1,2 @@ +in Input input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/aggregate_over_aggregate.sql b/yt/yql/tests/sql/suites/optimizers/aggregate_over_aggregate.sql new file mode 100644 index 0000000000..39306eb32a --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/aggregate_over_aggregate.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ + +use plato; + +select distinct * from Input group by value, subkey, key order by subkey; diff --git a/yt/yql/tests/sql/suites/optimizers/combinebykey_fields_subset.cfg b/yt/yql/tests/sql/suites/optimizers/combinebykey_fields_subset.cfg new file mode 100644 index 0000000000..3f5bebb5a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/combinebykey_fields_subset.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/combinebykey_fields_subset.sql b/yt/yql/tests/sql/suites/optimizers/combinebykey_fields_subset.sql new file mode 100644 index 0000000000..6ed4e0ed36 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/combinebykey_fields_subset.sql @@ -0,0 +1,3 @@ +SELECT count(DISTINCT subkey) AS subkey +FROM plato.Input +WHERE (key == "075" OR key == "150"); diff --git a/yt/yql/tests/sql/suites/optimizers/combinebykey_fields_subset_range.cfg b/yt/yql/tests/sql/suites/optimizers/combinebykey_fields_subset_range.cfg new file mode 100644 index 0000000000..f2bc0f7ec7 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/combinebykey_fields_subset_range.cfg @@ -0,0 +1,3 @@ +in Input0 sorted.txt +in Input1 sorted.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/combinebykey_fields_subset_range.sql b/yt/yql/tests/sql/suites/optimizers/combinebykey_fields_subset_range.sql new file mode 100644 index 0000000000..3acd90202b --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/combinebykey_fields_subset_range.sql @@ -0,0 +1,5 @@ +/* postgres can not */ + +SELECT count(DISTINCT subkey) AS subkey +FROM plato.CONCAT(Input0, Input1) +WHERE (key == "075" OR key == "150"); diff --git a/yt/yql/tests/sql/suites/optimizers/default.cfg b/yt/yql/tests/sql/suites/optimizers/default.cfg new file mode 100644 index 0000000000..9b1614d4c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/default.cfg @@ -0,0 +1,3 @@ +in Input0 input0.txt +in Input1 input1.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/direct_row_after_merge.cfg b/yt/yql/tests/sql/suites/optimizers/direct_row_after_merge.cfg new file mode 100644 index 0000000000..3712d0f1ba --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/direct_row_after_merge.cfg @@ -0,0 +1,3 @@ +in Input1 sorted.txt +in Input2 sorted.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/direct_row_after_merge.sql b/yt/yql/tests/sql/suites/optimizers/direct_row_after_merge.sql new file mode 100644 index 0000000000..cde00141a3 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/direct_row_after_merge.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +USE plato; + +SELECT + key, + TablePath() as path +FROM concat(Input1, Input2) +order by key, path;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/field_subset_for_multiusage.cfg b/yt/yql/tests/sql/suites/optimizers/field_subset_for_multiusage.cfg new file mode 100644 index 0000000000..670afdcdfa --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/field_subset_for_multiusage.cfg @@ -0,0 +1,3 @@ +in Input1 input3.txt +in Input2 input_other.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/field_subset_for_multiusage.sql b/yt/yql/tests/sql/suites/optimizers/field_subset_for_multiusage.sql new file mode 100644 index 0000000000..3a568de9ae --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/field_subset_for_multiusage.sql @@ -0,0 +1,15 @@ +use plato; + +select + key, + count(1) as cnt, + sum(cast(subkey as int32)) as sm +from concat(Input1, Input2) +where subkey in ("1", "2", "3", "4") +group by key +order by sm desc; + +select + count(1) as cnt, + sum(cast(subkey as int32)) as sm +from concat(Input1, Input2); diff --git a/yt/yql/tests/sql/suites/optimizers/flatmap_with_non_struct_out.cfg b/yt/yql/tests/sql/suites/optimizers/flatmap_with_non_struct_out.cfg new file mode 100644 index 0000000000..86ef4956fc --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/flatmap_with_non_struct_out.cfg @@ -0,0 +1,3 @@ +in Input input3.txt +res result.txt +providers yt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/flatmap_with_non_struct_out.sql b/yt/yql/tests/sql/suites/optimizers/flatmap_with_non_struct_out.sql new file mode 100644 index 0000000000..4a99afbccf --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/flatmap_with_non_struct_out.sql @@ -0,0 +1,6 @@ +USE plato; + +$lst = process Input; +$dict = ToDict(ListMap($lst,($x)->(($x.key, $x.subkey)))); + +SELECT DictLength($dict);
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/group_visit_lambdas.cfg b/yt/yql/tests/sql/suites/optimizers/group_visit_lambdas.cfg new file mode 100644 index 0000000000..de847dcf33 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/group_visit_lambdas.cfg @@ -0,0 +1,6 @@ +in Input1 input3.txt +in Input2 input3.txt +in Input3 input3.txt +in Input4 opt_key.txt +in Input5 opt_key.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/group_visit_lambdas.sql b/yt/yql/tests/sql/suites/optimizers/group_visit_lambdas.sql new file mode 100644 index 0000000000..f5e2aab6e5 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/group_visit_lambdas.sql @@ -0,0 +1,13 @@ +/* postgres can not */ + +USE plato; + +select + key, + subkey, + value, + TablePath() as path +from + range("", "Input1", "Input5") +where key != "" +order by key, subkey, path;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/input1.txt.attr b/yt/yql/tests/sql/suites/optimizers/input1.txt.attr new file mode 100644 index 0000000000..ffb9a19cab --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/input1.txt.attr @@ -0,0 +1,42 @@ +{ + "_yql_row_spec" = { + "UniqueKeys"=%true; + "SortMembers"=["Group"; "Name"]; + "SortedBy"=["Group"; "Name"]; + "SortDirections"=[1; 1]; + "SortedByTypes"=[["DataType";"Uint64"]; ["DataType";"String"]]; + "Type" = [ + "StructType"; + [ + [ + "Group"; + [ + "DataType"; + "Uint64" + ] + ]; + [ + "Name"; + [ + "DataType"; + "String" + ] + ]; + [ + "Amount"; + [ + "DataType"; + "Int64" + ] + ]; + [ + "Comment"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/input3.txt.attr b/yt/yql/tests/sql/suites/optimizers/input3.txt.attr new file mode 100644 index 0000000000..b6100e5fd0 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/input3.txt.attr @@ -0,0 +1,30 @@ +{ + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/input4.txt.attr b/yt/yql/tests/sql/suites/optimizers/input4.txt.attr new file mode 100644 index 0000000000..9678beab02 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/input4.txt.attr @@ -0,0 +1,10 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["info";["DataType";"String"]]; + ]]; + "SortDirections"=[1;]; + "SortedBy"=["key"]; + "SortedByTypes"=[["DataType";"String";]]; + "SortMembers"=["key"]; +}} diff --git a/yt/yql/tests/sql/suites/optimizers/input5.txt.attr b/yt/yql/tests/sql/suites/optimizers/input5.txt.attr new file mode 100644 index 0000000000..ed13e20223 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/input5.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/optimizers/input_other.txt.attr b/yt/yql/tests/sql/suites/optimizers/input_other.txt.attr new file mode 100644 index 0000000000..9d84682ce5 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/input_other.txt.attr @@ -0,0 +1,8 @@ +{ + "_read_schema" = + <"strict" = "false";> + [ + {"name"="key"; "type"="string"}; + {"name"="subkey"; "type"="string"}; + ] +} diff --git a/yt/yql/tests/sql/suites/optimizers/input_view.txt.attr b/yt/yql/tests/sql/suites/optimizers/input_view.txt.attr new file mode 100644 index 0000000000..41ea51e276 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/input_view.txt.attr @@ -0,0 +1,4 @@ +{ + "_yql_type"="view"; + "type"="document"; +} diff --git a/yt/yql/tests/sql/suites/optimizers/length_over_merge.cfg b/yt/yql/tests/sql/suites/optimizers/length_over_merge.cfg new file mode 100644 index 0000000000..0474ee88ca --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/length_over_merge.cfg @@ -0,0 +1,2 @@ +in Input input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/length_over_merge.sql b/yt/yql/tests/sql/suites/optimizers/length_over_merge.sql new file mode 100644 index 0000000000..b102fdee47 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/length_over_merge.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +use plato; + +$input = (select key, key || subkey as subkey, value from Input); + +$total_count = (select count(1) from $input); + +$filtered = (select * from $input where key in ("023", "037", "075")); + +$filtered_cnt = (select count(1) from $filtered); + +select $filtered_cnt / cast($total_count as Double) as cnt; diff --git a/yt/yql/tests/sql/suites/optimizers/length_over_merge_fs_multiusage.cfg b/yt/yql/tests/sql/suites/optimizers/length_over_merge_fs_multiusage.cfg new file mode 100644 index 0000000000..0474ee88ca --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/length_over_merge_fs_multiusage.cfg @@ -0,0 +1,2 @@ +in Input input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/length_over_merge_fs_multiusage.sql b/yt/yql/tests/sql/suites/optimizers/length_over_merge_fs_multiusage.sql new file mode 100644 index 0000000000..ff060f1ab3 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/length_over_merge_fs_multiusage.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +pragma config.flags("OptimizerFlags", "FieldSubsetEnableMultiusage"); + +use plato; + +$input = (select key, key || subkey as subkey, value from Input); + +$total_count = (select count(1) from $input); + +$filtered = (select * from $input where key in ("023", "037", "075")); + +$filtered_cnt = (select count(1) from $filtered); + +select $filtered_cnt / cast($total_count as Double) as cnt; diff --git a/yt/yql/tests/sql/suites/optimizers/multi_to_empty_constraint.cfg b/yt/yql/tests/sql/suites/optimizers/multi_to_empty_constraint.cfg new file mode 100644 index 0000000000..0474ee88ca --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/multi_to_empty_constraint.cfg @@ -0,0 +1,2 @@ +in Input input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/multi_to_empty_constraint.sql b/yt/yql/tests/sql/suites/optimizers/multi_to_empty_constraint.sql new file mode 100644 index 0000000000..d66d589ab8 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/multi_to_empty_constraint.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ + +USE plato; + +select key, some(subkey) from (select * from Input where key > "010" and value in []) group by key +union all +select key, some(subkey) from (select * from Input where key > "020" and value in []) group by key +; diff --git a/yt/yql/tests/sql/suites/optimizers/nonselected_direct_row.cfg b/yt/yql/tests/sql/suites/optimizers/nonselected_direct_row.cfg new file mode 100644 index 0000000000..a6e1f32b6e --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/nonselected_direct_row.cfg @@ -0,0 +1,3 @@ +in Input1 input3.txt +in Input2 input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/nonselected_direct_row.sql b/yt/yql/tests/sql/suites/optimizers/nonselected_direct_row.sql new file mode 100644 index 0000000000..c0e6c1c34a --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/nonselected_direct_row.sql @@ -0,0 +1,8 @@ +use plato; + +select key, subkey, value +from ( + select TablePath() as tbl, key, subkey, value + from concat(Input1, Input2) +) +where tbl = "Input" and value != ""; diff --git a/yt/yql/tests/sql/suites/optimizers/opt_key.txt.attr b/yt/yql/tests/sql/suites/optimizers/opt_key.txt.attr new file mode 100644 index 0000000000..72a3e1401c --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/opt_key.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";[OptionalType;["DataType";"String"]]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/optimizers/passthrough_sortness_over_map.sql b/yt/yql/tests/sql/suites/optimizers/passthrough_sortness_over_map.sql new file mode 100644 index 0000000000..0c6b58a563 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/passthrough_sortness_over_map.sql @@ -0,0 +1,31 @@ +/* postgres can not */ +/* kikimr can not - anon tables */ +USE plato; + +INSERT INTO @a +SELECT + * +FROM Input0 +ORDER BY key, subkey; + +commit; + +INSERT INTO @c +SELECT * FROM @a +WHERE key < "100" +ORDER BY key, subkey; + +INSERT INTO @d +SELECT + key as key, + "" as subkey, + "value:" || value as value +FROM @a +WHERE key < "100" +ORDER BY key; + +commit; + +select * from @c; + +select * from @d; diff --git a/yt/yql/tests/sql/suites/optimizers/pushdown_nonsep_over_aggregate.cfg b/yt/yql/tests/sql/suites/optimizers/pushdown_nonsep_over_aggregate.cfg new file mode 100644 index 0000000000..f3472752d8 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/pushdown_nonsep_over_aggregate.cfg @@ -0,0 +1,3 @@ +in Input input5.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/optimizers/pushdown_nonsep_over_aggregate.sql b/yt/yql/tests/sql/suites/optimizers/pushdown_nonsep_over_aggregate.sql new file mode 100644 index 0000000000..b3469e9a3b --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/pushdown_nonsep_over_aggregate.sql @@ -0,0 +1,12 @@ +USE plato; + +pragma config.flags("OptimizerFlags", "PushdownComplexFiltersOverAggregate"); + +SELECT * FROM ( + SELECT + key as key, + min(value) as mv + FROM Input + GROUP BY key +) +WHERE AssumeNonStrict(200 > 100) and (2000 > 1000) and key != "911" and (key < "150" and mv != "ddd" or key > "200"); diff --git a/yt/yql/tests/sql/suites/optimizers/reduce_with_aux_sort_column.cfg b/yt/yql/tests/sql/suites/optimizers/reduce_with_aux_sort_column.cfg new file mode 100644 index 0000000000..66737248b8 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/reduce_with_aux_sort_column.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/optimizers/reduce_with_aux_sort_column.sql b/yt/yql/tests/sql/suites/optimizers/reduce_with_aux_sort_column.sql new file mode 100644 index 0000000000..8cb88e34ff --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/reduce_with_aux_sort_column.sql @@ -0,0 +1,12 @@ +use plato; +pragma yt.JoinMergeTablesLimit="10"; + +$i = select a.key as key, a.subkey as subkey, b.value as value + from Input as a + inner join Input as b + using(key, subkey) +assume order by key,subkey; + +insert into Output +select AsTuple(key, subkey) as k, value || "a" as v from $i +assume order by k; diff --git a/yt/yql/tests/sql/suites/optimizers/simplified_path_constraint.cfg b/yt/yql/tests/sql/suites/optimizers/simplified_path_constraint.cfg new file mode 100644 index 0000000000..5e9b7f4e38 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/simplified_path_constraint.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +providers yt diff --git a/yt/yql/tests/sql/suites/optimizers/simplified_path_constraint.sql b/yt/yql/tests/sql/suites/optimizers/simplified_path_constraint.sql new file mode 100644 index 0000000000..f943ecffe0 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/simplified_path_constraint.sql @@ -0,0 +1,11 @@ +USE plato; + +$i = select + key, + AsTuple(key, subkey) as t, + "value:" || value as value +from Input; + +select distinct t from $i order by t; + +select * from $i where key == "020"; diff --git a/yt/yql/tests/sql/suites/optimizers/sort_by_nonstrict_const.cfg b/yt/yql/tests/sql/suites/optimizers/sort_by_nonstrict_const.cfg new file mode 100644 index 0000000000..95d7627826 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/sort_by_nonstrict_const.cfg @@ -0,0 +1,3 @@ +in Input input0.txt +providers yt +xfail diff --git a/yt/yql/tests/sql/suites/optimizers/sort_by_nonstrict_const.sql b/yt/yql/tests/sql/suites/optimizers/sort_by_nonstrict_const.sql new file mode 100644 index 0000000000..cd682fe33f --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/sort_by_nonstrict_const.sql @@ -0,0 +1,5 @@ +/* yt can not */ +/* custom error:Member not found: date*/ +use plato; + +select * from Input order by date, double; diff --git a/yt/yql/tests/sql/suites/optimizers/sort_constraint_in_left.cfg b/yt/yql/tests/sql/suites/optimizers/sort_constraint_in_left.cfg new file mode 100644 index 0000000000..3f5bebb5a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/sort_constraint_in_left.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/sort_constraint_in_left.sql b/yt/yql/tests/sql/suites/optimizers/sort_constraint_in_left.sql new file mode 100644 index 0000000000..e1262ecbeb --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/sort_constraint_in_left.sql @@ -0,0 +1,19 @@ +/* postgres can not */ + +USE plato; + +$input_table = (SELECT * FROM Input); + +SELECT * FROM ( + SELECT 'total' AS key, + COUNT(*) AS count + FROM $input_table + WHERE key != "1" + UNION ALL + SELECT key, + COUNT(*) AS count + FROM $input_table + WHERE key != "1" + GROUP BY key +) +ORDER BY key, count; diff --git a/yt/yql/tests/sql/suites/optimizers/sort_over_sorted_prefix_keys.sql b/yt/yql/tests/sql/suites/optimizers/sort_over_sorted_prefix_keys.sql new file mode 100644 index 0000000000..6a1e4d9aab --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/sort_over_sorted_prefix_keys.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +/* kikimr can not - anon tables */ +USE plato; + +insert into @a +SELECT + * +FROM Input0 +ORDER BY key ASC, subkey ASC; + +commit; + +select * from @a +ORDER BY key ASC; diff --git a/yt/yql/tests/sql/suites/optimizers/sort_over_sorted_same_keys.sql b/yt/yql/tests/sql/suites/optimizers/sort_over_sorted_same_keys.sql new file mode 100644 index 0000000000..d744ef5418 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/sort_over_sorted_same_keys.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +/* kikimr can not - anon tables */ +USE plato; + +insert into @a +SELECT + * +FROM Input0 +ORDER BY key ASC, subkey ASC; + +commit; + +select * from @a +ORDER BY key ASC, subkey ASC; diff --git a/yt/yql/tests/sql/suites/optimizers/sorted.txt.attr b/yt/yql/tests/sql/suites/optimizers/sorted.txt.attr new file mode 100644 index 0000000000..36f279e4a0 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/sorted.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]]] + ]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/optimizers/sorted_desc.txt.attr b/yt/yql/tests/sql/suites/optimizers/sorted_desc.txt.attr new file mode 100644 index 0000000000..5a6ca5761e --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/sorted_desc.txt.attr @@ -0,0 +1,47 @@ +{ + "_yql_row_spec" = { + "SortMembers" = [ + "key" + ]; + "SortDirections" = [ + 0 + ]; + "UniqueKeys" = %false; + "SortedByTypes" = [ + [ + "DataType"; + "String" + ] + ]; + "StrictSchema" = %true; + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ]; + "SortedBy" = [ + "_yql_column_0" + ] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/sorted_scalar_content.cfg b/yt/yql/tests/sql/suites/optimizers/sorted_scalar_content.cfg new file mode 100644 index 0000000000..ac3bc7d1d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/sorted_scalar_content.cfg @@ -0,0 +1,3 @@ +in Input sorted.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/optimizers/sorted_scalar_content.sql b/yt/yql/tests/sql/suites/optimizers/sorted_scalar_content.sql new file mode 100644 index 0000000000..df6d3131d7 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/sorted_scalar_content.sql @@ -0,0 +1,13 @@ +use plato; + +$ou = select * from Input; + +$a = select key from $ou where key > '0'; + +insert into @a +select * from $a order by key; + +select * from $ou +where subkey > "0" + and key != $a +order by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/sorted_sql_in.cfg b/yt/yql/tests/sql/suites/optimizers/sorted_sql_in.cfg new file mode 100644 index 0000000000..ac3bc7d1d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/sorted_sql_in.cfg @@ -0,0 +1,3 @@ +in Input sorted.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/optimizers/sorted_sql_in.sql b/yt/yql/tests/sql/suites/optimizers/sorted_sql_in.sql new file mode 100644 index 0000000000..c0debae4be --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/sorted_sql_in.sql @@ -0,0 +1,13 @@ +use plato; + +$ou = select * from Input; + +$a = select * from $ou where key > '0'; + +insert into @a +select * from $a order by key; + +select * from $ou +where subkey > "0" + and key not in compact (select key from $a) +order by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/test_fuse_map_predicate_limit.sql b/yt/yql/tests/sql/suites/optimizers/test_fuse_map_predicate_limit.sql new file mode 100644 index 0000000000..f7a96e9e48 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/test_fuse_map_predicate_limit.sql @@ -0,0 +1,12 @@ +/* postgres can not */ + +$data = ( + SELECT key AS Key, YQL::Substring(key, 1, 1) AS Category FROM plato.Input0 WHERE length(key) > 2 LIMIT 20 +); + +SELECT + Category, + COUNT(*) +FROM $data +GROUP BY Category +ORDER BY Category ASC;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/test_fuse_map_take.sql b/yt/yql/tests/sql/suites/optimizers/test_fuse_map_take.sql new file mode 100644 index 0000000000..eeb0cfcf24 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/test_fuse_map_take.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +$data = ( + SELECT key AS Name, value AS Value FROM plato.Input0 +); + +$filtered = ( + SELECT * FROM $data WHERE Name != "BadName" LIMIT 10 +); + +SELECT Name, Avg(Length(Value)) AS Len FROM $filtered GROUP BY Name ORDER BY Name; diff --git a/yt/yql/tests/sql/suites/optimizers/test_lmap_opts.cfg b/yt/yql/tests/sql/suites/optimizers/test_lmap_opts.cfg new file mode 100644 index 0000000000..1aff987614 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/test_lmap_opts.cfg @@ -0,0 +1,5 @@ +in Input0 input0.txt +udf streaming_udf +udf python2_udf +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/optimizers/test_lmap_opts.sql b/yt/yql/tests/sql/suites/optimizers/test_lmap_opts.sql new file mode 100644 index 0000000000..90c0f8a2a7 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/test_lmap_opts.sql @@ -0,0 +1,47 @@ +/* syntax version 1 */ +-- not supported on windows +/* postgres can not */ +$udfScript = @@ + +import collections; + +def processRows(prefix, rowList, separator): + ResultRow = collections.namedtuple("ResultRow", ["Result"]); + + result = []; + for row in rowList: + resultValue = prefix + row.Name + separator + row.Value; + resultItem = ResultRow(Result=resultValue); + result.append(resultItem); + + return result; +@@; + +$udf = Python::processRows( + Callable<(String, List<Struct<Name:String, Value:String>>, String)->List<Struct<Result:String>>>, + $udfScript +); + +$data = ( + SELECT key AS Name, value AS Value FROM plato.Input0 +); + +$prefix = ">>"; + +$p1 = ( + PROCESS $data USING $udf($prefix, TableRows(), "=") WHERE Name != "foo" +); + +$p2 = ( + SELECT Result AS Data FROM $p1 +); + +$p3 = ( + PROCESS $p2 USING Streaming::Process(TableRows(), "grep", AsList("180")) +); + +$p4 = ( + SELECT Data AS FinalResult FROM $p3 +); + +SELECT Avg(Length(FinalResult)) AS AvgResultLength FROM $p4; diff --git a/yt/yql/tests/sql/suites/optimizers/test_no_aggregate_split.cfg b/yt/yql/tests/sql/suites/optimizers/test_no_aggregate_split.cfg new file mode 100644 index 0000000000..8ca23afed0 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/test_no_aggregate_split.cfg @@ -0,0 +1,2 @@ +in Input1 input1.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/test_no_aggregate_split.sql b/yt/yql/tests/sql/suites/optimizers/test_no_aggregate_split.sql new file mode 100644 index 0000000000..a5baec070e --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/test_no_aggregate_split.sql @@ -0,0 +1,15 @@ +/* postgres can not */ + +$aggregated = ( + SELECT Group, Name, SUM(Amount) AS TotalAmount + FROM plato.Input1 + GROUP BY Group, Name +); + +SELECT t.Comment, a.TotalAmount +FROM plato.Input1 AS t +INNER JOIN $aggregated AS a +ON t.Group == a.Group AND t.Name == a.Name +ORDER BY t.Comment, a.TotalAmount; + +SELECT TotalAmount FROM $aggregated ORDER BY TotalAmount; diff --git a/yt/yql/tests/sql/suites/optimizers/unused_columns_group.cfg b/yt/yql/tests/sql/suites/optimizers/unused_columns_group.cfg new file mode 100644 index 0000000000..93653023e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/unused_columns_group.cfg @@ -0,0 +1,2 @@ +in Input unused_columns_window.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/unused_columns_group.sql b/yt/yql/tests/sql/suites/optimizers/unused_columns_group.sql new file mode 100644 index 0000000000..0fb9467dc7 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/unused_columns_group.sql @@ -0,0 +1,9 @@ +USE plato; + +select a,bb from ( +select a,count(distinct b) as bb,max(c) as cc,median(c) as cc1,percentile(c,0.8) as cc2 from ( +select a,b,cast(c as int32) as c,d from Input +) +group by a +) +order by a
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/unused_columns_group_one_of_multi.cfg b/yt/yql/tests/sql/suites/optimizers/unused_columns_group_one_of_multi.cfg new file mode 100644 index 0000000000..2b2bac89e3 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/unused_columns_group_one_of_multi.cfg @@ -0,0 +1,3 @@ +in Input unused_columns_window.txt +udf stat_udf +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/unused_columns_group_one_of_multi.sql b/yt/yql/tests/sql/suites/optimizers/unused_columns_group_one_of_multi.sql new file mode 100644 index 0000000000..eac1ef2643 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/unused_columns_group_one_of_multi.sql @@ -0,0 +1,8 @@ +USE plato; + +select a,cc1 from ( +select a,count(distinct b) as bb,max(c) as cc,median(c) as cc1,percentile(c,0.8) as cc2 from ( +select a,b,cast(c as int32) as c,d from Input +) +group by a +) diff --git a/yt/yql/tests/sql/suites/optimizers/unused_columns_window.cfg b/yt/yql/tests/sql/suites/optimizers/unused_columns_window.cfg new file mode 100644 index 0000000000..93653023e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/unused_columns_window.cfg @@ -0,0 +1,2 @@ +in Input unused_columns_window.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/unused_columns_window.sql b/yt/yql/tests/sql/suites/optimizers/unused_columns_window.sql new file mode 100644 index 0000000000..ee5e54df18 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/unused_columns_window.sql @@ -0,0 +1,9 @@ +USE plato; + +SELECT + a, + lag(a) over w as prev_a, + min(a) over w as min_a +FROM Input +WINDOW w AS (PARTITION BY b ORDER by c) +ORDER BY a; diff --git a/yt/yql/tests/sql/suites/optimizers/unused_columns_window.txt.attr b/yt/yql/tests/sql/suites/optimizers/unused_columns_window.txt.attr new file mode 100644 index 0000000000..2b156c3232 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/unused_columns_window.txt.attr @@ -0,0 +1,8 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["a";["DataType";"String"]]; + ["b";["DataType";"String"]]; + ["c";["DataType";"String"]]; + ["d";["DataType";"String"]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/optimizers/unused_columns_window_no_payloads.cfg b/yt/yql/tests/sql/suites/optimizers/unused_columns_window_no_payloads.cfg new file mode 100644 index 0000000000..93653023e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/unused_columns_window_no_payloads.cfg @@ -0,0 +1,2 @@ +in Input unused_columns_window.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/unused_columns_window_no_payloads.sql b/yt/yql/tests/sql/suites/optimizers/unused_columns_window_no_payloads.sql new file mode 100644 index 0000000000..65c7a1bf64 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/unused_columns_window_no_payloads.sql @@ -0,0 +1,9 @@ +USE plato; + +select b from ( +SELECT + b, + lag(a) over w as prev_a +FROM Input +WINDOW w AS (PARTITION BY b ORDER by c) +) diff --git a/yt/yql/tests/sql/suites/optimizers/yql-10042_disable_flow_fuse_depends_on.sql b/yt/yql/tests/sql/suites/optimizers/yql-10042_disable_flow_fuse_depends_on.sql new file mode 100644 index 0000000000..a828dc1cff --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-10042_disable_flow_fuse_depends_on.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +select RandomNumber(a) as first, RandomNumber(b) as second from ( + select key as a, key as b from Input0 +) order by first, second; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-10070_extract_members_over_calcoverwindow.sql b/yt/yql/tests/sql/suites/optimizers/yql-10070_extract_members_over_calcoverwindow.sql new file mode 100644 index 0000000000..9b0e18cc0b --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-10070_extract_members_over_calcoverwindow.sql @@ -0,0 +1,23 @@ +/* postgres can not */ +USE plato; + +INSERT INTO @source +SELECT Date('2019-03-04') AS `Date`, + 1l AS `Permalink`, + 1l AS `ClusterPermalink`, + False AS `IsHead`, + False AS `WasHead`, + 23 as dummy1; +COMMIT; + +SELECT + IF( + NOT `WasHead` AND NOT `IsHead`, + aggregate_list(AsStruct(`Permalink` AS `Permalink`, `Date` AS `Date`, `ClusterPermalink` AS ClusterPermalink)) OVER `w` + ) AS `Occurence` +FROM + @source +WINDOW `w` AS ( + PARTITION BY `Permalink` + ORDER BY `Date` +) diff --git a/yt/yql/tests/sql/suites/optimizers/yql-10737_lost_passthrough.sql b/yt/yql/tests/sql/suites/optimizers/yql-10737_lost_passthrough.sql new file mode 100644 index 0000000000..92271a89b1 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-10737_lost_passthrough.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +/* kikimr can not - table truncate */ +USE plato; + +insert into @a +select "1" as Text, ["a", "b"] as Attachments; + +commit; + +SELECT x.*, "" AS Text, ListCreate(TypeOf(Attachments)) AS Attachments +WITHOUT x.Text, x.Attachments +FROM @a AS x +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/yql-11171_unordered_over_sorted_fill.cfg b/yt/yql/tests/sql/suites/optimizers/yql-11171_unordered_over_sorted_fill.cfg new file mode 100644 index 0000000000..a3de89f626 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-11171_unordered_over_sorted_fill.cfg @@ -0,0 +1,4 @@ +in Input sorted.txt +res result.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/optimizers/yql-11171_unordered_over_sorted_fill.sql b/yt/yql/tests/sql/suites/optimizers/yql-11171_unordered_over_sorted_fill.sql new file mode 100644 index 0000000000..d76011161b --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-11171_unordered_over_sorted_fill.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ + +USE plato; +select + key, + some(value) +from ( + select + key, + TableName() as value + from Input with inline + union all + select + key, + value + from Input +) +group compact by key; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-12620_stage_multiuse.cfg b/yt/yql/tests/sql/suites/optimizers/yql-12620_stage_multiuse.cfg new file mode 100644 index 0000000000..0474ee88ca --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-12620_stage_multiuse.cfg @@ -0,0 +1,2 @@ +in Input input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-12620_stage_multiuse.sql b/yt/yql/tests/sql/suites/optimizers/yql-12620_stage_multiuse.sql new file mode 100644 index 0000000000..cae154861d --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-12620_stage_multiuse.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +$a=select * from Input; +select count(*) from $a; +select count(*) from $a where key != '075'; +select * from $a where key != '075';
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/yql-14279_keyextract_with_world_dep.cfg b/yt/yql/tests/sql/suites/optimizers/yql-14279_keyextract_with_world_dep.cfg new file mode 100644 index 0000000000..745508f188 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-14279_keyextract_with_world_dep.cfg @@ -0,0 +1,4 @@ +in Input1 sorted.txt +in Input2 sorted.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-14279_keyextract_with_world_dep.sql b/yt/yql/tests/sql/suites/optimizers/yql-14279_keyextract_with_world_dep.sql new file mode 100644 index 0000000000..3cdbaeb766 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-14279_keyextract_with_world_dep.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +use plato; + +$input = select * from range("", "Input1", "Input2"); + +$key = select min(key) from $input; + +select key, subkey, value +from $input +where subkey > '1' and key > $key +order by key +; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-14581_fuseflatmaps_with_external_lambda.cfg b/yt/yql/tests/sql/suites/optimizers/yql-14581_fuseflatmaps_with_external_lambda.cfg new file mode 100644 index 0000000000..0df3369260 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-14581_fuseflatmaps_with_external_lambda.cfg @@ -0,0 +1,3 @@ +res result.txt +providers yt +udf unicode_udf
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/yql-14581_fuseflatmaps_with_external_lambda.sql b/yt/yql/tests/sql/suites/optimizers/yql-14581_fuseflatmaps_with_external_lambda.sql new file mode 100644 index 0000000000..1302d6dde0 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-14581_fuseflatmaps_with_external_lambda.sql @@ -0,0 +1,28 @@ +/* postgres can not */ +USE plato; + +$improve_low = ($val) -> { + RETURN CAST($val AS Utf8); +}; + +$names_intersection = ($org_names, $db_names) -> { + RETURN ListLength( + ListFlatten( + ListMap( + $org_names, + ($org_name) -> { + RETURN ListFilter( + $db_names, + ($db_name) -> { + $org_name = $improve_low($org_name); + $db_name = $improve_low($db_name); + RETURN Unicode::LevensteinDistance($org_name, $db_name) < 0.2 * Unicode::GetLength($org_name); + } + ); + } + ) + ) + ) > 0; +}; + +select $names_intersection(['1', '2'], ['nets']) diff --git a/yt/yql/tests/sql/suites/optimizers/yql-15210_sqlin.cfg b/yt/yql/tests/sql/suites/optimizers/yql-15210_sqlin.cfg new file mode 100644 index 0000000000..7492954c20 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-15210_sqlin.cfg @@ -0,0 +1,3 @@ +in Input input3.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-15210_sqlin.sql b/yt/yql/tests/sql/suites/optimizers/yql-15210_sqlin.sql new file mode 100644 index 0000000000..7054019fb5 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-15210_sqlin.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +USE plato; + +$max = select max(key) from Input; +$list = select key from Input where subkey > "1"; + +select * from ( + select if(key = $max, "max", key) as key, value from Input +) +where key in compact $list
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/yql-17413-topsort.cfg b/yt/yql/tests/sql/suites/optimizers/yql-17413-topsort.cfg new file mode 100644 index 0000000000..c85115a8e4 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-17413-topsort.cfg @@ -0,0 +1,2 @@ +in Input sorted_desc.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-17413-topsort.sql b/yt/yql/tests/sql/suites/optimizers/yql-17413-topsort.sql new file mode 100644 index 0000000000..646b84b1dd --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-17413-topsort.sql @@ -0,0 +1,10 @@ +-- ignore runonopt plan diff +USE plato; + +$filtered = select * from Input where value != "xxx"; + +select distinct(subkey) as subkey +from (select * from $filtered order by key desc limit 3) +order by subkey; + +select sum(cast(subkey as int32)) as c from $filtered; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-17715_concat_sort_desc.cfg b/yt/yql/tests/sql/suites/optimizers/yql-17715_concat_sort_desc.cfg new file mode 100644 index 0000000000..bb349dd8ab --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-17715_concat_sort_desc.cfg @@ -0,0 +1 @@ +providers yt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-17715_concat_sort_desc.sql b/yt/yql/tests/sql/suites/optimizers/yql-17715_concat_sort_desc.sql new file mode 100644 index 0000000000..10cae73c84 --- /dev/null +++ b/yt/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/yt/yql/tests/sql/suites/optimizers/yql-18300-flatmap-over-extend.sql b/yt/yql/tests/sql/suites/optimizers/yql-18300-flatmap-over-extend.sql new file mode 100644 index 0000000000..7bd19b7bee --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-18300-flatmap-over-extend.sql @@ -0,0 +1,19 @@ +USE plato; + +insert into @tmp with truncate +select "dummy" as a, "1" as b, ["b", "s"] as data +order by a; + +commit; + + +SELECT a, id +FROM ( + SELECT + a, + ListExtend( + [String::AsciiToLower(b)], + ListMap(data, String::AsciiToLower) + ) AS joins + FROM @tmp +) FLATTEN LIST BY joins AS id; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-18408_filter_multiusage_pushdown.sql b/yt/yql/tests/sql/suites/optimizers/yql-18408_filter_multiusage_pushdown.sql new file mode 100644 index 0000000000..ad3afa8596 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-18408_filter_multiusage_pushdown.sql @@ -0,0 +1,84 @@ +use plato; +pragma AnsiOptionalAs; +pragma config.flags("OptimizerFlags", + "FieldSubsetEnableMultiusage", + "FilterPushdownEnableMultiusage", + "EarlyExpandSkipNull"); + + +$date_dim = select * from as_table([ + <|d_year:Just(1999), d_date_sk:Just(10001)|>, + <|d_year:Just(1999), d_date_sk:Just(10002)|>, + <|d_year:Just(1999), d_date_sk:Just(10003)|>, + <|d_year:Just(2000), d_date_sk:Just(10001)|>, + <|d_year:Just(2000), d_date_sk:Just(10002)|>, + <|d_year:Just(2000), d_date_sk:Just(10003)|>, +]); + +$customer = select * from as_table([ + <|c_customer_sk:Just(1), c_customer_id:Just(1), c_first_name:Just("Vasya"), c_last_name:Just("Ivanov"), c_preferred_cust_flag:Just("aaa"), c_birth_country:Just("RU"), c_login:Just("ivanov"), c_email_address:Just("foo@bar.com")|>, + <|c_customer_sk:Just(2), c_customer_id:Just(2), c_first_name:Just("Petya"), c_last_name:Just("Ivanov"), c_preferred_cust_flag:Just("bbb"), c_birth_country:Just("RU"), c_login:Just("ivanov1"), c_email_address:Just("foo1@bar.com")|>, + <|c_customer_sk:Just(3), c_customer_id:null, c_first_name:null, c_last_name:null, c_preferred_cust_flag:null, c_birth_country:null, c_login:Just("ivanov1"), c_email_address:Just("foo2@bar.com")|>, +]); + +$store_sales = select * from as_table([ + <|ss_sold_date_sk:Just(10001), ss_customer_sk:Just(1), ss_ext_list_price:Just(12345), ss_ext_discount_amt:Just(1234)|>, + <|ss_sold_date_sk:Just(10002), ss_customer_sk:Just(2), ss_ext_list_price:Just(12346), ss_ext_discount_amt:Just(123)|>, + <|ss_sold_date_sk:Just(10003), ss_customer_sk:Just(3), ss_ext_list_price:Just(12347), ss_ext_discount_amt:Just(1235)|>, +]); + +insert into @date_dim +select * from $date_dim; + +insert into @customer +select * from $customer; + +insert into @store_sales +select * from $store_sales; + +commit; + + +$year_total = ( + select customer.c_customer_id customer_id + ,customer.c_first_name customer_first_name + ,customer.c_last_name customer_last_name + ,customer.c_preferred_cust_flag customer_preferred_cust_flag + ,customer.c_birth_country customer_birth_country + ,customer.c_login customer_login + ,customer.c_email_address customer_email_address + ,date_dim.d_year dyear + ,sum(ss_ext_list_price-ss_ext_discount_amt) year_total + ,'s' sale_type + from @date_dim date_dim + cross join @store_sales store_sales + cross join @customer customer + where ss_sold_date_sk = d_date_sk and c_customer_sk = ss_customer_sk + group by customer.c_customer_id + ,customer.c_first_name + ,customer.c_last_name + ,customer.c_preferred_cust_flag + ,customer.c_birth_country + ,customer.c_login + ,customer.c_email_address + ,date_dim.d_year + ); + + + select + t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_birth_country + from $year_total t_s_firstyear + cross join $year_total t_s_secyear + where t_s_secyear.customer_id = t_s_firstyear.customer_id + and t_s_firstyear.sale_type = 's' + and t_s_secyear.sale_type = 's' + and t_s_firstyear.dyear = 1999 + and t_s_secyear.dyear = 1999+1 + order by t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_birth_country +limit 100; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-18733_no_filter_multiusage_pushdown.cfg b/yt/yql/tests/sql/suites/optimizers/yql-18733_no_filter_multiusage_pushdown.cfg new file mode 100644 index 0000000000..0474ee88ca --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-18733_no_filter_multiusage_pushdown.cfg @@ -0,0 +1,2 @@ +in Input input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-18733_no_filter_multiusage_pushdown.sql b/yt/yql/tests/sql/suites/optimizers/yql-18733_no_filter_multiusage_pushdown.sql new file mode 100644 index 0000000000..56f9ddfde9 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-18733_no_filter_multiusage_pushdown.sql @@ -0,0 +1,6 @@ +pragma config.flags("OptimizerFlags", "FilterPushdownEnableMultiusage"); +USE plato; + +$src = select distinct key from Input where value = 'ddd'; + +select * from Input where key = $src; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-2171_aggregate_desc_sort_and_extract.cfg b/yt/yql/tests/sql/suites/optimizers/yql-2171_aggregate_desc_sort_and_extract.cfg new file mode 100644 index 0000000000..208adc1e38 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-2171_aggregate_desc_sort_and_extract.cfg @@ -0,0 +1,4 @@ +in Input input_tutorial_users.txt +res result.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/optimizers/yql-2171_aggregate_desc_sort_and_extract.sql b/yt/yql/tests/sql/suites/optimizers/yql-2171_aggregate_desc_sort_and_extract.sql new file mode 100644 index 0000000000..0cce1f9889 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-2171_aggregate_desc_sort_and_extract.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +$data = (select cast(key as uint32) as age, cast(subkey as uint32) as region, value as name from Input); + +$top_users_by_age_dec = (SELECT + age_dec, + COUNT(1) as age_dec_count +FROM $data +GROUP BY age / 10 as age_dec +ORDER BY age_dec_count DESC +LIMIT 2); + +--INSERT INTO Output +SELECT age_dec, info.* FROM $top_users_by_age_dec AS top JOIN $data AS info ON top.age_dec = info.age / 10 ORDER BY name; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-2582_limit_for_join_input.cfg b/yt/yql/tests/sql/suites/optimizers/yql-2582_limit_for_join_input.cfg new file mode 100644 index 0000000000..a6e1f32b6e --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-2582_limit_for_join_input.cfg @@ -0,0 +1,3 @@ +in Input1 input3.txt +in Input2 input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-2582_limit_for_join_input.sql b/yt/yql/tests/sql/suites/optimizers/yql-2582_limit_for_join_input.sql new file mode 100644 index 0000000000..8887d13fcd --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-2582_limit_for_join_input.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +USE plato; + +$data = (SELECT * FROM Input1 WHERE key < "700" LIMIT 10); + +SELECT * FROM $data LIMIT 100; + +SELECT a.key AS key, b.subkey AS subkey, b.value AS value +FROM $data AS a +INNER JOIN Input2 AS b ON a.key = b.key +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-2582_limit_for_join_input_other.cfg b/yt/yql/tests/sql/suites/optimizers/yql-2582_limit_for_join_input_other.cfg new file mode 100644 index 0000000000..fd0ec5927e --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-2582_limit_for_join_input_other.cfg @@ -0,0 +1,3 @@ +in Input1 input_other.txt +in Input2 input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-2582_limit_for_join_input_other.sql b/yt/yql/tests/sql/suites/optimizers/yql-2582_limit_for_join_input_other.sql new file mode 100644 index 0000000000..a7c735a9ce --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-2582_limit_for_join_input_other.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$data = (SELECT * FROM Input1 LIMIT 10); + +SELECT key, subkey, _other["value"] FROM $data LIMIT 100; + +SELECT a.key AS key, b.subkey AS subkey, b.value AS value +FROM $data AS a +INNER JOIN Input2 AS b ON a.key = b.key +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-3455_filter_sorted.cfg b/yt/yql/tests/sql/suites/optimizers/yql-3455_filter_sorted.cfg new file mode 100644 index 0000000000..3f5bebb5a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-3455_filter_sorted.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-3455_filter_sorted.sql b/yt/yql/tests/sql/suites/optimizers/yql-3455_filter_sorted.sql new file mode 100644 index 0000000000..99d000cfa0 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-3455_filter_sorted.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +USE plato; + +SELECT + subkey +FROM Input +WHERE subkey < "100"; + +SELECT + value +FROM Input +LIMIT 3; + +SELECT + key +FROM + (SELECT * FROM Input ORDER BY -CAST(subkey as Int32) LIMIT 5) +; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-4240-aggregate_whole_struct.sql b/yt/yql/tests/sql/suites/optimizers/yql-4240-aggregate_whole_struct.sql new file mode 100644 index 0000000000..bf646532d4 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-4240-aggregate_whole_struct.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +use plato; + +$data = (select value as attr, key as urlBase, cast(subkey as int32) as dupsCount from Input0); + + SELECT + urlBase, + SUM(dupsCount) as allDocs, + MAX_BY(AsStruct(dupsCount as dupsCount, attr as attr), dupsCount) as best + FROM ( + SELECT urlBase, attr, count(*) as dupsCount + FROM $data + GROUP BY urlBase, attr + ) + GROUP BY urlBase + ORDER BY urlBase diff --git a/yt/yql/tests/sql/suites/optimizers/yql-5833-table_content.cfg b/yt/yql/tests/sql/suites/optimizers/yql-5833-table_content.cfg new file mode 100644 index 0000000000..0474ee88ca --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-5833-table_content.cfg @@ -0,0 +1,2 @@ +in Input input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-5833-table_content.sql b/yt/yql/tests/sql/suites/optimizers/yql-5833-table_content.sql new file mode 100644 index 0000000000..4ca893b99b --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-5833-table_content.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +use plato; + +$max_key = ( +select +max(key) +from Input +); + +select +cast(count(*) as String) || ' (' || cast($max_key as String) ||'/24)' +from Input +where key = $max_key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/yql-5978_fill_multi_usage.cfg b/yt/yql/tests/sql/suites/optimizers/yql-5978_fill_multi_usage.cfg new file mode 100644 index 0000000000..551221cf56 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-5978_fill_multi_usage.cfg @@ -0,0 +1,3 @@ +in Input input3.txt +out Output output.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-5978_fill_multi_usage.sql b/yt/yql/tests/sql/suites/optimizers/yql-5978_fill_multi_usage.sql new file mode 100644 index 0000000000..1671816eec --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-5978_fill_multi_usage.sql @@ -0,0 +1,29 @@ +/* postgres can not */ +USE plato; + +$ctl = ( + SELECT 1 AS join_col + , MAX(key) AS max + FROM Input + ); + +INSERT INTO Output WITH TRUNCATE +SELECT * FROM $ctl; + +$in = ( + SELECT 1 AS join_col + , key + , subkey + , value + FROM Input + ); + +SELECT + a.key AS key + , a.subkey AS subkey + , a.value AS value +FROM $in AS a +LEFT JOIN $ctl AS ctl + USING (join_col) +WHERE key < max +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/yql-6008_limit_after_map.cfg b/yt/yql/tests/sql/suites/optimizers/yql-6008_limit_after_map.cfg new file mode 100644 index 0000000000..66737248b8 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-6008_limit_after_map.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-6008_limit_after_map.sql b/yt/yql/tests/sql/suites/optimizers/yql-6008_limit_after_map.sql new file mode 100644 index 0000000000..53001bf902 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-6008_limit_after_map.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* multirun can not */ +USE plato; + +insert into Output +select * from plato.Input where value != "111" limit 3; + +commit; + +insert into Output +select * from plato.Input order by value; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-6038_direct_row.cfg b/yt/yql/tests/sql/suites/optimizers/yql-6038_direct_row.cfg new file mode 100644 index 0000000000..0474ee88ca --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-6038_direct_row.cfg @@ -0,0 +1,2 @@ +in Input input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-6038_direct_row.sql b/yt/yql/tests/sql/suites/optimizers/yql-6038_direct_row.sql new file mode 100644 index 0000000000..05c6779782 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-6038_direct_row.sql @@ -0,0 +1,25 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$queries_0 = (select distinct key from Input); + +$queries = (select TableRecordIndex() as j, key from $queries_0); + +$count = (select count(*) from $queries); + +$users_0 = ( + select ListFromRange(0, 3) as lst, TableRecordIndex() as idx, subkey from Input as t +); + +$users = ( + select + cast(Random(idx + x) as Uint64) % $count as j, + subkey + from $users_0 + flatten by lst as x +); + +select * +from $queries as queries join $users as users using(j) +order by key, subkey; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-6133_skip_deps.cfg b/yt/yql/tests/sql/suites/optimizers/yql-6133_skip_deps.cfg new file mode 100644 index 0000000000..e934bc69c9 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-6133_skip_deps.cfg @@ -0,0 +1,4 @@ +in Input input3.txt +out Output output.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/optimizers/yql-6133_skip_deps.sql b/yt/yql/tests/sql/suites/optimizers/yql-6133_skip_deps.sql new file mode 100644 index 0000000000..6d8c66947a --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-6133_skip_deps.sql @@ -0,0 +1,28 @@ +/* postgres can not */ +/* multirun can not */ +USE plato; + +$out = ( +SELECT + * +FROM + `Input` +WHERE + value != "111" +); + +$row_count = ( + SELECT + COUNT(*) + FROM + $out +); + +$needed_row = COALESCE(CAST(CAST($row_count as float) * 0.5 as Uint64), 1); + +INSERT INTO Output WITH TRUNCATE +SELECT + * +FROM $out ORDER BY key DESC +LIMIT 1 OFFSET $needed_row; + diff --git a/yt/yql/tests/sql/suites/optimizers/yql-7324_duplicate_arg.cfg b/yt/yql/tests/sql/suites/optimizers/yql-7324_duplicate_arg.cfg new file mode 100644 index 0000000000..0781bebbd5 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-7324_duplicate_arg.cfg @@ -0,0 +1,3 @@ +in Input input2.txt +res result.txt +udf strings_udf diff --git a/yt/yql/tests/sql/suites/optimizers/yql-7324_duplicate_arg.sql b/yt/yql/tests/sql/suites/optimizers/yql-7324_duplicate_arg.sql new file mode 100644 index 0000000000..df26751a74 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-7324_duplicate_arg.sql @@ -0,0 +1,23 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +$to_int = ($x) -> { return cast($x as Int32) }; +$to_in_list = ($col) -> { return ListMap(String::SplitToList($col, ","), $to_int) }; + +$input = ( + SELECT + $to_in_list(key) AS event_ids, + $to_in_list(subkey) AS test_ids + FROM + Input + WHERE + value = "aaa" +); + +SELECT + event_id, + test_ids +FROM + $input +FLATTEN BY event_ids AS event_id; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-7532_wrong_field_subset_for_calcoverwindow.sql b/yt/yql/tests/sql/suites/optimizers/yql-7532_wrong_field_subset_for_calcoverwindow.sql new file mode 100644 index 0000000000..5d8a388f94 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-7532_wrong_field_subset_for_calcoverwindow.sql @@ -0,0 +1,23 @@ +/* postgres can not */ +USE plato; + +INSERT INTO @source +SELECT Date('2019-03-04') AS `Date`, + 1l AS `Permalink`, + 1l AS `ClusterPermalink`, + False AS `IsHead`, + False AS `WasHead`; +COMMIT; + +SELECT + IF( + NOT `WasHead` AND NOT `IsHead`, + aggregate_list(AsStruct(`Permalink` AS `Permalink`, `Date` AS `Date`, `ClusterPermalink` AS ClusterPermalink)) OVER `w` + ) AS `Occurence` +FROM + @source +WINDOW `w` AS ( + PARTITION BY `Permalink` + ORDER BY `Date` +) + diff --git a/yt/yql/tests/sql/suites/optimizers/yql-7767_key_filter_with_view.cfg b/yt/yql/tests/sql/suites/optimizers/yql-7767_key_filter_with_view.cfg new file mode 100644 index 0000000000..7ed2bf2270 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-7767_key_filter_with_view.cfg @@ -0,0 +1,5 @@ +in ViewSource input4.txt +in Input1 sorted.txt +in Input2 input_view.txt +udf python3_udf +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-7767_key_filter_with_view.sql b/yt/yql/tests/sql/suites/optimizers/yql-7767_key_filter_with_view.sql new file mode 100644 index 0000000000..56c915118a --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-7767_key_filter_with_view.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +select + key, + value || "_y" ?? "" as value +from range("", "Input1", "Input2") +where key > "010" +order by key, value; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-8041-fuse_with_desc_map.cfg b/yt/yql/tests/sql/suites/optimizers/yql-8041-fuse_with_desc_map.cfg new file mode 100644 index 0000000000..0474ee88ca --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-8041-fuse_with_desc_map.cfg @@ -0,0 +1,2 @@ +in Input input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-8041-fuse_with_desc_map.sql b/yt/yql/tests/sql/suites/optimizers/yql-8041-fuse_with_desc_map.sql new file mode 100644 index 0000000000..2231c46900 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-8041-fuse_with_desc_map.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +USE plato; + +$i = ( + SELECT + cast(key as Double) as key, + value + FROM Input + WHERE key < "100" + ORDER BY key DESC + LIMIT 1000 +); + +select distinct key +from $i +where value != "" +order by key; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-8223_direct_row_and_skipnullmembers.cfg b/yt/yql/tests/sql/suites/optimizers/yql-8223_direct_row_and_skipnullmembers.cfg new file mode 100644 index 0000000000..676c920ddf --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-8223_direct_row_and_skipnullmembers.cfg @@ -0,0 +1,2 @@ +in Input opt_key.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-8223_direct_row_and_skipnullmembers.sql b/yt/yql/tests/sql/suites/optimizers/yql-8223_direct_row_and_skipnullmembers.sql new file mode 100644 index 0000000000..aaf5c9187e --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-8223_direct_row_and_skipnullmembers.sql @@ -0,0 +1,25 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma AnsiInForEmptyOrNullableItemsCollections; + +$x = ( + SELECT + TableName() AS path, + key, subkey, value + FROM CONCAT(Input, Input) +); +$y = ( + SELECT + t.path AS path, + t.key as key, + info.value as value + FROM $x AS t + INNER JOIN ( + SELECT key, subkey, value FROM Input + WHERE key != "" + ) AS info + USING (key) + WHERE t.key in ("023", "150") +); +select distinct path from $y; diff --git a/yt/yql/tests/sql/suites/optimizers/yql-8953_logical_fuse_with_table_props.cfg b/yt/yql/tests/sql/suites/optimizers/yql-8953_logical_fuse_with_table_props.cfg new file mode 100644 index 0000000000..0474ee88ca --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-8953_logical_fuse_with_table_props.cfg @@ -0,0 +1,2 @@ +in Input input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-8953_logical_fuse_with_table_props.sql b/yt/yql/tests/sql/suites/optimizers/yql-8953_logical_fuse_with_table_props.sql new file mode 100644 index 0000000000..610f2ef729 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-8953_logical_fuse_with_table_props.sql @@ -0,0 +1,10 @@ +use plato; + +select key, subkey, TableName() as name from Input +where value == 'q'; + +select key, count(*) as subkeys from ( + select distinct key, subkey from Input + where value == 'q' +) +group by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/yql-9297_publish_ytcopy.cfg b/yt/yql/tests/sql/suites/optimizers/yql-9297_publish_ytcopy.cfg new file mode 100644 index 0000000000..551221cf56 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-9297_publish_ytcopy.cfg @@ -0,0 +1,3 @@ +in Input input3.txt +out Output output.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql-9297_publish_ytcopy.sql b/yt/yql/tests/sql/suites/optimizers/yql-9297_publish_ytcopy.sql new file mode 100644 index 0000000000..d0a183b3ff --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql-9297_publish_ytcopy.sql @@ -0,0 +1,22 @@ +/* postgres can not */ +/* multirun can not */ +/* kikimr can not - table truncate */ +USE plato; + +INSERT INTO @a +SELECT * +FROM Input +WHERE key < "100" +ORDER BY key DESC; + +COMMIT; + +INSERT INTO Output +SELECT * +FROM @a +ORDER BY key DESC; + +COMMIT; + +SELECT * +FROM Output;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/optimizers/yql_5830_fuse_outer_with_extra_deps.cfg b/yt/yql/tests/sql/suites/optimizers/yql_5830_fuse_outer_with_extra_deps.cfg new file mode 100644 index 0000000000..0474ee88ca --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql_5830_fuse_outer_with_extra_deps.cfg @@ -0,0 +1,2 @@ +in Input input3.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql_5830_fuse_outer_with_extra_deps.sql b/yt/yql/tests/sql/suites/optimizers/yql_5830_fuse_outer_with_extra_deps.sql new file mode 100644 index 0000000000..4ab7aaf95e --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql_5830_fuse_outer_with_extra_deps.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +USE plato; + +$data = (select max_by(key, subkey) +from Input where value > "a"); + +select + a.key, + $data as max_key, + b.value +from Input as a +left join (select * from Input where key > "050") as b +on a.key = b.key +order by a.key; diff --git a/yt/yql/tests/sql/suites/optimizers/yql_6179_merge_chunks_of_outputs.cfg b/yt/yql/tests/sql/suites/optimizers/yql_6179_merge_chunks_of_outputs.cfg new file mode 100644 index 0000000000..1dc9a1e3a7 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql_6179_merge_chunks_of_outputs.cfg @@ -0,0 +1 @@ +in Input input0.txt diff --git a/yt/yql/tests/sql/suites/optimizers/yql_6179_merge_chunks_of_outputs.sql b/yt/yql/tests/sql/suites/optimizers/yql_6179_merge_chunks_of_outputs.sql new file mode 100644 index 0000000000..fcf21d7b36 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yql_6179_merge_chunks_of_outputs.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ +/* kikimr can not - yt pragma */ + +PRAGMA yt.MinPublishedAvgChunkSize="0"; +PRAGMA yt.MinTempAvgChunkSize="0"; + +USE plato; + +$i = (select subkey as s from Input where key = "112" limit 1); +$j = (select subkey as s from Input where key = "113" limit 1); + +select * from Input where cast(TableRecordIndex() as String) == $i or + cast(TableRecordIndex() as String) == $j; + diff --git a/yt/yql/tests/sql/suites/optimizers/yt_shuffle_by_keys.cfg b/yt/yql/tests/sql/suites/optimizers/yt_shuffle_by_keys.cfg new file mode 100644 index 0000000000..4ba549ce28 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yt_shuffle_by_keys.cfg @@ -0,0 +1,4 @@ +in Input input0.txt +providers yt + + diff --git a/yt/yql/tests/sql/suites/optimizers/yt_shuffle_by_keys.sql b/yt/yql/tests/sql/suites/optimizers/yt_shuffle_by_keys.sql new file mode 100644 index 0000000000..b4bf37fa34 --- /dev/null +++ b/yt/yql/tests/sql/suites/optimizers/yt_shuffle_by_keys.sql @@ -0,0 +1,23 @@ +--Test, that YT optimizer can rewrite ShuffleByKeys with PartitionsByKes +USE plato; + +$input = PROCESS Input; + +SELECT YQL::ShuffleByKeys( + $input, + ($_)->("dsdsa"), + ($_)->([1]) -- list + ); + +SELECT YQL::ShuffleByKeys( + $input, + ($_)->(12), + ($_)->(Just(2)) -- optional + ); + +SELECT YQL::ShuffleByKeys( + $input, + ($_)->(true), + ($_)->(YQL::ToStream([3])) -- stream + ); + diff --git a/yt/yql/tests/sql/suites/order_by/SortByOneField.cfg b/yt/yql/tests/sql/suites/order_by/SortByOneField.cfg new file mode 100644 index 0000000000..2dc97b5e95 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/SortByOneField.cfg @@ -0,0 +1 @@ +in Input columns.txt diff --git a/yt/yql/tests/sql/suites/order_by/SortByOneField.sql b/yt/yql/tests/sql/suites/order_by/SortByOneField.sql new file mode 100644 index 0000000000..192b522df4 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/SortByOneField.sql @@ -0,0 +1 @@ +select a from plato.Input order by a; diff --git a/yt/yql/tests/sql/suites/order_by/SortByOneFieldDesc.cfg b/yt/yql/tests/sql/suites/order_by/SortByOneFieldDesc.cfg new file mode 100644 index 0000000000..2dc97b5e95 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/SortByOneFieldDesc.cfg @@ -0,0 +1 @@ +in Input columns.txt diff --git a/yt/yql/tests/sql/suites/order_by/SortByOneFieldDesc.sql b/yt/yql/tests/sql/suites/order_by/SortByOneFieldDesc.sql new file mode 100644 index 0000000000..e269f50243 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/SortByOneFieldDesc.sql @@ -0,0 +1 @@ +select b from plato.Input order by b desc; diff --git a/yt/yql/tests/sql/suites/order_by/SortByTwoFields.cfg b/yt/yql/tests/sql/suites/order_by/SortByTwoFields.cfg new file mode 100644 index 0000000000..2dc97b5e95 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/SortByTwoFields.cfg @@ -0,0 +1 @@ +in Input columns.txt diff --git a/yt/yql/tests/sql/suites/order_by/SortByTwoFields.sql b/yt/yql/tests/sql/suites/order_by/SortByTwoFields.sql new file mode 100644 index 0000000000..0a1a137b35 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/SortByTwoFields.sql @@ -0,0 +1 @@ +select a, b from plato.Input order by a, b; diff --git a/yt/yql/tests/sql/suites/order_by/SortByTwoFieldsDesc.cfg b/yt/yql/tests/sql/suites/order_by/SortByTwoFieldsDesc.cfg new file mode 100644 index 0000000000..2dc97b5e95 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/SortByTwoFieldsDesc.cfg @@ -0,0 +1 @@ +in Input columns.txt diff --git a/yt/yql/tests/sql/suites/order_by/SortByTwoFieldsDesc.sql b/yt/yql/tests/sql/suites/order_by/SortByTwoFieldsDesc.sql new file mode 100644 index 0000000000..adc58f1da7 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/SortByTwoFieldsDesc.sql @@ -0,0 +1 @@ +select a, b from plato.Input order by a desc, b desc; diff --git a/yt/yql/tests/sql/suites/order_by/assume_cut_prefix.cfg b/yt/yql/tests/sql/suites/order_by/assume_cut_prefix.cfg new file mode 100644 index 0000000000..768acac67b --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/assume_cut_prefix.cfg @@ -0,0 +1,2 @@ +in Input input_sorted.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/assume_cut_prefix.sql b/yt/yql/tests/sql/suites/order_by/assume_cut_prefix.sql new file mode 100644 index 0000000000..8e81372d57 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/assume_cut_prefix.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +USE plato; + +insert into Output +select * from Input +assume order by key; diff --git a/yt/yql/tests/sql/suites/order_by/assume_over_input.cfg b/yt/yql/tests/sql/suites/order_by/assume_over_input.cfg new file mode 100644 index 0000000000..4ef8c714be --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/assume_over_input.cfg @@ -0,0 +1,2 @@ +in Input input2.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/assume_over_input.sql b/yt/yql/tests/sql/suites/order_by/assume_over_input.sql new file mode 100644 index 0000000000..f2a2611de7 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/assume_over_input.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +USE plato; + +INSERT INTO Output +SELECT * FROM Input ASSUME ORDER BY key, subkey, value; diff --git a/yt/yql/tests/sql/suites/order_by/assume_over_input_desc.cfg b/yt/yql/tests/sql/suites/order_by/assume_over_input_desc.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/assume_over_input_desc.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/assume_over_input_desc.sql b/yt/yql/tests/sql/suites/order_by/assume_over_input_desc.sql new file mode 100644 index 0000000000..252bd2ae91 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/assume_over_input_desc.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +/* hybridfile can not YQL-17743 */ +USE plato; + +insert into Output +select * from concat(`Input[#3]`, `Input[#0]`, `Input[#2]`) +assume order by key desc; diff --git a/yt/yql/tests/sql/suites/order_by/assume_with_filter.cfg b/yt/yql/tests/sql/suites/order_by/assume_with_filter.cfg new file mode 100644 index 0000000000..4ef8c714be --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/assume_with_filter.cfg @@ -0,0 +1,2 @@ +in Input input2.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/assume_with_filter.sql b/yt/yql/tests/sql/suites/order_by/assume_with_filter.sql new file mode 100644 index 0000000000..45463f1953 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/assume_with_filter.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +USE plato; + +INSERT INTO Output +SELECT + "3" || key as key, + subkey, + value +FROM Input +WHERE key >= "0" +ASSUME ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/order_by/assume_with_transform_desc.cfg b/yt/yql/tests/sql/suites/order_by/assume_with_transform_desc.cfg new file mode 100644 index 0000000000..4ef8c714be --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/assume_with_transform_desc.cfg @@ -0,0 +1,2 @@ +in Input input2.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/assume_with_transform_desc.sql b/yt/yql/tests/sql/suites/order_by/assume_with_transform_desc.sql new file mode 100644 index 0000000000..0c25b703e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/assume_with_transform_desc.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +/* hybridfile can not YQL-17743 */ +/* multirun can not */ +/* syntax version 1 */ +USE plato; + +INSERT INTO Output +SELECT + -(CAST(key as Int32) ?? 0) as key, + subkey, + value +FROM Input +ASSUME ORDER BY key DESC; diff --git a/yt/yql/tests/sql/suites/order_by/changed_sort_with_limit.cfg b/yt/yql/tests/sql/suites/order_by/changed_sort_with_limit.cfg new file mode 100644 index 0000000000..f9159f698b --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/changed_sort_with_limit.cfg @@ -0,0 +1,3 @@ +in Input input_sorted.txt +out Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/order_by/changed_sort_with_limit.sql b/yt/yql/tests/sql/suites/order_by/changed_sort_with_limit.sql new file mode 100644 index 0000000000..e69117f930 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/changed_sort_with_limit.sql @@ -0,0 +1,11 @@ +USE plato; + +INSERT INTO Output +SELECT + key, + '1' as subkey, + value || "a" as value +FROM Input +WHERE key < "100" +ORDER BY value +limit 3; diff --git a/yt/yql/tests/sql/suites/order_by/columns.txt.attr b/yt/yql/tests/sql/suites/order_by/columns.txt.attr new file mode 100644 index 0000000000..70da6cab1d --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/columns.txt.attr @@ -0,0 +1,3 @@ +{ + "_read_schema"=[{"type"="string";"name"="a"};{"type"="uint64";"name"="b"};{"type"="int64";"name"="c"};{"type"="int64";"name"="d"}] +} diff --git a/yt/yql/tests/sql/suites/order_by/complex_type.txt.attr b/yt/yql/tests/sql/suites/order_by/complex_type.txt.attr new file mode 100644 index 0000000000..42cec863fb --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/complex_type.txt.attr @@ -0,0 +1,13 @@ +{ + "_yql_row_spec" = { + "StrictSchema"=%true; + "Type"=["StructType";[ + ["value";["ListType";["DataType";"String"]]]; + ["key";["OptionalType";["DataType";"String"]]]; + ]]; + }; + "schema" = [ + {"required"=%false; "type"="any"; "name"="value"}; + {"required"=%false; "type"="string"; "name"="key"}; + ]; +} diff --git a/yt/yql/tests/sql/suites/order_by/decimals.txt.attr b/yt/yql/tests/sql/suites/order_by/decimals.txt.attr new file mode 100644 index 0000000000..1d13a3e179 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/decimals.txt.attr @@ -0,0 +1,8 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["a";["DataType";"String"]]; + ["b";["DataType";"Uint8"]]; + ["c";["DataType";"String"]]; + ["d";["DataType";"String"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/order_by/default.cfg b/yt/yql/tests/sql/suites/order_by/default.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/default.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/order_by/descending.txt.attr b/yt/yql/tests/sql/suites/order_by/descending.txt.attr new file mode 100644 index 0000000000..7024a9fc9c --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/descending.txt.attr @@ -0,0 +1,21 @@ +{ + "schema"=< + "strict" = %true; + "unique_keys" = %false + >[ + { + "name" = "key"; + "type" = "string"; + "sort_order" = "descending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "sort_order" = "descending"; + }; + { + "name" = "value"; + "type" = "string"; + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/order_by/extract_members_over_sort_desc.cfg b/yt/yql/tests/sql/suites/order_by/extract_members_over_sort_desc.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/extract_members_over_sort_desc.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/extract_members_over_sort_desc.sql b/yt/yql/tests/sql/suites/order_by/extract_members_over_sort_desc.sql new file mode 100644 index 0000000000..6e5b264216 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/extract_members_over_sort_desc.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* multirun can not */ +USE plato; + +$top = (select * from Input order by value desc limit 100); + +insert into Output +select key, value +from $top +order by value desc; + +select * from $top;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/order_by/input_sorted.txt.attr b/yt/yql/tests/sql/suites/order_by/input_sorted.txt.attr new file mode 100644 index 0000000000..aa00b0ede5 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/input_sorted.txt.attr @@ -0,0 +1,53 @@ +{ + "_yql_row_spec" = { + "SortMembers" = [ + "key"; + "subkey"; + ]; + "SortDirections" = [ + 1; + 1; + ]; + "UniqueKeys" = %false; + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ]; + "SortedByTypes" = [ + [ + "DataType"; + "String" + ]; + [ + "DataType"; + "String" + ]; + ]; + "SortedBy" = [ + "key"; + "subkey"; + ] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/order_by/limit.cfg b/yt/yql/tests/sql/suites/order_by/limit.cfg new file mode 100644 index 0000000000..86c772ae1c --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/limit.cfg @@ -0,0 +1 @@ +in Input read_schema.txt diff --git a/yt/yql/tests/sql/suites/order_by/limit.sql b/yt/yql/tests/sql/suites/order_by/limit.sql new file mode 100644 index 0000000000..eb87ba6968 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/limit.sql @@ -0,0 +1 @@ +select * from plato.Input order by a desc limit 3; diff --git a/yt/yql/tests/sql/suites/order_by/literal.cfg b/yt/yql/tests/sql/suites/order_by/literal.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/literal.sql b/yt/yql/tests/sql/suites/order_by/literal.sql new file mode 100644 index 0000000000..aac08c3fb8 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +use plato; + +insert into Output +select x +from (select ListFromRange(0,100) as x) +flatten by x +order by x; diff --git a/yt/yql/tests/sql/suites/order_by/literal_complex.cfg b/yt/yql/tests/sql/suites/order_by/literal_complex.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_complex.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/literal_complex.sql b/yt/yql/tests/sql/suites/order_by/literal_complex.sql new file mode 100644 index 0000000000..84bee87970 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_complex.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* hybridfile can not YQL-17743 */ +use plato; + +$list = AsList(AsStruct(1 as a, "2" as b, "3" as c), AsStruct(4 as a, "5" as b, "6" as c)); + +insert into Output +select * from as_table($list) +order by a desc, b, c desc; diff --git a/yt/yql/tests/sql/suites/order_by/literal_desc.cfg b/yt/yql/tests/sql/suites/order_by/literal_desc.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_desc.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/literal_desc.sql b/yt/yql/tests/sql/suites/order_by/literal_desc.sql new file mode 100644 index 0000000000..3aec7f5aa7 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_desc.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* hybridfile can not YQL-17743 */ +use plato; + +insert into Output +select x +from (select ListFromRange(0,100) as x) +flatten by x +order by x desc; diff --git a/yt/yql/tests/sql/suites/order_by/literal_empty_list_sort.cfg b/yt/yql/tests/sql/suites/order_by/literal_empty_list_sort.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_empty_list_sort.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/literal_empty_list_sort.sql b/yt/yql/tests/sql/suites/order_by/literal_empty_list_sort.sql new file mode 100644 index 0000000000..ed51a6a4c2 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_empty_list_sort.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +use plato; + +$list = ListCreate(Struct<key:String, subkey:String, value:String>); + +insert into Output +select * from as_table($list) order by key; diff --git a/yt/yql/tests/sql/suites/order_by/literal_single_item_sort.cfg b/yt/yql/tests/sql/suites/order_by/literal_single_item_sort.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_single_item_sort.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/literal_single_item_sort.sql b/yt/yql/tests/sql/suites/order_by/literal_single_item_sort.sql new file mode 100644 index 0000000000..a928a89fd1 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_single_item_sort.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +use plato; + +$t = AsList( + AsStruct(1 as key, 101 as value) +); + +insert into Output +select * from as_table($t) order by key; diff --git a/yt/yql/tests/sql/suites/order_by/literal_take_zero_sort.cfg b/yt/yql/tests/sql/suites/order_by/literal_take_zero_sort.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_take_zero_sort.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/literal_take_zero_sort.sql b/yt/yql/tests/sql/suites/order_by/literal_take_zero_sort.sql new file mode 100644 index 0000000000..18288547fc --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_take_zero_sort.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +use plato; + +$t = AsList( + AsStruct(1 as key, 101 as value), + AsStruct(2 as key, 34 as value), + AsStruct(4 as key, 22 as value), + AsStruct(6 as key, 256 as value), + AsStruct(7 as key, 111 as value) +); + +insert into Output +select * from as_table($t) order by key limit 0; diff --git a/yt/yql/tests/sql/suites/order_by/literal_with_assume.cfg b/yt/yql/tests/sql/suites/order_by/literal_with_assume.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_with_assume.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/literal_with_assume.sql b/yt/yql/tests/sql/suites/order_by/literal_with_assume.sql new file mode 100644 index 0000000000..5324313491 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_with_assume.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +use plato; + +$t = AsList( + AsStruct(1 as key, 101 as value), + AsStruct(2 as key, 34 as value), + AsStruct(4 as key, 22 as value), + AsStruct(6 as key, 256 as value), + AsStruct(7 as key, 111 as value) +); + +insert into Output +select * from as_table($t) assume order by key; diff --git a/yt/yql/tests/sql/suites/order_by/literal_with_assume_desc.cfg b/yt/yql/tests/sql/suites/order_by/literal_with_assume_desc.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_with_assume_desc.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/literal_with_assume_desc.sql b/yt/yql/tests/sql/suites/order_by/literal_with_assume_desc.sql new file mode 100644 index 0000000000..dd67c120a1 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/literal_with_assume_desc.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* multirun can not */ +/* hybridfile can not YQL-17743 */ +/* syntax version 1 */ +use plato; + +insert into Output +select x +from (select ListFromRange(10,0,-1) as x) +flatten by x +assume order by x desc; diff --git a/yt/yql/tests/sql/suites/order_by/native_desc_assume_with_transform.cfg b/yt/yql/tests/sql/suites/order_by/native_desc_assume_with_transform.cfg new file mode 100644 index 0000000000..e40a99f9ab --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/native_desc_assume_with_transform.cfg @@ -0,0 +1,3 @@ +in Input input2.txt +out Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/order_by/native_desc_assume_with_transform.sql b/yt/yql/tests/sql/suites/order_by/native_desc_assume_with_transform.sql new file mode 100644 index 0000000000..7f7ea25d54 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/native_desc_assume_with_transform.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +USE plato; +pragma yt.UseNativeDescSort; + +INSERT INTO Output +SELECT + -(CAST(key as Int32) ?? 0) as key, + subkey, + value +FROM Input +ASSUME ORDER BY key DESC; diff --git a/yt/yql/tests/sql/suites/order_by/native_desc_publish.cfg b/yt/yql/tests/sql/suites/order_by/native_desc_publish.cfg new file mode 100644 index 0000000000..fccca71d35 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/native_desc_publish.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/order_by/native_desc_publish.sql b/yt/yql/tests/sql/suites/order_by/native_desc_publish.sql new file mode 100644 index 0000000000..18bbffc0d6 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/native_desc_publish.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +use plato; +pragma yt.UseNativeDescSort; + +insert into Output +select * from Input +order by key desc; + +insert into Output +select * from Input +order by key desc; diff --git a/yt/yql/tests/sql/suites/order_by/native_desc_sort-over_sorted.cfg b/yt/yql/tests/sql/suites/order_by/native_desc_sort-over_sorted.cfg new file mode 100644 index 0000000000..1a2a7d1afc --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/native_desc_sort-over_sorted.cfg @@ -0,0 +1,3 @@ +in Input descending.txt +out Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/order_by/native_desc_sort.cfg b/yt/yql/tests/sql/suites/order_by/native_desc_sort.cfg new file mode 100644 index 0000000000..fccca71d35 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/native_desc_sort.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/order_by/native_desc_sort.sql b/yt/yql/tests/sql/suites/order_by/native_desc_sort.sql new file mode 100644 index 0000000000..5f8292ae08 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/native_desc_sort.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +use plato; +pragma yt.UseNativeDescSort; + +insert into Output +select * from Input +order by key desc; diff --git a/yt/yql/tests/sql/suites/order_by/native_desc_sort_calc.cfg b/yt/yql/tests/sql/suites/order_by/native_desc_sort_calc.cfg new file mode 100644 index 0000000000..fccca71d35 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/native_desc_sort_calc.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/order_by/native_desc_sort_calc.sql b/yt/yql/tests/sql/suites/order_by/native_desc_sort_calc.sql new file mode 100644 index 0000000000..3501a154d5 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/native_desc_sort_calc.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +use plato; +pragma yt.UseNativeDescSort; + +insert into Output +select * from Input +order by key || subkey desc, key desc; diff --git a/yt/yql/tests/sql/suites/order_by/native_desc_sort_with_limit.cfg b/yt/yql/tests/sql/suites/order_by/native_desc_sort_with_limit.cfg new file mode 100644 index 0000000000..fccca71d35 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/native_desc_sort_with_limit.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/order_by/native_desc_sort_with_limit.sql b/yt/yql/tests/sql/suites/order_by/native_desc_sort_with_limit.sql new file mode 100644 index 0000000000..6d4be0774b --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/native_desc_sort_with_limit.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +use plato; +pragma yt.UseNativeDescSort; + +insert into Output +select * from Input +order by key, subkey desc limit 3; diff --git a/yt/yql/tests/sql/suites/order_by/order_by_dot_column.sql b/yt/yql/tests/sql/suites/order_by/order_by_dot_column.sql new file mode 100644 index 0000000000..b844b33900 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_dot_column.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +PRAGMA DisableSimpleColumns; +SELECT 100500 as magic, t.* FROM plato.Input as t ORDER BY `t.subkey` DESC diff --git a/yt/yql/tests/sql/suites/order_by/order_by_dynum.sql b/yt/yql/tests/sql/suites/order_by/order_by_dynum.sql new file mode 100644 index 0000000000..75b083db2b --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_dynum.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* syntax version 1 */ +SELECT * FROM plato.Input ORDER BY CAST(key AS DyNumber); diff --git a/yt/yql/tests/sql/suites/order_by/order_by_dynum_desc.sql b/yt/yql/tests/sql/suites/order_by/order_by_dynum_desc.sql new file mode 100644 index 0000000000..4229b9ccf3 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_dynum_desc.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +/* syntax version 1 */ +SELECT * FROM plato.Input ORDER BY CAST(key AS DyNumber) DESC; + diff --git a/yt/yql/tests/sql/suites/order_by/order_by_expr.cfg b/yt/yql/tests/sql/suites/order_by/order_by_expr.cfg new file mode 100644 index 0000000000..c7e99df4d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_expr.cfg @@ -0,0 +1 @@ +in Input input_expr.txt diff --git a/yt/yql/tests/sql/suites/order_by/order_by_expr.sql b/yt/yql/tests/sql/suites/order_by/order_by_expr.sql new file mode 100644 index 0000000000..ec5b1999e3 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_expr.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input as i order by cast(i.key as uint32) * cast(subkey as uint32) LIMIT 3; diff --git a/yt/yql/tests/sql/suites/order_by/order_by_expr_mul_cols.cfg b/yt/yql/tests/sql/suites/order_by/order_by_expr_mul_cols.cfg new file mode 100644 index 0000000000..c7e99df4d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_expr_mul_cols.cfg @@ -0,0 +1 @@ +in Input input_expr.txt diff --git a/yt/yql/tests/sql/suites/order_by/order_by_expr_mul_cols.sql b/yt/yql/tests/sql/suites/order_by/order_by_expr_mul_cols.sql new file mode 100644 index 0000000000..221cd5b9ee --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_expr_mul_cols.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select i.key, i.subkey from plato.Input as i order by cast(subkey as uint32), cast(i.key as uint32) * cast(i.subkey as uint32) desc LIMIT 3 OFFSET 4; diff --git a/yt/yql/tests/sql/suites/order_by/order_by_expr_over_sorted_table.cfg b/yt/yql/tests/sql/suites/order_by/order_by_expr_over_sorted_table.cfg new file mode 100644 index 0000000000..fb5b1cca95 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_expr_over_sorted_table.cfg @@ -0,0 +1,2 @@ +in Input sorted_table1.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/order_by/order_by_expr_over_sorted_table.sql b/yt/yql/tests/sql/suites/order_by/order_by_expr_over_sorted_table.sql new file mode 100644 index 0000000000..34d9290737 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_expr_over_sorted_table.sql @@ -0,0 +1,2 @@ +select key, value from plato.Input +order by key, String::SplitToList(value, "$", 2 as Limit)[0] diff --git a/yt/yql/tests/sql/suites/order_by/order_by_expr_simple.cfg b/yt/yql/tests/sql/suites/order_by/order_by_expr_simple.cfg new file mode 100644 index 0000000000..c7e99df4d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_expr_simple.cfg @@ -0,0 +1 @@ +in Input input_expr.txt diff --git a/yt/yql/tests/sql/suites/order_by/order_by_expr_simple.sql b/yt/yql/tests/sql/suites/order_by/order_by_expr_simple.sql new file mode 100644 index 0000000000..a4a7d6ba92 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_expr_simple.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input as i order by (cast(i.key as uint32) / 10) % 10 desc, subkey; diff --git a/yt/yql/tests/sql/suites/order_by/order_by_expr_with_deps.sql b/yt/yql/tests/sql/suites/order_by/order_by_expr_with_deps.sql new file mode 100644 index 0000000000..581b50d142 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_expr_with_deps.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +$list = select ListSort(aggregate_list(key)) from Input; + +SELECT * FROM Input +ORDER BY ListIndexOf($list ?? [], key); diff --git a/yt/yql/tests/sql/suites/order_by/order_by_list_of_strings.cfg b/yt/yql/tests/sql/suites/order_by/order_by_list_of_strings.cfg new file mode 100644 index 0000000000..14e04a5467 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_list_of_strings.cfg @@ -0,0 +1 @@ +in Input complex_type.txt diff --git a/yt/yql/tests/sql/suites/order_by/order_by_list_of_strings.sql b/yt/yql/tests/sql/suites/order_by/order_by_list_of_strings.sql new file mode 100644 index 0000000000..26d888f98a --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_list_of_strings.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +use plato; +select key,value from Input order by value limit 1 diff --git a/yt/yql/tests/sql/suites/order_by/order_by_missing_project_column.sql b/yt/yql/tests/sql/suites/order_by/order_by_missing_project_column.sql new file mode 100644 index 0000000000..56b49f972f --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_missing_project_column.sql @@ -0,0 +1,11 @@ +use plato; + +select subkey from Input order by key, value; +select subkey from Input order by "x" || key, value; +select subkey from Input order by key || "x" limit 3; + +select subkey from Input as a order by "x" || key, a.value limit 3; +select subkey from Input as a order by a.key, value limit 1; +select subkey from Input as a order by key, value limit 2; + +select subkey, key from Input order by key, value; diff --git a/yt/yql/tests/sql/suites/order_by/order_by_mul_columns.sql b/yt/yql/tests/sql/suites/order_by/order_by_mul_columns.sql new file mode 100644 index 0000000000..223e3f50fe --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_mul_columns.sql @@ -0,0 +1 @@ +select key, subkey, value from plato.Input order by value, subkey;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/order_by/order_by_num_key_and_subkey.cfg b/yt/yql/tests/sql/suites/order_by/order_by_num_key_and_subkey.cfg new file mode 100644 index 0000000000..96f3ef0db7 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_num_key_and_subkey.cfg @@ -0,0 +1 @@ +in Input avg_and_sum_by_value.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/order_by/order_by_num_key_and_subkey.sql b/yt/yql/tests/sql/suites/order_by/order_by_num_key_and_subkey.sql new file mode 100644 index 0000000000..6a28c09401 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_num_key_and_subkey.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select cast(key as int) as key, subkey, value from plato.Input order by key, subkey;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/order_by/order_by_num_key_and_subkey_desc.cfg b/yt/yql/tests/sql/suites/order_by/order_by_num_key_and_subkey_desc.cfg new file mode 100644 index 0000000000..96f3ef0db7 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_num_key_and_subkey_desc.cfg @@ -0,0 +1 @@ +in Input avg_and_sum_by_value.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/order_by/order_by_num_key_and_subkey_desc.sql b/yt/yql/tests/sql/suites/order_by/order_by_num_key_and_subkey_desc.sql new file mode 100644 index 0000000000..0d49cf05d7 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_num_key_and_subkey_desc.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select coalesce(cast(key as int), 0) as key, subkey, value from plato.Input order by key desc, subkey;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/order_by/order_by_tablepath_column.cfg b/yt/yql/tests/sql/suites/order_by/order_by_tablepath_column.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_tablepath_column.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/order_by/order_by_tablepath_column.sql b/yt/yql/tests/sql/suites/order_by/order_by_tablepath_column.sql new file mode 100644 index 0000000000..cc9ffeba99 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_tablepath_column.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +use plato; +select * +from Input +order by TablePath(), key; diff --git a/yt/yql/tests/sql/suites/order_by/order_by_tablerecord_column.cfg b/yt/yql/tests/sql/suites/order_by/order_by_tablerecord_column.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_tablerecord_column.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/order_by/order_by_tablerecord_column.sql b/yt/yql/tests/sql/suites/order_by/order_by_tablerecord_column.sql new file mode 100644 index 0000000000..834527a065 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_tablerecord_column.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; +select * +from Input +order by TableRecordIndex(); diff --git a/yt/yql/tests/sql/suites/order_by/order_by_tablerow_column.cfg b/yt/yql/tests/sql/suites/order_by/order_by_tablerow_column.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_tablerow_column.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/order_by/order_by_tablerow_column.sql b/yt/yql/tests/sql/suites/order_by/order_by_tablerow_column.sql new file mode 100644 index 0000000000..950374674c --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_tablerow_column.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +use plato; +select key +from Input +order by TableRow().key; diff --git a/yt/yql/tests/sql/suites/order_by/order_by_tuple.sql b/yt/yql/tests/sql/suites/order_by/order_by_tuple.sql new file mode 100644 index 0000000000..8e33db8a2c --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_tuple.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +USE plato; + +select * from ( + select key, AsTuple(key, subkey) as tpl from Input +) order by tpl; diff --git a/yt/yql/tests/sql/suites/order_by/order_by_tuple_and_member.sql b/yt/yql/tests/sql/suites/order_by/order_by_tuple_and_member.sql new file mode 100644 index 0000000000..fecbcc7de3 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_tuple_and_member.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +USE plato; + +select * from ( + select key, AsTuple(key, subkey) as tpl from Input +) order by key, tpl; diff --git a/yt/yql/tests/sql/suites/order_by/order_by_tuple_expr.sql b/yt/yql/tests/sql/suites/order_by/order_by_tuple_expr.sql new file mode 100644 index 0000000000..cb2b0b538b --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_tuple_expr.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +USE plato; + +$keys = ($key) -> { + return AsTuple($key, $key); +}; + +select * from Input order by $keys(value); diff --git a/yt/yql/tests/sql/suites/order_by/order_by_udf.cfg b/yt/yql/tests/sql/suites/order_by/order_by_udf.cfg new file mode 100644 index 0000000000..677bf9308b --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_udf.cfg @@ -0,0 +1,2 @@ +in Input input2.txt +udf math_udf diff --git a/yt/yql/tests/sql/suites/order_by/order_by_udf.sql b/yt/yql/tests/sql/suites/order_by/order_by_udf.sql new file mode 100644 index 0000000000..998abf210b --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_udf.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +SELECT * +FROM plato.Input +ORDER BY Math::Pow(cast(subkey as double), 2); diff --git a/yt/yql/tests/sql/suites/order_by/order_by_udf_duo.cfg b/yt/yql/tests/sql/suites/order_by/order_by_udf_duo.cfg new file mode 100644 index 0000000000..677bf9308b --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_udf_duo.cfg @@ -0,0 +1,2 @@ +in Input input2.txt +udf math_udf diff --git a/yt/yql/tests/sql/suites/order_by/order_by_udf_duo.sql b/yt/yql/tests/sql/suites/order_by/order_by_udf_duo.sql new file mode 100644 index 0000000000..17032c0605 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_udf_duo.sql @@ -0,0 +1,5 @@ +/* postgres can not */ + +SELECT * +FROM plato.Input +ORDER BY Math::Pow(cast(subkey as double), 2), Math::Pow(cast(key as double), 2); diff --git a/yt/yql/tests/sql/suites/order_by/order_by_value_desc.sql b/yt/yql/tests/sql/suites/order_by/order_by_value_desc.sql new file mode 100644 index 0000000000..df3e4d9be0 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_by_value_desc.sql @@ -0,0 +1 @@ +select key, subkey, value from plato.Input order by value desc;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/order_by/order_with_null.sql b/yt/yql/tests/sql/suites/order_by/order_with_null.sql new file mode 100644 index 0000000000..27171419c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/order_with_null.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +use plato; + +$input = ( +select null as key, "0" as subkey, "kkk" as value +union all +select * from Input +); + +select * from $input order by key asc; +select * from $input order by key desc; diff --git a/yt/yql/tests/sql/suites/order_by/ordered_fill.cfg b/yt/yql/tests/sql/suites/order_by/ordered_fill.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/ordered_fill.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/ordered_fill.sql b/yt/yql/tests/sql/suites/order_by/ordered_fill.sql new file mode 100644 index 0000000000..97ce0503f3 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/ordered_fill.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +/* multirun can not */ +use plato; + +insert into Output +select x from (select ListFromRange(0,100) as x) flatten by x order by x; + +commit; + +select * from Output where x=50;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/order_by/presort_order_by_table.sql b/yt/yql/tests/sql/suites/order_by/presort_order_by_table.sql new file mode 100644 index 0000000000..9929a31017 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/presort_order_by_table.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +use plato; + +$list = AsList( + AsList(3,1), + AsList(1,1), + AsList(1), + ); + +insert into @foo +select x from (select $list as x) +flatten by x; +commit; +select * from @foo +order by x asc diff --git a/yt/yql/tests/sql/suites/order_by/read_schema.txt.attr b/yt/yql/tests/sql/suites/order_by/read_schema.txt.attr new file mode 100644 index 0000000000..3176be619e --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/read_schema.txt.attr @@ -0,0 +1,3 @@ +{ + "_read_schema"=[{"type"="int64";"name"="a"};{"type"="uint64";"name"="b"};{"type"="double";"name"="c"};{"type"="string";"name"="d"};{"type"="boolean";name="e"};{"type"="any";"name"="f"}] +} diff --git a/yt/yql/tests/sql/suites/order_by/singular.sql b/yt/yql/tests/sql/suites/order_by/singular.sql new file mode 100644 index 0000000000..8c22ab69f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/singular.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* syntax version 1 */ +/* hybridfile can not YQL-17743 */ +use plato; + +insert into @foo +select void() as x,null as y,[] as z,{} as w +order by x,y,z,w; + +commit; + +select * from @foo; diff --git a/yt/yql/tests/sql/suites/order_by/sort.cfg b/yt/yql/tests/sql/suites/order_by/sort.cfg new file mode 100644 index 0000000000..c3d8fbb039 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/sort.cfg @@ -0,0 +1 @@ +in Input unsorted.txt diff --git a/yt/yql/tests/sql/suites/order_by/sort.sql b/yt/yql/tests/sql/suites/order_by/sort.sql new file mode 100644 index 0000000000..37ceaff6de --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/sort.sql @@ -0,0 +1 @@ +select * from plato.Input order by d, a, b, c; diff --git a/yt/yql/tests/sql/suites/order_by/sort_decimals.cfg b/yt/yql/tests/sql/suites/order_by/sort_decimals.cfg new file mode 100644 index 0000000000..1d2a5c3bce --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/sort_decimals.cfg @@ -0,0 +1 @@ +in Input decimals.txt diff --git a/yt/yql/tests/sql/suites/order_by/sort_decimals.sql b/yt/yql/tests/sql/suites/order_by/sort_decimals.sql new file mode 100644 index 0000000000..5c250e1658 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/sort_decimals.sql @@ -0,0 +1,4 @@ +select * from plato.Input order by Cast(c as Decimal(13,3)); +select * from plato.Input order by Cast(c as Decimal(13,3)) desc; +select * from plato.Input order by Cast(d as Decimal(5,1)); +select * from plato.Input order by Cast(d as Decimal(5,1)) desc; diff --git a/yt/yql/tests/sql/suites/order_by/sort_simple.cfg b/yt/yql/tests/sql/suites/order_by/sort_simple.cfg new file mode 100644 index 0000000000..c3d8fbb039 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/sort_simple.cfg @@ -0,0 +1 @@ +in Input unsorted.txt diff --git a/yt/yql/tests/sql/suites/order_by/sort_simple.sql b/yt/yql/tests/sql/suites/order_by/sort_simple.sql new file mode 100644 index 0000000000..8db149f8f4 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/sort_simple.sql @@ -0,0 +1,6 @@ +select a from plato.Input order by a; +select b from plato.Input order by b; +select c from plato.Input order by c; +select d from plato.Input order by d; +select e from plato.Input order by e; + diff --git a/yt/yql/tests/sql/suites/order_by/sort_with_take.cfg b/yt/yql/tests/sql/suites/order_by/sort_with_take.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/sort_with_take.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/sort_with_take.sql b/yt/yql/tests/sql/suites/order_by/sort_with_take.sql new file mode 100644 index 0000000000..f728aecb00 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/sort_with_take.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +USE plato; + +insert into Output with truncate +select * from (select * from Input limit 3) +order by key; diff --git a/yt/yql/tests/sql/suites/order_by/sort_with_take_limit.cfg b/yt/yql/tests/sql/suites/order_by/sort_with_take_limit.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/sort_with_take_limit.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/order_by/sort_with_take_limit.sql b/yt/yql/tests/sql/suites/order_by/sort_with_take_limit.sql new file mode 100644 index 0000000000..a7b4e757e7 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/sort_with_take_limit.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +USE plato; + +insert into Output with truncate +select * from (select * from Input limit 3) +order by key limit 2; diff --git a/yt/yql/tests/sql/suites/order_by/sorted_table1.txt.attr b/yt/yql/tests/sql/suites/order_by/sorted_table1.txt.attr new file mode 100644 index 0000000000..ba8118899c --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/sorted_table1.txt.attr @@ -0,0 +1,12 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} + diff --git a/yt/yql/tests/sql/suites/order_by/union_all.cfg b/yt/yql/tests/sql/suites/order_by/union_all.cfg new file mode 100644 index 0000000000..de341b36d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/union_all.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/order_by/union_all.sql b/yt/yql/tests/sql/suites/order_by/union_all.sql new file mode 100644 index 0000000000..fce8866ddf --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/union_all.sql @@ -0,0 +1,21 @@ +USE plato; + +pragma DqEngine = "disable"; + +DEFINE SUBQUERY $sample($product_type) AS + + SELECT * + FROM Input + WHERE subkey = $product_type + ORDER BY key + LIMIT 10; + +END DEFINE; + +$list = ["a", "b"]; +$s = SubqueryUnionAllFor($list, $sample); +$concated = PROCESS $s(); + +INSERT INTO Output +SELECT * +FROM $concated
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/order_by/unsorted.txt.attr b/yt/yql/tests/sql/suites/order_by/unsorted.txt.attr new file mode 100644 index 0000000000..3176be619e --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/unsorted.txt.attr @@ -0,0 +1,3 @@ +{ + "_read_schema"=[{"type"="int64";"name"="a"};{"type"="uint64";"name"="b"};{"type"="double";"name"="c"};{"type"="string";"name"="d"};{"type"="boolean";name="e"};{"type"="any";"name"="f"}] +} diff --git a/yt/yql/tests/sql/suites/order_by/warn_offset_wo_sort.cfg b/yt/yql/tests/sql/suites/order_by/warn_offset_wo_sort.cfg new file mode 100644 index 0000000000..8300ccd161 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/warn_offset_wo_sort.cfg @@ -0,0 +1 @@ +in Input input_sorted.txt diff --git a/yt/yql/tests/sql/suites/order_by/warn_offset_wo_sort.sql b/yt/yql/tests/sql/suites/order_by/warn_offset_wo_sort.sql new file mode 100644 index 0000000000..7e7f146553 --- /dev/null +++ b/yt/yql/tests/sql/suites/order_by/warn_offset_wo_sort.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +USE plato; + +select * from Input +limit 5 offset 10; diff --git a/yt/yql/tests/sql/suites/params/complex_yson.cfg b/yt/yql/tests/sql/suites/params/complex_yson.cfg new file mode 100644 index 0000000000..bee766d276 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/complex_yson.cfg @@ -0,0 +1 @@ +param $x p_yson2.json
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/complex_yson.sql b/yt/yql/tests/sql/suites/params/complex_yson.sql new file mode 100644 index 0000000000..31c65f574e --- /dev/null +++ b/yt/yql/tests/sql/suites/params/complex_yson.sql @@ -0,0 +1,4 @@ +pragma yson.Strict; + +declare $x as Yson; +select ToBytes(Yson::SerializePretty($x)); diff --git a/yt/yql/tests/sql/suites/params/default.cfg b/yt/yql/tests/sql/suites/params/default.cfg new file mode 100644 index 0000000000..e68191f82c --- /dev/null +++ b/yt/yql/tests/sql/suites/params/default.cfg @@ -0,0 +1 @@ +in Input input.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_bool.json b/yt/yql/tests/sql/suites/params/p_bool.json new file mode 100644 index 0000000000..f32a5804e2 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_bool.json @@ -0,0 +1 @@ +true
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_date.json b/yt/yql/tests/sql/suites/params/p_date.json new file mode 100644 index 0000000000..00877b0f5d --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_date.json @@ -0,0 +1 @@ +"17563"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_datetime.json b/yt/yql/tests/sql/suites/params/p_datetime.json new file mode 100644 index 0000000000..38a1f5ac22 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_datetime.json @@ -0,0 +1 @@ +"1517498177"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_decimal.json b/yt/yql/tests/sql/suites/params/p_decimal.json new file mode 100644 index 0000000000..8640e06c7f --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_decimal.json @@ -0,0 +1 @@ +"-9876.12345"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_dict.json b/yt/yql/tests/sql/suites/params/p_dict.json new file mode 100644 index 0000000000..524df1fc93 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_dict.json @@ -0,0 +1 @@ +[["a1", "765"], ["a2", null]]
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_dict2.json b/yt/yql/tests/sql/suites/params/p_dict2.json new file mode 100644 index 0000000000..2545ff38f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_dict2.json @@ -0,0 +1 @@ +{"a1": "765", "a2": null}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_double.json b/yt/yql/tests/sql/suites/params/p_double.json new file mode 100644 index 0000000000..d37de39b8f --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_double.json @@ -0,0 +1 @@ +"-567.1234"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_int64.json b/yt/yql/tests/sql/suites/params/p_int64.json new file mode 100644 index 0000000000..45239526ac --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_int64.json @@ -0,0 +1 @@ +"-21"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_interval.json b/yt/yql/tests/sql/suites/params/p_interval.json new file mode 100644 index 0000000000..80444e5c5b --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_interval.json @@ -0,0 +1 @@ +"-2509261088556"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_json.json b/yt/yql/tests/sql/suites/params/p_json.json new file mode 100644 index 0000000000..b77a55d7d7 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_json.json @@ -0,0 +1 @@ +"{\"b\": 321}"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_list.json b/yt/yql/tests/sql/suites/params/p_list.json new file mode 100644 index 0000000000..966d2f232e --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_list.json @@ -0,0 +1 @@ +["a1", null, "a2"]
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_null.json b/yt/yql/tests/sql/suites/params/p_null.json new file mode 100644 index 0000000000..ec747fa47d --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_null.json @@ -0,0 +1 @@ +null
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_number_list.json b/yt/yql/tests/sql/suites/params/p_number_list.json new file mode 100644 index 0000000000..fc4de450de --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_number_list.json @@ -0,0 +1 @@ +["1", "2", "3"] diff --git a/yt/yql/tests/sql/suites/params/p_string.json b/yt/yql/tests/sql/suites/params/p_string.json new file mode 100644 index 0000000000..0f53da34fe --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_string.json @@ -0,0 +1 @@ +"Moscow!"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_string_bin.json b/yt/yql/tests/sql/suites/params/p_string_bin.json new file mode 100644 index 0000000000..bcd48de1af --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_string_bin.json @@ -0,0 +1 @@ +["AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w=="]
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_string_ru.json b/yt/yql/tests/sql/suites/params/p_string_ru.json new file mode 100644 index 0000000000..4cc3538906 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_string_ru.json @@ -0,0 +1 @@ +"Moscow Привет!"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_struct.json b/yt/yql/tests/sql/suites/params/p_struct.json new file mode 100644 index 0000000000..f4670c9c63 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_struct.json @@ -0,0 +1 @@ +{"a": "42", "b": "\u043f\u0438\u0443-\u043f\u0438\u0443"}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_timestamp.json b/yt/yql/tests/sql/suites/params/p_timestamp.json new file mode 100644 index 0000000000..f9655df825 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_timestamp.json @@ -0,0 +1 @@ +"1517498177034567"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_tuple1.json b/yt/yql/tests/sql/suites/params/p_tuple1.json new file mode 100644 index 0000000000..6da1e94df1 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_tuple1.json @@ -0,0 +1 @@ +["a1", "765"]
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_tuple2.json b/yt/yql/tests/sql/suites/params/p_tuple2.json new file mode 100644 index 0000000000..cbca0f6c6d --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_tuple2.json @@ -0,0 +1 @@ +["a2", null]
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_tzdate.json b/yt/yql/tests/sql/suites/params/p_tzdate.json new file mode 100644 index 0000000000..2754f54f59 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_tzdate.json @@ -0,0 +1 @@ +"2018-02-01,America/Los_Angeles"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_tzdatetime.json b/yt/yql/tests/sql/suites/params/p_tzdatetime.json new file mode 100644 index 0000000000..cd6da4aab5 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_tzdatetime.json @@ -0,0 +1 @@ +"2018-02-01T15:16:17,Europe/Moscow"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_tztimestamp.json b/yt/yql/tests/sql/suites/params/p_tztimestamp.json new file mode 100644 index 0000000000..da2fb8656c --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_tztimestamp.json @@ -0,0 +1 @@ +"2018-02-01T15:16:17.034567,GMT"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_uint64.json b/yt/yql/tests/sql/suites/params/p_uint64.json new file mode 100644 index 0000000000..3e71fa1475 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_uint64.json @@ -0,0 +1 @@ +"21"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_uuid.json b/yt/yql/tests/sql/suites/params/p_uuid.json new file mode 100644 index 0000000000..505d02b045 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_uuid.json @@ -0,0 +1 @@ +["AIQOVZvi1EGnFkRmVUQAAA=="]
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_variant1.json b/yt/yql/tests/sql/suites/params/p_variant1.json new file mode 100644 index 0000000000..7c32328715 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_variant1.json @@ -0,0 +1 @@ +["0", "abc"]
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_variant2.json b/yt/yql/tests/sql/suites/params/p_variant2.json new file mode 100644 index 0000000000..8d709a2855 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_variant2.json @@ -0,0 +1 @@ +["1", "789"]
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_variant3.json b/yt/yql/tests/sql/suites/params/p_variant3.json new file mode 100644 index 0000000000..1240fbbeb4 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_variant3.json @@ -0,0 +1 @@ +["0", "hehe"]
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_variant4.json b/yt/yql/tests/sql/suites/params/p_variant4.json new file mode 100644 index 0000000000..b614005aa3 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_variant4.json @@ -0,0 +1 @@ +["1", "119"]
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_variant5.json b/yt/yql/tests/sql/suites/params/p_variant5.json new file mode 100644 index 0000000000..73a83a951a --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_variant5.json @@ -0,0 +1 @@ +[["a"], "foo"]
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_yson.json b/yt/yql/tests/sql/suites/params/p_yson.json new file mode 100644 index 0000000000..2f5ffff984 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_yson.json @@ -0,0 +1 @@ +{"a": 123}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/params/p_yson2.json b/yt/yql/tests/sql/suites/params/p_yson2.json new file mode 100644 index 0000000000..fc31230362 --- /dev/null +++ b/yt/yql/tests/sql/suites/params/p_yson2.json @@ -0,0 +1,101 @@ +# import yt.yson as yson +# bin_str = ''.join(map(chr, xrange(0, 255))) +# s = yson.YsonString(bin_str) +# s.attributes = yson.YsonMap({ +# 'a1': yson.YsonString('oops'), +# 'a2': yson.YsonList([yson.YsonUint64(876), yson.YsonString('boom')]) +# }) +# +# y = yson.YsonMap( +# { +# 'a': yson.YsonBoolean(True), +# 'b': yson.YsonBoolean(False), +# 'c': yson.YsonString('hello Москва'), +# 'd': s, +# 'x': yson.YsonDouble(-1.34), +# 'y': yson.YsonDouble(float('nan')), +# 'v': yson.YsonEntity(), +# '$z': yson.YsonDouble(float('-inf')), +# '$t': yson.YsonDouble(float('inf')), +# '$$$e': yson.YsonMap( +# { +# '$f': yson.YsonString('hehe'), +# '$$g': yson.YsonList([yson.YsonEntity(), yson.YsonInt64(-12345), yson.YsonUint64(9876)]) +# } +# ) +# } +# ) +# +# x = YqlParameterValueBuilder.make_yson(y) +# t = json.dumps(x.to_json(), sort_keys=True, indent=4) +# import sys +# sys.stderr.write(t) + +{ + "$$$$e": { + "$$$g": [ + null, + { + "$type": "int64", + "$value": "-12345" + }, + { + "$type": "uint64", + "$value": "9876" + } + ], + "$$f": { + "$type": "string", + "$value": "hehe" + } + }, + "$$t": { + "$type": "double", + "$value": "inf" + }, + "$$z": { + "$type": "double", + "$value": "-inf" + }, + "a": { + "$type": "boolean", + "$value": "true" + }, + "b": { + "$type": "boolean", + "$value": "false" + }, + "c": { + "$type": "string", + "$value": "hello \u00d0\u009c\u00d0\u00be\u00d1\u0081\u00d0\u00ba\u00d0\u00b2\u00d0\u00b0" + }, + "d": { + "$attributes": { + "a1": { + "$type": "string", + "$value": "oops" + }, + "a2": [ + { + "$type": "uint64", + "$value": "876" + }, + { + "$type": "string", + "$value": "boom" + } + ] + }, + "$type": "string", + "$value": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007f\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f\u00a0\u00a1\u00a2\u00a3\u00a4\u00a5\u00a6\u00a7\u00a8\u00a9\u00aa\u00ab\u00ac\u00ad\u00ae\u00af\u00b0\u00b1\u00b2\u00b3\u00b4\u00b5\u00b6\u00b7\u00b8\u00b9\u00ba\u00bb\u00bc\u00bd\u00be\u00bf\u00c0\u00c1\u00c2\u00c3\u00c4\u00c5\u00c6\u00c7\u00c8\u00c9\u00ca\u00cb\u00cc\u00cd\u00ce\u00cf\u00d0\u00d1\u00d2\u00d3\u00d4\u00d5\u00d6\u00d7\u00d8\u00d9\u00da\u00db\u00dc\u00dd\u00de\u00df\u00e0\u00e1\u00e2\u00e3\u00e4\u00e5\u00e6\u00e7\u00e8\u00e9\u00ea\u00eb\u00ec\u00ed\u00ee\u00ef\u00f0\u00f1\u00f2\u00f3\u00f4\u00f5\u00f6\u00f7\u00f8\u00f9\u00fa\u00fb\u00fc\u00fd\u00fe" + }, + "v": null, + "x": { + "$type": "double", + "$value": "-1.34" + }, + "y": { + "$type": "double", + "$value": "nan" + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg-tpcds/call_center.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/call_center.txt.attr new file mode 100644 index 0000000000..397a5b6105 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/call_center.txt.attr @@ -0,0 +1,37 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["cc_call_center_sk";["PgType";"int4";];]; + ["cc_call_center_id";["PgType";"text";];]; + ["cc_rec_start_date";["PgType";"date";];]; + ["cc_rec_end_date";["PgType";"date";];]; + ["cc_closed_date_sk";["PgType";"int4";];]; + ["cc_open_date_sk";["PgType";"int4";];]; + ["cc_name";["PgType";"text";];]; + ["cc_class";["PgType";"text";];]; + ["cc_employees";["PgType";"int4";];]; + ["cc_sq_ft";["PgType";"int4";];]; + ["cc_hours";["PgType";"text";];]; + ["cc_manager";["PgType";"text";];]; + ["cc_mkt_id";["PgType";"int4";];]; + ["cc_mkt_class";["PgType";"text";];]; + ["cc_mkt_desc";["PgType";"text";];]; + ["cc_market_manager";["PgType";"text";];]; + ["cc_division";["PgType";"int4";];]; + ["cc_division_name";["PgType";"text";];]; + ["cc_company";["PgType";"int4";];]; + ["cc_company_name";["PgType";"text";];]; + ["cc_street_number";["PgType";"text";];]; + ["cc_street_name";["PgType";"text";];]; + ["cc_street_type";["PgType";"text";];]; + ["cc_suite_number";["PgType";"text";];]; + ["cc_city";["PgType";"text";];]; + ["cc_county";["PgType";"text";];]; + ["cc_state";["PgType";"text";];]; + ["cc_zip";["PgType";"text";];]; + ["cc_country";["PgType";"text";];]; + ["cc_gmt_offset";["PgType";"numeric";];]; + ["cc_tax_percentage";["PgType";"numeric";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/catalog_page.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/catalog_page.txt.attr new file mode 100644 index 0000000000..1de2694081 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/catalog_page.txt.attr @@ -0,0 +1,15 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["cp_catalog_page_sk";["PgType";"int4";];]; + ["cp_catalog_page_id";["PgType";"text";];]; + ["cp_start_date_sk";["PgType";"int4";];]; + ["cp_end_date_sk";["PgType";"int4";];]; + ["cp_department";["PgType";"text";];]; + ["cp_catalog_number";["PgType";"int4";];]; + ["cp_catalog_page_number";["PgType";"int4";];]; + ["cp_description";["PgType";"text";];]; + ["cp_type";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/catalog_returns.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/catalog_returns.txt.attr new file mode 100644 index 0000000000..209677594f --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/catalog_returns.txt.attr @@ -0,0 +1,33 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["cr_returned_date_sk";["PgType";"int4";];]; + ["cr_returned_time_sk";["PgType";"int4";];]; + ["cr_item_sk";["PgType";"int4";];]; + ["cr_refunded_customer_sk";["PgType";"int4";];]; + ["cr_refunded_cdemo_sk";["PgType";"int4";];]; + ["cr_refunded_hdemo_sk";["PgType";"int4";];]; + ["cr_refunded_addr_sk";["PgType";"int4";];]; + ["cr_returning_customer_sk";["PgType";"int4";];]; + ["cr_returning_cdemo_sk";["PgType";"int4";];]; + ["cr_returning_hdemo_sk";["PgType";"int4";];]; + ["cr_returning_addr_sk";["PgType";"int4";];]; + ["cr_call_center_sk";["PgType";"int4";];]; + ["cr_catalog_page_sk";["PgType";"int4";];]; + ["cr_ship_mode_sk";["PgType";"int4";];]; + ["cr_warehouse_sk";["PgType";"int4";];]; + ["cr_reason_sk";["PgType";"int4";];]; + ["cr_order_number";["PgType";"int4";];]; + ["cr_return_quantity";["PgType";"int4";];]; + ["cr_return_amount";["PgType";"numeric";];]; + ["cr_return_tax";["PgType";"numeric";];]; + ["cr_return_amt_inc_tax";["PgType";"numeric";];]; + ["cr_fee";["PgType";"numeric";];]; + ["cr_return_ship_cost";["PgType";"numeric";];]; + ["cr_refunded_cash";["PgType";"numeric";];]; + ["cr_reversed_charge";["PgType";"numeric";];]; + ["cr_store_credit";["PgType";"numeric";];]; + ["cr_net_loss";["PgType";"numeric";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/catalog_sales.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/catalog_sales.txt.attr new file mode 100644 index 0000000000..3765f24437 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/catalog_sales.txt.attr @@ -0,0 +1,40 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["cs_sold_date_sk";["PgType";"int4";];]; + ["cs_sold_time_sk";["PgType";"int4";];]; + ["cs_ship_date_sk";["PgType";"int4";];]; + ["cs_bill_customer_sk";["PgType";"int4";];]; + ["cs_bill_cdemo_sk";["PgType";"int4";];]; + ["cs_bill_hdemo_sk";["PgType";"int4";];]; + ["cs_bill_addr_sk";["PgType";"int4";];]; + ["cs_ship_customer_sk";["PgType";"int4";];]; + ["cs_ship_cdemo_sk";["PgType";"int4";];]; + ["cs_ship_hdemo_sk";["PgType";"int4";];]; + ["cs_ship_addr_sk";["PgType";"int4";];]; + ["cs_call_center_sk";["PgType";"int4";];]; + ["cs_catalog_page_sk";["PgType";"int4";];]; + ["cs_ship_mode_sk";["PgType";"int4";];]; + ["cs_warehouse_sk";["PgType";"int4";];]; + ["cs_item_sk";["PgType";"int4";];]; + ["cs_promo_sk";["PgType";"int4";];]; + ["cs_order_number";["PgType";"int4";];]; + ["cs_quantity";["PgType";"int4";];]; + ["cs_wholesale_cost";["PgType";"numeric";];]; + ["cs_list_price";["PgType";"numeric";];]; + ["cs_sales_price";["PgType";"numeric";];]; + ["cs_ext_discount_amt";["PgType";"numeric";];]; + ["cs_ext_sales_price";["PgType";"numeric";];]; + ["cs_ext_wholesale_cost";["PgType";"numeric";];]; + ["cs_ext_list_price";["PgType";"numeric";];]; + ["cs_ext_tax";["PgType";"numeric";];]; + ["cs_coupon_amt";["PgType";"numeric";];]; + ["cs_ext_ship_cost";["PgType";"numeric";];]; + ["cs_net_paid";["PgType";"numeric";];]; + ["cs_net_paid_inc_tax";["PgType";"numeric";];]; + ["cs_net_paid_inc_ship";["PgType";"numeric";];]; + ["cs_net_paid_inc_ship_tax";["PgType";"numeric";];]; + ["cs_net_profit";["PgType";"numeric";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/customer.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/customer.txt.attr new file mode 100644 index 0000000000..0994cf7951 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/customer.txt.attr @@ -0,0 +1,24 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["c_customer_sk";["PgType";"int4";];]; + ["c_customer_id";["PgType";"text";];]; + ["c_current_cdemo_sk";["PgType";"int4";];]; + ["c_current_hdemo_sk";["PgType";"int4";];]; + ["c_current_addr_sk";["PgType";"int4";];]; + ["c_first_shipto_date_sk";["PgType";"int4";];]; + ["c_first_sales_date_sk";["PgType";"int4";];]; + ["c_salutation";["PgType";"text";];]; + ["c_first_name";["PgType";"text";];]; + ["c_last_name";["PgType";"text";];]; + ["c_preferred_cust_flag";["PgType";"text";];]; + ["c_birth_day";["PgType";"int4";];]; + ["c_birth_month";["PgType";"int4";];]; + ["c_birth_year";["PgType";"int4";];]; + ["c_birth_country";["PgType";"text";];]; + ["c_login";["PgType";"text";];]; + ["c_email_address";["PgType";"text";];]; + ["c_last_review_date";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/customer_address.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/customer_address.txt.attr new file mode 100644 index 0000000000..6bd1ce06c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/customer_address.txt.attr @@ -0,0 +1,19 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["ca_address_sk";["PgType";"int4";];]; + ["ca_address_id";["PgType";"text";];]; + ["ca_street_number";["PgType";"text";];]; + ["ca_street_name";["PgType";"text";];]; + ["ca_street_type";["PgType";"text";];]; + ["ca_suite_number";["PgType";"text";];]; + ["ca_city";["PgType";"text";];]; + ["ca_county";["PgType";"text";];]; + ["ca_state";["PgType";"text";];]; + ["ca_zip";["PgType";"text";];]; + ["ca_country";["PgType";"text";];]; + ["ca_gmt_offset";["PgType";"numeric";];]; + ["ca_location_type";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/customer_demographics.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/customer_demographics.txt.attr new file mode 100644 index 0000000000..6f106de2a7 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/customer_demographics.txt.attr @@ -0,0 +1,15 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["cd_demo_sk";["PgType";"int4";];]; + ["cd_gender";["PgType";"text";];]; + ["cd_marital_status";["PgType";"text";];]; + ["cd_education_status";["PgType";"text";];]; + ["cd_purchase_estimate";["PgType";"int4";];]; + ["cd_credit_rating";["PgType";"text";];]; + ["cd_dep_count";["PgType";"int4";];]; + ["cd_dep_employed_count";["PgType";"int4";];]; + ["cd_dep_college_count";["PgType";"int4";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/date_dim.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/date_dim.txt.attr new file mode 100644 index 0000000000..fcead9adcc --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/date_dim.txt.attr @@ -0,0 +1,34 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["d_date_sk";["PgType";"int4";];]; + ["d_date_id";["PgType";"text";];]; + ["d_date";["PgType";"date";];]; + ["d_month_seq";["PgType";"int4";];]; + ["d_week_seq";["PgType";"int4";];]; + ["d_quarter_seq";["PgType";"int4";];]; + ["d_year";["PgType";"int4";];]; + ["d_dow";["PgType";"int4";];]; + ["d_moy";["PgType";"int4";];]; + ["d_dom";["PgType";"int4";];]; + ["d_qoy";["PgType";"int4";];]; + ["d_fy_year";["PgType";"int4";];]; + ["d_fy_quarter_seq";["PgType";"int4";];]; + ["d_fy_week_seq";["PgType";"int4";];]; + ["d_day_name";["PgType";"text";];]; + ["d_quarter_name";["PgType";"text";];]; + ["d_holiday";["PgType";"text";];]; + ["d_weekend";["PgType";"text";];]; + ["d_following_holiday";["PgType";"text";];]; + ["d_first_dom";["PgType";"int4";];]; + ["d_last_dom";["PgType";"int4";];]; + ["d_same_day_ly";["PgType";"int4";];]; + ["d_same_day_lq";["PgType";"int4";];]; + ["d_current_day";["PgType";"text";];]; + ["d_current_week";["PgType";"text";];]; + ["d_current_month";["PgType";"text";];]; + ["d_current_quarter";["PgType";"text";];]; + ["d_current_year";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/default.cfg b/yt/yql/tests/sql/suites/pg-tpcds/default.cfg new file mode 100644 index 0000000000..67c1396cb1 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/default.cfg @@ -0,0 +1,24 @@ +in call_center call_center.txt +in catalog_page catalog_page.txt +in catalog_returns catalog_returns.txt +in catalog_sales catalog_sales.txt +in customer customer.txt +in customer_address customer_address.txt +in customer_demographics customer_demographics.txt +in date_dim date_dim.txt +in household_demographics household_demographics.txt +in income_band income_band.txt +in inventory inventory.txt +in item item.txt +in promotion promotion.txt +in reason reason.txt +in ship_mode ship_mode.txt +in store store.txt +in store_returns store_returns.txt +in store_sales store_sales.txt +in time_dim time_dim.txt +in warehouse warehouse.txt +in web_page web_page.txt +in web_returns web_returns.txt +in web_sales web_sales.txt +in web_site web_site.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg-tpcds/household_demographics.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/household_demographics.txt.attr new file mode 100644 index 0000000000..c8ab25eb6d --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/household_demographics.txt.attr @@ -0,0 +1,11 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["hd_demo_sk";["PgType";"int4";];]; + ["hd_income_band_sk";["PgType";"int4";];]; + ["hd_buy_potential";["PgType";"text";];]; + ["hd_dep_count";["PgType";"int4";];]; + ["hd_vehicle_count";["PgType";"int4";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/income_band.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/income_band.txt.attr new file mode 100644 index 0000000000..63310508f7 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/income_band.txt.attr @@ -0,0 +1,9 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["ib_income_band_sk";["PgType";"int4";];]; + ["ib_lower_bound";["PgType";"int4";];]; + ["ib_upper_bound";["PgType";"int4";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/inventory.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/inventory.txt.attr new file mode 100644 index 0000000000..95f22bfd71 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/inventory.txt.attr @@ -0,0 +1,10 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["inv_date_sk";["PgType";"int4";];]; + ["inv_item_sk";["PgType";"int4";];]; + ["inv_warehouse_sk";["PgType";"int4";];]; + ["inv_quantity_on_hand";["PgType";"int4";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/item.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/item.txt.attr new file mode 100644 index 0000000000..9d103928f0 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/item.txt.attr @@ -0,0 +1,28 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["i_item_sk";["PgType";"int4";];]; + ["i_item_id";["PgType";"text";];]; + ["i_rec_start_date";["PgType";"date";];]; + ["i_rec_end_date";["PgType";"date";];]; + ["i_item_desc";["PgType";"text";];]; + ["i_current_price";["PgType";"numeric";];]; + ["i_wholesale_cost";["PgType";"numeric";];]; + ["i_brand_id";["PgType";"int4";];]; + ["i_brand";["PgType";"text";];]; + ["i_class_id";["PgType";"int4";];]; + ["i_class";["PgType";"text";];]; + ["i_category_id";["PgType";"int4";];]; + ["i_category";["PgType";"text";];]; + ["i_manufact_id";["PgType";"int4";];]; + ["i_manufact";["PgType";"text";];]; + ["i_size";["PgType";"text";];]; + ["i_formulation";["PgType";"text";];]; + ["i_color";["PgType";"text";];]; + ["i_units";["PgType";"text";];]; + ["i_container";["PgType";"text";];]; + ["i_manager_id";["PgType";"int4";];]; + ["i_product_name";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/promotion.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/promotion.txt.attr new file mode 100644 index 0000000000..7db23f7b1b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/promotion.txt.attr @@ -0,0 +1,25 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["p_promo_sk";["PgType";"int4";];]; + ["p_promo_id";["PgType";"text";];]; + ["p_start_date_sk";["PgType";"int4";];]; + ["p_end_date_sk";["PgType";"int4";];]; + ["p_item_sk";["PgType";"int4";];]; + ["p_cost";["PgType";"numeric";];]; + ["p_response_target";["PgType";"int4";];]; + ["p_promo_name";["PgType";"text";];]; + ["p_channel_dmail";["PgType";"text";];]; + ["p_channel_email";["PgType";"text";];]; + ["p_channel_catalog";["PgType";"text";];]; + ["p_channel_tv";["PgType";"text";];]; + ["p_channel_radio";["PgType";"text";];]; + ["p_channel_press";["PgType";"text";];]; + ["p_channel_event";["PgType";"text";];]; + ["p_channel_demo";["PgType";"text";];]; + ["p_channel_details";["PgType";"text";];]; + ["p_purpose";["PgType";"text";];]; + ["p_discount_active";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q01.sql b/yt/yql/tests/sql/suites/pg-tpcds/q01.sql new file mode 100644 index 0000000000..7e40034da4 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q01.sql @@ -0,0 +1,28 @@ +--!syntax_pg +--TPC-DS Q1 + +-- start query 1 in stream 0 using template ../query_templates/query1.tpl +with customer_total_return as +(select sr_customer_sk as ctr_customer_sk +,sr_store_sk as ctr_store_sk +,sum(sr_fee) as ctr_total_return +from plato.store_returns +,plato.date_dim +where sr_returned_date_sk = d_date_sk +and d_year =2000 +group by sr_customer_sk +,sr_store_sk) + select c_customer_id +from customer_total_return ctr1 +,plato.store +,plato.customer +where ctr1.ctr_total_return > (select avg(ctr_total_return)*1.2::numeric +from customer_total_return ctr2 +where ctr1.ctr_store_sk = ctr2.ctr_store_sk) +and s_store_sk = ctr1.ctr_store_sk +and s_state = 'TN' +and ctr1.ctr_customer_sk = c_customer_sk +order by c_customer_id +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query1.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q02.sql b/yt/yql/tests/sql/suites/pg-tpcds/q02.sql new file mode 100644 index 0000000000..0b1e03a631 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q02.sql @@ -0,0 +1,63 @@ +--!syntax_pg +--TPC-DS Q2 + +-- start query 1 in stream 0 using template ../query_templates/query2.tpl +with wscs as + (select sold_date_sk + ,sales_price + from (select ws_sold_date_sk sold_date_sk + ,ws_ext_sales_price sales_price + from plato.web_sales + union all + select cs_sold_date_sk sold_date_sk + ,cs_ext_sales_price sales_price + from plato.catalog_sales) a), + wswscs as + (select d_week_seq, + sum(case when (d_day_name='Sunday') then sales_price else null::numeric end) sun_sales, + sum(case when (d_day_name='Monday') then sales_price else null::numeric end) mon_sales, + sum(case when (d_day_name='Tuesday') then sales_price else null::numeric end) tue_sales, + sum(case when (d_day_name='Wednesday') then sales_price else null::numeric end) wed_sales, + sum(case when (d_day_name='Thursday') then sales_price else null::numeric end) thu_sales, + sum(case when (d_day_name='Friday') then sales_price else null::numeric end) fri_sales, + sum(case when (d_day_name='Saturday') then sales_price else null::numeric end) sat_sales + from wscs + ,plato.date_dim + where d_date_sk = sold_date_sk + group by d_week_seq) + select d_week_seq1 + ,round(sun_sales1/sun_sales2,2) r1 + ,round(mon_sales1/mon_sales2,2) r2 + ,round(tue_sales1/tue_sales2,2) r3 + ,round(wed_sales1/wed_sales2,2) r4 + ,round(thu_sales1/thu_sales2,2) r5 + ,round(fri_sales1/fri_sales2,2) r6 + ,round(sat_sales1/sat_sales2,2) r7 + from + (select wswscs.d_week_seq d_week_seq1 + ,sun_sales sun_sales1 + ,mon_sales mon_sales1 + ,tue_sales tue_sales1 + ,wed_sales wed_sales1 + ,thu_sales thu_sales1 + ,fri_sales fri_sales1 + ,sat_sales sat_sales1 + from wswscs,plato.date_dim + where date_dim.d_week_seq = wswscs.d_week_seq and + d_year = 2001) y, + (select wswscs.d_week_seq d_week_seq2 + ,sun_sales sun_sales2 + ,mon_sales mon_sales2 + ,tue_sales tue_sales2 + ,wed_sales wed_sales2 + ,thu_sales thu_sales2 + ,fri_sales fri_sales2 + ,sat_sales sat_sales2 + from wswscs + ,plato.date_dim + where date_dim.d_week_seq = wswscs.d_week_seq and + d_year = 2001+1) z + where d_week_seq1=d_week_seq2-53 + order by d_week_seq1; + +-- end query 1 in stream 0 using template ../query_templates/query2.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q03.sql b/yt/yql/tests/sql/suites/pg-tpcds/q03.sql new file mode 100644 index 0000000000..58a82aad56 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q03.sql @@ -0,0 +1,24 @@ +--!syntax_pg +--TPC-DS Q3 + +-- start query 1 in stream 0 using template ../query_templates/query3.tpl +select dt.d_year + ,item.i_brand_id brand_id + ,item.i_brand brand + ,sum(ss_ext_sales_price) sum_agg + from plato.date_dim dt + ,plato.store_sales + ,plato.item + where dt.d_date_sk = store_sales.ss_sold_date_sk + and store_sales.ss_item_sk = item.i_item_sk + and item.i_manufact_id = 436 + and dt.d_moy=12 + group by dt.d_year + ,item.i_brand + ,item.i_brand_id + order by dt.d_year + ,sum_agg desc + ,brand_id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query3.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q04.sql b/yt/yql/tests/sql/suites/pg-tpcds/q04.sql new file mode 100644 index 0000000000..88e5ffdb32 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q04.sql @@ -0,0 +1,119 @@ +--!syntax_pg +--TPC-DS Q4 + +-- start query 1 in stream 0 using template ../query_templates/query4.tpl +with year_total as ( + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2::numeric) year_total + ,'s' sale_type + from plato.customer + ,plato.store_sales + ,plato.date_dim + where c_customer_sk = ss_customer_sk + and ss_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + union all + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum((((cs_ext_list_price-cs_ext_wholesale_cost-cs_ext_discount_amt)+cs_ext_sales_price)/2::numeric) ) year_total + ,'c' sale_type + from plato.customer + ,plato.catalog_sales + ,plato.date_dim + where c_customer_sk = cs_bill_customer_sk + and cs_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year +union all + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum((((ws_ext_list_price-ws_ext_wholesale_cost-ws_ext_discount_amt)+ws_ext_sales_price)/2::numeric) ) year_total + ,'w' sale_type + from plato.customer + ,plato.web_sales + ,plato.date_dim + where c_customer_sk = ws_bill_customer_sk + and ws_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + ) + select + t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_email_address + from year_total t_s_firstyear + ,year_total t_s_secyear + ,year_total t_c_firstyear + ,year_total t_c_secyear + ,year_total t_w_firstyear + ,year_total t_w_secyear + where t_s_secyear.customer_id = t_s_firstyear.customer_id + and t_s_firstyear.customer_id = t_c_secyear.customer_id + and t_s_firstyear.customer_id = t_c_firstyear.customer_id + and t_s_firstyear.customer_id = t_w_firstyear.customer_id + and t_s_firstyear.customer_id = t_w_secyear.customer_id + and t_s_firstyear.sale_type = 's' + and t_c_firstyear.sale_type = 'c' + and t_w_firstyear.sale_type = 'w' + and t_s_secyear.sale_type = 's' + and t_c_secyear.sale_type = 'c' + and t_w_secyear.sale_type = 'w' + and t_s_firstyear.dyear = 2001 + and t_s_secyear.dyear = 2001+1 + and t_c_firstyear.dyear = 2001 + and t_c_secyear.dyear = 2001+1 + and t_w_firstyear.dyear = 2001 + and t_w_secyear.dyear = 2001+1 + and t_s_firstyear.year_total > 0::numeric + and t_c_firstyear.year_total > 0::numeric + and t_w_firstyear.year_total > 0::numeric + and case when t_c_firstyear.year_total > 0::numeric then t_c_secyear.year_total / t_c_firstyear.year_total else null::numeric end + > case when t_s_firstyear.year_total > 0::numeric then t_s_secyear.year_total / t_s_firstyear.year_total else null::numeric end + and case when t_c_firstyear.year_total > 0::numeric then t_c_secyear.year_total / t_c_firstyear.year_total else null::numeric end + > case when t_w_firstyear.year_total > 0::numeric then t_w_secyear.year_total / t_w_firstyear.year_total else null::numeric end + order by t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_email_address +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query4.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q05.sql b/yt/yql/tests/sql/suites/pg-tpcds/q05.sql new file mode 100644 index 0000000000..9601785498 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q05.sql @@ -0,0 +1,131 @@ +--!syntax_pg +--TPC-DS Q5 + +-- start query 1 in stream 0 using template ../query_templates/query5.tpl +with ssr as + (select s_store_id, + sum(sales_price) as sales, + sum(profit) as profit, + sum(return_amt) as returns, + sum(net_loss) as profit_loss + from + ( select ss_store_sk as store_sk, + ss_sold_date_sk as date_sk, + ss_ext_sales_price as sales_price, + ss_net_profit as profit, + cast(0 as decimal(7,2)) as return_amt, + cast(0 as decimal(7,2)) as net_loss + from plato.store_sales + union all + select sr_store_sk as store_sk, + sr_returned_date_sk as date_sk, + cast(0 as decimal(7,2)) as sales_price, + cast(0 as decimal(7,2)) as profit, + sr_return_amt as return_amt, + sr_net_loss as net_loss + from plato.store_returns + ) salesreturns, + plato.date_dim, + plato.store + where date_sk = d_date_sk + and d_date between cast('1998-08-04' as date) + and (cast('1998-08-04' as date) + interval '14' day)::date + and store_sk = s_store_sk + group by s_store_id) + , + csr as + (select cp_catalog_page_id, + sum(sales_price) as sales, + sum(profit) as profit, + sum(return_amt) as returns, + sum(net_loss) as profit_loss + from + ( select cs_catalog_page_sk as page_sk, + cs_sold_date_sk as date_sk, + cs_ext_sales_price as sales_price, + cs_net_profit as profit, + cast(0 as decimal(7,2)) as return_amt, + cast(0 as decimal(7,2)) as net_loss + from plato.catalog_sales + union all + select cr_catalog_page_sk as page_sk, + cr_returned_date_sk as date_sk, + cast(0 as decimal(7,2)) as sales_price, + cast(0 as decimal(7,2)) as profit, + cr_return_amount as return_amt, + cr_net_loss as net_loss + from plato.catalog_returns + ) salesreturns, + plato.date_dim, + plato.catalog_page + where date_sk = d_date_sk + and d_date between cast('1998-08-04' as date) + and (cast('1998-08-04' as date) + interval '14' day)::date + and page_sk = cp_catalog_page_sk + group by cp_catalog_page_id) + , + wsr as + (select web_site_id, + sum(sales_price) as sales, + sum(profit) as profit, + sum(return_amt) as returns, + sum(net_loss) as profit_loss + from + ( select ws_web_site_sk as wsr_web_site_sk, + ws_sold_date_sk as date_sk, + ws_ext_sales_price as sales_price, + ws_net_profit as profit, + cast(0 as decimal(7,2)) as return_amt, + cast(0 as decimal(7,2)) as net_loss + from plato.web_sales + union all + select ws_web_site_sk as wsr_web_site_sk, + wr_returned_date_sk as date_sk, + cast(0 as decimal(7,2)) as sales_price, + cast(0 as decimal(7,2)) as profit, + wr_return_amt as return_amt, + wr_net_loss as net_loss + from plato.web_returns left outer join plato.web_sales on + ( wr_item_sk = ws_item_sk + and wr_order_number = ws_order_number) + ) salesreturns, + plato.date_dim, + plato.web_site + where date_sk = d_date_sk + and d_date between cast('1998-08-04' as date) + and (cast('1998-08-04' as date) + interval '14' day)::date + and wsr_web_site_sk = web_site_sk + group by web_site_id) + select channel + , id + , sum(sales) as sales + , sum(returns) as returns + , sum(profit) as profit + from + (select 'store channel' as channel + , 'store' || s_store_id as id + , sales + , returns + , (profit - profit_loss) as profit + from ssr + union all + select 'catalog channel' as channel + , 'catalog_page' || cp_catalog_page_id as id + , sales + , returns + , (profit - profit_loss) as profit + from csr + union all + select 'web channel' as channel + , 'web_site' || web_site_id as id + , sales + , returns + , (profit - profit_loss) as profit + from wsr + ) x + group by rollup (channel, id) + order by channel + ,id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query5.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q06.sql b/yt/yql/tests/sql/suites/pg-tpcds/q06.sql new file mode 100644 index 0000000000..045e74df82 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q06.sql @@ -0,0 +1,29 @@ +--!syntax_pg +--TPC-DS Q6 + +-- start query 1 in stream 0 using template ../query_templates/query6.tpl +select a.ca_state state, count(*) cnt + from plato.customer_address a + ,plato.customer c + ,plato.store_sales s + ,plato.date_dim d + ,plato.item i + where a.ca_address_sk = c.c_current_addr_sk + and c.c_customer_sk = s.ss_customer_sk + and s.ss_sold_date_sk = d.d_date_sk + and s.ss_item_sk = i.i_item_sk + and d.d_month_seq = + (select distinct (d_month_seq) + from plato.date_dim + where d_year = 2000 + and d_moy = 2 ) + and i.i_current_price > 1.2::numeric * + (select avg(j.i_current_price) + from plato.item j + where j.i_category = i.i_category) + group by a.ca_state + having count(*) >= 10 + order by cnt, a.ca_state + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query6.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q07.sql b/yt/yql/tests/sql/suites/pg-tpcds/q07.sql new file mode 100644 index 0000000000..909507305f --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q07.sql @@ -0,0 +1,24 @@ +--!syntax_pg +--TPC-DS Q7 + +-- start query 1 in stream 0 using template ../query_templates/query7.tpl +select i_item_id, + avg(ss_quantity) agg1, + avg(ss_list_price) agg2, + avg(ss_coupon_amt) agg3, + avg(ss_sales_price) agg4 + from plato.store_sales, plato.customer_demographics, plato.date_dim, plato.item, plato.promotion + where ss_sold_date_sk = d_date_sk and + ss_item_sk = i_item_sk and + ss_cdemo_sk = cd_demo_sk and + ss_promo_sk = p_promo_sk and + cd_gender = 'F' and + cd_marital_status = 'W' and + cd_education_status = 'Primary' and + (p_channel_email = 'N' or p_channel_event = 'N') and + d_year = 1998 + group by i_item_id + order by i_item_id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query7.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q08.sql b/yt/yql/tests/sql/suites/pg-tpcds/q08.sql new file mode 100644 index 0000000000..7041a81acc --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q08.sql @@ -0,0 +1,111 @@ +--!syntax_pg +--TPC-DS Q8 + +-- start query 1 in stream 0 using template ../query_templates/query8.tpl +select s_store_name + ,sum(ss_net_profit) + from plato.store_sales + ,plato.date_dim + ,plato.store, + (select ca_zip + from ( + SELECT substr(ca_zip,1,5) ca_zip + FROM plato.customer_address + WHERE substr(ca_zip,1,5) IN ( + '89436','30868','65085','22977','83927','77557', + '58429','40697','80614','10502','32779', + '91137','61265','98294','17921','18427', + '21203','59362','87291','84093','21505', + '17184','10866','67898','25797','28055', + '18377','80332','74535','21757','29742', + '90885','29898','17819','40811','25990', + '47513','89531','91068','10391','18846', + '99223','82637','41368','83658','86199', + '81625','26696','89338','88425','32200', + '81427','19053','77471','36610','99823', + '43276','41249','48584','83550','82276', + '18842','78890','14090','38123','40936', + '34425','19850','43286','80072','79188', + '54191','11395','50497','84861','90733', + '21068','57666','37119','25004','57835', + '70067','62878','95806','19303','18840', + '19124','29785','16737','16022','49613', + '89977','68310','60069','98360','48649', + '39050','41793','25002','27413','39736', + '47208','16515','94808','57648','15009', + '80015','42961','63982','21744','71853', + '81087','67468','34175','64008','20261', + '11201','51799','48043','45645','61163', + '48375','36447','57042','21218','41100', + '89951','22745','35851','83326','61125', + '78298','80752','49858','52940','96976', + '63792','11376','53582','18717','90226', + '50530','94203','99447','27670','96577', + '57856','56372','16165','23427','54561', + '28806','44439','22926','30123','61451', + '92397','56979','92309','70873','13355', + '21801','46346','37562','56458','28286', + '47306','99555','69399','26234','47546', + '49661','88601','35943','39936','25632', + '24611','44166','56648','30379','59785', + '11110','14329','93815','52226','71381', + '13842','25612','63294','14664','21077', + '82626','18799','60915','81020','56447', + '76619','11433','13414','42548','92713', + '70467','30884','47484','16072','38936', + '13036','88376','45539','35901','19506', + '65690','73957','71850','49231','14276', + '20005','18384','76615','11635','38177', + '55607','41369','95447','58581','58149', + '91946','33790','76232','75692','95464', + '22246','51061','56692','53121','77209', + '15482','10688','14868','45907','73520', + '72666','25734','17959','24677','66446', + '94627','53535','15560','41967','69297', + '11929','59403','33283','52232','57350', + '43933','40921','36635','10827','71286', + '19736','80619','25251','95042','15526', + '36496','55854','49124','81980','35375', + '49157','63512','28944','14946','36503', + '54010','18767','23969','43905','66979', + '33113','21286','58471','59080','13395', + '79144','70373','67031','38360','26705', + '50906','52406','26066','73146','15884', + '31897','30045','61068','45550','92454', + '13376','14354','19770','22928','97790', + '50723','46081','30202','14410','20223', + '88500','67298','13261','14172','81410', + '93578','83583','46047','94167','82564', + '21156','15799','86709','37931','74703', + '83103','23054','70470','72008','49247', + '91911','69998','20961','70070','63197', + '54853','88191','91830','49521','19454', + '81450','89091','62378','25683','61869', + '51744','36580','85778','36871','48121', + '28810','83712','45486','67393','26935', + '42393','20132','55349','86057','21309', + '80218','10094','11357','48819','39734', + '40758','30432','21204','29467','30214', + '61024','55307','74621','11622','68908', + '33032','52868','99194','99900','84936', + '69036','99149','45013','32895','59004', + '32322','14933','32936','33562','72550', + '27385','58049','58200','16808','21360', + '32961','18586','79307','15492') + intersect + select ca_zip + from (SELECT substr(ca_zip,1,5) ca_zip,count(*) cnt + FROM plato.customer_address, plato.customer + WHERE ca_address_sk = c_current_addr_sk and + c_preferred_cust_flag='Y' + group by ca_zip + having count(*) > 10)A1)A2) V1 + where ss_store_sk = s_store_sk + and ss_sold_date_sk = d_date_sk + and d_qoy = 1 and d_year = 2002 + and (substr(s_zip,1,2) = substr(V1.ca_zip,1,2)) + group by s_store_name + order by s_store_name + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query8.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q09.sql b/yt/yql/tests/sql/suites/pg-tpcds/q09.sql new file mode 100644 index 0000000000..11b75aa231 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q09.sql @@ -0,0 +1,54 @@ +--!syntax_pg +--TPC-DS Q9 + +-- start query 1 in stream 0 using template ../query_templates/query9.tpl +select case when (select count(*) + from plato.store_sales + where ss_quantity between 1 and 20) > 25437 + then (select avg(ss_ext_discount_amt) + from plato.store_sales + where ss_quantity between 1 and 20) + else (select avg(ss_net_profit) + from plato.store_sales + where ss_quantity between 1 and 20) end bucket1 , + case when (select count(*) + from plato.store_sales + where ss_quantity between 21 and 40) > 22746 + then (select avg(ss_ext_discount_amt) + from plato.store_sales + where ss_quantity between 21 and 40) + else (select avg(ss_net_profit) + from plato.store_sales + where ss_quantity between 21 and 40) end bucket2, + case when (select count(*) + from plato.store_sales + where ss_quantity between 41 and 60) > 9387 + then (select avg(ss_ext_discount_amt) + from plato.store_sales + where ss_quantity between 41 and 60) + else (select avg(ss_net_profit) + from plato.store_sales + where ss_quantity between 41 and 60) end bucket3, + case when (select count(*) + from plato.store_sales + where ss_quantity between 61 and 80) > 10098 + then (select avg(ss_ext_discount_amt) + from plato.store_sales + where ss_quantity between 61 and 80) + else (select avg(ss_net_profit) + from plato.store_sales + where ss_quantity between 61 and 80) end bucket4, + case when (select count(*) + from plato.store_sales + where ss_quantity between 81 and 100) > 18213 + then (select avg(ss_ext_discount_amt) + from plato.store_sales + where ss_quantity between 81 and 100) + else (select avg(ss_net_profit) + from plato.store_sales + where ss_quantity between 81 and 100) end bucket5 +from plato.reason +where r_reason_sk = 1 +; + +-- end query 1 in stream 0 using template ../query_templates/query9.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q10.sql b/yt/yql/tests/sql/suites/pg-tpcds/q10.sql new file mode 100644 index 0000000000..4295edb76e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q10.sql @@ -0,0 +1,62 @@ +--!syntax_pg +--TPC-DS Q10 + +-- start query 1 in stream 0 using template ../query_templates/query10.tpl +select + cd_gender, + cd_marital_status, + cd_education_status, + count(*) cnt1, + cd_purchase_estimate, + count(*) cnt2, + cd_credit_rating, + count(*) cnt3, + cd_dep_count, + count(*) cnt4, + cd_dep_employed_count, + count(*) cnt5, + cd_dep_college_count, + count(*) cnt6 + from + plato.customer c,plato.customer_address ca,plato.customer_demographics + where + c.c_current_addr_sk = ca.ca_address_sk and + ca_county in ('Walker County','Richland County','Gaines County','Douglas County','Dona Ana County') and + cd_demo_sk = c.c_current_cdemo_sk and + exists (select * + from plato.store_sales,plato.date_dim + where c.c_customer_sk = ss_customer_sk and + ss_sold_date_sk = d_date_sk and + d_year = 2002 and + d_moy between 4 and 4+3) and + (exists (select * + from plato.web_sales,plato.date_dim + where c.c_customer_sk = ws_bill_customer_sk and + ws_sold_date_sk = d_date_sk and + d_year = 2002 and + d_moy between 4 ANd 4+3) or + exists (select * + from plato.catalog_sales,plato.date_dim + where c.c_customer_sk = cs_ship_customer_sk and + cs_sold_date_sk = d_date_sk and + d_year = 2002 and + d_moy between 4 and 4+3)) + group by cd_gender, + cd_marital_status, + cd_education_status, + cd_purchase_estimate, + cd_credit_rating, + cd_dep_count, + cd_dep_employed_count, + cd_dep_college_count + order by cd_gender, + cd_marital_status, + cd_education_status, + cd_purchase_estimate, + cd_credit_rating, + cd_dep_count, + cd_dep_employed_count, + cd_dep_college_count +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query10.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q11.sql b/yt/yql/tests/sql/suites/pg-tpcds/q11.sql new file mode 100644 index 0000000000..3befe397a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q11.sql @@ -0,0 +1,84 @@ +--!syntax_pg +--TPC-DS Q11 + +-- start query 1 in stream 0 using template ../query_templates/query11.tpl +with year_total as ( + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum(ss_ext_list_price-ss_ext_discount_amt) year_total + ,'s' sale_type + from plato.customer + ,plato.store_sales + ,plato.date_dim + where c_customer_sk = ss_customer_sk + and ss_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + union all + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum(ws_ext_list_price-ws_ext_discount_amt) year_total + ,'w' sale_type + from plato.customer + ,plato.web_sales + ,plato.date_dim + where c_customer_sk = ws_bill_customer_sk + and ws_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + ) + select + t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_email_address + from year_total t_s_firstyear + ,year_total t_s_secyear + ,year_total t_w_firstyear + ,year_total t_w_secyear + where t_s_secyear.customer_id = t_s_firstyear.customer_id + and t_s_firstyear.customer_id = t_w_secyear.customer_id + and t_s_firstyear.customer_id = t_w_firstyear.customer_id + and t_s_firstyear.sale_type = 's' + and t_w_firstyear.sale_type = 'w' + and t_s_secyear.sale_type = 's' + and t_w_secyear.sale_type = 'w' + and t_s_firstyear.dyear = 2001 + and t_s_secyear.dyear = 2001+1 + and t_w_firstyear.dyear = 2001 + and t_w_secyear.dyear = 2001+1 + and t_s_firstyear.year_total > 0::numeric + and t_w_firstyear.year_total > 0::numeric + and case when t_w_firstyear.year_total > 0::numeric then t_w_secyear.year_total / t_w_firstyear.year_total else 0.0::numeric end + > case when t_s_firstyear.year_total > 0::numeric then t_s_secyear.year_total / t_s_firstyear.year_total else 0.0::numeric end + order by t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_email_address +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query11.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q12.sql b/yt/yql/tests/sql/suites/pg-tpcds/q12.sql new file mode 100644 index 0000000000..1523125711 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q12.sql @@ -0,0 +1,37 @@ +--!syntax_pg +--TPC-DS Q12 + +-- start query 1 in stream 0 using template ../query_templates/query12.tpl +select i_item_id + ,i_item_desc + ,i_category + ,i_class + ,i_current_price + ,sum(ws_ext_sales_price) as itemrevenue + ,sum(ws_ext_sales_price)*100::numeric/sum(sum(ws_ext_sales_price)) over + (partition by i_class) as revenueratio +from + plato.web_sales + ,plato.item + ,plato.date_dim +where + ws_item_sk = i_item_sk + and i_category in ('Jewelry', 'Sports', 'Books') + and ws_sold_date_sk = d_date_sk + and d_date between cast('2001-01-12' as date) + and (cast('2001-01-12' as date) + interval '30' day)::date +group by + i_item_id + ,i_item_desc + ,i_category + ,i_class + ,i_current_price +order by + i_category + ,i_class + ,i_item_id + ,i_item_desc + ,revenueratio +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query12.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q13.sql b/yt/yql/tests/sql/suites/pg-tpcds/q13.sql new file mode 100644 index 0000000000..c8e8a60cc8 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q13.sql @@ -0,0 +1,55 @@ +--!syntax_pg +--TPC-DS Q13 + +-- start query 1 in stream 0 using template ../query_templates/query13.tpl +select avg(ss_quantity) avg_ss_q + ,avg(ss_ext_sales_price) avg_ss_s + ,avg(ss_ext_wholesale_cost) avg_ss_w + ,sum(ss_ext_wholesale_cost) sum_ss_w + from plato.store_sales + ,plato.store + ,plato.customer_demographics + ,plato.household_demographics + ,plato.customer_address + ,plato.date_dim + where s_store_sk = ss_store_sk + and ss_sold_date_sk = d_date_sk and d_year = 2001 + and((ss_hdemo_sk=hd_demo_sk + and cd_demo_sk = ss_cdemo_sk + and cd_marital_status = 'D' + and cd_education_status = '2 yr Degree' + and ss_sales_price between 100.00::numeric and 150.00::numeric + and hd_dep_count = 3 + )or + (ss_hdemo_sk=hd_demo_sk + and cd_demo_sk = ss_cdemo_sk + and cd_marital_status = 'S' + and cd_education_status = 'Secondary' + and ss_sales_price between 50.00::numeric and 100.00::numeric + and hd_dep_count = 1 + ) or + (ss_hdemo_sk=hd_demo_sk + and cd_demo_sk = ss_cdemo_sk + and cd_marital_status = 'W' + and cd_education_status = 'Advanced Degree' + and ss_sales_price between 150.00::numeric and 200.00::numeric + and hd_dep_count = 1 + )) + and((ss_addr_sk = ca_address_sk + and ca_country = 'United States' + and ca_state in ('CO', 'IL', 'MN') + and ss_net_profit between 100::numeric and 200::numeric + ) or + (ss_addr_sk = ca_address_sk + and ca_country = 'United States' + and ca_state in ('OH', 'MT', 'NM') + and ss_net_profit between 150::numeric and 300::numeric + ) or + (ss_addr_sk = ca_address_sk + and ca_country = 'United States' + and ca_state in ('TX', 'MO', 'MI') + and ss_net_profit between 50::numeric and 250::numeric + )) +; + +-- end query 1 in stream 0 using template ../query_templates/query13.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q14.sql b/yt/yql/tests/sql/suites/pg-tpcds/q14.sql new file mode 100644 index 0000000000..00cc9da131 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q14.sql @@ -0,0 +1,213 @@ +--!syntax_pg +--TPC-DS Q14 + +-- start query 1 in stream 0 using template ../query_templates/query14.tpl +with cross_items as + (select i_item_sk ss_item_sk + from plato.item, + (select iss.i_brand_id brand_id + ,iss.i_class_id class_id + ,iss.i_category_id category_id + from plato.store_sales + ,plato.item iss + ,plato.date_dim d1 + where ss_item_sk = iss.i_item_sk + and ss_sold_date_sk = d1.d_date_sk + and d1.d_year between 1998 AND 1998 + 2 + intersect + select ics.i_brand_id + ,ics.i_class_id + ,ics.i_category_id + from plato.catalog_sales + ,plato.item ics + ,plato.date_dim d2 + where cs_item_sk = ics.i_item_sk + and cs_sold_date_sk = d2.d_date_sk + and d2.d_year between 1998 AND 1998 + 2 + intersect + select iws.i_brand_id + ,iws.i_class_id + ,iws.i_category_id + from plato.web_sales + ,plato.item iws + ,plato.date_dim d3 + where ws_item_sk = iws.i_item_sk + and ws_sold_date_sk = d3.d_date_sk + and d3.d_year between 1998 AND 1998 + 2) a + where i_brand_id = brand_id + and i_class_id = class_id + and i_category_id = category_id +), + avg_sales as + (select avg(quantity::numeric*list_price) average_sales + from (select ss_quantity quantity + ,ss_list_price list_price + from plato.store_sales + ,plato.date_dim + where ss_sold_date_sk = d_date_sk + and d_year between 1998 and 1998 + 2 + union all + select cs_quantity quantity + ,cs_list_price list_price + from plato.catalog_sales + ,plato.date_dim + where cs_sold_date_sk = d_date_sk + and d_year between 1998 and 1998 + 2 + union all + select ws_quantity quantity + ,ws_list_price list_price + from plato.web_sales + ,plato.date_dim + where ws_sold_date_sk = d_date_sk + and d_year between 1998 and 1998 + 2) x) + select channel, i_brand_id,i_class_id,i_category_id,sum(sales) sum_sales, sum(number_sales) sum_num_sales + from( + select 'store' channel, i_brand_id,i_class_id + ,i_category_id,sum(ss_quantity::numeric*ss_list_price) sales + , count(*) number_sales + from plato.store_sales + ,plato.item + ,plato.date_dim + where ss_item_sk in (select ss_item_sk from cross_items) + and ss_item_sk = i_item_sk + and ss_sold_date_sk = d_date_sk + and d_year = 1998+2 + and d_moy = 11 + group by i_brand_id,i_class_id,i_category_id + having sum(ss_quantity::numeric*ss_list_price) > (select average_sales from avg_sales) + union all + select 'catalog' channel, i_brand_id,i_class_id,i_category_id, sum(cs_quantity::numeric*cs_list_price) sales, count(*) number_sales + from plato.catalog_sales + ,plato.item + ,plato.date_dim + where cs_item_sk in (select ss_item_sk from cross_items) + and cs_item_sk = i_item_sk + and cs_sold_date_sk = d_date_sk + and d_year = 1998+2 + and d_moy = 11 + group by i_brand_id,i_class_id,i_category_id + having sum(cs_quantity::numeric*cs_list_price) > (select average_sales from avg_sales) + union all + select 'web' channel, i_brand_id,i_class_id,i_category_id, sum(ws_quantity::numeric*ws_list_price) sales , count(*) number_sales + from plato.web_sales + ,plato.item + ,plato.date_dim + where ws_item_sk in (select ss_item_sk from cross_items) + and ws_item_sk = i_item_sk + and ws_sold_date_sk = d_date_sk + and d_year = 1998+2 + and d_moy = 11 + group by i_brand_id,i_class_id,i_category_id + having sum(ws_quantity::numeric*ws_list_price) > (select average_sales from avg_sales) + ) y + group by rollup (channel, i_brand_id,i_class_id,i_category_id) + order by channel,i_brand_id,i_class_id,i_category_id + limit 100; +with cross_items as + (select i_item_sk ss_item_sk + from plato.item, + (select iss.i_brand_id brand_id + ,iss.i_class_id class_id + ,iss.i_category_id category_id + from plato.store_sales + ,plato.item iss + ,plato.date_dim d1 + where ss_item_sk = iss.i_item_sk + and ss_sold_date_sk = d1.d_date_sk + and d1.d_year between 1998 AND 1998 + 2 + intersect + select ics.i_brand_id + ,ics.i_class_id + ,ics.i_category_id + from plato.catalog_sales + ,plato.item ics + ,plato.date_dim d2 + where cs_item_sk = ics.i_item_sk + and cs_sold_date_sk = d2.d_date_sk + and d2.d_year between 1998 AND 1998 + 2 + intersect + select iws.i_brand_id + ,iws.i_class_id + ,iws.i_category_id + from plato.web_sales + ,plato.item iws + ,plato.date_dim d3 + where ws_item_sk = iws.i_item_sk + and ws_sold_date_sk = d3.d_date_sk + and d3.d_year between 1998 AND 1998 + 2) x + where i_brand_id = brand_id + and i_class_id = class_id + and i_category_id = category_id +), + avg_sales as +(select avg(quantity::numeric*list_price) average_sales + from (select ss_quantity quantity + ,ss_list_price list_price + from plato.store_sales + ,plato.date_dim + where ss_sold_date_sk = d_date_sk + and d_year between 1998 and 1998 + 2 + union all + select cs_quantity quantity + ,cs_list_price list_price + from plato.catalog_sales + ,plato.date_dim + where cs_sold_date_sk = d_date_sk + and d_year between 1998 and 1998 + 2 + union all + select ws_quantity quantity + ,ws_list_price list_price + from plato.web_sales + ,plato.date_dim + where ws_sold_date_sk = d_date_sk + and d_year between 1998 and 1998 + 2) x) + select this_year.channel ty_channel + ,this_year.i_brand_id ty_brand + ,this_year.i_class_id ty_class + ,this_year.i_category_id ty_category + ,this_year.sales ty_sales + ,this_year.number_sales ty_number_sales + ,last_year.channel ly_channel + ,last_year.i_brand_id ly_brand + ,last_year.i_class_id ly_class + ,last_year.i_category_id ly_category + ,last_year.sales ly_sales + ,last_year.number_sales ly_number_sales + from + (select 'store' channel, i_brand_id,i_class_id,i_category_id + ,sum(ss_quantity::numeric*ss_list_price) sales, count(*) number_sales + from plato.store_sales + ,plato.item + ,plato.date_dim + where ss_item_sk in (select ss_item_sk from cross_items) + and ss_item_sk = i_item_sk + and ss_sold_date_sk = d_date_sk + and d_week_seq = (select d_week_seq + from plato.date_dim + where d_year = 1998 + 1 + and d_moy = 12 + and d_dom = 16) + group by i_brand_id,i_class_id,i_category_id + having sum(ss_quantity::numeric*ss_list_price) > (select average_sales from avg_sales)) this_year, + (select 'store' channel, i_brand_id,i_class_id + ,i_category_id, sum(ss_quantity::numeric*ss_list_price) sales, count(*) number_sales + from plato.store_sales + ,plato.item + ,plato.date_dim + where ss_item_sk in (select ss_item_sk from cross_items) + and ss_item_sk = i_item_sk + and ss_sold_date_sk = d_date_sk + and d_week_seq = (select d_week_seq + from plato.date_dim + where d_year = 1998 + and d_moy = 12 + and d_dom = 16) + group by i_brand_id,i_class_id,i_category_id + having sum(ss_quantity::numeric*ss_list_price) > (select average_sales from avg_sales)) last_year + where this_year.i_brand_id= last_year.i_brand_id + and this_year.i_class_id = last_year.i_class_id + and this_year.i_category_id = last_year.i_category_id + order by this_year.channel, this_year.i_brand_id, this_year.i_class_id, this_year.i_category_id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query14.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q15.sql b/yt/yql/tests/sql/suites/pg-tpcds/q15.sql new file mode 100644 index 0000000000..1ceca68e03 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q15.sql @@ -0,0 +1,23 @@ +--!syntax_pg +--TPC-DS Q15 + +-- start query 1 in stream 0 using template ../query_templates/query15.tpl +select ca_zip + ,sum(cs_sales_price) + from plato.catalog_sales + ,plato.customer + ,plato.customer_address + ,plato.date_dim + where cs_bill_customer_sk = c_customer_sk + and c_current_addr_sk = ca_address_sk + and ( substr(ca_zip,1,5) in ('85669', '86197','88274','83405','86475', + '85392', '85460', '80348', '81792') + or ca_state in ('CA','WA','GA') + or cs_sales_price > 500::numeric) + and cs_sold_date_sk = d_date_sk + and d_qoy = 2 and d_year = 2000 + group by ca_zip + order by ca_zip + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query15.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q16.sql b/yt/yql/tests/sql/suites/pg-tpcds/q16.sql new file mode 100644 index 0000000000..04ad619f13 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q16.sql @@ -0,0 +1,34 @@ +--!syntax_pg +--TPC-DS Q16 + +-- start query 1 in stream 0 using template ../query_templates/query16.tpl +select + count(distinct cs_order_number) as "order count" + ,sum(cs_ext_ship_cost) as "total shipping cost" + ,sum(cs_net_profit) as "total net profit" +from + plato.catalog_sales cs1 + ,plato.date_dim + ,plato.customer_address + ,plato.call_center +where + d_date between '1999-2-01'::date and + (cast('1999-2-01' as date) + interval '60' day)::date +and cs1.cs_ship_date_sk = d_date_sk +and cs1.cs_ship_addr_sk = ca_address_sk +and ca_state = 'IL' +and cs1.cs_call_center_sk = cc_call_center_sk +and cc_county in ('Williamson County','Williamson County','Williamson County','Williamson County', + 'Williamson County' +) +and exists (select * + from plato.catalog_sales cs2 + where cs1.cs_order_number = cs2.cs_order_number + and cs1.cs_warehouse_sk <> cs2.cs_warehouse_sk) +and not exists(select * + from plato.catalog_returns cr1 + where cs1.cs_order_number = cr1.cr_order_number) +order by count(distinct cs_order_number) +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query16.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q17.sql b/yt/yql/tests/sql/suites/pg-tpcds/q17.sql new file mode 100644 index 0000000000..2b0a6cf476 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q17.sql @@ -0,0 +1,48 @@ +--!syntax_pg +--TPC-DS Q17 + +-- start query 1 in stream 0 using template ../query_templates/query17.tpl +select i_item_id + ,i_item_desc + ,s_state + ,count(ss_quantity) as store_sales_quantitycount + ,avg(ss_quantity) as store_sales_quantityave + ,stddev_samp(ss_quantity) as store_sales_quantitystdev + ,stddev_samp(ss_quantity)/avg(ss_quantity) as store_sales_quantitycov + ,count(sr_return_quantity) as store_returns_quantitycount + ,avg(sr_return_quantity) as store_returns_quantityave + ,stddev_samp(sr_return_quantity) as store_returns_quantitystdev + ,stddev_samp(sr_return_quantity)/avg(sr_return_quantity) as store_returns_quantitycov + ,count(cs_quantity) as catalog_sales_quantitycount ,avg(cs_quantity) as catalog_sales_quantityave + ,stddev_samp(cs_quantity) as catalog_sales_quantitystdev + ,stddev_samp(cs_quantity)/avg(cs_quantity) as catalog_sales_quantitycov + from plato.store_sales + ,plato.store_returns + ,plato.catalog_sales + ,plato.date_dim d1 + ,plato.date_dim d2 + ,plato.date_dim d3 + ,plato.store + ,plato.item + where d1.d_quarter_name = '1998Q1' + and d1.d_date_sk = ss_sold_date_sk + and i_item_sk = ss_item_sk + and s_store_sk = ss_store_sk + and ss_customer_sk = sr_customer_sk + and ss_item_sk = sr_item_sk + and ss_ticket_number = sr_ticket_number + and sr_returned_date_sk = d2.d_date_sk + and d2.d_quarter_name in ('1998Q1','1998Q2','1998Q3') + and sr_customer_sk = cs_bill_customer_sk + and sr_item_sk = cs_item_sk + and cs_sold_date_sk = d3.d_date_sk + and d3.d_quarter_name in ('1998Q1','1998Q2','1998Q3') + group by i_item_id + ,i_item_desc + ,s_state + order by i_item_id + ,i_item_desc + ,s_state +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query17.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q18.sql b/yt/yql/tests/sql/suites/pg-tpcds/q18.sql new file mode 100644 index 0000000000..11b5a79cfb --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q18.sql @@ -0,0 +1,37 @@ +--!syntax_pg +--TPC-DS Q18 + +-- start query 1 in stream 0 using template ../query_templates/query18.tpl +select i_item_id, + ca_country, + ca_state, + ca_county, + avg( cast(cs_quantity as decimal(12,2))) agg1, + avg( cast(cs_list_price as decimal(12,2))) agg2, + avg( cast(cs_coupon_amt as decimal(12,2))) agg3, + avg( cast(cs_sales_price as decimal(12,2))) agg4, + avg( cast(cs_net_profit as decimal(12,2))) agg5, + avg( cast(c_birth_year as decimal(12,2))) agg6, + avg( cast(cd1.cd_dep_count as decimal(12,2))) agg7 + from plato.catalog_sales, plato.customer_demographics cd1, + plato.customer_demographics cd2, plato.customer, plato.customer_address, plato.date_dim, plato.item + where cs_sold_date_sk = d_date_sk and + cs_item_sk = i_item_sk and + cs_bill_cdemo_sk = cd1.cd_demo_sk and + cs_bill_customer_sk = c_customer_sk and + cd1.cd_gender = 'M' and + cd1.cd_education_status = 'College' and + c_current_cdemo_sk = cd2.cd_demo_sk and + c_current_addr_sk = ca_address_sk and + c_birth_month in (9,5,12,4,1,10) and + d_year = 2001 and + ca_state in ('ND','WI','AL' + ,'NC','OK','MS','TN') + group by rollup (i_item_id, ca_country, ca_state, ca_county) + order by ca_country, + ca_state, + ca_county, + i_item_id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query18.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q19.sql b/yt/yql/tests/sql/suites/pg-tpcds/q19.sql new file mode 100644 index 0000000000..ff2d9315c8 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q19.sql @@ -0,0 +1,28 @@ +--!syntax_pg +--TPC-DS Q19 + +-- start query 1 in stream 0 using template ../query_templates/query19.tpl +select i_brand_id brand_id, i_brand brand, i_manufact_id, i_manufact, + sum(ss_ext_sales_price) ext_price + from plato.date_dim, plato.store_sales, plato.item,plato.customer,plato.customer_address,plato.store + where d_date_sk = ss_sold_date_sk + and ss_item_sk = i_item_sk + and i_manager_id=7 + and d_moy=11 + and d_year=1999 + and ss_customer_sk = c_customer_sk + and c_current_addr_sk = ca_address_sk + and substr(ca_zip,1,5) <> substr(s_zip,1,5) + and ss_store_sk = s_store_sk + group by i_brand + ,i_brand_id + ,i_manufact_id + ,i_manufact + order by ext_price desc + ,i_brand + ,i_brand_id + ,i_manufact_id + ,i_manufact +limit 100 ; + +-- end query 1 in stream 0 using template ../query_templates/query19.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q20.sql b/yt/yql/tests/sql/suites/pg-tpcds/q20.sql new file mode 100644 index 0000000000..8e1e02682f --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q20.sql @@ -0,0 +1,33 @@ +--!syntax_pg +--TPC-DS Q20 + +-- start query 1 in stream 0 using template ../query_templates/query20.tpl +select i_item_id + ,i_item_desc + ,i_category + ,i_class + ,i_current_price + ,sum(cs_ext_sales_price) as itemrevenue + ,sum(cs_ext_sales_price)*100::numeric/sum(sum(cs_ext_sales_price)) over + (partition by i_class) as revenueratio + from plato.catalog_sales + ,plato.item + ,plato.date_dim + where cs_item_sk = i_item_sk + and i_category in ('Jewelry', 'Sports', 'Books') + and cs_sold_date_sk = d_date_sk + and d_date between cast('2001-01-12' as date) + and (cast('2001-01-12' as date) + interval '30' day)::date + group by i_item_id + ,i_item_desc + ,i_category + ,i_class + ,i_current_price + order by i_category + ,i_class + ,i_item_id + ,i_item_desc + ,revenueratio +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query20.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q21.sql b/yt/yql/tests/sql/suites/pg-tpcds/q21.sql new file mode 100644 index 0000000000..c5eca101b9 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q21.sql @@ -0,0 +1,33 @@ +--!syntax_pg +--TPC-DS Q21 + +-- start query 1 in stream 0 using template ../query_templates/query21.tpl +select * + from(select w_warehouse_name + ,i_item_id + ,sum(case when (cast(d_date as date) < cast ('1998-04-08' as date)) + then inv_quantity_on_hand + else 0 end) as inv_before + ,sum(case when (cast(d_date as date) >= cast ('1998-04-08' as date)) + then inv_quantity_on_hand + else 0 end) as inv_after + from plato.inventory + ,plato.warehouse + ,plato.item + ,plato.date_dim + where i_current_price between 0.99::numeric and 1.49::numeric + and i_item_sk = inv_item_sk + and inv_warehouse_sk = w_warehouse_sk + and inv_date_sk = d_date_sk + and d_date between (cast ('1998-04-08' as date) - interval '30' day)::date + and (cast ('1998-04-08' as date) + interval '30' day)::date + group by w_warehouse_name, i_item_id) x + where (case when inv_before > 0 + then inv_after / inv_before + else null::int8 + end) between (2.0/3.0)::int8 and (3.0/2.0)::int8 + order by w_warehouse_name + ,i_item_id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query21.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q22.sql b/yt/yql/tests/sql/suites/pg-tpcds/q22.sql new file mode 100644 index 0000000000..889168511b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q22.sql @@ -0,0 +1,23 @@ +--!syntax_pg +--TPC-DS Q22 + +-- start query 1 in stream 0 using template ../query_templates/query22.tpl +select i_product_name + ,i_brand + ,i_class + ,i_category + ,avg(inv_quantity_on_hand) qoh + from plato.inventory + ,plato.date_dim + ,plato.item + where inv_date_sk=d_date_sk + and inv_item_sk=i_item_sk + and d_month_seq between 1212 and 1212 + 11 + group by rollup(i_product_name + ,i_brand + ,i_class + ,i_category) +order by qoh, i_product_name, i_brand, i_class, i_category +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query22.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q23.sql b/yt/yql/tests/sql/suites/pg-tpcds/q23.sql new file mode 100644 index 0000000000..7dfc9f03ee --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q23.sql @@ -0,0 +1,110 @@ +--!syntax_pg +--TPC-DS Q23 + +-- start query 1 in stream 0 using template ../query_templates/query23.tpl +with frequent_ss_items as + (select substr(i_item_desc,1,30) itemdesc,i_item_sk item_sk,d_date solddate,count(*) cnt + from plato.store_sales + ,plato.date_dim + ,plato.item + where ss_sold_date_sk = d_date_sk + and ss_item_sk = i_item_sk + and d_year in (1999,1999+1,1999+2,1999+3) + group by substr(i_item_desc,1,30),i_item_sk,d_date + having count(*) >4), + max_store_sales as + (select max(csales) tpcds_cmax + from (select c_customer_sk,sum(ss_quantity::numeric*ss_sales_price) csales + from plato.store_sales + ,plato.customer + ,plato.date_dim + where ss_customer_sk = c_customer_sk + and ss_sold_date_sk = d_date_sk + and d_year in (1999,1999+1,1999+2,1999+3) + group by c_customer_sk) a), + best_ss_customer as + (select c_customer_sk,sum(ss_quantity::numeric*ss_sales_price) ssales + from plato.store_sales + ,plato.customer + where ss_customer_sk = c_customer_sk + group by c_customer_sk + having sum(ss_quantity::numeric*ss_sales_price) > (95.0/100.0)::numeric * (select + * +from + max_store_sales)::numeric) + select sum(sales) + from (select cs_quantity::numeric*cs_list_price sales + from plato.catalog_sales + ,plato.date_dim + where d_year = 1999 + and d_moy = 1 + and cs_sold_date_sk = d_date_sk + and cs_item_sk in (select item_sk from frequent_ss_items) + and cs_bill_customer_sk in (select c_customer_sk from best_ss_customer) + union all + select ws_quantity::numeric*ws_list_price sales + from plato.web_sales + ,plato.date_dim + where d_year = 1999 + and d_moy = 1 + and ws_sold_date_sk = d_date_sk + and ws_item_sk in (select item_sk from frequent_ss_items) + and ws_bill_customer_sk in (select c_customer_sk from best_ss_customer)) a + limit 100; +with frequent_ss_items as + (select substr(i_item_desc,1,30) itemdesc,i_item_sk item_sk,d_date solddate,count(*) cnt + from plato.store_sales + ,plato.date_dim + ,plato.item + where ss_sold_date_sk = d_date_sk + and ss_item_sk = i_item_sk + and d_year in (1999,1999 + 1,1999 + 2,1999 + 3) + group by substr(i_item_desc,1,30),i_item_sk,d_date + having count(*) >4), + max_store_sales as + (select max(csales) tpcds_cmax + from (select c_customer_sk,sum(ss_quantity::numeric*ss_sales_price) csales + from plato.store_sales + ,plato.customer + ,plato.date_dim + where ss_customer_sk = c_customer_sk + and ss_sold_date_sk = d_date_sk + and d_year in (1999,1999+1,1999+2,1999+3) + group by c_customer_sk) a), + best_ss_customer as + (select c_customer_sk,sum(ss_quantity::numeric*ss_sales_price) ssales + from plato.store_sales + ,plato.customer + where ss_customer_sk = c_customer_sk + group by c_customer_sk + having sum(ss_quantity::numeric*ss_sales_price) > (95.0/100.0)::numeric * (select + * + from max_store_sales)::numeric) + select c_last_name,c_first_name,sales + from (select c_last_name,c_first_name,sum(cs_quantity::numeric*cs_list_price) sales + from plato.catalog_sales + ,plato.customer + ,plato.date_dim + where d_year = 1999 + and d_moy = 1 + and cs_sold_date_sk = d_date_sk + and cs_item_sk in (select item_sk from frequent_ss_items) + and cs_bill_customer_sk in (select c_customer_sk from best_ss_customer) + and cs_bill_customer_sk = c_customer_sk + group by c_last_name,c_first_name + union all + select c_last_name,c_first_name,sum(ws_quantity::numeric*ws_list_price) sales + from plato.web_sales + ,plato.customer + ,plato.date_dim + where d_year = 1999 + and d_moy = 1 + and ws_sold_date_sk = d_date_sk + and ws_item_sk in (select item_sk from frequent_ss_items) + and ws_bill_customer_sk in (select c_customer_sk from best_ss_customer) + and ws_bill_customer_sk = c_customer_sk + group by c_last_name,c_first_name) a + order by c_last_name,c_first_name,sales + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query23.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q24.sql b/yt/yql/tests/sql/suites/pg-tpcds/q24.sql new file mode 100644 index 0000000000..320888452d --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q24.sql @@ -0,0 +1,110 @@ +--!syntax_pg +--TPC-DS Q24 + +-- start query 1 in stream 0 using template ../query_templates/query24.tpl +with ssales as +(select c_last_name + ,c_first_name + ,s_store_name + ,ca_state + ,s_state + ,i_color + ,i_current_price + ,i_manager_id + ,i_units + ,i_size + ,sum(ss_sales_price) netpaid +from plato.store_sales + ,plato.store_returns + ,plato.store + ,plato.item + ,plato.customer + ,plato.customer_address +where ss_ticket_number = sr_ticket_number + and ss_item_sk = sr_item_sk + and ss_customer_sk = c_customer_sk + and ss_item_sk = i_item_sk + and ss_store_sk = s_store_sk + and c_current_addr_sk = ca_address_sk + and c_birth_country <> upper(ca_country) + and s_zip = ca_zip +and s_market_id=7 +group by c_last_name + ,c_first_name + ,s_store_name + ,ca_state + ,s_state + ,i_color + ,i_current_price + ,i_manager_id + ,i_units + ,i_size) +select c_last_name + ,c_first_name + ,s_store_name + ,sum(netpaid) paid +from ssales +where i_color = 'orchid' +group by c_last_name + ,c_first_name + ,s_store_name +having sum(netpaid) > (select 0.05::numeric*avg(netpaid) + from ssales) +order by c_last_name + ,c_first_name + ,s_store_name +; +with ssales as +(select c_last_name + ,c_first_name + ,s_store_name + ,ca_state + ,s_state + ,i_color + ,i_current_price + ,i_manager_id + ,i_units + ,i_size + ,sum(ss_sales_price) netpaid +from plato.store_sales + ,plato.store_returns + ,plato.store + ,plato.item + ,plato.customer + ,plato.customer_address +where ss_ticket_number = sr_ticket_number + and ss_item_sk = sr_item_sk + and ss_customer_sk = c_customer_sk + and ss_item_sk = i_item_sk + and ss_store_sk = s_store_sk + and c_current_addr_sk = ca_address_sk + and c_birth_country <> upper(ca_country) + and s_zip = ca_zip + and s_market_id = 7 +group by c_last_name + ,c_first_name + ,s_store_name + ,ca_state + ,s_state + ,i_color + ,i_current_price + ,i_manager_id + ,i_units + ,i_size) +select c_last_name + ,c_first_name + ,s_store_name + ,sum(netpaid) paid +from ssales +where i_color = 'chiffon' +group by c_last_name + ,c_first_name + ,s_store_name +having sum(netpaid) > (select 0.05::numeric*avg(netpaid) + from ssales) +order by c_last_name + ,c_first_name + ,s_store_name +; + +-- end query 1 in stream 0 using template ../query_templates/query24.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q25.sql b/yt/yql/tests/sql/suites/pg-tpcds/q25.sql new file mode 100644 index 0000000000..764be84db6 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q25.sql @@ -0,0 +1,51 @@ +--!syntax_pg +--TPC-DS Q25 + +-- start query 1 in stream 0 using template ../query_templates/query25.tpl +select + i_item_id + ,i_item_desc + ,s_store_id + ,s_store_name + ,sum(ss_net_profit) as store_sales_profit + ,sum(sr_net_loss) as store_returns_loss + ,sum(cs_net_profit) as catalog_sales_profit + from + plato.store_sales + ,plato.store_returns + ,plato.catalog_sales + ,plato.date_dim d1 + ,plato.date_dim d2 + ,plato.date_dim d3 + ,plato.store + ,plato.item + where + d1.d_moy = 4 + and d1.d_year = 2000 + and d1.d_date_sk = ss_sold_date_sk + and i_item_sk = ss_item_sk + and s_store_sk = ss_store_sk + and ss_customer_sk = sr_customer_sk + and ss_item_sk = sr_item_sk + and ss_ticket_number = sr_ticket_number + and sr_returned_date_sk = d2.d_date_sk + and d2.d_moy between 4 and 10 + and d2.d_year = 2000 + and sr_customer_sk = cs_bill_customer_sk + and sr_item_sk = cs_item_sk + and cs_sold_date_sk = d3.d_date_sk + and d3.d_moy between 4 and 10 + and d3.d_year = 2000 + group by + i_item_id + ,i_item_desc + ,s_store_id + ,s_store_name + order by + i_item_id + ,i_item_desc + ,s_store_id + ,s_store_name + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query25.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q26.sql b/yt/yql/tests/sql/suites/pg-tpcds/q26.sql new file mode 100644 index 0000000000..9d3e5f6200 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q26.sql @@ -0,0 +1,24 @@ +--!syntax_pg +--TPC-DS Q26 + +-- start query 1 in stream 0 using template ../query_templates/query26.tpl +select i_item_id, + avg(cs_quantity) agg1, + avg(cs_list_price) agg2, + avg(cs_coupon_amt) agg3, + avg(cs_sales_price) agg4 + from plato.catalog_sales, plato.customer_demographics, plato.date_dim, plato.item, plato.promotion + where cs_sold_date_sk = d_date_sk and + cs_item_sk = i_item_sk and + cs_bill_cdemo_sk = cd_demo_sk and + cs_promo_sk = p_promo_sk and + cd_gender = 'F' and + cd_marital_status = 'W' and + cd_education_status = 'Primary' and + (p_channel_email = 'N' or p_channel_event = 'N') and + d_year = 1998 + group by i_item_id + order by i_item_id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query26.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q27.sql b/yt/yql/tests/sql/suites/pg-tpcds/q27.sql new file mode 100644 index 0000000000..a83e9a6e19 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q27.sql @@ -0,0 +1,26 @@ +--!syntax_pg +--TPC-DS Q27 + +-- start query 1 in stream 0 using template ../query_templates/query27.tpl +select i_item_id, + s_state, grouping(s_state) g_state, + avg(ss_quantity) agg1, + avg(ss_list_price) agg2, + avg(ss_coupon_amt) agg3, + avg(ss_sales_price) agg4 + from plato.store_sales, plato.customer_demographics, plato.date_dim, plato.store, plato.item + where ss_sold_date_sk = d_date_sk and + ss_item_sk = i_item_sk and + ss_store_sk = s_store_sk and + ss_cdemo_sk = cd_demo_sk and + cd_gender = 'F' and + cd_marital_status = 'W' and + cd_education_status = 'Primary' and + d_year = 1998 and + s_state in ('TN','TN', 'TN', 'TN', 'TN', 'TN') + group by rollup (i_item_id, s_state) + order by i_item_id + ,s_state + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query27.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q28.sql b/yt/yql/tests/sql/suites/pg-tpcds/q28.sql new file mode 100644 index 0000000000..c20841d8b8 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q28.sql @@ -0,0 +1,56 @@ +--!syntax_pg +--TPC-DS Q28 + +-- start query 1 in stream 0 using template ../query_templates/query28.tpl +select * +from (select avg(ss_list_price) B1_LP + ,count(ss_list_price) B1_CNT + ,count(distinct ss_list_price) B1_CNTD + from plato.store_sales + where ss_quantity between 0 and 5 + and (ss_list_price between 11::numeric and (11+10)::numeric + or ss_coupon_amt between 460::numeric and (460+1000)::numeric + or ss_wholesale_cost between 14::numeric and (14+20)::numeric)) B1, + (select avg(ss_list_price) B2_LP + ,count(ss_list_price) B2_CNT + ,count(distinct ss_list_price) B2_CNTD + from plato.store_sales + where ss_quantity between 6 and 10 + and (ss_list_price between 91::numeric and (91+10)::numeric + or ss_coupon_amt between 1430::numeric and (1430+1000)::numeric + or ss_wholesale_cost between 32::numeric and (32+20)::numeric)) B2, + (select avg(ss_list_price) B3_LP + ,count(ss_list_price) B3_CNT + ,count(distinct ss_list_price) B3_CNTD + from plato.store_sales + where ss_quantity between 11 and 15 + and (ss_list_price between 66::numeric and (66+10)::numeric + or ss_coupon_amt between 920::numeric and (920+1000)::numeric + or ss_wholesale_cost between 4::numeric and (4+20)::numeric)) B3, + (select avg(ss_list_price) B4_LP + ,count(ss_list_price) B4_CNT + ,count(distinct ss_list_price) B4_CNTD + from plato.store_sales + where ss_quantity between 16 and 20 + and (ss_list_price between 142::numeric and (142+10)::numeric + or ss_coupon_amt between 3054::numeric and (3054+1000)::numeric + or ss_wholesale_cost between 80::numeric and (80+20)::numeric)) B4, + (select avg(ss_list_price) B5_LP + ,count(ss_list_price) B5_CNT + ,count(distinct ss_list_price) B5_CNTD + from plato.store_sales + where ss_quantity between 21 and 25 + and (ss_list_price between 135::numeric and (135+10)::numeric + or ss_coupon_amt between 14180::numeric and (14180+1000)::numeric + or ss_wholesale_cost between 38::numeric and (38+20)::numeric)) B5, + (select avg(ss_list_price) B6_LP + ,count(ss_list_price) B6_CNT + ,count(distinct ss_list_price) B6_CNTD + from plato.store_sales + where ss_quantity between 26 and 30 + and (ss_list_price between 28::numeric and (28+10)::numeric + or ss_coupon_amt between 2513::numeric and (2513+1000)::numeric + or ss_wholesale_cost between 42::numeric and (42+20)::numeric)) B6 +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query28.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q29.sql b/yt/yql/tests/sql/suites/pg-tpcds/q29.sql new file mode 100644 index 0000000000..0b2bf6556b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q29.sql @@ -0,0 +1,50 @@ +--!syntax_pg +--TPC-DS Q29 + +-- start query 1 in stream 0 using template ../query_templates/query29.tpl +select + i_item_id + ,i_item_desc + ,s_store_id + ,s_store_name + ,sum(ss_quantity) as store_sales_quantity + ,sum(sr_return_quantity) as store_returns_quantity + ,sum(cs_quantity) as catalog_sales_quantity + from + plato.store_sales + ,plato.store_returns + ,plato.catalog_sales + ,plato.date_dim d1 + ,plato.date_dim d2 + ,plato.date_dim d3 + ,plato.store + ,plato.item + where + d1.d_moy = 4 + and d1.d_year = 1999 + and d1.d_date_sk = ss_sold_date_sk + and i_item_sk = ss_item_sk + and s_store_sk = ss_store_sk + and ss_customer_sk = sr_customer_sk + and ss_item_sk = sr_item_sk + and ss_ticket_number = sr_ticket_number + and sr_returned_date_sk = d2.d_date_sk + and d2.d_moy between 4 and 4 + 3 + and d2.d_year = 1999 + and sr_customer_sk = cs_bill_customer_sk + and sr_item_sk = cs_item_sk + and cs_sold_date_sk = d3.d_date_sk + and d3.d_year in (1999,1999+1,1999+2) + group by + i_item_id + ,i_item_desc + ,s_store_id + ,s_store_name + order by + i_item_id + ,i_item_desc + ,s_store_id + ,s_store_name + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query29.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q30.sql b/yt/yql/tests/sql/suites/pg-tpcds/q30.sql new file mode 100644 index 0000000000..a1d3319069 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q30.sql @@ -0,0 +1,34 @@ +--!syntax_pg +--TPC-DS Q30 + +-- start query 1 in stream 0 using template ../query_templates/query30.tpl +with customer_total_return as + (select wr_returning_customer_sk as ctr_customer_sk + ,ca_state as ctr_state, + sum(wr_return_amt) as ctr_total_return + from plato.web_returns + ,plato.date_dim + ,plato.customer_address + where wr_returned_date_sk = d_date_sk + and d_year =2002 + and wr_returning_addr_sk = ca_address_sk + group by wr_returning_customer_sk + ,ca_state) + select c_customer_id,c_salutation,c_first_name,c_last_name,c_preferred_cust_flag + ,c_birth_day,c_birth_month,c_birth_year,c_birth_country,c_login,c_email_address + ,c_last_review_date,ctr_total_return + from customer_total_return ctr1 + ,plato.customer_address + ,plato.customer + where ctr1.ctr_total_return > (select avg(ctr_total_return)*1.2::numeric + from customer_total_return ctr2 + where ctr1.ctr_state = ctr2.ctr_state) + and ca_address_sk = c_current_addr_sk + and ca_state = 'IL' + and ctr1.ctr_customer_sk = c_customer_sk + order by c_customer_id,c_salutation,c_first_name,c_last_name,c_preferred_cust_flag + ,c_birth_day,c_birth_month,c_birth_year,c_birth_country,c_login,c_email_address + ,c_last_review_date,ctr_total_return +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query30.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q31.sql b/yt/yql/tests/sql/suites/pg-tpcds/q31.sql new file mode 100644 index 0000000000..7cc0cc6542 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q31.sql @@ -0,0 +1,55 @@ +--!syntax_pg +--TPC-DS Q31 + +-- start query 1 in stream 0 using template ../query_templates/query31.tpl +with ss as + (select ca_county,d_qoy, d_year,sum(ss_ext_sales_price) as store_sales + from plato.store_sales,plato.date_dim,plato.customer_address + where ss_sold_date_sk = d_date_sk + and ss_addr_sk=ca_address_sk + group by ca_county,d_qoy, d_year), + ws as + (select ca_county,d_qoy, d_year,sum(ws_ext_sales_price) as web_sales + from plato.web_sales,plato.date_dim,plato.customer_address + where ws_sold_date_sk = d_date_sk + and ws_bill_addr_sk=ca_address_sk + group by ca_county,d_qoy, d_year) + select + ss1.ca_county + ,ss1.d_year + ,ws2.web_sales/ws1.web_sales web_q1_q2_increase + ,ss2.store_sales/ss1.store_sales store_q1_q2_increase + ,ws3.web_sales/ws2.web_sales web_q2_q3_increase + ,ss3.store_sales/ss2.store_sales store_q2_q3_increase + from + ss ss1 + ,ss ss2 + ,ss ss3 + ,ws ws1 + ,ws ws2 + ,ws ws3 + where + ss1.d_qoy = 1 + and ss1.d_year = 2000 + and ss1.ca_county = ss2.ca_county + and ss2.d_qoy = 2 + and ss2.d_year = 2000 + and ss2.ca_county = ss3.ca_county + and ss3.d_qoy = 3 + and ss3.d_year = 2000 + and ss1.ca_county = ws1.ca_county + and ws1.d_qoy = 1 + and ws1.d_year = 2000 + and ws1.ca_county = ws2.ca_county + and ws2.d_qoy = 2 + and ws2.d_year = 2000 + and ws1.ca_county = ws3.ca_county + and ws3.d_qoy = 3 + and ws3.d_year =2000 + and case when ws1.web_sales > 0::numeric then ws2.web_sales/ws1.web_sales else null::numeric end + > case when ss1.store_sales > 0::numeric then ss2.store_sales/ss1.store_sales else null::numeric end + and case when ws2.web_sales > 0::numeric then ws3.web_sales/ws2.web_sales else null::numeric end + > case when ss2.store_sales > 0::numeric then ss3.store_sales/ss2.store_sales else null::numeric end + order by ss1.d_year; + +-- end query 1 in stream 0 using template ../query_templates/query31.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q32.sql b/yt/yql/tests/sql/suites/pg-tpcds/q32.sql new file mode 100644 index 0000000000..babfacba04 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q32.sql @@ -0,0 +1,31 @@ +--!syntax_pg +--TPC-DS Q32 + +-- start query 1 in stream 0 using template ../query_templates/query32.tpl +select sum(cs_ext_discount_amt) as "excess discount amount" +from + plato.catalog_sales + ,plato.item + ,plato.date_dim +where +i_manufact_id = 269 +and i_item_sk = cs_item_sk +and d_date between '1998-03-18'::date and + (cast('1998-03-18' as date) + interval '90' day)::date +and d_date_sk = cs_sold_date_sk +and cs_ext_discount_amt + > ( + select + 1.3::numeric * avg(cs_ext_discount_amt) + from + plato.catalog_sales + ,plato.date_dim + where + cs_item_sk = i_item_sk + and d_date between '1998-03-18'::date and + (cast('1998-03-18' as date) + interval '90' day)::date + and d_date_sk = cs_sold_date_sk + ) +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query32.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q33.sql b/yt/yql/tests/sql/suites/pg-tpcds/q33.sql new file mode 100644 index 0000000000..1fa71e6f9e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q33.sql @@ -0,0 +1,78 @@ +--!syntax_pg +--TPC-DS Q33 + +-- start query 1 in stream 0 using template ../query_templates/query33.tpl +with ss as ( + select + i_manufact_id,sum(ss_ext_sales_price) total_sales + from + plato.store_sales, + plato.date_dim, + plato.customer_address, + plato.item + where + i_manufact_id in (select + i_manufact_id +from + plato.item +where i_category in ('Books')) + and ss_item_sk = i_item_sk + and ss_sold_date_sk = d_date_sk + and d_year = 1999 + and d_moy = 3 + and ss_addr_sk = ca_address_sk + and ca_gmt_offset = -5::numeric + group by i_manufact_id), + cs as ( + select + i_manufact_id,sum(cs_ext_sales_price) total_sales + from + plato.catalog_sales, + plato.date_dim, + plato.customer_address, + plato.item + where + i_manufact_id in (select + i_manufact_id +from + plato.item +where i_category in ('Books')) + and cs_item_sk = i_item_sk + and cs_sold_date_sk = d_date_sk + and d_year = 1999 + and d_moy = 3 + and cs_bill_addr_sk = ca_address_sk + and ca_gmt_offset = -5::numeric + group by i_manufact_id), + ws as ( + select + i_manufact_id,sum(ws_ext_sales_price) total_sales + from + plato.web_sales, + plato.date_dim, + plato.customer_address, + plato.item + where + i_manufact_id in (select + i_manufact_id +from + plato.item +where i_category in ('Books')) + and ws_item_sk = i_item_sk + and ws_sold_date_sk = d_date_sk + and d_year = 1999 + and d_moy = 3 + and ws_bill_addr_sk = ca_address_sk + and ca_gmt_offset = -5::numeric + group by i_manufact_id) + select i_manufact_id ,sum(total_sales) total_sales + from (select * from ss + union all + select * from cs + union all + select * from ws) tmp1 + group by i_manufact_id + order by total_sales +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query33.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q34.sql b/yt/yql/tests/sql/suites/pg-tpcds/q34.sql new file mode 100644 index 0000000000..c00f60c79f --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q34.sql @@ -0,0 +1,34 @@ +--!syntax_pg +--TPC-DS Q34 + +-- start query 1 in stream 0 using template ../query_templates/query34.tpl +select c_last_name + ,c_first_name + ,c_salutation + ,c_preferred_cust_flag + ,ss_ticket_number + ,cnt from + (select ss_ticket_number + ,ss_customer_sk + ,count(*) cnt + from plato.store_sales,plato.date_dim,plato.store,plato.household_demographics + where store_sales.ss_sold_date_sk = date_dim.d_date_sk + and store_sales.ss_store_sk = store.s_store_sk + and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + and (date_dim.d_dom between 1 and 3 or date_dim.d_dom between 25 and 28) + and (household_demographics.hd_buy_potential = '>10000' or + household_demographics.hd_buy_potential = 'Unknown') + and household_demographics.hd_vehicle_count > 0 + and (case when household_demographics.hd_vehicle_count > 0 + then household_demographics.hd_dep_count/ household_demographics.hd_vehicle_count + else null::int4 + end)::float8 > 1.2::float8 + and date_dim.d_year in (1998,1998+1,1998+2) + and store.s_county in ('Williamson County','Williamson County','Williamson County','Williamson County', + 'Williamson County','Williamson County','Williamson County','Williamson County') + group by ss_ticket_number,ss_customer_sk) dn,plato.customer + where ss_customer_sk = c_customer_sk + and cnt between 15::int8 and 20::int8 + order by c_last_name,c_first_name,c_salutation,c_preferred_cust_flag desc, ss_ticket_number; + +-- end query 1 in stream 0 using template ../query_templates/query34.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q35.sql b/yt/yql/tests/sql/suites/pg-tpcds/q35.sql new file mode 100644 index 0000000000..4177175164 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q35.sql @@ -0,0 +1,61 @@ +--!syntax_pg +--TPC-DS Q35 + +-- start query 1 in stream 0 using template ../query_templates/query35.tpl +select + ca_state, + cd_gender, + cd_marital_status, + cd_dep_count, + count(*) cnt1, + avg(cd_dep_count) a1, + max(cd_dep_count) x1, + sum(cd_dep_count) s1, + cd_dep_employed_count, + count(*) cnt2, + avg(cd_dep_employed_count) a2, + max(cd_dep_employed_count) x2, + sum(cd_dep_employed_count) s2, + cd_dep_college_count, + count(*) cnt3, + avg(cd_dep_college_count) a3, + max(cd_dep_college_count) x3, + sum(cd_dep_college_count) s3 + from + plato.customer c,plato.customer_address ca,plato.customer_demographics + where + c.c_current_addr_sk = ca.ca_address_sk and + cd_demo_sk = c.c_current_cdemo_sk and + exists (select * + from plato.store_sales,plato.date_dim + where c.c_customer_sk = ss_customer_sk and + ss_sold_date_sk = d_date_sk and + d_year = 1999 and + d_qoy < 4) and + (exists (select * + from plato.web_sales,plato.date_dim + where c.c_customer_sk = ws_bill_customer_sk and + ws_sold_date_sk = d_date_sk and + d_year = 1999 and + d_qoy < 4) or + exists (select * + from plato.catalog_sales,plato.date_dim + where c.c_customer_sk = cs_ship_customer_sk and + cs_sold_date_sk = d_date_sk and + d_year = 1999 and + d_qoy < 4)) + group by ca_state, + cd_gender, + cd_marital_status, + cd_dep_count, + cd_dep_employed_count, + cd_dep_college_count + order by ca_state, + cd_gender, + cd_marital_status, + cd_dep_count, + cd_dep_employed_count, + cd_dep_college_count + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query35.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q36.sql b/yt/yql/tests/sql/suites/pg-tpcds/q36.sql new file mode 100644 index 0000000000..fe38dc7e86 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q36.sql @@ -0,0 +1,33 @@ +--!syntax_pg +--TPC-DS Q36 + +-- start query 1 in stream 0 using template ../query_templates/query36.tpl +select + sum(ss_net_profit)/sum(ss_ext_sales_price) as gross_margin + ,i_category + ,i_class + ,grouping(i_category)+grouping(i_class) as lochierarchy + ,rank() over ( + partition by grouping(i_category)+grouping(i_class), + case when grouping(i_class) = 0 then i_category end + order by sum(ss_net_profit)/sum(ss_ext_sales_price) asc) as rank_within_parent + from + plato.store_sales + ,plato.date_dim d1 + ,plato.item + ,plato.store + where + d1.d_year = 2000 + and d1.d_date_sk = ss_sold_date_sk + and i_item_sk = ss_item_sk + and s_store_sk = ss_store_sk + and s_state in ('TN','TN','TN','TN', + 'TN','TN','TN','TN') + group by rollup(i_category,i_class) + order by + lochierarchy desc + ,case when lochierarchy = 0 then i_category end + ,rank_within_parent + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query36.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q37.sql b/yt/yql/tests/sql/suites/pg-tpcds/q37.sql new file mode 100644 index 0000000000..285325bfae --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q37.sql @@ -0,0 +1,20 @@ +--!syntax_pg +--TPC-DS Q37 + +-- start query 1 in stream 0 using template ../query_templates/query37.tpl +select i_item_id + ,i_item_desc + ,i_current_price + from plato.item, plato.inventory, plato.date_dim, plato.catalog_sales + where i_current_price between 22::numeric and (22 + 30)::numeric + and inv_item_sk = i_item_sk + and d_date_sk=inv_date_sk + and d_date between cast('2001-06-02' as date) and (cast('2001-06-02' as date) + interval '60' day)::date + and i_manufact_id in (678,964,918,849) + and inv_quantity_on_hand between 100 and 500 + and cs_item_sk = i_item_sk + group by i_item_id,i_item_desc,i_current_price + order by i_item_id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query37.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q38.sql b/yt/yql/tests/sql/suites/pg-tpcds/q38.sql new file mode 100644 index 0000000000..f27da36e41 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q38.sql @@ -0,0 +1,26 @@ +--!syntax_pg +--TPC-DS Q38 + +-- start query 1 in stream 0 using template ../query_templates/query38.tpl +select count(*) from ( + select distinct c_last_name, c_first_name, d_date + from plato.store_sales, plato.date_dim, plato.customer + where store_sales.ss_sold_date_sk = date_dim.d_date_sk + and store_sales.ss_customer_sk = customer.c_customer_sk + and d_month_seq between 1212 and 1212 + 11 + intersect + select distinct c_last_name, c_first_name, d_date + from plato.catalog_sales, plato.date_dim, plato.customer + where catalog_sales.cs_sold_date_sk = date_dim.d_date_sk + and catalog_sales.cs_bill_customer_sk = customer.c_customer_sk + and d_month_seq between 1212 and 1212 + 11 + intersect + select distinct c_last_name, c_first_name, d_date + from plato.web_sales, plato.date_dim, plato.customer + where web_sales.ws_sold_date_sk = date_dim.d_date_sk + and web_sales.ws_bill_customer_sk = customer.c_customer_sk + and d_month_seq between 1212 and 1212 + 11 +) hot_cust +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query38.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q39.sql b/yt/yql/tests/sql/suites/pg-tpcds/q39.sql new file mode 100644 index 0000000000..c877082142 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q39.sql @@ -0,0 +1,57 @@ +--!syntax_pg +--TPC-DS Q39 + +-- start query 1 in stream 0 using template ../query_templates/query39.tpl +with inv as +(select w_warehouse_name,w_warehouse_sk,i_item_sk,d_moy + ,stdev,mean, case mean when 0::numeric then null::numeric else stdev/mean end cov + from(select w_warehouse_name,w_warehouse_sk,i_item_sk,d_moy + ,stddev_samp(inv_quantity_on_hand) stdev,avg(inv_quantity_on_hand) mean + from plato.inventory + ,plato.item + ,plato.warehouse + ,plato.date_dim + where inv_item_sk = i_item_sk + and inv_warehouse_sk = w_warehouse_sk + and inv_date_sk = d_date_sk + and d_year =1998 + group by w_warehouse_name,w_warehouse_sk,i_item_sk,d_moy) foo + where case mean when 0::numeric then 0::numeric else stdev/mean end > 1::numeric) +select inv1.w_warehouse_sk as inv1_w_warehouse_sk,inv1.i_item_sk as inv1_i_item_sk,inv1.d_moy as inv1_d_moy,inv1.mean as inv1_mean, inv1.cov as inv1_cov + ,inv2.w_warehouse_sk as inv2_w_warehouse_sk,inv2.i_item_sk as inv2_i_item_sk,inv2.d_moy as inv2_d_moy,inv2.mean as inv2_mean, inv2.cov as inv2_cov +from inv inv1,inv inv2 +where inv1.i_item_sk = inv2.i_item_sk + and inv1.w_warehouse_sk = inv2.w_warehouse_sk + and inv1.d_moy=4 + and inv2.d_moy=4+1 +order by inv1_w_warehouse_sk,inv1_i_item_sk,inv1_d_moy,inv1_mean,inv1_cov + ,inv2_d_moy,inv2_mean, inv2_cov +; +with inv as +(select w_warehouse_name,w_warehouse_sk,i_item_sk,d_moy + ,stdev,mean, case mean when 0::numeric then null::numeric else stdev/mean end cov + from(select w_warehouse_name,w_warehouse_sk,i_item_sk,d_moy + ,stddev_samp(inv_quantity_on_hand) stdev,avg(inv_quantity_on_hand) mean + from plato.inventory + ,plato.item + ,plato.warehouse + ,plato.date_dim + where inv_item_sk = i_item_sk + and inv_warehouse_sk = w_warehouse_sk + and inv_date_sk = d_date_sk + and d_year =1998 + group by w_warehouse_name,w_warehouse_sk,i_item_sk,d_moy) foo + where case mean when 0::numeric then 0::numeric else stdev/mean end > 1::numeric) +select inv1.w_warehouse_sk as inv1_w_warehouse_sk,inv1.i_item_sk as inv1_i_item_sk,inv1.d_moy as inv1_d_moy,inv1.mean as inv1_mean, inv1.cov as inv1_cov + ,inv2.w_warehouse_sk as inv2_w_warehouse_sk,inv2.i_item_sk as inv2_i_item_sk,inv2.d_moy as inv2_d_moy,inv2.mean as inv2_mean, inv2.cov as inv2_cov +from inv inv1,inv inv2 +where inv1.i_item_sk = inv2.i_item_sk + and inv1.w_warehouse_sk = inv2.w_warehouse_sk + and inv1.d_moy=4 + and inv2.d_moy=4+1 + and inv1.cov > 1.5::numeric +order by inv1_w_warehouse_sk,inv1_i_item_sk,inv1_d_moy,inv1_mean,inv1_cov + ,inv2_d_moy,inv2_mean, inv2_cov +; + +-- end query 1 in stream 0 using template ../query_templates/query39.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q40.sql b/yt/yql/tests/sql/suites/pg-tpcds/q40.sql new file mode 100644 index 0000000000..f7249d21c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q40.sql @@ -0,0 +1,31 @@ +--!syntax_pg +--TPC-DS Q40 + +-- start query 1 in stream 0 using template ../query_templates/query40.tpl +select + w_state + ,i_item_id + ,sum(case when (cast(d_date as date) < cast ('1998-04-08' as date)) + then cs_sales_price - coalesce(cr_refunded_cash,0::numeric) else 0::numeric end) as sales_before + ,sum(case when (cast(d_date as date) >= cast ('1998-04-08' as date)) + then cs_sales_price - coalesce(cr_refunded_cash,0::numeric) else 0::numeric end) as sales_after + from + plato.catalog_sales left outer join plato.catalog_returns on + (cs_order_number = cr_order_number + and cs_item_sk = cr_item_sk) + ,plato.warehouse + ,plato.item + ,plato.date_dim + where + i_current_price between 0.99::numeric and 1.49::numeric + and i_item_sk = cs_item_sk + and cs_warehouse_sk = w_warehouse_sk + and cs_sold_date_sk = d_date_sk + and d_date between (cast ('1998-04-08' as date) - interval '30' day)::date + and (cast ('1998-04-08' as date) + interval '30' day)::date + group by + w_state,i_item_id + order by w_state,i_item_id +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query40.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q41.sql b/yt/yql/tests/sql/suites/pg-tpcds/q41.sql new file mode 100644 index 0000000000..6b79d610f1 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q41.sql @@ -0,0 +1,55 @@ +--!syntax_pg +--TPC-DS Q41 + +-- start query 1 in stream 0 using template ../query_templates/query41.tpl +select distinct(i_product_name) + from plato.item i1 + where i_manufact_id between 742 and 742+40 + and (select count(*) as item_cnt + from plato.item + where (i_manufact = i1.i_manufact and + ((i_category = 'Women' and + (i_color = 'orchid' or i_color = 'papaya') and + (i_units = 'Pound' or i_units = 'Lb') and + (i_size = 'petite' or i_size = 'medium') + ) or + (i_category = 'Women' and + (i_color = 'burlywood' or i_color = 'navy') and + (i_units = 'Bundle' or i_units = 'Each') and + (i_size = 'N/A' or i_size = 'extra large') + ) or + (i_category = 'Men' and + (i_color = 'bisque' or i_color = 'azure') and + (i_units = 'N/A' or i_units = 'Tsp') and + (i_size = 'small' or i_size = 'large') + ) or + (i_category = 'Men' and + (i_color = 'chocolate' or i_color = 'cornflower') and + (i_units = 'Bunch' or i_units = 'Gross') and + (i_size = 'petite' or i_size = 'medium') + ))) or + (i_manufact = i1.i_manufact and + ((i_category = 'Women' and + (i_color = 'salmon' or i_color = 'midnight') and + (i_units = 'Oz' or i_units = 'Box') and + (i_size = 'petite' or i_size = 'medium') + ) or + (i_category = 'Women' and + (i_color = 'snow' or i_color = 'steel') and + (i_units = 'Carton' or i_units = 'Tbl') and + (i_size = 'N/A' or i_size = 'extra large') + ) or + (i_category = 'Men' and + (i_color = 'purple' or i_color = 'gainsboro') and + (i_units = 'Dram' or i_units = 'Unknown') and + (i_size = 'small' or i_size = 'large') + ) or + (i_category = 'Men' and + (i_color = 'metallic' or i_color = 'forest') and + (i_units = 'Gram' or i_units = 'Ounce') and + (i_size = 'petite' or i_size = 'medium') + )))) > 0 + order by i_product_name + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query41.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q42.sql b/yt/yql/tests/sql/suites/pg-tpcds/q42.sql new file mode 100644 index 0000000000..a8fed2fb3a --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q42.sql @@ -0,0 +1,25 @@ +--!syntax_pg +--TPC-DS Q42 + +-- start query 1 in stream 0 using template ../query_templates/query42.tpl +select dt.d_year + ,item.i_category_id + ,item.i_category + ,sum(ss_ext_sales_price) + from plato.date_dim dt + ,plato.store_sales + ,plato.item + where dt.d_date_sk = store_sales.ss_sold_date_sk + and store_sales.ss_item_sk = item.i_item_sk + and item.i_manager_id = 1 + and dt.d_moy=12 + and dt.d_year=1998 + group by dt.d_year + ,item.i_category_id + ,item.i_category + order by sum(ss_ext_sales_price) desc,dt.d_year + ,item.i_category_id + ,item.i_category +limit 100 ; + +-- end query 1 in stream 0 using template ../query_templates/query42.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q43.sql b/yt/yql/tests/sql/suites/pg-tpcds/q43.sql new file mode 100644 index 0000000000..a2adaad63a --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q43.sql @@ -0,0 +1,22 @@ +--!syntax_pg +--TPC-DS Q43 + +-- start query 1 in stream 0 using template ../query_templates/query43.tpl +select s_store_name, s_store_id, + sum(case when (d_day_name='Sunday') then ss_sales_price else null::numeric end) sun_sales, + sum(case when (d_day_name='Monday') then ss_sales_price else null::numeric end) mon_sales, + sum(case when (d_day_name='Tuesday') then ss_sales_price else null::numeric end) tue_sales, + sum(case when (d_day_name='Wednesday') then ss_sales_price else null::numeric end) wed_sales, + sum(case when (d_day_name='Thursday') then ss_sales_price else null::numeric end) thu_sales, + sum(case when (d_day_name='Friday') then ss_sales_price else null::numeric end) fri_sales, + sum(case when (d_day_name='Saturday') then ss_sales_price else null::numeric end) sat_sales + from plato.date_dim, plato.store_sales, plato.store + where d_date_sk = ss_sold_date_sk and + s_store_sk = ss_store_sk and + s_gmt_offset = -5::numeric and + d_year = 1998 + group by s_store_name, s_store_id + order by s_store_name, s_store_id,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query43.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q44.sql b/yt/yql/tests/sql/suites/pg-tpcds/q44.sql new file mode 100644 index 0000000000..cf5a5fd9fb --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q44.sql @@ -0,0 +1,38 @@ +--!syntax_pg +--TPC-DS Q44 + +-- start query 1 in stream 0 using template ../query_templates/query44.tpl +select asceding.rnk, i1.i_product_name best_performing, i2.i_product_name worst_performing +from(select * + from (select item_sk,rank() over (order by rank_col asc) rnk + from (select ss_item_sk item_sk,avg(ss_net_profit) rank_col + from plato.store_sales ss1 + where ss_store_sk = 2 + group by ss_item_sk + having avg(ss_net_profit) > 0.9::numeric*(select avg(ss_net_profit) rank_col + from plato.store_sales + where ss_store_sk = 2 + and ss_hdemo_sk is null + group by ss_store_sk))V1)V11 + where rnk < 11) asceding, + (select * + from (select item_sk,rank() over (order by rank_col desc) rnk + from (select ss_item_sk item_sk,avg(ss_net_profit) rank_col + from plato.store_sales ss1 + where ss_store_sk = 2 + group by ss_item_sk + having avg(ss_net_profit) > 0.9::numeric*(select avg(ss_net_profit) rank_col + from plato.store_sales + where ss_store_sk = 2 + and ss_hdemo_sk is null + group by ss_store_sk))V2)V21 + where rnk < 11) descending, +plato.item i1, +plato.item i2 +where asceding.rnk = descending.rnk + and i1.i_item_sk=asceding.item_sk + and i2.i_item_sk=descending.item_sk +order by asceding.rnk +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query44.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q45.sql b/yt/yql/tests/sql/suites/pg-tpcds/q45.sql new file mode 100644 index 0000000000..0e8df9be19 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q45.sql @@ -0,0 +1,23 @@ +--!syntax_pg +--TPC-DS Q45 + +-- start query 1 in stream 0 using template ../query_templates/query45.tpl +select ca_zip, ca_county, sum(ws_sales_price) + from plato.web_sales, plato.customer, plato.customer_address, plato.date_dim, plato.item + where ws_bill_customer_sk = c_customer_sk + and c_current_addr_sk = ca_address_sk + and ws_item_sk = i_item_sk + and ( substr(ca_zip,1,5) in ('85669', '86197','88274','83405','86475', '85392', '85460', '80348', '81792') + or + i_item_id in (select i_item_id + from plato.item + where i_item_sk in (2, 3, 5, 7, 11, 13, 17, 19, 23, 29) + ) + ) + and ws_sold_date_sk = d_date_sk + and d_qoy = 2 and d_year = 2000 + group by ca_zip, ca_county + order by ca_zip, ca_county + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query45.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q46.sql b/yt/yql/tests/sql/suites/pg-tpcds/q46.sql new file mode 100644 index 0000000000..27c2b14727 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q46.sql @@ -0,0 +1,38 @@ +--!syntax_pg +--TPC-DS Q46 + +-- start query 1 in stream 0 using template ../query_templates/query46.tpl +select c_last_name + ,c_first_name + ,ca_city + ,bought_city + ,ss_ticket_number + ,amt,profit + from + (select ss_ticket_number + ,ss_customer_sk + ,ca_city bought_city + ,sum(ss_coupon_amt) amt + ,sum(ss_net_profit) profit + from plato.store_sales,plato.date_dim,plato.store,plato.household_demographics,plato.customer_address + where store_sales.ss_sold_date_sk = date_dim.d_date_sk + and store_sales.ss_store_sk = store.s_store_sk + and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + and store_sales.ss_addr_sk = customer_address.ca_address_sk + and (household_demographics.hd_dep_count = 5 or + household_demographics.hd_vehicle_count= 3) + and date_dim.d_dow in (6,0) + and date_dim.d_year in (1999,1999+1,1999+2) + and store.s_city in ('Midway','Fairview','Fairview','Midway','Fairview') + group by ss_ticket_number,ss_customer_sk,ss_addr_sk,ca_city) dn,plato.customer,plato.customer_address current_addr + where ss_customer_sk = c_customer_sk + and customer.c_current_addr_sk = current_addr.ca_address_sk + and current_addr.ca_city <> bought_city + order by c_last_name + ,c_first_name + ,ca_city + ,bought_city + ,ss_ticket_number + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query46.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q47.sql b/yt/yql/tests/sql/suites/pg-tpcds/q47.sql new file mode 100644 index 0000000000..126f80e1eb --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q47.sql @@ -0,0 +1,54 @@ +--!syntax_pg +--TPC-DS Q47 + +-- start query 1 in stream 0 using template ../query_templates/query47.tpl +with v1 as( + select i_category, i_brand, + s_store_name, s_company_name, + d_year, d_moy, + sum(ss_sales_price) sum_sales, + avg(sum(ss_sales_price)) over + (partition by i_category, i_brand, + s_store_name, s_company_name, d_year) + avg_monthly_sales, + rank() over + (partition by i_category, i_brand, + s_store_name, s_company_name + order by d_year, d_moy) rn + from plato.item, plato.store_sales, plato.date_dim, plato.store + where ss_item_sk = i_item_sk and + ss_sold_date_sk = d_date_sk and + ss_store_sk = s_store_sk and + ( + d_year = 2000 or + ( d_year = 2000-1 and d_moy =12) or + ( d_year = 2000+1 and d_moy =1) + ) + group by i_category, i_brand, + s_store_name, s_company_name, + d_year, d_moy), + v2 as( + select v1.i_category, v1.i_brand + ,v1.d_year, v1.d_moy + ,v1.avg_monthly_sales + ,v1.sum_sales, v1_lag.sum_sales psum, v1_lead.sum_sales nsum + from v1, v1 v1_lag, v1 v1_lead + where v1.i_category = v1_lag.i_category and + v1.i_category = v1_lead.i_category and + v1.i_brand = v1_lag.i_brand and + v1.i_brand = v1_lead.i_brand and + v1.s_store_name = v1_lag.s_store_name and + v1.s_store_name = v1_lead.s_store_name and + v1.s_company_name = v1_lag.s_company_name and + v1.s_company_name = v1_lead.s_company_name and + v1.rn = v1_lag.rn + 1 and + v1.rn = v1_lead.rn - 1) + select * + from v2 + where d_year = 2000 and + avg_monthly_sales > 0::numeric and + case when avg_monthly_sales > 0::numeric then abs(sum_sales - avg_monthly_sales) / avg_monthly_sales else null::numeric end > 0.1::numeric + order by sum_sales - avg_monthly_sales, nsum + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query47.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q48.sql b/yt/yql/tests/sql/suites/pg-tpcds/q48.sql new file mode 100644 index 0000000000..43155a852e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q48.sql @@ -0,0 +1,70 @@ +--!syntax_pg +--TPC-DS Q48 + +-- start query 1 in stream 0 using template ../query_templates/query48.tpl +select sum (ss_quantity) + from plato.store_sales, plato.store, plato.customer_demographics, plato.customer_address, plato.date_dim + where s_store_sk = ss_store_sk + and ss_sold_date_sk = d_date_sk and d_year = 1998 + and + ( + ( + cd_demo_sk = ss_cdemo_sk + and + cd_marital_status = 'M' + and + cd_education_status = '4 yr Degree' + and + ss_sales_price between 100.00::numeric and 150.00::numeric + ) + or + ( + cd_demo_sk = ss_cdemo_sk + and + cd_marital_status = 'D' + and + cd_education_status = 'Primary' + and + ss_sales_price between 50.00::numeric and 100.00::numeric + ) + or + ( + cd_demo_sk = ss_cdemo_sk + and + cd_marital_status = 'U' + and + cd_education_status = 'Advanced Degree' + and + ss_sales_price between 150.00::numeric and 200.00::numeric + ) + ) + and + ( + ( + ss_addr_sk = ca_address_sk + and + ca_country = 'United States' + and + ca_state in ('KY', 'GA', 'NM') + and ss_net_profit between 0::numeric and 2000::numeric + ) + or + (ss_addr_sk = ca_address_sk + and + ca_country = 'United States' + and + ca_state in ('MT', 'OR', 'IN') + and ss_net_profit between 150::numeric and 3000::numeric + ) + or + (ss_addr_sk = ca_address_sk + and + ca_country = 'United States' + and + ca_state in ('WI', 'MO', 'WV') + and ss_net_profit between 50::numeric and 25000::numeric + ) + ) +; + +-- end query 1 in stream 0 using template ../query_templates/query48.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q49.sql b/yt/yql/tests/sql/suites/pg-tpcds/q49.sql new file mode 100644 index 0000000000..62fa592b2b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q49.sql @@ -0,0 +1,132 @@ +--!syntax_pg +--TPC-DS Q49 + +-- start query 1 in stream 0 using template ../query_templates/query49.tpl +select channel, item, return_ratio, return_rank, currency_rank from + (select + 'web' as channel + ,web.item + ,web.return_ratio + ,web.return_rank + ,web.currency_rank + from ( + select + item + ,return_ratio + ,currency_ratio + ,rank() over (order by return_ratio) as return_rank + ,rank() over (order by currency_ratio) as currency_rank + from + ( select ws.ws_item_sk as item + ,(cast(sum(coalesce(wr.wr_return_quantity,0)) as decimal(15,4))/ + cast(sum(coalesce(ws.ws_quantity,0)) as decimal(15,4) )) as return_ratio + ,(cast(sum(coalesce(wr.wr_return_amt,0::numeric)) as decimal(15,4))/ + cast(sum(coalesce(ws.ws_net_paid,0::numeric)) as decimal(15,4) )) as currency_ratio + from + plato.web_sales ws left outer join plato.web_returns wr + on (ws.ws_order_number = wr.wr_order_number and + ws.ws_item_sk = wr.wr_item_sk) + ,plato.date_dim + where + wr.wr_return_amt > 10000::numeric + and ws.ws_net_profit > 1::numeric + and ws.ws_net_paid > 0::numeric + and ws.ws_quantity > 0 + and ws_sold_date_sk = d_date_sk + and d_year = 2000 + and d_moy = 12 + group by ws.ws_item_sk + ) in_web + ) web + where + ( + web.return_rank <= 10 + or + web.currency_rank <= 10 + ) + union + select + 'catalog' as channel + ,catalog.item + ,catalog.return_ratio + ,catalog.return_rank + ,catalog.currency_rank + from ( + select + item + ,return_ratio + ,currency_ratio + ,rank() over (order by return_ratio) as return_rank + ,rank() over (order by currency_ratio) as currency_rank + from + ( select + cs.cs_item_sk as item + ,(cast(sum(coalesce(cr.cr_return_quantity,0)) as decimal(15,4))/ + cast(sum(coalesce(cs.cs_quantity,0)) as decimal(15,4) )) as return_ratio + ,(cast(sum(coalesce(cr.cr_return_amount,0::numeric)) as decimal(15,4))/ + cast(sum(coalesce(cs.cs_net_paid,0::numeric)) as decimal(15,4) )) as currency_ratio + from + plato.catalog_sales cs left outer join plato.catalog_returns cr + on (cs.cs_order_number = cr.cr_order_number and + cs.cs_item_sk = cr.cr_item_sk) + ,plato.date_dim + where + cr.cr_return_amount > 10000::numeric + and cs.cs_net_profit > 1::numeric + and cs.cs_net_paid > 0::numeric + and cs.cs_quantity > 0 + and cs_sold_date_sk = d_date_sk + and d_year = 2000 + and d_moy = 12 + group by cs.cs_item_sk + ) in_cat + ) catalog + where + ( + catalog.return_rank <= 10 + or + catalog.currency_rank <=10 + ) + union + select + 'store' as channel + ,store.item + ,store.return_ratio + ,store.return_rank + ,store.currency_rank + from ( + select + item + ,return_ratio + ,currency_ratio + ,rank() over (order by return_ratio) as return_rank + ,rank() over (order by currency_ratio) as currency_rank + from + ( select sts.ss_item_sk as item + ,(cast(sum(coalesce(sr.sr_return_quantity,0)) as decimal(15,4))/cast(sum(coalesce(sts.ss_quantity,0)) as decimal(15,4) )) as return_ratio + ,(cast(sum(coalesce(sr.sr_return_amt,0::numeric)) as decimal(15,4))/cast(sum(coalesce(sts.ss_net_paid,0::numeric)) as decimal(15,4) )) as currency_ratio + from + plato.store_sales sts left outer join plato.store_returns sr + on (sts.ss_ticket_number = sr.sr_ticket_number and sts.ss_item_sk = sr.sr_item_sk) + ,plato.date_dim + where + sr.sr_return_amt > 10000::numeric + and sts.ss_net_profit > 1::numeric + and sts.ss_net_paid > 0::numeric + and sts.ss_quantity > 0 + and ss_sold_date_sk = d_date_sk + and d_year = 2000 + and d_moy = 12 + group by sts.ss_item_sk + ) in_store + ) store + where ( + store.return_rank <= 10 + or + store.currency_rank <= 10 + ) + ) a + order by 1,4,5,2 + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query49.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q50.sql b/yt/yql/tests/sql/suites/pg-tpcds/q50.sql new file mode 100644 index 0000000000..967a684157 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q50.sql @@ -0,0 +1,62 @@ +--!syntax_pg +--TPC-DS Q50 + +-- start query 1 in stream 0 using template ../query_templates/query50.tpl +select + s_store_name + ,s_company_id + ,s_street_number + ,s_street_name + ,s_street_type + ,s_suite_number + ,s_city + ,s_county + ,s_state + ,s_zip + ,sum(case when (sr_returned_date_sk - ss_sold_date_sk <= 30 ) then 1 else 0 end) as "30 days" + ,sum(case when (sr_returned_date_sk - ss_sold_date_sk > 30) and + (sr_returned_date_sk - ss_sold_date_sk <= 60) then 1 else 0 end ) as "31-60 days" + ,sum(case when (sr_returned_date_sk - ss_sold_date_sk > 60) and + (sr_returned_date_sk - ss_sold_date_sk <= 90) then 1 else 0 end) as "61-90 days" + ,sum(case when (sr_returned_date_sk - ss_sold_date_sk > 90) and + (sr_returned_date_sk - ss_sold_date_sk <= 120) then 1 else 0 end) as "91-120 days" + ,sum(case when (sr_returned_date_sk - ss_sold_date_sk > 120) then 1 else 0 end) as ">120 days" +from + plato.store_sales + ,plato.store_returns + ,plato.store + ,plato.date_dim d1 + ,plato.date_dim d2 +where + d2.d_year = 2000 +and d2.d_moy = 9 +and ss_ticket_number = sr_ticket_number +and ss_item_sk = sr_item_sk +and ss_sold_date_sk = d1.d_date_sk +and sr_returned_date_sk = d2.d_date_sk +and ss_customer_sk = sr_customer_sk +and ss_store_sk = s_store_sk +group by + s_store_name + ,s_company_id + ,s_street_number + ,s_street_name + ,s_street_type + ,s_suite_number + ,s_city + ,s_county + ,s_state + ,s_zip +order by s_store_name + ,s_company_id + ,s_street_number + ,s_street_name + ,s_street_type + ,s_suite_number + ,s_city + ,s_county + ,s_state + ,s_zip +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query50.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q51.sql b/yt/yql/tests/sql/suites/pg-tpcds/q51.sql new file mode 100644 index 0000000000..07e822bb3a --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q51.sql @@ -0,0 +1,48 @@ +--!syntax_pg +--TPC-DS Q51 + +-- start query 1 in stream 0 using template ../query_templates/query51.tpl +WITH web_v1 as ( +select + ws_item_sk item_sk, d_date, + sum(sum(ws_sales_price)) + over (partition by ws_item_sk order by d_date rows between unbounded preceding and current row) cume_sales +from plato.web_sales + ,plato.date_dim +where ws_sold_date_sk=d_date_sk + and d_month_seq between 1212 and 1212+11 + and ws_item_sk is not NULL +group by ws_item_sk, d_date), +store_v1 as ( +select + ss_item_sk item_sk, d_date, + sum(sum(ss_sales_price)) + over (partition by ss_item_sk order by d_date rows between unbounded preceding and current row) cume_sales +from plato.store_sales + ,plato.date_dim +where ss_sold_date_sk=d_date_sk + and d_month_seq between 1212 and 1212+11 + and ss_item_sk is not NULL +group by ss_item_sk, d_date) + select * +from (select item_sk + ,d_date + ,web_sales + ,store_sales + ,max(web_sales) + over (partition by item_sk order by d_date rows between unbounded preceding and current row) web_cumulative + ,max(store_sales) + over (partition by item_sk order by d_date rows between unbounded preceding and current row) store_cumulative + from (select case when web.item_sk is not null then web.item_sk else store.item_sk end item_sk + ,case when web.d_date is not null then web.d_date else store.d_date end d_date + ,web.cume_sales web_sales + ,store.cume_sales store_sales + from web_v1 web full outer join store_v1 store on (web.item_sk = store.item_sk + and web.d_date = store.d_date) + )x )y +where web_cumulative > store_cumulative +order by item_sk + ,d_date +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query51.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q52.sql b/yt/yql/tests/sql/suites/pg-tpcds/q52.sql new file mode 100644 index 0000000000..e49b9b8142 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q52.sql @@ -0,0 +1,25 @@ +--!syntax_pg +--TPC-DS Q52 + +-- start query 1 in stream 0 using template ../query_templates/query52.tpl +select dt.d_year + ,item.i_brand_id brand_id + ,item.i_brand brand + ,sum(ss_ext_sales_price) ext_price + from plato.date_dim dt + ,plato.store_sales + ,plato.item + where dt.d_date_sk = store_sales.ss_sold_date_sk + and store_sales.ss_item_sk = item.i_item_sk + and item.i_manager_id = 1 + and dt.d_moy=12 + and dt.d_year=1998 + group by dt.d_year + ,item.i_brand + ,item.i_brand_id + order by dt.d_year + ,ext_price desc + ,brand_id +limit 100 ; + +-- end query 1 in stream 0 using template ../query_templates/query52.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q53.sql b/yt/yql/tests/sql/suites/pg-tpcds/q53.sql new file mode 100644 index 0000000000..bb9c25ce72 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q53.sql @@ -0,0 +1,31 @@ +--!syntax_pg +--TPC-DS Q53 + +-- start query 1 in stream 0 using template ../query_templates/query53.tpl +select * from +(select i_manufact_id, +sum(ss_sales_price) sum_sales, +avg(sum(ss_sales_price)) over (partition by i_manufact_id) avg_quarterly_sales +from plato.item, plato.store_sales, plato.date_dim, plato.store +where ss_item_sk = i_item_sk and +ss_sold_date_sk = d_date_sk and +ss_store_sk = s_store_sk and +d_month_seq in (1212,1212+1,1212+2,1212+3,1212+4,1212+5,1212+6,1212+7,1212+8,1212+9,1212+10,1212+11) and +((i_category in ('Books','Children','Electronics') and +i_class in ('personal','portable','reference','self-help') and +i_brand in ('scholaramalgamalg #14','scholaramalgamalg #7', + 'exportiunivamalg #9','scholaramalgamalg #9')) +or(i_category in ('Women','Music','Men') and +i_class in ('accessories','classical','fragrances','pants') and +i_brand in ('amalgimporto #1','edu packscholar #1','exportiimporto #1', + 'importoamalg #1'))) +group by i_manufact_id, d_qoy ) tmp1 +where case when avg_quarterly_sales > 0::numeric + then abs (sum_sales - avg_quarterly_sales)/ avg_quarterly_sales + else null::numeric end > 0.1::numeric +order by avg_quarterly_sales, + sum_sales, + i_manufact_id +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query53.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q54.sql b/yt/yql/tests/sql/suites/pg-tpcds/q54.sql new file mode 100644 index 0000000000..2396c50fe9 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q54.sql @@ -0,0 +1,59 @@ +--!syntax_pg +--TPC-DS Q54 + +-- start query 1 in stream 0 using template ../query_templates/query54.tpl +with my_customers as ( + select distinct c_customer_sk + , c_current_addr_sk + from + ( select cs_sold_date_sk sold_date_sk, + cs_bill_customer_sk customer_sk, + cs_item_sk item_sk + from plato.catalog_sales + union all + select ws_sold_date_sk sold_date_sk, + ws_bill_customer_sk customer_sk, + ws_item_sk item_sk + from plato.web_sales + ) cs_or_ws_sales, + plato.item, + plato.date_dim, + plato.customer + where sold_date_sk = d_date_sk + and item_sk = i_item_sk + and i_category = 'Jewelry' + and i_class = 'consignment' + and c_customer_sk = cs_or_ws_sales.customer_sk + and d_moy = 3 + and d_year = 1999 + ) + , my_revenue as ( + select c_customer_sk, + sum(ss_ext_sales_price) as revenue + from my_customers, + plato.store_sales, + plato.customer_address, + plato.store, + plato.date_dim + where c_current_addr_sk = ca_address_sk + and ca_county = s_county + and ca_state = s_state + and ss_sold_date_sk = d_date_sk + and c_customer_sk = ss_customer_sk + and d_month_seq between (select distinct d_month_seq+1 + from plato.date_dim where d_year = 1999 and d_moy = 3) + and (select distinct d_month_seq+3 + from plato.date_dim where d_year = 1999 and d_moy = 3) + group by c_customer_sk + ) + , segments as + (select cast((revenue/50::numeric) as int) as segment + from my_revenue + ) + select segment, count(*) as num_customers, segment*50 as segment_base + from segments + group by segment + order by segment, num_customers + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query54.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q55.sql b/yt/yql/tests/sql/suites/pg-tpcds/q55.sql new file mode 100644 index 0000000000..3f42cc3c82 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q55.sql @@ -0,0 +1,17 @@ +--!syntax_pg +--TPC-DS Q55 + +-- start query 1 in stream 0 using template ../query_templates/query55.tpl +select i_brand_id brand_id, i_brand brand, + sum(ss_ext_sales_price) ext_price + from plato.date_dim, plato.store_sales, plato.item + where d_date_sk = ss_sold_date_sk + and ss_item_sk = i_item_sk + and i_manager_id=36 + and d_moy=12 + and d_year=2001 + group by i_brand, i_brand_id + order by ext_price desc, i_brand_id +limit 100 ; + +-- end query 1 in stream 0 using template ../query_templates/query55.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q56.sql b/yt/yql/tests/sql/suites/pg-tpcds/q56.sql new file mode 100644 index 0000000000..8f6b72b284 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q56.sql @@ -0,0 +1,72 @@ +--!syntax_pg +--TPC-DS Q56 + +-- start query 1 in stream 0 using template ../query_templates/query56.tpl +with ss as ( + select i_item_id,sum(ss_ext_sales_price) total_sales + from + plato.store_sales, + plato.date_dim, + plato.customer_address, + plato.item + where i_item_id in (select + i_item_id +from plato.item +where i_color in ('orchid','chiffon','lace')) + and ss_item_sk = i_item_sk + and ss_sold_date_sk = d_date_sk + and d_year = 2000 + and d_moy = 1 + and ss_addr_sk = ca_address_sk + and ca_gmt_offset = -8::numeric + group by i_item_id), + cs as ( + select i_item_id,sum(cs_ext_sales_price) total_sales + from + plato.catalog_sales, + plato.date_dim, + plato.customer_address, + plato.item + where + i_item_id in (select + i_item_id +from plato.item +where i_color in ('orchid','chiffon','lace')) + and cs_item_sk = i_item_sk + and cs_sold_date_sk = d_date_sk + and d_year = 2000 + and d_moy = 1 + and cs_bill_addr_sk = ca_address_sk + and ca_gmt_offset = -8::numeric + group by i_item_id), + ws as ( + select i_item_id,sum(ws_ext_sales_price) total_sales + from + plato.web_sales, + plato.date_dim, + plato.customer_address, + plato.item + where + i_item_id in (select + i_item_id +from plato.item +where i_color in ('orchid','chiffon','lace')) + and ws_item_sk = i_item_sk + and ws_sold_date_sk = d_date_sk + and d_year = 2000 + and d_moy = 1 + and ws_bill_addr_sk = ca_address_sk + and ca_gmt_offset = -8::numeric + group by i_item_id) + select i_item_id ,sum(total_sales) total_sales + from (select * from ss + union all + select * from cs + union all + select * from ws) tmp1 + group by i_item_id + order by total_sales, + i_item_id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query56.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q57.sql b/yt/yql/tests/sql/suites/pg-tpcds/q57.sql new file mode 100644 index 0000000000..29d1e9ee12 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q57.sql @@ -0,0 +1,51 @@ +--!syntax_pg +--TPC-DS Q57 + +-- start query 1 in stream 0 using template ../query_templates/query57.tpl +with v1 as( + select i_category, i_brand, + cc_name, + d_year, d_moy, + sum(cs_sales_price) sum_sales, + avg(sum(cs_sales_price)) over + (partition by i_category, i_brand, + cc_name, d_year) + avg_monthly_sales, + rank() over + (partition by i_category, i_brand, + cc_name + order by d_year, d_moy) rn + from plato.item, plato.catalog_sales, plato.date_dim, plato.call_center + where cs_item_sk = i_item_sk and + cs_sold_date_sk = d_date_sk and + cc_call_center_sk= cs_call_center_sk and + ( + d_year = 2000 or + ( d_year = 2000-1 and d_moy =12) or + ( d_year = 2000+1 and d_moy =1) + ) + group by i_category, i_brand, + cc_name , d_year, d_moy), + v2 as( + select v1.cc_name + ,v1.d_year, v1.d_moy + ,v1.avg_monthly_sales + ,v1.sum_sales, v1_lag.sum_sales psum, v1_lead.sum_sales nsum + from v1, v1 v1_lag, v1 v1_lead + where v1.i_category = v1_lag.i_category and + v1.i_category = v1_lead.i_category and + v1.i_brand = v1_lag.i_brand and + v1.i_brand = v1_lead.i_brand and + v1. cc_name = v1_lag. cc_name and + v1. cc_name = v1_lead. cc_name and + v1.rn = v1_lag.rn + 1 and + v1.rn = v1_lead.rn - 1) + select * + from v2 + where d_year = 2000 and + avg_monthly_sales > 0::numeric and + case when avg_monthly_sales > 0::numeric then abs(sum_sales - avg_monthly_sales) / avg_monthly_sales else null::numeric end > 0.1::numeric + order by sum_sales - avg_monthly_sales, nsum + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query57.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q58.sql b/yt/yql/tests/sql/suites/pg-tpcds/q58.sql new file mode 100644 index 0000000000..5dd8e6aa22 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q58.sql @@ -0,0 +1,68 @@ +--!syntax_pg +--TPC-DS Q58 + +-- start query 1 in stream 0 using template ../query_templates/query58.tpl +with ss_items as + (select i_item_id item_id + ,sum(ss_ext_sales_price) ss_item_rev + from plato.store_sales + ,plato.item + ,plato.date_dim + where ss_item_sk = i_item_sk + and d_date in (select d_date + from plato.date_dim + where d_week_seq = (select d_week_seq + from plato.date_dim + where d_date = '1998-02-19'::date)) + and ss_sold_date_sk = d_date_sk + group by i_item_id), + cs_items as + (select i_item_id item_id + ,sum(cs_ext_sales_price) cs_item_rev + from plato.catalog_sales + ,plato.item + ,plato.date_dim + where cs_item_sk = i_item_sk + and d_date in (select d_date + from plato.date_dim + where d_week_seq = (select d_week_seq + from plato.date_dim + where d_date = '1998-02-19'::date)) + and cs_sold_date_sk = d_date_sk + group by i_item_id), + ws_items as + (select i_item_id item_id + ,sum(ws_ext_sales_price) ws_item_rev + from plato.web_sales + ,plato.item + ,plato.date_dim + where ws_item_sk = i_item_sk + and d_date in (select d_date + from plato.date_dim + where d_week_seq =(select d_week_seq + from plato.date_dim + where d_date = '1998-02-19'::date)) + and ws_sold_date_sk = d_date_sk + group by i_item_id) + select ss_items.item_id + ,ss_item_rev + ,ss_item_rev/((ss_item_rev+cs_item_rev+ws_item_rev)/3::numeric) * 100::numeric ss_dev + ,cs_item_rev + ,cs_item_rev/((ss_item_rev+cs_item_rev+ws_item_rev)/3::numeric) * 100::numeric cs_dev + ,ws_item_rev + ,ws_item_rev/((ss_item_rev+cs_item_rev+ws_item_rev)/3::numeric) * 100::numeric ws_dev + ,(ss_item_rev+cs_item_rev+ws_item_rev)/3::numeric average + from ss_items,cs_items,ws_items + where ss_items.item_id=cs_items.item_id + and ss_items.item_id=ws_items.item_id + and ss_item_rev between 0.9::numeric * cs_item_rev and 1.1::numeric * cs_item_rev + and ss_item_rev between 0.9::numeric * ws_item_rev and 1.1::numeric * ws_item_rev + and cs_item_rev between 0.9::numeric * ss_item_rev and 1.1::numeric * ss_item_rev + and cs_item_rev between 0.9::numeric * ws_item_rev and 1.1::numeric * ws_item_rev + and ws_item_rev between 0.9::numeric * ss_item_rev and 1.1::numeric * ss_item_rev + and ws_item_rev between 0.9::numeric * cs_item_rev and 1.1::numeric * cs_item_rev + order by item_id + ,ss_item_rev + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query58.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q59.sql b/yt/yql/tests/sql/suites/pg-tpcds/q59.sql new file mode 100644 index 0000000000..7d16a9aec8 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q59.sql @@ -0,0 +1,47 @@ +--!syntax_pg +--TPC-DS Q59 + +-- start query 1 in stream 0 using template ../query_templates/query59.tpl +with wss as + (select d_week_seq, + ss_store_sk, + sum(case when (d_day_name='Sunday') then ss_sales_price else null::numeric end) sun_sales, + sum(case when (d_day_name='Monday') then ss_sales_price else null::numeric end) mon_sales, + sum(case when (d_day_name='Tuesday') then ss_sales_price else null::numeric end) tue_sales, + sum(case when (d_day_name='Wednesday') then ss_sales_price else null::numeric end) wed_sales, + sum(case when (d_day_name='Thursday') then ss_sales_price else null::numeric end) thu_sales, + sum(case when (d_day_name='Friday') then ss_sales_price else null::numeric end) fri_sales, + sum(case when (d_day_name='Saturday') then ss_sales_price else null::numeric end) sat_sales + from plato.store_sales,plato.date_dim + where d_date_sk = ss_sold_date_sk + group by d_week_seq,ss_store_sk + ) + select s_store_name1,s_store_id1,d_week_seq1 + ,sun_sales1/sun_sales2,mon_sales1/mon_sales2 + ,tue_sales1/tue_sales2,wed_sales1/wed_sales2,thu_sales1/thu_sales2 + ,fri_sales1/fri_sales2,sat_sales1/sat_sales2 + from + (select s_store_name s_store_name1,wss.d_week_seq d_week_seq1 + ,s_store_id s_store_id1,sun_sales sun_sales1 + ,mon_sales mon_sales1,tue_sales tue_sales1 + ,wed_sales wed_sales1,thu_sales thu_sales1 + ,fri_sales fri_sales1,sat_sales sat_sales1 + from wss,plato.store,plato.date_dim d + where d.d_week_seq = wss.d_week_seq and + ss_store_sk = s_store_sk and + d_month_seq between 1185 and 1185 + 11) y, + (select s_store_name s_store_name2,wss.d_week_seq d_week_seq2 + ,s_store_id s_store_id2,sun_sales sun_sales2 + ,mon_sales mon_sales2,tue_sales tue_sales2 + ,wed_sales wed_sales2,thu_sales thu_sales2 + ,fri_sales fri_sales2,sat_sales sat_sales2 + from wss,plato.store,plato.date_dim d + where d.d_week_seq = wss.d_week_seq and + ss_store_sk = s_store_sk and + d_month_seq between 1185+ 12 and 1185 + 23) x + where s_store_id1=s_store_id2 + and d_week_seq1=d_week_seq2-52 + order by s_store_name1,s_store_id1,d_week_seq1 +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query59.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q60.sql b/yt/yql/tests/sql/suites/pg-tpcds/q60.sql new file mode 100644 index 0000000000..e8913a839c --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q60.sql @@ -0,0 +1,81 @@ +--!syntax_pg +--TPC-DS Q60 + +-- start query 1 in stream 0 using template ../query_templates/query60.tpl +with ss as ( + select + i_item_id,sum(ss_ext_sales_price) total_sales + from + plato.store_sales, + plato.date_dim, + plato.customer_address, + plato.item + where + i_item_id in (select + i_item_id +from + plato.item +where i_category in ('Children')) + and ss_item_sk = i_item_sk + and ss_sold_date_sk = d_date_sk + and d_year = 1999 + and d_moy = 9 + and ss_addr_sk = ca_address_sk + and ca_gmt_offset = -6::numeric + group by i_item_id), + cs as ( + select + i_item_id,sum(cs_ext_sales_price) total_sales + from + plato.catalog_sales, + plato.date_dim, + plato.customer_address, + plato.item + where + i_item_id in (select + i_item_id +from + plato.item +where i_category in ('Children')) + and cs_item_sk = i_item_sk + and cs_sold_date_sk = d_date_sk + and d_year = 1999 + and d_moy = 9 + and cs_bill_addr_sk = ca_address_sk + and ca_gmt_offset = -6::numeric + group by i_item_id), + ws as ( + select + i_item_id,sum(ws_ext_sales_price) total_sales + from + plato.web_sales, + plato.date_dim, + plato.customer_address, + plato.item + where + i_item_id in (select + i_item_id +from + plato.item +where i_category in ('Children')) + and ws_item_sk = i_item_sk + and ws_sold_date_sk = d_date_sk + and d_year = 1999 + and d_moy = 9 + and ws_bill_addr_sk = ca_address_sk + and ca_gmt_offset = -6::numeric + group by i_item_id) + select + i_item_id +,sum(total_sales) total_sales + from (select * from ss + union all + select * from cs + union all + select * from ws) tmp1 + group by i_item_id + order by i_item_id + ,total_sales + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query60.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q61.sql b/yt/yql/tests/sql/suites/pg-tpcds/q61.sql new file mode 100644 index 0000000000..0862c0747e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q61.sql @@ -0,0 +1,47 @@ +--!syntax_pg +--TPC-DS Q61 + +-- start query 1 in stream 0 using template ../query_templates/query61.tpl +select promotions,total,cast(promotions as decimal(15,4))/cast(total as decimal(15,4))*100::numeric +from + (select sum(ss_ext_sales_price) promotions + from plato.store_sales + ,plato.store + ,plato.promotion + ,plato.date_dim + ,plato.customer + ,plato.customer_address + ,plato.item + where ss_sold_date_sk = d_date_sk + and ss_store_sk = s_store_sk + and ss_promo_sk = p_promo_sk + and ss_customer_sk= c_customer_sk + and ca_address_sk = c_current_addr_sk + and ss_item_sk = i_item_sk + and ca_gmt_offset = -7::numeric + and i_category = 'Books' + and (p_channel_dmail = 'Y' or p_channel_email = 'Y' or p_channel_tv = 'Y') + and s_gmt_offset = -7::numeric + and d_year = 1999 + and d_moy = 11) promotional_sales, + (select sum(ss_ext_sales_price) total + from plato.store_sales + ,plato.store + ,plato.date_dim + ,plato.customer + ,plato.customer_address + ,plato.item + where ss_sold_date_sk = d_date_sk + and ss_store_sk = s_store_sk + and ss_customer_sk= c_customer_sk + and ca_address_sk = c_current_addr_sk + and ss_item_sk = i_item_sk + and ca_gmt_offset = -7::numeric + and i_category = 'Books' + and s_gmt_offset = -7::numeric + and d_year = 1999 + and d_moy = 11) all_sales +order by promotions, total +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query61.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q62.sql b/yt/yql/tests/sql/suites/pg-tpcds/q62.sql new file mode 100644 index 0000000000..c65b503787 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q62.sql @@ -0,0 +1,38 @@ +--!syntax_pg +--TPC-DS Q62 + +-- start query 1 in stream 0 using template ../query_templates/query62.tpl +select + substr(w_warehouse_name,1,20) + ,sm_type + ,web_name + ,sum(case when (ws_ship_date_sk - ws_sold_date_sk <= 30 ) then 1 else 0 end) as "30 days" + ,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 30) and + (ws_ship_date_sk - ws_sold_date_sk <= 60) then 1 else 0 end ) as "31-60 days" + ,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 60) and + (ws_ship_date_sk - ws_sold_date_sk <= 90) then 1 else 0 end) as "61-90 days" + ,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 90) and + (ws_ship_date_sk - ws_sold_date_sk <= 120) then 1 else 0 end) as "91-120 days" + ,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 120) then 1 else 0 end) as ">120 days" +from + plato.web_sales + ,plato.warehouse + ,plato.ship_mode + ,plato.web_site + ,plato.date_dim +where + d_month_seq between 1212 and 1212 + 11 +and ws_ship_date_sk = d_date_sk +and ws_warehouse_sk = w_warehouse_sk +and ws_ship_mode_sk = sm_ship_mode_sk +and ws_web_site_sk = web_site_sk +group by + substr(w_warehouse_name,1,20) + ,sm_type + ,web_name +order by substr(w_warehouse_name,1,20) + ,sm_type + ,web_name +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query62.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q63.sql b/yt/yql/tests/sql/suites/pg-tpcds/q63.sql new file mode 100644 index 0000000000..87064c5b8a --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q63.sql @@ -0,0 +1,32 @@ +--!syntax_pg +--TPC-DS Q63 + +-- start query 1 in stream 0 using template ../query_templates/query63.tpl +select * +from (select i_manager_id + ,sum(ss_sales_price) sum_sales + ,avg(sum(ss_sales_price)) over (partition by i_manager_id) avg_monthly_sales + from plato.item + ,plato.store_sales + ,plato.date_dim + ,plato.store + where ss_item_sk = i_item_sk + and ss_sold_date_sk = d_date_sk + and ss_store_sk = s_store_sk + and d_month_seq in (1212,1212+1,1212+2,1212+3,1212+4,1212+5,1212+6,1212+7,1212+8,1212+9,1212+10,1212+11) + and (( i_category in ('Books','Children','Electronics') + and i_class in ('personal','portable','reference','self-help') + and i_brand in ('scholaramalgamalg #14','scholaramalgamalg #7', + 'exportiunivamalg #9','scholaramalgamalg #9')) + or( i_category in ('Women','Music','Men') + and i_class in ('accessories','classical','fragrances','pants') + and i_brand in ('amalgimporto #1','edu packscholar #1','exportiimporto #1', + 'importoamalg #1'))) +group by i_manager_id, d_moy) tmp1 +where case when avg_monthly_sales > 0::numeric then abs (sum_sales - avg_monthly_sales) / avg_monthly_sales else null::numeric end > 0.1::numeric +order by i_manager_id + ,avg_monthly_sales + ,sum_sales +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query63.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q64.sql b/yt/yql/tests/sql/suites/pg-tpcds/q64.sql new file mode 100644 index 0000000000..57884978ec --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q64.sql @@ -0,0 +1,124 @@ +--!syntax_pg +--TPC-DS Q64 + +-- start query 1 in stream 0 using template ../query_templates/query64.tpl +with cs_ui as + (select cs_item_sk + ,sum(cs_ext_list_price) as sale,sum(cr_refunded_cash+cr_reversed_charge+cr_store_credit) as refund + from plato.catalog_sales + ,plato.catalog_returns + where cs_item_sk = cr_item_sk + and cs_order_number = cr_order_number + group by cs_item_sk + having sum(cs_ext_list_price)>2::numeric*sum(cr_refunded_cash+cr_reversed_charge+cr_store_credit)), +cross_sales as + (select i_product_name product_name + ,i_item_sk item_sk + ,s_store_name store_name + ,s_zip store_zip + ,ad1.ca_street_number b_street_number + ,ad1.ca_street_name b_street_name + ,ad1.ca_city b_city + ,ad1.ca_zip b_zip + ,ad2.ca_street_number c_street_number + ,ad2.ca_street_name c_street_name + ,ad2.ca_city c_city + ,ad2.ca_zip c_zip + ,d1.d_year as syear + ,d2.d_year as fsyear + ,d3.d_year s2year + ,count(*) cnt + ,sum(ss_wholesale_cost) s1 + ,sum(ss_list_price) s2 + ,sum(ss_coupon_amt) s3 + FROM plato.store_sales + ,plato.store_returns + ,cs_ui + ,plato.date_dim d1 + ,plato.date_dim d2 + ,plato.date_dim d3 + ,plato.store + ,plato.customer + ,plato.customer_demographics cd1 + ,plato.customer_demographics cd2 + ,plato.promotion + ,plato.household_demographics hd1 + ,plato.household_demographics hd2 + ,plato.customer_address ad1 + ,plato.customer_address ad2 + ,plato.income_band ib1 + ,plato.income_band ib2 + ,plato.item + WHERE ss_store_sk = s_store_sk AND + ss_sold_date_sk = d1.d_date_sk AND + ss_customer_sk = c_customer_sk AND + ss_cdemo_sk= cd1.cd_demo_sk AND + ss_hdemo_sk = hd1.hd_demo_sk AND + ss_addr_sk = ad1.ca_address_sk and + ss_item_sk = i_item_sk and + ss_item_sk = sr_item_sk and + ss_ticket_number = sr_ticket_number and + ss_item_sk = cs_ui.cs_item_sk and + c_current_cdemo_sk = cd2.cd_demo_sk AND + c_current_hdemo_sk = hd2.hd_demo_sk AND + c_current_addr_sk = ad2.ca_address_sk and + c_first_sales_date_sk = d2.d_date_sk and + c_first_shipto_date_sk = d3.d_date_sk and + ss_promo_sk = p_promo_sk and + hd1.hd_income_band_sk = ib1.ib_income_band_sk and + hd2.hd_income_band_sk = ib2.ib_income_band_sk and + cd1.cd_marital_status <> cd2.cd_marital_status and + i_color in ('maroon','burnished','dim','steel','navajo','chocolate') and + i_current_price between 35::numeric and (35 + 10)::numeric and + i_current_price between (35 + 1)::numeric and (35 + 15)::numeric +group by i_product_name + ,i_item_sk + ,s_store_name + ,s_zip + ,ad1.ca_street_number + ,ad1.ca_street_name + ,ad1.ca_city + ,ad1.ca_zip + ,ad2.ca_street_number + ,ad2.ca_street_name + ,ad2.ca_city + ,ad2.ca_zip + ,d1.d_year + ,d2.d_year + ,d3.d_year +) +select cs1.product_name + ,cs1.store_name + ,cs1.store_zip + ,cs1.b_street_number + ,cs1.b_street_name + ,cs1.b_city + ,cs1.b_zip + ,cs1.c_street_number + ,cs1.c_street_name + ,cs1.c_city + ,cs1.c_zip + ,cs1.syear as cs1_syear + ,cs1.cnt as cs1_cnt + ,cs1.s1 as s11 + ,cs1.s2 as s21 + ,cs1.s3 as s31 + ,cs2.s1 as s12 + ,cs2.s2 as s22 + ,cs2.s3 as s32 + ,cs2.syear as cs2_syear + ,cs2.cnt as cs2_cnt +from cross_sales cs1,cross_sales cs2 +where cs1.item_sk=cs2.item_sk and + cs1.syear = 2000 and + cs2.syear = 2000 + 1 and + cs2.cnt <= cs1.cnt and + cs1.store_name = cs2.store_name and + cs1.store_zip = cs2.store_zip +order by cs1.product_name + ,cs1.store_name + ,cs2_cnt + ,cs1.s1 + ,cs2.s1; + +-- end query 1 in stream 0 using template ../query_templates/query64.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q65.sql b/yt/yql/tests/sql/suites/pg-tpcds/q65.sql new file mode 100644 index 0000000000..87d4e776af --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q65.sql @@ -0,0 +1,32 @@ +--!syntax_pg +--TPC-DS Q65 + +-- start query 1 in stream 0 using template ../query_templates/query65.tpl +select + s_store_name, + i_item_desc, + sc.revenue, + i_current_price, + i_wholesale_cost, + i_brand + from plato.store, plato.item, + (select ss_store_sk, avg(revenue) as ave + from + (select ss_store_sk, ss_item_sk, + sum(ss_sales_price) as revenue + from plato.store_sales, plato.date_dim + where ss_sold_date_sk = d_date_sk and d_month_seq between 1212 and 1212+11 + group by ss_store_sk, ss_item_sk) sa + group by ss_store_sk) sb, + (select ss_store_sk, ss_item_sk, sum(ss_sales_price) as revenue + from plato.store_sales, plato.date_dim + where ss_sold_date_sk = d_date_sk and d_month_seq between 1212 and 1212+11 + group by ss_store_sk, ss_item_sk) sc + where sb.ss_store_sk = sc.ss_store_sk and + sc.revenue <= 0.1::numeric * sb.ave and + s_store_sk = sc.ss_store_sk and + i_item_sk = sc.ss_item_sk + order by s_store_name, i_item_desc +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query65.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q66.sql b/yt/yql/tests/sql/suites/pg-tpcds/q66.sql new file mode 100644 index 0000000000..2e6a5eabad --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q66.sql @@ -0,0 +1,223 @@ +--!syntax_pg +--TPC-DS Q66 + +-- start query 1 in stream 0 using template ../query_templates/query66.tpl +select + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,ship_carriers + ,year + ,sum(jan_sales) as jan_sales + ,sum(feb_sales) as feb_sales + ,sum(mar_sales) as mar_sales + ,sum(apr_sales) as apr_sales + ,sum(may_sales) as may_sales + ,sum(jun_sales) as jun_sales + ,sum(jul_sales) as jul_sales + ,sum(aug_sales) as aug_sales + ,sum(sep_sales) as sep_sales + ,sum(oct_sales) as oct_sales + ,sum(nov_sales) as nov_sales + ,sum(dec_sales) as dec_sales + ,sum(jan_sales/w_warehouse_sq_ft::numeric) as jan_sales_per_sq_foot + ,sum(feb_sales/w_warehouse_sq_ft::numeric) as feb_sales_per_sq_foot + ,sum(mar_sales/w_warehouse_sq_ft::numeric) as mar_sales_per_sq_foot + ,sum(apr_sales/w_warehouse_sq_ft::numeric) as apr_sales_per_sq_foot + ,sum(may_sales/w_warehouse_sq_ft::numeric) as may_sales_per_sq_foot + ,sum(jun_sales/w_warehouse_sq_ft::numeric) as jun_sales_per_sq_foot + ,sum(jul_sales/w_warehouse_sq_ft::numeric) as jul_sales_per_sq_foot + ,sum(aug_sales/w_warehouse_sq_ft::numeric) as aug_sales_per_sq_foot + ,sum(sep_sales/w_warehouse_sq_ft::numeric) as sep_sales_per_sq_foot + ,sum(oct_sales/w_warehouse_sq_ft::numeric) as oct_sales_per_sq_foot + ,sum(nov_sales/w_warehouse_sq_ft::numeric) as nov_sales_per_sq_foot + ,sum(dec_sales/w_warehouse_sq_ft::numeric) as dec_sales_per_sq_foot + ,sum(jan_net) as jan_net + ,sum(feb_net) as feb_net + ,sum(mar_net) as mar_net + ,sum(apr_net) as apr_net + ,sum(may_net) as may_net + ,sum(jun_net) as jun_net + ,sum(jul_net) as jul_net + ,sum(aug_net) as aug_net + ,sum(sep_net) as sep_net + ,sum(oct_net) as oct_net + ,sum(nov_net) as nov_net + ,sum(dec_net) as dec_net + from ( + select + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,'DIAMOND' || ',' || 'AIRBORNE' as ship_carriers + ,d_year as year + ,sum(case when d_moy = 1 + then ws_sales_price* ws_quantity::numeric else 0::numeric end) as jan_sales + ,sum(case when d_moy = 2 + then ws_sales_price* ws_quantity::numeric else 0::numeric end) as feb_sales + ,sum(case when d_moy = 3 + then ws_sales_price* ws_quantity::numeric else 0::numeric end) as mar_sales + ,sum(case when d_moy = 4 + then ws_sales_price* ws_quantity::numeric else 0::numeric end) as apr_sales + ,sum(case when d_moy = 5 + then ws_sales_price* ws_quantity::numeric else 0::numeric end) as may_sales + ,sum(case when d_moy = 6 + then ws_sales_price* ws_quantity::numeric else 0::numeric end) as jun_sales + ,sum(case when d_moy = 7 + then ws_sales_price* ws_quantity::numeric else 0::numeric end) as jul_sales + ,sum(case when d_moy = 8 + then ws_sales_price* ws_quantity::numeric else 0::numeric end) as aug_sales + ,sum(case when d_moy = 9 + then ws_sales_price* ws_quantity::numeric else 0::numeric end) as sep_sales + ,sum(case when d_moy = 10 + then ws_sales_price* ws_quantity::numeric else 0::numeric end) as oct_sales + ,sum(case when d_moy = 11 + then ws_sales_price* ws_quantity::numeric else 0::numeric end) as nov_sales + ,sum(case when d_moy = 12 + then ws_sales_price* ws_quantity::numeric else 0::numeric end) as dec_sales + ,sum(case when d_moy = 1 + then ws_net_paid_inc_tax * ws_quantity::numeric else 0::numeric end) as jan_net + ,sum(case when d_moy = 2 + then ws_net_paid_inc_tax * ws_quantity::numeric else 0::numeric end) as feb_net + ,sum(case when d_moy = 3 + then ws_net_paid_inc_tax * ws_quantity::numeric else 0::numeric end) as mar_net + ,sum(case when d_moy = 4 + then ws_net_paid_inc_tax * ws_quantity::numeric else 0::numeric end) as apr_net + ,sum(case when d_moy = 5 + then ws_net_paid_inc_tax * ws_quantity::numeric else 0::numeric end) as may_net + ,sum(case when d_moy = 6 + then ws_net_paid_inc_tax * ws_quantity::numeric else 0::numeric end) as jun_net + ,sum(case when d_moy = 7 + then ws_net_paid_inc_tax * ws_quantity::numeric else 0::numeric end) as jul_net + ,sum(case when d_moy = 8 + then ws_net_paid_inc_tax * ws_quantity::numeric else 0::numeric end) as aug_net + ,sum(case when d_moy = 9 + then ws_net_paid_inc_tax * ws_quantity::numeric else 0::numeric end) as sep_net + ,sum(case when d_moy = 10 + then ws_net_paid_inc_tax * ws_quantity::numeric else 0::numeric end) as oct_net + ,sum(case when d_moy = 11 + then ws_net_paid_inc_tax * ws_quantity::numeric else 0::numeric end) as nov_net + ,sum(case when d_moy = 12 + then ws_net_paid_inc_tax * ws_quantity::numeric else 0::numeric end) as dec_net + from + plato.web_sales + ,plato.warehouse + ,plato.date_dim + ,plato.time_dim + ,plato.ship_mode + where + ws_warehouse_sk = w_warehouse_sk + and ws_sold_date_sk = d_date_sk + and ws_sold_time_sk = t_time_sk + and ws_ship_mode_sk = sm_ship_mode_sk + and d_year = 2002 + and t_time between 49530 and 49530+28800 + and sm_carrier in ('DIAMOND','AIRBORNE') + group by + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,d_year + union all + select + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,'DIAMOND' || ',' || 'AIRBORNE' as ship_carriers + ,d_year as year + ,sum(case when d_moy = 1 + then cs_ext_sales_price* cs_quantity::numeric else 0::numeric end) as jan_sales + ,sum(case when d_moy = 2 + then cs_ext_sales_price* cs_quantity::numeric else 0::numeric end) as feb_sales + ,sum(case when d_moy = 3 + then cs_ext_sales_price* cs_quantity::numeric else 0::numeric end) as mar_sales + ,sum(case when d_moy = 4 + then cs_ext_sales_price* cs_quantity::numeric else 0::numeric end) as apr_sales + ,sum(case when d_moy = 5 + then cs_ext_sales_price* cs_quantity::numeric else 0::numeric end) as may_sales + ,sum(case when d_moy = 6 + then cs_ext_sales_price* cs_quantity::numeric else 0::numeric end) as jun_sales + ,sum(case when d_moy = 7 + then cs_ext_sales_price* cs_quantity::numeric else 0::numeric end) as jul_sales + ,sum(case when d_moy = 8 + then cs_ext_sales_price* cs_quantity::numeric else 0::numeric end) as aug_sales + ,sum(case when d_moy = 9 + then cs_ext_sales_price* cs_quantity::numeric else 0::numeric end) as sep_sales + ,sum(case when d_moy = 10 + then cs_ext_sales_price* cs_quantity::numeric else 0::numeric end) as oct_sales + ,sum(case when d_moy = 11 + then cs_ext_sales_price* cs_quantity::numeric else 0::numeric end) as nov_sales + ,sum(case when d_moy = 12 + then cs_ext_sales_price* cs_quantity::numeric else 0::numeric end) as dec_sales + ,sum(case when d_moy = 1 + then cs_net_paid_inc_ship_tax * cs_quantity::numeric else 0::numeric end) as jan_net + ,sum(case when d_moy = 2 + then cs_net_paid_inc_ship_tax * cs_quantity::numeric else 0::numeric end) as feb_net + ,sum(case when d_moy = 3 + then cs_net_paid_inc_ship_tax * cs_quantity::numeric else 0::numeric end) as mar_net + ,sum(case when d_moy = 4 + then cs_net_paid_inc_ship_tax * cs_quantity::numeric else 0::numeric end) as apr_net + ,sum(case when d_moy = 5 + then cs_net_paid_inc_ship_tax * cs_quantity::numeric else 0::numeric end) as may_net + ,sum(case when d_moy = 6 + then cs_net_paid_inc_ship_tax * cs_quantity::numeric else 0::numeric end) as jun_net + ,sum(case when d_moy = 7 + then cs_net_paid_inc_ship_tax * cs_quantity::numeric else 0::numeric end) as jul_net + ,sum(case when d_moy = 8 + then cs_net_paid_inc_ship_tax * cs_quantity::numeric else 0::numeric end) as aug_net + ,sum(case when d_moy = 9 + then cs_net_paid_inc_ship_tax * cs_quantity::numeric else 0::numeric end) as sep_net + ,sum(case when d_moy = 10 + then cs_net_paid_inc_ship_tax * cs_quantity::numeric else 0::numeric end) as oct_net + ,sum(case when d_moy = 11 + then cs_net_paid_inc_ship_tax * cs_quantity::numeric else 0::numeric end) as nov_net + ,sum(case when d_moy = 12 + then cs_net_paid_inc_ship_tax * cs_quantity::numeric else 0::numeric end) as dec_net + from + plato.catalog_sales + ,plato.warehouse + ,plato.date_dim + ,plato.time_dim + ,plato.ship_mode + where + cs_warehouse_sk = w_warehouse_sk + and cs_sold_date_sk = d_date_sk + and cs_sold_time_sk = t_time_sk + and cs_ship_mode_sk = sm_ship_mode_sk + and d_year = 2002 + and t_time between 49530 AND 49530+28800 + and sm_carrier in ('DIAMOND','AIRBORNE') + group by + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,d_year + ) x + group by + w_warehouse_name + ,w_warehouse_sq_ft + ,w_city + ,w_county + ,w_state + ,w_country + ,ship_carriers + ,year + order by w_warehouse_name + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query66.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q67.sql b/yt/yql/tests/sql/suites/pg-tpcds/q67.sql new file mode 100644 index 0000000000..8f3f7a868a --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q67.sql @@ -0,0 +1,47 @@ +--!syntax_pg +--TPC-DS Q67 + +-- start query 1 in stream 0 using template ../query_templates/query67.tpl +select * +from (select i_category + ,i_class + ,i_brand + ,i_product_name + ,d_year + ,d_qoy + ,d_moy + ,s_store_id + ,sumsales + ,rank() over (partition by i_category order by sumsales desc) rk + from (select i_category + ,i_class + ,i_brand + ,i_product_name + ,d_year + ,d_qoy + ,d_moy + ,s_store_id + ,sum(coalesce(ss_sales_price*ss_quantity::numeric,0::numeric)) sumsales + from plato.store_sales + ,plato.date_dim + ,plato.store + ,plato.item + where ss_sold_date_sk=d_date_sk + and ss_item_sk=i_item_sk + and ss_store_sk = s_store_sk + and d_month_seq between 1212 and 1212+11 + group by rollup(i_category, i_class, i_brand, i_product_name, d_year, d_qoy, d_moy,s_store_id))dw1) dw2 +where rk <= 100 +order by i_category + ,i_class + ,i_brand + ,i_product_name + ,d_year + ,d_qoy + ,d_moy + ,s_store_id + ,sumsales + ,rk +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query67.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q68.sql b/yt/yql/tests/sql/suites/pg-tpcds/q68.sql new file mode 100644 index 0000000000..385f421edc --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q68.sql @@ -0,0 +1,45 @@ +--!syntax_pg +--TPC-DS Q68 + +-- start query 1 in stream 0 using template ../query_templates/query68.tpl +select c_last_name + ,c_first_name + ,ca_city + ,bought_city + ,ss_ticket_number + ,extended_price + ,extended_tax + ,list_price + from (select ss_ticket_number + ,ss_customer_sk + ,ca_city bought_city + ,sum(ss_ext_sales_price) extended_price + ,sum(ss_ext_list_price) list_price + ,sum(ss_ext_tax) extended_tax + from plato.store_sales + ,plato.date_dim + ,plato.store + ,plato.household_demographics + ,plato.customer_address + where store_sales.ss_sold_date_sk = date_dim.d_date_sk + and store_sales.ss_store_sk = store.s_store_sk + and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + and store_sales.ss_addr_sk = customer_address.ca_address_sk + and date_dim.d_dom between 1 and 2 + and (household_demographics.hd_dep_count = 5 or + household_demographics.hd_vehicle_count= 3) + and date_dim.d_year in (1999,1999+1,1999+2) + and store.s_city in ('Midway','Fairview') + group by ss_ticket_number + ,ss_customer_sk + ,ss_addr_sk,ca_city) dn + ,plato.customer + ,plato.customer_address current_addr + where ss_customer_sk = c_customer_sk + and customer.c_current_addr_sk = current_addr.ca_address_sk + and current_addr.ca_city <> bought_city + order by c_last_name + ,ss_ticket_number + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query68.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q69.sql b/yt/yql/tests/sql/suites/pg-tpcds/q69.sql new file mode 100644 index 0000000000..7fd3ba6c71 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q69.sql @@ -0,0 +1,50 @@ +--!syntax_pg +--TPC-DS Q69 + +-- start query 1 in stream 0 using template ../query_templates/query69.tpl +select + cd_gender, + cd_marital_status, + cd_education_status, + count(*) cnt1, + cd_purchase_estimate, + count(*) cnt2, + cd_credit_rating, + count(*) cnt3 + from + plato.customer c,plato.customer_address ca,plato.customer_demographics + where + c.c_current_addr_sk = ca.ca_address_sk and + ca_state in ('CO','IL','MN') and + cd_demo_sk = c.c_current_cdemo_sk and + exists (select * + from plato.store_sales,plato.date_dim + where c.c_customer_sk = ss_customer_sk and + ss_sold_date_sk = d_date_sk and + d_year = 1999 and + d_moy between 1 and 1+2) and + (not exists (select * + from plato.web_sales,plato.date_dim + where c.c_customer_sk = ws_bill_customer_sk and + ws_sold_date_sk = d_date_sk and + d_year = 1999 and + d_moy between 1 and 1+2) and + not exists (select * + from plato.catalog_sales,plato.date_dim + where c.c_customer_sk = cs_ship_customer_sk and + cs_sold_date_sk = d_date_sk and + d_year = 1999 and + d_moy between 1 and 1+2)) + group by cd_gender, + cd_marital_status, + cd_education_status, + cd_purchase_estimate, + cd_credit_rating + order by cd_gender, + cd_marital_status, + cd_education_status, + cd_purchase_estimate, + cd_credit_rating + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query69.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q70.sql b/yt/yql/tests/sql/suites/pg-tpcds/q70.sql new file mode 100644 index 0000000000..530cb0f973 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q70.sql @@ -0,0 +1,41 @@ +--!syntax_pg +--TPC-DS Q70 + +-- start query 1 in stream 0 using template ../query_templates/query70.tpl +select + sum(ss_net_profit) as total_sum + ,s_state + ,s_county + ,grouping(s_state)+grouping(s_county) as lochierarchy + ,rank() over ( + partition by grouping(s_state)+grouping(s_county), + case when grouping(s_county) = 0 then s_state end + order by sum(ss_net_profit) desc) as rank_within_parent + from + plato.store_sales + ,plato.date_dim d1 + ,plato.store + where + d1.d_month_seq between 1212 and 1212+11 + and d1.d_date_sk = ss_sold_date_sk + and s_store_sk = ss_store_sk + and s_state in + ( select s_state + from (select s_state as s_state, + rank() over ( partition by s_state order by sum(ss_net_profit) desc) as ranking + from plato.store_sales, plato.store, plato.date_dim + where d_month_seq between 1212 and 1212+11 + and d_date_sk = ss_sold_date_sk + and s_store_sk = ss_store_sk + group by s_state + ) tmp1 + where ranking <= 5 + ) + group by rollup(s_state,s_county) + order by + lochierarchy desc + ,case when lochierarchy = 0 then s_state end + ,rank_within_parent + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query70.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q71.sql b/yt/yql/tests/sql/suites/pg-tpcds/q71.sql new file mode 100644 index 0000000000..72f8f06225 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q71.sql @@ -0,0 +1,43 @@ +--!syntax_pg +--TPC-DS Q71 + +-- start query 1 in stream 0 using template ../query_templates/query71.tpl +select i_brand_id brand_id, i_brand brand,t_hour,t_minute, + sum(ext_price) ext_price + from plato.item, (select ws_ext_sales_price as ext_price, + ws_sold_date_sk as sold_date_sk, + ws_item_sk as sold_item_sk, + ws_sold_time_sk as time_sk + from plato.web_sales,plato.date_dim + where d_date_sk = ws_sold_date_sk + and d_moy=12 + and d_year=2000 + union all + select cs_ext_sales_price as ext_price, + cs_sold_date_sk as sold_date_sk, + cs_item_sk as sold_item_sk, + cs_sold_time_sk as time_sk + from plato.catalog_sales,plato.date_dim + where d_date_sk = cs_sold_date_sk + and d_moy=12 + and d_year=2000 + union all + select ss_ext_sales_price as ext_price, + ss_sold_date_sk as sold_date_sk, + ss_item_sk as sold_item_sk, + ss_sold_time_sk as time_sk + from plato.store_sales,plato.date_dim + where d_date_sk = ss_sold_date_sk + and d_moy=12 + and d_year=2000 + ) tmp,plato.time_dim + where + sold_item_sk = i_item_sk + and i_manager_id=1 + and time_sk = t_time_sk + and (t_meal_time = 'breakfast' or t_meal_time = 'dinner') + group by i_brand, i_brand_id,t_hour,t_minute + order by ext_price desc, i_brand_id + ; + +-- end query 1 in stream 0 using template ../query_templates/query71.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q72.sql b/yt/yql/tests/sql/suites/pg-tpcds/q72.sql new file mode 100644 index 0000000000..1687f6f0e5 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q72.sql @@ -0,0 +1,32 @@ +--!syntax_pg +--TPC-DS Q72 + +-- start query 1 in stream 0 using template ../query_templates/query72.tpl +select i_item_desc + ,w_warehouse_name + ,d1.d_week_seq + ,sum(case when p_promo_sk is null then 1 else 0 end) no_promo + ,sum(case when p_promo_sk is not null then 1 else 0 end) promo + ,count(*) total_cnt +from plato.catalog_sales +join plato.inventory on (cs_item_sk = inv_item_sk) +join plato.warehouse on (w_warehouse_sk=inv_warehouse_sk) +join plato.item on (i_item_sk = cs_item_sk) +join plato.customer_demographics on (cs_bill_cdemo_sk = cd_demo_sk) +join plato.household_demographics on (cs_bill_hdemo_sk = hd_demo_sk) +join plato.date_dim d1 on (cs_sold_date_sk = d1.d_date_sk) +join plato.date_dim d2 on (inv_date_sk = d2.d_date_sk) +join plato.date_dim d3 on (cs_ship_date_sk = d3.d_date_sk) +left outer join plato.promotion on (cs_promo_sk=p_promo_sk) +left outer join plato.catalog_returns on (cr_item_sk = cs_item_sk and cr_order_number = cs_order_number) +where d1.d_week_seq = d2.d_week_seq + and inv_quantity_on_hand < cs_quantity + and d3.d_date > d1.d_date + 5 + and hd_buy_potential = '1001-5000' + and d1.d_year = 2001 + and cd_marital_status = 'M' +group by i_item_desc,w_warehouse_name,d1.d_week_seq +order by total_cnt desc, i_item_desc, w_warehouse_name, d_week_seq +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query72.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q73.sql b/yt/yql/tests/sql/suites/pg-tpcds/q73.sql new file mode 100644 index 0000000000..768a01d4cf --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q73.sql @@ -0,0 +1,31 @@ +--!syntax_pg +--TPC-DS Q73 + +-- start query 1 in stream 0 using template ../query_templates/query73.tpl +select c_last_name + ,c_first_name + ,c_salutation + ,c_preferred_cust_flag + ,ss_ticket_number + ,cnt from + (select ss_ticket_number + ,ss_customer_sk + ,count(*) cnt + from plato.store_sales,plato.date_dim,plato.store,plato.household_demographics + where store_sales.ss_sold_date_sk = date_dim.d_date_sk + and store_sales.ss_store_sk = store.s_store_sk + and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + and date_dim.d_dom between 1 and 2 + and (household_demographics.hd_buy_potential = '>10000' or + household_demographics.hd_buy_potential = 'Unknown') + and household_demographics.hd_vehicle_count > 0 + and case when household_demographics.hd_vehicle_count > 0 then + household_demographics.hd_dep_count/ household_demographics.hd_vehicle_count else null::int4 end > 1 + and date_dim.d_year in (1998,1998+1,1998+2) + and store.s_county in ('Williamson County','Williamson County','Williamson County','Williamson County') + group by ss_ticket_number,ss_customer_sk) dj,plato.customer + where ss_customer_sk = c_customer_sk + and cnt between 1::int8 and 5::int8 + order by cnt desc, c_last_name asc; + +-- end query 1 in stream 0 using template ../query_templates/query73.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q74.sql b/yt/yql/tests/sql/suites/pg-tpcds/q74.sql new file mode 100644 index 0000000000..86b46f1122 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q74.sql @@ -0,0 +1,64 @@ +--!syntax_pg +--TPC-DS Q74 + +-- start query 1 in stream 0 using template ../query_templates/query74.tpl +with year_total as ( + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,d_year as year + ,max(ss_net_paid) year_total + ,'s' sale_type + from plato.customer + ,plato.store_sales + ,plato.date_dim + where c_customer_sk = ss_customer_sk + and ss_sold_date_sk = d_date_sk + and d_year in (2001,2001+1) + group by c_customer_id + ,c_first_name + ,c_last_name + ,d_year + union all + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,d_year as year + ,max(ws_net_paid) year_total + ,'w' sale_type + from plato.customer + ,plato.web_sales + ,plato.date_dim + where c_customer_sk = ws_bill_customer_sk + and ws_sold_date_sk = d_date_sk + and d_year in (2001,2001+1) + group by c_customer_id + ,c_first_name + ,c_last_name + ,d_year + ) + select + t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name + from year_total t_s_firstyear + ,year_total t_s_secyear + ,year_total t_w_firstyear + ,year_total t_w_secyear + where t_s_secyear.customer_id = t_s_firstyear.customer_id + and t_s_firstyear.customer_id = t_w_secyear.customer_id + and t_s_firstyear.customer_id = t_w_firstyear.customer_id + and t_s_firstyear.sale_type = 's' + and t_w_firstyear.sale_type = 'w' + and t_s_secyear.sale_type = 's' + and t_w_secyear.sale_type = 'w' + and t_s_firstyear.year = 2001 + and t_s_secyear.year = 2001+1 + and t_w_firstyear.year = 2001 + and t_w_secyear.year = 2001+1 + and t_s_firstyear.year_total > 0::numeric + and t_w_firstyear.year_total > 0::numeric + and case when t_w_firstyear.year_total > 0::numeric then t_w_secyear.year_total / t_w_firstyear.year_total else null::numeric end + > case when t_s_firstyear.year_total > 0::numeric then t_s_secyear.year_total / t_s_firstyear.year_total else null::numeric end + order by 2,1,3 +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query74.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q75.sql b/yt/yql/tests/sql/suites/pg-tpcds/q75.sql new file mode 100644 index 0000000000..62937cb56d --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q75.sql @@ -0,0 +1,73 @@ +--!syntax_pg +--TPC-DS Q75 + +-- start query 1 in stream 0 using template ../query_templates/query75.tpl +WITH all_sales AS ( + SELECT d_year + ,i_brand_id + ,i_class_id + ,i_category_id + ,i_manufact_id + ,SUM(sales_cnt) AS sales_cnt + ,SUM(sales_amt) AS sales_amt + FROM (SELECT d_year + ,i_brand_id + ,i_class_id + ,i_category_id + ,i_manufact_id + ,cs_quantity - COALESCE(cr_return_quantity,0) AS sales_cnt + ,cs_ext_sales_price - COALESCE(cr_return_amount,0.0::numeric) AS sales_amt + FROM plato.catalog_sales JOIN plato.item ON i_item_sk=cs_item_sk + JOIN plato.date_dim ON d_date_sk=cs_sold_date_sk + LEFT JOIN plato.catalog_returns ON (cs_order_number=cr_order_number + AND cs_item_sk=cr_item_sk) + WHERE i_category='Sports' + UNION + SELECT d_year + ,i_brand_id + ,i_class_id + ,i_category_id + ,i_manufact_id + ,ss_quantity - COALESCE(sr_return_quantity,0) AS sales_cnt + ,ss_ext_sales_price - COALESCE(sr_return_amt,0.0::numeric) AS sales_amt + FROM plato.store_sales JOIN plato.item ON i_item_sk=ss_item_sk + JOIN plato.date_dim ON d_date_sk=ss_sold_date_sk + LEFT JOIN plato.store_returns ON (ss_ticket_number=sr_ticket_number + AND ss_item_sk=sr_item_sk) + WHERE i_category='Sports' + UNION + SELECT d_year + ,i_brand_id + ,i_class_id + ,i_category_id + ,i_manufact_id + ,ws_quantity - COALESCE(wr_return_quantity,0) AS sales_cnt + ,ws_ext_sales_price - COALESCE(wr_return_amt,0.0::numeric) AS sales_amt + FROM plato.web_sales JOIN plato.item ON i_item_sk=ws_item_sk + JOIN plato.date_dim ON d_date_sk=ws_sold_date_sk + LEFT JOIN plato.web_returns ON (ws_order_number=wr_order_number + AND ws_item_sk=wr_item_sk) + WHERE i_category='Sports') sales_detail + GROUP BY d_year, i_brand_id, i_class_id, i_category_id, i_manufact_id) + SELECT prev_yr.d_year AS prev_year + ,curr_yr.d_year AS year + ,curr_yr.i_brand_id + ,curr_yr.i_class_id + ,curr_yr.i_category_id + ,curr_yr.i_manufact_id + ,prev_yr.sales_cnt AS prev_yr_cnt + ,curr_yr.sales_cnt AS curr_yr_cnt + ,curr_yr.sales_cnt-prev_yr.sales_cnt AS sales_cnt_diff + ,curr_yr.sales_amt-prev_yr.sales_amt AS sales_amt_diff + FROM all_sales curr_yr, all_sales prev_yr + WHERE curr_yr.i_brand_id=prev_yr.i_brand_id + AND curr_yr.i_class_id=prev_yr.i_class_id + AND curr_yr.i_category_id=prev_yr.i_category_id + AND curr_yr.i_manufact_id=prev_yr.i_manufact_id + AND curr_yr.d_year=2002 + AND prev_yr.d_year=2002-1 + AND CAST(curr_yr.sales_cnt AS DECIMAL(17,2))/CAST(prev_yr.sales_cnt AS DECIMAL(17,2))<0.9::numeric + ORDER BY sales_cnt_diff,sales_amt_diff + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query75.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q76.sql b/yt/yql/tests/sql/suites/pg-tpcds/q76.sql new file mode 100644 index 0000000000..ce2e458ace --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q76.sql @@ -0,0 +1,27 @@ +--!syntax_pg +--TPC-DS Q76 + +-- start query 1 in stream 0 using template ../query_templates/query76.tpl +select channel, col_name, d_year, d_qoy, i_category, COUNT(*) sales_cnt, SUM(ext_sales_price) sales_amt FROM ( + SELECT 'store' as channel, 'ss_addr_sk' col_name, d_year, d_qoy, i_category, ss_ext_sales_price ext_sales_price + FROM plato.store_sales, plato.item, plato.date_dim + WHERE ss_addr_sk IS NULL + AND ss_sold_date_sk=d_date_sk + AND ss_item_sk=i_item_sk + UNION ALL + SELECT 'web' as channel, 'ws_web_page_sk' col_name, d_year, d_qoy, i_category, ws_ext_sales_price ext_sales_price + FROM plato.web_sales, plato.item, plato.date_dim + WHERE ws_web_page_sk IS NULL + AND ws_sold_date_sk=d_date_sk + AND ws_item_sk=i_item_sk + UNION ALL + SELECT 'catalog' as channel, 'cs_warehouse_sk' col_name, d_year, d_qoy, i_category, cs_ext_sales_price ext_sales_price + FROM plato.catalog_sales, plato.item, plato.date_dim + WHERE cs_warehouse_sk IS NULL + AND cs_sold_date_sk=d_date_sk + AND cs_item_sk=i_item_sk) foo +GROUP BY channel, col_name, d_year, d_qoy, i_category +ORDER BY channel, col_name, d_year, d_qoy, i_category +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query76.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q77.sql b/yt/yql/tests/sql/suites/pg-tpcds/q77.sql new file mode 100644 index 0000000000..fbef66a1e2 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q77.sql @@ -0,0 +1,111 @@ +--!syntax_pg +--TPC-DS Q77 + +-- start query 1 in stream 0 using template ../query_templates/query77.tpl +with ss as + (select s_store_sk, + sum(ss_ext_sales_price) as sales, + sum(ss_net_profit) as profit + from plato.store_sales, + plato.date_dim, + plato.store + where ss_sold_date_sk = d_date_sk + and d_date between cast('1998-08-04' as date) + and (cast('1998-08-04' as date) + interval '30' day)::date + and ss_store_sk = s_store_sk + group by s_store_sk) + , + sr as + (select s_store_sk, + sum(sr_return_amt) as returns, + sum(sr_net_loss) as profit_loss + from plato.store_returns, + plato.date_dim, + plato.store + where sr_returned_date_sk = d_date_sk + and d_date between cast('1998-08-04' as date) + and (cast('1998-08-04' as date) + interval '30' day)::date + and sr_store_sk = s_store_sk + group by s_store_sk), + cs as + (select cs_call_center_sk, + sum(cs_ext_sales_price) as sales, + sum(cs_net_profit) as profit + from plato.catalog_sales, + plato.date_dim + where cs_sold_date_sk = d_date_sk + and d_date between cast('1998-08-04' as date) + and (cast('1998-08-04' as date) + interval '30' day)::date + group by cs_call_center_sk + ), + cr as + (select cr_call_center_sk, + sum(cr_return_amount) as returns, + sum(cr_net_loss) as profit_loss + from plato.catalog_returns, + plato.date_dim + where cr_returned_date_sk = d_date_sk + and d_date between cast('1998-08-04' as date) + and (cast('1998-08-04' as date) + interval '30' day)::date + group by cr_call_center_sk + ), + ws as + ( select wp_web_page_sk, + sum(ws_ext_sales_price) as sales, + sum(ws_net_profit) as profit + from plato.web_sales, + plato.date_dim, + plato.web_page + where ws_sold_date_sk = d_date_sk + and d_date between cast('1998-08-04' as date) + and (cast('1998-08-04' as date) + interval '30' day)::date + and ws_web_page_sk = wp_web_page_sk + group by wp_web_page_sk), + wr as + (select wp_web_page_sk, + sum(wr_return_amt) as returns, + sum(wr_net_loss) as profit_loss + from plato.web_returns, + plato.date_dim, + plato.web_page + where wr_returned_date_sk = d_date_sk + and d_date between cast('1998-08-04' as date) + and (cast('1998-08-04' as date) + interval '30' day)::date + and wr_web_page_sk = wp_web_page_sk + group by wp_web_page_sk) + select channel + , id + , sum(sales) as sales + , sum(returns) as returns + , sum(profit) as profit + from + (select 'store channel' as channel + , ss.s_store_sk as id + , sales + , coalesce(returns, 0::numeric) as returns + , (profit - coalesce(profit_loss,0::numeric)) as profit + from ss left join sr + on ss.s_store_sk = sr.s_store_sk + union all + select 'catalog channel' as channel + , cs_call_center_sk as id + , sales + , returns + , (profit - profit_loss) as profit + from cs + , cr + union all + select 'web channel' as channel + , ws.wp_web_page_sk as id + , sales + , coalesce(returns, 0::numeric) returns + , (profit - coalesce(profit_loss,0::numeric)) as profit + from ws left join wr + on ws.wp_web_page_sk = wr.wp_web_page_sk + ) x + group by rollup (channel, id) + order by channel + ,id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query77.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q78.sql b/yt/yql/tests/sql/suites/pg-tpcds/q78.sql new file mode 100644 index 0000000000..e9d81de782 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q78.sql @@ -0,0 +1,61 @@ +--!syntax_pg +--TPC-DS Q78 + +-- start query 1 in stream 0 using template ../query_templates/query78.tpl +with ws as + (select d_year AS ws_sold_year, ws_item_sk, + ws_bill_customer_sk ws_customer_sk, + sum(ws_quantity) ws_qty, + sum(ws_wholesale_cost) ws_wc, + sum(ws_sales_price) ws_sp + from plato.web_sales + left join plato.web_returns on wr_order_number=ws_order_number and ws_item_sk=wr_item_sk + join plato.date_dim on ws_sold_date_sk = d_date_sk + where wr_order_number is null + group by d_year, ws_item_sk, ws_bill_customer_sk + ), +cs as + (select d_year AS cs_sold_year, cs_item_sk, + cs_bill_customer_sk cs_customer_sk, + sum(cs_quantity) cs_qty, + sum(cs_wholesale_cost) cs_wc, + sum(cs_sales_price) cs_sp + from plato.catalog_sales + left join plato.catalog_returns on cr_order_number=cs_order_number and cs_item_sk=cr_item_sk + join plato.date_dim on cs_sold_date_sk = d_date_sk + where cr_order_number is null + group by d_year, cs_item_sk, cs_bill_customer_sk + ), +ss as + (select d_year AS ss_sold_year, ss_item_sk, + ss_customer_sk, + sum(ss_quantity) ss_qty, + sum(ss_wholesale_cost) ss_wc, + sum(ss_sales_price) ss_sp + from plato.store_sales + left join plato.store_returns on sr_ticket_number=ss_ticket_number and ss_item_sk=sr_item_sk + join plato.date_dim on ss_sold_date_sk = d_date_sk + where sr_ticket_number is null + group by d_year, ss_item_sk, ss_customer_sk + ) + select +ss_sold_year, ss_item_sk, ss_customer_sk, +round((ss_qty/(coalesce(ws_qty,0::int8)+coalesce(cs_qty,0::int8)))::numeric,2) ratio, +ss_qty store_qty, ss_wc store_wholesale_cost, ss_sp store_sales_price, +coalesce(ws_qty,0::int8)+coalesce(cs_qty,0::int8) other_chan_qty, +coalesce(ws_wc,0::numeric)+coalesce(cs_wc,0::numeric) other_chan_wholesale_cost, +coalesce(ws_sp,0::numeric)+coalesce(cs_sp,0::numeric) other_chan_sales_price +from ss +left join ws on (ws_sold_year=ss_sold_year and ws_item_sk=ss_item_sk and ws_customer_sk=ss_customer_sk) +left join cs on (cs_sold_year=ss_sold_year and cs_item_sk=ss_item_sk and cs_customer_sk=ss_customer_sk) +where (coalesce(ws_qty,0::int8)>0::int8 or coalesce(cs_qty, 0::int8)>0::int8) and ss_sold_year=2000 +order by + ss_sold_year, ss_item_sk, ss_customer_sk, + ss_qty desc, ss_wc desc, ss_sp desc, + other_chan_qty, + other_chan_wholesale_cost, + other_chan_sales_price, + ratio +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query78.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q79.sql b/yt/yql/tests/sql/suites/pg-tpcds/q79.sql new file mode 100644 index 0000000000..106c147a1e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q79.sql @@ -0,0 +1,26 @@ +--!syntax_pg +--TPC-DS Q79 + +-- start query 1 in stream 0 using template ../query_templates/query79.tpl +select + c_last_name,c_first_name,substr(s_city,1,30),ss_ticket_number,amt,profit + from + (select ss_ticket_number + ,ss_customer_sk + ,store.s_city + ,sum(ss_coupon_amt) amt + ,sum(ss_net_profit) profit + from plato.store_sales,plato.date_dim,plato.store,plato.household_demographics + where store_sales.ss_sold_date_sk = date_dim.d_date_sk + and store_sales.ss_store_sk = store.s_store_sk + and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk + and (household_demographics.hd_dep_count = 8 or household_demographics.hd_vehicle_count > 0) + and date_dim.d_dow = 1 + and date_dim.d_year in (1998,1998+1,1998+2) + and store.s_number_employees between 200 and 295 + group by ss_ticket_number,ss_customer_sk,ss_addr_sk,store.s_city) ms,plato.customer + where ss_customer_sk = c_customer_sk + order by c_last_name,c_first_name,substr(s_city,1,30), profit +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query79.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q80.sql b/yt/yql/tests/sql/suites/pg-tpcds/q80.sql new file mode 100644 index 0000000000..0ed10ead39 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q80.sql @@ -0,0 +1,99 @@ +--!syntax_pg +--TPC-DS Q80 + +-- start query 1 in stream 0 using template ../query_templates/query80.tpl +with ssr as + (select s_store_id as store_id, + sum(ss_ext_sales_price) as sales, + sum(coalesce(sr_return_amt, 0::numeric)) as returns, + sum(ss_net_profit - coalesce(sr_net_loss, 0::numeric)) as profit + from plato.store_sales left outer join plato.store_returns on + (ss_item_sk = sr_item_sk and ss_ticket_number = sr_ticket_number), + plato.date_dim, + plato.store, + plato.item, + plato.promotion + where ss_sold_date_sk = d_date_sk + and d_date between cast('1998-08-04' as date) + and (cast('1998-08-04' as date) + interval '30' day)::date + and ss_store_sk = s_store_sk + and ss_item_sk = i_item_sk + and i_current_price > 50::numeric + and ss_promo_sk = p_promo_sk + and p_channel_tv = 'N' + group by s_store_id) + , + csr as + (select cp_catalog_page_id as catalog_page_id, + sum(cs_ext_sales_price) as sales, + sum(coalesce(cr_return_amount, 0::numeric)) as returns, + sum(cs_net_profit - coalesce(cr_net_loss, 0::numeric)) as profit + from plato.catalog_sales left outer join plato.catalog_returns on + (cs_item_sk = cr_item_sk and cs_order_number = cr_order_number), + plato.date_dim, + plato.catalog_page, + plato.item, + plato.promotion + where cs_sold_date_sk = d_date_sk + and d_date between cast('1998-08-04' as date) + and (cast('1998-08-04' as date) + interval '30' day)::date + and cs_catalog_page_sk = cp_catalog_page_sk + and cs_item_sk = i_item_sk + and i_current_price > 50::numeric + and cs_promo_sk = p_promo_sk + and p_channel_tv = 'N' +group by cp_catalog_page_id) + , + wsr as + (select web_site_id, + sum(ws_ext_sales_price) as sales, + sum(coalesce(wr_return_amt, 0::numeric)) as returns, + sum(ws_net_profit - coalesce(wr_net_loss, 0::numeric)) as profit + from plato.web_sales left outer join plato.web_returns on + (ws_item_sk = wr_item_sk and ws_order_number = wr_order_number), + plato.date_dim, + plato.web_site, + plato.item, + plato.promotion + where ws_sold_date_sk = d_date_sk + and d_date between cast('1998-08-04' as date) + and (cast('1998-08-04' as date) + interval '30' day)::date + and ws_web_site_sk = web_site_sk + and ws_item_sk = i_item_sk + and i_current_price > 50::numeric + and ws_promo_sk = p_promo_sk + and p_channel_tv = 'N' +group by web_site_id) + select channel + , id + , sum(sales) as sales + , sum(returns) as returns + , sum(profit) as profit + from + (select 'store channel' as channel + , 'store' || store_id as id + , sales + , returns + , profit + from ssr + union all + select 'catalog channel' as channel + , 'catalog_page' || catalog_page_id as id + , sales + , returns + , profit + from csr + union all + select 'web channel' as channel + , 'web_site' || web_site_id as id + , sales + , returns + , profit + from wsr + ) x + group by rollup (channel, id) + order by channel + ,id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query80.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q81.sql b/yt/yql/tests/sql/suites/pg-tpcds/q81.sql new file mode 100644 index 0000000000..e90c1f85ed --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q81.sql @@ -0,0 +1,34 @@ +--!syntax_pg +--TPC-DS Q81 + +-- start query 1 in stream 0 using template ../query_templates/query81.tpl +with customer_total_return as + (select cr_returning_customer_sk as ctr_customer_sk + ,ca_state as ctr_state, + sum(cr_return_amt_inc_tax) as ctr_total_return + from plato.catalog_returns + ,plato.date_dim + ,plato.customer_address + where cr_returned_date_sk = d_date_sk + and d_year =1998 + and cr_returning_addr_sk = ca_address_sk + group by cr_returning_customer_sk + ,ca_state ) + select c_customer_id,c_salutation,c_first_name,c_last_name,ca_street_number,ca_street_name + ,ca_street_type,ca_suite_number,ca_city,ca_county,ca_state,ca_zip,ca_country,ca_gmt_offset + ,ca_location_type,ctr_total_return + from customer_total_return ctr1 + ,plato.customer_address + ,plato.customer + where ctr1.ctr_total_return > (select avg(ctr_total_return)*1.2::numeric + from customer_total_return ctr2 + where ctr1.ctr_state = ctr2.ctr_state) + and ca_address_sk = c_current_addr_sk + and ca_state = 'IL' + and ctr1.ctr_customer_sk = c_customer_sk + order by c_customer_id,c_salutation,c_first_name,c_last_name,ca_street_number,ca_street_name + ,ca_street_type,ca_suite_number,ca_city,ca_county,ca_state,ca_zip,ca_country,ca_gmt_offset + ,ca_location_type,ctr_total_return + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query81.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q82.sql b/yt/yql/tests/sql/suites/pg-tpcds/q82.sql new file mode 100644 index 0000000000..9d641268b6 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q82.sql @@ -0,0 +1,20 @@ +--!syntax_pg +--TPC-DS Q82 + +-- start query 1 in stream 0 using template ../query_templates/query82.tpl +select i_item_id + ,i_item_desc + ,i_current_price + from plato.item, plato.inventory, plato.date_dim, plato.store_sales + where i_current_price between 30::numeric and (30+30)::numeric + and inv_item_sk = i_item_sk + and d_date_sk=inv_date_sk + and d_date between cast('2002-05-30' as date) and (cast('2002-05-30' as date) + interval '60' day)::date + and i_manufact_id in (437,129,727,663) + and inv_quantity_on_hand between 100 and 500 + and ss_item_sk = i_item_sk + group by i_item_id,i_item_desc,i_current_price + order by i_item_id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query82.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q83.sql b/yt/yql/tests/sql/suites/pg-tpcds/q83.sql new file mode 100644 index 0000000000..0801e9902c --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q83.sql @@ -0,0 +1,70 @@ +--!syntax_pg +--TPC-DS Q83 + +-- start query 1 in stream 0 using template ../query_templates/query83.tpl +with sr_items as + (select i_item_id item_id, + sum(sr_return_quantity) sr_item_qty + from plato.store_returns, + plato.item, + plato.date_dim + where sr_item_sk = i_item_sk + and d_date in + (select d_date + from plato.date_dim + where d_week_seq in + (select d_week_seq + from plato.date_dim + where d_date in ('1998-01-02'::date,'1998-10-15'::date,'1998-11-10'::date))) + and sr_returned_date_sk = d_date_sk + group by i_item_id), + cr_items as + (select i_item_id item_id, + sum(cr_return_quantity) cr_item_qty + from plato.catalog_returns, + plato.item, + plato.date_dim + where cr_item_sk = i_item_sk + and d_date in + (select d_date + from plato.date_dim + where d_week_seq in + (select d_week_seq + from plato.date_dim + where d_date in ('1998-01-02'::date,'1998-10-15'::date,'1998-11-10'::date))) + and cr_returned_date_sk = d_date_sk + group by i_item_id), + wr_items as + (select i_item_id item_id, + sum(wr_return_quantity) wr_item_qty + from plato.web_returns, + plato.item, + plato.date_dim + where wr_item_sk = i_item_sk + and d_date in + (select d_date + from plato.date_dim + where d_week_seq in + (select d_week_seq + from plato.date_dim + where d_date in ('1998-01-02'::date,'1998-10-15'::date,'1998-11-10'::date))) + and wr_returned_date_sk = d_date_sk + group by i_item_id) + select sr_items.item_id + ,sr_item_qty + ,sr_item_qty::numeric/(sr_item_qty+cr_item_qty+wr_item_qty)::numeric/3.0::numeric * 100::numeric sr_dev + ,cr_item_qty + ,cr_item_qty::numeric/(sr_item_qty+cr_item_qty+wr_item_qty)::numeric/3.0::numeric * 100::numeric cr_dev + ,wr_item_qty + ,wr_item_qty::numeric/(sr_item_qty+cr_item_qty+wr_item_qty)::numeric/3.0::numeric * 100::numeric wr_dev + ,(sr_item_qty+cr_item_qty+wr_item_qty)::numeric/3.0::numeric average + from sr_items + ,cr_items + ,wr_items + where sr_items.item_id=cr_items.item_id + and sr_items.item_id=wr_items.item_id + order by sr_items.item_id + ,sr_item_qty + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query83.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q84.sql b/yt/yql/tests/sql/suites/pg-tpcds/q84.sql new file mode 100644 index 0000000000..edb7027691 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q84.sql @@ -0,0 +1,24 @@ +--!syntax_pg +--TPC-DS Q84 + +-- start query 1 in stream 0 using template ../query_templates/query84.tpl +select c_customer_id as customer_id + , coalesce(c_last_name,'') || ', ' || coalesce(c_first_name,'') as customername + from plato.customer + ,plato.customer_address + ,plato.customer_demographics + ,plato.household_demographics + ,plato.income_band + ,plato.store_returns + where ca_city = 'Hopewell' + and c_current_addr_sk = ca_address_sk + and ib_lower_bound >= 32287 + and ib_upper_bound <= 32287 + 50000 + and ib_income_band_sk = hd_income_band_sk + and cd_demo_sk = c_current_cdemo_sk + and hd_demo_sk = c_current_hdemo_sk + and sr_cdemo_sk = cd_demo_sk + order by c_customer_id + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query84.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q85.sql b/yt/yql/tests/sql/suites/pg-tpcds/q85.sql new file mode 100644 index 0000000000..b438fd07c9 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q85.sql @@ -0,0 +1,87 @@ +--!syntax_pg +--TPC-DS Q85 + +-- start query 1 in stream 0 using template ../query_templates/query85.tpl +select substr(r_reason_desc,1,20) reason + ,avg(ws_quantity) avg_ws_q + ,avg(wr_refunded_cash) avg_wr_r + ,avg(wr_fee) avg_wr_f + from plato.web_sales, plato.web_returns, plato.web_page, plato.customer_demographics cd1, + plato.customer_demographics cd2, plato.customer_address, plato.date_dim, plato.reason + where ws_web_page_sk = wp_web_page_sk + and ws_item_sk = wr_item_sk + and ws_order_number = wr_order_number + and ws_sold_date_sk = d_date_sk and d_year = 1998 + and cd1.cd_demo_sk = wr_refunded_cdemo_sk + and cd2.cd_demo_sk = wr_returning_cdemo_sk + and ca_address_sk = wr_refunded_addr_sk + and r_reason_sk = wr_reason_sk + and + ( + ( + cd1.cd_marital_status = 'M' + and + cd1.cd_marital_status = cd2.cd_marital_status + and + cd1.cd_education_status = '4 yr Degree' + and + cd1.cd_education_status = cd2.cd_education_status + and + ws_sales_price between 100.00::numeric and 150.00::numeric + ) + or + ( + cd1.cd_marital_status = 'D' + and + cd1.cd_marital_status = cd2.cd_marital_status + and + cd1.cd_education_status = 'Primary' + and + cd1.cd_education_status = cd2.cd_education_status + and + ws_sales_price between 50.00::numeric and 100.00::numeric + ) + or + ( + cd1.cd_marital_status = 'U' + and + cd1.cd_marital_status = cd2.cd_marital_status + and + cd1.cd_education_status = 'Advanced Degree' + and + cd1.cd_education_status = cd2.cd_education_status + and + ws_sales_price between 150.00::numeric and 200.00::numeric + ) + ) + and + ( + ( + ca_country = 'United States' + and + ca_state in ('KY', 'GA', 'NM') + and ws_net_profit between 100::numeric and 200::numeric + ) + or + ( + ca_country = 'United States' + and + ca_state in ('MT', 'OR', 'IN') + and ws_net_profit between 150::numeric and 300::numeric + ) + or + ( + ca_country = 'United States' + and + ca_state in ('WI', 'MO', 'WV') + and ws_net_profit between 50::numeric and 250::numeric + ) + ) +group by r_reason_desc +order by substr(r_reason_desc,1,20) + ,avg(ws_quantity) + ,avg(wr_refunded_cash) + ,avg(wr_fee) +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query85.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q86.sql b/yt/yql/tests/sql/suites/pg-tpcds/q86.sql new file mode 100644 index 0000000000..0d44f7482b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q86.sql @@ -0,0 +1,29 @@ +--!syntax_pg +--TPC-DS Q86 + +-- start query 1 in stream 0 using template ../query_templates/query86.tpl +select + sum(ws_net_paid) as total_sum + ,i_category + ,i_class + ,grouping(i_category)+grouping(i_class) as lochierarchy + ,rank() over ( + partition by grouping(i_category)+grouping(i_class), + case when grouping(i_class) = 0 then i_category end + order by sum(ws_net_paid) desc) as rank_within_parent + from + plato.web_sales + ,plato.date_dim d1 + ,plato.item + where + d1.d_month_seq between 1212 and 1212+11 + and d1.d_date_sk = ws_sold_date_sk + and i_item_sk = ws_item_sk + group by rollup(i_category,i_class) + order by + lochierarchy desc, + case when lochierarchy = 0 then i_category end, + rank_within_parent + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query86.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q87.sql b/yt/yql/tests/sql/suites/pg-tpcds/q87.sql new file mode 100644 index 0000000000..e3ff56344c --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q87.sql @@ -0,0 +1,26 @@ +--!syntax_pg +--TPC-DS Q87 + +-- start query 1 in stream 0 using template ../query_templates/query87.tpl +select count(*) +from ((select distinct c_last_name, c_first_name, d_date + from plato.store_sales, plato.date_dim, plato.customer + where store_sales.ss_sold_date_sk = date_dim.d_date_sk + and store_sales.ss_customer_sk = customer.c_customer_sk + and d_month_seq between 1212 and 1212+11) + except + (select distinct c_last_name, c_first_name, d_date + from plato.catalog_sales, plato.date_dim, plato.customer + where catalog_sales.cs_sold_date_sk = date_dim.d_date_sk + and catalog_sales.cs_bill_customer_sk = customer.c_customer_sk + and d_month_seq between 1212 and 1212+11) + except + (select distinct c_last_name, c_first_name, d_date + from plato.web_sales, plato.date_dim, plato.customer + where web_sales.ws_sold_date_sk = date_dim.d_date_sk + and web_sales.ws_bill_customer_sk = customer.c_customer_sk + and d_month_seq between 1212 and 1212+11) +) cool_cust +; + +-- end query 1 in stream 0 using template ../query_templates/query87.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q88.sql b/yt/yql/tests/sql/suites/pg-tpcds/q88.sql new file mode 100644 index 0000000000..e2887788ed --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q88.sql @@ -0,0 +1,97 @@ +--!syntax_pg +--TPC-DS Q88 + +-- start query 1 in stream 0 using template ../query_templates/query88.tpl +select * +from + (select count(*) h8_30_to_9 + from plato.store_sales, plato.household_demographics , plato.time_dim, plato.store + where ss_sold_time_sk = time_dim.t_time_sk + and ss_hdemo_sk = household_demographics.hd_demo_sk + and ss_store_sk = s_store_sk + and time_dim.t_hour = 8 + and time_dim.t_minute >= 30 + and ((household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2) or + (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or + (household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2)) + and store.s_store_name = 'ese') s1, + (select count(*) h9_to_9_30 + from plato.store_sales, plato.household_demographics , plato.time_dim, plato.store + where ss_sold_time_sk = time_dim.t_time_sk + and ss_hdemo_sk = household_demographics.hd_demo_sk + and ss_store_sk = s_store_sk + and time_dim.t_hour = 9 + and time_dim.t_minute < 30 + and ((household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2) or + (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or + (household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2)) + and store.s_store_name = 'ese') s2, + (select count(*) h9_30_to_10 + from plato.store_sales, plato.household_demographics , plato.time_dim, plato.store + where ss_sold_time_sk = time_dim.t_time_sk + and ss_hdemo_sk = household_demographics.hd_demo_sk + and ss_store_sk = s_store_sk + and time_dim.t_hour = 9 + and time_dim.t_minute >= 30 + and ((household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2) or + (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or + (household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2)) + and store.s_store_name = 'ese') s3, + (select count(*) h10_to_10_30 + from plato.store_sales, plato.household_demographics , plato.time_dim, plato.store + where ss_sold_time_sk = time_dim.t_time_sk + and ss_hdemo_sk = household_demographics.hd_demo_sk + and ss_store_sk = s_store_sk + and time_dim.t_hour = 10 + and time_dim.t_minute < 30 + and ((household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2) or + (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or + (household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2)) + and store.s_store_name = 'ese') s4, + (select count(*) h10_30_to_11 + from plato.store_sales, plato.household_demographics , plato.time_dim, plato.store + where ss_sold_time_sk = time_dim.t_time_sk + and ss_hdemo_sk = household_demographics.hd_demo_sk + and ss_store_sk = s_store_sk + and time_dim.t_hour = 10 + and time_dim.t_minute >= 30 + and ((household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2) or + (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or + (household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2)) + and store.s_store_name = 'ese') s5, + (select count(*) h11_to_11_30 + from plato.store_sales, plato.household_demographics , plato.time_dim, plato.store + where ss_sold_time_sk = time_dim.t_time_sk + and ss_hdemo_sk = household_demographics.hd_demo_sk + and ss_store_sk = s_store_sk + and time_dim.t_hour = 11 + and time_dim.t_minute < 30 + and ((household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2) or + (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or + (household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2)) + and store.s_store_name = 'ese') s6, + (select count(*) h11_30_to_12 + from plato.store_sales, plato.household_demographics , plato.time_dim, plato.store + where ss_sold_time_sk = time_dim.t_time_sk + and ss_hdemo_sk = household_demographics.hd_demo_sk + and ss_store_sk = s_store_sk + and time_dim.t_hour = 11 + and time_dim.t_minute >= 30 + and ((household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2) or + (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or + (household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2)) + and store.s_store_name = 'ese') s7, + (select count(*) h12_to_12_30 + from plato.store_sales, plato.household_demographics , plato.time_dim, plato.store + where ss_sold_time_sk = time_dim.t_time_sk + and ss_hdemo_sk = household_demographics.hd_demo_sk + and ss_store_sk = s_store_sk + and time_dim.t_hour = 12 + and time_dim.t_minute < 30 + and ((household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2) or + (household_demographics.hd_dep_count = 0 and household_demographics.hd_vehicle_count<=0+2) or + (household_demographics.hd_dep_count = 1 and household_demographics.hd_vehicle_count<=1+2)) + and store.s_store_name = 'ese') s8 +; + +-- end query 1 in stream 0 using template ../query_templates/query88.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q89.sql b/yt/yql/tests/sql/suites/pg-tpcds/q89.sql new file mode 100644 index 0000000000..7bc365056a --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q89.sql @@ -0,0 +1,31 @@ +--!syntax_pg +--TPC-DS Q89 + +-- start query 1 in stream 0 using template ../query_templates/query89.tpl +select * +from( +select i_category, i_class, i_brand, + s_store_name, s_company_name, + d_moy, + sum(ss_sales_price) sum_sales, + avg(sum(ss_sales_price)) over + (partition by i_category, i_brand, s_store_name, s_company_name) + avg_monthly_sales +from plato.item, plato.store_sales, plato.date_dim, plato.store +where ss_item_sk = i_item_sk and + ss_sold_date_sk = d_date_sk and + ss_store_sk = s_store_sk and + d_year in (2000) and + ((i_category in ('Home','Books','Electronics') and + i_class in ('wallpaper','parenting','musical') + ) + or (i_category in ('Shoes','Jewelry','Men') and + i_class in ('womens','birdal','pants') + )) +group by i_category, i_class, i_brand, + s_store_name, s_company_name, d_moy) tmp1 +where case when (avg_monthly_sales <> 0::numeric) then (abs(sum_sales - avg_monthly_sales) / avg_monthly_sales) else null::numeric end > 0.1::numeric +order by sum_sales - avg_monthly_sales, s_store_name +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query89.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q90.sql b/yt/yql/tests/sql/suites/pg-tpcds/q90.sql new file mode 100644 index 0000000000..cf4342c67c --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q90.sql @@ -0,0 +1,25 @@ +--!syntax_pg +--TPC-DS Q90 + +-- start query 1 in stream 0 using template ../query_templates/query90.tpl +select cast(amc as decimal(15,4))/cast(pmc as decimal(15,4)) am_pm_ratio + from ( select count(*) amc + from plato.web_sales, plato.household_demographics , plato.time_dim, plato.web_page + where ws_sold_time_sk = time_dim.t_time_sk + and ws_ship_hdemo_sk = household_demographics.hd_demo_sk + and ws_web_page_sk = web_page.wp_web_page_sk + and time_dim.t_hour between 6 and 6+1 + and household_demographics.hd_dep_count = 8 + and web_page.wp_char_count between 5000 and 5200) at, + ( select 1 + count(*) pmc + from plato.web_sales, plato.household_demographics , plato.time_dim, plato.web_page + where ws_sold_time_sk = time_dim.t_time_sk + and ws_ship_hdemo_sk = household_demographics.hd_demo_sk + and ws_web_page_sk = web_page.wp_web_page_sk + and time_dim.t_hour between 14 and 14+1 + and household_demographics.hd_dep_count = 8 + and web_page.wp_char_count between 5000 and 5200) pt + order by am_pm_ratio + limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query90.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q91.sql b/yt/yql/tests/sql/suites/pg-tpcds/q91.sql new file mode 100644 index 0000000000..3fa68d2371 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q91.sql @@ -0,0 +1,34 @@ +--!syntax_pg +--TPC-DS Q91 + +-- start query 1 in stream 0 using template ../query_templates/query91.tpl +select + cc_call_center_id Call_Center, + cc_name Call_Center_Name, + cc_manager Manager, + sum(cr_net_loss) Returns_Loss +from + plato.call_center, + plato.catalog_returns, + plato.date_dim, + plato.customer, + plato.customer_address, + plato.customer_demographics, + plato.household_demographics +where + cr_call_center_sk = cc_call_center_sk +and cr_returned_date_sk = d_date_sk +and cr_returning_customer_sk= c_customer_sk +and cd_demo_sk = c_current_cdemo_sk +and hd_demo_sk = c_current_hdemo_sk +and ca_address_sk = c_current_addr_sk +and d_year = 1999 +and d_moy = 11 +and ( (cd_marital_status = 'M' and cd_education_status = 'Unknown') + or(cd_marital_status = 'W' and cd_education_status = 'Advanced Degree')) +and hd_buy_potential like '0-500%' +and ca_gmt_offset = -7::numeric +group by cc_call_center_id,cc_name,cc_manager,cd_marital_status,cd_education_status +order by sum(cr_net_loss) desc; + +-- end query 1 in stream 0 using template ../query_templates/query91.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q92.sql b/yt/yql/tests/sql/suites/pg-tpcds/q92.sql new file mode 100644 index 0000000000..262bcdc718 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q92.sql @@ -0,0 +1,33 @@ +--!syntax_pg +--TPC-DS Q92 + +-- start query 1 in stream 0 using template ../query_templates/query92.tpl +select + sum(ws_ext_discount_amt) as "Excess Discount Amount" +from + plato.web_sales + ,plato.item + ,plato.date_dim +where +i_manufact_id = 269 +and i_item_sk = ws_item_sk +and d_date between '1998-03-18'::date and + (cast('1998-03-18' as date) + interval '90' day)::date +and d_date_sk = ws_sold_date_sk +and ws_ext_discount_amt + > ( + SELECT + 1.3::numeric * avg(ws_ext_discount_amt) + FROM + plato.web_sales + ,plato.date_dim + WHERE + ws_item_sk = i_item_sk + and d_date between '1998-03-18'::date and + (cast('1998-03-18' as date) + interval '90' day)::date + and d_date_sk = ws_sold_date_sk + ) +order by sum(ws_ext_discount_amt) +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query92.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q93.sql b/yt/yql/tests/sql/suites/pg-tpcds/q93.sql new file mode 100644 index 0000000000..4dadc188eb --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q93.sql @@ -0,0 +1,21 @@ +--!syntax_pg +--TPC-DS Q93 + +-- start query 1 in stream 0 using template ../query_templates/query93.tpl +select ss_customer_sk + ,sum(act_sales) sumsales + from (select ss_item_sk + ,ss_ticket_number + ,ss_customer_sk + ,case when sr_return_quantity is not null then (ss_quantity-sr_return_quantity)::numeric*ss_sales_price + else (ss_quantity::numeric*ss_sales_price) end act_sales + from plato.store_sales left outer join plato.store_returns on (sr_item_sk = ss_item_sk + and sr_ticket_number = ss_ticket_number) + ,plato.reason + where sr_reason_sk = r_reason_sk + and r_reason_desc = 'Did not like the warranty') t + group by ss_customer_sk + order by sumsales, ss_customer_sk +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query93.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q94.sql b/yt/yql/tests/sql/suites/pg-tpcds/q94.sql new file mode 100644 index 0000000000..daacc6aa7e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q94.sql @@ -0,0 +1,32 @@ +--!syntax_pg +--TPC-DS Q94 + +-- start query 1 in stream 0 using template ../query_templates/query94.tpl +select + count(distinct ws_order_number) as "order count" + ,sum(ws_ext_ship_cost) as "total shipping cost" + ,sum(ws_net_profit) as "total net profit" +from + plato.web_sales ws1 + ,plato.date_dim + ,plato.customer_address + ,plato.web_site +where + d_date between '1999-5-01'::date and + (cast('1999-5-01' as date) + interval '60' day)::date +and ws1.ws_ship_date_sk = d_date_sk +and ws1.ws_ship_addr_sk = ca_address_sk +and ca_state = 'TX' +and ws1.ws_web_site_sk = web_site_sk +and web_company_name = 'pri' +and exists (select * + from plato.web_sales ws2 + where ws1.ws_order_number = ws2.ws_order_number + and ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk) +and not exists(select * + from plato.web_returns wr1 + where ws1.ws_order_number = wr1.wr_order_number) +order by count(distinct ws_order_number) +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query94.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q95.sql b/yt/yql/tests/sql/suites/pg-tpcds/q95.sql new file mode 100644 index 0000000000..22bf4259f4 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q95.sql @@ -0,0 +1,35 @@ +--!syntax_pg +--TPC-DS Q95 + +-- start query 1 in stream 0 using template ../query_templates/query95.tpl +with ws_wh as +(select ws1.ws_order_number,ws1.ws_warehouse_sk wh1,ws2.ws_warehouse_sk wh2 + from plato.web_sales ws1,plato.web_sales ws2 + where ws1.ws_order_number = ws2.ws_order_number + and ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk) + select + count(distinct ws_order_number) as "order count" + ,sum(ws_ext_ship_cost) as "total shipping cost" + ,sum(ws_net_profit) as "total net profit" +from + plato.web_sales ws1 + ,plato.date_dim + ,plato.customer_address + ,plato.web_site +where + d_date between '1999-5-01'::date and + (cast('1999-5-01' as date) + interval '60' day)::date +and ws1.ws_ship_date_sk = d_date_sk +and ws1.ws_ship_addr_sk = ca_address_sk +and ca_state = 'TX' +and ws1.ws_web_site_sk = web_site_sk +and web_company_name = 'pri' +and ws1.ws_order_number in (select ws_order_number + from ws_wh) +and ws1.ws_order_number in (select wr_order_number + from plato.web_returns,ws_wh + where wr_order_number = ws_wh.ws_order_number) +order by count(distinct ws_order_number) +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query95.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q96.sql b/yt/yql/tests/sql/suites/pg-tpcds/q96.sql new file mode 100644 index 0000000000..d7b1e2032b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q96.sql @@ -0,0 +1,19 @@ +--!syntax_pg +--TPC-DS Q96 + +-- start query 1 in stream 0 using template ../query_templates/query96.tpl +select count(*) +from plato.store_sales + ,plato.household_demographics + ,plato.time_dim, plato.store +where ss_sold_time_sk = time_dim.t_time_sk + and ss_hdemo_sk = household_demographics.hd_demo_sk + and ss_store_sk = s_store_sk + and time_dim.t_hour = 8 + and time_dim.t_minute >= 30 + and household_demographics.hd_dep_count = 5 + and store.s_store_name = 'ese' +order by count(*) +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query96.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q97.sql b/yt/yql/tests/sql/suites/pg-tpcds/q97.sql new file mode 100644 index 0000000000..6202209359 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q97.sql @@ -0,0 +1,28 @@ +--!syntax_pg +--TPC-DS Q97 + +-- start query 1 in stream 0 using template ../query_templates/query97.tpl +with ssci as ( +select ss_customer_sk customer_sk + ,ss_item_sk item_sk +from plato.store_sales,plato.date_dim +where ss_sold_date_sk = d_date_sk + and d_month_seq between 1212 and 1212 + 11 +group by ss_customer_sk + ,ss_item_sk), +csci as( + select cs_bill_customer_sk customer_sk + ,cs_item_sk item_sk +from plato.catalog_sales,plato.date_dim +where cs_sold_date_sk = d_date_sk + and d_month_seq between 1212 and 1212 + 11 +group by cs_bill_customer_sk + ,cs_item_sk) + select sum(case when ssci.customer_sk is not null and csci.customer_sk is null then 1 else 0 end) store_only + ,sum(case when ssci.customer_sk is null and csci.customer_sk is not null then 1 else 0 end) catalog_only + ,sum(case when ssci.customer_sk is not null and csci.customer_sk is not null then 1 else 0 end) store_and_catalog +from ssci full outer join csci on (ssci.customer_sk=csci.customer_sk + and ssci.item_sk = csci.item_sk) +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query97.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q98.sql b/yt/yql/tests/sql/suites/pg-tpcds/q98.sql new file mode 100644 index 0000000000..a6342cfc08 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q98.sql @@ -0,0 +1,36 @@ +--!syntax_pg +--TPC-DS Q98 + +-- start query 1 in stream 0 using template ../query_templates/query98.tpl +select i_item_id + ,i_item_desc + ,i_category + ,i_class + ,i_current_price + ,sum(ss_ext_sales_price) as itemrevenue + ,sum(ss_ext_sales_price)*100::numeric/sum(sum(ss_ext_sales_price)) over + (partition by i_class) as revenueratio +from + plato.store_sales + ,plato.item + ,plato.date_dim +where + ss_item_sk = i_item_sk + and i_category in ('Jewelry', 'Sports', 'Books') + and ss_sold_date_sk = d_date_sk + and d_date between cast('2001-01-12' as date) + and (cast('2001-01-12' as date) + interval '30' day)::date +group by + i_item_id + ,i_item_desc + ,i_category + ,i_class + ,i_current_price +order by + i_category + ,i_class + ,i_item_id + ,i_item_desc + ,revenueratio; + +-- end query 1 in stream 0 using template ../query_templates/query98.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/q99.sql b/yt/yql/tests/sql/suites/pg-tpcds/q99.sql new file mode 100644 index 0000000000..997a52b9c3 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/q99.sql @@ -0,0 +1,38 @@ +--!syntax_pg +--TPC-DS Q99 + +-- start query 1 in stream 0 using template ../query_templates/query99.tpl +select + substr(w_warehouse_name,1,20) + ,sm_type + ,cc_name + ,sum(case when (cs_ship_date_sk - cs_sold_date_sk <= 30 ) then 1 else 0 end) as "30 days" + ,sum(case when (cs_ship_date_sk - cs_sold_date_sk > 30) and + (cs_ship_date_sk - cs_sold_date_sk <= 60) then 1 else 0 end ) as "31-60 days" + ,sum(case when (cs_ship_date_sk - cs_sold_date_sk > 60) and + (cs_ship_date_sk - cs_sold_date_sk <= 90) then 1 else 0 end) as "61-90 days" + ,sum(case when (cs_ship_date_sk - cs_sold_date_sk > 90) and + (cs_ship_date_sk - cs_sold_date_sk <= 120) then 1 else 0 end) as "91-120 days" + ,sum(case when (cs_ship_date_sk - cs_sold_date_sk > 120) then 1 else 0 end) as ">120 days" +from + plato.catalog_sales + ,plato.warehouse + ,plato.ship_mode + ,plato.call_center + ,plato.date_dim +where + d_month_seq between 1212 and 1212 + 11 +and cs_ship_date_sk = d_date_sk +and cs_warehouse_sk = w_warehouse_sk +and cs_ship_mode_sk = sm_ship_mode_sk +and cs_call_center_sk = cc_call_center_sk +group by + substr(w_warehouse_name,1,20) + ,sm_type + ,cc_name +order by substr(w_warehouse_name,1,20) + ,sm_type + ,cc_name +limit 100; + +-- end query 1 in stream 0 using template ../query_templates/query99.tpl diff --git a/yt/yql/tests/sql/suites/pg-tpcds/reason.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/reason.txt.attr new file mode 100644 index 0000000000..fd3f41bb77 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/reason.txt.attr @@ -0,0 +1,9 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["r_reason_sk";["PgType";"int4";];]; + ["r_reason_id";["PgType";"text";];]; + ["r_reason_desc";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/ship_mode.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/ship_mode.txt.attr new file mode 100644 index 0000000000..51e9bb003e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/ship_mode.txt.attr @@ -0,0 +1,12 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["sm_ship_mode_sk";["PgType";"int4";];]; + ["sm_ship_mode_id";["PgType";"text";];]; + ["sm_type";["PgType";"text";];]; + ["sm_code";["PgType";"text";];]; + ["sm_carrier";["PgType";"text";];]; + ["sm_contract";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/store.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/store.txt.attr new file mode 100644 index 0000000000..20fb103d16 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/store.txt.attr @@ -0,0 +1,35 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["s_store_sk";["PgType";"int4";];]; + ["s_store_id";["PgType";"text";];]; + ["s_rec_start_date";["PgType";"date";];]; + ["s_rec_end_date";["PgType";"date";];]; + ["s_closed_date_sk";["PgType";"int4";];]; + ["s_store_name";["PgType";"text";];]; + ["s_number_employees";["PgType";"int4";];]; + ["s_floor_space";["PgType";"int4";];]; + ["s_hours";["PgType";"text";];]; + ["s_manager";["PgType";"text";];]; + ["s_market_id";["PgType";"int4";];]; + ["s_geography_class";["PgType";"text";];]; + ["s_market_desc";["PgType";"text";];]; + ["s_market_manager";["PgType";"text";];]; + ["s_division_id";["PgType";"int4";];]; + ["s_division_name";["PgType";"text";];]; + ["s_company_id";["PgType";"int4";];]; + ["s_company_name";["PgType";"text";];]; + ["s_street_number";["PgType";"text";];]; + ["s_street_name";["PgType";"text";];]; + ["s_street_type";["PgType";"text";];]; + ["s_suite_number";["PgType";"text";];]; + ["s_city";["PgType";"text";];]; + ["s_county";["PgType";"text";];]; + ["s_state";["PgType";"text";];]; + ["s_zip";["PgType";"text";];]; + ["s_country";["PgType";"text";];]; + ["s_gmt_offset";["PgType";"numeric";];]; + ["s_tax_precentage";["PgType";"numeric";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/store_returns.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/store_returns.txt.attr new file mode 100644 index 0000000000..19ce866250 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/store_returns.txt.attr @@ -0,0 +1,26 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["sr_returned_date_sk";["PgType";"int4";];]; + ["sr_return_time_sk";["PgType";"int4";];]; + ["sr_item_sk";["PgType";"int4";];]; + ["sr_customer_sk";["PgType";"int4";];]; + ["sr_cdemo_sk";["PgType";"int4";];]; + ["sr_hdemo_sk";["PgType";"int4";];]; + ["sr_addr_sk";["PgType";"int4";];]; + ["sr_store_sk";["PgType";"int4";];]; + ["sr_reason_sk";["PgType";"int4";];]; + ["sr_ticket_number";["PgType";"int4";];]; + ["sr_return_quantity";["PgType";"int4";];]; + ["sr_return_amt";["PgType";"numeric";];]; + ["sr_return_tax";["PgType";"numeric";];]; + ["sr_return_amt_inc_tax";["PgType";"numeric";];]; + ["sr_fee";["PgType";"numeric";];]; + ["sr_return_ship_cost";["PgType";"numeric";];]; + ["sr_refunded_cash";["PgType";"numeric";];]; + ["sr_reversed_charge";["PgType";"numeric";];]; + ["sr_store_credit";["PgType";"numeric";];]; + ["sr_net_loss";["PgType";"numeric";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/store_sales.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/store_sales.txt.attr new file mode 100644 index 0000000000..16235a21fb --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/store_sales.txt.attr @@ -0,0 +1,29 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["ss_sold_date_sk";["PgType";"int4";];]; + ["ss_sold_time_sk";["PgType";"int4";];]; + ["ss_item_sk";["PgType";"int4";];]; + ["ss_customer_sk";["PgType";"int4";];]; + ["ss_cdemo_sk";["PgType";"int4";];]; + ["ss_hdemo_sk";["PgType";"int4";];]; + ["ss_addr_sk";["PgType";"int4";];]; + ["ss_store_sk";["PgType";"int4";];]; + ["ss_promo_sk";["PgType";"int4";];]; + ["ss_ticket_number";["PgType";"int4";];]; + ["ss_quantity";["PgType";"int4";];]; + ["ss_wholesale_cost";["PgType";"numeric";];]; + ["ss_list_price";["PgType";"numeric";];]; + ["ss_sales_price";["PgType";"numeric";];]; + ["ss_ext_discount_amt";["PgType";"numeric";];]; + ["ss_ext_sales_price";["PgType";"numeric";];]; + ["ss_ext_wholesale_cost";["PgType";"numeric";];]; + ["ss_ext_list_price";["PgType";"numeric";];]; + ["ss_ext_tax";["PgType";"numeric";];]; + ["ss_coupon_amt";["PgType";"numeric";];]; + ["ss_net_paid";["PgType";"numeric";];]; + ["ss_net_paid_inc_tax";["PgType";"numeric";];]; + ["ss_net_profit";["PgType";"numeric";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/time_dim.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/time_dim.txt.attr new file mode 100644 index 0000000000..4ce0b9f06d --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/time_dim.txt.attr @@ -0,0 +1,16 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["t_time_sk";["PgType";"int4";];]; + ["t_time_id";["PgType";"text";];]; + ["t_time";["PgType";"int4";];]; + ["t_hour";["PgType";"int4";];]; + ["t_minute";["PgType";"int4";];]; + ["t_second";["PgType";"int4";];]; + ["t_am_pm";["PgType";"text";];]; + ["t_shift";["PgType";"text";];]; + ["t_sub_shift";["PgType";"text";];]; + ["t_meal_time";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/warehouse.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/warehouse.txt.attr new file mode 100644 index 0000000000..1bb8d17441 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/warehouse.txt.attr @@ -0,0 +1,20 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["w_warehouse_sk";["PgType";"int4";];]; + ["w_warehouse_id";["PgType";"text";];]; + ["w_warehouse_name";["PgType";"text";];]; + ["w_warehouse_sq_ft";["PgType";"int4";];]; + ["w_street_number";["PgType";"text";];]; + ["w_street_name";["PgType";"text";];]; + ["w_street_type";["PgType";"text";];]; + ["w_suite_number";["PgType";"text";];]; + ["w_city";["PgType";"text";];]; + ["w_county";["PgType";"text";];]; + ["w_state";["PgType";"text";];]; + ["w_zip";["PgType";"text";];]; + ["w_country";["PgType";"text";];]; + ["w_gmt_offset";["PgType";"numeric";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/web_page.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/web_page.txt.attr new file mode 100644 index 0000000000..627f5e6b90 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/web_page.txt.attr @@ -0,0 +1,20 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["wp_web_page_sk";["PgType";"int4";];]; + ["wp_web_page_id";["PgType";"text";];]; + ["wp_rec_start_date";["PgType";"date";];]; + ["wp_rec_end_date";["PgType";"date";];]; + ["wp_creation_date_sk";["PgType";"int4";];]; + ["wp_access_date_sk";["PgType";"int4";];]; + ["wp_autogen_flag";["PgType";"text";];]; + ["wp_customer_sk";["PgType";"int4";];]; + ["wp_url";["PgType";"text";];]; + ["wp_type";["PgType";"text";];]; + ["wp_char_count";["PgType";"int4";];]; + ["wp_link_count";["PgType";"int4";];]; + ["wp_image_count";["PgType";"int4";];]; + ["wp_max_ad_count";["PgType";"int4";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/web_returns.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/web_returns.txt.attr new file mode 100644 index 0000000000..591d69b136 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/web_returns.txt.attr @@ -0,0 +1,30 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["wr_returned_date_sk";["PgType";"int4";];]; + ["wr_returned_time_sk";["PgType";"int4";];]; + ["wr_item_sk";["PgType";"int4";];]; + ["wr_refunded_customer_sk";["PgType";"int4";];]; + ["wr_refunded_cdemo_sk";["PgType";"int4";];]; + ["wr_refunded_hdemo_sk";["PgType";"int4";];]; + ["wr_refunded_addr_sk";["PgType";"int4";];]; + ["wr_returning_customer_sk";["PgType";"int4";];]; + ["wr_returning_cdemo_sk";["PgType";"int4";];]; + ["wr_returning_hdemo_sk";["PgType";"int4";];]; + ["wr_returning_addr_sk";["PgType";"int4";];]; + ["wr_web_page_sk";["PgType";"int4";];]; + ["wr_reason_sk";["PgType";"int4";];]; + ["wr_order_number";["PgType";"int4";];]; + ["wr_return_quantity";["PgType";"int4";];]; + ["wr_return_amt";["PgType";"numeric";];]; + ["wr_return_tax";["PgType";"numeric";];]; + ["wr_return_amt_inc_tax";["PgType";"numeric";];]; + ["wr_fee";["PgType";"numeric";];]; + ["wr_return_ship_cost";["PgType";"numeric";];]; + ["wr_refunded_cash";["PgType";"numeric";];]; + ["wr_reversed_charge";["PgType";"numeric";];]; + ["wr_account_credit";["PgType";"numeric";];]; + ["wr_net_loss";["PgType";"numeric";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/web_sales.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/web_sales.txt.attr new file mode 100644 index 0000000000..7a4c5dda75 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/web_sales.txt.attr @@ -0,0 +1,40 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["ws_sold_date_sk";["PgType";"int4";];]; + ["ws_sold_time_sk";["PgType";"int4";];]; + ["ws_ship_date_sk";["PgType";"int4";];]; + ["ws_item_sk";["PgType";"int4";];]; + ["ws_bill_customer_sk";["PgType";"int4";];]; + ["ws_bill_cdemo_sk";["PgType";"int4";];]; + ["ws_bill_hdemo_sk";["PgType";"int4";];]; + ["ws_bill_addr_sk";["PgType";"int4";];]; + ["ws_ship_customer_sk";["PgType";"int4";];]; + ["ws_ship_cdemo_sk";["PgType";"int4";];]; + ["ws_ship_hdemo_sk";["PgType";"int4";];]; + ["ws_ship_addr_sk";["PgType";"int4";];]; + ["ws_web_page_sk";["PgType";"int4";];]; + ["ws_web_site_sk";["PgType";"int4";];]; + ["ws_ship_mode_sk";["PgType";"int4";];]; + ["ws_warehouse_sk";["PgType";"int4";];]; + ["ws_promo_sk";["PgType";"int4";];]; + ["ws_order_number";["PgType";"int4";];]; + ["ws_quantity";["PgType";"int4";];]; + ["ws_wholesale_cost";["PgType";"numeric";];]; + ["ws_list_price";["PgType";"numeric";];]; + ["ws_sales_price";["PgType";"numeric";];]; + ["ws_ext_discount_amt";["PgType";"numeric";];]; + ["ws_ext_sales_price";["PgType";"numeric";];]; + ["ws_ext_wholesale_cost";["PgType";"numeric";];]; + ["ws_ext_list_price";["PgType";"numeric";];]; + ["ws_ext_tax";["PgType";"numeric";];]; + ["ws_coupon_amt";["PgType";"numeric";];]; + ["ws_ext_ship_cost";["PgType";"numeric";];]; + ["ws_net_paid";["PgType";"numeric";];]; + ["ws_net_paid_inc_tax";["PgType";"numeric";];]; + ["ws_net_paid_inc_ship";["PgType";"numeric";];]; + ["ws_net_paid_inc_ship_tax";["PgType";"numeric";];]; + ["ws_net_profit";["PgType";"numeric";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpcds/web_site.txt.attr b/yt/yql/tests/sql/suites/pg-tpcds/web_site.txt.attr new file mode 100644 index 0000000000..9244afbf49 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpcds/web_site.txt.attr @@ -0,0 +1,32 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["web_site_sk";["PgType";"int4";];]; + ["web_site_id";["PgType";"text";];]; + ["web_rec_start_date";["PgType";"date";];]; + ["web_rec_end_date";["PgType";"date";];]; + ["web_name";["PgType";"text";];]; + ["web_open_date_sk";["PgType";"int4";];]; + ["web_close_date_sk";["PgType";"int4";];]; + ["web_class";["PgType";"text";];]; + ["web_manager";["PgType";"text";];]; + ["web_mkt_id";["PgType";"int4";];]; + ["web_mkt_class";["PgType";"text";];]; + ["web_mkt_desc";["PgType";"text";];]; + ["web_market_manager";["PgType";"text";];]; + ["web_company_id";["PgType";"int4";];]; + ["web_company_name";["PgType";"text";];]; + ["web_street_number";["PgType";"text";];]; + ["web_street_name";["PgType";"text";];]; + ["web_street_type";["PgType";"text";];]; + ["web_suite_number";["PgType";"text";];]; + ["web_city";["PgType";"text";];]; + ["web_county";["PgType";"text";];]; + ["web_state";["PgType";"text";];]; + ["web_zip";["PgType";"text";];]; + ["web_country";["PgType";"text";];]; + ["web_gmt_offset";["PgType";"numeric";];]; + ["web_tax_percentage";["PgType";"numeric";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpch/customer.txt.attr b/yt/yql/tests/sql/suites/pg-tpch/customer.txt.attr new file mode 100644 index 0000000000..858a12536d --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/customer.txt.attr @@ -0,0 +1,14 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["c_custkey";["PgType";"int4";];]; + ["c_name";["PgType";"text";];]; + ["c_address";["PgType";"text";];]; + ["c_nationkey";["PgType";"int4";];]; + ["c_phone";["PgType";"text";];]; + ["c_acctbal";["PgType";"numeric";];]; + ["c_mktsegment";["PgType";"text";];]; + ["c_comment";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpch/default.cfg b/yt/yql/tests/sql/suites/pg-tpch/default.cfg new file mode 100644 index 0000000000..f3c9624348 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/default.cfg @@ -0,0 +1,8 @@ +in customer customer.txt +in lineitem lineitem.txt +in nation nation.txt +in orders orders.txt +in part part.txt +in partsupp partsupp.txt +in region region.txt +in supplier supplier.txt diff --git a/yt/yql/tests/sql/suites/pg-tpch/lineitem.txt.attr b/yt/yql/tests/sql/suites/pg-tpch/lineitem.txt.attr new file mode 100644 index 0000000000..f6de3aba92 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/lineitem.txt.attr @@ -0,0 +1,22 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["l_orderkey";["PgType";"int4";];]; + ["l_partkey";["PgType";"int4";];]; + ["l_suppkey";["PgType";"int4";];]; + ["l_linenumber";["PgType";"int4";];]; + ["l_quantity";["PgType";"numeric";];]; + ["l_extendedprice";["PgType";"numeric";];]; + ["l_discount";["PgType";"numeric";];]; + ["l_tax";["PgType";"numeric";];]; + ["l_returnflag";["PgType";"text";];]; + ["l_linestatus";["PgType";"text";];]; + ["l_shipdate";["PgType";"date";];]; + ["l_commitdate";["PgType";"date";];]; + ["l_receiptdate";["PgType";"date";];]; + ["l_shipinstruct";["PgType";"text";];]; + ["l_shipmode";["PgType";"text";];]; + ["l_comment";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpch/nation.txt.attr b/yt/yql/tests/sql/suites/pg-tpch/nation.txt.attr new file mode 100644 index 0000000000..984875af2b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/nation.txt.attr @@ -0,0 +1,10 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["n_nationkey";["PgType";"int4";];]; + ["n_name";["PgType";"text";];]; + ["n_regionkey";["PgType";"int4";];]; + ["n_comment";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpch/orders.txt.attr b/yt/yql/tests/sql/suites/pg-tpch/orders.txt.attr new file mode 100644 index 0000000000..dc3829bfe4 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/orders.txt.attr @@ -0,0 +1,15 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["o_orderkey";["PgType";"int4";];]; + ["o_custkey";["PgType";"int4";];]; + ["o_orderstatus";["PgType";"text";];]; + ["o_totalprice";["PgType";"numeric";];]; + ["o_orderdate";["PgType";"date";];]; + ["o_orderpriority";["PgType";"text";];]; + ["o_clerk";["PgType";"text";];]; + ["o_shippriority";["PgType";"int4";];]; + ["o_comment";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpch/part.txt.attr b/yt/yql/tests/sql/suites/pg-tpch/part.txt.attr new file mode 100644 index 0000000000..c4d0a973fc --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/part.txt.attr @@ -0,0 +1,15 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["p_partkey";["PgType";"int4";];]; + ["p_name";["PgType";"text";];]; + ["p_mfgr";["PgType";"text";];]; + ["p_brand";["PgType";"text";];]; + ["p_type";["PgType";"text";];]; + ["p_size";["PgType";"int4";];]; + ["p_container";["PgType";"text";];]; + ["p_retailprice";["PgType";"numeric";];]; + ["p_comment";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpch/partsupp.txt.attr b/yt/yql/tests/sql/suites/pg-tpch/partsupp.txt.attr new file mode 100644 index 0000000000..7e6a2bd73c --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/partsupp.txt.attr @@ -0,0 +1,11 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["ps_partkey";["PgType";"int4";];]; + ["ps_suppkey";["PgType";"int4";];]; + ["ps_availqty";["PgType";"int4";];]; + ["ps_supplycost";["PgType";"numeric";];]; + ["ps_comment";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpch/q01.sql b/yt/yql/tests/sql/suites/pg-tpch/q01.sql new file mode 100644 index 0000000000..7198f496bc --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q01.sql @@ -0,0 +1,25 @@ +--!syntax_pg +--TPC-H Q1 + + +select +l_returnflag, +l_linestatus, +sum(l_quantity) as sum_qty, +sum(l_extendedprice) as sum_base_price, +sum(l_extendedprice*(1::numeric-l_discount)) as sum_disc_price, +sum(l_extendedprice*(1::numeric-l_discount)*(1::numeric+l_tax)) as sum_charge, +avg(l_quantity) as avg_qty, +avg(l_extendedprice) as avg_price, +avg(l_discount) as avg_disc, +count(*) as count_order +from +plato."lineitem" +where +l_shipdate <= date '1998-12-01' - interval '90' day +group by +l_returnflag, +l_linestatus +order by +l_returnflag, +l_linestatus; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q02.sql b/yt/yql/tests/sql/suites/pg-tpch/q02.sql new file mode 100644 index 0000000000..91349256c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q02.sql @@ -0,0 +1,49 @@ +--!syntax_pg +--ignore runonopt plan diff +--TPC-H Q2 + + +select +s_acctbal, +s_name, +n_name, +p_partkey, +p_mfgr, +s_address, +s_phone, +s_comment +from +plato."part", +plato."supplier", +plato."partsupp", +plato."nation", +plato."region" +where +p_partkey = ps_partkey +and s_suppkey = ps_suppkey +and p_size = 15 +and p_type like '%BRASS' +and s_nationkey = n_nationkey +and n_regionkey = r_regionkey +and r_name = 'EUROPE' +and ps_supplycost = ( +select +min(ps_supplycost) +from +plato."partsupp", +plato."supplier", +plato."nation", +plato."region" +where +p_partkey = ps_partkey +and s_suppkey = ps_suppkey +and s_nationkey = n_nationkey +and n_regionkey = r_regionkey +and r_name = 'EUROPE' +) +order by +s_acctbal desc, +n_name, +s_name, +p_partkey +limit 100; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q03.sql b/yt/yql/tests/sql/suites/pg-tpch/q03.sql new file mode 100644 index 0000000000..fd34b86d2b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q03.sql @@ -0,0 +1,27 @@ +--!syntax_pg +--TPC-H Q3 + + +select +l_orderkey, +sum(l_extendedprice*(1::numeric-l_discount)) as revenue, +o_orderdate, +o_shippriority +from +plato."customer", +plato."orders", +plato."lineitem" +where +c_mktsegment = 'BUILDING' +and c_custkey = o_custkey +and l_orderkey = o_orderkey +and o_orderdate < date '1995-03-15' +and l_shipdate > date '1995-03-15' +group by +l_orderkey, +o_orderdate, +o_shippriority +order by +revenue desc, +o_orderdate +limit 10; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q04.sql b/yt/yql/tests/sql/suites/pg-tpch/q04.sql new file mode 100644 index 0000000000..40718918ee --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q04.sql @@ -0,0 +1,26 @@ +--!syntax_pg +--ignore runonopt plan diff +--TPC-H Q4 + + +select +o_orderpriority, +count(*) as order_count +from +plato."orders" +where +o_orderdate >= date '1993-07-01' +and o_orderdate < date '1993-07-01' + interval '3' month +and exists ( +select +* +from +plato."lineitem" +where +l_orderkey = o_orderkey +and l_commitdate < l_receiptdate +) +group by +o_orderpriority +order by +o_orderpriority; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q05.sql b/yt/yql/tests/sql/suites/pg-tpch/q05.sql new file mode 100644 index 0000000000..089c838380 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q05.sql @@ -0,0 +1,28 @@ +--!syntax_pg +--TPC-H Q5 + + +select +n_name, +sum(l_extendedprice * (1::numeric - l_discount)) as revenue +from +plato."customer", +plato."orders", +plato."lineitem", +plato."supplier", +plato."nation", +plato."region" +where +c_custkey = o_custkey +and l_orderkey = o_orderkey +and l_suppkey = s_suppkey +and c_nationkey = s_nationkey +and s_nationkey = n_nationkey +and n_regionkey = r_regionkey +and r_name = 'ASIA' +and o_orderdate >= date '1994-01-01' +and o_orderdate < date '1994-01-01' + interval '1' year +group by +n_name +order by +revenue desc; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q06.sql b/yt/yql/tests/sql/suites/pg-tpch/q06.sql new file mode 100644 index 0000000000..4f6c0b039b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q06.sql @@ -0,0 +1,13 @@ +--!syntax_pg +--TPC-H Q6 + + +select +sum(l_extendedprice*l_discount) as revenue +from +plato."lineitem" +where +l_shipdate >= date '1994-01-01' +and l_shipdate < date '1994-01-01' + interval '1' year +and l_discount between (0.06 - 0.01)::numeric and (0.06 + 0.01)::numeric +and l_quantity < 24::numeric; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q07.sql b/yt/yql/tests/sql/suites/pg-tpch/q07.sql new file mode 100644 index 0000000000..8f1c30e994 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q07.sql @@ -0,0 +1,41 @@ +--!syntax_pg +--TPC-H Q7 + + +select +supp_nation, +cust_nation, +l_year, sum(volume) as revenue +from ( +select +n1.n_name as supp_nation, +n2.n_name as cust_nation, +extract(year from l_shipdate) as l_year, +l_extendedprice * (1::numeric - l_discount) as volume +from +plato."supplier", +plato."lineitem", +plato."orders", +plato."customer", +plato."nation" n1, +plato."nation" n2 +where +s_suppkey = l_suppkey +and o_orderkey = l_orderkey +and c_custkey = o_custkey +and s_nationkey = n1.n_nationkey +and c_nationkey = n2.n_nationkey +and ( +(n1.n_name = 'FRANCE' and n2.n_name = 'GERMANY') +or (n1.n_name = 'GERMANY' and n2.n_name = 'FRANCE') +) +and l_shipdate between date '1995-01-01' and date '1996-12-31' +) as shipping +group by +supp_nation, +cust_nation, +l_year +order by +supp_nation, +cust_nation, +l_year; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q08.sql b/yt/yql/tests/sql/suites/pg-tpch/q08.sql new file mode 100644 index 0000000000..bd31d2dde4 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q08.sql @@ -0,0 +1,41 @@ +--!syntax_pg +--TPC-H Q8 + + +select +o_year, +sum(case +when nation = 'BRAZIL' +then volume +else 0::numeric +end) / (sum(volume) + 1e-12::numeric) as mkt_share +from ( +select +extract(year from o_orderdate) as o_year, +l_extendedprice * (1::numeric-l_discount) as volume, +n2.n_name as nation +from +plato."part", +plato."supplier", +plato."lineitem", +plato."orders", +plato."customer", +plato."nation" n1, +plato."nation" n2, +plato."region" +where +p_partkey = l_partkey +and s_suppkey = l_suppkey +and l_orderkey = o_orderkey +and o_custkey = c_custkey +and c_nationkey = n1.n_nationkey +and n1.n_regionkey = r_regionkey +and r_name = 'AMERICA' +and s_nationkey = n2.n_nationkey +and o_orderdate between date '1995-01-01' and date '1996-12-31' +and p_type = 'ECONOMY ANODIZED STEEL' +) as all_nations +group by +o_year +order by +o_year; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q09.sql b/yt/yql/tests/sql/suites/pg-tpch/q09.sql new file mode 100644 index 0000000000..7db204c44f --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q09.sql @@ -0,0 +1,35 @@ +--!syntax_pg +--TPC-H Q9 + + +select +nation, +o_year, +sum(amount) as sum_profit +from ( +select +n_name as nation, +extract(year from o_orderdate) as o_year, +l_extendedprice * (1::numeric - l_discount) - ps_supplycost * l_quantity as amount +from +plato."part", +plato."supplier", +plato."lineitem", +plato."partsupp", +plato."orders", +plato."nation" +where +s_suppkey = l_suppkey +and ps_suppkey = l_suppkey +and ps_partkey = l_partkey +and p_partkey = l_partkey +and o_orderkey = l_orderkey +and s_nationkey = n_nationkey +and p_name like '%green%' +) as profit +group by +nation, +o_year +order by +nation, +o_year desc; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q10.sql b/yt/yql/tests/sql/suites/pg-tpch/q10.sql new file mode 100644 index 0000000000..e331135e3b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q10.sql @@ -0,0 +1,36 @@ +--!syntax_pg +--TPC-H Q10 + + +select +c_custkey, +c_name, +sum(l_extendedprice * (1::numeric - l_discount)) as revenue, +c_acctbal, +n_name, +c_address, +c_phone, +c_comment +from +plato."customer", +plato."orders", +plato."lineitem", +plato."nation" +where +c_custkey = o_custkey +and l_orderkey = o_orderkey +and o_orderdate >= date '1993-10-01' +and o_orderdate < date '1993-10-01' + interval '3' month +and l_returnflag = 'R' +and c_nationkey = n_nationkey +group by +c_custkey, +c_name, +c_acctbal, +c_phone, +n_name, +c_address, +c_comment +order by +revenue desc +limit 20; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q11.sql b/yt/yql/tests/sql/suites/pg-tpch/q11.sql new file mode 100644 index 0000000000..f61ddbb957 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q11.sql @@ -0,0 +1,32 @@ +--!syntax_pg +--TPC-H Q11 +-- ignore runonopt plan diff + + +select +ps_partkey, +sum(ps_supplycost * ps_availqty::numeric) as value +from +plato."partsupp", +plato."supplier", +plato."nation" +where +ps_suppkey = s_suppkey +and s_nationkey = n_nationkey +and n_name = 'GERMANY' +group by +ps_partkey having +sum(ps_supplycost * ps_availqty::numeric) > ( +select +sum(ps_supplycost * ps_availqty::numeric) * 0.0001::numeric +from +plato."partsupp", +plato."supplier", +plato."nation" +where +ps_suppkey = s_suppkey +and s_nationkey = n_nationkey +and n_name = 'GERMANY' +) +order by +value desc; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q12.sql b/yt/yql/tests/sql/suites/pg-tpch/q12.sql new file mode 100644 index 0000000000..bf38bc5e83 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q12.sql @@ -0,0 +1,32 @@ +--!syntax_pg +--TPC-H Q12 + + +select +l_shipmode, +sum(case +when o_orderpriority ='1-URGENT' +or o_orderpriority ='2-HIGH' +then 1 +else 0 +end) as high_line_count, +sum(case +when o_orderpriority <> '1-URGENT' +and o_orderpriority <> '2-HIGH' +then 1 +else 0 +end) as low_line_count +from +plato."orders", +plato."lineitem" +where +o_orderkey = l_orderkey +and l_shipmode in ('MAIL', 'SHIP') +and l_commitdate < l_receiptdate +and l_shipdate < l_commitdate +and l_receiptdate >= date '1994-01-01' +and l_receiptdate < date '1994-01-01' + interval '1' year +group by +l_shipmode +order by +l_shipmode; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q13.sql b/yt/yql/tests/sql/suites/pg-tpch/q13.sql new file mode 100644 index 0000000000..97848f0b9b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q13.sql @@ -0,0 +1,25 @@ +--!syntax_pg +--TPC-H Q13 + + +select +c_count, count(*) as custdist +from ( +select +c_custkey, +count(o_orderkey) +from +plato."customer" +left outer join +plato."orders" +on +c_custkey = o_custkey +and o_comment not like '%special%requests%' +group by +c_custkey +)as c_orders (c_custkey, c_count) +group by +c_count +order by +custdist desc, +c_count desc; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q14.sql b/yt/yql/tests/sql/suites/pg-tpch/q14.sql new file mode 100644 index 0000000000..e515a5d480 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q14.sql @@ -0,0 +1,17 @@ +--!syntax_pg +--TPC-H Q14 + + +select +100.00::numeric * sum(case +when p_type like 'PROMO%' +then l_extendedprice*(1::numeric-l_discount) +else 0::numeric +end) / (sum(l_extendedprice * (1::numeric - l_discount)) + 1e-12::numeric) as promo_revenue +from +plato."lineitem", +plato."part" +where +l_partkey = p_partkey +and l_shipdate >= date '1995-09-01' +and l_shipdate < date '1995-09-01' + interval '1' month; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q15.sql b/yt/yql/tests/sql/suites/pg-tpch/q15.sql new file mode 100644 index 0000000000..729fd88641 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q15.sql @@ -0,0 +1,36 @@ +--!syntax_pg +--ignore runonopt plan diff +--TPC-H Q15 + + +create view revenue_STREAM_ID (supplier_no, total_revenue) as +select +l_suppkey, +sum(l_extendedprice * (1::numeric - l_discount)) +from +plato."lineitem" +where +l_shipdate >= date '1996-01-01' +and l_shipdate < date '1996-01-01' + interval '3' month +group by +l_suppkey; +select +s_suppkey, +s_name, +s_address, +s_phone, +total_revenue +from +plato."supplier", +revenue_STREAM_ID +where +s_suppkey = supplier_no +and total_revenue = ( +select +max(total_revenue) +from +revenue_STREAM_ID +) +order by +s_suppkey; +drop view revenue_STREAM_ID; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q16.sql b/yt/yql/tests/sql/suites/pg-tpch/q16.sql new file mode 100644 index 0000000000..7df4f54439 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q16.sql @@ -0,0 +1,34 @@ +--!syntax_pg +--TPC-H Q16 + + +select +p_brand, +p_type, +p_size, +count(distinct ps_suppkey) as supplier_cnt +from +plato."partsupp", +plato."part" +where +p_partkey = ps_partkey +and p_brand <> 'Brand#45' +and p_type not like 'MEDIUM POLISHED%' +and p_size in (49, 14, 23, 45, 19, 3, 36, 9) +and ps_suppkey not in ( +select +s_suppkey +from +plato."supplier" +where +s_comment like '%Customer%Complaints%' +) +group by +p_brand, +p_type, +p_size +order by +supplier_cnt desc, +p_brand, +p_type, +p_size; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q17.sql b/yt/yql/tests/sql/suites/pg-tpch/q17.sql new file mode 100644 index 0000000000..e893138f09 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q17.sql @@ -0,0 +1,22 @@ +--!syntax_pg +--ignore runonopt plan diff +--TPC-H Q17 + + +select +sum(l_extendedprice) / 7.0::numeric as avg_yearly +from +plato."lineitem", +plato."part" +where +p_partkey = l_partkey +and p_brand = 'Brand#23' +and p_container = 'MED BOX' +and l_quantity < ( +select +0.2::numeric * avg(l_quantity) +from +plato."lineitem" +where +l_partkey = p_partkey +); diff --git a/yt/yql/tests/sql/suites/pg-tpch/q18.sql b/yt/yql/tests/sql/suites/pg-tpch/q18.sql new file mode 100644 index 0000000000..0c32891237 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q18.sql @@ -0,0 +1,38 @@ +--!syntax_pg +--ignore runonopt plan diff +--TPC-H Q18 + + +select +c_name, +c_custkey, +o_orderkey, +o_orderdate, +o_totalprice, +sum(l_quantity) +from +plato."customer", +plato."orders", +plato."lineitem" +where +o_orderkey in ( +select +l_orderkey +from +plato."lineitem" +group by +l_orderkey having +sum(l_quantity) > 300::numeric +) +and c_custkey = o_custkey +and o_orderkey = l_orderkey +group by +c_name, +c_custkey, +o_orderkey, +o_orderdate, +o_totalprice +order by +o_totalprice desc, +o_orderdate +limit 100; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q19.sql b/yt/yql/tests/sql/suites/pg-tpch/q19.sql new file mode 100644 index 0000000000..5eb0799774 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q19.sql @@ -0,0 +1,39 @@ +--!syntax_pg +--TPC-H Q19 + + +select +sum(l_extendedprice * (1::numeric - l_discount) ) as revenue +from +plato."lineitem", +plato."part" +where +( +p_partkey = l_partkey +and p_brand = 'Brand#12' +and p_container in ( 'SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') +and l_quantity >= 1::numeric and l_quantity <= (1 + 10)::numeric +and p_size between 1 and 5 +and l_shipmode in ('AIR', 'AIR REG') +and l_shipinstruct = 'DELIVER IN PERSON' +) +or +( +p_partkey = l_partkey +and p_brand = 'Brand#23' +and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') +and l_quantity >= 10::numeric and l_quantity <= (10 + 10)::numeric +and p_size between 1 and 10 +and l_shipmode in ('AIR', 'AIR REG') +and l_shipinstruct = 'DELIVER IN PERSON' +) +or +( +p_partkey = l_partkey +and p_brand = 'Brand#34' +and p_container in ( 'LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') +and l_quantity >= 20::numeric and l_quantity <= (20 + 10)::numeric +and p_size between 1 and 15 +and l_shipmode in ('AIR', 'AIR REG') +and l_shipinstruct = 'DELIVER IN PERSON' +); diff --git a/yt/yql/tests/sql/suites/pg-tpch/q20.sql b/yt/yql/tests/sql/suites/pg-tpch/q20.sql new file mode 100644 index 0000000000..fdb34b62f1 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q20.sql @@ -0,0 +1,41 @@ +--!syntax_pg +--TPC-H Q20 + + +select +s_name, +s_address +from +plato."supplier", +plato."nation" +where +s_suppkey in ( +select +ps_suppkey +from +plato."partsupp" +where +ps_partkey in ( +select +p_partkey +from +plato."part" +where +p_name like 'forest%' +) +and ps_availqty::numeric > ( +select +0.5::numeric * sum(l_quantity) +from +plato."lineitem" +where +l_partkey = ps_partkey +and l_suppkey = ps_suppkey +and l_shipdate >= '1994-01-01'::date +and l_shipdate < '1994-01-01'::date + interval '1' year +) +) +and s_nationkey = n_nationkey +and n_name = 'CANADA' +order by +s_name; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q21.sql b/yt/yql/tests/sql/suites/pg-tpch/q21.sql new file mode 100644 index 0000000000..acd5bf4bb1 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q21.sql @@ -0,0 +1,44 @@ +--!syntax_pg +--TPC-H Q21 + + +select +s_name, +count(*) as numwait +from +plato."supplier", +plato."lineitem" l1, +plato."orders", +plato."nation" +where +s_suppkey = l1.l_suppkey +and o_orderkey = l1.l_orderkey +and o_orderstatus = 'F' +and l1.l_receiptdate > l1.l_commitdate +and exists ( +select +* +from +plato."lineitem" l2 +where +l2.l_orderkey = l1.l_orderkey +and l2.l_suppkey <> l1.l_suppkey +) +and not exists ( +select +* +from +plato."lineitem" l3 +where +l3.l_orderkey = l1.l_orderkey +and l3.l_suppkey <> l1.l_suppkey +and l3.l_receiptdate > l3.l_commitdate +) +and s_nationkey = n_nationkey +and n_name = 'SAUDI ARABIA' +group by +s_name +order by +numwait desc, +s_name +limit 100; diff --git a/yt/yql/tests/sql/suites/pg-tpch/q22.sql b/yt/yql/tests/sql/suites/pg-tpch/q22.sql new file mode 100644 index 0000000000..80a89442ef --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/q22.sql @@ -0,0 +1,40 @@ +--!syntax_pg +--TPC-H Q22 + + +select +cntrycode, +count(*) as numcust, +sum(c_acctbal) as totacctbal +from ( +select +substring(c_phone from 1 for 2) as cntrycode, +c_acctbal +from +plato."customer" +where +substring(c_phone from 1 for 2) in +('13','31','23','29','30','18','17') +and c_acctbal > ( +select +avg(c_acctbal) +from +plato."customer" +where +c_acctbal > 0.00::numeric +and substring (c_phone from 1 for 2) in +('13','31','23','29','30','18','17') +) +and not exists ( +select +* +from +plato."orders" +where +o_custkey = c_custkey +) +) as custsale +group by +cntrycode +order by +cntrycode; diff --git a/yt/yql/tests/sql/suites/pg-tpch/region.txt.attr b/yt/yql/tests/sql/suites/pg-tpch/region.txt.attr new file mode 100644 index 0000000000..3c92a439ec --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/region.txt.attr @@ -0,0 +1,9 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["r_regionkey";["PgType";"int4";];]; + ["r_name";["PgType";"text";];]; + ["r_comment";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg-tpch/supplier.txt.attr b/yt/yql/tests/sql/suites/pg-tpch/supplier.txt.attr new file mode 100644 index 0000000000..610ac95a35 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg-tpch/supplier.txt.attr @@ -0,0 +1,13 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["s_suppkey";["PgType";"int4";];]; + ["s_name";["PgType";"text";];]; + ["s_address";["PgType";"text";];]; + ["s_nationkey";["PgType";"int4";];]; + ["s_phone";["PgType";"text";];]; + ["s_acctbal";["PgType";"numeric";];]; + ["s_comment";["PgType";"text";];]; + ];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg/aggregate_combine.cfg b/yt/yql/tests/sql/suites/pg/aggregate_combine.cfg new file mode 100644 index 0000000000..e377e2a9ec --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/aggregate_combine.cfg @@ -0,0 +1 @@ +in Input3 input3.txt diff --git a/yt/yql/tests/sql/suites/pg/aggregate_combine.sql b/yt/yql/tests/sql/suites/pg/aggregate_combine.sql new file mode 100644 index 0000000000..2aaccbf7ce --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/aggregate_combine.sql @@ -0,0 +1,4 @@ +--!syntax_pg +select value,avg(key::int8) +from plato."Input3" +group by value diff --git a/yt/yql/tests/sql/suites/pg/aggregate_combine_all.cfg b/yt/yql/tests/sql/suites/pg/aggregate_combine_all.cfg new file mode 100644 index 0000000000..e377e2a9ec --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/aggregate_combine_all.cfg @@ -0,0 +1 @@ +in Input3 input3.txt diff --git a/yt/yql/tests/sql/suites/pg/aggregate_combine_all.sql b/yt/yql/tests/sql/suites/pg/aggregate_combine_all.sql new file mode 100644 index 0000000000..4c2def72ab --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/aggregate_combine_all.sql @@ -0,0 +1,3 @@ +--!syntax_pg +select avg(key::int8) +from plato."Input3" diff --git a/yt/yql/tests/sql/suites/pg/aggregate_minus_zero.cfg b/yt/yql/tests/sql/suites/pg/aggregate_minus_zero.cfg new file mode 100644 index 0000000000..0cdbb201f7 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/aggregate_minus_zero.cfg @@ -0,0 +1 @@ +in InputZ inputZ.txt diff --git a/yt/yql/tests/sql/suites/pg/aggregate_minus_zero.sql b/yt/yql/tests/sql/suites/pg/aggregate_minus_zero.sql new file mode 100644 index 0000000000..b4738cf99c --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/aggregate_minus_zero.sql @@ -0,0 +1,6 @@ +--!syntax_pg +select x, count(*) +from ( +select f::float8 as x from plato."InputZ" +) a +group by x diff --git a/yt/yql/tests/sql/suites/pg/all_data.cfg b/yt/yql/tests/sql/suites/pg/all_data.cfg new file mode 100644 index 0000000000..5b191b093d --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/all_data.cfg @@ -0,0 +1 @@ +in Input all_data.txt diff --git a/yt/yql/tests/sql/suites/pg/all_data.sql b/yt/yql/tests/sql/suites/pg/all_data.sql new file mode 100644 index 0000000000..cab5016734 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/all_data.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select * from plato."Input"; diff --git a/yt/yql/tests/sql/suites/pg/all_data.txt.attr b/yt/yql/tests/sql/suites/pg/all_data.txt.attr new file mode 100644 index 0000000000..f2e081cdfe --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/all_data.txt.attr @@ -0,0 +1,35 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["Bool";["OptionalType";["DataType";"Bool"]]]; + ["Int8";["OptionalType";["DataType";"Int8"]]]; + ["Uint8";["OptionalType";["DataType";"Uint8"]]]; + ["Int16";["OptionalType";["DataType";"Int16"]]]; + ["Uint16";["OptionalType";["DataType";"Uint16"]]]; + ["Int32";["OptionalType";["DataType";"Int32"]]]; + ["Uint32";["OptionalType";["DataType";"Uint32"]]]; + ["Int64";["OptionalType";["DataType";"Int64"]]]; + ["Uint64";["OptionalType";["DataType";"Uint64"]]]; + ["Double";["OptionalType";["DataType";"Double"]]]; + ["Float";["OptionalType";["DataType";"Float"]]]; + ["String";["OptionalType";["DataType";"String"]]]; + ["Utf8";["OptionalType";["DataType";"Utf8"]]]; + ["Yson";["OptionalType";["DataType";"Yson"]]]; + ["Json";["OptionalType";["DataType";"Json"]]]; + ["Uuid";["OptionalType";["DataType";"Uuid"]]]; + ["Date";["OptionalType";["DataType";"Date"]]]; + ["Datetime";["OptionalType";["DataType";"Datetime"]]]; + ["Timestamp";["OptionalType";["DataType";"Timestamp"]]]; + ["Interval";["OptionalType";["DataType";"Interval"]]]; + ["TzDate";["OptionalType";["DataType";"TzDate"]]]; + ["TzDatetime";["OptionalType";["DataType";"TzDatetime"]]]; + ["TzTimestamp";["OptionalType";["DataType";"TzTimestamp"]]]; + ["Decimal";["OptionalType";["DataType";"Decimal";"10";"1"]]]; + ["DyNumber";["OptionalType";["DataType";"DyNumber"]]]; + ["JsonDocument";["OptionalType";["DataType";"JsonDocument"]]]; + ["Date32";["OptionalType";["DataType";"Date32"]]]; + ["Datetime64";["OptionalType";["DataType";"Datetime64"]]]; + ["Timestamp64";["OptionalType";["DataType";"Timestamp64"]]]; + ["Interval64";["OptionalType";["DataType";"Interval64"]]]; + ]]; +}} + diff --git a/yt/yql/tests/sql/suites/pg/default.cfg b/yt/yql/tests/sql/suites/pg/default.cfg new file mode 100644 index 0000000000..1e0c12cac0 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/default.cfg @@ -0,0 +1,3 @@ +in Input input.txt +in Input2 input2.txt +in Input5 input5.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/doubles_search_path.sql b/yt/yql/tests/sql/suites/pg/doubles_search_path.sql new file mode 100644 index 0000000000..f35d89bdca --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/doubles_search_path.sql @@ -0,0 +1,3 @@ +--!syntax_pg +SET search_path = "public", public; +select count(*) from plato."Input"; diff --git a/yt/yql/tests/sql/suites/pg/drop_table.cfg b/yt/yql/tests/sql/suites/pg/drop_table.cfg new file mode 100644 index 0000000000..9b85bd0ae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/drop_table.cfg @@ -0,0 +1 @@ +out Output output.txt diff --git a/yt/yql/tests/sql/suites/pg/drop_table.sql b/yt/yql/tests/sql/suites/pg/drop_table.sql new file mode 100644 index 0000000000..7a3549cd75 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/drop_table.sql @@ -0,0 +1,17 @@ +--!syntax_pg + +insert into plato."Output" +SELECT 1; + +commit; + +drop table plato."Output"; + +commit; + +insert into plato."Output" +SELECT 'foo'; + +commit; + +drop table plato."Output"; diff --git a/yt/yql/tests/sql/suites/pg/in_mixed.cfg b/yt/yql/tests/sql/suites/pg/in_mixed.cfg new file mode 100644 index 0000000000..0ca1ef5bf1 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/in_mixed.cfg @@ -0,0 +1 @@ +in Input input_name.txt diff --git a/yt/yql/tests/sql/suites/pg/in_mixed.sql b/yt/yql/tests/sql/suites/pg/in_mixed.sql new file mode 100644 index 0000000000..b25173295c --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/in_mixed.sql @@ -0,0 +1,21 @@ +--!syntax_pg + +-- simple case +select 1 in ('1', '2'); + +-- splits into IN over numerics and IN over text +select '1' in (0, 0.0, 1, '1'::text, '3'::char(3)); + +-- mixture of types in rhs, expression in lhs +select (c::int + 1) in (1, 2.9, '4') from (values ('0'), ('1')) as t(c); + +-- arrays support +select array[1, 2] in (array[2, 4], array[1, 2]); + +-- NULL in rhs +select 1 in (0, NULL); +select 1 in ('1', NULL); + +-- non-PG types handling +select index in ('2', 4) from plato."Input"; + diff --git a/yt/yql/tests/sql/suites/pg/input.txt.attr b/yt/yql/tests/sql/suites/pg/input.txt.attr new file mode 100644 index 0000000000..29966e9729 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/input.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["key";["PgType";"text";];];["subkey";["PgType";"text";];];["value";["PgType";"text";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg/input2.txt.attr b/yt/yql/tests/sql/suites/pg/input2.txt.attr new file mode 100644 index 0000000000..764e188c0e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/input2.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["key2";["PgType";"text";];];["subkey2";["PgType";"text";];];["value2";["PgType";"text";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg/input3.txt.attr b/yt/yql/tests/sql/suites/pg/input3.txt.attr new file mode 100644 index 0000000000..29966e9729 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/input3.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["key";["PgType";"text";];];["subkey";["PgType";"text";];];["value";["PgType";"text";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg/input4.txt.attr b/yt/yql/tests/sql/suites/pg/input4.txt.attr new file mode 100644 index 0000000000..cbd95f44d0 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/input4.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["b_val";["PgType";"text";];];["i_val";["PgType";"text";];];["d_val";["PgType";"text";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg/input5.txt.attr b/yt/yql/tests/sql/suites/pg/input5.txt.attr new file mode 100644 index 0000000000..29966e9729 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/input5.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["key";["PgType";"text";];];["subkey";["PgType";"text";];];["value";["PgType";"text";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg/inputC.txt.attr b/yt/yql/tests/sql/suites/pg/inputC.txt.attr new file mode 100644 index 0000000000..04395da84e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/inputC.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["id";["PgType";"text";];];["CodeGen_FullTime";["PgType";"text";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg/inputZ.txt.attr b/yt/yql/tests/sql/suites/pg/inputZ.txt.attr new file mode 100644 index 0000000000..7a0736147d --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/inputZ.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["f";["PgType";"text";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg/input_1.txt.attr b/yt/yql/tests/sql/suites/pg/input_1.txt.attr new file mode 100644 index 0000000000..4eb7921afd --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/input_1.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["id";["PgType";"text";];];["name";["PgType";"text";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg/input_2.txt.attr b/yt/yql/tests/sql/suites/pg/input_2.txt.attr new file mode 100644 index 0000000000..e13fdd2707 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/input_2.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["id";["PgType";"text";];];["no";["PgType";"text";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg/input_3.txt.attr b/yt/yql/tests/sql/suites/pg/input_3.txt.attr new file mode 100644 index 0000000000..236c665843 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/input_3.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["id";["PgType";"text";];];["sname";["PgType";"text";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg/input_name.txt.attr b/yt/yql/tests/sql/suites/pg/input_name.txt.attr new file mode 100644 index 0000000000..8ec2d4d44b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/input_name.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["PgType";"name"]]; + ["index";["DataType";"Int32"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/pg/input_pg.txt.attr b/yt/yql/tests/sql/suites/pg/input_pg.txt.attr new file mode 100644 index 0000000000..aa9ffac476 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/input_pg.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["a";["PgType";"int2"]]; + ["b";["PgType";"text"]]; + ["c";["PgType";"_int2"]]; + ]]; +}}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/input_pg_int_and_text.txt.attr b/yt/yql/tests/sql/suites/pg/input_pg_int_and_text.txt.attr new file mode 100644 index 0000000000..f10676fc0e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/input_pg_int_and_text.txt.attr @@ -0,0 +1,6 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["a";["PgType";"int2"]]; + ["b";["PgType";"text"]]; + ]]; +}} diff --git a/yt/yql/tests/sql/suites/pg/insert.cfg b/yt/yql/tests/sql/suites/pg/insert.cfg new file mode 100644 index 0000000000..de341b36d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/insert.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/insert.sql b/yt/yql/tests/sql/suites/pg/insert.sql new file mode 100644 index 0000000000..25ed958fea --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/insert.sql @@ -0,0 +1,3 @@ +--!syntax_pg +insert into plato."Output" +select * from plato."Input"
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/join_using_multiple2.cfg b/yt/yql/tests/sql/suites/pg/join_using_multiple2.cfg new file mode 100644 index 0000000000..8ea83a7905 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/join_using_multiple2.cfg @@ -0,0 +1,3 @@ +in Input input_1.txt +in Input2 input_2.txt +in Input3 input_3.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/join_using_multiple2.sql b/yt/yql/tests/sql/suites/pg/join_using_multiple2.sql new file mode 100644 index 0000000000..56fbd4ce06 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/join_using_multiple2.sql @@ -0,0 +1,9 @@ +--!syntax_pg +select * from ( + (plato."Input" + join + plato."Input2" + using (id)) + join + plato."Input3" + using (id)) order by id
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/join_using_tables1.sql b/yt/yql/tests/sql/suites/pg/join_using_tables1.sql new file mode 100644 index 0000000000..6641655afc --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/join_using_tables1.sql @@ -0,0 +1,6 @@ +--!syntax_pg +select a.* from ( + plato."Input" a + join + plato."Input" + using(key)) order by key
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/join_using_tables2.sql b/yt/yql/tests/sql/suites/pg/join_using_tables2.sql new file mode 100644 index 0000000000..e8a7531146 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/join_using_tables2.sql @@ -0,0 +1,6 @@ +--!syntax_pg +select a.* from ( + plato."Input" + join + plato."Input" a + using(key)) order by key
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/join_using_tables3.sql b/yt/yql/tests/sql/suites/pg/join_using_tables3.sql new file mode 100644 index 0000000000..4d7ccc7630 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/join_using_tables3.sql @@ -0,0 +1,6 @@ +--!syntax_pg +select * from ( + plato."Input" a + full join + plato."Input" + using(key,subkey,value)) order by key
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/join_using_tables4.sql b/yt/yql/tests/sql/suites/pg/join_using_tables4.sql new file mode 100644 index 0000000000..008fcbf819 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/join_using_tables4.sql @@ -0,0 +1,6 @@ +--!syntax_pg +select key from ( + plato."Input" a + full join + plato."Input5" + using(key)) order by key
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/name.cfg b/yt/yql/tests/sql/suites/pg/name.cfg new file mode 100644 index 0000000000..d54cfe5b7e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/name.cfg @@ -0,0 +1,2 @@ +in Input input_name.txt +out Output output.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/name.sql b/yt/yql/tests/sql/suites/pg/name.sql new file mode 100644 index 0000000000..42d2e28596 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/name.sql @@ -0,0 +1,6 @@ +--!syntax_pg +INSERT INTO plato."Output" +SELECT + key, index+1 as index +FROM plato."Input" +ORDER BY index;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/nulls.sql b/yt/yql/tests/sql/suites/pg/nulls.sql new file mode 100644 index 0000000000..3ba4143226 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/nulls.sql @@ -0,0 +1,39 @@ +use plato; + +insert into @foo +select + + 1 as a, + Nothing(pgcstring) as i1, + + Just(Nothing(pgcstring)) as j1, + Nothing(pgcstring?) as j2, + + Just(Just(Nothing(pgcstring))) as k1, + Just(Nothing(pgcstring?)) as k2, + Nothing(pgcstring??) as k3 + +; + +commit; + +insert into @bar +select t.a+1 as a,t.* without a from @foo as t; + +commit; + +select +a, +i1,i1 is null as i1n, +j1,j1 is null as j1n, +j2,j2 is null as j2n, +k1,k1 is null as k1n, +k2,k2 is null as k2n, +k3,k3 is null as k3n +from @bar; + + + + + + diff --git a/yt/yql/tests/sql/suites/pg/nulls_native.sql b/yt/yql/tests/sql/suites/pg/nulls_native.sql new file mode 100644 index 0000000000..3b77aeb9db --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/nulls_native.sql @@ -0,0 +1,40 @@ +use plato; +pragma yt.UseNativeYtTypes; + +insert into @foo +select + + 1 as a, + Nothing(pgcstring) as i1, + + Just(Nothing(pgcstring)) as j1, + Nothing(pgcstring?) as j2, + + Just(Just(Nothing(pgcstring))) as k1, + Just(Nothing(pgcstring?)) as k2, + Nothing(pgcstring??) as k3 + +; + +commit; + +insert into @bar +select t.a+1 as a,t.* without a from @foo as t; + +commit; + +select +a, +i1,i1 is null as i1n, +j1,j1 is null as j1n, +j2,j2 is null as j2n, +k1,k1 is null as k1n, +k2,k2 is null as k2n, +k3,k3 is null as k3n +from @bar; + + + + + + diff --git a/yt/yql/tests/sql/suites/pg/param_text1.json b/yt/yql/tests/sql/suites/pg/param_text1.json new file mode 100644 index 0000000000..d4e83b6c9e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/param_text1.json @@ -0,0 +1 @@ +"param_text1" diff --git a/yt/yql/tests/sql/suites/pg/param_text2.json b/yt/yql/tests/sql/suites/pg/param_text2.json new file mode 100644 index 0000000000..b948e9f727 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/param_text2.json @@ -0,0 +1 @@ +"param_text2" diff --git a/yt/yql/tests/sql/suites/pg/pg_column_case.cfg b/yt/yql/tests/sql/suites/pg/pg_column_case.cfg new file mode 100644 index 0000000000..a175d357b1 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/pg_column_case.cfg @@ -0,0 +1,2 @@ +in InputC inputC.txt + diff --git a/yt/yql/tests/sql/suites/pg/pg_column_case.sql b/yt/yql/tests/sql/suites/pg/pg_column_case.sql new file mode 100644 index 0000000000..a04df0091f --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/pg_column_case.sql @@ -0,0 +1,7 @@ +--!syntax_pg +select id, CodeGen_FullTime + , "CodeGen_FullTime" as Quoted + , CodeGen_FullTime || 'x' + , "CodeGen_FullTime" || 'x' + , (CodeGen_FullTime || 'x') +from plato."InputC" limit 100; diff --git a/yt/yql/tests/sql/suites/pg/pg_types_orderby.cfg b/yt/yql/tests/sql/suites/pg/pg_types_orderby.cfg new file mode 100644 index 0000000000..748ba77b3f --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/pg_types_orderby.cfg @@ -0,0 +1,2 @@ +in Input4 input4.txt +providers dq diff --git a/yt/yql/tests/sql/suites/pg/pg_types_orderby.sql b/yt/yql/tests/sql/suites/pg/pg_types_orderby.sql new file mode 100644 index 0000000000..56fd84dded --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/pg_types_orderby.sql @@ -0,0 +1,32 @@ +--!syntax_pg +select b_val::bool as value +from plato."Input4" +order by value; + +select i_val::int2 as value +from plato."Input4" +order by value; + +select i_val::int4 as value +from plato."Input4" +order by value; + +select i_val::int8 as value +from plato."Input4" +order by value; + +select i_val::float4 as value +from plato."Input4" +order by value; + +select i_val::float8 as value +from plato."Input4" +order by value; + +select d_val::bytea as value +from plato."Input4" +order by value; + +select d_val::date as value +from plato."Input4" +order by value; diff --git a/yt/yql/tests/sql/suites/pg/point.sql b/yt/yql/tests/sql/suites/pg/point.sql new file mode 100644 index 0000000000..c106a3ecca --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/point.sql @@ -0,0 +1,3 @@ +--!syntax_pg +select key,'(1,2)'::point from plato."Input" +order by key; diff --git a/yt/yql/tests/sql/suites/pg/select_alias_partial.sql b/yt/yql/tests/sql/suites/pg/select_alias_partial.sql new file mode 100644 index 0000000000..2db4a8111e --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_alias_partial.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select key,a.value,key2 from plato."Input" as a,plato."Input2"; diff --git a/yt/yql/tests/sql/suites/pg/select_columnref1.sql b/yt/yql/tests/sql/suites/pg/select_columnref1.sql new file mode 100644 index 0000000000..b45b8e3cc3 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_columnref1.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select key, value || '!', key || value as c from plato."Input"; diff --git a/yt/yql/tests/sql/suites/pg/select_columnref2.sql b/yt/yql/tests/sql/suites/pg/select_columnref2.sql new file mode 100644 index 0000000000..dce20796a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_columnref2.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select key, value || '!', key2, value2, key || value2 as c from plato."Input", plato."Input2"; diff --git a/yt/yql/tests/sql/suites/pg/select_common_type_unionall.cfg b/yt/yql/tests/sql/suites/pg/select_common_type_unionall.cfg new file mode 100644 index 0000000000..1a343da34c --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_common_type_unionall.cfg @@ -0,0 +1 @@ +in Input input_pg_int_and_text.txt diff --git a/yt/yql/tests/sql/suites/pg/select_common_type_unionall.sql b/yt/yql/tests/sql/suites/pg/select_common_type_unionall.sql new file mode 100644 index 0000000000..9b9c379e87 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_common_type_unionall.sql @@ -0,0 +1,21 @@ +--!syntax_pg + +-- check unknown-typed string literals converted to int and text types +-- also check that column names from the 1st select are used for result columns +select 1 as step, '1', 'x' as c2 +union all +-- 2nd column is of integer type +-- It's important to have one of 1st columns' value as the 2nd column value in this SELECT. That helps us to catch ExprNode sharing bugs +select 2, 3, null as c3 +union all +-- we need to check casts of aggregation functions' results, so make 2nd column int8 +-- also, check we get PgCasts for columns generated by PgStar +-- also, check aggregation functions in projection subqueries +select 3, * from (select 4::int8 as c1, max(b) as c from plato."Input") as t +union all +-- check PgQualifiedStar +select 4, t.* from plato."Input" as t +union all +-- check if casts are there for aggregation functions used directly and in a projection +select 5, min(a), (select min(b) from plato."Input") from plato."Input" +order by 1, 2, 3 diff --git a/yt/yql/tests/sql/suites/pg/select_from_columns.sql b/yt/yql/tests/sql/suites/pg/select_from_columns.sql new file mode 100644 index 0000000000..26a9849a9f --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_from_columns.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select a from plato."Input" u(a,b,c) diff --git a/yt/yql/tests/sql/suites/pg/select_from_columns_qstar.sql b/yt/yql/tests/sql/suites/pg/select_from_columns_qstar.sql new file mode 100644 index 0000000000..de80f5d467 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_from_columns_qstar.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select u.* from plato."Input" u(a,b,c) diff --git a/yt/yql/tests/sql/suites/pg/select_from_columns_star.sql b/yt/yql/tests/sql/suites/pg/select_from_columns_star.sql new file mode 100644 index 0000000000..1ae501d588 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_from_columns_star.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select * from plato."Input" u(a,b,c) diff --git a/yt/yql/tests/sql/suites/pg/select_limit.sql b/yt/yql/tests/sql/suites/pg/select_limit.sql new file mode 100644 index 0000000000..a8c47d63f5 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_limit.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select * from plato."Input" limit 2 offset 1
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg/select_qstarref1.sql b/yt/yql/tests/sql/suites/pg/select_qstarref1.sql new file mode 100644 index 0000000000..71a0b26b95 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_qstarref1.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select a.*,1,value as foo from plato."Input" as a; diff --git a/yt/yql/tests/sql/suites/pg/select_qstarref2.sql b/yt/yql/tests/sql/suites/pg/select_qstarref2.sql new file mode 100644 index 0000000000..be8829bd85 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_qstarref2.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select a.*,b.* from plato."Input" as a,plato."Input2" as b; diff --git a/yt/yql/tests/sql/suites/pg/select_starref1.sql b/yt/yql/tests/sql/suites/pg/select_starref1.sql new file mode 100644 index 0000000000..cab5016734 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_starref1.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select * from plato."Input"; diff --git a/yt/yql/tests/sql/suites/pg/select_starref2.sql b/yt/yql/tests/sql/suites/pg/select_starref2.sql new file mode 100644 index 0000000000..7d4e1b9ec6 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_starref2.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select * from plato."Input", plato."Input2"; diff --git a/yt/yql/tests/sql/suites/pg/select_subquery.sql b/yt/yql/tests/sql/suites/pg/select_subquery.sql new file mode 100644 index 0000000000..f8f6899b72 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_subquery.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select * from (select value,key from plato."Input") a diff --git a/yt/yql/tests/sql/suites/pg/select_subquery2.sql b/yt/yql/tests/sql/suites/pg/select_subquery2.sql new file mode 100644 index 0000000000..ba11590f6c --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_subquery2.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select * from (select * from plato."Input") a, (select * from plato."Input2") b; diff --git a/yt/yql/tests/sql/suites/pg/select_subquery2_qstar.sql b/yt/yql/tests/sql/suites/pg/select_subquery2_qstar.sql new file mode 100644 index 0000000000..7d5a5e46e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_subquery2_qstar.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select b.*,a.* from (select * from plato."Input") a, (select * from plato."Input2") b; diff --git a/yt/yql/tests/sql/suites/pg/select_table1.sql b/yt/yql/tests/sql/suites/pg/select_table1.sql new file mode 100644 index 0000000000..ef66a44482 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_table1.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select 1 from plato."Input"; diff --git a/yt/yql/tests/sql/suites/pg/select_table2.sql b/yt/yql/tests/sql/suites/pg/select_table2.sql new file mode 100644 index 0000000000..d430b624f5 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_table2.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select 1 from plato."Input", plato."Input2"; diff --git a/yt/yql/tests/sql/suites/pg/select_unionall_self.sql b/yt/yql/tests/sql/suites/pg/select_unionall_self.sql new file mode 100644 index 0000000000..f0f8968796 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_unionall_self.sql @@ -0,0 +1,6 @@ +--!syntax_pg +select * from plato."Input" +union all +select * from plato."Input" +union all +select * from plato."Input"; diff --git a/yt/yql/tests/sql/suites/pg/select_where.sql b/yt/yql/tests/sql/suites/pg/select_where.sql new file mode 100644 index 0000000000..c7db84240d --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_where.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select * from plato."Input" where key = '800' or not (key < '999') diff --git a/yt/yql/tests/sql/suites/pg/select_yql_type.cfg b/yt/yql/tests/sql/suites/pg/select_yql_type.cfg new file mode 100644 index 0000000000..0ca1ef5bf1 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_yql_type.cfg @@ -0,0 +1 @@ +in Input input_name.txt diff --git a/yt/yql/tests/sql/suites/pg/select_yql_type.sql b/yt/yql/tests/sql/suites/pg/select_yql_type.sql new file mode 100644 index 0000000000..18574a079b --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/select_yql_type.sql @@ -0,0 +1,15 @@ +--!syntax_pg +SELECT + key, index, index + 1 +FROM plato."Input" +ORDER BY index; + +SELECT + * +FROM plato."Input" +ORDER BY index; + +SELECT + t.* +FROM plato."Input" as t +ORDER BY index; diff --git a/yt/yql/tests/sql/suites/pg/table_func.sql b/yt/yql/tests/sql/suites/pg/table_func.sql new file mode 100644 index 0000000000..3d481c9cf8 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/table_func.sql @@ -0,0 +1,15 @@ +--!syntax_pg +select count(*) from plato.concat('Input','Input'); +select count(*) from plato.concat_view('Input','raw','Input','raw'); +select count(*) from plato.range(''); +select count(*) from plato.range('','A'); +select count(*) from plato.range('','A','Z'); +select count(*) from plato.range('','A','Z',''); +select count(*) from plato.range('','A','Z','','raw'); +select count(*) from plato.regexp('','Inpu.?'); +select count(*) from plato.regexp('','Inpu.?',''); +select count(*) from plato.regexp('','Inpu.?','','raw'); +select count(*) from plato.like('','Inpu%'); +select count(*) from plato.like('','Inpu%',''); +select count(*) from plato.like('','Inpu%','','raw'); + diff --git a/yt/yql/tests/sql/suites/pg/wide_sort.cfg b/yt/yql/tests/sql/suites/pg/wide_sort.cfg new file mode 100644 index 0000000000..72b51dc777 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/wide_sort.cfg @@ -0,0 +1 @@ +in Input input_pg.txt diff --git a/yt/yql/tests/sql/suites/pg/wide_sort.sql b/yt/yql/tests/sql/suites/pg/wide_sort.sql new file mode 100644 index 0000000000..8d5fcffce2 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/wide_sort.sql @@ -0,0 +1,5 @@ +USE plato; +SELECT + * +FROM Input +ORDER BY a,b desc,c desc diff --git a/yt/yql/tests/sql/suites/pg/wide_top_sort.cfg b/yt/yql/tests/sql/suites/pg/wide_top_sort.cfg new file mode 100644 index 0000000000..72b51dc777 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/wide_top_sort.cfg @@ -0,0 +1 @@ +in Input input_pg.txt diff --git a/yt/yql/tests/sql/suites/pg/wide_top_sort.sql b/yt/yql/tests/sql/suites/pg/wide_top_sort.sql new file mode 100644 index 0000000000..0eabce49df --- /dev/null +++ b/yt/yql/tests/sql/suites/pg/wide_top_sort.sql @@ -0,0 +1,5 @@ +USE plato; +SELECT + * +FROM Input +ORDER BY a,b desc,c desc LIMIT 3 diff --git a/yt/yql/tests/sql/suites/pg_catalog/default.cfg b/yt/yql/tests/sql/suites/pg_catalog/default.cfg new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg_catalog/default.cfg diff --git a/yt/yql/tests/sql/suites/pg_catalog/input_pg.txt.attr b/yt/yql/tests/sql/suites/pg_catalog/input_pg.txt.attr new file mode 100644 index 0000000000..7747e0f9b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg_catalog/input_pg.txt.attr @@ -0,0 +1,5 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[["key";["PgType";"int4";];];["subkey";["PgType";"text";];];["value";["PgType";"text";];];];]; + } +} diff --git a/yt/yql/tests/sql/suites/pg_catalog/lambda.cfg b/yt/yql/tests/sql/suites/pg_catalog/lambda.cfg new file mode 100644 index 0000000000..ef7e4f47a9 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg_catalog/lambda.cfg @@ -0,0 +1,2 @@ +in Input input_pg.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/pg_catalog/lambda.sql b/yt/yql/tests/sql/suites/pg_catalog/lambda.sql new file mode 100644 index 0000000000..f7cf0d582a --- /dev/null +++ b/yt/yql/tests/sql/suites/pg_catalog/lambda.sql @@ -0,0 +1,2 @@ +--!syntax_pg +select key, key::oid in (select oid from pg_catalog.pg_type) as found from plato."Input" order by key diff --git a/yt/yql/tests/sql/suites/pg_duplicated/default.cfg b/yt/yql/tests/sql/suites/pg_duplicated/default.cfg new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg_duplicated/default.cfg diff --git a/yt/yql/tests/sql/suites/pg_duplicated/duplicated_rowspec.cfg b/yt/yql/tests/sql/suites/pg_duplicated/duplicated_rowspec.cfg new file mode 100644 index 0000000000..ab354ca5a0 --- /dev/null +++ b/yt/yql/tests/sql/suites/pg_duplicated/duplicated_rowspec.cfg @@ -0,0 +1 @@ +in input duplicated_rowspec.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pg_duplicated/duplicated_rowspec.sql b/yt/yql/tests/sql/suites/pg_duplicated/duplicated_rowspec.sql new file mode 100644 index 0000000000..4d7bd0853f --- /dev/null +++ b/yt/yql/tests/sql/suites/pg_duplicated/duplicated_rowspec.sql @@ -0,0 +1,3 @@ +--!syntax_pg + +select * from plato.Input; diff --git a/yt/yql/tests/sql/suites/pg_duplicated/duplicated_rowspec.txt.attr b/yt/yql/tests/sql/suites/pg_duplicated/duplicated_rowspec.txt.attr new file mode 100644 index 0000000000..66ac98585a --- /dev/null +++ b/yt/yql/tests/sql/suites/pg_duplicated/duplicated_rowspec.txt.attr @@ -0,0 +1,36 @@ +{ + "_yql_row_spec"={ + "ColumnOrder"=["x";"x"]; + "NativeYtTypeFlags"=0u; + "StrictSchema"= %true; + "TypePatch"= [ + "StructType"; [ + ["x"; ["PgType";"int4"]]; + ["x_generated_2"; ["PgType";"int8"]]; + ] + ] + }; + "schema"=< + "strict"=%true; + "unique_keys"=%false; + >[ + { + "name"= "x"; + "required"= %false; + "type"= "int32"; + "type_v3"= { + "item"= "int32"; + "type_name"= "optional"; + } + }; + { + "name"= "x_generated_2"; + "required"= %false; + "type"= "int64"; + "type_v3"= { + "item"= "int64"; + "type_name"= "optional"; + } + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/pragma/config_exec.cfg b/yt/yql/tests/sql/suites/pragma/config_exec.cfg new file mode 100644 index 0000000000..ad52c79527 --- /dev/null +++ b/yt/yql/tests/sql/suites/pragma/config_exec.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/pragma/config_exec.sql b/yt/yql/tests/sql/suites/pragma/config_exec.sql new file mode 100644 index 0000000000..4e83143e42 --- /dev/null +++ b/yt/yql/tests/sql/suites/pragma/config_exec.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +USE plato; + +INSERT INTO Output +SELECT "1" as key, "1" as subkey, "1" as value; + +PRAGMA File("file", "dummy"); + +INSERT INTO Output +SELECT * from Input where key < "030"; diff --git a/yt/yql/tests/sql/suites/pragma/default.cfg b/yt/yql/tests/sql/suites/pragma/default.cfg new file mode 100644 index 0000000000..8d1c8b69c3 --- /dev/null +++ b/yt/yql/tests/sql/suites/pragma/default.cfg @@ -0,0 +1 @@ + diff --git a/yt/yql/tests/sql/suites/pragma/file.sql b/yt/yql/tests/sql/suites/pragma/file.sql new file mode 100644 index 0000000000..d252d8dbe5 --- /dev/null +++ b/yt/yql/tests/sql/suites/pragma/file.sql @@ -0,0 +1 @@ +pragma file("HW", "sbr:181041334"); diff --git a/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull.cfg b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull.cfg new file mode 100644 index 0000000000..1b5feeea00 --- /dev/null +++ b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull.cfg @@ -0,0 +1,2 @@ +providers yt +in Input input.txt diff --git a/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull.sql b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull.sql new file mode 100644 index 0000000000..8fd8207414 --- /dev/null +++ b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull.sql @@ -0,0 +1,23 @@ +/* kikimr can not */ +USE plato; + +PRAGMA yt.ReleaseTempData="immediate"; +PRAGMA yt.InflightTempTablesLimit="6"; + +DEFINE ACTION $action($param) AS + +$key = CAST($param as String); + +$a = "Input"; +$b = (SELECT key,value FROM $a WHERE key != ($key || ".1") GROUP BY key, value ORDER BY value LIMIT 10); +$c = (SELECT key,value FROM $b WHERE key != ($key || ".2") GROUP BY key, value ORDER BY value LIMIT 10); +$d = (SELECT key,value FROM $c WHERE key != ($key || ".3") GROUP BY key, value ORDER BY value LIMIT 10); +$e = (SELECT key,value FROM $d WHERE key != ($key || ".4") GROUP BY key, value ORDER BY value LIMIT 10); +$f = (SELECT key,value FROM $e WHERE key != ($key || ".5") GROUP BY key, value ORDER BY value LIMIT 10); +$g = (SELECT key,value FROM $f WHERE key != ($key || ".6") GROUP BY key, value ORDER BY value LIMIT 10); + +PROCESS $g; + +END DEFINE; + +EVALUATE FOR $param IN ListFromRange(1, 3) DO $action($param); diff --git a/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_fail.cfg b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_fail.cfg new file mode 100644 index 0000000000..8896f1030d --- /dev/null +++ b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_fail.cfg @@ -0,0 +1,3 @@ +xfail +providers yt +in Input input.txt diff --git a/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_fail.sql b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_fail.sql new file mode 100644 index 0000000000..ae0813c283 --- /dev/null +++ b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_fail.sql @@ -0,0 +1,24 @@ +USE plato; + +PRAGMA yt.ReleaseTempData="finish"; +PRAGMA yt.InflightTempTablesLimit="6"; + +/* custom error:Too many temporary tables registered - limit is 6*/ + +DEFINE ACTION $action($param) AS + +$key = CAST($param as String); + +$a = "Input"; +$b = (SELECT key,value FROM $a WHERE key != ($key || ".1") GROUP BY key, value ORDER BY value LIMIT 10); +$c = (SELECT key,value FROM $b WHERE key != ($key || ".2") GROUP BY key, value ORDER BY value LIMIT 10); +$d = (SELECT key,value FROM $c WHERE key != ($key || ".3") GROUP BY key, value ORDER BY value LIMIT 10); +$e = (SELECT key,value FROM $d WHERE key != ($key || ".4") GROUP BY key, value ORDER BY value LIMIT 10); +$f = (SELECT key,value FROM $e WHERE key != ($key || ".5") GROUP BY key, value ORDER BY value LIMIT 10); +$g = (SELECT key,value FROM $f WHERE key != ($key || ".6") GROUP BY key, value ORDER BY value LIMIT 10); + +PROCESS $g; + +END DEFINE; + +EVALUATE FOR $param IN ListFromRange(1, 3) DO $action($param); diff --git a/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_single_thread.cfg b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_single_thread.cfg new file mode 100644 index 0000000000..1b5feeea00 --- /dev/null +++ b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_single_thread.cfg @@ -0,0 +1,2 @@ +providers yt +in Input input.txt diff --git a/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_single_thread.sql b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_single_thread.sql new file mode 100644 index 0000000000..fcd945613f --- /dev/null +++ b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_single_thread.sql @@ -0,0 +1,23 @@ +/* kikimr can not */ +USE plato; + +PRAGMA yt.ReleaseTempData="immediate"; +PRAGMA yt.InflightTempTablesLimit="3"; + +DEFINE ACTION $action($param) AS + +$key = CAST($param as String); + +$a = "Input"; +$b = (SELECT key,value FROM $a WHERE key != ($key || ".1") GROUP BY key, value ORDER BY value LIMIT 10); +$c = (SELECT key,value FROM $b WHERE key != ($key || ".2") GROUP BY key, value ORDER BY value LIMIT 10); +$d = (SELECT key,value FROM $c WHERE key != ($key || ".3") GROUP BY key, value ORDER BY value LIMIT 10); +$e = (SELECT key,value FROM $d WHERE key != ($key || ".4") GROUP BY key, value ORDER BY value LIMIT 10); +$f = (SELECT key,value FROM $e WHERE key != ($key || ".5") GROUP BY key, value ORDER BY value LIMIT 10); +$g = (SELECT key,value FROM $f WHERE key != ($key || ".6") GROUP BY key, value ORDER BY value LIMIT 10); + +PROCESS $g; + +END DEFINE; + +EVALUATE FOR $param IN ListFromRange(1, 2) DO $action($param); diff --git a/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_single_thread_fail.cfg b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_single_thread_fail.cfg new file mode 100644 index 0000000000..8896f1030d --- /dev/null +++ b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_single_thread_fail.cfg @@ -0,0 +1,3 @@ +xfail +providers yt +in Input input.txt diff --git a/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_single_thread_fail.sql b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_single_thread_fail.sql new file mode 100644 index 0000000000..c8dc1a2ac3 --- /dev/null +++ b/yt/yql/tests/sql/suites/pragma/release_temp_data_chain_pull_single_thread_fail.sql @@ -0,0 +1,25 @@ +/* dq can not */ +USE plato; + +PRAGMA yt.ReleaseTempData="immediate"; +PRAGMA yt.InflightTempTablesLimit="2"; + +/* custom error:Too many temporary tables registered - limit is 2*/ + +DEFINE ACTION $action($param) AS + +$key = CAST($param as String); + +$a = "Input"; +$b = (SELECT key,value FROM $a WHERE key != ($key || ".1") GROUP BY key, value ORDER BY value LIMIT 10); +$c = (SELECT key,value FROM $b WHERE key != ($key || ".2") GROUP BY key, value ORDER BY value LIMIT 10); +$d = (SELECT key,value FROM $c WHERE key != ($key || ".3") GROUP BY key, value ORDER BY value LIMIT 10); +$e = (SELECT key,value FROM $d WHERE key != ($key || ".4") GROUP BY key, value ORDER BY value LIMIT 10); +$f = (SELECT key,value FROM $e WHERE key != ($key || ".5") GROUP BY key, value ORDER BY value LIMIT 10); +$g = (SELECT key,value FROM $f WHERE key != ($key || ".6") GROUP BY key, value ORDER BY value LIMIT 10); + +PROCESS $g; + +END DEFINE; + +EVALUATE FOR $param IN ListFromRange(1, 2) DO $action($param); diff --git a/yt/yql/tests/sql/suites/produce/default.cfg b/yt/yql/tests/sql/suites/produce/default.cfg new file mode 100644 index 0000000000..55e29c24ba --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/default.cfg @@ -0,0 +1,7 @@ +in Input0 input0.txt +in Input1 input1.txt +udf python3_udf +udf streaming_udf +udf simple_udf +udf string_udf +udf structs_udf diff --git a/yt/yql/tests/sql/suites/produce/descending.txt.attr b/yt/yql/tests/sql/suites/produce/descending.txt.attr new file mode 100644 index 0000000000..4f8cb9b625 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/descending.txt.attr @@ -0,0 +1,25 @@ +{ + "schema"=< + "strict" = %true; + "unique_keys" = %false + >[ + { + "name" = "key"; + "type" = "string"; + "required" = %true; + "sort_order" = "descending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "required" = %true; + "sort_order" = "descending"; + }; + { + "name" = "value"; + "type" = "string"; + "required" = %true; + "sort_order" = "descending"; + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/produce/discard_process_with_lambda.sql b/yt/yql/tests/sql/suites/produce/discard_process_with_lambda.sql new file mode 100644 index 0000000000..ea5a9252ff --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/discard_process_with_lambda.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ +$udf = YQL::@@(lambda '(x) +(FlatMap x + (lambda '(y) (AsList y y)) +))@@; + +discard process plato.Input0 using $udf(TableRows()); diff --git a/yt/yql/tests/sql/suites/produce/discard_reduce_lambda.cfg b/yt/yql/tests/sql/suites/produce/discard_reduce_lambda.cfg new file mode 100644 index 0000000000..86c4b62f86 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/discard_reduce_lambda.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/discard_reduce_lambda.sql b/yt/yql/tests/sql/suites/produce/discard_reduce_lambda.sql new file mode 100644 index 0000000000..132b492b4c --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/discard_reduce_lambda.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +USE plato; + +$udf = YQL::@@(lambda '(key stream) (AsStruct + '('key key) '('summ (Collect (Condense stream (Uint32 '0) (lambda '(item state) (Bool 'False)) (lambda '(item state) (Add state item))))) +))@@; + +--INSERT INTO Output +DISCARD REDUCE Input1 ON key USING $udf(cast(value as uint32) ?? 0); diff --git a/yt/yql/tests/sql/suites/produce/fuse_reduces_with_presort.cfg b/yt/yql/tests/sql/suites/produce/fuse_reduces_with_presort.cfg new file mode 100644 index 0000000000..612a5060aa --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/fuse_reduces_with_presort.cfg @@ -0,0 +1 @@ +in Input input_sorted.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/produce/fuse_reduces_with_presort.sql b/yt/yql/tests/sql/suites/produce/fuse_reduces_with_presort.sql new file mode 100644 index 0000000000..b4f5afd8c2 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/fuse_reduces_with_presort.sql @@ -0,0 +1,69 @@ +USE plato; + +$reduce = ($_, $TableRows) -> { + return Yql::Condense1( + $TableRows, + ($item) -> ($item), + ($_, $_) -> (false), + ($item, $_) -> ($item) + ); +}; + +$stream = +select * from Input; + +-- + +$stream1 = Reduce $stream +presort value1 +on key, subkey +using $reduce(TableRow()) +assume order by key, subkey, value1; + +$stream1 = Reduce $stream1 +presort value1 +on key, subkey +using $reduce(TableRow()) +assume order by key, subkey, value1; + +-- + +$stream2 = Reduce $stream +presort value1, value2 +on key, subkey +using $reduce(TableRow()) +assume order by key, subkey, value1, value2; + +$stream2 = Reduce $stream2 +presort value1 +on key, subkey +using $reduce(TableRow()) +assume order by key, subkey, value1; + +-- + +$stream3 = Reduce $stream +presort value1, value2, value3 +on key, subkey +using $reduce(TableRow()) +assume order by key, subkey, value1, value2, value3; + +$stream3 = Reduce $stream3 +on key, subkey +using $reduce(TableRow()) +assume order by key, subkey; + +select + * +from $stream1 +ASSUME ORDER BY `key`, `subkey`; + +select + * +from $stream2 +ASSUME ORDER BY `key`, `subkey`; + +select + * +from $stream3 +ASSUME ORDER BY `key`, `subkey`; diff --git a/yt/yql/tests/sql/suites/produce/input_sorted.txt.attr b/yt/yql/tests/sql/suites/produce/input_sorted.txt.attr new file mode 100644 index 0000000000..f091ca59dd --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/input_sorted.txt.attr @@ -0,0 +1,15 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value1";["DataType";"String"]]; + ["value2";["DataType";"String"]]; + ["value3";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;1;1;1]; + "SortedBy"=["key";"subkey";"value1";"value2";"value3"]; + "SortedByTypes"=[["DataType";"String"];["DataType";"String"];["DataType";"String"];["DataType";"String"];["DataType";"String"]]; + "SortMembers"=["key";"subkey";"value1";"value2";"value3"]; + } +} diff --git a/yt/yql/tests/sql/suites/produce/native_desc_reduce_with_presort.cfg b/yt/yql/tests/sql/suites/produce/native_desc_reduce_with_presort.cfg new file mode 100644 index 0000000000..d5fb684934 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/native_desc_reduce_with_presort.cfg @@ -0,0 +1,4 @@ +in Input1 descending.txt +in Input2 sorted.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/native_desc_reduce_with_presort.sql b/yt/yql/tests/sql/suites/produce/native_desc_reduce_with_presort.sql new file mode 100644 index 0000000000..4970a01bbe --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/native_desc_reduce_with_presort.sql @@ -0,0 +1,23 @@ +/* postgres can not */ +USE plato; +pragma yt.UseNativeDescSort; + +$udf = YQL::@@(lambda '(key stream) (AsStruct + '('key key) '('summ (Collect (Condense stream (Nothing (OptionalType (DataType 'String))) (lambda '(item state) (Bool 'False)) (lambda '(item state) (Coalesce state (Just item)))))) +))@@; + +select * from ( + reduce Input1 presort value desc on key, subkey using $udf(value) --YtReduce +) order by key, summ; + +select * from ( + reduce Input1 presort subkey desc, value desc on key using $udf(value) --YtReduce +) order by key, summ; + +select * from ( + reduce Input1 presort value on key, subkey using $udf(value) --YtMapReduce +) order by key, summ; + +select * from ( + reduce concat(Input1, Input2) presort value desc on key, subkey using $udf(value) --YtMapReduce +) order by key, summ; diff --git a/yt/yql/tests/sql/suites/produce/process_and_filter.sql b/yt/yql/tests/sql/suites/produce/process_and_filter.sql new file mode 100644 index 0000000000..2bd992f4f4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_and_filter.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +PROCESS pLaTo.Input0 USING SimpleUdf::Echo(value) as val WHERE value == "abc"; diff --git a/yt/yql/tests/sql/suites/produce/process_lambda_opt_args.sql b/yt/yql/tests/sql/suites/produce/process_lambda_opt_args.sql new file mode 100644 index 0000000000..612885c95b --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_lambda_opt_args.sql @@ -0,0 +1,14 @@ +USE plato; + +$f = ($x, $optArg?)->{ + return Ensure($x, $optArg is null or len($optArg)>0); +}; + +PROCESS Input0 USING $f(TableRow()); + +PROCESS Input0 USING $f(TableRow(),'foo'); + +PROCESS Input0 USING $f(TableRows()); + +PROCESS Input0 USING $f(TableRows(),'foo'); + diff --git a/yt/yql/tests/sql/suites/produce/process_multi_in.cfg b/yt/yql/tests/sql/suites/produce/process_multi_in.cfg new file mode 100644 index 0000000000..5b95850078 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_multi_in.cfg @@ -0,0 +1,4 @@ +in Input input0.txt +res result.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/process_multi_in.sql b/yt/yql/tests/sql/suites/produce/process_multi_in.sql new file mode 100644 index 0000000000..41d9c9be0e --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_multi_in.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +/* postgres can not */ +/* dq file can not */ +$udfScript = @@ +def MyFunc(stream): + return stream +@@; + +$record = (SELECT TableRow() FROM plato.Input); +$recordType = TypeOf(Unwrap($record)); +$streamType = StreamType(VariantType(TupleType($recordType, $recordType, $recordType))); +$udf = Python3::MyFunc(CallableType(0, $streamType, $streamType), $udfScript); + +$src = (select * from plato.Input where key > "200"); + +$i, $j, $k = (PROCESS plato.Input, (select * from plato.Input where key > "100"), $src USING $udf(TableRows())); + +select * from $i; + +select * from $j; + +select * from $k; diff --git a/yt/yql/tests/sql/suites/produce/process_multi_in_single_out.cfg b/yt/yql/tests/sql/suites/produce/process_multi_in_single_out.cfg new file mode 100644 index 0000000000..98996c5bf7 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_multi_in_single_out.cfg @@ -0,0 +1,3 @@ +in Input0 input0.txt +out Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/process_multi_in_single_out.sql b/yt/yql/tests/sql/suites/produce/process_multi_in_single_out.sql new file mode 100644 index 0000000000..11bc99aa5f --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_multi_in_single_out.sql @@ -0,0 +1,25 @@ +/* syntax version 1 */ +/* postgres can not */ + +$udf = YQL::@@ +(lambda '(stream) + (PartitionByKey stream + (lambda '(item) (Way item)) + (Void) + (Void) + (lambda '(listOfPairs) + (FlatMap listOfPairs (lambda '(pair) + (Map (Nth pair '1) (lambda '(elem) + (AsStruct + '('cnt (Visit elem '0 (lambda '(v) (Member v 'subkey)) '1 (lambda '(v) (Member v 'subkey)))) + '('src (Nth pair '0)) + ) + )) + )) + ) + ) +) +@@; + +INSERT INTO plato.Output WITH TRUNCATE +PROCESS plato.Input0, (select * from plato.Input0 where key > "100") USING $udf(TableRows()); diff --git a/yt/yql/tests/sql/suites/produce/process_multi_in_trivial_lambda.cfg b/yt/yql/tests/sql/suites/produce/process_multi_in_trivial_lambda.cfg new file mode 100644 index 0000000000..4468d3ba29 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_multi_in_trivial_lambda.cfg @@ -0,0 +1,2 @@ +in Input input0.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/produce/process_multi_in_trivial_lambda.sql b/yt/yql/tests/sql/suites/produce/process_multi_in_trivial_lambda.sql new file mode 100644 index 0000000000..51c3de3aaf --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_multi_in_trivial_lambda.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$lambda = ($x) -> { return $x; }; + +$result = PROCESS Input, Input +USING + $lambda(TableRow()) +; + +SELECT * FROM AS_TABLE($result.0); diff --git a/yt/yql/tests/sql/suites/produce/process_multi_out.cfg b/yt/yql/tests/sql/suites/produce/process_multi_out.cfg new file mode 100644 index 0000000000..d5a164924d --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_multi_out.cfg @@ -0,0 +1,4 @@ +in Input input0.txt +res result.txt +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/process_multi_out.sql b/yt/yql/tests/sql/suites/produce/process_multi_out.sql new file mode 100644 index 0000000000..a6162a13a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_multi_out.sql @@ -0,0 +1,24 @@ +/* syntax version 1 */ +/* postgres can not */ +$udfScript = @@ +def MyFunc(list): + return [(int(x.key) % 2, x) for x in list] +@@; + +$record = (SELECT TableRow() FROM plato.Input); +$recordType =TypeOf(Unwrap($record)); + +$udf = Python::MyFunc( + CallableType(0, + StreamType( + VariantType(TupleType($recordType, $recordType)) + ), + StreamType($recordType)), + $udfScript +); + +$i, $j = (PROCESS plato.Input USING $udf(TableRows())); + +select * from $i; + +select * from $j; diff --git a/yt/yql/tests/sql/suites/produce/process_multi_out_bad_count_fail.cfg b/yt/yql/tests/sql/suites/produce/process_multi_out_bad_count_fail.cfg new file mode 100644 index 0000000000..00bbe745ac --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_multi_out_bad_count_fail.cfg @@ -0,0 +1,4 @@ +xfail +in Input input0.txt +res result.txt +udf python2_udf diff --git a/yt/yql/tests/sql/suites/produce/process_multi_out_bad_count_fail.sql b/yt/yql/tests/sql/suites/produce/process_multi_out_bad_count_fail.sql new file mode 100644 index 0000000000..6ad283fafc --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_multi_out_bad_count_fail.sql @@ -0,0 +1,23 @@ +/* custom error:Expected tuple type of size: 3, but got: 2*/ +$udfScript = @@ +def MyFunc(list): + return [(int(x.key) % 2, x) for x in list] +@@; + +$record = (SELECT TableRow() FROM plato.Input); +$recordType =TypeOf(Unwrap($record)); + +$udf = Python::MyFunc( + CallableType(0, + StreamType( + VariantType(TupleType($recordType, $recordType)) + ), + StreamType($recordType)), + $udfScript +); + +$i, $j, $k = (PROCESS plato.Input USING $udf(TableRows())); + +select * from $i; +select * from $j; +select * from $k; diff --git a/yt/yql/tests/sql/suites/produce/process_pure_with_sort.sql b/yt/yql/tests/sql/suites/produce/process_pure_with_sort.sql new file mode 100644 index 0000000000..c03cc257ce --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_pure_with_sort.sql @@ -0,0 +1,32 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$sorted = ($world, $input, $orderByColumns, $asc) -> { + $n = ListLength($orderByColumns); + + $keySelector = LambdaCode(($row) -> { + $items = ListMap($orderByColumns, + ($x) -> { + RETURN FuncCode("Member", $row, AtomCode($x)); + }); + RETURN ListCode($items); + }); + + $sort = EvaluateCode(LambdaCode(($x) -> { + return FuncCode("Sort", + $x, + ListCode(ListReplicate(ReprCode($asc), $n)), + $keySelector) + })); + + RETURN $sort($input($world)); +}; + +DEFINE SUBQUERY $source() AS + PROCESS Input0; +END DEFINE; + +PROCESS $sorted($source, AsList("key","subkey"), true); +PROCESS $sorted($source, AsList("value"), true); +PROCESS $sorted($source, ListCreate(TypeOf("")), true);
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/produce/process_row_and_columns.sql b/yt/yql/tests/sql/suites/produce/process_row_and_columns.sql new file mode 100644 index 0000000000..8ce580f615 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_row_and_columns.sql @@ -0,0 +1,19 @@ +/* syntax version 1 */ +/* postgres can not */ +$udfScript = @@ +def processRow(row, tag, separator): + return {"value":row.Name + separator + row.Value + separator + tag}; +@@; + +$udf = Python::processRow( + Callable<(Struct<Name:String, Tag:String, Value:String>, String, String)->Struct<value:String>>, + $udfScript +); + +$data = ( + SELECT key AS Name, value AS Value, subkey AS Tag FROM plato.Input0 +); + +$separator = "|"; + +PROCESS $data USING $udf(TableRow(), Tag, $separator); diff --git a/yt/yql/tests/sql/suites/produce/process_rows_and_filter.cfg b/yt/yql/tests/sql/suites/produce/process_rows_and_filter.cfg new file mode 100644 index 0000000000..c1a5b06634 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_rows_and_filter.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/process_rows_and_filter.sql b/yt/yql/tests/sql/suites/produce/process_rows_and_filter.sql new file mode 100644 index 0000000000..1af88830eb --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_rows_and_filter.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ +/* postgres can not */ +$udfScript = @@ +def processRows(prefix, rowList, separator): + result = []; + for row in rowList: + result.append({"Data" : prefix + row.Name + separator + row.Value}); + + return result; +@@; + +$udf = Python::processRows( + Callable<(String, Stream<Struct<Name:String, Value:String>>, String)->Stream<Struct<Data:String>>>, + $udfScript +); + +$data = ( + SELECT key AS Name, value AS Value FROM plato.Input1 +); + +$prefix = ">>"; + +PROCESS $data USING $udf($prefix, TableRows(), "=") WHERE Name != "foo"; diff --git a/yt/yql/tests/sql/suites/produce/process_rows_sorted_desc_multi_out.cfg b/yt/yql/tests/sql/suites/produce/process_rows_sorted_desc_multi_out.cfg new file mode 100644 index 0000000000..a1b36ede45 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_rows_sorted_desc_multi_out.cfg @@ -0,0 +1,2 @@ +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/process_rows_sorted_desc_multi_out.sql b/yt/yql/tests/sql/suites/produce/process_rows_sorted_desc_multi_out.sql new file mode 100644 index 0000000000..97fb0222b6 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_rows_sorted_desc_multi_out.sql @@ -0,0 +1,30 @@ +USE plato; + +$values = ListMap( + ListFromRange(0, 30), + ($x) -> (AsStruct($x as x)) +); + +INSERT INTO @table SELECT * FROM AS_TABLE($values) ORDER BY x DESC; + +COMMIT; + +$splitter = ($rows) -> { + $recordType = StreamItemType(TypeOf($rows)); + $varType = VariantType(TupleType($recordType, $recordType, $recordType, $recordType)); + RETURN Yql::OrderedMap($rows, ($row) -> { + RETURN CASE $row.x + WHEN 0 THEN Variant($row, "0", $varType) + WHEN 1 THEN Variant($row, "1", $varType) + WHEN 2 THEN Variant($row, "2", $varType) + ELSE Variant($row, "3", $varType) + END; + }); +}; + +$a, $b, $c, $d = (PROCESS @table USING $splitter(TableRows())); + +SELECT * FROM $a; +SELECT * FROM $b; +SELECT * FROM $c ORDER BY x DESC; +SELECT * FROM $d ORDER BY x DESC;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/produce/process_rows_sorted_multi_out.cfg b/yt/yql/tests/sql/suites/produce/process_rows_sorted_multi_out.cfg new file mode 100644 index 0000000000..a1b36ede45 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_rows_sorted_multi_out.cfg @@ -0,0 +1,2 @@ +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/process_rows_sorted_multi_out.sql b/yt/yql/tests/sql/suites/produce/process_rows_sorted_multi_out.sql new file mode 100644 index 0000000000..17ecc1de2b --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_rows_sorted_multi_out.sql @@ -0,0 +1,30 @@ +USE plato; + +$values = ListMap( + ListFromRange(0, 30), + ($x) -> (AsStruct($x as x)) +); + +INSERT INTO @table SELECT * FROM AS_TABLE($values) ORDER BY x; + +COMMIT; + +$splitter = ($rows) -> { + $recordType = StreamItemType(TypeOf($rows)); + $varType = VariantType(TupleType($recordType, $recordType, $recordType, $recordType)); + RETURN Yql::OrderedMap($rows, ($row) -> { + RETURN CASE $row.x + WHEN 0 THEN Variant($row, "0", $varType) + WHEN 1 THEN Variant($row, "1", $varType) + WHEN 2 THEN Variant($row, "2", $varType) + ELSE Variant($row, "3", $varType) + END; + }); +}; + +$a, $b, $c, $d = (PROCESS @table USING $splitter(TableRows())); + +SELECT * FROM $a; +SELECT * FROM $b; +SELECT * FROM $c ORDER BY x; +SELECT * FROM $d ORDER BY x;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/produce/process_sorted_desc_multi_out.cfg b/yt/yql/tests/sql/suites/produce/process_sorted_desc_multi_out.cfg new file mode 100644 index 0000000000..a1b36ede45 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_sorted_desc_multi_out.cfg @@ -0,0 +1,2 @@ +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/process_sorted_desc_multi_out.sql b/yt/yql/tests/sql/suites/produce/process_sorted_desc_multi_out.sql new file mode 100644 index 0000000000..478eda3d2c --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_sorted_desc_multi_out.sql @@ -0,0 +1,28 @@ +USE plato; + +$values = ListMap( + ListFromRange(0, 30), + ($x) -> (AsStruct($x as x)) +); + +INSERT INTO @table SELECT * FROM AS_TABLE($values) ORDER BY x DESC; + +COMMIT; + +$splitter = ($row) -> { + $recordType = TypeOf($row); + $varType = VariantType(TupleType($recordType, $recordType, $recordType, $recordType)); + RETURN CASE $row.x + WHEN 0 THEN Variant($row, "0", $varType) + WHEN 1 THEN Variant($row, "1", $varType) + WHEN 2 THEN Variant($row, "2", $varType) + ELSE Variant($row, "3", $varType) + END +}; + +$a, $b, $c, $d = (PROCESS @table USING $splitter(TableRow())); + +SELECT * FROM $a; +SELECT * FROM $b; +SELECT * FROM $c ORDER BY x DESC; +SELECT * FROM $d ORDER BY x DESC;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/produce/process_sorted_multi_out.cfg b/yt/yql/tests/sql/suites/produce/process_sorted_multi_out.cfg new file mode 100644 index 0000000000..a1b36ede45 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_sorted_multi_out.cfg @@ -0,0 +1,2 @@ +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/process_sorted_multi_out.sql b/yt/yql/tests/sql/suites/produce/process_sorted_multi_out.sql new file mode 100644 index 0000000000..87a401a806 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_sorted_multi_out.sql @@ -0,0 +1,28 @@ +USE plato; + +$values = ListMap( + ListFromRange(0, 30), + ($x) -> (AsStruct($x as x)) +); + +INSERT INTO @table SELECT * FROM AS_TABLE($values) ORDER BY x; + +COMMIT; + +$splitter = ($row) -> { + $recordType = TypeOf($row); + $varType = VariantType(TupleType($recordType, $recordType, $recordType, $recordType)); + RETURN CASE $row.x + WHEN 0 THEN Variant($row, "0", $varType) + WHEN 1 THEN Variant($row, "1", $varType) + WHEN 2 THEN Variant($row, "2", $varType) + ELSE Variant($row, "3", $varType) + END +}; + +$a, $b, $c, $d = (PROCESS @table USING $splitter(TableRow())); + +SELECT * FROM $a; +SELECT * FROM $b; +SELECT * FROM $c ORDER BY x; +SELECT * FROM $d ORDER BY x;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/produce/process_streaming.sql b/yt/yql/tests/sql/suites/produce/process_streaming.sql new file mode 100644 index 0000000000..1ad7274c79 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_streaming.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +/* postgres can not */ +-- not supported on windows + +$input = ( + SELECT String::JoinFromList(AsList(key, subkey, value), ",") AS Data FROM plato.Input1 +); + +$processed = ( + PROCESS $input USING Streaming::Process(TableRows(), "grep", AsList("[14]")) +); + +$list = ( + SELECT String::SplitToList(Data, ',') AS DataList FROM $processed +); + +SELECT + input.DataList[0] AS key, + input.DataList[1] AS subkey, + input.DataList[2] AS value +FROM $list AS input; + diff --git a/yt/yql/tests/sql/suites/produce/process_streaming_count.sql b/yt/yql/tests/sql/suites/produce/process_streaming_count.sql new file mode 100644 index 0000000000..c8111d385a --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_streaming_count.sql @@ -0,0 +1,19 @@ +/* syntax version 1 */ +/* postgres can not */ +-- not supported on windows + +$input = ( + SELECT String::JoinFromList(AsList(key, subkey, value), ",") AS Data FROM plato.Input1 +); + +$processed = ( + PROCESS $input USING Streaming::Process(TableRows(), "grep", AsList("[14]")) +); + +SELECT + * +FROM $processed; + +SELECT + COUNT(*) +FROM $processed; diff --git a/yt/yql/tests/sql/suites/produce/process_streaming_inline_bash.sql b/yt/yql/tests/sql/suites/produce/process_streaming_inline_bash.sql new file mode 100644 index 0000000000..5737cf807b --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_streaming_inline_bash.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +-- not supported on windows + +$script = @@ +#!/bin/bash +cat - | grep $1 | head -n 3 | grep [234] +@@; + +$input = ( + SELECT String::JoinFromList(AsList(key, subkey, value), ",") AS Data FROM plato.Input1 +); + +PROCESS $input USING Streaming::ProcessInline(TableRows(), $script, AsList("bar")); diff --git a/yt/yql/tests/sql/suites/produce/process_trivial_as_struct.sql b/yt/yql/tests/sql/suites/produce/process_trivial_as_struct.sql new file mode 100644 index 0000000000..a948124640 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_trivial_as_struct.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +process plato.Input0 using SimpleUdf::Echo(value) as val;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/produce/process_with_assume.cfg b/yt/yql/tests/sql/suites/produce/process_with_assume.cfg new file mode 100644 index 0000000000..66737248b8 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_assume.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/produce/process_with_assume.sql b/yt/yql/tests/sql/suites/produce/process_with_assume.sql new file mode 100644 index 0000000000..ddb1353299 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_assume.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +use plato; + +$udf = YQL::@@(lambda '(x) +(FlatMap x + (lambda '(y) (Just (AsStruct '('key (Concat (String '"0") (Member y 'key))) '('subkey (Member y 'subkey)) '('value (Member y 'value))))) +))@@; + +insert into Output with truncate +process plato.Input using $udf(TableRows()) assume order by key; diff --git a/yt/yql/tests/sql/suites/produce/process_with_lambda.sql b/yt/yql/tests/sql/suites/produce/process_with_lambda.sql new file mode 100644 index 0000000000..e0886faaf8 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_lambda.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ +$udf = YQL::@@(lambda '(x) +(FlatMap x + (lambda '(y) (AsList y y)) +))@@; + +process plato.Input0 using $udf(TableRows()); diff --git a/yt/yql/tests/sql/suites/produce/process_with_lambda_outstream.sql b/yt/yql/tests/sql/suites/produce/process_with_lambda_outstream.sql new file mode 100644 index 0000000000..0c6c100764 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_lambda_outstream.sql @@ -0,0 +1,27 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$f1 = ($r)->{ + return $r; +}; + +PROCESS Input0 USING $f1(TableRow()); + +$f2 = ($r)->{ + return Just($r); +}; + +PROCESS Input0 USING $f2(TableRow()); + +$f3 = ($r)->{ + return AsList($r,$r); +}; + +PROCESS Input0 USING $f3(TableRow()); + +$f4 = ($r)->{ + return Yql::Iterator(AsList($r,$r)); +}; + +PROCESS Input0 USING $f4(TableRow()); diff --git a/yt/yql/tests/sql/suites/produce/process_with_python.sql b/yt/yql/tests/sql/suites/produce/process_with_python.sql new file mode 100644 index 0000000000..caeb8c2cb3 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_python.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +/* syntax version 1 */ +$udfScript = @@ +def Dup(s): + return [{"value":s},{"value":s}] +@@; + +$udf = Python::Dup(Callable<(String)->List<Struct<value:String>>>, $udfScript); + +process plato.Input0 using $udf(value); diff --git a/yt/yql/tests/sql/suites/produce/process_with_python_as_struct.sql b/yt/yql/tests/sql/suites/produce/process_with_python_as_struct.sql new file mode 100644 index 0000000000..237c2abef8 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_python_as_struct.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +/* syntax version 1 */ +$udfScript = @@ +def Dup(s): + return [s, s]; +@@; + +$udf = Python::Dup(Callable<(String)->List<String>>, $udfScript); + +process plato.Input0 using $udf(value) as val; diff --git a/yt/yql/tests/sql/suites/produce/process_with_python_stream-empty.cfg b/yt/yql/tests/sql/suites/produce/process_with_python_stream-empty.cfg new file mode 100644 index 0000000000..837223c684 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_python_stream-empty.cfg @@ -0,0 +1,2 @@ +in Input0 empty.txt +udf python3_udf diff --git a/yt/yql/tests/sql/suites/produce/process_with_python_stream.cfg b/yt/yql/tests/sql/suites/produce/process_with_python_stream.cfg new file mode 100644 index 0000000000..e34e70ff55 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_python_stream.cfg @@ -0,0 +1,3 @@ +in Input0 input0.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/process_with_python_stream.sql b/yt/yql/tests/sql/suites/produce/process_with_python_stream.sql new file mode 100644 index 0000000000..33a0b8f8f7 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_python_stream.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ +/* kikimr can not */ +USE plato; + +$udfScript = @@ +def f(input,x): + for i in input: + yield { + 'key': i.key, + 'subkey': i.subkey, + 'value': i.value, + 'pass': x + } +@@; + +$udf_stream = Python3::f( +Callable< + (Stream<Struct<key:String,subkey:String,value:String>>,Int32) + -> + Stream<Struct<key:String,subkey:String,value:String,pass:Int32>> +>, $udfScript); + +PROCESS Input0 using $udf_stream(TableRows(), 2); diff --git a/yt/yql/tests/sql/suites/produce/process_with_udf.sql b/yt/yql/tests/sql/suites/produce/process_with_udf.sql new file mode 100644 index 0000000000..f8fb326983 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_udf.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +process plato.Input0 using Person::New(key, subkey, coalesce(cast(value as Uint32), 0));
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/produce/process_with_udf_rows.sql b/yt/yql/tests/sql/suites/produce/process_with_udf_rows.sql new file mode 100644 index 0000000000..3df9f4df1b --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_udf_rows.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +$udf = Python::process( +Callable< + ()->Stream<Struct<result:Int64>> +>, @@ +def process(): + for row in range(10): + result = row + yield locals() +@@); + +$users = ( + SELECT `key` AS age, `value` AS name FROM plato.Input0 +); + +PROCESS $users +USING $udf(); diff --git a/yt/yql/tests/sql/suites/produce/process_with_udf_validate.sql b/yt/yql/tests/sql/suites/produce/process_with_udf_validate.sql new file mode 100644 index 0000000000..e5082fdd77 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_udf_validate.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +$processed = ( + process plato.Input0 using Person::New(key, subkey, coalesce(cast(value as Uint32), 0)) +); + +PRAGMA config.flags("ValidateUdf", "Lazy"); +SELECT * FROM $processed; diff --git a/yt/yql/tests/sql/suites/produce/process_with_udf_validate_ignore_broken.sql b/yt/yql/tests/sql/suites/produce/process_with_udf_validate_ignore_broken.sql new file mode 100644 index 0000000000..de471f14f3 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/process_with_udf_validate_ignore_broken.sql @@ -0,0 +1,8 @@ +/* postgres can not */ + +$processed = ( + process plato.Input0 using Person::New(key, subkey, Length(SimpleUdf::ReturnBrokenInt())) +); + +PRAGMA config.flags("ValidateUdf", "None"); +SELECT * FROM $processed; diff --git a/yt/yql/tests/sql/suites/produce/reduce_all.sql b/yt/yql/tests/sql/suites/produce/reduce_all.sql new file mode 100644 index 0000000000..89362a4454 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_all.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ +/* dqfile can not */ +USE plato; + +$udfScript = @@ +import functools +def Len(stream): + sums = [functools.reduce(lambda x,y: x + int(y.value), pair[1], 0) for pair in stream] + return {"sumByAllVal":functools.reduce(lambda x,y: x + y, sums, 0)} +@@; + +$udf = Python::Len(Callable<(Stream<Tuple<String,Stream<Struct<key:String,subkey:String,value:String>>>>)->Struct<sumByAllVal:Uint32>>, $udfScript); + +--INSERT INTO Output +REDUCE Input1 ON key USING ALL $udf(TableRow()); diff --git a/yt/yql/tests/sql/suites/produce/reduce_all_expr.sql b/yt/yql/tests/sql/suites/produce/reduce_all_expr.sql new file mode 100644 index 0000000000..d4e194802f --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_all_expr.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +/* syntax version 1 */ +/* dqfile can not */ +USE plato; + +$udfScript = @@ +import functools +def Len(stream): + sums = [functools.reduce(lambda x,y: x + y, pair[1], 0) for pair in stream] + return {"sumByAllVal":functools.reduce(lambda x,y: x + y, sums, 0)} +@@; + +$udf = Python::Len(Callable<(Stream<Tuple<String,Stream<Uint32>>>)->Struct<sumByAllVal:Uint32>>, $udfScript); + +--INSERT INTO Output +REDUCE Input1 ON key USING ALL $udf(cast(value as uint32) ?? 0); diff --git a/yt/yql/tests/sql/suites/produce/reduce_all_list.sql b/yt/yql/tests/sql/suites/produce/reduce_all_list.sql new file mode 100644 index 0000000000..ec08c7922d --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_all_list.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ +/* dq can not */ +/* dqfile can not */ +USE plato; + +$udfScript = @@ +import functools + +def Len(stream): + sums = [functools.reduce(lambda x,y: x + int(y.value), pair[1], 0) for pair in stream] + return [{"sumByAllVal":functools.reduce(lambda x,y: x + y, sums, 0)}] +@@; + +$udf = Python::Len(Callable<(Stream<Tuple<String,Stream<Struct<key:String,subkey:String,value:String>>>>)->List<Struct<sumByAllVal:Uint32>>>, $udfScript); + +--INSERT INTO Output +REDUCE Input1 ON key USING ALL $udf(TableRow()); diff --git a/yt/yql/tests/sql/suites/produce/reduce_all_list_stream.cfg b/yt/yql/tests/sql/suites/produce/reduce_all_list_stream.cfg new file mode 100644 index 0000000000..13bb8734c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_all_list_stream.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_all_list_stream.sql b/yt/yql/tests/sql/suites/produce/reduce_all_list_stream.sql new file mode 100644 index 0000000000..5e154426c0 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_all_list_stream.sql @@ -0,0 +1,25 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$udfScript = @@ +import functools +from yql import TYieldIteration + +def Sum(stream): + def Gen(stream): + sums = [] + for pair in stream: + if isinstance(pair, TYieldIteration): + yield pair + else: + sums.append(functools.reduce(lambda x,y: x + int(y.value), pair[1], 0)) + + yield {"sumByAllVal":functools.reduce(lambda x,y: x + y, sums, 0)} + return Gen(stream) +@@; + +$udf = Python3::Sum(Callable<(Stream<Tuple<String,Stream<Struct<key:String,subkey:String,value:String>>>>)->Stream<Struct<sumByAllVal:Uint32>>>, $udfScript); + +--INSERT INTO Output +REDUCE Input1 ON key USING ALL $udf(TableRow()); diff --git a/yt/yql/tests/sql/suites/produce/reduce_all_multi_in.sql b/yt/yql/tests/sql/suites/produce/reduce_all_multi_in.sql new file mode 100644 index 0000000000..6f6750898e --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_all_multi_in.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ +/* dqfile can not */ +USE plato; + +$udfScript = @@ +import functools +def Len(stream): + sums = [functools.reduce(lambda x,y: x + int(y[1].value), pair[1], 0) for pair in stream] + return {"sumByAllVal":functools.reduce(lambda x,y: x + y, sums, 0)} +@@; + +$udf = Python::Len(Callable<(Stream<Tuple<String,Stream<Variant<Struct<key:String,subkey:String,value:String>,Struct<key:String,subkey:String,value:String>>>>>)->Struct<sumByAllVal:Uint32>>, $udfScript); + +REDUCE Input1, Input1 ON key USING ALL $udf(TableRow()); diff --git a/yt/yql/tests/sql/suites/produce/reduce_all_opt.sql b/yt/yql/tests/sql/suites/produce/reduce_all_opt.sql new file mode 100644 index 0000000000..467be50696 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_all_opt.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ +/* dqfile can not */ +USE plato; + +$udfScript = @@ +import functools +def Len(stream): + sums = [functools.reduce(lambda x,y: x + int(y.value), pair[1], 0) for pair in stream] + return {"sumByAllVal":functools.reduce(lambda x,y: x + y, sums, 0)} +@@; + +$udf = Python::Len(Callable<(Stream<Tuple<String,Stream<Struct<key:String,subkey:String,value:String>>>>)->Optional<Struct<sumByAllVal:Uint32>>>, $udfScript); + +--INSERT INTO Output +REDUCE Input1 ON key USING ALL $udf(TableRow()); diff --git a/yt/yql/tests/sql/suites/produce/reduce_all_with_python_input_stream-dq_fail.cfg b/yt/yql/tests/sql/suites/produce/reduce_all_with_python_input_stream-dq_fail.cfg new file mode 100644 index 0000000000..c426164726 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_all_with_python_input_stream-dq_fail.cfg @@ -0,0 +1,4 @@ +xfail +in Input1 input1.txt +udf python3_udf +providers dq diff --git a/yt/yql/tests/sql/suites/produce/reduce_all_with_python_input_stream.cfg b/yt/yql/tests/sql/suites/produce/reduce_all_with_python_input_stream.cfg new file mode 100644 index 0000000000..5ff8b5fcd6 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_all_with_python_input_stream.cfg @@ -0,0 +1,5 @@ +xfail +in Input1 input1.txt +udf python3_udf +providers dq + diff --git a/yt/yql/tests/sql/suites/produce/reduce_all_with_python_input_stream.sql b/yt/yql/tests/sql/suites/produce/reduce_all_with_python_input_stream.sql new file mode 100644 index 0000000000..5aac572264 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_all_with_python_input_stream.sql @@ -0,0 +1,14 @@ +/* custom error: Cannot execute ScriptUdf over stream/flow inside DQ stage */ +USE plato; + +$udfScript = @@ +import functools +def Len(stream): + sums = [functools.reduce(lambda x,y: x + y, pair[1], 0) for pair in stream] + return {"sumByAllVal":functools.reduce(lambda x,y: x + y, sums, 0)} +@@; + +$udf = Python3::Len(Callable<(Stream<Tuple<String,Stream<Uint32>>>)->Struct<sumByAllVal:Uint32>>, $udfScript); + +--INSERT INTO Output +REDUCE Input1 ON key USING ALL $udf(cast(value as uint32) ?? 0); diff --git a/yt/yql/tests/sql/suites/produce/reduce_by_struct.sql b/yt/yql/tests/sql/suites/produce/reduce_by_struct.sql new file mode 100644 index 0000000000..a36223f7a4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_by_struct.sql @@ -0,0 +1,16 @@ +USE plato; + +INSERT INTO @tmp +SELECT * FROM AS_TABLE([ + <|key: <|field1: 1, field2: 1|>, value: 1|>, + <|key: <|field1: 1, field2: 1|>, value: 2|>, + ]); + +COMMIT; + +$reducer = ($_key, $stream) -> ($stream); + +REDUCE @tmp +ON key +USING $reducer(TableRow()); + diff --git a/yt/yql/tests/sql/suites/produce/reduce_lambda.cfg b/yt/yql/tests/sql/suites/produce/reduce_lambda.cfg new file mode 100644 index 0000000000..9afdccdc47 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_lambda.cfg @@ -0,0 +1,2 @@ +in Input1 input1.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_lambda.sql b/yt/yql/tests/sql/suites/produce/reduce_lambda.sql new file mode 100644 index 0000000000..74d1372d73 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_lambda.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +USE plato; + +$udf = YQL::@@(lambda '(key stream) (AsStruct + '('key key) '('summ (Collect (Condense stream (Uint32 '0) (lambda '(item state) (Bool 'False)) (lambda '(item state) (Add state item))))) +))@@; + +--INSERT INTO Output +$res = (REDUCE Input1 ON key USING $udf(cast(value as uint32) ?? 0)); + +select * from $res order by key; diff --git a/yt/yql/tests/sql/suites/produce/reduce_lambda_list_mem.sql b/yt/yql/tests/sql/suites/produce/reduce_lambda_list_mem.sql new file mode 100644 index 0000000000..4593e67ba3 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_lambda_list_mem.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +USE plato; + +$udf = YQL::@@(lambda '(key stream) (AsStruct + '('key key) '('summ (Collect (Condense stream (Uint32 '0) (lambda '(item state) (Bool 'False)) (lambda '(item state) (Add state item))))) +))@@; + +--INSERT INTO Output +$res = (REDUCE (select AsList("foo") as key, "123" as value) ON key USING $udf(cast(value as uint32) ?? 0)); + +select * from $res order by key; diff --git a/yt/yql/tests/sql/suites/produce/reduce_lambda_list_table.cfg b/yt/yql/tests/sql/suites/produce/reduce_lambda_list_table.cfg new file mode 100644 index 0000000000..13bb8734c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_lambda_list_table.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_lambda_list_table.sql b/yt/yql/tests/sql/suites/produce/reduce_lambda_list_table.sql new file mode 100644 index 0000000000..39aa5ec294 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_lambda_list_table.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +USE plato; + +$udf = YQL::@@(lambda '(key stream) (AsStruct + '('key key) '('summ (Collect (Condense stream (Uint32 '0) (lambda '(item state) (Bool 'False)) (lambda '(item state) (Add state item))))) +))@@; + +--INSERT INTO Output +$res = (REDUCE (select AsList(key) as key, value from Input1) ON key USING $udf(cast(value as uint32) ?? 0)); + +select * from $res order by key; diff --git a/yt/yql/tests/sql/suites/produce/reduce_lambda_presort_twin.cfg b/yt/yql/tests/sql/suites/produce/reduce_lambda_presort_twin.cfg new file mode 100644 index 0000000000..9afdccdc47 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_lambda_presort_twin.cfg @@ -0,0 +1,2 @@ +in Input1 input1.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_lambda_presort_twin.sql b/yt/yql/tests/sql/suites/produce/reduce_lambda_presort_twin.sql new file mode 100644 index 0000000000..ca37608c70 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_lambda_presort_twin.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +USE plato; + +$udf = YQL::@@(lambda '(key stream) (AsStruct + '('key key) '('superstring (Collect (Condense stream (String '"") (lambda '(item state) (Bool 'False)) (lambda '(item state) + (Concat state (Concat (Member item 'char) (Member item 'num))) + )))) +))@@; + +--INSERT INTO Output +$res = (REDUCE Input1 PRESORT subkey, value desc ON key USING $udf(AsStruct(subkey as char, value as num))); + +select * from $res order by key; diff --git a/yt/yql/tests/sql/suites/produce/reduce_lambda_presort_twin_list.cfg b/yt/yql/tests/sql/suites/produce/reduce_lambda_presort_twin_list.cfg new file mode 100644 index 0000000000..9afdccdc47 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_lambda_presort_twin_list.cfg @@ -0,0 +1,2 @@ +in Input1 input1.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_lambda_presort_twin_list.sql b/yt/yql/tests/sql/suites/produce/reduce_lambda_presort_twin_list.sql new file mode 100644 index 0000000000..65225b9ffa --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_lambda_presort_twin_list.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +USE plato; + +$udf = YQL::@@(lambda '(key stream) (AsStruct + '('key key) '('superstring (Collect (Condense stream (String '"") (lambda '(item state) (Bool 'False)) (lambda '(item state) + (Concat state (Concat (Member item 'char) (Member item 'num))) + )))) +))@@; + +--INSERT INTO Output +$res = (REDUCE Input1 PRESORT AsList(subkey), value desc ON key USING $udf(AsStruct(subkey as char, value as num))); + +select * from $res order by key; diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in-empty.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in-empty.cfg new file mode 100644 index 0000000000..ce36bb4337 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in-empty.cfg @@ -0,0 +1,2 @@ +in Input empty.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in-sorted.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in-sorted.cfg new file mode 100644 index 0000000000..3f5bebb5a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in-sorted.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in.cfg new file mode 100644 index 0000000000..4468d3ba29 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in.cfg @@ -0,0 +1,2 @@ +in Input input0.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in.sql b/yt/yql/tests/sql/suites/produce/reduce_multi_in.sql new file mode 100644 index 0000000000..c819fb4a58 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$udf = YQL::@@ +(lambda '(key stream) + (PartitionByKey stream + (lambda '(item) (Way item)) + (Void) + (Void) + (lambda '(listOfPairs) + (FlatMap listOfPairs + (lambda '(pair) (Just (AsStruct '('key key) '('src (Nth pair '0)) '('cnt (Length (ForwardList (Nth pair '1))))))) + ) + ) + ) +) +@@; + +$r = (REDUCE Input, Input ON key USING $udf(TableRow())); + +SELECT key, src, cnt FROM $r ORDER BY key, src, cnt; diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype.cfg new file mode 100644 index 0000000000..4468d3ba29 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype.cfg @@ -0,0 +1,2 @@ +in Input input0.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype.sql b/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype.sql new file mode 100644 index 0000000000..b867fc4fdc --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$udf = YQL::@@ +(lambda '(key stream) + (PartitionByKey stream + (lambda '(item) (Way item)) + (Void) + (Void) + (lambda '(listOfPairs) + (FlatMap listOfPairs + (lambda '(pair) (Just (AsStruct '('key key) '('src (Nth pair '0)) '('cnt (Length (ForwardList (Nth pair '1))))))) + ) + ) + ) +) +@@; + +$r = (REDUCE Input, `Input{key,subkey}` ON key USING $udf(TableRow())); + +SELECT key, src, cnt FROM $r ORDER BY key, src, cnt; diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype_assume.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype_assume.cfg new file mode 100644 index 0000000000..470ecf9066 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype_assume.cfg @@ -0,0 +1,3 @@ +in Input sorted.txt +out Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype_assume.sql b/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype_assume.sql new file mode 100644 index 0000000000..159e80f995 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype_assume.sql @@ -0,0 +1,46 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$user_process = ($key, $t1, $t2, $t3) -> { + return AsStruct( + $key AS key, + COALESCE(cast($t1.subkey as Int32), 0) + COALESCE(cast($t2.subkey as Int32), 0) + COALESCE(cast($t3.subkey as Int32), 0) AS subkey + ); +}; + +$reducer = ($key, $stream) -> { + $stream = YQL::OrderedMap($stream, ($item) -> { + return AsStruct( + YQL::Guess($item, AsAtom("0")).t1 AS t1, + YQL::Guess($item, AsAtom("1")).t2 AS t2, + YQL::Guess($item, AsAtom("2")).t3 AS t3, + ); + }); + $recs = YQL::Collect(YQL::Condense1( + $stream, + ($item) -> {return AsStruct( + $item.t1 AS t1, + $item.t2 AS t2, + $item.t3 AS t3, + );}, + ($_item, $_state) -> {return false;}, + ($item, $state) -> {return AsStruct( + COALESCE($state.t1, $item.t1) AS t1, + COALESCE($state.t2, $item.t2) AS t2, + COALESCE($state.t3, $item.t3) AS t3, + );}, + )); + $rec = Ensure($recs, ListLength($recs) == 1ul)[0]; + return $user_process($key, $rec.t1, $rec.t2, $rec.t3); +}; + +INSERT INTO Output WITH TRUNCATE +REDUCE + (SELECT key, TableRow() AS t1 FROM Input), + (SELECT key, TableRow() AS t2 FROM Input), + (SELECT key, TableRow() AS t3 FROM Input) +ON key +USING $reducer(TableRow()) +ASSUME ORDER BY key; + diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype_assume_keytuple.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype_assume_keytuple.cfg new file mode 100644 index 0000000000..470ecf9066 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype_assume_keytuple.cfg @@ -0,0 +1,3 @@ +in Input sorted.txt +out Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype_assume_keytuple.sql b/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype_assume_keytuple.sql new file mode 100644 index 0000000000..e1f71c3953 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_difftype_assume_keytuple.sql @@ -0,0 +1,45 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$user_process = ($key, $t1, $t2, $t3) -> { + return AsStruct( + $key.0 AS key, + COALESCE(cast($t1.subkey as Int32), 0) + COALESCE(cast($t2.subkey as Int32), 0) + COALESCE(cast($t3.subkey as Int32), 0) AS subkey + ); +}; + +$reducer = ($key, $stream) -> { + $stream = YQL::OrderedMap($stream, ($item) -> { + return AsStruct( + YQL::Guess($item, AsAtom("0")).t1 AS t1, + YQL::Guess($item, AsAtom("1")).t2 AS t2, + YQL::Guess($item, AsAtom("2")).t3 AS t3, + ); + }); + $recs = YQL::Collect(YQL::Condense1( + $stream, + ($item) -> {return AsStruct( + $item.t1 AS t1, + $item.t2 AS t2, + $item.t3 AS t3, + );}, + ($_item, $_state) -> {return false;}, + ($item, $state) -> {return AsStruct( + COALESCE($state.t1, $item.t1) AS t1, + COALESCE($state.t2, $item.t2) AS t2, + COALESCE($state.t3, $item.t3) AS t3, + );}, + )); + $rec = Ensure($recs, ListLength($recs) == 1ul)[0]; + return $user_process($key, $rec.t1, $rec.t2, $rec.t3); +}; + +INSERT INTO Output WITH TRUNCATE +REDUCE + (SELECT key, subkey, TableRow() AS t1 FROM Input), + (SELECT key, subkey, TableRow() AS t2 FROM Input), + (SELECT key, subkey, TableRow() AS t3 FROM Input) +ON key, subkey +USING $reducer(TableRow()) +ASSUME ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_keytuple.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in_keytuple.cfg new file mode 100644 index 0000000000..4468d3ba29 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_keytuple.cfg @@ -0,0 +1,2 @@ +in Input input0.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_keytuple.sql b/yt/yql/tests/sql/suites/produce/reduce_multi_in_keytuple.sql new file mode 100644 index 0000000000..fe9bd349ae --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_keytuple.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; +$udf = YQL::@@ +(lambda '(key stream) + (PartitionByKey stream + (lambda '(item) (Way item)) + (Void) + (Void) + (lambda '(listOfPairs) + (FlatMap listOfPairs + (lambda '(pair) (Just (AsStruct '('key (Nth key '0)) '('src (Nth pair '0)) '('cnt (Length (ForwardList (Nth pair '1))))))) + ) + ) + ) +) +@@; + +$r = (REDUCE Input, Input ON key,subkey USING $udf(TableRow())); + +SELECT key, src, cnt FROM $r ORDER BY key, src, cnt; diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_keytuple_difftype.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in_keytuple_difftype.cfg new file mode 100644 index 0000000000..4468d3ba29 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_keytuple_difftype.cfg @@ -0,0 +1,2 @@ +in Input input0.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_keytuple_difftype.sql b/yt/yql/tests/sql/suites/produce/reduce_multi_in_keytuple_difftype.sql new file mode 100644 index 0000000000..ea6a236d22 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_keytuple_difftype.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$udf = YQL::@@ +(lambda '(key stream) + (PartitionByKey stream + (lambda '(item) (Way item)) + (Void) + (Void) + (lambda '(listOfPairs) + (FlatMap listOfPairs + (lambda '(pair) (Just (AsStruct '('key (Nth key '0)) '('src (Nth pair '0)) '('cnt (Length (ForwardList (Nth pair '1))))))) + ) + ) + ) +) +@@; + +$r = (REDUCE Input, `Input{key,subkey}` ON key,subkey USING $udf(TableRow())); + +SELECT key, src, cnt FROM $r ORDER BY key, src, cnt; diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_presort.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in_presort.cfg new file mode 100644 index 0000000000..4468d3ba29 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_presort.cfg @@ -0,0 +1,2 @@ +in Input input0.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_presort.sql b/yt/yql/tests/sql/suites/produce/reduce_multi_in_presort.sql new file mode 100644 index 0000000000..3712268059 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_presort.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$udf = YQL::@@ +(lambda '(key stream) + (PartitionByKey stream + (lambda '(item) (Way item)) + (Void) + (Void) + (lambda '(listOfPairs) + (FlatMap listOfPairs + (lambda '(pair) (Just (AsStruct '('key key) '('src (Nth pair '0)) '('cnt (Length (ForwardList (Nth pair '1))))))) + ) + ) + ) +) +@@; + +$r = (REDUCE Input, Input PRESORT value, key || subkey ON key USING $udf(TableRow())); + +SELECT key, src, cnt FROM $r ORDER BY key, src, cnt; diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_ref.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in_ref.cfg new file mode 100644 index 0000000000..4468d3ba29 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_ref.cfg @@ -0,0 +1,2 @@ +in Input input0.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_ref.sql b/yt/yql/tests/sql/suites/produce/reduce_multi_in_ref.sql new file mode 100644 index 0000000000..9587d1a453 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_ref.sql @@ -0,0 +1,24 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$udf = YQL::@@ +(lambda '(key stream) + (PartitionByKey stream + (lambda '(item) (Way item)) + (Void) + (Void) + (lambda '(listOfPairs) + (FlatMap listOfPairs + (lambda '(pair) (Just (AsStruct '('key key) '('src (Nth pair '0)) '('cnt (Length (ForwardList (Nth pair '1))))))) + ) + ) + ) +) +@@; + +$src = (select * from plato.Input where key > "200"); + +$r = (REDUCE Input, (select * from Input where key > "100"), $src ON key USING $udf(TableRow())); + +SELECT key, src, cnt FROM $r ORDER BY key, src, cnt; diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_sampling-sorted.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in_sampling-sorted.cfg new file mode 100644 index 0000000000..2334ceb124 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_sampling-sorted.cfg @@ -0,0 +1,2 @@ +in Input sorted1.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_sampling.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in_sampling.cfg new file mode 100644 index 0000000000..fb4fb16059 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_sampling.cfg @@ -0,0 +1,2 @@ +in Input input2.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_sampling.sql b/yt/yql/tests/sql/suites/produce/reduce_multi_in_sampling.sql new file mode 100644 index 0000000000..a613cdf8db --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_sampling.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 16 */ +USE plato; + +$udf = YQL::@@ +(lambda '(key stream) + (PartitionByKey stream + (lambda '(item) (Way item)) + (Void) + (Void) + (lambda '(listOfPairs) + (FlatMap listOfPairs + (lambda '(pair) (Just (AsStruct '('key key) '('src (Nth pair '0)) '('cnt (Length (ForwardList (Nth pair '1))))))) + ) + ) + ) +) +@@; + +$r = (REDUCE Input SAMPLE(0.1), Input SAMPLE(0.1) ON key USING $udf(TableRow())); + +SELECT key, src, cnt FROM $r ORDER BY key, src, cnt; diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_stage_and_flatmap.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_in_stage_and_flatmap.cfg new file mode 100644 index 0000000000..4468d3ba29 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_stage_and_flatmap.cfg @@ -0,0 +1,2 @@ +in Input input0.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_in_stage_and_flatmap.sql b/yt/yql/tests/sql/suites/produce/reduce_multi_in_stage_and_flatmap.sql new file mode 100644 index 0000000000..1e694e0280 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_in_stage_and_flatmap.sql @@ -0,0 +1,24 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$udf = YQL::@@ +(lambda '(key stream) + (PartitionByKey stream + (lambda '(item) (Way item)) + (Void) + (Void) + (lambda '(listOfPairs) + (FlatMap listOfPairs + (lambda '(pair) (Just (AsStruct '('key key) '('src (Nth pair '0)) '('cnt (Length (ForwardList (Nth pair '1))))))) + ) + ) + ) +) +@@; + +$r = (REDUCE Input, AS_TABLE(ListMap(ListFromRange(0,10), ($val) -> { + RETURN AsStruct(Cast($val AS String) AS key, Cast($val AS String) AS subkey, Cast($val AS String) AS value) +})) ON key USING $udf(TableRow())); + +SELECT key, src, cnt FROM $r ORDER BY key, src, cnt;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_out.cfg b/yt/yql/tests/sql/suites/produce/reduce_multi_out.cfg new file mode 100644 index 0000000000..f73dce605c --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_out.cfg @@ -0,0 +1,4 @@ +in Input input1.txt +res result.txt +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_multi_out.sql b/yt/yql/tests/sql/suites/produce/reduce_multi_out.sql new file mode 100644 index 0000000000..079ff55899 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_multi_out.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$udfScript = @@ +import functools + +def Len(key, input): + sumByValue = functools.reduce(lambda x,y: x + int(y.value), input, 0) + return (sumByValue % 2, {"sumByVal": sumByValue}) +@@; + +$udf = Python::Len(Callable<(String, Stream<Struct<key:String,subkey:String,value:String>>)->Variant<Struct<sumByVal:Uint32>,Struct<sumByVal:Uint32>>>, $udfScript); + +$i, $j = (REDUCE Input ON key USING $udf(TableRow())); + +select * from $i order by sumByVal; +select * from $j order by sumByVal; diff --git a/yt/yql/tests/sql/suites/produce/reduce_subfields-sorted.cfg b/yt/yql/tests/sql/suites/produce/reduce_subfields-sorted.cfg new file mode 100644 index 0000000000..1cce20b68c --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_subfields-sorted.cfg @@ -0,0 +1,3 @@ +in Input sorted.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_subfields.cfg b/yt/yql/tests/sql/suites/produce/reduce_subfields.cfg new file mode 100644 index 0000000000..4a1369f183 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_subfields.cfg @@ -0,0 +1,3 @@ +in Input input0.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_subfields.sql b/yt/yql/tests/sql/suites/produce/reduce_subfields.sql new file mode 100644 index 0000000000..3518cac97e --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_subfields.sql @@ -0,0 +1,25 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +$udfScript = @@ +def f(key, input): + for i in input: + yield { + 'key': i.key, + 'value': i.value, + 'pass': 10 + } +@@; + +$udf_stream = Python3::f( +Callable< + (String,Stream<Struct<key:String,value:String>>) + -> + Stream<Struct<key:String,value:String,pass:Int32>> +>, $udfScript); + + +REDUCE Input +ON key +USING $udf_stream(TableRow()); diff --git a/yt/yql/tests/sql/suites/produce/reduce_typeinfo.cfg b/yt/yql/tests/sql/suites/produce/reduce_typeinfo.cfg new file mode 100644 index 0000000000..520f10d8f9 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_typeinfo.cfg @@ -0,0 +1,3 @@ +in Input0 input0.txt +udf simple_udf +providers yt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/produce/reduce_typeinfo.sql b/yt/yql/tests/sql/suites/produce/reduce_typeinfo.sql new file mode 100644 index 0000000000..bebc744f63 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_typeinfo.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +/* syntax version 1 */ +/* ignore runonopt plan diff */ +use plato; + +pragma warning("disable", "4510"); + +$r1 = REDUCE Input0 ON key USING ALL SimpleUdf::GenericAsStruct(TableRows()); +$r2 = REDUCE Input0 ON key USING SimpleUdf::GenericAsStruct(cast(TableRow().subkey as Int32)); +$r3 = REDUCE Input0 ON key USING ALL SimpleUdf::GenericAsStruct(TableRow().key); + + +select * from (select * from $r1 flatten list by arg_0) flatten columns order by key, subkey; +select arg_0 as key, ListSort(YQL::Collect(arg_1)) as values from $r2 order by key; + + +select FormatType(TypeOf(TableRow())) from $r1 limit 1; +select FormatType(TypeOf(TableRow())) from $r3 limit 1; diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_assume.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_assume.cfg new file mode 100644 index 0000000000..470ecf9066 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_assume.cfg @@ -0,0 +1,3 @@ +in Input sorted.txt +out Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_assume.sql b/yt/yql/tests/sql/suites/produce/reduce_with_assume.sql new file mode 100644 index 0000000000..3f51be0d12 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_assume.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* multirun can not */ +/* syntax version 1 */ +USE plato; + +$udf = YQL::@@(lambda '(key stream) (AsStruct + '('key key) '('sum (Collect (Condense stream (Uint32 '0) (lambda '(item state) (Bool 'False)) (lambda '(item state) (Add state item))))) +))@@; + +INSERT INTO Output +REDUCE Input ON key USING $udf(cast(subkey as uint32) ?? 0) ASSUME ORDER BY key; diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_assume_in_subquery.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_assume_in_subquery.cfg new file mode 100644 index 0000000000..c3fd8a0bcd --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_assume_in_subquery.cfg @@ -0,0 +1,2 @@ +in Input input2.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_assume_in_subquery.sql b/yt/yql/tests/sql/suites/produce/reduce_with_assume_in_subquery.sql new file mode 100644 index 0000000000..3913353e12 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_assume_in_subquery.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +$udf = YQL::@@(lambda '(key stream) (AsStruct + '('key key) '('summ (Collect (Condense stream (Nothing (OptionalType (DataType 'String))) (lambda '(item state) (Bool 'False)) (lambda '(item state) (Coalesce state (Just item)))))) +))@@; + +$in = (SELECT * FROM Input ASSUME ORDER BY key, subkey); + +$res = (REDUCE $in ON key USING $udf(value)); + +SELECT * FROM $res ORDER BY key; diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_flat_lambda.sql b/yt/yql/tests/sql/suites/produce/reduce_with_flat_lambda.sql new file mode 100644 index 0000000000..b0e1e56200 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_flat_lambda.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +/* kikimr can not */ +USE plato; + +$udf_stream = ($input)->{ return $input }; + +$res = REDUCE Input0 ON key using all $udf_stream(TableRows()); + +select * from $res order by value; diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_flat_python_stream.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_flat_python_stream.cfg new file mode 100644 index 0000000000..e34e70ff55 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_flat_python_stream.cfg @@ -0,0 +1,3 @@ +in Input0 input0.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_flat_python_stream.sql b/yt/yql/tests/sql/suites/produce/reduce_with_flat_python_stream.sql new file mode 100644 index 0000000000..8d164a65c9 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_flat_python_stream.sql @@ -0,0 +1,30 @@ +/* syntax version 1 */ +/* kikimr can not */ +USE plato; + +$udfScript = @@ +def f(input): + s = [] + last_key = None + for i in input: + if last_key is not None and last_key != i.key: + s = [] + s.append(i.value) + last_key = i.key + yield { + 'key': i.key, + 'subkey1': i.subkey, + 'value': b''.join(s), + } +@@; + +$udf_stream = Python3::f( +Callable< + (Stream<Struct<key:String,subkey:String,value:String>>) + -> + Stream<Struct<key:String,subkey1:String,value:String>> +>, $udfScript); + +$res = REDUCE Input0 PRESORT value ON key using all $udf_stream(TableRows()) ; + +select * from $res order by key, value;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_presort_diff_order.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_presort_diff_order.cfg new file mode 100644 index 0000000000..6be0f54054 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_presort_diff_order.cfg @@ -0,0 +1,2 @@ +in Input input0.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_presort_diff_order.sql b/yt/yql/tests/sql/suites/produce/reduce_with_presort_diff_order.sql new file mode 100644 index 0000000000..9bdca4b7d9 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_presort_diff_order.sql @@ -0,0 +1,32 @@ +USE plato; + +insert into @skv1v2 +select key, subkey, value as value1, value as value2 from Input order by subkey, key, value1, value2; + +insert into @skv2v1 +select key, subkey, value as value1, value as value2 from Input order by subkey, key, value2, value1; + +insert into @ksv1v2 +select key, subkey, value as value1, value as value2 from Input order by key, subkey, value1, value2; + +commit; + +$udf = YQL::@@(lambda '(key stream) (AsStruct + '('key key) '('summ (Collect (Condense stream (Nothing (OptionalType (DataType 'String))) (lambda '(item state) (Bool 'False)) (lambda '(item state) (Coalesce state (Just item)))))) +))@@; + +select * from ( + reduce concat(@skv1v2, @skv1v2) presort value1, value2 on key, subkey using $udf(value1) --YtReduce +) order by key, summ; + +select * from ( + reduce @ksv1v2 presort value2, value1 on key, subkey using $udf(value1) --YtMapReduce +) order by key, summ; + +select * from ( + reduce concat(@skv1v2, @skv2v1) presort value1, value2 on key, subkey using $udf(value1) --YtMapReduce +) order by key, summ; + +select * from ( + reduce concat(@skv1v2, @ksv1v2) presort value1, value2 on key, subkey using $udf(value1) --YtMapReduce +) order by key, summ; diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_python.cfg new file mode 100644 index 0000000000..13bb8734c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python.sql b/yt/yql/tests/sql/suites/produce/reduce_with_python.sql new file mode 100644 index 0000000000..6bdf0efb24 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +$udfScript = @@ +import functools +def Len(key, input): + return {"value":functools.reduce(lambda x,y: x + 1, input, 0)} +@@; + +$udf = Python::Len(Callable<(String, Stream<String>)->Struct<value:Uint32>>, $udfScript); + +--INSERT INTO Output +$res = (REDUCE Input1 ON key USING $udf(value)); + +select * from $res order by value; diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_few_keys.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_python_few_keys.cfg new file mode 100644 index 0000000000..13bb8734c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_few_keys.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_few_keys.sql b/yt/yql/tests/sql/suites/produce/reduce_with_python_few_keys.sql new file mode 100644 index 0000000000..346c977f16 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_few_keys.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +/* syntax version 1 */ +$udfScript = @@ +import functools +def Len(val_key, input): + return {"zuza": {val_key[0] + b"-" + str(val_key[1]).encode('utf-8'): functools.reduce(lambda x,y: x + 1, input, 0)}} +@@; + +$udf = Python::Len(Callable<(Tuple<String,Uint32>, Stream<String>)->Struct<zuza:Dict<String, Uint32>>>, $udfScript); + +$data = (select Cast(value as uint32) ?? 0 as kk, value as ss, key as val from plato.Input1); + +$res = (reduce $data on val, kk using $udf(ss)); + +select * from $res order by Yql::ToOptional(Yql::DictKeys(zuza)); diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_few_keys_stream.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_python_few_keys_stream.cfg new file mode 100644 index 0000000000..13bb8734c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_few_keys_stream.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_few_keys_stream.sql b/yt/yql/tests/sql/suites/produce/reduce_with_python_few_keys_stream.sql new file mode 100644 index 0000000000..aac5ae32b1 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_few_keys_stream.sql @@ -0,0 +1,19 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$udfScript = @@ +import functools + +def Len(val_key, input): + return {"zuza": {val_key[0] + b"-" + str(val_key[1]).encode('utf-8'): functools.reduce(lambda x, y: x + 1, input, 0)}} +@@; + +$udf = Python3::Len(Callable<(Tuple<String,Uint32>, Stream<String>)->Struct<zuza:Dict<String, Uint32>>>, $udfScript); + +$data = (select Cast(value as uint32) ?? 0 as kk, value as ss, key as val from Input1); + +--insert into Output +$res = (reduce $data on val, kk using $udf(ss)); + +select * from $res order by DictKeys(zuza); diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_filter_and_having.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_python_filter_and_having.cfg new file mode 100644 index 0000000000..13bb8734c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_filter_and_having.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_filter_and_having.sql b/yt/yql/tests/sql/suites/produce/reduce_with_python_filter_and_having.sql new file mode 100644 index 0000000000..dc3beb4025 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_filter_and_having.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +$udfScript = @@ +import functools +def Len(key, input): + return {"total":functools.reduce(lambda x,y: x + 1, input, 0)} +@@; + +$udf = Python::Len(Callable<(String, Stream<String>)->Struct<total:Uint32>>, $udfScript); + +--INSERT INTO Output +REDUCE Input1 ON key USING $udf(value) WHERE cast(value as int) > 1 HAVING total > 3; diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_having.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_python_having.cfg new file mode 100644 index 0000000000..13bb8734c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_having.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_having.sql b/yt/yql/tests/sql/suites/produce/reduce_with_python_having.sql new file mode 100644 index 0000000000..b226e6f399 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_having.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +$udfScript = @@ +import functools +def Len(key, input): + return {"count":functools.reduce(lambda x,y: x + 1, input, 0)} +@@; + +$udf = Python::Len(Callable<(String, Stream<String>)->Struct<count:Uint32>>, $udfScript); + +--INSERT INTO Output +REDUCE Input1 ON key USING $udf(value) HAVING count > 4; diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_input_stream.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_python_input_stream.cfg new file mode 100644 index 0000000000..c426164726 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_input_stream.cfg @@ -0,0 +1,4 @@ +xfail +in Input1 input1.txt +udf python3_udf +providers dq diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_input_stream.sql b/yt/yql/tests/sql/suites/produce/reduce_with_python_input_stream.sql new file mode 100644 index 0000000000..68bf6c7d72 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_input_stream.sql @@ -0,0 +1,14 @@ +/* custom error: Cannot execute ScriptUdf over stream/flow inside DQ stage */ +USE plato; + +$udfScript = @@ +import functools +def Len(key, input): + return {"value":functools.reduce(lambda x,y: x + 1, input, 0)} +@@; + +$udf = Python::Len(Callable<(String, Stream<String>)->Struct<value:Uint32>>, $udfScript); + +$res = (REDUCE Input1 ON key USING $udf(value)); + +select * from $res order by value; diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_presort.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_python_presort.cfg new file mode 100644 index 0000000000..13bb8734c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_presort.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_presort.sql b/yt/yql/tests/sql/suites/produce/reduce_with_python_presort.sql new file mode 100644 index 0000000000..fa55b8bce2 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_presort.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +$udfScript = @@ +def Len(val_key, input): + return {"joined": {val_key: b", ".join(input)}} +@@; + +$udf = Python3::Len(Callable<(String, Stream<String>)->Struct<joined:Dict<String, String>>>, $udfScript); + +--INSERT INTO Output +$res = (REDUCE Input1 PRESORT value DESC ON key USING $udf(subkey)); + +select * from $res order by Yql::ToOptional(Yql::DictKeys(joined)); diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_presort_stream.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_python_presort_stream.cfg new file mode 100644 index 0000000000..13bb8734c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_presort_stream.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_presort_stream.sql b/yt/yql/tests/sql/suites/produce/reduce_with_python_presort_stream.sql new file mode 100644 index 0000000000..276c70136c --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_presort_stream.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +$udfScript = @@ +def Len(val_key, input): + return {"joined": {val_key: b", ".join(input)}} +@@; + +$udf = Python::Len(Callable<(String, Stream<String>)->Struct<joined:Dict<String, String>>>, $udfScript); + +--INSERT INTO Output +$res = (REDUCE Input1 PRESORT value DESC ON key USING $udf(subkey)); + +select * from $res order by DictKeys(joined); diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_row.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_python_row.cfg new file mode 100644 index 0000000000..13bb8734c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_row.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_row.sql b/yt/yql/tests/sql/suites/produce/reduce_with_python_row.sql new file mode 100644 index 0000000000..6d3371d649 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_row.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$udfScript = @@ +import functools + +def Len(key, input): + return {"sumByVal": functools.reduce(lambda x,y: x + int(y.value), input, 0)} +@@; + +$udf = Python3::Len(Callable<(String, Stream<Struct<key:String,subkey:String,value:String>>)->Struct<sumByVal:Uint32>>, $udfScript); + +--INSERT INTO Output +$res = (REDUCE Input1 ON key USING $udf(TableRow())); + +select * from $res order by sumByVal; diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_row_repack.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_python_row_repack.cfg new file mode 100644 index 0000000000..13bb8734c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_row_repack.cfg @@ -0,0 +1,3 @@ +in Input1 input1.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_python_row_repack.sql b/yt/yql/tests/sql/suites/produce/reduce_with_python_row_repack.sql new file mode 100644 index 0000000000..1eba13ec1f --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_python_row_repack.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$udfScript = @@ +import functools +def Len(key, input): + return {"sumByValAndKeyLen":functools.reduce(lambda x,y: x + int(y.value) + len(y.key), input, 0)} +@@; + +$udf = Python::Len(Callable<(String, Stream<Struct<key:String,value:String>>)->Struct<sumByValAndKeyLen:Uint32>>, $udfScript); + +--INSERT INTO Output +$res = (REDUCE Input1 ON key USING $udf(AsStruct(TableRow().value as value, TableRow().subkey as key))); + +select * from $res order by sumByValAndKeyLen; diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_trivial_remaps.cfg b/yt/yql/tests/sql/suites/produce/reduce_with_trivial_remaps.cfg new file mode 100644 index 0000000000..1516335c81 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_trivial_remaps.cfg @@ -0,0 +1,3 @@ +in Input1 sorted1.txt +in Input2 sorted2.txt +providers yt diff --git a/yt/yql/tests/sql/suites/produce/reduce_with_trivial_remaps.sql b/yt/yql/tests/sql/suites/produce/reduce_with_trivial_remaps.sql new file mode 100644 index 0000000000..65e70e8715 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/reduce_with_trivial_remaps.sql @@ -0,0 +1,15 @@ +use plato; +pragma warning("disable", "4510"); + +$udf = ($_key, $stream) -> { + $init = ($item) -> (AsStruct(1u as cnt, $item as row)); + $switch = ($_item, $_state) -> (false); + $update = ($item, $state) -> (AsStruct($state.cnt + 1u as cnt, + if(($item.value > $state.row.value) ?? false, $item, $state.row) as row)); + $state = YQL::Collect(YQL::Condense1($stream, $init, $switch, $update)); + return $state; +}; + +REDUCE CONCAT(Input1,Input2) +presort subkey +ON key USING $udf(TableRow()); diff --git a/yt/yql/tests/sql/suites/produce/sorted.txt.attr b/yt/yql/tests/sql/suites/produce/sorted.txt.attr new file mode 100644 index 0000000000..391c1a05f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/sorted.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;1;]; + "SortedBy"=["key";"subkey";"value";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";"value";]; +}} diff --git a/yt/yql/tests/sql/suites/produce/sorted1.txt.attr b/yt/yql/tests/sql/suites/produce/sorted1.txt.attr new file mode 100644 index 0000000000..391c1a05f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/sorted1.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;1;]; + "SortedBy"=["key";"subkey";"value";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";"value";]; +}} diff --git a/yt/yql/tests/sql/suites/produce/sorted2.txt.attr b/yt/yql/tests/sql/suites/produce/sorted2.txt.attr new file mode 100644 index 0000000000..5d3821a576 --- /dev/null +++ b/yt/yql/tests/sql/suites/produce/sorted2.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"Utf8"]] + ]]; + "SortDirections"=[1;1;1;]; + "SortedBy"=["key";"subkey";"value";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];["DataType";"Utf8";];]; + "SortMembers"=["key";"subkey";"value";]; +}} diff --git a/yt/yql/tests/sql/suites/result_types/containers.sql b/yt/yql/tests/sql/suites/result_types/containers.sql new file mode 100644 index 0000000000..8993440e99 --- /dev/null +++ b/yt/yql/tests/sql/suites/result_types/containers.sql @@ -0,0 +1,45 @@ +$f = ($value) -> { + return <| + "plain":$value, + "opt_1+":just($value), + "opt_1-":nothing(optionaltype(typeof($value))), + "opt_2++":just(just($value)), + "opt_2+-":just(nothing(optionaltype(typeof($value)))), + "opt_2--":nothing(optionaltype(optionaltype(typeof($value)))), + "tuple":($value,), + |>; +}; + +$data = <| + "list0": ListCreate(int32), + "list1": [1], + "list2": [1,2], + "tuple0": (), + "tuple1": (1,), + "tuple2": (1,"foo"), + "struct0": <||>, + "struct1": <|a:1|>, + "struct2": <|a:1,b:"foo"|>, + "vartuple1": Variant(1,"0",Variant<Int32>), + "vartuple2a": Variant(1,"0",Variant<Int32,String>), + "vartuple2b": Variant("foo","1",Variant<Int32,String>), + "varstruct1": Variant(1,"a",Variant<a:Int32>), + "varstruct2a": Variant(1,"a",Variant<a:Int32,b:String>), + "varstruct2b": Variant("foo","b",Variant<a:Int32,b:String>), + "enum1": AsEnum("foo"), + "enum2a": Enum("foo",Enum<"foo","bar">), + "enum2b": Enum("bar",Enum<"foo","bar">), + "tag": AsTagged(1,'foo'), + "dict0": DictCreate(int32, string), + "dict1": {1:"foo"}, + "dict2": {1:"foo",2:"bar"}, + "set0": SetCreate(int32), + "set1": {1}, + "set2": {1,2}, +|>; + +evaluate for $name in StructMembers($data) do begin +select * from ( + select $f($data.$name) +) flatten columns into result $name; +end do; diff --git a/yt/yql/tests/sql/suites/result_types/data.sql b/yt/yql/tests/sql/suites/result_types/data.sql new file mode 100644 index 0000000000..4f544d4209 --- /dev/null +++ b/yt/yql/tests/sql/suites/result_types/data.sql @@ -0,0 +1,56 @@ +--pragma config.flags("LLVM_OFF"); + +$f = ($value) -> { + return <| + "plain":$value, + "opt_1+":just($value), + "opt_1-":nothing(optionaltype(typeof($value))), + "opt_2++":just(just($value)), + "opt_2+-":just(nothing(optionaltype(typeof($value)))), + "opt_2--":nothing(optionaltype(optionaltype(typeof($value)))), + "tuple":($value,), + |>; +}; + +$data = <| + "bool": true, + "int8": Int8('1'), + "uint8": Uint8('2'), + "int16": Int16('3'), + "uint16": Uint16('4'), + "int32": Int32('5'), + "uint32": Uint32('6'), + "int64": Int64('7'), + "uint64": Uint64('8'), + "float": Float('9'), + "double": Double('10'), + "decimal": Decimal('11.3',5,1), + "string": "a", + "utf8": "b"u, + "yson": "{}"y, + "json": "[]"j, + "jsondocument": jsondocument('{"a":1}'), + "uuid": uuid("487120b0-a07f-45be-8d8d-77f727a097a2"), + "dynumber": dynumber("12.4"), + "date": date("2000-01-02"), + "datetime": datetime("2000-01-02T03:04:05Z"), + "timestamp": timestamp("2000-01-02T03:04:05.6789012Z"), + "interval": interval("P1D"), + "tzdate": tzdate("2000-01-02,Europe/Moscow"), + "tzdatetime": tzdatetime("2000-01-02T03:04:05,Europe/Moscow"), + "tztimestamp": tztimestamp("2000-01-02T03:04:05.6789012,Europe/Moscow"), + "date32": date32("1900-01-02"), + "datetime64": datetime64("1900-01-02T03:04:05Z"), + "timestamp64": timestamp64("1900-01-02T03:04:05.6789012Z"), + "interval64": interval64("P1D"), + "tzdate32": tzdate32("1900-01-02,Europe/Moscow"), + "tzdatetime64": tzdatetime64("1900-01-02T03:04:05,Europe/Moscow"), + "tztimestamp64": tztimestamp64("1900-01-02T03:04:05.6789012,Europe/Moscow"), +|>; + +evaluate for $name in StructMembers($data) do begin +select * from ( + select $f($data.$name) +) flatten columns into result $name; +end do; + diff --git a/yt/yql/tests/sql/suites/result_types/default.cfg b/yt/yql/tests/sql/suites/result_types/default.cfg new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/yt/yql/tests/sql/suites/result_types/default.cfg diff --git a/yt/yql/tests/sql/suites/result_types/pg.sql b/yt/yql/tests/sql/suites/result_types/pg.sql new file mode 100644 index 0000000000..1e9ee61263 --- /dev/null +++ b/yt/yql/tests/sql/suites/result_types/pg.sql @@ -0,0 +1,33 @@ +$f = ($value) -> { + return <| + "plain":$value, + "missing":nothing(typeof($value)), + "opt_1+":just($value), + "opt_1-":nothing(optionaltype(typeof($value))), + "opt_2++":just(just($value)), + "opt_2+-":just(nothing(optionaltype(typeof($value)))), + "opt_2--":nothing(optionaltype(optionaltype(typeof($value)))), + "tuple":($value,), + |>; +}; + +$data = <| + "pgint2": pgint2("1"), + "pgint4": pgint2("2"), + "pgint8": pgint2("3"), + "pgfloat4": pgfloat4("4"), + "pgfloat8": pgfloat8("5"), + "pgtext": pgtext("a"), + "pgvarchar": pgtext("b"), + "pgbytea": pgbytea("c"), + "pgcstring": pgbytea("d"), + "pgdate": pgdate("2001-02-03"), + "pgname": pgname("e"), +|>; + +evaluate for $name in StructMembers($data) do begin +select * from ( + select $f($data.$name) +) flatten columns into result $name; +end do; + diff --git a/yt/yql/tests/sql/suites/result_types/singular.sql b/yt/yql/tests/sql/suites/result_types/singular.sql new file mode 100644 index 0000000000..8990099b5e --- /dev/null +++ b/yt/yql/tests/sql/suites/result_types/singular.sql @@ -0,0 +1,24 @@ +$f = ($value) -> { + return <| + "plain":$value, + "opt_1+":just($value), + "opt_1-":nothing(optionaltype(typeof($value))), + "opt_2++":just(just($value)), + "opt_2+-":just(nothing(optionaltype(typeof($value)))), + "opt_2--":nothing(optionaltype(optionaltype(typeof($value)))), + "tuple":($value,), + |>; +}; + +$data = <| + "void": Void(), + "null": null, + "emptylist": [], + "emptydict": {}, +|>; + +evaluate for $name in StructMembers($data) do begin +select * from ( + select $f($data.$name) +) flatten columns into result $name; +end do; diff --git a/yt/yql/tests/sql/suites/sampling/bind_default.sql b/yt/yql/tests/sql/suites/sampling/bind_default.sql new file mode 100644 index 0000000000..5a726083f9 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/bind_default.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +USE plato; + +$var = SELECT * FROM Input; + +SELECT * FROM $var TABLESAMPLE BERNOULLI(50); diff --git a/yt/yql/tests/sql/suites/sampling/bind_expr.sql b/yt/yql/tests/sql/suites/sampling/bind_expr.sql new file mode 100644 index 0000000000..a5cdb40f95 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/bind_expr.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +USE plato; + +$count = SELECT COUNT(*) FROM Input; -- $count = 10 + +$var = SELECT * FROM Input; + +SELECT * FROM $var TABLESAMPLE BERNOULLI(5 * $count); diff --git a/yt/yql/tests/sql/suites/sampling/bind_expr_subquery.sql b/yt/yql/tests/sql/suites/sampling/bind_expr_subquery.sql new file mode 100644 index 0000000000..a734691f70 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/bind_expr_subquery.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +USE plato; + +$rc = (select count(*) from Input); +$sample_size = 10; + +select * from Input tablesample bernoulli(MIN_OF($sample_size * 100.0 / $rc, 100.0)) order by key; diff --git a/yt/yql/tests/sql/suites/sampling/bind_expr_udf.cfg b/yt/yql/tests/sql/suites/sampling/bind_expr_udf.cfg new file mode 100644 index 0000000000..7b2051c1bb --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/bind_expr_udf.cfg @@ -0,0 +1,3 @@ +in Input input.txt +udf math_udf +res result.txt diff --git a/yt/yql/tests/sql/suites/sampling/bind_expr_udf.sql b/yt/yql/tests/sql/suites/sampling/bind_expr_udf.sql new file mode 100644 index 0000000000..4a5bbf945b --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/bind_expr_udf.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$percent = Math::Ceil(0.2); + +SELECT * FROM Input TABLESAMPLE BERNOULLI(Math::Ceil(100 * $percent)) ORDER BY key; -- 100% sample diff --git a/yt/yql/tests/sql/suites/sampling/bind_join_left.sql b/yt/yql/tests/sql/suites/sampling/bind_join_left.sql new file mode 100644 index 0000000000..2d1fdf3e10 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/bind_join_left.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +/* hybridfile can not YQL-17764 */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 3 */ + +use plato; +pragma DisableSimpleColumns; + +$a = select * from Input where key > "199" and value != "bbb"; + +select * from (select a.value, b.value from $a as a inner join Input as b using(subkey)) tablesample bernoulli(25); diff --git a/yt/yql/tests/sql/suites/sampling/bind_join_right.sql b/yt/yql/tests/sql/suites/sampling/bind_join_right.sql new file mode 100644 index 0000000000..2f40997895 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/bind_join_right.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +/* hybridfile can not YQL-17764 */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 3 */ + +use plato; +pragma DisableSimpleColumns; + +$a = select * from Input where key > "199" and value != "bbb"; + +select * from (select a.value from Input as a inner join $a as b using(subkey)) tablesample bernoulli(40); diff --git a/yt/yql/tests/sql/suites/sampling/bind_multiple_sample.sql b/yt/yql/tests/sql/suites/sampling/bind_multiple_sample.sql new file mode 100644 index 0000000000..7c7628d0c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/bind_multiple_sample.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 20 */ +USE plato; + +$var = SELECT * FROM Input; + +INSERT INTO @tmp +SELECT * FROM $var TABLESAMPLE BERNOULLI(100); + +INSERT INTO @tmp +SELECT * FROM $var TABLESAMPLE BERNOULLI(50); + +COMMIT; + +SELECT * FROM @tmp; diff --git a/yt/yql/tests/sql/suites/sampling/bind_small_rate.sql b/yt/yql/tests/sql/suites/sampling/bind_small_rate.sql new file mode 100644 index 0000000000..410591fe2e --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/bind_small_rate.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 2 */ + +$a = select * from plato.Input; + +select * from $a tablesample bernoulli(0.1) diff --git a/yt/yql/tests/sql/suites/sampling/bind_topsort.sql b/yt/yql/tests/sql/suites/sampling/bind_topsort.sql new file mode 100644 index 0000000000..a2e1dc2725 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/bind_topsort.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ + +$var = SELECT key, value FROM plato.Input; + +SELECT * FROM $var TABLESAMPLE BERNOULLI(10) ORDER BY key ASC, value LIMIT 10; diff --git a/yt/yql/tests/sql/suites/sampling/default.cfg b/yt/yql/tests/sql/suites/sampling/default.cfg new file mode 100644 index 0000000000..6f99339756 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/default.cfg @@ -0,0 +1,2 @@ +in Input input.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/sampling/direct_read-dynamic.cfg b/yt/yql/tests/sql/suites/sampling/direct_read-dynamic.cfg new file mode 100644 index 0000000000..1908d503d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/direct_read-dynamic.cfg @@ -0,0 +1,2 @@ +in Input dynamic.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/sampling/direct_read.cfg b/yt/yql/tests/sql/suites/sampling/direct_read.cfg new file mode 100644 index 0000000000..6f99339756 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/direct_read.cfg @@ -0,0 +1,2 @@ +in Input input.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/sampling/direct_read.sql b/yt/yql/tests/sql/suites/sampling/direct_read.sql new file mode 100644 index 0000000000..e3edc0dba6 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/direct_read.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +pragma direct_read; +SELECT * FROM plato.Input TABLESAMPLE BERNOULLI(30) REPEATABLE(1); diff --git a/yt/yql/tests/sql/suites/sampling/dynamic.txt.attr b/yt/yql/tests/sql/suites/sampling/dynamic.txt.attr new file mode 100644 index 0000000000..9e3c33c4cb --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/dynamic.txt.attr @@ -0,0 +1,33 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key"; ["DataType"; "String"]]; + ["subkey"; ["DataType"; "String"]]; + ["value"; ["DataType"; "String"]]; + ]]; + "SortMembers"=["key"; "subkey"]; + "SortedBy"=["key"; "subkey"]; + "SortDirections"=[1; 1]; + "SortedByTypes"=[["DataType";"String"]; ["DataType";"String"]] + }; + "_yql_dynamic"=%true; + "schema"=< + "strict" = %true; + "unique_keys" = %true + >[ + { + "name" = "key"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "value"; + "type" = "string"; + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/sampling/insert.cfg b/yt/yql/tests/sql/suites/sampling/insert.cfg new file mode 100644 index 0000000000..6f99339756 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/insert.cfg @@ -0,0 +1,2 @@ +in Input input.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/sampling/insert.sql b/yt/yql/tests/sql/suites/sampling/insert.sql new file mode 100644 index 0000000000..e08c85eba0 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/insert.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +USE plato; + +INSERT INTO @tmp +SELECT * FROM Input TABLESAMPLE BERNOULLI(30) REPEATABLE(1); + +COMMIT; + +SELECT * FROM @tmp; diff --git a/yt/yql/tests/sql/suites/sampling/join_left_sample.sql b/yt/yql/tests/sql/suites/sampling/join_left_sample.sql new file mode 100644 index 0000000000..61d1860ded --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/join_left_sample.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +/* ignore plan diff */ +use plato; +pragma DisableSimpleColumns; + +select * from plato.Input as a SAMPLE 0.3 +inner join plato.Input as b +on a.key = b.key; diff --git a/yt/yql/tests/sql/suites/sampling/join_right_sample.sql b/yt/yql/tests/sql/suites/sampling/join_right_sample.sql new file mode 100644 index 0000000000..be3d814ace --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/join_right_sample.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +/* syntax version 1 */ +use plato; +pragma DisableSimpleColumns; + +select * from plato.Input as a +inner join plato.Input as b SAMPLE 0.3 +on a.key = b.key; diff --git a/yt/yql/tests/sql/suites/sampling/map-dynamic.cfg b/yt/yql/tests/sql/suites/sampling/map-dynamic.cfg new file mode 100644 index 0000000000..1908d503d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/map-dynamic.cfg @@ -0,0 +1,2 @@ +in Input dynamic.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/sampling/map-keyfilter.cfg b/yt/yql/tests/sql/suites/sampling/map-keyfilter.cfg new file mode 100644 index 0000000000..3f5bebb5a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/map-keyfilter.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/sampling/map.cfg b/yt/yql/tests/sql/suites/sampling/map.cfg new file mode 100644 index 0000000000..6f99339756 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/map.cfg @@ -0,0 +1,2 @@ +in Input input.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/sampling/map.sql b/yt/yql/tests/sql/suites/sampling/map.sql new file mode 100644 index 0000000000..35f784a3cb --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/map.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 8 */ +SELECT * FROM plato.Input TABLESAMPLE BERNOULLI(30) REPEATABLE(1) WHERE subkey > "1"; diff --git a/yt/yql/tests/sql/suites/sampling/mapjoin_left_sample.sql b/yt/yql/tests/sql/suites/sampling/mapjoin_left_sample.sql new file mode 100644 index 0000000000..e05a877bfb --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/mapjoin_left_sample.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +use plato; +pragma DisableSimpleColumns; +pragma yt.MapJoinLimit="1m"; + +select * from plato.Input as a SAMPLE 0.3 +inner join plato.Input as b +on a.key = b.key; diff --git a/yt/yql/tests/sql/suites/sampling/mapjoin_right_sample.sql b/yt/yql/tests/sql/suites/sampling/mapjoin_right_sample.sql new file mode 100644 index 0000000000..8490d55c65 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/mapjoin_right_sample.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +/* syntax version 1 */ +use plato; +pragma yt.MapJoinLimit="1m"; +pragma DisableSimpleColumns; + +select * from plato.Input as a +inner join plato.Input as b SAMPLE 0.3 +on a.key = b.key; diff --git a/yt/yql/tests/sql/suites/sampling/orderedjoin_left_sample.sql b/yt/yql/tests/sql/suites/sampling/orderedjoin_left_sample.sql new file mode 100644 index 0000000000..5c28981d3d --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/orderedjoin_left_sample.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +/* ignore plan diff */ +/* syntax version 1 */ +use plato; +pragma yt.JoinMergeTablesLimit="2"; +pragma DisableSimpleColumns; + +select * from plato.Input as a SAMPLE 0.3 +inner join plato.Input as b +on a.key = b.key; diff --git a/yt/yql/tests/sql/suites/sampling/orderedjoin_right_sample.sql b/yt/yql/tests/sql/suites/sampling/orderedjoin_right_sample.sql new file mode 100644 index 0000000000..8104b64e5d --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/orderedjoin_right_sample.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +/* ignore plan diff */ +/* syntax version 1 */ +use plato; +pragma yt.JoinMergeTablesLimit="2"; +pragma DisableSimpleColumns; + +select * from plato.Input as a +inner join plato.Input as b SAMPLE 0.3 +on a.key = b.key; diff --git a/yt/yql/tests/sql/suites/sampling/read-dynamic.cfg b/yt/yql/tests/sql/suites/sampling/read-dynamic.cfg new file mode 100644 index 0000000000..1908d503d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/read-dynamic.cfg @@ -0,0 +1,2 @@ +in Input dynamic.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/sampling/read.cfg b/yt/yql/tests/sql/suites/sampling/read.cfg new file mode 100644 index 0000000000..6f99339756 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/read.cfg @@ -0,0 +1,2 @@ +in Input input.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/sampling/read.sql b/yt/yql/tests/sql/suites/sampling/read.sql new file mode 100644 index 0000000000..86381aef3a --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/read.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +SELECT * FROM plato.Input TABLESAMPLE BERNOULLI(30) REPEATABLE(1); diff --git a/yt/yql/tests/sql/suites/sampling/reduce-with_premap.cfg b/yt/yql/tests/sql/suites/sampling/reduce-with_premap.cfg new file mode 100644 index 0000000000..dd593f12f9 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/reduce-with_premap.cfg @@ -0,0 +1,3 @@ +in Input sorted_desc.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/sampling/reduce.cfg b/yt/yql/tests/sql/suites/sampling/reduce.cfg new file mode 100644 index 0000000000..2c31ed76e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/reduce.cfg @@ -0,0 +1,3 @@ +in Input input.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/sampling/reduce.sql b/yt/yql/tests/sql/suites/sampling/reduce.sql new file mode 100644 index 0000000000..0536570115 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/reduce.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 8 */ +USE plato; + +$udf = YQL::@@(lambda '(key stream) (AsStruct + '('key key) '('summ (Collect (Condense stream (Uint32 '0) (lambda '(item state) (Bool 'False)) (lambda '(item state) (Add state item))))) +))@@; + +$res = (REDUCE Input TABLESAMPLE BERNOULLI(30) REPEATABLE(1) ON key USING $udf(cast(value as uint32) ?? 0)); + +select * from $res order by key; diff --git a/yt/yql/tests/sql/suites/sampling/reduce_with_presort.cfg b/yt/yql/tests/sql/suites/sampling/reduce_with_presort.cfg new file mode 100644 index 0000000000..eb1992232a --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/reduce_with_presort.cfg @@ -0,0 +1,4 @@ +in Input input.txt +res result.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/sampling/reduce_with_presort.sql b/yt/yql/tests/sql/suites/sampling/reduce_with_presort.sql new file mode 100644 index 0000000000..b698b6fe87 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/reduce_with_presort.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 8 */ +USE plato; + +$udf = YQL::@@(lambda '(key stream) (AsStruct + '('key key) '('summ (Collect (Condense stream (Uint32 '0) (lambda '(item state) (Bool 'False)) (lambda '(item state) (Add state item))))) +))@@; + +$res = (REDUCE Input TABLESAMPLE BERNOULLI(30) REPEATABLE(1) PRESORT key || subkey ON key USING $udf(cast(value as uint32) ?? 0)); + +select * from $res order by key; diff --git a/yt/yql/tests/sql/suites/sampling/sample.sql b/yt/yql/tests/sql/suites/sampling/sample.sql new file mode 100644 index 0000000000..6dd6d7ee31 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/sample.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT * FROM (SELECT* from Input) +SAMPLE(0.5) +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/sampling/sort.sql b/yt/yql/tests/sql/suites/sampling/sort.sql new file mode 100644 index 0000000000..a245b72745 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/sort.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +SELECT * FROM plato.Input TABLESAMPLE BERNOULLI(30) REPEATABLE(1) ORDER BY key; diff --git a/yt/yql/tests/sql/suites/sampling/sorted.txt.attr b/yt/yql/tests/sql/suites/sampling/sorted.txt.attr new file mode 100644 index 0000000000..1d2e02ee20 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/sorted.txt.attr @@ -0,0 +1,13 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key"; ["DataType"; "String"]]; + ["subkey"; ["DataType"; "String"]]; + ["value"; ["DataType"; "String"]]; + ]]; + "SortMembers"=["subkey"]; + "SortedBy"=["subkey"]; + "SortDirections"=[1]; + "SortedByTypes"=[["DataType";"String"]] + }; +} diff --git a/yt/yql/tests/sql/suites/sampling/sorted_desc.txt.attr b/yt/yql/tests/sql/suites/sampling/sorted_desc.txt.attr new file mode 100644 index 0000000000..5a6ca5761e --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/sorted_desc.txt.attr @@ -0,0 +1,47 @@ +{ + "_yql_row_spec" = { + "SortMembers" = [ + "key" + ]; + "SortDirections" = [ + 0 + ]; + "UniqueKeys" = %false; + "SortedByTypes" = [ + [ + "DataType"; + "String" + ] + ]; + "StrictSchema" = %true; + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ]; + "SortedBy" = [ + "_yql_column_0" + ] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/sampling/subquery_default.sql b/yt/yql/tests/sql/suites/sampling/subquery_default.sql new file mode 100644 index 0000000000..767979a16b --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/subquery_default.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ + +SELECT * FROM (SELECT * FROM plato.Input) TABLESAMPLE BERNOULLI(50); diff --git a/yt/yql/tests/sql/suites/sampling/subquery_expr.sql b/yt/yql/tests/sql/suites/sampling/subquery_expr.sql new file mode 100644 index 0000000000..95c67024ba --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/subquery_expr.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ + +$count = SELECT COUNT(*) FROM plato.Input; -- $count = 10 + +SELECT * FROM (SELECT * FROM plato.Input) TABLESAMPLE BERNOULLI(5 * $count); diff --git a/yt/yql/tests/sql/suites/sampling/subquery_filter.sql b/yt/yql/tests/sql/suites/sampling/subquery_filter.sql new file mode 100644 index 0000000000..d7942f2fed --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/subquery_filter.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 8 */ + +select * from (select key from plato.Input where subkey != "1") tablesample bernoulli(44) where key > "50"; diff --git a/yt/yql/tests/sql/suites/sampling/subquery_limit.sql b/yt/yql/tests/sql/suites/sampling/subquery_limit.sql new file mode 100644 index 0000000000..3d8930952a --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/subquery_limit.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 6 */ + +select * from (select * from plato.Input) tablesample bernoulli(80) limit 5; diff --git a/yt/yql/tests/sql/suites/sampling/subquery_mapjoin.sql b/yt/yql/tests/sql/suites/sampling/subquery_mapjoin.sql new file mode 100644 index 0000000000..d8eebf7bc6 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/subquery_mapjoin.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +/* hybridfile can not YQL-17764 */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +use plato; + +pragma DisableSimpleColumns; +pragma yt.MapJoinLimit="1m"; + +select * from( +select * from plato.Input as a +inner join plato.Input as b +on a.key = b.key +) tablesample bernoulli(30); diff --git a/yt/yql/tests/sql/suites/sampling/subquery_multiple_sample.sql b/yt/yql/tests/sql/suites/sampling/subquery_multiple_sample.sql new file mode 100644 index 0000000000..c0aa4c9471 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/subquery_multiple_sample.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ + +SELECT * FROM (SELECT * FROM plato.Input TABLESAMPLE BERNOULLI(50)) TABLESAMPLE BERNOULLI(30); diff --git a/yt/yql/tests/sql/suites/sampling/subquery_sort.sql b/yt/yql/tests/sql/suites/sampling/subquery_sort.sql new file mode 100644 index 0000000000..056ddbf4d5 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/subquery_sort.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ + +select key from (select key, value from plato.Input) tablesample bernoulli(33) order by key; + diff --git a/yt/yql/tests/sql/suites/sampling/system_sampling-io_block_size.cfg b/yt/yql/tests/sql/suites/sampling/system_sampling-io_block_size.cfg new file mode 100644 index 0000000000..7544cd7111 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/system_sampling-io_block_size.cfg @@ -0,0 +1,5 @@ +in Input input.txt +out Output output.txt +res result.txt +pragma yt.SamplingIoBlockSize="32M" +providers yt diff --git a/yt/yql/tests/sql/suites/sampling/system_sampling.cfg b/yt/yql/tests/sql/suites/sampling/system_sampling.cfg new file mode 100644 index 0000000000..5d963ebb21 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/system_sampling.cfg @@ -0,0 +1,4 @@ +in Input input.txt +out Output output.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/sampling/system_sampling.sql b/yt/yql/tests/sql/suites/sampling/system_sampling.sql new file mode 100644 index 0000000000..56f5e5a1f0 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/system_sampling.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 100 */ +/* syntax version 1 */ +USE plato; + +EVALUATE FOR $_i IN ListFromRange(0, 10) DO BEGIN + INSERT INTO Output + SELECT * FROM Input; + COMMIT; +END DO; + +SELECT * FROM Output TABLESAMPLE SYSTEM(10); diff --git a/yt/yql/tests/sql/suites/sampling/table_content.cfg b/yt/yql/tests/sql/suites/sampling/table_content.cfg new file mode 100644 index 0000000000..6f99339756 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/table_content.cfg @@ -0,0 +1,2 @@ +in Input input.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/sampling/table_content.sql b/yt/yql/tests/sql/suites/sampling/table_content.sql new file mode 100644 index 0000000000..c455155fc7 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/table_content.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) == 1 */ +use plato; + +$key = (select key from plato.Input SAMPLE(0.5)); + +select * from Input where key = $key; diff --git a/yt/yql/tests/sql/suites/sampling/take_with_sampling.sql b/yt/yql/tests/sql/suites/sampling/take_with_sampling.sql new file mode 100644 index 0000000000..1abbb2413b --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/take_with_sampling.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +SELECT * FROM plato.Input TABLESAMPLE BERNOULLI(30) REPEATABLE(1) LIMIT 10; diff --git a/yt/yql/tests/sql/suites/sampling/topsort.sql b/yt/yql/tests/sql/suites/sampling/topsort.sql new file mode 100644 index 0000000000..7bc0db6910 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/topsort.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +SELECT * FROM plato.Input TABLESAMPLE BERNOULLI(30) REPEATABLE(1) ORDER BY key LIMIT 10; diff --git a/yt/yql/tests/sql/suites/sampling/yql-14664_deps.sql b/yt/yql/tests/sql/suites/sampling/yql-14664_deps.sql new file mode 100644 index 0000000000..f6f73a0337 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/yql-14664_deps.sql @@ -0,0 +1,20 @@ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 10 */ +USE plato; + +INSERT INTO @a +SELECT + * +FROM Input +WHERE key > "020"; + +COMMIT; + +SELECT + * +FROM ( + SELECT + * + FROM @a + TABLESAMPLE BERNOULLI(50.0) REPEATABLE(1) +) LIMIT 10 diff --git a/yt/yql/tests/sql/suites/sampling/zero_percentage.cfg b/yt/yql/tests/sql/suites/sampling/zero_percentage.cfg new file mode 100644 index 0000000000..3f5bebb5a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/zero_percentage.cfg @@ -0,0 +1,2 @@ +in Input sorted.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/sampling/zero_percentage.sql b/yt/yql/tests/sql/suites/sampling/zero_percentage.sql new file mode 100644 index 0000000000..43693ecd77 --- /dev/null +++ b/yt/yql/tests/sql/suites/sampling/zero_percentage.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +SELECT * FROM plato.Input TABLESAMPLE BERNOULLI(0) ORDER BY subkey; diff --git a/yt/yql/tests/sql/suites/schema/append_to_desc.cfg b/yt/yql/tests/sql/suites/schema/append_to_desc.cfg new file mode 100644 index 0000000000..96bf89fe0a --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/append_to_desc.cfg @@ -0,0 +1,2 @@ +in Input descending.txt +out Output descending.txt diff --git a/yt/yql/tests/sql/suites/schema/append_to_desc.sql b/yt/yql/tests/sql/suites/schema/append_to_desc.sql new file mode 100644 index 0000000000..61480975cb --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/append_to_desc.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +USE plato; + +insert into Output +select * from Input +order by key desc, subkey desc;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/append_to_desc_with_remap.cfg b/yt/yql/tests/sql/suites/schema/append_to_desc_with_remap.cfg new file mode 100644 index 0000000000..96bf89fe0a --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/append_to_desc_with_remap.cfg @@ -0,0 +1,2 @@ +in Input descending.txt +out Output descending.txt diff --git a/yt/yql/tests/sql/suites/schema/append_to_desc_with_remap.sql b/yt/yql/tests/sql/suites/schema/append_to_desc_with_remap.sql new file mode 100644 index 0000000000..0b315899d9 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/append_to_desc_with_remap.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +USE plato; + +insert into Output +select * from Input +where key > "000" +order by key desc, subkey desc;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/concat.cfg b/yt/yql/tests/sql/suites/schema/concat.cfg new file mode 100644 index 0000000000..a9740fa8b6 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/concat.cfg @@ -0,0 +1,2 @@ +in InputGood input_good.txt +in InputBad input_bad.txt diff --git a/yt/yql/tests/sql/suites/schema/concat.sql b/yt/yql/tests/sql/suites/schema/concat.sql new file mode 100644 index 0000000000..4e6fe0fddd --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/concat.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +USE plato; + +SELECT id1 FROM CONCAT(InputGood, InputBad); diff --git a/yt/yql/tests/sql/suites/schema/copy-other.cfg b/yt/yql/tests/sql/suites/schema/copy-other.cfg new file mode 100644 index 0000000000..5529b28815 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/copy-other.cfg @@ -0,0 +1,2 @@ +in Input read_schema_other.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/schema/copy-read_schema.cfg b/yt/yql/tests/sql/suites/schema/copy-read_schema.cfg new file mode 100644 index 0000000000..3ebcb3bb45 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/copy-read_schema.cfg @@ -0,0 +1,2 @@ +in Input read_schema.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/schema/copy-schema.cfg b/yt/yql/tests/sql/suites/schema/copy-schema.cfg new file mode 100644 index 0000000000..80ffec4b32 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/copy-schema.cfg @@ -0,0 +1,2 @@ +in Input schema.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/schema/copy-yamred_dsv_raw.cfg b/yt/yql/tests/sql/suites/schema/copy-yamred_dsv_raw.cfg new file mode 100644 index 0000000000..0cad3cec7d --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/copy-yamred_dsv_raw.cfg @@ -0,0 +1,2 @@ +in Input yamred_dsv_raw.txt yamred_dsv +out Output output.txt diff --git a/yt/yql/tests/sql/suites/schema/copy.sql b/yt/yql/tests/sql/suites/schema/copy.sql new file mode 100644 index 0000000000..90d80ae84a --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/copy.sql @@ -0,0 +1,3 @@ +insert into plato.Output +select * from plato.Input +limit 100; diff --git a/yt/yql/tests/sql/suites/schema/def_values.cfg b/yt/yql/tests/sql/suites/schema/def_values.cfg new file mode 100644 index 0000000000..2578259926 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/def_values.cfg @@ -0,0 +1 @@ +in Input def_values.txt diff --git a/yt/yql/tests/sql/suites/schema/def_values.sql b/yt/yql/tests/sql/suites/schema/def_values.sql new file mode 100644 index 0000000000..327a664434 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/def_values.sql @@ -0,0 +1 @@ +select key, subkey, value from plato.Input; diff --git a/yt/yql/tests/sql/suites/schema/def_values.txt.attr b/yt/yql/tests/sql/suites/schema/def_values.txt.attr new file mode 100644 index 0000000000..c54e9fca8f --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/def_values.txt.attr @@ -0,0 +1,19 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]]; + ]]; + "DefaultValues"={ + "key"="\"def_key\""; + "subkey"="\"def_subkey\""; + "value"="\"def_value\""; + }; + }; + "schema"=<"strict" = %true> [ + {"type"="string"; "name"="key"}; + {"type"="string"; "name"="subkey"}; + {"type"="string"; "name"="value"} + ] +} diff --git a/yt/yql/tests/sql/suites/schema/def_values_job.cfg b/yt/yql/tests/sql/suites/schema/def_values_job.cfg new file mode 100644 index 0000000000..2578259926 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/def_values_job.cfg @@ -0,0 +1 @@ +in Input def_values.txt diff --git a/yt/yql/tests/sql/suites/schema/def_values_job.sql b/yt/yql/tests/sql/suites/schema/def_values_job.sql new file mode 100644 index 0000000000..7165961a6f --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/def_values_job.sql @@ -0,0 +1 @@ +select key, subkey, value from plato.Input where key != "fake"; diff --git a/yt/yql/tests/sql/suites/schema/default.cfg b/yt/yql/tests/sql/suites/schema/default.cfg new file mode 100644 index 0000000000..86c772ae1c --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/default.cfg @@ -0,0 +1 @@ +in Input read_schema.txt diff --git a/yt/yql/tests/sql/suites/schema/descending.txt.attr b/yt/yql/tests/sql/suites/schema/descending.txt.attr new file mode 100644 index 0000000000..7024a9fc9c --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/descending.txt.attr @@ -0,0 +1,21 @@ +{ + "schema"=< + "strict" = %true; + "unique_keys" = %false + >[ + { + "name" = "key"; + "type" = "string"; + "sort_order" = "descending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "sort_order" = "descending"; + }; + { + "name" = "value"; + "type" = "string"; + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/diffrerent_schemas.cfg b/yt/yql/tests/sql/suites/schema/diffrerent_schemas.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/diffrerent_schemas.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/schema/diffrerent_schemas.sql b/yt/yql/tests/sql/suites/schema/diffrerent_schemas.sql new file mode 100644 index 0000000000..407dff9475 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/diffrerent_schemas.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +USE plato; +SELECT * FROM Input WITH SCHEMA Struct<key:String, subkey:String>; +SELECT * FROM Input WITH SCHEMA Struct<key:String, value:String>; + diff --git a/yt/yql/tests/sql/suites/schema/empty.txt.attr b/yt/yql/tests/sql/suites/schema/empty.txt.attr new file mode 100644 index 0000000000..ada1f836f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/empty.txt.attr @@ -0,0 +1,3 @@ +{ + "infer_schema"=%true +} diff --git a/yt/yql/tests/sql/suites/schema/empty_no_schema.txt.attr b/yt/yql/tests/sql/suites/schema/empty_no_schema.txt.attr new file mode 100644 index 0000000000..ada1f836f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/empty_no_schema.txt.attr @@ -0,0 +1,3 @@ +{ + "infer_schema"=%true +} diff --git a/yt/yql/tests/sql/suites/schema/fake_column.sql b/yt/yql/tests/sql/suites/schema/fake_column.sql new file mode 100644 index 0000000000..21c745b27e --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/fake_column.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +USE plato; + +insert into @tmp +select * from ( + select <||> as a +) flatten columns; + +commit; + +select 1 as a from @tmp; diff --git a/yt/yql/tests/sql/suites/schema/inferschema.txt.attr b/yt/yql/tests/sql/suites/schema/inferschema.txt.attr new file mode 100644 index 0000000000..ada1f836f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/inferschema.txt.attr @@ -0,0 +1,3 @@ +{ + "infer_schema"=%true +} diff --git a/yt/yql/tests/sql/suites/schema/inferschema2.txt.attr b/yt/yql/tests/sql/suites/schema/inferschema2.txt.attr new file mode 100644 index 0000000000..ada1f836f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/inferschema2.txt.attr @@ -0,0 +1,3 @@ +{ + "infer_schema"=%true +} diff --git a/yt/yql/tests/sql/suites/schema/inferschema_extra_field.txt.attr b/yt/yql/tests/sql/suites/schema/inferschema_extra_field.txt.attr new file mode 100644 index 0000000000..ada1f836f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/inferschema_extra_field.txt.attr @@ -0,0 +1,3 @@ +{ + "infer_schema"=%true +} diff --git a/yt/yql/tests/sql/suites/schema/inferschema_no_fields.txt.attr b/yt/yql/tests/sql/suites/schema/inferschema_no_fields.txt.attr new file mode 100644 index 0000000000..ada1f836f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/inferschema_no_fields.txt.attr @@ -0,0 +1,3 @@ +{ + "infer_schema"=%true +} diff --git a/yt/yql/tests/sql/suites/schema/input_bad.txt.attr b/yt/yql/tests/sql/suites/schema/input_bad.txt.attr new file mode 100644 index 0000000000..c858a649c4 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/input_bad.txt.attr @@ -0,0 +1,6 @@ +{ + "schema" = [ + {"required"=%false; "type"="any"; "name"="dates"}; + {"required"=%false; "type"="string"; "name"="id1"}; + ]; +} diff --git a/yt/yql/tests/sql/suites/schema/input_good.txt.attr b/yt/yql/tests/sql/suites/schema/input_good.txt.attr new file mode 100644 index 0000000000..431dd78c84 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/input_good.txt.attr @@ -0,0 +1,15 @@ +{ + "_yql_row_spec" = { + "StrictSchema"=%true; + "Type"=["StructType";[ + ["IsValid";["DataType";"Bool"]]; + ["dates";["ListType";["DataType";"String"]]]; + ["id1";["OptionalType";["DataType";"String"]]]; + ]]; + }; + "schema" = [ + {"required"=%false; "type"="any"; "name"="dates"}; + {"required"=%false; "type"="string"; "name"="id1"}; + {"required"=%true; "type"="boolean"; "name"="IsValid"}; + ]; +} diff --git a/yt/yql/tests/sql/suites/schema/input_no_schema.txt.attr b/yt/yql/tests/sql/suites/schema/input_no_schema.txt.attr new file mode 100644 index 0000000000..ada1f836f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/input_no_schema.txt.attr @@ -0,0 +1,3 @@ +{ + "infer_schema"=%true +} diff --git a/yt/yql/tests/sql/suites/schema/insert-read_schema.cfg b/yt/yql/tests/sql/suites/schema/insert-read_schema.cfg new file mode 100644 index 0000000000..3ebcb3bb45 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/insert-read_schema.cfg @@ -0,0 +1,2 @@ +in Input read_schema.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/schema/insert-row_spec.cfg b/yt/yql/tests/sql/suites/schema/insert-row_spec.cfg new file mode 100644 index 0000000000..82e876ad52 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/insert-row_spec.cfg @@ -0,0 +1,2 @@ +in Input row_spec.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/schema/insert-schema.cfg b/yt/yql/tests/sql/suites/schema/insert-schema.cfg new file mode 100644 index 0000000000..80ffec4b32 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/insert-schema.cfg @@ -0,0 +1,2 @@ +in Input schema.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/schema/insert.sql b/yt/yql/tests/sql/suites/schema/insert.sql new file mode 100644 index 0000000000..0ea3cadf0e --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/insert.sql @@ -0,0 +1,4 @@ +/* multirun can not */ +insert into plato.Output select * from plato.Input where a is not null; +commit; +select * from plato.Output; diff --git a/yt/yql/tests/sql/suites/schema/insert_sorted-read_schema.cfg b/yt/yql/tests/sql/suites/schema/insert_sorted-read_schema.cfg new file mode 100644 index 0000000000..3ebcb3bb45 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/insert_sorted-read_schema.cfg @@ -0,0 +1,2 @@ +in Input read_schema.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/schema/insert_sorted-row_spec.cfg b/yt/yql/tests/sql/suites/schema/insert_sorted-row_spec.cfg new file mode 100644 index 0000000000..82e876ad52 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/insert_sorted-row_spec.cfg @@ -0,0 +1,2 @@ +in Input row_spec.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/schema/insert_sorted-schema.cfg b/yt/yql/tests/sql/suites/schema/insert_sorted-schema.cfg new file mode 100644 index 0000000000..80ffec4b32 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/insert_sorted-schema.cfg @@ -0,0 +1,2 @@ +in Input schema.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/schema/insert_sorted.sql b/yt/yql/tests/sql/suites/schema/insert_sorted.sql new file mode 100644 index 0000000000..f93a54e166 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/insert_sorted.sql @@ -0,0 +1,4 @@ +/* multirun can not */ +insert into plato.Output select * from plato.Input order by d, a, b, c; +commit; +select * from plato.Output; diff --git a/yt/yql/tests/sql/suites/schema/limit_directread.cfg b/yt/yql/tests/sql/suites/schema/limit_directread.cfg new file mode 100644 index 0000000000..86c772ae1c --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/limit_directread.cfg @@ -0,0 +1 @@ +in Input read_schema.txt diff --git a/yt/yql/tests/sql/suites/schema/limit_directread.sql b/yt/yql/tests/sql/suites/schema/limit_directread.sql new file mode 100644 index 0000000000..f083e0bbc0 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/limit_directread.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +use plato; +pragma directread; +select * from `Input` limit 3; diff --git a/yt/yql/tests/sql/suites/schema/limit_simple.cfg b/yt/yql/tests/sql/suites/schema/limit_simple.cfg new file mode 100644 index 0000000000..128536d9eb --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/limit_simple.cfg @@ -0,0 +1 @@ +in Input read_schema_no_any.txt diff --git a/yt/yql/tests/sql/suites/schema/limit_simple.sql b/yt/yql/tests/sql/suites/schema/limit_simple.sql new file mode 100644 index 0000000000..b9eeaad952 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/limit_simple.sql @@ -0,0 +1,2 @@ +use plato; +select a from Input limit 3; diff --git a/yt/yql/tests/sql/suites/schema/other.cfg b/yt/yql/tests/sql/suites/schema/other.cfg new file mode 100644 index 0000000000..4035425a79 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/other.cfg @@ -0,0 +1,3 @@ +in Input1 other1.txt +in Input2 other2.txt +providers yt diff --git a/yt/yql/tests/sql/suites/schema/other.sql b/yt/yql/tests/sql/suites/schema/other.sql new file mode 100644 index 0000000000..1412b0692f --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/other.sql @@ -0,0 +1 @@ +select key, _other from plato.range(``, Input1, Input2);
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/other1.txt.attr b/yt/yql/tests/sql/suites/schema/other1.txt.attr new file mode 100644 index 0000000000..49d98771a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/other1.txt.attr @@ -0,0 +1,17 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="string";"name"="key"}; + {"type"="string";"name"="subkey"}; + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "type" = "string" + }; + { + "name" = "subkey"; + "type" = "string" + } + ] +} diff --git a/yt/yql/tests/sql/suites/schema/other2.txt.attr b/yt/yql/tests/sql/suites/schema/other2.txt.attr new file mode 100644 index 0000000000..49d98771a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/other2.txt.attr @@ -0,0 +1,17 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="string";"name"="key"}; + {"type"="string";"name"="subkey"}; + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "type" = "string" + }; + { + "name" = "subkey"; + "type" = "string" + } + ] +} diff --git a/yt/yql/tests/sql/suites/schema/other_job.cfg b/yt/yql/tests/sql/suites/schema/other_job.cfg new file mode 100644 index 0000000000..4035425a79 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/other_job.cfg @@ -0,0 +1,3 @@ +in Input1 other1.txt +in Input2 other2.txt +providers yt diff --git a/yt/yql/tests/sql/suites/schema/other_job.sql b/yt/yql/tests/sql/suites/schema/other_job.sql new file mode 100644 index 0000000000..22dc1e1bae --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/other_job.sql @@ -0,0 +1 @@ +select key, _other from plato.range(``, Input1, Input2) where key != "fake"; diff --git a/yt/yql/tests/sql/suites/schema/patched1.txt.attr b/yt/yql/tests/sql/suites/schema/patched1.txt.attr new file mode 100644 index 0000000000..4590bb2e0a --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/patched1.txt.attr @@ -0,0 +1,11 @@ +{ + "schema"=<"strict"=%true; "unique_keys"=%false>[ + {"name"="key";"type"="string"}; + {"name"="subkey";"type"="string"}; + {"name"="value";"type"="string"}; + ]; + "_yql_row_spec"={ + "TypePatch"=["StructType";[ + ]]; + }; +} diff --git a/yt/yql/tests/sql/suites/schema/patched2.txt.attr b/yt/yql/tests/sql/suites/schema/patched2.txt.attr new file mode 100644 index 0000000000..2ee1e38628 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/patched2.txt.attr @@ -0,0 +1,11 @@ +{ + "schema"=<"strict"=%true; "unique_keys"=%false>[ + {"name"="key";"type"="string";"required"=%true;"sort_order"="ascending"}; + {"name"="subkey";"type"="string";"required"=%true;"sort_order"="ascending"}; + {"name"="value";"type"="string";"required"=%true}; + ]; + "_yql_row_spec"={ + "TypePatch"=["StructType";[ + ]]; + }; +} diff --git a/yt/yql/tests/sql/suites/schema/patched3.txt.attr b/yt/yql/tests/sql/suites/schema/patched3.txt.attr new file mode 100644 index 0000000000..5712df5e2d --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/patched3.txt.attr @@ -0,0 +1,15 @@ +{ + "schema"=<"strict"=%true; "unique_keys"=%false>[ + {"name"="key";"type"="string";"required"=%true;"sort_order"="ascending"}; + {"name"="subkey";"type"="string";"required"=%true;"sort_order"="ascending"}; + {"name"="value";"type"="string";"required"=%true}; + ]; + "_yql_row_spec"={ + "TypePatch"=["StructType";[ + ]]; + "SortedBy"=["key"]; + "SortDirections"=[1]; + "SortMembers"=["key"]; + "SortedByTypes"=[["DataType";"String"]]; + }; +} diff --git a/yt/yql/tests/sql/suites/schema/patched4.txt.attr b/yt/yql/tests/sql/suites/schema/patched4.txt.attr new file mode 100644 index 0000000000..8002bb3a8d --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/patched4.txt.attr @@ -0,0 +1,15 @@ +{ + "schema"=<"strict"=%true; "unique_keys"=%false>[ + {"name"="_yql_column_0";"type"="string";"required"=%true;"sort_order"="ascending"}; + {"name"="key";"type"="string";"required"=%true}; + {"name"="subkey";"type"="string";"required"=%true}; + {"name"="value";"type"="string";"required"=%true}; + ]; + "_yql_row_spec"={ + "TypePatch"=["StructType";[]]; + "SortMembers"=["key"]; + "SortedBy"=["_yql_column_0"]; + "SortDirections"=[0]; + "SortedByTypes"=[["DataType";"String"]]; + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/patched5.txt.attr b/yt/yql/tests/sql/suites/schema/patched5.txt.attr new file mode 100644 index 0000000000..9d5ab09f10 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/patched5.txt.attr @@ -0,0 +1,22 @@ +{ + "schema"=<"strict" = %true;"unique_keys" = %false;>[ + {"type" = "any";"required" = %false;"name" = "any_column";}; + {"type" = "boolean";"required" = %true;"name" = "boolean_column";}; + {"type" = "uint16";"required" = %true;"name" = "date_column";}; + {"type" = "double";"required" = %true;"name" = "double_column";}; + {"type" = "int64";"required" = %true;"name" = "int64_column";}; + {"type" = "int64";"required" = %true;"name" = "interval_column";}; + {"type" = "any";"required" = %false;"name" = "list_column";}; + {"type" = "any";"required" = %false;"name" = "null_column";}; + {"type" = "utf8";"required" = %false;"name" = "optional_column";}; + {"type" = "string";"required" = %true;"name" = "string_column";}; + ]; + "_yql_row_spec"={ + "TypePatch"=["StructType";[ + ["null_column";["NullType";];]; + ["list_column";["ListType";["DataType";"Bool"]];]; + ["interval_column";["DataType";"Interval";];]; + ["date_column";["DataType";"Date";];]; + ]]; + }; +} diff --git a/yt/yql/tests/sql/suites/schema/patched6.txt.attr b/yt/yql/tests/sql/suites/schema/patched6.txt.attr new file mode 100644 index 0000000000..75ac5aeb7d --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/patched6.txt.attr @@ -0,0 +1,15 @@ +{ + "schema"=<"strict"=%true; "unique_keys"=%false>[ + {"name"="_yql_column_0";"type"="string";"required"=%true;"sort_order"="ascending"}; + {"name"="key";"type"="string";"required"=%true;"sort_order"="ascending"}; + {"name"="subkey";"type"="string";"required"=%true}; + {"name"="value";"type"="string";"required"=%true}; + ]; + "_yql_row_spec"={ + "TypePatch"=["StructType";[]]; + "SortMembers"=[]; + "SortedBy"=["_yql_column_0";"key"]; + "SortDirections"=[1; 1]; + "SortedByTypes"=[["DataType";"String"];["DataType";"String"]]; + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/patchtype.cfg b/yt/yql/tests/sql/suites/schema/patchtype.cfg new file mode 100644 index 0000000000..f623e8ac73 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/patchtype.cfg @@ -0,0 +1,6 @@ +in Input1 patched1.txt +in Input2 patched2.txt +in Input3 patched3.txt +in Input4 patched4.txt +in Input5 patched5.txt +in Input6 patched6.txt diff --git a/yt/yql/tests/sql/suites/schema/patchtype.sql b/yt/yql/tests/sql/suites/schema/patchtype.sql new file mode 100644 index 0000000000..637cdfbebf --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/patchtype.sql @@ -0,0 +1,8 @@ +USE plato; + +SELECT key, subkey, value FROM Input1; +SELECT key, subkey, value FROM Input2; +SELECT key, subkey, value FROM Input3; +SELECT key, subkey, value FROM Input4; +SELECT any_column, boolean_column, date_column, double_column, int64_column, interval_column, list_column, null_column, optional_column, string_column FROM Input5; +SELECT key, subkey, value FROM Input6; diff --git a/yt/yql/tests/sql/suites/schema/read_schema.txt.attr b/yt/yql/tests/sql/suites/schema/read_schema.txt.attr new file mode 100644 index 0000000000..3176be619e --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/read_schema.txt.attr @@ -0,0 +1,3 @@ +{ + "_read_schema"=[{"type"="int64";"name"="a"};{"type"="uint64";"name"="b"};{"type"="double";"name"="c"};{"type"="string";"name"="d"};{"type"="boolean";name="e"};{"type"="any";"name"="f"}] +} diff --git a/yt/yql/tests/sql/suites/schema/read_schema_change_other.cfg b/yt/yql/tests/sql/suites/schema/read_schema_change_other.cfg new file mode 100644 index 0000000000..2ab8a973ba --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/read_schema_change_other.cfg @@ -0,0 +1,2 @@ +xfail +in Input read_schema_other.txt diff --git a/yt/yql/tests/sql/suites/schema/read_schema_change_other.sql b/yt/yql/tests/sql/suites/schema/read_schema_change_other.sql new file mode 100644 index 0000000000..eb96315c2a --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/read_schema_change_other.sql @@ -0,0 +1,2 @@ +/* custom error:It is forbidden to specify the column '_other'*/ +select * from plato.Input with schema Struct<_other:Yson>; diff --git a/yt/yql/tests/sql/suites/schema/read_schema_no_any.txt.attr b/yt/yql/tests/sql/suites/schema/read_schema_no_any.txt.attr new file mode 100644 index 0000000000..0d717f80ae --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/read_schema_no_any.txt.attr @@ -0,0 +1,3 @@ +{ + "_read_schema"=[{"type"="int64";"name"="a"};{"type"="uint64";"name"="b"};{"type"="double";"name"="c"};{"type"="string";"name"="d"};{"type"="boolean";name="e"}] +} diff --git a/yt/yql/tests/sql/suites/schema/read_schema_other.cfg b/yt/yql/tests/sql/suites/schema/read_schema_other.cfg new file mode 100644 index 0000000000..64822f8de1 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/read_schema_other.cfg @@ -0,0 +1 @@ +in Input read_schema_other.txt diff --git a/yt/yql/tests/sql/suites/schema/read_schema_other.sql b/yt/yql/tests/sql/suites/schema/read_schema_other.sql new file mode 100644 index 0000000000..87b80f3c30 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/read_schema_other.sql @@ -0,0 +1 @@ +select ListSort(DictItems(_other)) as other from plato.Input order by other; diff --git a/yt/yql/tests/sql/suites/schema/read_schema_other.txt.attr b/yt/yql/tests/sql/suites/schema/read_schema_other.txt.attr new file mode 100644 index 0000000000..8a1a87469b --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/read_schema_other.txt.attr @@ -0,0 +1,3 @@ +{ + "_read_schema"=<"strict" = "false";>[{"type"="int64";"name"="a"};{"type"="uint64";"name"="b"};{"type"="double";"name"="c"};{"type"="string";"name"="d"};{"type"="boolean";name="e"};{"type"="any";"name"="f"}] +} diff --git a/yt/yql/tests/sql/suites/schema/read_schema_partial.txt.attr b/yt/yql/tests/sql/suites/schema/read_schema_partial.txt.attr new file mode 100644 index 0000000000..dd019afccd --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/read_schema_partial.txt.attr @@ -0,0 +1,6 @@ +{ + "_read_schema"=[ + {"name"="key";"type"="string"}; + {"name"="value";"type"="string"}; + ] +} diff --git a/yt/yql/tests/sql/suites/schema/remap_desc.cfg b/yt/yql/tests/sql/suites/schema/remap_desc.cfg new file mode 100644 index 0000000000..27e2b96813 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/remap_desc.cfg @@ -0,0 +1 @@ +in Input descending.txt diff --git a/yt/yql/tests/sql/suites/schema/remap_desc.sql b/yt/yql/tests/sql/suites/schema/remap_desc.sql new file mode 100644 index 0000000000..23f8492ae2 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/remap_desc.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +USE plato; + +select TableName() as tn, t.* +from concat(Input, Input) as t; diff --git a/yt/yql/tests/sql/suites/schema/row_spec.txt.attr b/yt/yql/tests/sql/suites/schema/row_spec.txt.attr new file mode 100644 index 0000000000..d2878eb9a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/row_spec.txt.attr @@ -0,0 +1,3 @@ +{ + "_yql_row_spec"={"Type"=["StructType";[["a"; ["OptionalType"; ["DataType"; "Int64"]]]; ["b"; ["OptionalType"; ["DataType"; "Uint64"]]]; ["c"; ["OptionalType"; ["DataType"; "Double"]]]; ["d"; ["OptionalType"; ["DataType"; "String"]]]; ["e"; ["OptionalType"; ["DataType"; "Bool"]]]; ["f"; ["OptionalType"; ["DataType"; "Yson"]]]]]; "UniqueKeys"=%false} +} diff --git a/yt/yql/tests/sql/suites/schema/row_spec_diff_sort.txt.attr b/yt/yql/tests/sql/suites/schema/row_spec_diff_sort.txt.attr new file mode 100644 index 0000000000..86ef9822bb --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/row_spec_diff_sort.txt.attr @@ -0,0 +1,18 @@ +{ + "schema"=<"strict"=%true; "unique_keys"=%false>[ + {"name"="key";"type"="string";"required"=%true;"sort_order"="ascending"}; + {"name"="subkey";"type"="string";"required"=%true}; + {"name"="value";"type"="string";"required"=%true}; + ]; + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]]; + ]]; + "SortedBy"=["key";"subkey"]; + "SortDirections"=[1;1]; + "SortMembers"=["key";"subkey"]; + "SortedByTypes"=[["DataType";"String"];["DataType";"String"]]; + }; +} diff --git a/yt/yql/tests/sql/suites/schema/row_spec_diff_sort2.txt.attr b/yt/yql/tests/sql/suites/schema/row_spec_diff_sort2.txt.attr new file mode 100644 index 0000000000..633e8fe403 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/row_spec_diff_sort2.txt.attr @@ -0,0 +1,19 @@ +{ + "schema"=<"strict"=%true; "unique_keys"=%false>[ + {"name"="subkey";"type"="string";"required"=%true;"sort_order"="ascending"}; + {"name"="key";"type"="string";"required"=%true}; + {"name"="value";"type"="string";"required"=%true}; + ]; + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]]; + ]]; + "TypePatch"=["StructType";[]]; + "SortedBy"=["key";"subkey"]; + "SortDirections"=[1;1]; + "SortMembers"=["key";"subkey"]; + "SortedByTypes"=[["DataType";"String"];["DataType";"String"]]; + }; +} diff --git a/yt/yql/tests/sql/suites/schema/row_spec_diff_sort_desc.txt.attr b/yt/yql/tests/sql/suites/schema/row_spec_diff_sort_desc.txt.attr new file mode 100644 index 0000000000..6e70786e68 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/row_spec_diff_sort_desc.txt.attr @@ -0,0 +1,25 @@ +{ + "schema"=<"strict"=%true; "unique_keys"=%false>[ + {"name"="key";"type"="string";"required"=%true;"sort_order"="ascending"}; + {"name"="subkey";"type"="string";"required"=%true}; + {"name"="value";"type"="string";"required"=%true}; + {"name"="_yql_column_0";"type"="string";"required"=%true}; + ]; + "_yql_row_spec" = { + "SortMembers" = ["key"]; + "SortDirections" = [0]; + "UniqueKeys" = %false; + "Type" = ["StructType";[ + ["key"; ["DataType";"String"]]; + ["subkey"; ["DataType";"String"]]; + ["value"; ["DataType";"String"]]; + ]]; + "TypePath" = ["StructType";[]]; + "SortedByTypes" = [ + ["DataType";"String"] + ]; + "SortedBy" = [ + "_yql_column_0" + ] + } +} diff --git a/yt/yql/tests/sql/suites/schema/row_spec_extra_sort.txt.attr b/yt/yql/tests/sql/suites/schema/row_spec_extra_sort.txt.attr new file mode 100644 index 0000000000..aefafb171b --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/row_spec_extra_sort.txt.attr @@ -0,0 +1,18 @@ +{ + "schema"=<"strict"=%true; "unique_keys"=%false>[ + {"name"="key";"type"="string";"required"=%true}; + {"name"="subkey";"type"="string";"required"=%true}; + {"name"="value";"type"="string";"required"=%true}; + ]; + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]]; + ]]; + "SortedBy"=["key"]; + "SortDirections"=[1]; + "SortMembers"=["key"]; + "SortedByTypes"=[["DataType";"String"]]; + }; +} diff --git a/yt/yql/tests/sql/suites/schema/row_spec_hide_sort.txt.attr b/yt/yql/tests/sql/suites/schema/row_spec_hide_sort.txt.attr new file mode 100644 index 0000000000..f1cc5f542d --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/row_spec_hide_sort.txt.attr @@ -0,0 +1,12 @@ +{ + "schema"=<"strict"=%false; "schema_mode"="weak"; "unique_keys"=%false>[ + {"name"="key";"type"="any";"required"=%false;"sort_order"="ascending"}; + ]; + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]]; + ]]; + }; +} diff --git a/yt/yql/tests/sql/suites/schema/row_spec_part.txt.attr b/yt/yql/tests/sql/suites/schema/row_spec_part.txt.attr new file mode 100644 index 0000000000..6216178a50 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/row_spec_part.txt.attr @@ -0,0 +1,12 @@ +{ + "schema"=<"strict"=%true; "unique_keys"=%false>[ + {"name"="key";"type"="string";"required"=%true}; + {"name"="subkey";"type"="string";"required"=%true}; + {"name"="value";"type"="string";"required"=%true}; + ]; + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ]]; + }; +} diff --git a/yt/yql/tests/sql/suites/schema/row_spec_with_default_values.cfg b/yt/yql/tests/sql/suites/schema/row_spec_with_default_values.cfg new file mode 100644 index 0000000000..00014cad5b --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/row_spec_with_default_values.cfg @@ -0,0 +1 @@ +in Input row_spec_with_default_values.txt diff --git a/yt/yql/tests/sql/suites/schema/row_spec_with_default_values.sql b/yt/yql/tests/sql/suites/schema/row_spec_with_default_values.sql new file mode 100644 index 0000000000..684733fe7b --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/row_spec_with_default_values.sql @@ -0,0 +1 @@ +select * from plato.Input; diff --git a/yt/yql/tests/sql/suites/schema/row_spec_with_default_values.txt.attr b/yt/yql/tests/sql/suites/schema/row_spec_with_default_values.txt.attr new file mode 100644 index 0000000000..c59e495acf --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/row_spec_with_default_values.txt.attr @@ -0,0 +1,19 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String";];]; + ["subkey";["DataType";"String";];]; + ["value";["DataType";"String";];]; + ]]; + "SortedBy"=["key";"subkey";]; + "SortDirections"=[1;1;]; + "SortMembers"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "DefaultValues"={"key"="\"\"";"subkey"="\"\"";"value"="\"\"";}; + }; + "schema"=<"strict" = %true> [ + {"type"="string"; "name"="key"; "sort_order"="ascending"}; + {"type"="string"; "name"="subkey"; "sort_order"="ascending"}; + {"type"="string"; "name"="value"} + ] +} diff --git a/yt/yql/tests/sql/suites/schema/schema.txt.attr b/yt/yql/tests/sql/suites/schema/schema.txt.attr new file mode 100644 index 0000000000..ec236b37ae --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/schema.txt.attr @@ -0,0 +1,3 @@ +{ + "schema"=[{"type"="int64";"name"="a"};{"type"="uint64";"name"="b"};{"type"="double";"name"="c"};{"type"="string";"name"="d"};{"type"="boolean";name="e"};{"type"="any";"name"="f"}] +} diff --git a/yt/yql/tests/sql/suites/schema/select_all-read_schema.cfg b/yt/yql/tests/sql/suites/schema/select_all-read_schema.cfg new file mode 100644 index 0000000000..86c772ae1c --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all-read_schema.cfg @@ -0,0 +1 @@ +in Input read_schema.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all-row_spec.cfg b/yt/yql/tests/sql/suites/schema/select_all-row_spec.cfg new file mode 100644 index 0000000000..32ba245472 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all-row_spec.cfg @@ -0,0 +1 @@ +in Input row_spec.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all-row_spec_diff_sort.cfg b/yt/yql/tests/sql/suites/schema/select_all-row_spec_diff_sort.cfg new file mode 100644 index 0000000000..6ddab148ab --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all-row_spec_diff_sort.cfg @@ -0,0 +1 @@ +in Input row_spec_diff_sort.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all-row_spec_diff_sort2.cfg b/yt/yql/tests/sql/suites/schema/select_all-row_spec_diff_sort2.cfg new file mode 100644 index 0000000000..65f896224f --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all-row_spec_diff_sort2.cfg @@ -0,0 +1 @@ +in Input row_spec_diff_sort2.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all-row_spec_diff_sort_desc.cfg b/yt/yql/tests/sql/suites/schema/select_all-row_spec_diff_sort_desc.cfg new file mode 100644 index 0000000000..5c62b38d77 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all-row_spec_diff_sort_desc.cfg @@ -0,0 +1 @@ +in Input row_spec_diff_sort_desc.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all-row_spec_extra_sort.cfg b/yt/yql/tests/sql/suites/schema/select_all-row_spec_extra_sort.cfg new file mode 100644 index 0000000000..69bdda2fb5 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all-row_spec_extra_sort.cfg @@ -0,0 +1 @@ +in Input row_spec_extra_sort.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all-row_spec_hide_sort.cfg b/yt/yql/tests/sql/suites/schema/select_all-row_spec_hide_sort.cfg new file mode 100644 index 0000000000..53f9c737ea --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all-row_spec_hide_sort.cfg @@ -0,0 +1 @@ +in Input row_spec_hide_sort.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all-row_spec_part.cfg b/yt/yql/tests/sql/suites/schema/select_all-row_spec_part.cfg new file mode 100644 index 0000000000..f55b54f2a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all-row_spec_part.cfg @@ -0,0 +1 @@ +in Input row_spec_part.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all-schema.cfg b/yt/yql/tests/sql/suites/schema/select_all-schema.cfg new file mode 100644 index 0000000000..4e26fdc668 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all-schema.cfg @@ -0,0 +1 @@ +in Input schema.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all-yamred_dsv.cfg b/yt/yql/tests/sql/suites/schema/select_all-yamred_dsv.cfg new file mode 100644 index 0000000000..ea928dac01 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all-yamred_dsv.cfg @@ -0,0 +1 @@ +in Input yamred_dsv.txt yamred_dsv diff --git a/yt/yql/tests/sql/suites/schema/select_all-yamred_dsv_raw.cfg b/yt/yql/tests/sql/suites/schema/select_all-yamred_dsv_raw.cfg new file mode 100644 index 0000000000..f3f737a2ec --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all-yamred_dsv_raw.cfg @@ -0,0 +1 @@ +in Input yamred_dsv_raw.txt yamred_dsv diff --git a/yt/yql/tests/sql/suites/schema/select_all.sql b/yt/yql/tests/sql/suites/schema/select_all.sql new file mode 100644 index 0000000000..684733fe7b --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all.sql @@ -0,0 +1 @@ +select * from plato.Input; diff --git a/yt/yql/tests/sql/suites/schema/select_all_forceinferschema.cfg b/yt/yql/tests/sql/suites/schema/select_all_forceinferschema.cfg new file mode 100644 index 0000000000..eeacd081d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_forceinferschema.cfg @@ -0,0 +1,4 @@ +in Input inferschema2.txt +in Input2 inferschema2.txt +in Input3 inferschema2.txt +providers yt diff --git a/yt/yql/tests/sql/suites/schema/select_all_forceinferschema.sql b/yt/yql/tests/sql/suites/schema/select_all_forceinferschema.sql new file mode 100644 index 0000000000..797cbb1364 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_forceinferschema.sql @@ -0,0 +1,3 @@ +select * from plato.Input with forceinferschema; +select * from plato.Input2 with forceinferschema="2"; +select * from plato.Input3 with forceinferschema="3"; diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema-extra_field.cfg b/yt/yql/tests/sql/suites/schema/select_all_inferschema-extra_field.cfg new file mode 100644 index 0000000000..312ba32bff --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema-extra_field.cfg @@ -0,0 +1 @@ +in Input inferschema_extra_field.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema-no_fields.cfg-disabled b/yt/yql/tests/sql/suites/schema/select_all_inferschema-no_fields.cfg-disabled new file mode 100644 index 0000000000..baf0c61076 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema-no_fields.cfg-disabled @@ -0,0 +1 @@ +in Input inferschema_no_fields.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema.cfg b/yt/yql/tests/sql/suites/schema/select_all_inferschema.cfg new file mode 100644 index 0000000000..0d7add8b04 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema.cfg @@ -0,0 +1 @@ +in Input inferschema.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema.sql b/yt/yql/tests/sql/suites/schema/select_all_inferschema.sql new file mode 100644 index 0000000000..a053d0d08a --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema.sql @@ -0,0 +1 @@ +select * from plato.Input with inferscheme; diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema2.cfg b/yt/yql/tests/sql/suites/schema/select_all_inferschema2.cfg new file mode 100644 index 0000000000..80edd303eb --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema2.cfg @@ -0,0 +1,2 @@ +in Input2 inferschema2.txt +in Input3 inferschema2.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema2.sql b/yt/yql/tests/sql/suites/schema/select_all_inferschema2.sql new file mode 100644 index 0000000000..79e591518e --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema2.sql @@ -0,0 +1,2 @@ +select * from plato.Input2 with inferschema="2"; +select * from plato.Input3 with inferschema="3"; diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema_limit.cfg b/yt/yql/tests/sql/suites/schema/select_all_inferschema_limit.cfg new file mode 100644 index 0000000000..0d7add8b04 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema_limit.cfg @@ -0,0 +1 @@ +in Input inferschema.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema_limit.sql b/yt/yql/tests/sql/suites/schema/select_all_inferschema_limit.sql new file mode 100644 index 0000000000..dd3951e482 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema_limit.sql @@ -0,0 +1 @@ +select * from plato.Input with inferscheme limit 2; diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema_op.cfg b/yt/yql/tests/sql/suites/schema/select_all_inferschema_op.cfg new file mode 100644 index 0000000000..0d7add8b04 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema_op.cfg @@ -0,0 +1 @@ +in Input inferschema.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema_op.sql b/yt/yql/tests/sql/suites/schema/select_all_inferschema_op.sql new file mode 100644 index 0000000000..ad16b10591 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema_op.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +/* kikimr can not */ +pragma yt.InferSchemaTableCountThreshold="0"; + +select * from plato.Input with inferscheme; diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema_op_custom_tmp.cfg b/yt/yql/tests/sql/suites/schema/select_all_inferschema_op_custom_tmp.cfg new file mode 100644 index 0000000000..0d7add8b04 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema_op_custom_tmp.cfg @@ -0,0 +1 @@ +in Input inferschema.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema_op_custom_tmp.sql b/yt/yql/tests/sql/suites/schema/select_all_inferschema_op_custom_tmp.sql new file mode 100644 index 0000000000..b1588fd8c3 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema_op_custom_tmp.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* kikimr can not */ +pragma yt.InferSchemaTableCountThreshold="0"; +pragma yt.TmpFolder="custom"; + +select * from plato.Input with inferscheme; diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema_range.cfg b/yt/yql/tests/sql/suites/schema/select_all_inferschema_range.cfg new file mode 100644 index 0000000000..e0dbc3b2d9 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema_range.cfg @@ -0,0 +1,3 @@ +in Input1 inferschema.txt +in Input2 inferschema.txt +in Input3 inferschema.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema_range.sql b/yt/yql/tests/sql/suites/schema/select_all_inferschema_range.sql new file mode 100644 index 0000000000..a610f9cedb --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema_range.sql @@ -0,0 +1,2 @@ +pragma yt.InferSchemaTableCountThreshold="0"; +select * from plato.range(``, Input1, Input3) with inferscheme; diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema_range_empty_fail.cfg b/yt/yql/tests/sql/suites/schema/select_all_inferschema_range_empty_fail.cfg new file mode 100644 index 0000000000..c2ff0dfe88 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema_range_empty_fail.cfg @@ -0,0 +1,4 @@ +xfail +in Input1 inferschema.txt +in Input2 empty.txt +in Input3 inferschema.txt diff --git a/yt/yql/tests/sql/suites/schema/select_all_inferschema_range_empty_fail.sql b/yt/yql/tests/sql/suites/schema/select_all_inferschema_range_empty_fail.sql new file mode 100644 index 0000000000..60e0887a84 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_all_inferschema_range_empty_fail.sql @@ -0,0 +1,3 @@ +/* custom error:Cannot infer schema for table Input2, first 1 row(s) has no columns*/ +pragma yt.InferSchemaTableCountThreshold="0"; +select * from plato.range(``, Input1, Input3) with inferscheme; diff --git a/yt/yql/tests/sql/suites/schema/select_field-read_schema.cfg b/yt/yql/tests/sql/suites/schema/select_field-read_schema.cfg new file mode 100644 index 0000000000..86c772ae1c --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_field-read_schema.cfg @@ -0,0 +1 @@ +in Input read_schema.txt diff --git a/yt/yql/tests/sql/suites/schema/select_field-row_spec.cfg b/yt/yql/tests/sql/suites/schema/select_field-row_spec.cfg new file mode 100644 index 0000000000..32ba245472 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_field-row_spec.cfg @@ -0,0 +1 @@ +in Input row_spec.txt diff --git a/yt/yql/tests/sql/suites/schema/select_field-schema.cfg b/yt/yql/tests/sql/suites/schema/select_field-schema.cfg new file mode 100644 index 0000000000..4e26fdc668 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_field-schema.cfg @@ -0,0 +1 @@ +in Input schema.txt diff --git a/yt/yql/tests/sql/suites/schema/select_field.sql b/yt/yql/tests/sql/suites/schema/select_field.sql new file mode 100644 index 0000000000..ea246caffb --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_field.sql @@ -0,0 +1 @@ +select a from plato.Input; diff --git a/yt/yql/tests/sql/suites/schema/select_fields_inferschema.cfg b/yt/yql/tests/sql/suites/schema/select_fields_inferschema.cfg new file mode 100644 index 0000000000..0d7add8b04 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_fields_inferschema.cfg @@ -0,0 +1 @@ +in Input inferschema.txt diff --git a/yt/yql/tests/sql/suites/schema/select_fields_inferschema.sql b/yt/yql/tests/sql/suites/schema/select_fields_inferschema.sql new file mode 100644 index 0000000000..2a38709e51 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_fields_inferschema.sql @@ -0,0 +1 @@ +select a, b, d from plato.Input with inferscheme; diff --git a/yt/yql/tests/sql/suites/schema/select_operate_with_columns_simple.sql b/yt/yql/tests/sql/suites/schema/select_operate_with_columns_simple.sql new file mode 100644 index 0000000000..5c1e78aac7 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_operate_with_columns_simple.sql @@ -0,0 +1 @@ +select a + b + c from plato.Input; diff --git a/yt/yql/tests/sql/suites/schema/select_reordered.sql b/yt/yql/tests/sql/suites/schema/select_reordered.sql new file mode 100644 index 0000000000..38d1ad8ee2 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_reordered.sql @@ -0,0 +1 @@ +select b, c, d, e, a, f from plato.Input; diff --git a/yt/yql/tests/sql/suites/schema/select_simple.sql b/yt/yql/tests/sql/suites/schema/select_simple.sql new file mode 100644 index 0000000000..9d081c58a9 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_simple.sql @@ -0,0 +1 @@ +select a as aa, b as bb, c as cc, d as dd, e as ee, f as ff from plato.Input; diff --git a/yt/yql/tests/sql/suites/schema/select_with_map-partial_read_schema.cfg b/yt/yql/tests/sql/suites/schema/select_with_map-partial_read_schema.cfg new file mode 100644 index 0000000000..d19bb07754 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_with_map-partial_read_schema.cfg @@ -0,0 +1 @@ +in Input read_schema_partial.txt diff --git a/yt/yql/tests/sql/suites/schema/select_with_map-sorted_desc.cfg b/yt/yql/tests/sql/suites/schema/select_with_map-sorted_desc.cfg new file mode 100644 index 0000000000..2bcea8c52e --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_with_map-sorted_desc.cfg @@ -0,0 +1 @@ +in Input sorted_desc.txt diff --git a/yt/yql/tests/sql/suites/schema/select_with_map.sql b/yt/yql/tests/sql/suites/schema/select_with_map.sql new file mode 100644 index 0000000000..701896d6aa --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_with_map.sql @@ -0,0 +1 @@ +select * from plato.Input where key > "100";
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/select_yamr_fields.cfg b/yt/yql/tests/sql/suites/schema/select_yamr_fields.cfg new file mode 100644 index 0000000000..f3f737a2ec --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_yamr_fields.cfg @@ -0,0 +1 @@ +in Input yamred_dsv_raw.txt yamred_dsv diff --git a/yt/yql/tests/sql/suites/schema/select_yamr_fields.sql b/yt/yql/tests/sql/suites/schema/select_yamr_fields.sql new file mode 100644 index 0000000000..0447ad6e5a --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/select_yamr_fields.sql @@ -0,0 +1 @@ +select key,subkey from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/skip_complex_type.cfg b/yt/yql/tests/sql/suites/schema/skip_complex_type.cfg new file mode 100644 index 0000000000..23b45796d2 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/skip_complex_type.cfg @@ -0,0 +1 @@ +in Input skip_complex_type.txt diff --git a/yt/yql/tests/sql/suites/schema/skip_complex_type.sql b/yt/yql/tests/sql/suites/schema/skip_complex_type.sql new file mode 100644 index 0000000000..fc573ceb44 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/skip_complex_type.sql @@ -0,0 +1,5 @@ +pragma DqEngine="disable"; +PRAGMA yt.InferSchema; +pragma yt.UseNativeYtTypes="1"; +PRAGMA yt.DefaultMaxJobFails="1"; +select boobee, DictLookup(_other, 'boobee') from plato.Input order by boobee; diff --git a/yt/yql/tests/sql/suites/schema/skip_complex_type.txt.attr b/yt/yql/tests/sql/suites/schema/skip_complex_type.txt.attr new file mode 100644 index 0000000000..a4e88ede97 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/skip_complex_type.txt.attr @@ -0,0 +1,3 @@ +{ + "schema"=<strict=%false>[{name=boobee;required=%true;type=int32;type_v3=int32};{name=xx;required=%false;type=any;type_v3={type_name=optional;item={type_name=variant;elements=[{type=int32};{type=string};{type=double}]}}}] +} diff --git a/yt/yql/tests/sql/suites/schema/skip_complex_type2.cfg b/yt/yql/tests/sql/suites/schema/skip_complex_type2.cfg new file mode 100644 index 0000000000..4848247dcb --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/skip_complex_type2.cfg @@ -0,0 +1 @@ +in Input skip_complex_type2.txt diff --git a/yt/yql/tests/sql/suites/schema/skip_complex_type2.sql b/yt/yql/tests/sql/suites/schema/skip_complex_type2.sql new file mode 100644 index 0000000000..fc573ceb44 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/skip_complex_type2.sql @@ -0,0 +1,5 @@ +pragma DqEngine="disable"; +PRAGMA yt.InferSchema; +pragma yt.UseNativeYtTypes="1"; +PRAGMA yt.DefaultMaxJobFails="1"; +select boobee, DictLookup(_other, 'boobee') from plato.Input order by boobee; diff --git a/yt/yql/tests/sql/suites/schema/skip_complex_type2.txt.attr b/yt/yql/tests/sql/suites/schema/skip_complex_type2.txt.attr new file mode 100644 index 0000000000..7226f6c31c --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/skip_complex_type2.txt.attr @@ -0,0 +1,3 @@ +{ + "schema"=<strict=%false>[{name=boobee;required=%true;type=int32;type_v3=int32};{name=xx;required=%false;type=any;type_v3={type_name=optional;item={type_name=list;item={type_name=struct;members=[{type=int32;name=bee};{type=int32;name=foo}]}}}}] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/sorted.txt.attr b/yt/yql/tests/sql/suites/schema/sorted.txt.attr new file mode 100644 index 0000000000..ed13e20223 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/sorted.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/schema/sorted_desc.txt.attr b/yt/yql/tests/sql/suites/schema/sorted_desc.txt.attr new file mode 100644 index 0000000000..903b4c7d93 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/sorted_desc.txt.attr @@ -0,0 +1,46 @@ +{ + "_yql_row_spec" = { + "SortMembers" = [ + "key" + ]; + "SortDirections" = [ + 0 + ]; + "UniqueKeys" = %false; + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ]; + "SortedByTypes" = [ + [ + "DataType"; + "String" + ] + ]; + "SortedBy" = [ + "_yql_column_0" + ] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/unsorted.txt.attr b/yt/yql/tests/sql/suites/schema/unsorted.txt.attr new file mode 100644 index 0000000000..3176be619e --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/unsorted.txt.attr @@ -0,0 +1,3 @@ +{ + "_read_schema"=[{"type"="int64";"name"="a"};{"type"="uint64";"name"="b"};{"type"="double";"name"="c"};{"type"="string";"name"="d"};{"type"="boolean";name="e"};{"type"="any";"name"="f"}] +} diff --git a/yt/yql/tests/sql/suites/schema/user_schema_append.cfg b/yt/yql/tests/sql/suites/schema/user_schema_append.cfg new file mode 100644 index 0000000000..e523b0a1e4 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_append.cfg @@ -0,0 +1,3 @@ +in Input input.txt +out Input input.txt +xfail diff --git a/yt/yql/tests/sql/suites/schema/user_schema_append.sql b/yt/yql/tests/sql/suites/schema/user_schema_append.sql new file mode 100644 index 0000000000..f1b86675c3 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_append.sql @@ -0,0 +1,6 @@ +/* custom error:Table "Input" row type differs from the written row type: Struct<-subkey:String>*/ +USE plato; + +INSERT INTO Input +SELECT * FROM Input WITH SCHEMA Struct<key:String, value:String>; + diff --git a/yt/yql/tests/sql/suites/schema/user_schema_bind.sql b/yt/yql/tests/sql/suites/schema/user_schema_bind.sql new file mode 100644 index 0000000000..778aeae870 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_bind.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +use plato; + +$table = "In" || "put"; + +select * +from $table +with schema Struct<a:Int64?>; diff --git a/yt/yql/tests/sql/suites/schema/user_schema_directread.sql b/yt/yql/tests/sql/suites/schema/user_schema_directread.sql new file mode 100644 index 0000000000..0699179524 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_directread.sql @@ -0,0 +1,8 @@ +use plato; + +pragma directread; + +$in = (select * from Input where a != 0); + +select * from $in; + diff --git a/yt/yql/tests/sql/suites/schema/user_schema_empty_table_ranges.sql b/yt/yql/tests/sql/suites/schema/user_schema_empty_table_ranges.sql new file mode 100644 index 0000000000..5e70b05ab1 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_empty_table_ranges.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +use plato; + +select * +from range("","foo","foo") +with schema Struct<Key:String>; + +select * +from Range_strict("","foo","foo") +with schema Struct<Key:String>; + +select * from Each(ListCreate(String)) +with schema Struct<Key:Int32>; + +select * from Each_strict(ListCreate(String)) +with schema Struct<Key:Int32>; diff --git a/yt/yql/tests/sql/suites/schema/user_schema_existing_column.cfg b/yt/yql/tests/sql/suites/schema/user_schema_existing_column.cfg new file mode 100644 index 0000000000..f246051d81 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_existing_column.cfg @@ -0,0 +1 @@ +in Input input_no_schema.txt diff --git a/yt/yql/tests/sql/suites/schema/user_schema_existing_column.sql b/yt/yql/tests/sql/suites/schema/user_schema_existing_column.sql new file mode 100644 index 0000000000..021311a6a7 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_existing_column.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +use plato; + +select * from Input with schema Struct<key:String>;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/user_schema_missing_column.cfg b/yt/yql/tests/sql/suites/schema/user_schema_missing_column.cfg new file mode 100644 index 0000000000..f246051d81 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_missing_column.cfg @@ -0,0 +1 @@ +in Input input_no_schema.txt diff --git a/yt/yql/tests/sql/suites/schema/user_schema_missing_column.sql b/yt/yql/tests/sql/suites/schema/user_schema_missing_column.sql new file mode 100644 index 0000000000..ae68ca4339 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_missing_column.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +use plato; + +select * from Input with schema Struct<value1:String?>;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/user_schema_mix1.cfg b/yt/yql/tests/sql/suites/schema/user_schema_mix1.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_mix1.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/schema/user_schema_mix1.sql b/yt/yql/tests/sql/suites/schema/user_schema_mix1.sql new file mode 100644 index 0000000000..ceda4b7624 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_mix1.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +USE plato; + +SELECT * FROM Input; +SELECT * FROM Input WITH SCHEMA Struct<key:String, value:String>; + diff --git a/yt/yql/tests/sql/suites/schema/user_schema_mix2.cfg b/yt/yql/tests/sql/suites/schema/user_schema_mix2.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_mix2.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/schema/user_schema_mix2.sql b/yt/yql/tests/sql/suites/schema/user_schema_mix2.sql new file mode 100644 index 0000000000..52885ab1b9 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_mix2.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +USE plato; + +SELECT * FROM Input WITH SCHEMA Struct<key:String, value:String>; +SELECT * FROM Input; + diff --git a/yt/yql/tests/sql/suites/schema/user_schema_mix3.cfg b/yt/yql/tests/sql/suites/schema/user_schema_mix3.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_mix3.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/schema/user_schema_mix3.sql b/yt/yql/tests/sql/suites/schema/user_schema_mix3.sql new file mode 100644 index 0000000000..83bb1a6a1f --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_mix3.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +USE plato; + +SELECT * FROM Input WITH SCHEMA Struct<key:String, subkey:String, value:String>; +SELECT * FROM Input; + diff --git a/yt/yql/tests/sql/suites/schema/user_schema_no_infer.cfg b/yt/yql/tests/sql/suites/schema/user_schema_no_infer.cfg new file mode 100644 index 0000000000..964ee21a18 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_no_infer.cfg @@ -0,0 +1 @@ +in Input empty_no_schema.txt diff --git a/yt/yql/tests/sql/suites/schema/user_schema_no_infer.sql b/yt/yql/tests/sql/suites/schema/user_schema_no_infer.sql new file mode 100644 index 0000000000..1c3343a295 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_no_infer.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +use plato; +pragma yt.InferSchema; + +select * from Input with schema Struct<key:String>;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/user_schema_override.cfg b/yt/yql/tests/sql/suites/schema/user_schema_override.cfg new file mode 100644 index 0000000000..cf3e367ee4 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_override.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Input input.txt diff --git a/yt/yql/tests/sql/suites/schema/user_schema_override.sql b/yt/yql/tests/sql/suites/schema/user_schema_override.sql new file mode 100644 index 0000000000..126fe3f86d --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_override.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +USE plato; + +INSERT INTO Input WITH TRUNCATE +SELECT * FROM Input WITH SCHEMA Struct<key:String, value:String>; diff --git a/yt/yql/tests/sql/suites/schema/user_schema_patch_columns.cfg b/yt/yql/tests/sql/suites/schema/user_schema_patch_columns.cfg new file mode 100644 index 0000000000..f246051d81 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_patch_columns.cfg @@ -0,0 +1 @@ +in Input input_no_schema.txt diff --git a/yt/yql/tests/sql/suites/schema/user_schema_patch_columns.sql b/yt/yql/tests/sql/suites/schema/user_schema_patch_columns.sql new file mode 100644 index 0000000000..a40ef2d04b --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_patch_columns.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +use plato; +pragma yt.InferSchema; + +select ListSort(DictItems(_other)) as _other,key,subkey from Input with columns Struct<key:Utf8, subkey:String?>;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/schema/user_schema_with_sort.cfg b/yt/yql/tests/sql/suites/schema/user_schema_with_sort.cfg new file mode 100644 index 0000000000..7f2ba236c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_with_sort.cfg @@ -0,0 +1,2 @@ +in Input1 sorted.txt +in Input2 sorted_desc.txt diff --git a/yt/yql/tests/sql/suites/schema/user_schema_with_sort.sql b/yt/yql/tests/sql/suites/schema/user_schema_with_sort.sql new file mode 100644 index 0000000000..442c257187 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/user_schema_with_sort.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +USE plato; + +SELECT * FROM Input1 WITH SCHEMA Struct<key:String, value:String> ORDER BY key; +SELECT * FROM Input1 WITH SCHEMA Struct<key:String?, subkey:String> ORDER BY key; -- should reset sort +SELECT * FROM Input2 WITH SCHEMA Struct<key:String, subkey:String> ORDER BY key DESC; diff --git a/yt/yql/tests/sql/suites/schema/yamred_dsv.txt.attr b/yt/yql/tests/sql/suites/schema/yamred_dsv.txt.attr new file mode 100644 index 0000000000..b6264f0dfc --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/yamred_dsv.txt.attr @@ -0,0 +1,4 @@ +{ + "_format"=<"fs"="\t";"rs"="\n";"has_subkey"=%true;"escape_carriage_return"=%true;"key_column_names"=["key"];"subkey_column_names"=["subkey"]>"yamred_dsv"; + "_yql_read_udf"="Dsv.ReadRecord" +} diff --git a/yt/yql/tests/sql/suites/schema/yamred_dsv_raw.txt.attr b/yt/yql/tests/sql/suites/schema/yamred_dsv_raw.txt.attr new file mode 100644 index 0000000000..0a26cb14d4 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/yamred_dsv_raw.txt.attr @@ -0,0 +1,11 @@ +{ + "_format" = < + "escape_carriage_return" = %true; + "has_subkey" = %false; + "key_column_names" = [ + "a"; + "b" + ]; + > + "yamred_dsv"; +} diff --git a/yt/yql/tests/sql/suites/schema/yamred_dsv_select_from_dict.cfg b/yt/yql/tests/sql/suites/schema/yamred_dsv_select_from_dict.cfg new file mode 100644 index 0000000000..ea928dac01 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/yamred_dsv_select_from_dict.cfg @@ -0,0 +1 @@ +in Input yamred_dsv.txt yamred_dsv diff --git a/yt/yql/tests/sql/suites/schema/yamred_dsv_select_from_dict.sql b/yt/yql/tests/sql/suites/schema/yamred_dsv_select_from_dict.sql new file mode 100644 index 0000000000..6c22e21f41 --- /dev/null +++ b/yt/yql/tests/sql/suites/schema/yamred_dsv_select_from_dict.sql @@ -0,0 +1,2 @@ +/* syntax version 1 */ +select key as key, subkey as subkey, Input.`dict`["a"] as a, Input.`dict`["b"] as b, Input.`dict`["c"] as c, Input.`dict`["d"] as d from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/anon_clash.cfg b/yt/yql/tests/sql/suites/select/anon_clash.cfg new file mode 100644 index 0000000000..5dae597903 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/anon_clash.cfg @@ -0,0 +1 @@ +xfail diff --git a/yt/yql/tests/sql/suites/select/anon_clash.sql b/yt/yql/tests/sql/suites/select/anon_clash.sql new file mode 100644 index 0000000000..b4b62d51cf --- /dev/null +++ b/yt/yql/tests/sql/suites/select/anon_clash.sql @@ -0,0 +1,9 @@ +/* custom error: Table "a" does not exist */ +use plato; + +insert into @a select 1 as t; + +commit; + +select * from @a; +select * from a; diff --git a/yt/yql/tests/sql/suites/select/append_to_value.cfg b/yt/yql/tests/sql/suites/select/append_to_value.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/append_to_value.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/select/append_to_value.sql b/yt/yql/tests/sql/suites/select/append_to_value.sql new file mode 100644 index 0000000000..399241b7b6 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/append_to_value.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select key, subkey, value || "foo" as new_value from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/append_to_value_1000.cfg b/yt/yql/tests/sql/suites/select/append_to_value_1000.cfg new file mode 100644 index 0000000000..97c9faa1f7 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/append_to_value_1000.cfg @@ -0,0 +1,2 @@ +in Input input1100.txt +providers yt diff --git a/yt/yql/tests/sql/suites/select/append_to_value_1000.sql b/yt/yql/tests/sql/suites/select/append_to_value_1000.sql new file mode 100644 index 0000000000..c86c8d13cd --- /dev/null +++ b/yt/yql/tests/sql/suites/select/append_to_value_1000.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* kikimr can not - no ref select mode */ +select key, subkey, value || "foo" as new_value from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/autoextract_source_value.sql b/yt/yql/tests/sql/suites/select/autoextract_source_value.sql new file mode 100644 index 0000000000..8a865b85c7 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/autoextract_source_value.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +use plato; + +$_data = (SELECT key as kk, subkey as sk, value as val FROM plato.Input WHERE key == '075'); +$data_one_key = (SELECT subkey as sk FROM plato.Input WHERE key == '075'); + +SELECT * FROM Input WHERE key = $data_one_key; diff --git a/yt/yql/tests/sql/suites/select/backtick_with_escapes.sql b/yt/yql/tests/sql/suites/select/backtick_with_escapes.sql new file mode 100644 index 0000000000..c8120b41bc --- /dev/null +++ b/yt/yql/tests/sql/suites/select/backtick_with_escapes.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +USE plato; +SELECT key as `#[k]ey`, subkey as `#[s]ubkey`, value as `\x5bv\x5dalue#` FROM Input; diff --git a/yt/yql/tests/sql/suites/select/bit_ops.sql b/yt/yql/tests/sql/suites/select/bit_ops.sql new file mode 100644 index 0000000000..b7fd34b68b --- /dev/null +++ b/yt/yql/tests/sql/suites/select/bit_ops.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +SELECT + LENGTH(key) & LENGTH(value) as and_res, + LENGTH(key) | LENGTH(value) as or_res, + LENGTH(key) ^ LENGTH(value) as xor_res, + LENGTH(key) << 1 as shl_res, + LENGTH(key) >> 1 as shr_res, + LENGTH(key) |<< 15 as rotl_res, + LENGTH(key) >>| 15 as rotr_res, + ~LENGTH(key) as not_res +FROM plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/boolean_where.cfg b/yt/yql/tests/sql/suites/select/boolean_where.cfg new file mode 100644 index 0000000000..a09f034ddd --- /dev/null +++ b/yt/yql/tests/sql/suites/select/boolean_where.cfg @@ -0,0 +1 @@ +in Input boolean_where.txt diff --git a/yt/yql/tests/sql/suites/select/boolean_where.sql b/yt/yql/tests/sql/suites/select/boolean_where.sql new file mode 100644 index 0000000000..c12a9b6022 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/boolean_where.sql @@ -0,0 +1,2 @@ +select * from plato.Input where e; +select a from plato.Input where not e; diff --git a/yt/yql/tests/sql/suites/select/boolean_where.txt.attr b/yt/yql/tests/sql/suites/select/boolean_where.txt.attr new file mode 100644 index 0000000000..3176be619e --- /dev/null +++ b/yt/yql/tests/sql/suites/select/boolean_where.txt.attr @@ -0,0 +1,3 @@ +{ + "_read_schema"=[{"type"="int64";"name"="a"};{"type"="uint64";"name"="b"};{"type"="double";"name"="c"};{"type"="string";"name"="d"};{"type"="boolean";name="e"};{"type"="any";"name"="f"}] +} diff --git a/yt/yql/tests/sql/suites/select/braces.sql b/yt/yql/tests/sql/suites/select/braces.sql new file mode 100644 index 0000000000..55834ff839 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/braces.sql @@ -0,0 +1 @@ +select key, subkey, ("foo" || "bar") as value from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/calculated_values.sql b/yt/yql/tests/sql/suites/select/calculated_values.sql new file mode 100644 index 0000000000..f23c91eaf8 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/calculated_values.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* can not check this with postgres becouse order of columns is not specified here */ +select key, (value || "ab"), (value || "a"), value from plato.Input order by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/cast_double_to_uint32.sql b/yt/yql/tests/sql/suites/select/cast_double_to_uint32.sql new file mode 100644 index 0000000000..4e9d9f6737 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/cast_double_to_uint32.sql @@ -0,0 +1 @@ +select key, subkey, cast(cast(3.1415 as smallint) as varchar) as value from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/column_labels.sql b/yt/yql/tests/sql/suites/select/column_labels.sql new file mode 100644 index 0000000000..eacf0460c9 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/column_labels.sql @@ -0,0 +1 @@ +select key, subkey || value from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/complex_filter_with_order.sql b/yt/yql/tests/sql/suites/select/complex_filter_with_order.sql new file mode 100644 index 0000000000..6ed86d9d92 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/complex_filter_with_order.sql @@ -0,0 +1 @@ +select key as value, subkey, value as key from plato.Input where value > "A" and length(value) = cast(3 as smallint) order by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/complex_view_input.txt.attr b/yt/yql/tests/sql/suites/select/complex_view_input.txt.attr new file mode 100644 index 0000000000..a9108a292e --- /dev/null +++ b/yt/yql/tests/sql/suites/select/complex_view_input.txt.attr @@ -0,0 +1,32 @@ +{ + "_yql_view_struct"="SELECT YQL::@@(AsStruct '('k (Member row 'key)) '('s (Member row 'subkey)) '('v (Member row 'value)))@@ as struct FROM self;"; + "_yql_view_tuple"="SELECT YQL::@@'((Member row 'key) (Member row 'subkey) (Member row 'value))@@ as tuple FROM self;"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/select/const_subrequest_and_select_by_all.sql b/yt/yql/tests/sql/suites/select/const_subrequest_and_select_by_all.sql new file mode 100644 index 0000000000..405f199c6b --- /dev/null +++ b/yt/yql/tests/sql/suites/select/const_subrequest_and_select_by_all.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +USE plato; + +$input = (FROM Input SELECT key ORDER BY key LIMIT 3); + +--insert into Output +SELECT * FROM $input; + +SELECT * FROM Input WHERE key = $input; diff --git a/yt/yql/tests/sql/suites/select/corr_name_in_select.sql b/yt/yql/tests/sql/suites/select/corr_name_in_select.sql new file mode 100644 index 0000000000..10294f918d --- /dev/null +++ b/yt/yql/tests/sql/suites/select/corr_name_in_select.sql @@ -0,0 +1 @@ +select b.sortkey from (select a.key as sortkey from plato.Input as a) as b order by b.sortkey desc; diff --git a/yt/yql/tests/sql/suites/select/corr_name_in_select_seq.sql b/yt/yql/tests/sql/suites/select/corr_name_in_select_seq.sql new file mode 100644 index 0000000000..514b9f94cb --- /dev/null +++ b/yt/yql/tests/sql/suites/select/corr_name_in_select_seq.sql @@ -0,0 +1 @@ +select c.key from (select b.key from (select a.key from plato.Input as a) as b) as c order by c.key; diff --git a/yt/yql/tests/sql/suites/select/create_structures.sql b/yt/yql/tests/sql/suites/select/create_structures.sql new file mode 100644 index 0000000000..79baf49bb3 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/create_structures.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select (key as k), (subkey as s, value as v) from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/create_tuples.sql b/yt/yql/tests/sql/suites/select/create_tuples.sql new file mode 100644 index 0000000000..84387a3b06 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/create_tuples.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select (key,), (subkey, value) from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/deep_udf_call.cfg b/yt/yql/tests/sql/suites/select/deep_udf_call.cfg new file mode 100644 index 0000000000..55c2f97264 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/deep_udf_call.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt +udf math_udf diff --git a/yt/yql/tests/sql/suites/select/deep_udf_call.sql b/yt/yql/tests/sql/suites/select/deep_udf_call.sql new file mode 100644 index 0000000000..03bceb447b --- /dev/null +++ b/yt/yql/tests/sql/suites/select/deep_udf_call.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +USE plato; + +$data = ( + SELECT + Math::Pi() * CAST(subkey AS Double) AS rad + FROM Input +); + +--INSERT INTO Output +SELECT Math::Sqrt(Math::Sin(rad) * Math::Sin(rad) + Math::Cos(rad) * Math::Cos(rad)) FROM $data diff --git a/yt/yql/tests/sql/suites/select/default.cfg b/yt/yql/tests/sql/suites/select/default.cfg new file mode 100644 index 0000000000..a1f7a5a9b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/default.cfg @@ -0,0 +1,4 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/select/dict_lookup.sql b/yt/yql/tests/sql/suites/select/dict_lookup.sql new file mode 100644 index 0000000000..50f85dd099 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/dict_lookup.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; +$dictList = (select + AsDict(AsTuple(value, CAST(subkey AS Int32))) as `dict`, + AsDict(AsTuple("z", "a"), AsTuple("y", "b")) AS d, + subkey, value +from Input); + +select d["z"] as static, input.`dict`[input.value] as dynamic, input.`dict` as `dict` from $dictList as input; diff --git a/yt/yql/tests/sql/suites/select/dict_lookup_by_key.sql b/yt/yql/tests/sql/suites/select/dict_lookup_by_key.sql new file mode 100644 index 0000000000..9a7feebcae --- /dev/null +++ b/yt/yql/tests/sql/suites/select/dict_lookup_by_key.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +$key_text = AsDict( + ('911', 'emergency'), + ('200', 'two hundred'), + ('150', 'one and half hundred'), + ('023', 'funny'), + ('075', '3/4 of hundred') +); + +SELECT + value, + $key_text[key] as key_text +from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/dict_lookup_by_key_with_def.sql b/yt/yql/tests/sql/suites/select/dict_lookup_by_key_with_def.sql new file mode 100644 index 0000000000..19011f7714 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/dict_lookup_by_key_with_def.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ +$key_text = AsDict( + ('911', 'emergency'), + ('200', 'two hundred'), + ('150', 'one and half hundred'), + ('023', 'funny'), + ('075', '3/4 of hundred') +); + +SELECT + value, + $key_text[key] ?? "unknown" as key_text +from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/dict_lookup_column_names.sql b/yt/yql/tests/sql/suites/select/dict_lookup_column_names.sql new file mode 100644 index 0000000000..6ee1151214 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/dict_lookup_column_names.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; +$dictList = (select AsDict(AsTuple(value, CAST(subkey AS Int32))) as `dict`, subkey, value from Input); +select input.`dict`[input.value], input.`dict`[input.subkey] from $dictList as input; diff --git a/yt/yql/tests/sql/suites/select/dict_with_few_keys.sql b/yt/yql/tests/sql/suites/select/dict_with_few_keys.sql new file mode 100644 index 0000000000..b2a1601612 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/dict_with_few_keys.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +$dict = ( +SELECT + AsDict( + AsTuple("key", cast(key as uint32) ?? 0), + AsTuple("sk", cast(subkey as uint32) ?? 1), + AsTuple("str", Cast(ByteAt(value, 0) as uint32) ?? 256) + ) as dd +FROM Input); + +--INSERT INTO Output +SELECT dd['key'] as key, dd['str'] as zz from $dict as d ORDER BY key, zz diff --git a/yt/yql/tests/sql/suites/select/discard.sql b/yt/yql/tests/sql/suites/select/discard.sql new file mode 100644 index 0000000000..f1f3423811 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/discard.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +use plato; +pragma DisableSimpleColumns; +discard select 1; +discard select * from Input; +discard select * from Input where key<"foo"; +discard select * from Input as a join Input as b using(key); +discard select sum(length(value)), key, subkey from Input group by rollup(key,subkey) order by key, subkey; +discard select * from (select key || "a" || "b" as key from Input) as a join (select key || "ab" as key from Input) as b using(key); diff --git a/yt/yql/tests/sql/suites/select/dot_in_alias.sql b/yt/yql/tests/sql/suites/select/dot_in_alias.sql new file mode 100644 index 0000000000..0f5f81aae8 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/dot_in_alias.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +USE plato; +PRAGMA AllowDotInAlias; + +--INSERT INTO Output +SELECT key as `.key`, subkey as `sub.key`, value as `value.` FROM Input ORDER BY `.key`, `sub.key` diff --git a/yt/yql/tests/sql/suites/select/dot_name_subrequest.sql b/yt/yql/tests/sql/suites/select/dot_name_subrequest.sql new file mode 100644 index 0000000000..a685c26f29 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/dot_name_subrequest.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +USE plato; +PRAGMA DisableSimpleColumns; + +$req = (SELECT 100500 as magic, t.* FROM Input as t); + +--INSERT INTO Output +SELECT `t.subkey` as sk, `t.value` as val FROM $req ORDER BY sk diff --git a/yt/yql/tests/sql/suites/select/exists_false.sql b/yt/yql/tests/sql/suites/select/exists_false.sql new file mode 100644 index 0000000000..dd4564a387 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/exists_false.sql @@ -0,0 +1 @@ +SELECT EXISTS (SELECT * FROM plato.Input WHERE key = 'none') from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/exists_true.sql b/yt/yql/tests/sql/suites/select/exists_true.sql new file mode 100644 index 0000000000..163f223faf --- /dev/null +++ b/yt/yql/tests/sql/suites/select/exists_true.sql @@ -0,0 +1 @@ +SELECT EXISTS (SELECT 'Cool') from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/from_in_front.sql b/yt/yql/tests/sql/suites/select/from_in_front.sql new file mode 100644 index 0000000000..70b0c1c356 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/from_in_front.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +from plato.Input select * order by key, subkey limit 1; diff --git a/yt/yql/tests/sql/suites/select/from_in_front_sub.sql b/yt/yql/tests/sql/suites/select/from_in_front_sub.sql new file mode 100644 index 0000000000..e611f8c661 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/from_in_front_sub.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +from + (select cast(subkey as Double) / cast(key as Double) as val, value from plato.Input2) as res +select + count(val) as subkey, + cast(avg(val) as int) as value, + value as key +group by value +order by subkey, value;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/hits_count.cfg b/yt/yql/tests/sql/suites/select/hits_count.cfg new file mode 100644 index 0000000000..3dd8c79387 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/hits_count.cfg @@ -0,0 +1,3 @@ +in Input1 hits_input1.txt +in Input2 hits_input2.txt +udf url_udf
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/hits_count.sql b/yt/yql/tests/sql/suites/select/hits_count.sql new file mode 100644 index 0000000000..df10886307 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/hits_count.sql @@ -0,0 +1,33 @@ +/* postgres can not */ +USE plato; + +$data = ( + SELECT + Url::Normalize(value) AS normalized_url, + Url::GetHost(Url::Normalize(value)) AS host, + Url::GetDomain(Url::Normalize(value), 1) AS tld + FROM CONCAT( + `Input1`, + `Input2` + ) +); +$ru_hosts = ( + SELECT + host + FROM + $data + WHERE normalized_url IS NOT NULL AND ( + tld = "ru" + OR tld = "su" + OR tld = "рф" + OR tld = "xn--p1ai" -- punycode рф + ) +); + +SELECT + host AS host, + COUNT(*) AS hits_count +FROM $ru_hosts +GROUP BY host +ORDER BY hits_count DESC +LIMIT 25; diff --git a/yt/yql/tests/sql/suites/select/host_count.cfg b/yt/yql/tests/sql/suites/select/host_count.cfg new file mode 100644 index 0000000000..72fa41ff1f --- /dev/null +++ b/yt/yql/tests/sql/suites/select/host_count.cfg @@ -0,0 +1,3 @@ +in Input1 host_input1.txt +in Input2 host_input2.txt +udf url_udf diff --git a/yt/yql/tests/sql/suites/select/host_count.sql b/yt/yql/tests/sql/suites/select/host_count.sql new file mode 100644 index 0000000000..eed3d6c9fa --- /dev/null +++ b/yt/yql/tests/sql/suites/select/host_count.sql @@ -0,0 +1,33 @@ +/* postgres can not */ +USE plato; + +$data = ( + SELECT + Url::Normalize(url) AS normalized_url, + Url::GetHost(Url::Normalize(url)) AS host, + Url::GetDomain(Url::Normalize(url), 1) AS tld + FROM CONCAT( + `Input1`, + `Input2` + ) +); +$ru_hosts = ( + SELECT + tld, + host + FROM + $data + WHERE normalized_url IS NOT NULL AND ( + tld = "ru" + OR tld = "su" + OR tld = "рф" + OR tld = "xn--p1ai" -- punycode рф + ) +); + +SELECT + tld, + COUNT(DISTINCT host) AS hosts_count +FROM $ru_hosts +GROUP BY tld +ORDER BY hosts_count DESC; diff --git a/yt/yql/tests/sql/suites/select/host_input1.txt.attr b/yt/yql/tests/sql/suites/select/host_input1.txt.attr new file mode 100644 index 0000000000..fb4f4c76a0 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/host_input1.txt.attr @@ -0,0 +1,16 @@ +{ + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "url"; + [ + "DataType"; + "String" + ] + ]; + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/select/host_input2.txt.attr b/yt/yql/tests/sql/suites/select/host_input2.txt.attr new file mode 100644 index 0000000000..fb4f4c76a0 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/host_input2.txt.attr @@ -0,0 +1,16 @@ +{ + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "url"; + [ + "DataType"; + "String" + ] + ]; + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/select/if.sql b/yt/yql/tests/sql/suites/select/if.sql new file mode 100644 index 0000000000..69b35b586e --- /dev/null +++ b/yt/yql/tests/sql/suites/select/if.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +SELECT + if(LENGTH(value) > 2, "long", "short") AS if, + if(false, 3) AS no_else +FROM plato.Input +; diff --git a/yt/yql/tests/sql/suites/select/input_struct_field.txt.attr b/yt/yql/tests/sql/suites/select/input_struct_field.txt.attr new file mode 100644 index 0000000000..bcc8251d99 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/input_struct_field.txt.attr @@ -0,0 +1,11 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["StructType";[ + ["kk";["DataType";"String"]]; + ]]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]]; + ]]; + } +} diff --git a/yt/yql/tests/sql/suites/select/literal_bool.sql b/yt/yql/tests/sql/suites/select/literal_bool.sql new file mode 100644 index 0000000000..0cd9f9bac2 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/literal_bool.sql @@ -0,0 +1 @@ +select key, subkey, cast(true as varchar) as value from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/literal_negative.sql b/yt/yql/tests/sql/suites/select/literal_negative.sql new file mode 100644 index 0000000000..de18406964 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/literal_negative.sql @@ -0,0 +1 @@ +select key, subkey, cast(-1 as varchar) as value from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/logical_ops.sql b/yt/yql/tests/sql/suites/select/logical_ops.sql new file mode 100644 index 0000000000..062a3366d7 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/logical_ops.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +SELECT + LENGTH(key) == 3 AND LENGTH(value) == 3 as and_res, + LENGTH(key) == 3 OR LENGTH(value) == 3 as or_res, + LENGTH(key) == 3 XOR LENGTH(value) == 3 as xor_res +FROM plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/match_clause.cfg b/yt/yql/tests/sql/suites/select/match_clause.cfg new file mode 100644 index 0000000000..93eff5b6bc --- /dev/null +++ b/yt/yql/tests/sql/suites/select/match_clause.cfg @@ -0,0 +1,5 @@ +in Input input.txt +in Input2 input2.txt +in Input3 input3.txt +udf re2_udf +udf pire_udf diff --git a/yt/yql/tests/sql/suites/select/match_clause.sql b/yt/yql/tests/sql/suites/select/match_clause.sql new file mode 100644 index 0000000000..9efb61a9a0 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/match_clause.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +/* syntax version 1 */ +select key, subkey, value from plato.Input +where value match "q"; diff --git a/yt/yql/tests/sql/suites/select/missing_with_nonpersist.cfg b/yt/yql/tests/sql/suites/select/missing_with_nonpersist.cfg new file mode 100644 index 0000000000..1f1d2747db --- /dev/null +++ b/yt/yql/tests/sql/suites/select/missing_with_nonpersist.cfg @@ -0,0 +1,2 @@ +in Input input.txt +providers yt diff --git a/yt/yql/tests/sql/suites/select/missing_with_nonpersist.sql b/yt/yql/tests/sql/suites/select/missing_with_nonpersist.sql new file mode 100644 index 0000000000..82fe2a092b --- /dev/null +++ b/yt/yql/tests/sql/suites/select/missing_with_nonpersist.sql @@ -0,0 +1,10 @@ +USE plato; + +$data = select + Yson::Parse(cast(key as Yson)) as key, + text, -- missing colums + subkey +from Input; + +select key, subkey +from $data; diff --git a/yt/yql/tests/sql/suites/select/multi_source_issue.sql b/yt/yql/tests/sql/suites/select/multi_source_issue.sql new file mode 100644 index 0000000000..16e9fb83fc --- /dev/null +++ b/yt/yql/tests/sql/suites/select/multi_source_issue.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +USE plato; + +$i = (SELECT * FROM Input2); +$ii = (SELECT * FROM Input4); + +$count_a=(SELECT count(*) FROM $i WHERE substring(value, 0, 1) = 'a'); + +--INSERT INTO Output +SELECT + count(*), count(*)/$count_a +FROM $i; + +--INSERT INTO Output +SELECT + count(*), count(*)/$count_a +FROM $ii; diff --git a/yt/yql/tests/sql/suites/select/one_labeled_column.sql b/yt/yql/tests/sql/suites/select/one_labeled_column.sql new file mode 100644 index 0000000000..3ff643663c --- /dev/null +++ b/yt/yql/tests/sql/suites/select/one_labeled_column.sql @@ -0,0 +1 @@ +select key as wat from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/one_unlabeled_column.sql b/yt/yql/tests/sql/suites/select/one_unlabeled_column.sql new file mode 100644 index 0000000000..f7104a1585 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/one_unlabeled_column.sql @@ -0,0 +1 @@ +select key from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/opt_list_access.sql b/yt/yql/tests/sql/suites/select/opt_list_access.sql new file mode 100644 index 0000000000..ed06206b42 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/opt_list_access.sql @@ -0,0 +1,7 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +$data = (SELECT key, Just(aggregate_list(cast(subkey as uint32))) as lsk FROM plato.Input GROUP BY cast(key as uint32) as key); + +SELECT key, lsk[0] FROM $data WHERE lsk IS NOT NULL ORDER BY key; diff --git a/yt/yql/tests/sql/suites/select/optional_as_warn.sql b/yt/yql/tests/sql/suites/select/optional_as_warn.sql new file mode 100644 index 0000000000..1dd720af5d --- /dev/null +++ b/yt/yql/tests/sql/suites/select/optional_as_warn.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* dq can not */ +/* dqfile can not */ +/* yt can not */ +use plato; + +pragma AnsiOptionalAs; + +select + key subkey, + value v, +from Input order by subkey; + + +select + key AS subkey, + value v, +from Input order by subkey; diff --git a/yt/yql/tests/sql/suites/select/optional_in_job.cfg b/yt/yql/tests/sql/suites/select/optional_in_job.cfg new file mode 100644 index 0000000000..00dec6c3f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/optional_in_job.cfg @@ -0,0 +1 @@ +res result.txt diff --git a/yt/yql/tests/sql/suites/select/optional_in_job.sql b/yt/yql/tests/sql/suites/select/optional_in_job.sql new file mode 100644 index 0000000000..f41bd2f579 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/optional_in_job.sql @@ -0,0 +1,34 @@ +/* postgres can not */ +/* multirun can not */ +USE plato; + +insert into @a +SELECT + Yql::Nothing(OptionalType(DataType("String"))) as level1_null, + Yql::Optional(OptionalType(DataType("String")), "val") as level1_just_val, + Yql::Nothing(OptionalType(OptionalType(DataType("String")))) as level2_null, + Yql::Optional(OptionalType(OptionalType(DataType("String"))), Yql::Nothing(OptionalType(DataType("String")))) as level2_just_null, + Yql::Optional(OptionalType(OptionalType(DataType("String"))), Yql::Just("val")) as level2_just_just_val, + Yql::Nothing(OptionalType(OptionalType(OptionalType(DataType("String"))))) as level3_null, + Yql::Optional(OptionalType(OptionalType(OptionalType(DataType("String")))), Yql::Nothing(OptionalType(OptionalType(DataType("String"))))) as level3_just_null, + Yql::Optional(OptionalType(OptionalType(OptionalType(DataType("String")))), Yql::Just(Yql::Nothing(OptionalType(DataType("String"))))) as level3_just_just_null, + Yql::Optional(OptionalType(OptionalType(OptionalType(DataType("String")))), Yql::Just(Yql::Just("val"))) as level3_just_just_just_val, + "const" as const +; + +commit; + +-- Everything should be True +select + level1_null is null, + Yql::Unwrap(level1_just_val) = "val", + level2_null is null, + Yql::Unwrap(level2_just_null) is null, + Yql::Unwrap(Yql::Unwrap(level2_just_just_val)) = "val", + level3_null is null, + Yql::Unwrap(level3_just_null) is null, + Yql::Unwrap(Yql::Unwrap(level3_just_just_null)) is null, + Yql::Unwrap(Yql::Unwrap(Yql::Unwrap(level3_just_just_just_val))) = "val", + True +from @a +where const = "const"; diff --git a/yt/yql/tests/sql/suites/select/optional_pull.cfg b/yt/yql/tests/sql/suites/select/optional_pull.cfg new file mode 100644 index 0000000000..00dec6c3f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/optional_pull.cfg @@ -0,0 +1 @@ +res result.txt diff --git a/yt/yql/tests/sql/suites/select/optional_pull.sql b/yt/yql/tests/sql/suites/select/optional_pull.sql new file mode 100644 index 0000000000..fd5e736f64 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/optional_pull.sql @@ -0,0 +1,32 @@ +/* postgres can not */ +/* multirun can not */ +USE plato; + +insert into @a +SELECT + Yql::Nothing(OptionalType(DataType("String"))) as level1_null, + Yql::Optional(OptionalType(DataType("String")), "val") as level1_just_val, + Yql::Nothing(OptionalType(OptionalType(DataType("String")))) as level2_null, + Yql::Optional(OptionalType(OptionalType(DataType("String"))), Yql::Nothing(OptionalType(DataType("String")))) as level2_just_null, + Yql::Optional(OptionalType(OptionalType(DataType("String"))), Yql::Just("val")) as level2_just_just_val, + Yql::Nothing(OptionalType(OptionalType(OptionalType(DataType("String"))))) as level3_null, + Yql::Optional(OptionalType(OptionalType(OptionalType(DataType("String")))), Yql::Nothing(OptionalType(OptionalType(DataType("String"))))) as level3_just_null, + Yql::Optional(OptionalType(OptionalType(OptionalType(DataType("String")))), Yql::Just(Yql::Nothing(OptionalType(DataType("String"))))) as level3_just_just_null, + Yql::Optional(OptionalType(OptionalType(OptionalType(DataType("String")))), Yql::Just(Yql::Just("val"))) as level3_just_just_just_val, + "const" as const +; + +commit; + +-- Check result representation +select + level1_null, + level1_just_val, + level2_null, + level2_just_null, + level2_just_just_val, + level3_null, + level3_just_null, + level3_just_just_null, + level3_just_just_just_val +from @a; diff --git a/yt/yql/tests/sql/suites/select/qualified_all_and_group_by.sql b/yt/yql/tests/sql/suites/select/qualified_all_and_group_by.sql new file mode 100644 index 0000000000..2b45add62e --- /dev/null +++ b/yt/yql/tests/sql/suites/select/qualified_all_and_group_by.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +/* syntax version 1 */ + +USE plato; +PRAGMA DisableSimpleColumns; + +--INSERT INTO Output +SELECT + hundred_keys, sum(cast(`data.subkey` as uint32)) +FROM ( + SELECT data.key as dkey, data.* + FROM Input as data +) as middle +GROUP BY + cast(middle.dkey as uint32)/100 as hundred_keys +ORDER BY hundred_keys diff --git a/yt/yql/tests/sql/suites/select/quoted_ids.sql b/yt/yql/tests/sql/suites/select/quoted_ids.sql new file mode 100644 index 0000000000..39d4f4de71 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/quoted_ids.sql @@ -0,0 +1,2 @@ +/* do not execute */ +select `A%%B`, `A'`, `A\"\"`, `A ` from plato.`C-D`;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/quoted_ids_with_escapes.sql b/yt/yql/tests/sql/suites/select/quoted_ids_with_escapes.sql new file mode 100644 index 0000000000..637616a655 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/quoted_ids_with_escapes.sql @@ -0,0 +1,2 @@ +/* do not execute */ +select `A\\a`, `\"A\\b\"` from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/read_schema.txt.attr b/yt/yql/tests/sql/suites/select/read_schema.txt.attr new file mode 100644 index 0000000000..3176be619e --- /dev/null +++ b/yt/yql/tests/sql/suites/select/read_schema.txt.attr @@ -0,0 +1,3 @@ +{ + "_read_schema"=[{"type"="int64";"name"="a"};{"type"="uint64";"name"="b"};{"type"="double";"name"="c"};{"type"="string";"name"="d"};{"type"="boolean";name="e"};{"type"="any";"name"="f"}] +} diff --git a/yt/yql/tests/sql/suites/select/refselect-1000.cfg b/yt/yql/tests/sql/suites/select/refselect-1000.cfg new file mode 100644 index 0000000000..1bae01480b --- /dev/null +++ b/yt/yql/tests/sql/suites/select/refselect-1000.cfg @@ -0,0 +1,2 @@ +in test_table_src input1100.txt +providers yt,dq diff --git a/yt/yql/tests/sql/suites/select/refselect.cfg b/yt/yql/tests/sql/suites/select/refselect.cfg new file mode 100644 index 0000000000..8763f366de --- /dev/null +++ b/yt/yql/tests/sql/suites/select/refselect.cfg @@ -0,0 +1,2 @@ +in test_table_src input.txt +providers yt,dq diff --git a/yt/yql/tests/sql/suites/select/refselect.sql b/yt/yql/tests/sql/suites/select/refselect.sql new file mode 100644 index 0000000000..7043d7b364 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/refselect.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +USE plato; +PRAGMA refselect; +SELECT key, subkey, value FROM `test_table_src`; diff --git a/yt/yql/tests/sql/suites/select/result_rows_limit.cfg b/yt/yql/tests/sql/suites/select/result_rows_limit.cfg new file mode 100644 index 0000000000..1f1d2747db --- /dev/null +++ b/yt/yql/tests/sql/suites/select/result_rows_limit.cfg @@ -0,0 +1,2 @@ +in Input input.txt +providers yt diff --git a/yt/yql/tests/sql/suites/select/result_rows_limit.sql b/yt/yql/tests/sql/suites/select/result_rows_limit.sql new file mode 100644 index 0000000000..614d4928c6 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/result_rows_limit.sql @@ -0,0 +1,7 @@ +/* kikimr can not - no refs */ +/* postgres can not */ +USE plato; +pragma ResultRowsLimit="2"; + +SELECT key||"a" as key FROM Input order by key; +SELECT key||"b" as key FROM Input order by key; diff --git a/yt/yql/tests/sql/suites/select/result_size_limit.cfg b/yt/yql/tests/sql/suites/select/result_size_limit.cfg new file mode 100644 index 0000000000..1f1d2747db --- /dev/null +++ b/yt/yql/tests/sql/suites/select/result_size_limit.cfg @@ -0,0 +1,2 @@ +in Input input.txt +providers yt diff --git a/yt/yql/tests/sql/suites/select/result_size_limit.sql b/yt/yql/tests/sql/suites/select/result_size_limit.sql new file mode 100644 index 0000000000..df0d9d6fd6 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/result_size_limit.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* kikimr can not - no refs */ +USE plato; +pragma ResultSizeLimit="25"; + +SELECT key||"a" as key FROM Input order by key; +SELECT key||"b" as key FROM Input order by key; diff --git a/yt/yql/tests/sql/suites/select/result_size_limit_with_fill.cfg b/yt/yql/tests/sql/suites/select/result_size_limit_with_fill.cfg new file mode 100644 index 0000000000..1f1d2747db --- /dev/null +++ b/yt/yql/tests/sql/suites/select/result_size_limit_with_fill.cfg @@ -0,0 +1,2 @@ +in Input input.txt +providers yt diff --git a/yt/yql/tests/sql/suites/select/result_size_limit_with_fill.sql b/yt/yql/tests/sql/suites/select/result_size_limit_with_fill.sql new file mode 100644 index 0000000000..d6394b5d0f --- /dev/null +++ b/yt/yql/tests/sql/suites/select/result_size_limit_with_fill.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* kikimr can not - no refs */ +USE plato; +pragma ResultSizeLimit="25"; + +SELECT key||"a" as key FROM Input order by key; +SELECT key||"b" as key FROM Input order by key; +SELECT 1 + 1; +SELECT 2 + 2; diff --git a/yt/yql/tests/sql/suites/select/reuse_named_node.sql b/yt/yql/tests/sql/suites/select/reuse_named_node.sql new file mode 100644 index 0000000000..238865d79d --- /dev/null +++ b/yt/yql/tests/sql/suites/select/reuse_named_node.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +USE plato; +$x = ($key) -> { return "aa" || $key }; +select $x(key) from Input; +select $x(key) from Input; diff --git a/yt/yql/tests/sql/suites/select/sampleselect-1000.cfg b/yt/yql/tests/sql/suites/select/sampleselect-1000.cfg new file mode 100644 index 0000000000..115c212714 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/sampleselect-1000.cfg @@ -0,0 +1 @@ +in Input input1100.txt diff --git a/yt/yql/tests/sql/suites/select/sampleselect.cfg b/yt/yql/tests/sql/suites/select/sampleselect.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/sampleselect.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/select/sampleselect.sql b/yt/yql/tests/sql/suites/select/sampleselect.sql new file mode 100644 index 0000000000..d6700cb9b3 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/sampleselect.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +pragma sampleselect; +select key, subkey, value || "foo" as new_value from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/scalar_subquery.sql b/yt/yql/tests/sql/suites/select/scalar_subquery.sql new file mode 100644 index 0000000000..f5644ed27f --- /dev/null +++ b/yt/yql/tests/sql/suites/select/scalar_subquery.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +$query = ( +select AsTuple(count(*),min(value)) FROM plato.Input +--WHERE 1=0 +); +select $query ?? AsTuple(0,"") as cnt; diff --git a/yt/yql/tests/sql/suites/select/scalar_subquery_with_star.sql b/yt/yql/tests/sql/suites/select/scalar_subquery_with_star.sql new file mode 100644 index 0000000000..29e0be1919 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/scalar_subquery_with_star.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* syntax version 1 */ + +$single = (select key from plato.Input); +$all = (select * from $single order by key limit 100); +select $all; + diff --git a/yt/yql/tests/sql/suites/select/select_all.sql b/yt/yql/tests/sql/suites/select/select_all.sql new file mode 100644 index 0000000000..684733fe7b --- /dev/null +++ b/yt/yql/tests/sql/suites/select/select_all.sql @@ -0,0 +1 @@ +select * from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/select_all_filtered.sql b/yt/yql/tests/sql/suites/select/select_all_filtered.sql new file mode 100644 index 0000000000..73574ab4d4 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/select_all_filtered.sql @@ -0,0 +1,2 @@ +select * from plato.Input where value = "ddd"; + diff --git a/yt/yql/tests/sql/suites/select/select_all_from_concat.sql b/yt/yql/tests/sql/suites/select/select_all_from_concat.sql new file mode 100644 index 0000000000..2f22f7a461 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/select_all_from_concat.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.concat(Input2, Input3); diff --git a/yt/yql/tests/sql/suites/select/select_all_from_concat_anon.sql b/yt/yql/tests/sql/suites/select/select_all_from_concat_anon.sql new file mode 100644 index 0000000000..967844883c --- /dev/null +++ b/yt/yql/tests/sql/suites/select/select_all_from_concat_anon.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +USE plato; + +insert into @foo +select 1; + +commit; + +$name = "fo" || "o"; +select * from concat(@foo,@$name); diff --git a/yt/yql/tests/sql/suites/select/select_all_group_by_column.cfg b/yt/yql/tests/sql/suites/select/select_all_group_by_column.cfg new file mode 100644 index 0000000000..c7e99df4d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/select_all_group_by_column.cfg @@ -0,0 +1 @@ +in Input input_expr.txt diff --git a/yt/yql/tests/sql/suites/select/select_all_group_by_column.sql b/yt/yql/tests/sql/suites/select/select_all_group_by_column.sql new file mode 100644 index 0000000000..d2dc93b17b --- /dev/null +++ b/yt/yql/tests/sql/suites/select/select_all_group_by_column.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select * from plato.Input group by subkey order by subkey; diff --git a/yt/yql/tests/sql/suites/select/select_all_ordered.sql b/yt/yql/tests/sql/suites/select/select_all_ordered.sql new file mode 100644 index 0000000000..1021bb94cb --- /dev/null +++ b/yt/yql/tests/sql/suites/select/select_all_ordered.sql @@ -0,0 +1,3 @@ +select * from plato.Input order by value; + + diff --git a/yt/yql/tests/sql/suites/select/select_concrete_detailed_columns.sql b/yt/yql/tests/sql/suites/select/select_concrete_detailed_columns.sql new file mode 100644 index 0000000000..577f255c97 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/select_concrete_detailed_columns.sql @@ -0,0 +1 @@ +select i.key, i.subkey from plato.Input as i; diff --git a/yt/yql/tests/sql/suites/select/shift_columns.sql b/yt/yql/tests/sql/suites/select/shift_columns.sql new file mode 100644 index 0000000000..60938dc01c --- /dev/null +++ b/yt/yql/tests/sql/suites/select/shift_columns.sql @@ -0,0 +1 @@ +select key as subkey, subkey as value, value as key from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/simple_struct_field_access.cfg b/yt/yql/tests/sql/suites/select/simple_struct_field_access.cfg new file mode 100644 index 0000000000..2dbce9ede0 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/simple_struct_field_access.cfg @@ -0,0 +1 @@ +in Input input_struct_field.txt diff --git a/yt/yql/tests/sql/suites/select/simple_struct_field_access.sql b/yt/yql/tests/sql/suites/select/simple_struct_field_access.sql new file mode 100644 index 0000000000..a140ab624d --- /dev/null +++ b/yt/yql/tests/sql/suites/select/simple_struct_field_access.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +use plato; +select key.kk, subkey, value from Input diff --git a/yt/yql/tests/sql/suites/select/struct_access_without_table_name.cfg b/yt/yql/tests/sql/suites/select/struct_access_without_table_name.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/struct_access_without_table_name.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/select/struct_access_without_table_name.sql b/yt/yql/tests/sql/suites/select/struct_access_without_table_name.sql new file mode 100644 index 0000000000..0a3446a339 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/struct_access_without_table_name.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +use plato; + +$data = ( select + cast(key as uint32) % 10 as mod, + (key as kk, subkey as sk) as struct_field, + value +from Input); + +--INSERT INTO Output +SELECT + mod, + struct_field.kk as mod_key, + struct_field.sk, + d.value +FROM $data as d +order by mod_key, value +; diff --git a/yt/yql/tests/sql/suites/select/struct_members.sql b/yt/yql/tests/sql/suites/select/struct_members.sql new file mode 100644 index 0000000000..4fd4c403d8 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/struct_members.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +use plato; +$structList = (select AsStruct(key as k, value as v) as `struct` from Input); +select input.`struct`.k as key, input.`struct`.v as value, input.`struct` as `struct` from $structList as input; diff --git a/yt/yql/tests/sql/suites/select/substring.sql b/yt/yql/tests/sql/suites/select/substring.sql new file mode 100644 index 0000000000..469b7bc3aa --- /dev/null +++ b/yt/yql/tests/sql/suites/select/substring.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* syntax version 1 */ +select + substring(key, 1, 1) as char, + substring(value, 1) as tail +from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/substring_v1.sql b/yt/yql/tests/sql/suites/select/substring_v1.sql new file mode 100644 index 0000000000..566e8c9401 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/substring_v1.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* syntax version 1 */ +-- in v1 substring returns Null as a result for missing value +select + substring(key, 1, 1) as char, + substring(value, 1) as tail +from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/sum_to_string.sql b/yt/yql/tests/sql/suites/select/sum_to_string.sql new file mode 100644 index 0000000000..59d6860ebb --- /dev/null +++ b/yt/yql/tests/sql/suites/select/sum_to_string.sql @@ -0,0 +1 @@ +select key, subkey, cast(1 + 1 as varchar) as value from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/swap_columns.sql b/yt/yql/tests/sql/suites/select/swap_columns.sql new file mode 100644 index 0000000000..61e848ab7b --- /dev/null +++ b/yt/yql/tests/sql/suites/select/swap_columns.sql @@ -0,0 +1 @@ +select key, subkey as value, value as subkey from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/table_content_from_double_opt.sql b/yt/yql/tests/sql/suites/select/table_content_from_double_opt.sql new file mode 100644 index 0000000000..472917fe5f --- /dev/null +++ b/yt/yql/tests/sql/suites/select/table_content_from_double_opt.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +insert into @tmp with truncate +select Just(Just(key)) as key from Input; + +commit; + +$key = select key from @tmp; +select * from Input where key = $key; diff --git a/yt/yql/tests/sql/suites/select/table_content_from_sort_desc.sql b/yt/yql/tests/sql/suites/select/table_content_from_sort_desc.sql new file mode 100644 index 0000000000..efa2818a96 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/table_content_from_sort_desc.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +insert into @tmp with truncate +select key from Input order by key desc; + +commit; + +$key = select key from @tmp; +select * from Input where key = $key; diff --git a/yt/yql/tests/sql/suites/select/table_content_with_tmp_folder.cfg b/yt/yql/tests/sql/suites/select/table_content_with_tmp_folder.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/table_content_with_tmp_folder.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/select/table_content_with_tmp_folder.sql b/yt/yql/tests/sql/suites/select/table_content_with_tmp_folder.sql new file mode 100644 index 0000000000..04a6ecb98b --- /dev/null +++ b/yt/yql/tests/sql/suites/select/table_content_with_tmp_folder.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* kikimr can not */ +use plato; +pragma yt.MapJoinLimit="1M"; +pragma yt.TmpFolder="//custom_tmp"; + +-- MapJoin with table content +$input = (select cast(a.key as Uint64) as key from Input as a cross join Input as b); + +-- ResFill with table content +select sum(key) from $input; diff --git a/yt/yql/tests/sql/suites/select/table_funcs_spec.sql b/yt/yql/tests/sql/suites/select/table_funcs_spec.sql new file mode 100644 index 0000000000..87cbdfe0dc --- /dev/null +++ b/yt/yql/tests/sql/suites/select/table_funcs_spec.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ +/* kikimr can not */ +use plato; + +--insert into Output +select + TablePath() as table_path, + TableRecordIndex() as table_rec, + TableName("foo/bar") as table_name1, + TableName("baz") as table_name2, + TableName() as table_name3 +from Input +where key = '800' +; diff --git a/yt/yql/tests/sql/suites/select/tablename_with_table_row.sql b/yt/yql/tests/sql/suites/select/tablename_with_table_row.sql new file mode 100644 index 0000000000..3080bcf52c --- /dev/null +++ b/yt/yql/tests/sql/suites/select/tablename_with_table_row.sql @@ -0,0 +1,11 @@ +USE plato; + +SELECT + TableName() AS tn, + ROW_NUMBER() OVER () AS rowid, +FROM + Input +WHERE + key > "010" +ORDER BY rowid +; diff --git a/yt/yql/tests/sql/suites/select/tablepathprefix.sql b/yt/yql/tests/sql/suites/select/tablepathprefix.sql new file mode 100644 index 0000000000..f543356ff0 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/tablepathprefix.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +pragma TablePathPrefix = "//"; + +$input = "In" || "put"; + +select * from `Input` order by subkey; +select * from $input order by subkey; diff --git a/yt/yql/tests/sql/suites/select/to_dict.sql b/yt/yql/tests/sql/suites/select/to_dict.sql new file mode 100644 index 0000000000..7c1e8e85bd --- /dev/null +++ b/yt/yql/tests/sql/suites/select/to_dict.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +/* syntax version 1 */ +SELECT + key, + ToDict(items) AS `dict`, + ToMultiDict(items) AS multi_dict +FROM ( + SELECT + key, + AGGREGATE_LIST(AsTuple(subkey, value)) AS items + FROM ( + SELECT * FROM plato.Input + UNION ALL + SELECT * FROM plato.Input + ) GROUP BY key +) +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/select/trivial_between.sql b/yt/yql/tests/sql/suites/select/trivial_between.sql new file mode 100644 index 0000000000..38d14ec4a7 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/trivial_between.sql @@ -0,0 +1,3 @@ +select * from ( + select key as key, coalesce(cast(subkey as int), 0) as subkey, value as value from plato.Input +) as x where subkey between 1 and 3 order by key, subkey; diff --git a/yt/yql/tests/sql/suites/select/trivial_group_by.sql b/yt/yql/tests/sql/suites/select/trivial_group_by.sql new file mode 100644 index 0000000000..8475eeda7d --- /dev/null +++ b/yt/yql/tests/sql/suites/select/trivial_group_by.sql @@ -0,0 +1 @@ +select key, Min(subkey) as subkey, Max(value) as value from plato.Input group by key order by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/trivial_having.sql b/yt/yql/tests/sql/suites/select/trivial_having.sql new file mode 100644 index 0000000000..5ad1424027 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/trivial_having.sql @@ -0,0 +1 @@ +select key, "WAT" as subkey, Max(value) as value from plato.Input group by key having Max(value) = "FOO";
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/trivial_order_by.sql b/yt/yql/tests/sql/suites/select/trivial_order_by.sql new file mode 100644 index 0000000000..b087520e60 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/trivial_order_by.sql @@ -0,0 +1 @@ +select key, subkey, value from plato.Input order by key;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/trivial_where-many.cfg b/yt/yql/tests/sql/suites/select/trivial_where-many.cfg new file mode 100644 index 0000000000..67bb5475e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/trivial_where-many.cfg @@ -0,0 +1 @@ +in Input trivial_where-many.txt diff --git a/yt/yql/tests/sql/suites/select/trivial_where-one.cfg b/yt/yql/tests/sql/suites/select/trivial_where-one.cfg new file mode 100644 index 0000000000..7e850225a0 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/trivial_where-one.cfg @@ -0,0 +1 @@ +in Input trivial_where.txt diff --git a/yt/yql/tests/sql/suites/select/trivial_where.sql b/yt/yql/tests/sql/suites/select/trivial_where.sql new file mode 100644 index 0000000000..f7c092f14c --- /dev/null +++ b/yt/yql/tests/sql/suites/select/trivial_where.sql @@ -0,0 +1 @@ +select key, subkey, value from plato.Input where key = subkey;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/two_selects_with_diff_fields.sql b/yt/yql/tests/sql/suites/select/two_selects_with_diff_fields.sql new file mode 100644 index 0000000000..3b7b8d1e32 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/two_selects_with_diff_fields.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +select key from plato.Input; +select key, subkey, value from plato.Input; diff --git a/yt/yql/tests/sql/suites/select/type_assert.sql b/yt/yql/tests/sql/suites/select/type_assert.sql new file mode 100644 index 0000000000..c634446b93 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/type_assert.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +/* syntax version 1 */ +use plato; +select EnsureType(cast(key as Int64), Int64?, "some text 1") from Input; +select FormatType(EnsureType(TypeOf(1), Int32, "some text 2")); +select FormatType(EnsureType(TypeOf(1), Int32)); + +select EnsureConvertibleTo(cast(key as Int64), Double?, "some text 3") from Input; +select FormatType(EnsureConvertibleTo(TypeOf(1), Int64, "some text 4")); +select FormatType(EnsureConvertibleTo(TypeOf(1), Int64)); diff --git a/yt/yql/tests/sql/suites/select/uncorrelated_subqueries.cfg b/yt/yql/tests/sql/suites/select/uncorrelated_subqueries.cfg new file mode 100644 index 0000000000..f4f8c09a16 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/uncorrelated_subqueries.cfg @@ -0,0 +1,3 @@ +in Input1 input_intersect.txt +in Input2 input_expr.txt + diff --git a/yt/yql/tests/sql/suites/select/uncorrelated_subqueries.sql b/yt/yql/tests/sql/suites/select/uncorrelated_subqueries.sql new file mode 100644 index 0000000000..261f20ec16 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/uncorrelated_subqueries.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +use plato; + +$_data = (SELECT key as kk, subkey as sk, value as val FROM plato.Input1 WHERE key == '075'); +$data_one_key = (SELECT subkey FROM plato.Input1 WHERE key == '075'); + +SELECT * FROM Input2 WHERE key = $data_one_key; diff --git a/yt/yql/tests/sql/suites/select/unlabeled.cfg b/yt/yql/tests/sql/suites/select/unlabeled.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/unlabeled.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/select/unlabeled.sql b/yt/yql/tests/sql/suites/select/unlabeled.sql new file mode 100644 index 0000000000..c904961f66 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/unlabeled.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select key, subkey, value from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/unlabeled_1000.cfg b/yt/yql/tests/sql/suites/select/unlabeled_1000.cfg new file mode 100644 index 0000000000..115c212714 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/unlabeled_1000.cfg @@ -0,0 +1 @@ +in Input input1100.txt diff --git a/yt/yql/tests/sql/suites/select/unlabeled_1000.sql b/yt/yql/tests/sql/suites/select/unlabeled_1000.sql new file mode 100644 index 0000000000..ec52757d06 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/unlabeled_1000.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* kikimr can not - no ref select mode */ +select key, subkey, value from plato.Input order by key, subkey, value; diff --git a/yt/yql/tests/sql/suites/select/use_cluster.sql b/yt/yql/tests/sql/suites/select/use_cluster.sql new file mode 100644 index 0000000000..197a75f9c1 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/use_cluster.sql @@ -0,0 +1,2 @@ +use plato; +select key from Input; diff --git a/yt/yql/tests/sql/suites/select/where_cast.sql b/yt/yql/tests/sql/suites/select/where_cast.sql new file mode 100644 index 0000000000..8ae781dccf --- /dev/null +++ b/yt/yql/tests/sql/suites/select/where_cast.sql @@ -0,0 +1 @@ +select value from plato.Input where cast(key as int) > 100;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/select/where_in.sql b/yt/yql/tests/sql/suites/select/where_in.sql new file mode 100644 index 0000000000..8618c593e6 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/where_in.sql @@ -0,0 +1,7 @@ +SELECT + * +FROM plato.Input +WHERE + "1" IN (key, subkey, value) OR + value NOT IN (key, subkey, value) +; diff --git a/yt/yql/tests/sql/suites/select/where_not_null.cfg b/yt/yql/tests/sql/suites/select/where_not_null.cfg new file mode 100644 index 0000000000..86c772ae1c --- /dev/null +++ b/yt/yql/tests/sql/suites/select/where_not_null.cfg @@ -0,0 +1 @@ +in Input read_schema.txt diff --git a/yt/yql/tests/sql/suites/select/where_not_null.sql b/yt/yql/tests/sql/suites/select/where_not_null.sql new file mode 100644 index 0000000000..a582898978 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/where_not_null.sql @@ -0,0 +1 @@ +select * from plato.Input where a is not null; diff --git a/yt/yql/tests/sql/suites/select/where_with_lambda.cfg b/yt/yql/tests/sql/suites/select/where_with_lambda.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/where_with_lambda.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/select/where_with_lambda.sql b/yt/yql/tests/sql/suites/select/where_with_lambda.sql new file mode 100644 index 0000000000..e2587c8ac0 --- /dev/null +++ b/yt/yql/tests/sql/suites/select/where_with_lambda.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +USE plato; + +$predicate = ($x) -> { + RETURN $x == "911" +}; +$field = "field"; + +SELECT * +FROM Input +WHERE $predicate($field); diff --git a/yt/yql/tests/sql/suites/seq_mode/action_shared_subquery_expr_after_commit.sql b/yt/yql/tests/sql/suites/seq_mode/action_shared_subquery_expr_after_commit.sql new file mode 100644 index 0000000000..b693dcd0a5 --- /dev/null +++ b/yt/yql/tests/sql/suites/seq_mode/action_shared_subquery_expr_after_commit.sql @@ -0,0 +1,12 @@ +pragma SeqMode; +use plato; +define action $a() as + insert into @tmp + select 1; + commit; + $r = select * from @tmp; + select * from $r; + select * from $r; +end define; + +do $a(); diff --git a/yt/yql/tests/sql/suites/seq_mode/default.cfg b/yt/yql/tests/sql/suites/seq_mode/default.cfg new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/yt/yql/tests/sql/suites/seq_mode/default.cfg diff --git a/yt/yql/tests/sql/suites/seq_mode/shared_subquery_expr_after_commit.sql b/yt/yql/tests/sql/suites/seq_mode/shared_subquery_expr_after_commit.sql new file mode 100644 index 0000000000..ec13f4e0fa --- /dev/null +++ b/yt/yql/tests/sql/suites/seq_mode/shared_subquery_expr_after_commit.sql @@ -0,0 +1,9 @@ +use plato; +pragma SeqMode; +insert into @foo +select 1; +commit; +$a = select * from @foo; +select * from $a; +select * from $a; + diff --git a/yt/yql/tests/sql/suites/simple_columns/default.cfg b/yt/yql/tests/sql/suites/simple_columns/default.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/default.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/simple_columns/no_simple_columns_tablerow.sql b/yt/yql/tests/sql/suites/simple_columns/no_simple_columns_tablerow.sql new file mode 100644 index 0000000000..231e9d743e --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/no_simple_columns_tablerow.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +PRAGMA DisableSimpleColumns; + +SELECT 100500 as magic, TableRow() AS tr FROM plato.Input AS t; +SELECT 100500 as magic, t.* FROM plato.Input AS t; + +SELECT +TableRow() AS tr +FROM (SELECT Just(1ul) AS k, 1 AS v1) AS a +JOIN (SELECT 1 AS k, 2 AS v2) AS b +ON a.k = b.k; + +SELECT +* +FROM (SELECT Just(1ul) AS k, 1 AS v1) AS a +JOIN (SELECT 1 AS k, 2 AS v2) AS b +ON a.k = b.k; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_base.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_base.sql new file mode 100644 index 0000000000..2d050f1024 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_base.sql @@ -0,0 +1,4 @@ +PRAGMA SimpleColumns; + +--INSERT INTO plato.Output +SELECT 100500 as magic, t.* FROM plato.Input as t diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_base_fail.cfg b/yt/yql/tests/sql/suites/simple_columns/simple_columns_base_fail.cfg new file mode 100644 index 0000000000..9217c920f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_base_fail.cfg @@ -0,0 +1,2 @@ +xfail +in Input input.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_base_fail.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_base_fail.sql new file mode 100644 index 0000000000..85cca8dbec --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_base_fail.sql @@ -0,0 +1,13 @@ +/* custom error:Duplicated member: magic*/ +PRAGMA SimpleColumns; + +USE plato; + +$req = (SELECT 100500 as magic, t.* FROM Input as t); + +--INSERT INTO Output +SELECT + ff.*, + subkey as magic, -- 'magic' is exist from ff.magic + value as val +FROM $req as ff ORDER BY sk diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_all.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_all.sql new file mode 100644 index 0000000000..8fbba96abe --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_all.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +PRAGMA SimpleColumns; +USE plato; + +$data = (SELECT key as kk, subkey as sk, value as val FROM Input WHERE cast(key as uint32)/100 < 5); + +--INSERT INTO Output +SELECT + * +FROM Input JOIN $data as d ON Input.subkey = cast(cast(d.kk as uint32)/100 as string) +ORDER BY key, val +; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_all_1.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_all_1.sql new file mode 100644 index 0000000000..dbb7d0ba60 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_all_1.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +USE plato; + +pragma SimpleColumns; +pragma DisableCoalesceJoinKeysOnQualifiedAll; + +$foo = select 1 as key, 1 as value1; +$bar = select 1l as key, 2 as value2; + +select * from $foo as foo +join $bar as bar on foo.key = bar.key; + +-- output key has type Int64 + diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_all_2.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_all_2.sql new file mode 100644 index 0000000000..4037bdd680 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_all_2.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +USE plato; + +pragma SimpleColumns; +pragma CoalesceJoinKeysOnQualifiedAll; + +$foo = select 1 as key, 1 as value1; +$bar = select 1l as key, 2 as value2; + +select * from $foo as foo +join $bar as bar on foo.key = bar.key; + +-- output key has type Int64 + diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_bug8923.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_bug8923.sql new file mode 100644 index 0000000000..a4d816e21a --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_bug8923.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +USE plato; + +pragma SimpleColumns; +-- fails with CoalesceJoinKeysOnQualifiedAll +pragma DisableCoalesceJoinKeysOnQualifiedAll; + +$foo = select 1 as key, 1 as value1; +$bar = select 1l as key, 2 as value2; +$baz = select 1l as key, 2 as value3; + + +select foo.* from $foo as foo +join $bar as bar on cast(foo.key as Int32) = bar.key +join $baz as baz on bar.key = baz.key + diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_qualified_all_disable.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_qualified_all_disable.sql new file mode 100644 index 0000000000..633c62c500 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_qualified_all_disable.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +USE plato; + +pragma SimpleColumns; +pragma DisableCoalesceJoinKeysOnQualifiedAll; + +$foo = select 1 as key, 1 as value1; +$bar = select 1l as key, 2 as value2; + +select foo.* from $foo as foo +join $bar as bar on foo.key = bar.key; + +-- output key has type Int32 + diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_qualified_all_enable.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_qualified_all_enable.sql new file mode 100644 index 0000000000..9d55cd5cb4 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_qualified_all_enable.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +USE plato; + +pragma SimpleColumns; +pragma CoalesceJoinKeysOnQualifiedAll; + +$foo = select 1 as key, 1 as value1; +$bar = select 1l as key, 2 as value2; + +select foo.* from $foo as foo +join $bar as bar on foo.key = bar.key; + +-- output key has type Int64 + diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_without_1.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_without_1.sql new file mode 100644 index 0000000000..d3933f7860 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_without_1.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +USE plato; + +pragma SimpleColumns; +pragma DisableCoalesceJoinKeysOnQualifiedAll; + +select + b.* without b.x +from (select * from (select AsList(1, 2, 3) as x, AsList(1, 2) as y) flatten by (x, y)) as a +join (select * from (select AsList(1, 2, 3) as x, AsList(2, 3) as y) flatten by (x, y)) as b +on a.x == b.x and a.y == b.y; + +select + * without b.x +from (select * from (select AsList(1, 2, 3) as x, AsList(1, 2) as y) flatten by (x, y)) as a +join (select * from (select AsList(1, 2, 3) as x, AsList(2, 3) as y) flatten by (x, y)) as b +on a.x == b.x and a.y == b.y + diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_without_2.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_without_2.sql new file mode 100644 index 0000000000..ff33a478ab --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_without_2.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +USE plato; + +pragma SimpleColumns; +pragma CoalesceJoinKeysOnQualifiedAll; + +select + b.* without b.x +from (select * from (select AsList(1, 2, 3) as x, AsList(1, 2) as y) flatten by (x, y)) as a +join (select * from (select AsList(1, 2, 3) as x, AsList(2, 3) as y) flatten by (x, y)) as b +on a.x == b.x and a.y == b.y; + +select + * without b.x +from (select * from (select AsList(1, 2, 3) as x, AsList(1, 2) as y) flatten by (x, y)) as a +join (select * from (select AsList(1, 2, 3) as x, AsList(2, 3) as y) flatten by (x, y)) as b +on a.x == b.x and a.y == b.y + diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_without_left_semi_1.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_without_left_semi_1.sql new file mode 100644 index 0000000000..f2e3ca2c12 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_without_left_semi_1.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +USE plato; + +pragma SimpleColumns; +pragma DisableCoalesceJoinKeysOnQualifiedAll; + +select a.* without a.key, a.value from Input as a left semi join Input as b using(key) order by subkey; +select * without a.key, a.value from Input as a left semi join Input as b using(key) order by subkey; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_without_left_semi_2.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_without_left_semi_2.sql new file mode 100644 index 0000000000..fc85664b2c --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_coalesce_without_left_semi_2.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +USE plato; + +pragma SimpleColumns; +pragma CoalesceJoinKeysOnQualifiedAll; + +select a.* without a.key, a.value from Input as a left semi join Input as b using(key) order by subkey; +select * without a.key, a.value from Input as a left semi join Input as b using(key) order by subkey; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_fail.cfg b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_fail.cfg new file mode 100644 index 0000000000..9217c920f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_fail.cfg @@ -0,0 +1,2 @@ +xfail +in Input input.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_fail.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_fail.sql new file mode 100644 index 0000000000..0605937349 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_fail.sql @@ -0,0 +1,13 @@ +/* custom error:Duplicated member: kk*/ +PRAGMA SimpleColumns; +USE plato; + +$data = (SELECT key as kk, subkey as sk, value as val FROM Input WHERE cast(key as uint32)/100 < 5); + +--INSERT INTO Output +SELECT + d.*, + Input.key as kk -- 'kk' is exist from d.kk +FROM Input JOIN $data as d ON Input.subkey = cast(cast(d.kk as uint32)/100 as string) +ORDER BY key, val +; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_qualified.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_qualified.sql new file mode 100644 index 0000000000..b2cac15f8f --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_qualified.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +PRAGMA SimpleColumns; +USE plato; + +$data = (SELECT key as kk, subkey as sk, value as val FROM Input WHERE cast(key as uint32)/100 < 5); + +--INSERT INTO Output +SELECT + d.*, + key +FROM Input JOIN $data as d ON Input.subkey = cast(cast(d.kk as uint32)/100 as string) +ORDER BY key, val +; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_subreq_all_key_without.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_subreq_all_key_without.sql new file mode 100644 index 0000000000..51b49cdb29 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_subreq_all_key_without.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +PRAGMA SimpleColumns; +USE plato; + +$data = (SELECT key as kk, subkey as sk, value FROM Input WHERE cast(key as uint32)/100 < 5); + +--INSERT INTO Output +SELECT + * +WITHOUT + Input.value +FROM Input JOIN $data as d ON Input.subkey = cast(cast(d.kk as uint32)/100 as string) +ORDER BY key, value +; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_subreq_same_key.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_subreq_same_key.sql new file mode 100644 index 0000000000..5318d327bb --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_subreq_same_key.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +PRAGMA SimpleColumns; +USE plato; + +$data = (SELECT key, subkey as sk, value FROM Input WHERE cast(key as uint32)/100 < 5); + +--INSERT INTO Output +SELECT + d.*, + subkey +FROM Input JOIN $data as d ON Input.key = d.key and Input.value == d.value +ORDER BY key, value +; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_subreq_same_key_by_all.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_subreq_same_key_by_all.sql new file mode 100644 index 0000000000..e75b01c64a --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_subreq_same_key_by_all.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +PRAGMA SimpleColumns; +USE plato; + +$data = (SELECT key, subkey as sk, value FROM Input WHERE cast(key as uint32)/100 < 5); + +--INSERT INTO Output +SELECT + * +FROM Input JOIN $data as d ON Input.key = d.key and Input.value == d.value +ORDER BY key, value +; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_subreq_same_key_without.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_subreq_same_key_without.sql new file mode 100644 index 0000000000..a99ae21f79 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_subreq_same_key_without.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +PRAGMA SimpleColumns; +USE plato; + +$data = (SELECT key as kk, subkey as sk, value FROM Input WHERE cast(key as uint32)/100 < 5); + +--INSERT INTO Output +SELECT + Input.*, + d.value as val +WITHOUT + Input.subkey +FROM Input JOIN $data as d ON Input.subkey = cast(cast(d.kk as uint32)/100 as string) +ORDER BY key, value +; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_without_resolve_dublicates.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_without_resolve_dublicates.sql new file mode 100644 index 0000000000..686bb52cbe --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_without_resolve_dublicates.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +PRAGMA SimpleColumns; +USE plato; + +$data = (SELECT key as kk, subkey as sk, "data: " || value as value FROM Input WHERE cast(key as uint32)/100 < 5); + +--INSERT INTO Output +SELECT + Input.*, + d.*, + Input.value as valueFromInput +WITHOUT + Input.value +FROM Input JOIN $data as d ON Input.subkey = cast(cast(d.kk as uint32)/100 as string) +ORDER BY key, value +; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_without_resolve_dublicates_mult.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_without_resolve_dublicates_mult.sql new file mode 100644 index 0000000000..b262fcf84b --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_join_without_resolve_dublicates_mult.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +PRAGMA SimpleColumns; +USE plato; + +$data = (SELECT cast(cast(key as uint32)/100 as string) as key, key as kk, cast(subkey as uint32) * 10 as subkey, "data: " || value as value FROM Input WHERE cast(key as uint32)/100 < 5); + +--INSERT INTO Output +SELECT + Input.*, + d.*, + Input.value as valueFromInput, + d.subkey as subkeyFromD +WITHOUT + Input.value, d.subkey, d.key +FROM Input JOIN $data as d ON Input.subkey = d.key +ORDER BY key, value +; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_qualified_all_and_group_by.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_qualified_all_and_group_by.sql new file mode 100644 index 0000000000..e3cdad7350 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_qualified_all_and_group_by.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +USE plato; +PRAGMA SimpleColumns; + +--INSERT INTO Output +SELECT + hundred_keys, sum(cast(subkey as uint32)) +FROM ( + SELECT data.key as dkey, data.* + FROM Input as data +) as middle +GROUP BY + cast(middle.dkey as uint32)/100 as hundred_keys +ORDER BY hundred_keys diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_subreq.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_subreq.sql new file mode 100644 index 0000000000..07417c5874 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_subreq.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +PRAGMA SimpleColumns; + +USE plato; + +$req = (SELECT 100500 as magic, t.* FROM Input as t); + +--INSERT INTO Output +SELECT subkey as sk, value as val FROM $req ORDER BY sk diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_subreq_all.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_subreq_all.sql new file mode 100644 index 0000000000..8f62e71cfa --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_subreq_all.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +PRAGMA SimpleColumns; + +USE plato; + +$req = (SELECT 100500 as magic, t.* FROM Input as t); + +--INSERT INTO Output +SELECT ff.*, subkey as sk, value as val FROM $req as ff ORDER BY sk diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_tablerow.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_tablerow.sql new file mode 100644 index 0000000000..f9cdb31af7 --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_tablerow.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +PRAGMA SimpleColumns; + +SELECT 100500 as magic, TableRow() AS tr FROM plato.Input AS t; +SELECT 100500 as magic, t.* FROM plato.Input AS t; + +SELECT +TableRow() AS tr +FROM (SELECT Just(1ul) AS k, 1 AS v1) AS a +JOIN (SELECT 1 AS k, 2 AS v2) AS b +ON a.k = b.k; + +SELECT +* +FROM (SELECT Just(1ul) AS k, 1 AS v1) AS a +JOIN (SELECT 1 AS k, 2 AS v2) AS b +ON a.k = b.k; diff --git a/yt/yql/tests/sql/suites/simple_columns/simple_columns_union_all_qualified_star.sql b/yt/yql/tests/sql/suites/simple_columns/simple_columns_union_all_qualified_star.sql new file mode 100644 index 0000000000..48b00df4ca --- /dev/null +++ b/yt/yql/tests/sql/suites/simple_columns/simple_columns_union_all_qualified_star.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +use plato; +PRAGMA simplecolumns; + +insert into @A (key, value) values +('x', 1), +('y', 2); + +insert into @B (key, value) values +('y', 3), +('z', 4); +commit; + +select A.* from @A AS A LEFT ONLY JOIN @B AS B ON A.key = B.key +UNION ALL +select B.* from @A AS A RIGHT ONLY JOIN @B AS B ON A.key = B.key + + diff --git a/yt/yql/tests/sql/suites/stream_lookup_join/default.cfg b/yt/yql/tests/sql/suites/stream_lookup_join/default.cfg new file mode 100644 index 0000000000..13ec07f2a3 --- /dev/null +++ b/yt/yql/tests/sql/suites/stream_lookup_join/default.cfg @@ -0,0 +1,4 @@ +in Input input.txt +in Event event.txt +in Host host.txt +providers dq diff --git a/yt/yql/tests/sql/suites/stream_lookup_join/event.txt.attr b/yt/yql/tests/sql/suites/stream_lookup_join/event.txt.attr new file mode 100644 index 0000000000..7dd7675ed1 --- /dev/null +++ b/yt/yql/tests/sql/suites/stream_lookup_join/event.txt.attr @@ -0,0 +1,10 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["id";["DataType";"String"]]; + ["ts";["DataType";"Datetime"]]; + ["type";["DataType";"String"]]; + ["host";["DataType";"String"]]; + ["net";["DataType";"String"]]; + ["user";["DataType";"String"]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/stream_lookup_join/host.txt.attr b/yt/yql/tests/sql/suites/stream_lookup_join/host.txt.attr new file mode 100644 index 0000000000..2206fffce8 --- /dev/null +++ b/yt/yql/tests/sql/suites/stream_lookup_join/host.txt.attr @@ -0,0 +1,8 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["hostname";["DataType";"String"]]; + ["fqdn";["DataType";"String"]]; + ["ip4";["DataType";"String"]]; + ["ip6";["DataType";"String"]] + ]]; +}} diff --git a/yt/yql/tests/sql/suites/stream_lookup_join/input.txt.attr b/yt/yql/tests/sql/suites/stream_lookup_join/input.txt.attr new file mode 100644 index 0000000000..7a11b85b77 --- /dev/null +++ b/yt/yql/tests/sql/suites/stream_lookup_join/input.txt.attr @@ -0,0 +1,13 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key"; ["DataType"; "String"]]; + ["subkey"; ["DataType"; "String"]]; + ["value"; ["DataType"; "String"]]; + ]]; + "SortMembers"=["key"; "subkey"]; + "SortedBy"=["key"; "subkey"]; + "SortDirections"=[1; 1]; + "SortedByTypes"=[["DataType";"String"]; ["DataType";"String"]] + }; +} diff --git a/yt/yql/tests/sql/suites/stream_lookup_join/lookup_join.sql b/yt/yql/tests/sql/suites/stream_lookup_join/lookup_join.sql new file mode 100644 index 0000000000..84eed2af7e --- /dev/null +++ b/yt/yql/tests/sql/suites/stream_lookup_join/lookup_join.sql @@ -0,0 +1,9 @@ +pragma dq.UseWideChannels = "true"; +use plato; + +select e.id as id, e.ts as ts, e.host as host, h.fqdn as fqdn, h.ip4 as ip4, h.ip6 as ip6 + from Event as e + left join /*+ streamlookup() */ Host as h + on (e.host == h.hostname) +; + diff --git a/yt/yql/tests/sql/suites/stream_lookup_join/lookup_join_narrow.sql b/yt/yql/tests/sql/suites/stream_lookup_join/lookup_join_narrow.sql new file mode 100644 index 0000000000..e2ff789e2f --- /dev/null +++ b/yt/yql/tests/sql/suites/stream_lookup_join/lookup_join_narrow.sql @@ -0,0 +1,9 @@ +pragma dq.UseWideChannels = "false"; +use plato; + +select e.id as id, e.ts as ts, e.host as host, h.fqdn as fqdn, h.ip4 as ip4, h.ip6 as ip6 + from Event as e + left join /*+ streamlookup() */ Host as h + on (e.host == h.hostname) +; + diff --git a/yt/yql/tests/sql/suites/table_range/concat_empty_sorted_with_key_diff.cfg b/yt/yql/tests/sql/suites/table_range/concat_empty_sorted_with_key_diff.cfg new file mode 100644 index 0000000000..040f725d60 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/concat_empty_sorted_with_key_diff.cfg @@ -0,0 +1,2 @@ +in Input1 empty_int64.txt +in Input2 empty_uint32.txt diff --git a/yt/yql/tests/sql/suites/table_range/concat_empty_sorted_with_key_diff.sql b/yt/yql/tests/sql/suites/table_range/concat_empty_sorted_with_key_diff.sql new file mode 100644 index 0000000000..d30c32b9b0 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/concat_empty_sorted_with_key_diff.sql @@ -0,0 +1,3 @@ +USE plato; + +SELECT * FROM concat(Input1, Input2);
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/table_range/concat_sorted_max_sorted_tables.cfg b/yt/yql/tests/sql/suites/table_range/concat_sorted_max_sorted_tables.cfg new file mode 100644 index 0000000000..c717a38afa --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/concat_sorted_max_sorted_tables.cfg @@ -0,0 +1,4 @@ +in Input sorted1.txt +out Output output.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/table_range/concat_sorted_max_sorted_tables.sql b/yt/yql/tests/sql/suites/table_range/concat_sorted_max_sorted_tables.sql new file mode 100644 index 0000000000..bd692d7685 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/concat_sorted_max_sorted_tables.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +/* kikimr can not */ +/* multirun can not */ +USE plato; +pragma yt.MaxInputTables="3"; +pragma yt.MaxInputTablesForSortedMerge="2"; + +INSERT INTO Output +SELECT + key, + value +FROM concat(Input, Input, Input, Input) +ORDER BY key +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/table_range/concat_sorted_max_tables.cfg b/yt/yql/tests/sql/suites/table_range/concat_sorted_max_tables.cfg new file mode 100644 index 0000000000..b6e7b1a582 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/concat_sorted_max_tables.cfg @@ -0,0 +1,2 @@ +in Input sorted1.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/table_range/concat_sorted_max_tables.sql b/yt/yql/tests/sql/suites/table_range/concat_sorted_max_tables.sql new file mode 100644 index 0000000000..08a4e76749 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/concat_sorted_max_tables.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +/* kikimr can not */ +/* multirun can not */ +USE plato; +pragma yt.MaxInputTables="3"; +pragma yt.MaxInputTablesForSortedMerge="2"; + +INSERT INTO Output +SELECT + key, + value +FROM concat(Input, Input, Input, Input) +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/table_range/concat_sorted_with_key_diff.cfg b/yt/yql/tests/sql/suites/table_range/concat_sorted_with_key_diff.cfg new file mode 100644 index 0000000000..4ea0bf2550 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/concat_sorted_with_key_diff.cfg @@ -0,0 +1,2 @@ +in Input1 sorted1.txt +in Input2 sorted2.txt diff --git a/yt/yql/tests/sql/suites/table_range/concat_sorted_with_key_diff.sql b/yt/yql/tests/sql/suites/table_range/concat_sorted_with_key_diff.sql new file mode 100644 index 0000000000..3e752de8b8 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/concat_sorted_with_key_diff.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* kikimr can not - range not supported */ +select * from plato.concat("Input1", "Input2") order by key, subkey; diff --git a/yt/yql/tests/sql/suites/table_range/concat_with_view.cfg b/yt/yql/tests/sql/suites/table_range/concat_with_view.cfg new file mode 100644 index 0000000000..c4e9cf98a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/concat_with_view.cfg @@ -0,0 +1,4 @@ +in InputA input.txt +in InputD doc_view.txt +in Input1 input.txt +in Input2 input.txt diff --git a/yt/yql/tests/sql/suites/table_range/concat_with_view.sql b/yt/yql/tests/sql/suites/table_range/concat_with_view.sql new file mode 100644 index 0000000000..c9ea1fd45b --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/concat_with_view.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* kikimr can not - range not supported */ +select * from plato.concat("InputA", "InputD"); diff --git a/yt/yql/tests/sql/suites/table_range/doc_view.txt.attr b/yt/yql/tests/sql/suites/table_range/doc_view.txt.attr new file mode 100644 index 0000000000..41ea51e276 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/doc_view.txt.attr @@ -0,0 +1,4 @@ +{ + "_yql_type"="view"; + "type"="document"; +} diff --git a/yt/yql/tests/sql/suites/table_range/each_with_non_existing.cfg b/yt/yql/tests/sql/suites/table_range/each_with_non_existing.cfg new file mode 100644 index 0000000000..51e035b460 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/each_with_non_existing.cfg @@ -0,0 +1,3 @@ +in Input1 input.txt +in Input2 nonexist.txt +in Input3 nonexist.txt diff --git a/yt/yql/tests/sql/suites/table_range/each_with_non_existing.sql b/yt/yql/tests/sql/suites/table_range/each_with_non_existing.sql new file mode 100644 index 0000000000..a2527cc655 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/each_with_non_existing.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +/* kikimr can not - range not supported */ +USE plato; +SELECT * FROM each(["Input1", "Input2", "Input3"]); diff --git a/yt/yql/tests/sql/suites/table_range/each_with_non_existing_all_fail.cfg b/yt/yql/tests/sql/suites/table_range/each_with_non_existing_all_fail.cfg new file mode 100644 index 0000000000..62226ec6e8 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/each_with_non_existing_all_fail.cfg @@ -0,0 +1,4 @@ +xfail +in Input1 nonexist.txt +in Input2 nonexist.txt +in Input3 nonexist.txt diff --git a/yt/yql/tests/sql/suites/table_range/each_with_non_existing_all_fail.sql b/yt/yql/tests/sql/suites/table_range/each_with_non_existing_all_fail.sql new file mode 100644 index 0000000000..fd8caf1393 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/each_with_non_existing_all_fail.sql @@ -0,0 +1,5 @@ +/* syntax version 1 */ +/* kikimr can not - range not supported */ +/* custom error:The list of tables is empty*/ +USE plato; +SELECT * FROM each(["Input1", "Input2", "Input3"]); diff --git a/yt/yql/tests/sql/suites/table_range/empty_int64.txt.attr b/yt/yql/tests/sql/suites/table_range/empty_int64.txt.attr new file mode 100644 index 0000000000..5a3a989e42 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/empty_int64.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int64"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1]; + "SortedBy"=["key"]; + "SortedByTypes"=[["DataType";"Int64";]]; + "SortMembers"=["key"]; +}} diff --git a/yt/yql/tests/sql/suites/table_range/empty_uint32.txt.attr b/yt/yql/tests/sql/suites/table_range/empty_uint32.txt.attr new file mode 100644 index 0000000000..9bd4ce7778 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/empty_uint32.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Uint32"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1]; + "SortedBy"=["key"]; + "SortedByTypes"=[["DataType";"Uint32";]]; + "SortMembers"=["key"]; +}} diff --git a/yt/yql/tests/sql/suites/table_range/limit_with_table_path_over_sorted_range.cfg b/yt/yql/tests/sql/suites/table_range/limit_with_table_path_over_sorted_range.cfg new file mode 100644 index 0000000000..7cc6ef73bf --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/limit_with_table_path_over_sorted_range.cfg @@ -0,0 +1,2 @@ +in Input1 sorted1.txt +in Input2 sorted1.txt diff --git a/yt/yql/tests/sql/suites/table_range/limit_with_table_path_over_sorted_range.sql b/yt/yql/tests/sql/suites/table_range/limit_with_table_path_over_sorted_range.sql new file mode 100644 index 0000000000..6e940b08a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/limit_with_table_path_over_sorted_range.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* kikimr can not */ + +SELECT key, value, SUBSTRING(TablePath(), NULL, CAST(LENGTH(TablePath()) - 1 as Uint32)) as path +FROM plato.range("","Input1", "Input2") +LIMIT 2 +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/table_range/merge_non_strict.cfg b/yt/yql/tests/sql/suites/table_range/merge_non_strict.cfg new file mode 100644 index 0000000000..b9f4d07258 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/merge_non_strict.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_non_strict.txt +in Input2 sorted1.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/table_range/merge_non_strict.sql b/yt/yql/tests/sql/suites/table_range/merge_non_strict.sql new file mode 100644 index 0000000000..97d2b56b77 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/merge_non_strict.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +USE plato; + +SELECT key, subkey FROM CONCAT(Input1, Input1) ORDER BY key, subkey; + +SELECT key, subkey FROM CONCAT(Input1, Input2) ORDER BY key, subkey; diff --git a/yt/yql/tests/sql/suites/table_range/range_over_desc.cfg b/yt/yql/tests/sql/suites/table_range/range_over_desc.cfg new file mode 100644 index 0000000000..ceaf2a5ea3 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_over_desc.cfg @@ -0,0 +1,2 @@ +in Input1 sorted_desc.txt +in Input2 sorted_desc.txt diff --git a/yt/yql/tests/sql/suites/table_range/range_over_desc.sql b/yt/yql/tests/sql/suites/table_range/range_over_desc.sql new file mode 100644 index 0000000000..fa2f513898 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_over_desc.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* kikimr can not - range not supported */ +/* syntax version 1 */ +use plato; + +select t.*, TableName() as path from range("","Input1", "Input2") as t +order by path, key, value; diff --git a/yt/yql/tests/sql/suites/table_range/range_over_filter.cfg b/yt/yql/tests/sql/suites/table_range/range_over_filter.cfg new file mode 100644 index 0000000000..c6cac50799 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_over_filter.cfg @@ -0,0 +1,3 @@ +in Input input.txt +udf python3_udf +udf unicode_udf diff --git a/yt/yql/tests/sql/suites/table_range/range_over_filter.sql b/yt/yql/tests/sql/suites/table_range/range_over_filter.sql new file mode 100644 index 0000000000..682f3fdb79 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_over_filter.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* syntax version 1 */ +/* kikimr can not - range not supported */ +select count(*) as count from plato.filter(``, Unicode::IsUtf); + +$script = @@ +def f(s): + return True +@@; + +$callable = Python3::f(Callable<(String)->Bool?>,$script); +select count(*) as count from plato.filter(``, $callable); diff --git a/yt/yql/tests/sql/suites/table_range/range_over_filter_udf.cfg b/yt/yql/tests/sql/suites/table_range/range_over_filter_udf.cfg new file mode 100644 index 0000000000..6149ae4837 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_over_filter_udf.cfg @@ -0,0 +1,3 @@ +in Input input.txt +udf python3_udf +udf re2_udf diff --git a/yt/yql/tests/sql/suites/table_range/range_over_filter_udf.sql b/yt/yql/tests/sql/suites/table_range/range_over_filter_udf.sql new file mode 100644 index 0000000000..4756b27c4b --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_over_filter_udf.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +/* syntax version 1 */ +/* kikimr can not - range not supported */ +$script = @@ +def f(f): + def ft(s): + return True + def ff(s): + return False + return f and ft or ff +@@; + +$callable = Python3::f(Callable<(Bool)->Callable<(String)->Bool>>,$script); +$callableT = $callable(Re2::Match('test.*')('testfets')); + +select count(*) as count from plato.filter(``, $callableT); diff --git a/yt/yql/tests/sql/suites/table_range/range_over_like.cfg b/yt/yql/tests/sql/suites/table_range/range_over_like.cfg new file mode 100644 index 0000000000..e300a83153 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_over_like.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf re2_udf diff --git a/yt/yql/tests/sql/suites/table_range/range_over_like.sql b/yt/yql/tests/sql/suites/table_range/range_over_like.sql new file mode 100644 index 0000000000..28a45f57fe --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_over_like.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +/* kikimr can not - range not supported */ +/* syntax version 1 */ +select count(*) as count from plato.like(``, "_np%"); diff --git a/yt/yql/tests/sql/suites/table_range/range_over_regexp.cfg b/yt/yql/tests/sql/suites/table_range/range_over_regexp.cfg new file mode 100644 index 0000000000..ce7c51a32a --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_over_regexp.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf pire_udf diff --git a/yt/yql/tests/sql/suites/table_range/range_over_regexp.sql b/yt/yql/tests/sql/suites/table_range/range_over_regexp.sql new file mode 100644 index 0000000000..f78820f952 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_over_regexp.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +/* kikimr can not - range not supported */ +/* syntax version 1 */ +PRAGMA RegexUseRe2='true'; +select count(*) as count from plato.regexp(``, "np"); diff --git a/yt/yql/tests/sql/suites/table_range/range_slash.cfg b/yt/yql/tests/sql/suites/table_range/range_slash.cfg new file mode 100644 index 0000000000..53bfd46c84 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_slash.cfg @@ -0,0 +1,3 @@ +in Input1 input.txt +in Input2 input.txt + diff --git a/yt/yql/tests/sql/suites/table_range/range_slash.sql b/yt/yql/tests/sql/suites/table_range/range_slash.sql new file mode 100644 index 0000000000..f0a2693294 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_slash.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +USE plato; + +SELECT * +FROM RANGE("/", "Input1", "Input2", "/"); + +SELECT * +FROM RANGE("/", "Input1", "Input2", "/"); + diff --git a/yt/yql/tests/sql/suites/table_range/range_tables_with_view.cfg b/yt/yql/tests/sql/suites/table_range/range_tables_with_view.cfg new file mode 100644 index 0000000000..8b7633b301 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_tables_with_view.cfg @@ -0,0 +1 @@ +in Input view_input.txt diff --git a/yt/yql/tests/sql/suites/table_range/range_tables_with_view.sql b/yt/yql/tests/sql/suites/table_range/range_tables_with_view.sql new file mode 100644 index 0000000000..b1dc52aa63 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_tables_with_view.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* syntax version 1 */ +select count(*) as count from plato.range(``, ``, ``, ``, ksv); diff --git a/yt/yql/tests/sql/suites/table_range/range_with_view.cfg b/yt/yql/tests/sql/suites/table_range/range_with_view.cfg new file mode 100644 index 0000000000..c4e9cf98a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_with_view.cfg @@ -0,0 +1,4 @@ +in InputA input.txt +in InputD doc_view.txt +in Input1 input.txt +in Input2 input.txt diff --git a/yt/yql/tests/sql/suites/table_range/range_with_view.sql b/yt/yql/tests/sql/suites/table_range/range_with_view.sql new file mode 100644 index 0000000000..4e28ca82e7 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/range_with_view.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* kikimr can not - range not supported */ +select * from plato.range("","InputA", "InputD"); diff --git a/yt/yql/tests/sql/suites/table_range/sorted1.txt.attr b/yt/yql/tests/sql/suites/table_range/sorted1.txt.attr new file mode 100644 index 0000000000..ed13e20223 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/sorted1.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/table_range/sorted2.txt.attr b/yt/yql/tests/sql/suites/table_range/sorted2.txt.attr new file mode 100644 index 0000000000..02e438f8df --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/sorted2.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["OptionalType"; ["DataType";"String";]]]; + ["value";["DataType";"String"]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["OptionalType"; ["DataType";"String";]];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/table_range/sorted_desc.txt.attr b/yt/yql/tests/sql/suites/table_range/sorted_desc.txt.attr new file mode 100644 index 0000000000..5a6ca5761e --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/sorted_desc.txt.attr @@ -0,0 +1,47 @@ +{ + "_yql_row_spec" = { + "SortMembers" = [ + "key" + ]; + "SortDirections" = [ + 0 + ]; + "UniqueKeys" = %false; + "SortedByTypes" = [ + [ + "DataType"; + "String" + ] + ]; + "StrictSchema" = %true; + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ]; + "SortedBy" = [ + "_yql_column_0" + ] + } +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/table_range/sorted_non_strict.txt.attr b/yt/yql/tests/sql/suites/table_range/sorted_non_strict.txt.attr new file mode 100644 index 0000000000..a932faecd8 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/sorted_non_strict.txt.attr @@ -0,0 +1,15 @@ +{ + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "sort_order" = "ascending"; + } + ] +} diff --git a/yt/yql/tests/sql/suites/table_range/table_funcs_expr.cfg b/yt/yql/tests/sql/suites/table_range/table_funcs_expr.cfg new file mode 100644 index 0000000000..4464fb271c --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/table_funcs_expr.cfg @@ -0,0 +1,5 @@ +in Input input.txt +udf re2_udf +udf hyperscan_udf +udf string_udf + diff --git a/yt/yql/tests/sql/suites/table_range/table_funcs_expr.sql b/yt/yql/tests/sql/suites/table_range/table_funcs_expr.sql new file mode 100644 index 0000000000..0ca6068d44 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/table_funcs_expr.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +select count(*) from concat("Inp"||Unicode::ToLower("ut"u)); +select count(*) from concat_strict("Inp"||Unicode::ToLower("ut"u)); +select count(*) from range("","Inp" || Unicode::ToLower("ut"u)); +select count(*) from range_strict("","Inp" || Unicode::ToLower("ut"u)); +select count(*) from filter("",($x)->{return $x == "Input"}); +select count(*) from filter_strict("",($x)->{return $x == "Input"}); +select count(*) from like("","Inp" || "%"); +select count(*) from like_strict("","Inp" || "%"); +select count(*) from regexp("","Inp" || ".t"); +select count(*) from regexp_strict("","Inp" || ".t"); +select count(*) from each(AsList("Input")); +select count(*) from each_strict(AsList("Input")); +select count(*) from folder(SUBSTRING("foo",0,0)); diff --git a/yt/yql/tests/sql/suites/table_range/tablepath_with_non_existing.cfg b/yt/yql/tests/sql/suites/table_range/tablepath_with_non_existing.cfg new file mode 100644 index 0000000000..51e035b460 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/tablepath_with_non_existing.cfg @@ -0,0 +1,3 @@ +in Input1 input.txt +in Input2 nonexist.txt +in Input3 nonexist.txt diff --git a/yt/yql/tests/sql/suites/table_range/tablepath_with_non_existing.sql b/yt/yql/tests/sql/suites/table_range/tablepath_with_non_existing.sql new file mode 100644 index 0000000000..f6a46792fc --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/tablepath_with_non_existing.sql @@ -0,0 +1,6 @@ +/* syntax version 1 */ +/* kikimr can not - range not supported */ +USE plato; +SELECT key, subkey, TableName() AS name +FROM each(["Input1", "Input2", "Input3"]) +WITH SCHEMA Struct<key:String, subkey:String, value:String>; diff --git a/yt/yql/tests/sql/suites/table_range/view_input.txt.attr b/yt/yql/tests/sql/suites/table_range/view_input.txt.attr new file mode 100644 index 0000000000..07386c98e5 --- /dev/null +++ b/yt/yql/tests/sql/suites/table_range/view_input.txt.attr @@ -0,0 +1,32 @@ +{ + "_yql_view_ksv"="SELECT key as k, subkey as s, value as v FROM self"; + "_yql_view_key"="SELECT key FROM self"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/tpch/customer.txt.attr b/yt/yql/tests/sql/suites/tpch/customer.txt.attr new file mode 100644 index 0000000000..db4ca5853e --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/customer.txt.attr @@ -0,0 +1,56 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "name" = "c_custkey"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "c_acctbal"; + "required" = %true; + "type" = "double"; + "type_v3" = "double"; + }; + { + "name" = "c_phone"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "c_mktsegment"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "c_nationkey"; + "required" = %true; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "c_comment"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "c_name"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "c_address"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/tpch/default.cfg b/yt/yql/tests/sql/suites/tpch/default.cfg new file mode 100644 index 0000000000..f3c9624348 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/default.cfg @@ -0,0 +1,8 @@ +in customer customer.txt +in lineitem lineitem.txt +in nation nation.txt +in orders orders.txt +in part part.txt +in partsupp partsupp.txt +in region region.txt +in supplier supplier.txt diff --git a/yt/yql/tests/sql/suites/tpch/lineitem.txt.attr b/yt/yql/tests/sql/suites/tpch/lineitem.txt.attr new file mode 100644 index 0000000000..7abd7775de --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/lineitem.txt.attr @@ -0,0 +1,114 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "name" = "l_orderkey"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "l_linenumber"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "l_discount"; + "required" = %true; + "type" = "double"; + "type_v3" = "double"; + }; + { + "name" = "l_extendedprice"; + "required" = %true; + "type" = "double"; + "type_v3" = "double"; + }; + { + "name" = "l_comment"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "l_shipdate"; + "required" = %false; + "type" = "date"; + "type_v3" = { + "type_name" = "optional"; + "item" = "date"; + }; + }; + { + "name" = "l_returnflag"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "l_partkey"; + "required" = %true; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "l_tax"; + "required" = %true; + "type" = "double"; + "type_v3" = "double"; + }; + { + "name" = "l_shipinstruct"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "l_commitdate"; + "required" = %false; + "type" = "date"; + "type_v3" = { + "type_name" = "optional"; + "item" = "date"; + }; + }; + { + "name" = "l_receiptdate"; + "required" = %false; + "type" = "date"; + "type_v3" = { + "type_name" = "optional"; + "item" = "date"; + }; + }; + { + "name" = "l_quantity"; + "required" = %true; + "type" = "double"; + "type_v3" = "double"; + }; + { + "name" = "l_suppkey"; + "required" = %true; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "l_shipmode"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "l_linestatus"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/tpch/nation.txt.attr b/yt/yql/tests/sql/suites/tpch/nation.txt.attr new file mode 100644 index 0000000000..1db996b861 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/nation.txt.attr @@ -0,0 +1,32 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "name" = "n_nationkey"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "n_regionkey"; + "required" = %true; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "n_name"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "n_comment"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/tpch/orders.txt.attr b/yt/yql/tests/sql/suites/tpch/orders.txt.attr new file mode 100644 index 0000000000..fb5e422f56 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/orders.txt.attr @@ -0,0 +1,65 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "name" = "o_orderkey"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "o_orderstatus"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "o_comment"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "o_totalprice"; + "required" = %true; + "type" = "double"; + "type_v3" = "double"; + }; + { + "name" = "o_clerk"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "o_custkey"; + "required" = %true; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "o_orderpriority"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "o_orderdate"; + "required" = %false; + "type" = "date"; + "type_v3" = { + "type_name" = "optional"; + "item" = "date"; + }; + }; + { + "name" = "o_shippriority"; + "required" = %true; + "type" = "int64"; + "type_v3" = "int64"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/tpch/part.txt.attr b/yt/yql/tests/sql/suites/tpch/part.txt.attr new file mode 100644 index 0000000000..973fedb9e4 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/part.txt.attr @@ -0,0 +1,62 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "name" = "p_partkey"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "p_name"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "p_container"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "p_size"; + "required" = %true; + "type" = "int64"; + "type_v3" = "int64"; + }; + { + "name" = "p_type"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "p_comment"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "p_retailprice"; + "required" = %true; + "type" = "double"; + "type_v3" = "double"; + }; + { + "name" = "p_mfgr"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "p_brand"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/tpch/partsupp.txt.attr b/yt/yql/tests/sql/suites/tpch/partsupp.txt.attr new file mode 100644 index 0000000000..b941075b07 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/partsupp.txt.attr @@ -0,0 +1,39 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "name" = "ps_partkey"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "ps_suppkey"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "ps_comment"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "ps_supplycost"; + "required" = %true; + "type" = "double"; + "type_v3" = "double"; + }; + { + "name" = "ps_availqty"; + "required" = %true; + "type" = "int64"; + "type_v3" = "int64"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/tpch/q1.sql b/yt/yql/tests/sql/suites/tpch/q1.sql new file mode 100644 index 0000000000..3f8ccfe964 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q1.sql @@ -0,0 +1,26 @@ + +-- TPC-H/TPC-R Pricing Summary Report Query (Q1) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +select + l_returnflag, + l_linestatus, + sum(l_quantity) as sum_qty, + sum(l_extendedprice) as sum_base_price, + sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, + sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, + avg(l_quantity) as avg_qty, + avg(l_extendedprice) as avg_price, + avg(l_discount) as avg_disc, + count(*) as count_order +from + plato.lineitem +where + CAST(l_shipdate AS Timestamp) <= (CAST('1998-12-01' AS Date) - Interval("P100D")) +group by + l_returnflag, + l_linestatus +order by + l_returnflag, + l_linestatus; diff --git a/yt/yql/tests/sql/suites/tpch/q10.sql b/yt/yql/tests/sql/suites/tpch/q10.sql new file mode 100644 index 0000000000..1d3e4a75bb --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q10.sql @@ -0,0 +1,87 @@ + +-- TPC-H/TPC-R Returned Item Reporting Query (Q10) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$border = Date("1993-12-01"); +$join1 = ( +select + c.c_custkey as c_custkey, + c.c_name as c_name, + c.c_acctbal as c_acctbal, + c.c_address as c_address, + c.c_phone as c_phone, + c.c_comment as c_comment, + c.c_nationkey as c_nationkey, + o.o_orderkey as o_orderkey +from + plato.customer as c +join + plato.orders as o +on + c.c_custkey = o.o_custkey +where + cast(o.o_orderdate as timestamp) >= $border and + cast(o.o_orderdate as timestamp) < ($border + Interval("P90D")) +); +$join2 = ( +select + j.c_custkey as c_custkey, + j.c_name as c_name, + j.c_acctbal as c_acctbal, + j.c_address as c_address, + j.c_phone as c_phone, + j.c_comment as c_comment, + j.c_nationkey as c_nationkey, + l.l_extendedprice as l_extendedprice, + l.l_discount as l_discount +from + $join1 as j +join + plato.lineitem as l +on + l.l_orderkey = j.o_orderkey +where + l.l_returnflag = 'R' +); +$join3 = ( +select + j.c_custkey as c_custkey, + j.c_name as c_name, + j.c_acctbal as c_acctbal, + j.c_address as c_address, + j.c_phone as c_phone, + j.c_comment as c_comment, + j.c_nationkey as c_nationkey, + j.l_extendedprice as l_extendedprice, + j.l_discount as l_discount, + n.n_name as n_name +from + $join2 as j +join + plato.nation as n +on + n.n_nationkey = j.c_nationkey +); +select + c_custkey, + c_name, + sum(l_extendedprice * (1 - l_discount)) as revenue, + c_acctbal, + n_name, + c_address, + c_phone, + c_comment +from + $join3 +group by + c_custkey, + c_name, + c_acctbal, + c_phone, + n_name, + c_address, + c_comment +order by + revenue desc +limit 20; diff --git a/yt/yql/tests/sql/suites/tpch/q11.sql b/yt/yql/tests/sql/suites/tpch/q11.sql new file mode 100644 index 0000000000..2a80fb6128 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q11.sql @@ -0,0 +1,62 @@ + +-- TPC-H/TPC-R Important Stock Identification Query (Q11) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +PRAGMA DisableSimpleColumns; + +$join1 = ( +select + ps.ps_partkey as ps_partkey, + ps.ps_supplycost as ps_supplycost, + ps.ps_availqty as ps_availqty, + s.s_nationkey as s_nationkey +from + plato.partsupp as ps +join + plato.supplier as s +on + ps.ps_suppkey = s.s_suppkey +); +$join2 = ( +select + j.ps_partkey as ps_partkey, + j.ps_supplycost as ps_supplycost, + j.ps_availqty as ps_availqty, + j.s_nationkey as s_nationkey +from + $join1 as j +join + plato.nation as n +on + n.n_nationkey = j.s_nationkey +where + n.n_name = 'CANADA' +); +$threshold = ( +select + sum(ps_supplycost * ps_availqty) * 0.0001000000 as threshold +from + $join2 +); +$values = ( +select + ps_partkey, + sum(ps_supplycost * ps_availqty) as value +from + $join2 +group by + ps_partkey +); + +select + v.ps_partkey as ps_partkey, + v.value as value +from + $values as v +cross join + $threshold as t +where + v.value > t.threshold +order by + value desc; diff --git a/yt/yql/tests/sql/suites/tpch/q12.sql b/yt/yql/tests/sql/suites/tpch/q12.sql new file mode 100644 index 0000000000..d8425b0b4a --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q12.sql @@ -0,0 +1,45 @@ + +-- TPC-H/TPC-R Shipping Modes and Order Priority Query (Q12) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$join = ( + select + l.l_shipmode as l_shipmode, + o.o_orderpriority as o_orderpriority, + l.l_commitdate as l_commitdate, + l.l_shipdate as l_shipdate, + l.l_receiptdate as l_receiptdate + from + plato.orders as o + join plato.lineitem as l + on o.o_orderkey == l.l_orderkey +); + +$border = Date("1994-01-01"); + +select + l_shipmode, + sum(case + when o_orderpriority = '1-URGENT' + or o_orderpriority = '2-HIGH' + then 1 + else 0 + end) as high_line_count, + sum(case + when o_orderpriority <> '1-URGENT' + and o_orderpriority <> '2-HIGH' + then 1 + else 0 + end) as low_line_count +from $join +where + (l_shipmode = 'MAIL' or l_shipmode = 'TRUCK') + and l_commitdate < l_receiptdate + and l_shipdate < l_commitdate + and cast(l_receiptdate as timestamp) >= $border + and cast(l_receiptdate as timestamp) < ($border + Interval("P365D")) +group by + l_shipmode +order by + l_shipmode; diff --git a/yt/yql/tests/sql/suites/tpch/q13.sql b/yt/yql/tests/sql/suites/tpch/q13.sql new file mode 100644 index 0000000000..e94f36a545 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q13.sql @@ -0,0 +1,33 @@ + +-- TPC-H/TPC-R Customer Distribution Query (Q13) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$orders = ( + select + o_orderkey, + o_custkey + from + plato.orders + where + o_comment NOT LIKE "%unusual%requests%" +); +select + c_count as c_count, + count(*) as custdist +from + ( + select + c.c_custkey as c_custkey, + count(o.o_orderkey) as c_count + from + plato.customer as c left outer join $orders as o on + c.c_custkey = o.o_custkey + group by + c.c_custkey + ) as c_orders +group by + c_count +order by + custdist desc, + c_count desc; diff --git a/yt/yql/tests/sql/suites/tpch/q14.sql b/yt/yql/tests/sql/suites/tpch/q14.sql new file mode 100644 index 0000000000..99ad7f0c4e --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q14.sql @@ -0,0 +1,21 @@ + +-- TPC-H/TPC-R Promotion Effect Query (Q14) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$border = Date("1994-08-01"); +select + 100.00 * sum(case + when StartsWith(p.p_type, 'PROMO') + then l.l_extendedprice * (1 - l.l_discount) + else 0 + end) / sum(l.l_extendedprice * (1 - l.l_discount)) as promo_revenue +from + plato.lineitem as l +join + plato.part as p +on + l.l_partkey = p.p_partkey +where + cast(l.l_shipdate as timestamp) >= $border + and cast(l.l_shipdate as timestamp) < ($border + Interval("P31D")); diff --git a/yt/yql/tests/sql/suites/tpch/q15.sql b/yt/yql/tests/sql/suites/tpch/q15.sql new file mode 100644 index 0000000000..e8a141e83f --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q15.sql @@ -0,0 +1,56 @@ +-- ignore runonopt plan diff +-- TPC-H/TPC-R Top Supplier Query (Q15) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$border = Date("1997-03-01"); +$revenue0 = ( + select + l_suppkey as supplier_no, + sum(l_extendedprice * (1 - l_discount)) as total_revenue, + cast(sum(l_extendedprice * (1 - l_discount)) as Uint64) as total_revenue_approx + from + plato.lineitem + where + cast(l_shipdate as timestamp) >= $border + and cast(l_shipdate as timestamp) < ($border + Interval("P92D")) + group by + l_suppkey +); +$max_revenue = ( +select + max(total_revenue_approx) as max_revenue +from + $revenue0 +); +$join1 = ( +select + s.s_suppkey as s_suppkey, + s.s_name as s_name, + s.s_address as s_address, + s.s_phone as s_phone, + r.total_revenue as total_revenue, + r.total_revenue_approx as total_revenue_approx +from + plato.supplier as s +join + $revenue0 as r +on + s.s_suppkey = r.supplier_no +); + +select + j.s_suppkey as s_suppkey, + j.s_name as s_name, + j.s_address as s_address, + j.s_phone as s_phone, + j.total_revenue as total_revenue +from + $join1 as j +join + $max_revenue as m +on + j.total_revenue_approx = m.max_revenue +order by + s_suppkey; + diff --git a/yt/yql/tests/sql/suites/tpch/q16.sql b/yt/yql/tests/sql/suites/tpch/q16.sql new file mode 100644 index 0000000000..153b72797b --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q16.sql @@ -0,0 +1,44 @@ + +-- TPC-H/TPC-R Parts/Supplier Relationship Query (Q16) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$join = ( +select + ps.ps_suppkey as ps_suppkey, + ps.ps_partkey as ps_partkey +from + plato.partsupp as ps +left join + plato.supplier as w +on + w.s_suppkey = ps.ps_suppkey +where not (s_comment like "%Customer%Complaints%") +); + +select + p.p_brand as p_brand, + p.p_type as p_type, + p.p_size as p_size, + count(distinct j.ps_suppkey) as supplier_cnt +from + $join as j +join + plato.part as p +on + p.p_partkey = j.ps_partkey +where + p.p_brand <> 'Brand#33' + and (not StartsWith(p.p_type, 'PROMO POLISHED')) + and (p.p_size = 20 or p.p_size = 27 or p.p_size = 11 or p.p_size = 45 or p.p_size = 40 or p.p_size = 41 or p.p_size = 34 or p.p_size = 36) +group by + p.p_brand, + p.p_type, + p.p_size +order by + supplier_cnt desc, + p_brand, + p_type, + p_size +; + diff --git a/yt/yql/tests/sql/suites/tpch/q17.sql b/yt/yql/tests/sql/suites/tpch/q17.sql new file mode 100644 index 0000000000..c775d585bb --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q17.sql @@ -0,0 +1,41 @@ + +-- TPC-H/TPC-R Small-Quantity-Order Revenue Query (Q17) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$threshold = ( +select + 0.2 * avg(l_quantity) as threshold, + l_partkey +from + plato.lineitem +group by + l_partkey +); + +$join1 = ( +select + p.p_partkey as p_partkey, + l.l_extendedprice as l_extendedprice, + l.l_quantity as l_quantity +from + plato.lineitem as l +join + plato.part as p +on + p.p_partkey = l.l_partkey +where + p.p_brand = 'Brand#35' + and p.p_container = 'LG DRUM' +); + +select + sum(j.l_extendedprice) / 7.0 as avg_yearly +from + $join1 as j +join + $threshold as t +on + j.p_partkey = t.l_partkey +where + j.l_quantity < t.threshold; diff --git a/yt/yql/tests/sql/suites/tpch/q18.sql b/yt/yql/tests/sql/suites/tpch/q18.sql new file mode 100644 index 0000000000..dfc0e858ea --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q18.sql @@ -0,0 +1,53 @@ + +-- TPC-H/TPC-R Large Volume Customer Query (Q18) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$in = ( +select + l_orderkey, + sum(l_quantity) as sum_l_quantity +from + plato.lineitem +group by + l_orderkey having + sum(l_quantity) > 315 +); + +$join1 = ( +select + c.c_name as c_name, + c.c_custkey as c_custkey, + o.o_orderkey as o_orderkey, + o.o_orderdate as o_orderdate, + o.o_totalprice as o_totalprice +from + plato.customer as c +join + plato.orders as o +on + c.c_custkey = o.o_custkey +); +select + j.c_name as c_name, + j.c_custkey as c_custkey, + j.o_orderkey as o_orderkey, + j.o_orderdate as o_orderdate, + j.o_totalprice as o_totalprice, + sum(i.sum_l_quantity) as sum_l_quantity +from + $join1 as j +join + $in as i +on + i.l_orderkey = j.o_orderkey +group by + j.c_name, + j.c_custkey, + j.o_orderkey, + j.o_orderdate, + j.o_totalprice +order by + o_totalprice desc, + o_orderdate +limit 100; diff --git a/yt/yql/tests/sql/suites/tpch/q19.sql b/yt/yql/tests/sql/suites/tpch/q19.sql new file mode 100644 index 0000000000..e9b3a7d7bc --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q19.sql @@ -0,0 +1,40 @@ + +-- TPC-H/TPC-R Discounted Revenue Query (Q19) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +select + sum(l.l_extendedprice* (1 - l.l_discount)) as revenue +from + plato.lineitem as l +join + plato.part as p +on + p.p_partkey = l.l_partkey +where + ( + p.p_brand = 'Brand#23' + and (p.p_container = 'SM CASE' or p.p_container = 'SM BOX' or p.p_container = 'SM PACK' or p.p_container = 'SM PKG') + and l.l_quantity >= 7 and l.l_quantity <= 7 + 10 + and p.p_size between 1 and 5 + and (l.l_shipmode = 'AIR' or l.l_shipmode = 'AIR REG') + and l.l_shipinstruct = 'DELIVER IN PERSON' + ) + or + ( + p.p_brand = 'Brand#15' + and (p.p_container = 'MED BAG' or p.p_container = 'MED BOX' or p.p_container = 'MED PKG' or p.p_container = 'MED PACK') + and l.l_quantity >= 17 and l.l_quantity <= 17 + 10 + and p.p_size between 1 and 10 + and (l.l_shipmode = 'AIR' or l.l_shipmode = 'AIR REG') + and l.l_shipinstruct = 'DELIVER IN PERSON' + ) + or + ( + p.p_brand = 'Brand#44' + and (p.p_container = 'LG CASE' or p.p_container = 'LG BOX' or p.p_container = 'LG PACK' or p.p_container = 'LG PKG') + and l.l_quantity >= 25 and l.l_quantity <= 25 + 10 + and p.p_size between 1 and 15 + and (l.l_shipmode = 'AIR' or l.l_shipmode = 'AIR REG') + and l.l_shipinstruct = 'DELIVER IN PERSON' + ); diff --git a/yt/yql/tests/sql/suites/tpch/q2.sql b/yt/yql/tests/sql/suites/tpch/q2.sql new file mode 100644 index 0000000000..f8e11a8c5d --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q2.sql @@ -0,0 +1,68 @@ + +-- TPC-H/TPC-R Minimum Cost Supplier Query (Q2) +-- using 1680793381 as a seed to the RNG + +$r = (select r_regionkey from + plato.region +where r_name='AMERICA'); + +$j1 = (select n_name,n_nationkey + from plato.nation as n + join $r as r on + n.n_regionkey = r.r_regionkey); + +$j2 = (select s_acctbal,s_name,s_address,s_phone,s_comment,n_name,s_suppkey + from plato.supplier as s + join $j1 as j on + s.s_nationkey = j.n_nationkey +); + +$j3 = (select ps_partkey,ps_supplycost,s_acctbal,s_name,s_address,s_phone,s_comment,n_name + from plato.partsupp as ps + join $j2 as j on + ps.ps_suppkey = j.s_suppkey +); + +$min_ps_supplycost = (select min(ps_supplycost) as min_ps_supplycost,ps_partkey + from $j3 + group by ps_partkey +); + +$p = (select p_partkey,p_mfgr + from plato.part + where + p_size = 10 + and p_type like '%COPPER' +); + +$j4 = (select s_acctbal, + s_name, + n_name, + p_partkey, + p_mfgr, + s_address, + s_phone, + s_comment + from $p as p + join $j3 as j on p.p_partkey = j.ps_partkey + join $min_ps_supplycost as m on p.p_partkey = m.ps_partkey + where min_ps_supplycost=ps_supplycost +); + +select + s_acctbal, + s_name, + n_name, + p_partkey, + p_mfgr, + s_address, + s_phone, + s_comment +from $j4 +order by + s_acctbal desc, + n_name, + s_name, + p_partkey +limit 100; + diff --git a/yt/yql/tests/sql/suites/tpch/q20.sql b/yt/yql/tests/sql/suites/tpch/q20.sql new file mode 100644 index 0000000000..3272f866d6 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q20.sql @@ -0,0 +1,83 @@ + +-- TPC-H/TPC-R Potential Part Promotion Query (Q20) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$border = Date("1993-01-01"); +$threshold = ( +select + 0.5 * sum(l_quantity) as threshold, + l_partkey as l_partkey, + l_suppkey as l_suppkey +from + plato.lineitem +where + cast(l_shipdate as timestamp) >= $border + and cast(l_shipdate as timestamp) < ($border + Interval("P365D")) +group by + l_partkey, l_suppkey +); + +$parts = ( +select + p_partkey +from + plato.part +where + StartsWith(p_name, 'maroon') +); + +$join1 = ( +select + ps.ps_suppkey as ps_suppkey, + ps.ps_availqty as ps_availqty, + ps.ps_partkey as ps_partkey +from + plato.partsupp as ps +join any + $parts as p +on + ps.ps_partkey = p.p_partkey +); + +$join2 = ( +select + distinct(j.ps_suppkey) as ps_suppkey +from + $join1 as j +join any + $threshold as t +on + j.ps_partkey = t.l_partkey and j.ps_suppkey = t.l_suppkey +where + j.ps_availqty > t.threshold +); + +$join3 = ( +select + j.ps_suppkey as ps_suppkey, + s.s_name as s_name, + s.s_address as s_address, + s.s_nationkey as s_nationkey +from + $join2 as j +join any + plato.supplier as s +on + j.ps_suppkey = s.s_suppkey +); + +select + j.s_name as s_name, + j.s_address as s_address +from + $join3 as j +join + plato.nation as n +on + j.s_nationkey = n.n_nationkey +where + n.n_name = 'VIETNAM' +order by + s_name; + diff --git a/yt/yql/tests/sql/suites/tpch/q21.sql b/yt/yql/tests/sql/suites/tpch/q21.sql new file mode 100644 index 0000000000..8b116c809c --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q21.sql @@ -0,0 +1,51 @@ + +-- TPC-H/TPC-R Suppliers Who Kept Orders Waiting Query (Q21) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$n = select n_nationkey from plato.nation +where n_name = 'EGYPT'; + +$s = select s_name, s_suppkey from plato.supplier as supplier +join $n as nation +on supplier.s_nationkey = nation.n_nationkey; + +$l = select l_suppkey, l_orderkey from plato.lineitem +where l_receiptdate > l_commitdate; + +$j1 = select s_name, l_suppkey, l_orderkey from $l as l1 +join $s as supplier +on l1.l_suppkey = supplier.s_suppkey; + +$j1_1 = select l1.l_orderkey as l_orderkey from $j1 as l1 +join $l as l3 +on l1.l_orderkey = l3.l_orderkey +where l3.l_suppkey <> l1.l_suppkey; + +$j2 = select s_name, l_suppkey, l_orderkey from $j1 as l1 +left only join $j1_1 as l3 +on l1.l_orderkey = l3.l_orderkey; + +$j2_1 = select l1.l_orderkey as l_orderkey from $j2 as l1 +join plato.lineitem as l2 +on l1.l_orderkey = l2.l_orderkey +where l2.l_suppkey <> l1.l_suppkey; + +$j3 = select s_name, l1.l_suppkey as l_suppkey, l1.l_orderkey as l_orderkey from $j2 as l1 +left semi join $j2_1 as l2 +on l1.l_orderkey = l2.l_orderkey; + +$j4 = select s_name from $j3 as l1 +join plato.orders as orders +on orders.o_orderkey = l1.l_orderkey +where o_orderstatus = 'F'; + +select s_name, + count(*) as numwait from $j4 +group by + s_name +order by + numwait desc, + s_name +limit 100; + diff --git a/yt/yql/tests/sql/suites/tpch/q22.sql b/yt/yql/tests/sql/suites/tpch/q22.sql new file mode 100644 index 0000000000..4b12ec51a7 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q22.sql @@ -0,0 +1,58 @@ + +-- TPC-H/TPC-R Global Sales Opportunity Query (Q22) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$customers = ( +select + c_acctbal, + c_custkey, + Substring(c_phone, 0u, 2u) as cntrycode +from + plato.customer +where (Substring(c_phone, 0u, 2u) = '31' or Substring(c_phone, 0u, 2u) = '29' or Substring(c_phone, 0u, 2u) = '30' or Substring(c_phone, 0u, 2u) = '26' or Substring(c_phone, 0u, 2u) = '28' or Substring(c_phone, 0u, 2u) = '25' or Substring(c_phone, 0u, 2u) = '15') +); +$avg = ( +select + avg(c_acctbal) as a +from + $customers +where + c_acctbal > 0.00 +); +$join1 = ( +select + c.c_acctbal as c_acctbal, + c.c_custkey as c_custkey, + c.cntrycode as cntrycode +from + $customers as c +cross join + $avg as a +where + c.c_acctbal > a.a +); +$join2 = ( +select + j.cntrycode as cntrycode, + c_custkey, + j.c_acctbal as c_acctbal +from + $join1 as j +left only join + plato.orders as o +on + o.o_custkey = j.c_custkey +); + +select + cntrycode, + count(*) as numcust, + sum(c_acctbal) as totacctbal +from + $join2 as custsale +group by + cntrycode +order by + cntrycode; + diff --git a/yt/yql/tests/sql/suites/tpch/q3.sql b/yt/yql/tests/sql/suites/tpch/q3.sql new file mode 100644 index 0000000000..668cb9441f --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q3.sql @@ -0,0 +1,55 @@ + +-- TPC-H/TPC-R Shipping Priority Query (Q3) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$join1 = ( +select + c.c_mktsegment as c_mktsegment, + o.o_orderdate as o_orderdate, + o.o_shippriority as o_shippriority, + o.o_orderkey as o_orderkey +from + plato.customer as c +join + plato.orders as o +on + c.c_custkey = o.o_custkey +); + +$join2 = ( +select + j1.c_mktsegment as c_mktsegment, + j1.o_orderdate as o_orderdate, + j1.o_shippriority as o_shippriority, + l.l_orderkey as l_orderkey, + l.l_discount as l_discount, + l.l_shipdate as l_shipdate, + l.l_extendedprice as l_extendedprice +from + $join1 as j1 +join + plato.lineitem as l +on + l.l_orderkey = j1.o_orderkey +); + +select + l_orderkey, + sum(l_extendedprice * (1 - l_discount)) as revenue, + o_orderdate, + o_shippriority +from + $join2 +where + c_mktsegment = 'MACHINERY' + and CAST(o_orderdate AS Timestamp) < Date('1995-03-08') + and CAST(l_shipdate AS Timestamp) > Date('1995-03-08') +group by + l_orderkey, + o_orderdate, + o_shippriority +order by + revenue desc, + o_orderdate +limit 10; diff --git a/yt/yql/tests/sql/suites/tpch/q4.sql b/yt/yql/tests/sql/suites/tpch/q4.sql new file mode 100644 index 0000000000..9b02c049cd --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q4.sql @@ -0,0 +1,29 @@ + +-- TPC-H/TPC-R Order Priority Checking Query (Q4) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$border = Date("1994-03-01"); + +$join = (select + o.o_orderpriority as o_orderpriority, + o.o_orderdate as o_orderdate, + l.l_commitdate as l_commitdate, + l.l_receiptdate as l_receiptdate + from + plato.orders as o + join any plato.lineitem as l + on o.o_orderkey = l.l_orderkey); + +select + o_orderpriority, + count(*) as order_count +from $join +where + CAST(o_orderdate AS Timestamp) >= $border + and CAST(o_orderdate AS Timestamp) < DateTime::MakeDate(DateTime::ShiftMonths($border, 3)) + and l_commitdate < l_receiptdate +group by + o_orderpriority +order by + o_orderpriority; diff --git a/yt/yql/tests/sql/suites/tpch/q5.sql b/yt/yql/tests/sql/suites/tpch/q5.sql new file mode 100644 index 0000000000..62e7acc7d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q5.sql @@ -0,0 +1,102 @@ + +-- TPC-H/TPC-R Local Supplier Volume Query (Q5) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$join1 = ( +select + o.o_orderkey as o_orderkey, + o.o_orderdate as o_orderdate, + c.c_nationkey as c_nationkey +from + plato.customer as c +join + plato.orders as o +on + c.c_custkey = o.o_custkey +); + +$join2 = ( +select + j.o_orderkey as o_orderkey, + j.o_orderdate as o_orderdate, + j.c_nationkey as c_nationkey, + l.l_extendedprice as l_extendedprice, + l.l_discount as l_discount, + l.l_suppkey as l_suppkey +from + $join1 as j +join + plato.lineitem as l +on + l.l_orderkey = j.o_orderkey +); + +$join3 = ( +select + j.o_orderkey as o_orderkey, + j.o_orderdate as o_orderdate, + j.c_nationkey as c_nationkey, + j.l_extendedprice as l_extendedprice, + j.l_discount as l_discount, + j.l_suppkey as l_suppkey, + s.s_nationkey as s_nationkey +from + $join2 as j +join + plato.supplier as s +on + j.l_suppkey = s.s_suppkey +); +$join4 = ( +select + j.o_orderkey as o_orderkey, + j.o_orderdate as o_orderdate, + j.c_nationkey as c_nationkey, + j.l_extendedprice as l_extendedprice, + j.l_discount as l_discount, + j.l_suppkey as l_suppkey, + j.s_nationkey as s_nationkey, + n.n_regionkey as n_regionkey, + n.n_name as n_name +from + $join3 as j +join + plato.nation as n +on + j.s_nationkey = n.n_nationkey + and j.c_nationkey = n.n_nationkey +); +$join5 = ( +select + j.o_orderkey as o_orderkey, + j.o_orderdate as o_orderdate, + j.c_nationkey as c_nationkey, + j.l_extendedprice as l_extendedprice, + j.l_discount as l_discount, + j.l_suppkey as l_suppkey, + j.s_nationkey as s_nationkey, + j.n_regionkey as n_regionkey, + j.n_name as n_name, + r.r_name as r_name +from + $join4 as j +join + plato.region as r +on + j.n_regionkey = r.r_regionkey +); +$border = Date("1995-01-01"); +select + n_name, + sum(l_extendedprice * (1 - l_discount)) as revenue +from + $join5 +where + r_name = 'AFRICA' + and CAST(o_orderdate AS Timestamp) >= $border + and CAST(o_orderdate AS Timestamp) < ($border + Interval("P365D")) +group by + n_name +order by + revenue desc; diff --git a/yt/yql/tests/sql/suites/tpch/q6.sql b/yt/yql/tests/sql/suites/tpch/q6.sql new file mode 100644 index 0000000000..c96b8ac098 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q6.sql @@ -0,0 +1,16 @@ + +-- TPC-H/TPC-R Forecasting Revenue Change Query (Q6) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$border = Date("1995-01-01"); + +select + sum(l_extendedprice * l_discount) as revenue +from + plato.lineitem +where + CAST(l_shipdate AS Timestamp) >= $border + and cast(l_shipdate as Timestamp) < ($border + Interval("P365D")) + and l_discount between 0.07 - 0.01 and 0.07 + 0.01 + and l_quantity < 25; diff --git a/yt/yql/tests/sql/suites/tpch/q7.sql b/yt/yql/tests/sql/suites/tpch/q7.sql new file mode 100644 index 0000000000..6ff0eec4db --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q7.sql @@ -0,0 +1,87 @@ + +-- TPC-H/TPC-R Volume Shipping Query (Q7) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$n = select n_name, n_nationkey from plato.nation as n + where n_name = 'PERU' or n_name = 'MOZAMBIQUE'; + +$l = select + l_orderkey, l_suppkey, + DateTime::GetYear(cast(l_shipdate as timestamp)) as l_year, + l_extendedprice * (1 - l_discount) as volume +from + plato.lineitem as l +where + cast(cast(l.l_shipdate as Timestamp) as Date) + between Date('1995-01-01') and Date('1996-12-31'); + +$j1 = select + n_name as supp_nation, + s_suppkey +from + plato.supplier as supplier +join + $n as n1 +on + supplier.s_nationkey = n1.n_nationkey; + +$j2 = select + n_name as cust_nation, + c_custkey +from + plato.customer as customer +join + $n as n2 +on + customer.c_nationkey = n2.n_nationkey; + +$j3 = select + cust_nation, o_orderkey +from + plato.orders as orders +join + $j2 as customer +on + orders.o_custkey = customer.c_custkey; + +$j4 = select + cust_nation, + l_orderkey, l_suppkey, + l_year, + volume +from + $l as lineitem +join + $j3 as orders +on + lineitem.l_orderkey = orders.o_orderkey; + +$j5 = select + supp_nation, cust_nation, + l_year, volume +from + $j4 as lineitem +join + $j1 as supplier +on + lineitem.l_suppkey = supplier.s_suppkey +where (supp_nation = 'PERU' and cust_nation = 'MOZAMBIQUE') + OR (supp_nation = 'MOZAMBIQUE' and cust_nation = 'PERU'); + +select + supp_nation, + cust_nation, + l_year, + sum(volume) as revenue +from + $j5 as shipping +group by + supp_nation, + cust_nation, + l_year +order by + supp_nation, + cust_nation, + l_year; + diff --git a/yt/yql/tests/sql/suites/tpch/q8.sql b/yt/yql/tests/sql/suites/tpch/q8.sql new file mode 100644 index 0000000000..855813a06e --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q8.sql @@ -0,0 +1,110 @@ + +-- TPC-H/TPC-R National Market Share Query (Q8) +-- TPC TPC-H Parameter Substitution (Version 2.17.2 build 0) +-- using 1680793381 as a seed to the RNG + +$join1 = ( +select + l.l_extendedprice * (1 - l.l_discount) as volume, + l.l_suppkey as l_suppkey, + l.l_orderkey as l_orderkey +from + plato.part as p +join + plato.lineitem as l +on + p.p_partkey = l.l_partkey +where + p.p_type = 'ECONOMY PLATED COPPER' +); +$join2 = ( +select + j.volume as volume, + j.l_orderkey as l_orderkey, + s.s_nationkey as s_nationkey +from + $join1 as j +join + plato.supplier as s +on + s.s_suppkey = j.l_suppkey +); +$join3 = ( +select + j.volume as volume, + j.l_orderkey as l_orderkey, + n.n_name as nation +from + $join2 as j +join + plato.nation as n +on + n.n_nationkey = j.s_nationkey +); +$join4 = ( +select + j.volume as volume, + j.nation as nation, + DateTime::GetYear(cast(o.o_orderdate as Timestamp)) as o_year, + o.o_custkey as o_custkey +from + $join3 as j +join + plato.orders as o +on + o.o_orderkey = j.l_orderkey +where cast(cast(o_orderdate as Timestamp) as Date) between Date('1995-01-01') and Date('1996-12-31') +); +$join5 = ( +select + j.volume as volume, + j.nation as nation, + j.o_year as o_year, + c.c_nationkey as c_nationkey +from + $join4 as j +join + plato.customer as c +on + c.c_custkey = j.o_custkey +); +$join6 = ( +select + j.volume as volume, + j.nation as nation, + j.o_year as o_year, + n.n_regionkey as n_regionkey +from + $join5 as j +join + plato.nation as n +on + n.n_nationkey = j.c_nationkey +); +$join7 = ( +select + j.volume as volume, + j.nation as nation, + j.o_year as o_year +from + $join6 as j +join + plato.region as r +on + r.r_regionkey = j.n_regionkey +where + r.r_name = 'AFRICA' +); + +select + o_year, + sum(case + when nation = 'MOZAMBIQUE' then volume + else 0 + end) / sum(volume) as mkt_share +from + $join7 as all_nations +group by + o_year +order by + o_year; diff --git a/yt/yql/tests/sql/suites/tpch/q9.sql b/yt/yql/tests/sql/suites/tpch/q9.sql new file mode 100644 index 0000000000..f6c9f914ed --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/q9.sql @@ -0,0 +1,59 @@ + +-- TPC-H/TPC-R Product Type Profit Measure Query (Q9) +-- Approved February 1998 +-- using 1680793381 as a seed to the RNG + +$p = (select p_partkey, p_name +from + plato.part +where FIND(p_name, 'rose') IS NOT NULL); + +$j1 = (select ps_partkey, ps_suppkey, ps_supplycost +from + plato.partsupp as ps +join $p as p +on ps.ps_partkey = p.p_partkey); + +$j2 = (select l_suppkey, l_partkey, l_orderkey, l_extendedprice, l_discount, ps_supplycost, l_quantity +from + plato.lineitem as l +join $j1 as j +on l.l_suppkey = j.ps_suppkey AND l.l_partkey = j.ps_partkey); + +$j3 = (select l_orderkey, s_nationkey, l_extendedprice, l_discount, ps_supplycost, l_quantity +from + plato.supplier as s +join $j2 as j +on j.l_suppkey = s.s_suppkey); + +$j4 = (select o_orderdate, l_extendedprice, l_discount, ps_supplycost, l_quantity, s_nationkey +from + plato.orders as o +join $j3 as j +on o.o_orderkey = j.l_orderkey); + +$j5 = (select n_name, o_orderdate, l_extendedprice, l_discount, ps_supplycost, l_quantity +from + plato.nation as n +join $j4 as j +on j.s_nationkey = n.n_nationkey +); + +$profit = (select + n_name as nation, + DateTime::GetYear(cast(o_orderdate as timestamp)) as o_year, + l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity as amount +from $j5); + +select + nation, + o_year, + sum(amount) as sum_profit +from $profit +group by + nation, + o_year +order by + nation, + o_year desc; + diff --git a/yt/yql/tests/sql/suites/tpch/region.txt.attr b/yt/yql/tests/sql/suites/tpch/region.txt.attr new file mode 100644 index 0000000000..daadd6b05b --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/region.txt.attr @@ -0,0 +1,26 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "name" = "r_regionkey"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "r_comment"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "r_name"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/tpch/supplier.txt.attr b/yt/yql/tests/sql/suites/tpch/supplier.txt.attr new file mode 100644 index 0000000000..cc250b2226 --- /dev/null +++ b/yt/yql/tests/sql/suites/tpch/supplier.txt.attr @@ -0,0 +1,50 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "name" = "s_suppkey"; + "required" = %true; + "sort_order" = "ascending"; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "s_comment"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "s_address"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "s_acctbal"; + "required" = %true; + "type" = "double"; + "type_v3" = "double"; + }; + { + "name" = "s_nationkey"; + "required" = %true; + "type" = "int32"; + "type_v3" = "int32"; + }; + { + "name" = "s_name"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + { + "name" = "s_phone"; + "required" = %true; + "type" = "string"; + "type_v3" = "string"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/type_literal/create_table.sql b/yt/yql/tests/sql/suites/type_literal/create_table.sql new file mode 100644 index 0000000000..de2d80bf98 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_literal/create_table.sql @@ -0,0 +1,80 @@ +/* syntax version 1 */ +/* do not execute */ + +create table plato.Output ( + c_void Void, + c_unit Unit, + c_bool Bool, + + c_uint8 Uint8, + c_uint16 Uint16, + c_uint32 Uint32 NOT NULL, + c_uint64 Uint64 NOT NULL, + + c_int8 int8, + c_int16 int16, + c_int32 int32, + c_int64 int64, + + c_tinyint TINYINT, + c_smallint SMALLINT, + c_int INT, + c_integer INTEGER, + c_bigint BIGINT, + + c_float float, + c_double double, + + c_string String, + c_varchar Varchar, + c_utf8 Utf8, + c_yson Yson, + c_json Json, + c_uuid Uuid, + + c_date Date, + c_datetime Datetime, + c_timestamp Timestamp, + c_interval Interval, + c_tzdate TzDate, + c_tzdatetime TzDatetime, + c_tztimestamp TzTimestamp, + + c_decimal0 Decimal(20, 10), + + c_optional0 Optional<string>, + c_optional1 string ?, + c_optional2 string??, + c_optional3 string? ? ?, + c_optional4 optional<string>?, + + c_tuple Tuple< bool, uint64 >, + c_struct Struct< foo:string, 'bar':float >, + c_variant1 Variant< int, bool >, + c_variant2 Variant< foo:int, "bar":bool >, + + c_list List<Yson>, + c_stream Stream<Date>, + c_flow Flow<Uuid>, + c_dict Dict<string, interval>, + c_set Set<TzTimestamp>, + c_enum Enum< first, second, third >, + + c_resource0 Resource<'foo'>, + c_resource1 Resource<bar>, + + c_tagged Tagged<Uint64, 'tag'>, + c_generic Generic, + + c_sometype0 set<list<dict<string, int??>?>>, + + c_callable0 Callable<()->bool>, + c_callable1 Callable<(int32)->int8>, + c_callable2 Callable<(int32, string)->float>, + c_callable3 Callable<(int32, foo : string)->float>, + c_callable4 Callable<(foo : int32, bar : string)->float>, + c_callable5 Callable<([foo : int32, bar : string])->float>, + c_callable6 Callable<(foo : int32, [bar : string])->float>, + c_callable7 Callable<(foo : int32, bar : optional<string>)->float?>, + c_callable8 Callable<(foo : int32{automap}, bar : string{Automap})->float> +); diff --git a/yt/yql/tests/sql/suites/type_literal/declare.sql b/yt/yql/tests/sql/suites/type_literal/declare.sql new file mode 100644 index 0000000000..4454e4d97d --- /dev/null +++ b/yt/yql/tests/sql/suites/type_literal/declare.sql @@ -0,0 +1,82 @@ +/* syntax version 1 */ +/* do not execute */ + +declare $c_void as Void; +declare $c_unit as Unit; +declare $c_bool as Bool; + +declare $c_uint8 as Uint8; +declare $c_uint16 as Uint16; +declare $c_uint32 as Uint32; +declare $c_uint64 as Uint64; + +declare $c_int8 as int8; +declare $c_int16 as int16; +declare $c_int32 as int32; +declare $c_int64 as int64; + +declare $c_tinyint as TINYINT; +declare $c_smallint as SMALLINT; +declare $c_int as INT; +declare $c_integer as INTEGER; +declare $c_bigint as BIGINT; + +declare $c_float as float; +declare $c_double as double; + +declare $c_string as String; +declare $c_varchar as Varchar; +declare $c_utf8 as Utf8; +declare $c_yson as Yson; +declare $c_json as Json; +declare $c_uuid as Uuid; + +declare $c_date as Date; +declare $c_datetime as Datetime; +declare $c_timestamp as Timestamp; +declare $c_interval as Interval; +declare $c_tzdate as TzDate; +declare $c_tzdatetime as TzDatetime; +declare $c_tztimestamp as TzTimestamp; + +declare $c_decimal0 as Decimal(20, 10); + +declare $c_optional0 as Optional<string>; +declare $c_optional1 as string ?; +declare $c_optional2 as string??; +declare $c_optional3 as string? ? ?; +declare $c_optional4 as optional<string>?; + +declare $c_tuple as Tuple< bool, uint64 >; +declare $c_struct as Struct< foo:string, 'bar':float >; +declare $c_variant1 as Variant< int, bool >; +declare $c_variant2 as Variant< foo:int, "bar":bool >; + +declare $c_list0 as List<Yson>; +declare $c_list1 as List<$c_yson>; +declare $c_stream as Stream<Date>; +declare $c_flow as Flow<Uuid>; +declare $c_dict as Dict<string, interval>; +declare $c_set as Set<TzTimestamp>; +declare $c_enum as Enum<'first', 'second', 'third'>; + +declare $c_resource0 as Resource<'foo'>; +declare $c_resource1 as Resource<bar>; +declare $resource as string; +declare $c_resource2 as Resource<$resource>; + +declare $c_tagged as Tagged<Uint64, 'tag'>; +declare $c_generic as Generic; + +declare $c_sometype0 as set<list<dict<string, int??>?>>; + +declare $c_callable0 as Callable<()->bool>; +declare $c_callable1 as Callable<(int32)->int8>; +declare $c_callable2 as Callable<(int32, string)->float>; +declare $c_callable3 as Callable<(int32, foo : string)->float>; +declare $c_callable4 as Callable<(foo : int32, bar : string)->float>; +declare $c_callable5 as Callable<([foo : int32, bar : string])->float>; +declare $c_callable6 as Callable<(foo : int32, [bar : string])->float>; +declare $c_callable7 as Callable<(foo : int32, bar : optional<string>)->float>; +declare $c_callable8 as Callable<(int32{automap}, foo : string{Automap})->float>; + diff --git a/yt/yql/tests/sql/suites/type_literal/default.cfg b/yt/yql/tests/sql/suites/type_literal/default.cfg new file mode 100644 index 0000000000..00dec6c3f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_literal/default.cfg @@ -0,0 +1 @@ +res result.txt diff --git a/yt/yql/tests/sql/suites/type_v3/append_diff_flags.cfg b/yt/yql/tests/sql/suites/type_v3/append_diff_flags.cfg new file mode 100644 index 0000000000..6abe091093 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/append_diff_flags.cfg @@ -0,0 +1,2 @@ +in Input with_datetime.txt yson1 +out Output with_datetime.txt yson1 diff --git a/yt/yql/tests/sql/suites/type_v3/append_diff_flags.sql b/yt/yql/tests/sql/suites/type_v3/append_diff_flags.sql new file mode 100644 index 0000000000..c6b51727a9 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/append_diff_flags.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* multirun can not */ +/* postgres can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; +pragma yt.NativeYtTypeCompatibility="date"; + +insert into Output +select key || "a" as key, subkey +from Input +order by key; diff --git a/yt/yql/tests/sql/suites/type_v3/append_diff_layout1.cfg b/yt/yql/tests/sql/suites/type_v3/append_diff_layout1.cfg new file mode 100644 index 0000000000..f0f076e433 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/append_diff_layout1.cfg @@ -0,0 +1,4 @@ +in Input native.txt yson1 +out Output1 native1.txt +out Output2 native1.txt +out Output3 native_sorted1.txt diff --git a/yt/yql/tests/sql/suites/type_v3/append_diff_layout1.sql b/yt/yql/tests/sql/suites/type_v3/append_diff_layout1.sql new file mode 100644 index 0000000000..b90c123c33 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/append_diff_layout1.sql @@ -0,0 +1,41 @@ +/* multirun can not */ +/* postgres can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; +pragma yt.NativeYtTypeCompatibility="complex"; + +$udf = YQL::@@(lambda '(x) (block '( + (let structType (StructType '('key (DataType 'String)) '('subkey (StructType '('a (DataType 'String)) '('b (OptionalType (DataType 'Int32))) '('c (DataType 'String)))))) + (let varType (VariantType (TupleType structType structType structType))) + (let res (Map x + (lambda '(r) + (If + (Coalesce (> (SafeCast (Member r 'key) (DataType 'Int32)) (Int32 '200)) (Bool 'false)) + (Variant r '0 varType) + (If + (Coalesce (< (SafeCast (Member r 'key) (DataType 'Int32)) (Int32 '50)) (Bool 'false)) + (Variant r '1 varType) + (Variant r '2 varType) + ) + ) + ) + )) + (return res) +)))@@; + +$i, $j, $k = (PROCESS Input USING $udf(TableRows())); + +insert into Output1 +select * +from $i; + +insert into Output2 +select * +from $j +limit 2; + +insert into Output3 +select * +from $k +order by key; diff --git a/yt/yql/tests/sql/suites/type_v3/append_diff_layout2.cfg b/yt/yql/tests/sql/suites/type_v3/append_diff_layout2.cfg new file mode 100644 index 0000000000..a37f07f0b5 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/append_diff_layout2.cfg @@ -0,0 +1,6 @@ +in Input native_sorted.txt yson1 +out Output1 native1.txt +out Output2 native1.txt +out Output3 native_sorted1.txt +providers yt + diff --git a/yt/yql/tests/sql/suites/type_v3/append_diff_layout2.sql b/yt/yql/tests/sql/suites/type_v3/append_diff_layout2.sql new file mode 100644 index 0000000000..fda6fde3c9 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/append_diff_layout2.sql @@ -0,0 +1,44 @@ +/* multirun can not */ +/* postgres can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; +pragma yt.NativeYtTypeCompatibility="complex"; + +$udf = YQL::@@(lambda '(x) (block '( + (let structType (StructType '('key (DataType 'String)) '('subkey (StructType '('a (DataType 'String)) '('b (OptionalType (DataType 'Int32))) '('c (DataType 'String)))))) + (let varType (VariantType (TupleType structType structType structType))) + (let res (Map x + (lambda '(r) + (If + (Coalesce (> (SafeCast (Member r 'key) (DataType 'Int32)) (Int32 '200)) (Bool 'false)) + (Variant r '0 varType) + (If + (Coalesce (< (SafeCast (Member r 'key) (DataType 'Int32)) (Int32 '50)) (Bool 'false)) + (Variant r '1 varType) + (Variant r '2 varType) + ) + ) + ) + )) + (return res) +)))@@; + +$i, $j, $k = (PROCESS Input USING $udf(TableRows())); + +insert into Output1 +select * +from $i; + +insert into Output2 +select * +from $j +limit 2; + +insert into Output3 +select * +from $k; + +insert into Output3 +select * +from $j; diff --git a/yt/yql/tests/sql/suites/type_v3/append_struct.sql b/yt/yql/tests/sql/suites/type_v3/append_struct.sql new file mode 100644 index 0000000000..20dbb5dbe6 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/append_struct.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +/* multirun can not */ +/* postgres can not */ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) == 10 */ +use plato; + +pragma yt.UseNativeYtTypes="1"; +insert into Input +select "10" as key, <|a:"10", b:Just(10), c:"e"|> as subkey; + +commit; + +insert into Input +select * from Input where key > "100"; + +insert into Input +select * from Input where key <= "100"; + +commit; + +select * from Input; diff --git a/yt/yql/tests/sql/suites/type_v3/decimal.txt.attr b/yt/yql/tests/sql/suites/type_v3/decimal.txt.attr new file mode 100644 index 0000000000..ecf2741d59 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/decimal.txt.attr @@ -0,0 +1,37 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "type" = "string"; + "required" = %true; + "name" = "decimal-9-2"; + "type_v3" = { + "type_name" = "decimal"; + "precision" = 9; + "scale" = 2 + }; + }; + { + "type" = "string"; + "required" = %true; + "name" = "decimal-18-2"; + "type_v3" = { + "type_name" = "decimal"; + "precision" = 18; + "scale" = 2 + }; + }; + { + "type" = "string"; + "required" = %true; + "name" = "decimal-35-2"; + "type_v3" = { + "type_name" = "decimal"; + "precision" = 35; + "scale" = 2 + }; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/type_v3/decimal_yt.cfg b/yt/yql/tests/sql/suites/type_v3/decimal_yt.cfg new file mode 100644 index 0000000000..de341b36d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/decimal_yt.cfg @@ -0,0 +1,2 @@ +in Input input.txt +out Output output.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/type_v3/decimal_yt.sql b/yt/yql/tests/sql/suites/type_v3/decimal_yt.sql new file mode 100644 index 0000000000..16bf6b2d33 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/decimal_yt.sql @@ -0,0 +1,8 @@ +pragma yt.UseNativeYtTypes = "true"; +insert into plato.Output with truncate +select + Decimal("3.1415", 5, 4), Decimal("2.9999999999", 12, 10), Decimal("2.12345678900876543", 35, 10), + Decimal("nan", 5, 4), Decimal("nan", 15, 4), Decimal("nan", 35, 4), + Decimal("inf", 5, 4), Decimal("inf", 15, 4), Decimal("inf", 35, 4), + Decimal("-inf", 5, 4), Decimal("-inf", 15, 4), Decimal("-inf", 35, 4) +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/type_v3/decimal_yt_llvm.cfg b/yt/yql/tests/sql/suites/type_v3/decimal_yt_llvm.cfg new file mode 100644 index 0000000000..0736d65621 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/decimal_yt_llvm.cfg @@ -0,0 +1 @@ +in Input decimal.txt yson1 diff --git a/yt/yql/tests/sql/suites/type_v3/decimal_yt_llvm.sql b/yt/yql/tests/sql/suites/type_v3/decimal_yt_llvm.sql new file mode 100644 index 0000000000..093c45369c --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/decimal_yt_llvm.sql @@ -0,0 +1,24 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; + +pragma config.flags("LLVM", ""); + +insert into @a +select * from ( + select Decimal("3.14",3,2) as d3, Decimal("2.9999999999",12,10) as d12, Decimal("2.12345678900876543",35,10) as d35 + union all + select Decimal("inf",3,2) as d3, Decimal("inf",12,10) as d12, Decimal("inf",35,10) as d35 + union all + select Decimal("-inf",3,2) as d3, Decimal("-inf",12,10) as d12, Decimal("-inf",35,10) as d35 + union all + select Decimal("nan",3,2) as d3, Decimal("nan",12,10) as d12, Decimal("nan",35,10) as d35 +); + +commit; + +select * from @a where d3 != Decimal("5.3",3,2); + +select * from Input; diff --git a/yt/yql/tests/sql/suites/type_v3/decimal_yt_nollvm.cfg b/yt/yql/tests/sql/suites/type_v3/decimal_yt_nollvm.cfg new file mode 100644 index 0000000000..0736d65621 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/decimal_yt_nollvm.cfg @@ -0,0 +1 @@ +in Input decimal.txt yson1 diff --git a/yt/yql/tests/sql/suites/type_v3/decimal_yt_nollvm.sql b/yt/yql/tests/sql/suites/type_v3/decimal_yt_nollvm.sql new file mode 100644 index 0000000000..ee7de28816 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/decimal_yt_nollvm.sql @@ -0,0 +1,24 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; + +pragma config.flags("LLVM", "OFF"); + +insert into @a +select * from ( + select Decimal("3.14",3,2) as d3, Decimal("2.9999999999",12,10) as d12, Decimal("2.12345678900876543",35,10) as d35 + union all + select Decimal("inf",3,2) as d3, Decimal("inf",12,10) as d12, Decimal("inf",35,10) as d35 + union all + select Decimal("-inf",3,2) as d3, Decimal("-inf",12,10) as d12, Decimal("-inf",35,10) as d35 + union all + select Decimal("nan",3,2) as d3, Decimal("nan",12,10) as d12, Decimal("nan",35,10) as d35 +); + +commit; + +select * from @a where d3 != Decimal("5.3",3,2); + +select * from Input; diff --git a/yt/yql/tests/sql/suites/type_v3/default.cfg b/yt/yql/tests/sql/suites/type_v3/default.cfg new file mode 100644 index 0000000000..c776db379d --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/default.cfg @@ -0,0 +1 @@ +in Input native.txt diff --git a/yt/yql/tests/sql/suites/type_v3/float.cfg b/yt/yql/tests/sql/suites/type_v3/float.cfg new file mode 100644 index 0000000000..4e524d6239 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/float.cfg @@ -0,0 +1 @@ +in Output output.txt diff --git a/yt/yql/tests/sql/suites/type_v3/float.sql b/yt/yql/tests/sql/suites/type_v3/float.sql new file mode 100644 index 0000000000..47d35cc437 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/float.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; + +insert into Output +select * from ( + select Float("3.14") as f + union all + select Float("1.2") as f +); + +commit; + +select * from Output where f != Float("5.3"); diff --git a/yt/yql/tests/sql/suites/type_v3/float.txt.attr b/yt/yql/tests/sql/suites/type_v3/float.txt.attr new file mode 100644 index 0000000000..14512b014a --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/float.txt.attr @@ -0,0 +1,17 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "type_v3" = "string"; + "required" = %true; + "name" = "key"; + }; + { + "type_v3" = "float"; + "required" = %true; + "name" = "subkey"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint-opt.cfg b/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint-opt.cfg new file mode 100644 index 0000000000..5b9fbdcfe1 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint-opt.cfg @@ -0,0 +1,3 @@ +in Input native_opt.txt +udf protobuf_udf +udf yson2_udf diff --git a/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint-protofield.cfg b/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint-protofield.cfg new file mode 100644 index 0000000000..cb1a9077b7 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint-protofield.cfg @@ -0,0 +1,3 @@ +in Input native_proto.txt +udf protobuf_udf +udf yson2_udf diff --git a/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint-tag_opt.cfg b/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint-tag_opt.cfg new file mode 100644 index 0000000000..895395a8e9 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint-tag_opt.cfg @@ -0,0 +1,3 @@ +in Input native_tag_opt.txt +udf protobuf_udf +udf yson2_udf diff --git a/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint.cfg b/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint.cfg new file mode 100644 index 0000000000..4d28bce293 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint.cfg @@ -0,0 +1,2 @@ +in Input native.txt +udf yson2_udf diff --git a/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint.sql b/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint.sql new file mode 100644 index 0000000000..6026251f49 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/ignore_v3_hint.sql @@ -0,0 +1,8 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +select + key, + Yson::LookupString(subkey, "a") as a, +from Input with ignore_type_v3;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/type_v3/ignore_v3_pragma.cfg b/yt/yql/tests/sql/suites/type_v3/ignore_v3_pragma.cfg new file mode 100644 index 0000000000..4d28bce293 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/ignore_v3_pragma.cfg @@ -0,0 +1,2 @@ +in Input native.txt +udf yson2_udf diff --git a/yt/yql/tests/sql/suites/type_v3/ignore_v3_pragma.sql b/yt/yql/tests/sql/suites/type_v3/ignore_v3_pragma.sql new file mode 100644 index 0000000000..9e04d09cb9 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/ignore_v3_pragma.sql @@ -0,0 +1,10 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +pragma yt.IgnoreTypeV3; + +select + key, + Yson::LookupString(subkey, "a") as a, +from Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/type_v3/insert_struct_v3_with_native.cfg b/yt/yql/tests/sql/suites/type_v3/insert_struct_v3_with_native.cfg new file mode 100644 index 0000000000..d381049510 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/insert_struct_v3_with_native.cfg @@ -0,0 +1,3 @@ +in Input1 native.txt +in Input2 native1.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/type_v3/insert_struct_v3_with_native.sql b/yt/yql/tests/sql/suites/type_v3/insert_struct_v3_with_native.sql new file mode 100644 index 0000000000..1a8440f48c --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/insert_struct_v3_with_native.sql @@ -0,0 +1,25 @@ +/* syntax version 1 */ +/* multirun can not */ +/* postgres can not */ +/* kikimr can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; + +insert into @a with truncate +select * from concat(Input1, Input2); + +commit; + +insert into @a with truncate +select * from Input1; + +commit; + +insert into @a +select * from Input2; + +commit; + +insert into @a +select * from concat(Input1, Input2); diff --git a/yt/yql/tests/sql/suites/type_v3/insert_struct_v3_wo_native.cfg b/yt/yql/tests/sql/suites/type_v3/insert_struct_v3_wo_native.cfg new file mode 100644 index 0000000000..d381049510 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/insert_struct_v3_wo_native.cfg @@ -0,0 +1,3 @@ +in Input1 native.txt +in Input2 native1.txt +out Output output.txt diff --git a/yt/yql/tests/sql/suites/type_v3/insert_struct_v3_wo_native.sql b/yt/yql/tests/sql/suites/type_v3/insert_struct_v3_wo_native.sql new file mode 100644 index 0000000000..f2812ad5ce --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/insert_struct_v3_wo_native.sql @@ -0,0 +1,25 @@ +/* syntax version 1 */ +/* multirun can not */ +/* postgres can not */ +/* kikimr can not */ +use plato; + +pragma yt.UseNativeYtTypes="0"; + +insert into Output with truncate +select * from concat(Input1, Input2); + +commit; + +insert into Output with truncate +select * from Input1; + +commit; + +insert into Output +select * from Input2; + +commit; + +insert into Output +select * from concat(Input1, Input2); diff --git a/yt/yql/tests/sql/suites/type_v3/json.cfg b/yt/yql/tests/sql/suites/type_v3/json.cfg new file mode 100644 index 0000000000..4e524d6239 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/json.cfg @@ -0,0 +1 @@ +in Output output.txt diff --git a/yt/yql/tests/sql/suites/type_v3/json.sql b/yt/yql/tests/sql/suites/type_v3/json.sql new file mode 100644 index 0000000000..33d3b27e10 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/json.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; + +insert into Output +select * from ( + select Json(@@{"a": 4.7, "c": "abc"}@@) as j + union all + select Json(@@{"d": "fff"}@@) as j +); + +commit; + +select * from Output where ToBytes(j) != ""; diff --git a/yt/yql/tests/sql/suites/type_v3/mergejoin_with_sort.cfg b/yt/yql/tests/sql/suites/type_v3/mergejoin_with_sort.cfg new file mode 100644 index 0000000000..8bb3b795de --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/mergejoin_with_sort.cfg @@ -0,0 +1,2 @@ +in Input1 native.txt +in Input2 native_sorted.txt diff --git a/yt/yql/tests/sql/suites/type_v3/mergejoin_with_sort.sql b/yt/yql/tests/sql/suites/type_v3/mergejoin_with_sort.sql new file mode 100644 index 0000000000..0c579ffd74 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/mergejoin_with_sort.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +pragma yt.JoinMergeTablesLimit="100"; +pragma yt.JoinMergeForce="true"; + +select a.key as key, a.subkey as s1, b.subkey as s2 +from Input1 as a +join Input2 as b using(key) +order by key; diff --git a/yt/yql/tests/sql/suites/type_v3/mixed.txt.attr b/yt/yql/tests/sql/suites/type_v3/mixed.txt.attr new file mode 100644 index 0000000000..27e89f554e --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/mixed.txt.attr @@ -0,0 +1,40 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "name" = "dt"; + "required" = %true; + "type" = "date"; + "type_v3" = "date"; + }; + { + "name" = "dt_yson"; + "required" = %false; + "type" = "any"; + "type_v3" = { + "type_name" = "optional"; + "item" = "yson"; + }; + }; + { + "name" = "lst"; + "required" = %true; + "type" = "any"; + "type_v3" = { + "type_name" = "list"; + "item" = "int32"; + }; + }; + { + "name" = "lst_yson"; + "required" = %false; + "type" = "any"; + "type_v3" = { + "type_name" = "optional"; + "item" = "yson"; + }; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/type_v3/mixed_with_columns.cfg b/yt/yql/tests/sql/suites/type_v3/mixed_with_columns.cfg new file mode 100644 index 0000000000..66d8ecc478 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/mixed_with_columns.cfg @@ -0,0 +1 @@ +in Input mixed.txt diff --git a/yt/yql/tests/sql/suites/type_v3/mixed_with_columns.sql b/yt/yql/tests/sql/suites/type_v3/mixed_with_columns.sql new file mode 100644 index 0000000000..1092d16c3b --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/mixed_with_columns.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +use plato; + +select dt_yson, lst_yson, dt, lst from Input +with columns Struct<lst_yson: List<int32>?,dt_yson:Date?>;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/type_v3/native.txt.attr b/yt/yql/tests/sql/suites/type_v3/native.txt.attr new file mode 100644 index 0000000000..9ec4ef5162 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/native.txt.attr @@ -0,0 +1,36 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "type_v3" = "string"; + "required" = %true; + "name" = "key"; + }; + { + "type_v3" = { + "type_name" = "struct"; + "members" = [ + { + "type" = { + "type_name" = "optional"; + "item" = "int32"; + }; + "name" = "b"; + }; + { + "type" = "string"; + "name" = "a"; + }; + { + "type" = "string"; + "name" = "c"; + }; + ]; + }; + "required" = %true; + "name" = "subkey"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/type_v3/native1.txt.attr b/yt/yql/tests/sql/suites/type_v3/native1.txt.attr new file mode 100644 index 0000000000..69b61addb6 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/native1.txt.attr @@ -0,0 +1,36 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "type_v3" = "string"; + "required" = %true; + "name" = "key"; + }; + { + "type_v3" = { + "type_name" = "struct"; + "members" = [ + { + "type" = { + "type_name" = "optional"; + "item" = "int32"; + }; + "name" = "b"; + }; + { + "type" = "string"; + "name" = "c"; + }; + { + "type" = "string"; + "name" = "a"; + }; + ]; + }; + "required" = %true; + "name" = "subkey"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/type_v3/native_opt.txt.attr b/yt/yql/tests/sql/suites/type_v3/native_opt.txt.attr new file mode 100644 index 0000000000..e6dfe29775 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/native_opt.txt.attr @@ -0,0 +1,39 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "type_v3" = "string"; + "required" = %true; + "name" = "key"; + }; + { + "type_v3" = { + "type_name" = "optional"; + "item" = { + "type_name" = "struct"; + "members" = [ + { + "type" = { + "type_name" = "optional"; + "item" = "int32"; + }; + "name" = "b"; + }; + { + "type" = "string"; + "name" = "c"; + }; + { + "type" = "string"; + "name" = "a"; + }; + ]; + }; + }; + "required" = %false; + "name" = "subkey"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/type_v3/native_proto.txt.attr b/yt/yql/tests/sql/suites/type_v3/native_proto.txt.attr new file mode 100644 index 0000000000..6d2ac56a57 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/native_proto.txt.attr @@ -0,0 +1,37 @@ +{ + "_yql_proto_field_key"="{\"name\":\"TA\",\"meta\":\"H4sIAAAAAAAAA42Puw6CQBBFszw0DEp0Y4E2GmyolriJHyAPS6rVflFMTBCUR8Hn+KcuD0ui3WRy59wzcIJ1co9yntfOM8/KLKpuTv1KnKp0rqTdWBQk5uM5SEFhKhvZNqhKmE8CPAHF5yU30QbZmqUDCvAIpONuhmA/jL30WCywXsMI+SPuGJAOn0XdGVZDFhfl6qf1VuBdPAX1zJOq46vYAOSbkhh1Kosf4I2GC/mfhb3YcOD78EoYHfACkNva6FQjLZow11rCmJ3SqoivjaPXB4Sj9wEBmoL3ogEAAA==\",\"lists\":{\"optional\":true}}"; + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "type_v3" = "string"; + "required" = %true; + "name" = "key"; + }; + { + "type_v3" = { + "type_name" = "struct"; + "members" = [ + { + "type" = { + "type_name" = "optional"; + "item" = "int32"; + }; + "name" = "b"; + }; + { + "type" = "string"; + "name" = "a"; + }; + { + "type" = "string"; + "name" = "c"; + }; + ]; + }; + "required" = %true; + "name" = "subkey"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/type_v3/native_sorted.txt.attr b/yt/yql/tests/sql/suites/type_v3/native_sorted.txt.attr new file mode 100644 index 0000000000..e09d645e5e --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/native_sorted.txt.attr @@ -0,0 +1,37 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "type_v3" = "string"; + "required" = %true; + "name" = "key"; + "sort_order" = "ascending"; + }; + { + "type_v3" = { + "type_name" = "struct"; + "members" = [ + { + "type" = { + "type_name" = "optional"; + "item" = "int32"; + }; + "name" = "b"; + }; + { + "type" = "string"; + "name" = "a"; + }; + { + "type" = "string"; + "name" = "c"; + }; + ]; + }; + "required" = %true; + "name" = "subkey"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/type_v3/native_sorted1.txt.attr b/yt/yql/tests/sql/suites/type_v3/native_sorted1.txt.attr new file mode 100644 index 0000000000..5e4d231c78 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/native_sorted1.txt.attr @@ -0,0 +1,37 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "type_v3" = "string"; + "required" = %true; + "name" = "key"; + "sort_order" = "ascending"; + }; + { + "type_v3" = { + "type_name" = "struct"; + "members" = [ + { + "type" = { + "type_name" = "optional"; + "item" = "int32"; + }; + "name" = "b"; + }; + { + "type" = "string"; + "name" = "c"; + }; + { + "type" = "string"; + "name" = "a"; + }; + ]; + }; + "required" = %true; + "name" = "subkey"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/type_v3/native_tag_opt.txt.attr b/yt/yql/tests/sql/suites/type_v3/native_tag_opt.txt.attr new file mode 100644 index 0000000000..d8710922f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/native_tag_opt.txt.attr @@ -0,0 +1,43 @@ +{ + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "type_v3" = "string"; + "required" = %true; + "name" = "key"; + }; + { + "type_v3" = { + "type_name" = "tagged"; + "tag" = "tag"; + "item" = { + "type_name" = "optional"; + "item" = { + "type_name" = "struct"; + "members" = [ + { + "type" = { + "type_name" = "optional"; + "item" = "int32"; + }; + "name" = "b"; + }; + { + "type" = "string"; + "name" = "c"; + }; + { + "type" = "string"; + "name" = "a"; + }; + ]; + }; + }; + }; + "required" = %false; + "name" = "subkey"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/type_v3/non_strict.cfg b/yt/yql/tests/sql/suites/type_v3/non_strict.cfg new file mode 100644 index 0000000000..b5f401ea5c --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/non_strict.cfg @@ -0,0 +1,2 @@ +in Input other.txt +in Output output.txt diff --git a/yt/yql/tests/sql/suites/type_v3/non_strict.sql b/yt/yql/tests/sql/suites/type_v3/non_strict.sql new file mode 100644 index 0000000000..d9900ca7a5 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/non_strict.sql @@ -0,0 +1,12 @@ +/* syntax version 1 */ +/* multirun can not */ +/* postgres can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; +pragma yt.NativeYtTypeCompatibility="complex"; + +insert into Output +select t.*, CAST(TableRecordIndex() as UInt64) as record_idx +from Input as t +order by record_idx; diff --git a/yt/yql/tests/sql/suites/type_v3/other.txt.attr b/yt/yql/tests/sql/suites/type_v3/other.txt.attr new file mode 100644 index 0000000000..49d98771a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/other.txt.attr @@ -0,0 +1,17 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="string";"name"="key"}; + {"type"="string";"name"="subkey"}; + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "type" = "string" + }; + { + "name" = "subkey"; + "type" = "string" + } + ] +} diff --git a/yt/yql/tests/sql/suites/type_v3/replace_diff_layout.cfg b/yt/yql/tests/sql/suites/type_v3/replace_diff_layout.cfg new file mode 100644 index 0000000000..f88f151e72 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/replace_diff_layout.cfg @@ -0,0 +1,4 @@ +in Input native_sorted.txt yson1 +out Output1 native.txt +out Output2 native1.txt +out Output3 native_sorted1.txt diff --git a/yt/yql/tests/sql/suites/type_v3/replace_diff_layout.sql b/yt/yql/tests/sql/suites/type_v3/replace_diff_layout.sql new file mode 100644 index 0000000000..e3e62f71cc --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/replace_diff_layout.sql @@ -0,0 +1,40 @@ +/* multirun can not */ +/* postgres can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; +pragma yt.NativeYtTypeCompatibility="complex"; + +$udf = YQL::@@(lambda '(x) (block '( + (let structType (StructType '('key (DataType 'String)) '('subkey (StructType '('a (DataType 'String)) '('b (OptionalType (DataType 'Int32))) '('c (DataType 'String)))))) + (let varType (VariantType (TupleType structType structType structType))) + (let res (Map x + (lambda '(r) + (If + (Coalesce (> (SafeCast (Member r 'key) (DataType 'Int32)) (Int32 '200)) (Bool 'false)) + (Variant r '0 varType) + (If + (Coalesce (< (SafeCast (Member r 'key) (DataType 'Int32)) (Int32 '50)) (Bool 'false)) + (Variant r '1 varType) + (Variant r '2 varType) + ) + ) + ) + )) + (return res) +)))@@; + +$i, $j, $k = (PROCESS Input USING $udf(TableRows())); + +insert into Output1 with (truncate, keepmeta) +select * +from $i; + +insert into Output2 with (truncate, keepmeta) +select * +from $j +limit 2; + +insert into Output3 with (truncate, keepmeta) +select * +from $k; diff --git a/yt/yql/tests/sql/suites/type_v3/singulars.cfg b/yt/yql/tests/sql/suites/type_v3/singulars.cfg new file mode 100644 index 0000000000..bb349dd8ab --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/singulars.cfg @@ -0,0 +1 @@ +providers yt diff --git a/yt/yql/tests/sql/suites/type_v3/singulars.sql b/yt/yql/tests/sql/suites/type_v3/singulars.sql new file mode 100644 index 0000000000..0f6e789c43 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/singulars.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; +pragma yt.NativeYtTypeCompatibility="null;void"; + +INSERT INTO @tmp +SELECT null AS ttt, Yql::Void AS v +; + +COMMIT; +SELECT * FROM @tmp diff --git a/yt/yql/tests/sql/suites/type_v3/split.cfg b/yt/yql/tests/sql/suites/type_v3/split.cfg new file mode 100644 index 0000000000..356360ad58 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/split.cfg @@ -0,0 +1,5 @@ +in Input1 float.txt +in Input2 float.txt +in Input3 float.txt +in Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/type_v3/split.sql b/yt/yql/tests/sql/suites/type_v3/split.sql new file mode 100644 index 0000000000..97045d6e69 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/split.sql @@ -0,0 +1,6 @@ +USE plato; +PRAGMA yt.MaxInputTables="2"; + +insert into Output +select * from concat(Input1, Input2, Input3); + diff --git a/yt/yql/tests/sql/suites/type_v3/type_subset.cfg b/yt/yql/tests/sql/suites/type_v3/type_subset.cfg new file mode 100644 index 0000000000..382a04dfda --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/type_subset.cfg @@ -0,0 +1,6 @@ +in Input1 native.txt +in Input2 native.txt +in Input3 native.txt +in Input4 native.txt +in Output output.txt +providers yt diff --git a/yt/yql/tests/sql/suites/type_v3/type_subset.sql b/yt/yql/tests/sql/suites/type_v3/type_subset.sql new file mode 100644 index 0000000000..310fdb303b --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/type_subset.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* multirun can not */ +/* postgres can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; +pragma yt.NativeYtTypeCompatibility="complex"; + +pragma yt.MaxInputTables="2"; + +insert into Output with truncate +select + key +from range("") +where key > "000"; diff --git a/yt/yql/tests/sql/suites/type_v3/uuid.cfg b/yt/yql/tests/sql/suites/type_v3/uuid.cfg new file mode 100644 index 0000000000..9761526bb7 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/uuid.cfg @@ -0,0 +1 @@ +in Output output.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/type_v3/uuid.sql b/yt/yql/tests/sql/suites/type_v3/uuid.sql new file mode 100644 index 0000000000..56390c09c1 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/uuid.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +pragma yt.UseNativeYtTypes="1"; +pragma yt.NativeYtTypeCompatibility="uuid"; + +insert into Output +select * from ( + select Uuid("00000000-0000-0000-0000-100000000000") + union all + select Uuid("00000000-0000-0000-0000-200000000000") + union all + select Uuid("00000000-0000-0000-0000-400000000000") + union all + select Uuid("FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF") + union all + select Uuid("3200ec12-4ded-4f6c-a981-4b0ff18bbdd5") +); + +commit; + +select * from Output;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/type_v3/with_datetime.txt.attr b/yt/yql/tests/sql/suites/type_v3/with_datetime.txt.attr new file mode 100644 index 0000000000..067d81a082 --- /dev/null +++ b/yt/yql/tests/sql/suites/type_v3/with_datetime.txt.attr @@ -0,0 +1,29 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key"; ["DataType"; "String"]]; + ["subkey"; ["DataType"; "Datetime"]]; + ]]; + "UseNativeYtTypes" = %true; + "SortMembers" = ["key"]; + "SortedBy" = ["key"]; + "SortDirections" = [1]; + "SortedByTypes" = [["DataType";"String"]]; + }; + "schema" = < + "strict" = %true; + "unique_keys" = %false; + > [ + { + "type_v3" = "string"; + "required" = %true; + "name" = "key"; + "sort_order" = "ascending"; + }; + { + "type_v3" = "datetime"; + "required" = %true; + "name" = "subkey"; + }; + ]; +} diff --git a/yt/yql/tests/sql/suites/udf/default.cfg b/yt/yql/tests/sql/suites/udf/default.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/default.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/udf/named_args_for_script.cfg b/yt/yql/tests/sql/suites/udf/named_args_for_script.cfg new file mode 100644 index 0000000000..f773dab653 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/named_args_for_script.cfg @@ -0,0 +1,3 @@ +in Input input_tutorial_users.txt +udf python3_udf + diff --git a/yt/yql/tests/sql/suites/udf/named_args_for_script.sql b/yt/yql/tests/sql/suites/udf/named_args_for_script.sql new file mode 100644 index 0000000000..523b97853a --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/named_args_for_script.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +$udfScript = @@ +def AppendInfo(a_name, a_age = None, a_region = None): + res = a_name.decode('utf-8') + if a_age: + res += ", age: " + repr(a_age) + if a_region: + res += ", region: " + repr(a_region) + return res.encode('utf-8') +@@; + +$udf = Python3::AppendInfo(Callable<(name:String, [age:Int32?, region:Int32?])->String>, $udfScript); + +$data = (select cast(key as int32) as age, cast(subkey as int32) as region, value as name from Input); + +select $udf(region as region, name as name) as val from $data; diff --git a/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs.cfg b/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs.cfg new file mode 100644 index 0000000000..289c4251bb --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf python3_udf diff --git a/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs.sql b/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs.sql new file mode 100644 index 0000000000..e393ea92d0 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +$udfScript = @@ +def AppendInfo(a_name, a_age = None, a_region = None): + res = a_name.decode('utf-8') + if a_age: + res += ", age: " + repr(a_age) + if a_region: + res += ", region: " + repr(a_region) + return res.encode('utf-8') +@@; + +$udf = Python3::AppendInfo(Callable<(name:String, [age:Int32?, region:Int32?])->String>, $udfScript); + +$data = (select cast(key as int32) as age, cast(subkey as int32) as region, value as name from Input); + +select $udf(name, region as region, age as age) as val from $data; diff --git a/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs2.cfg b/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs2.cfg new file mode 100644 index 0000000000..289c4251bb --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs2.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf python3_udf diff --git a/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs2.sql b/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs2.sql new file mode 100644 index 0000000000..bcc8bfebaf --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs2.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +$udfScript = @@ +def AppendInfo(a_name, a_age = None, a_region = None): + res = a_name.decode('utf-8') + if a_age: + res += ", age: " + repr(a_age) + if a_region: + res += ", region: " + repr(a_region) + return res.encode('utf-8') +@@; + +$udf = Python3::AppendInfo(Callable<(name:String, [age:Int32?, region:Int32?])->String>, $udfScript); + +$data = (select cast(key as int32) as age, cast(subkey as int32) as region, value as name from Input); + +select $udf(name, age, region as region) as val from $data; diff --git a/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs_reuse_args_fail.cfg b/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs_reuse_args_fail.cfg new file mode 100644 index 0000000000..0311eba913 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs_reuse_args_fail.cfg @@ -0,0 +1,3 @@ +xfail +in Input input_tutorial_users.txt +udf python3_udf diff --git a/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs_reuse_args_fail.sql b/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs_reuse_args_fail.sql new file mode 100644 index 0000000000..7efb78e427 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/named_args_for_script_with_posargs_reuse_args_fail.sql @@ -0,0 +1,17 @@ +/* custom error:Argument with name age was already used for positional argument #2*/ +use plato; +$udfScript = @@ +def AppendInfo(a_name, a_age = None, a_region = None): + res = a_name.decode('utf-8') + if a_age: + res += ", age: " + repr(a_age) + if a_region: + res += ", region: " + repr(a_region) + return res.encode('utf-8') +@@; + +$udf = Python3::AppendInfo(Callable<(name:String, [age:Int32?, region:Int32?])->String>, $udfScript); + +$data = (select cast(key as int32) as age, cast(subkey as int32) as region, value as name from Input); + +select $udf(name, age, age as age) as val from $data; -- age is reused as named after positional diff --git a/yt/yql/tests/sql/suites/udf/python_script.cfg b/yt/yql/tests/sql/suites/udf/python_script.cfg new file mode 100644 index 0000000000..289c4251bb --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/python_script.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf python3_udf diff --git a/yt/yql/tests/sql/suites/udf/python_script.py b/yt/yql/tests/sql/suites/udf/python_script.py new file mode 100644 index 0000000000..29f52fab0c --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/python_script.py @@ -0,0 +1,2 @@ +def AppendNum(s, n): + return s + str(n).encode('utf-8') diff --git a/yt/yql/tests/sql/suites/udf/python_script.sql b/yt/yql/tests/sql/suites/udf/python_script.sql new file mode 100644 index 0000000000..cb3c5075c9 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/python_script.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +$udfScript = @@ +def AppendNum(name, age): + return name + str(age).encode('utf-8') +@@; + +$udf = Python3::AppendNum(Callable<(String, Int32?)->String>, $udfScript); + +select $udf(value, cast(subkey as Int32)) as val from Input; diff --git a/yt/yql/tests/sql/suites/udf/python_script_from_file.cfg b/yt/yql/tests/sql/suites/udf/python_script_from_file.cfg new file mode 100644 index 0000000000..79b7571fec --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/python_script_from_file.cfg @@ -0,0 +1,4 @@ +in Input input.txt +file python_script.py python_script.py +udf python2_udf +providers yt diff --git a/yt/yql/tests/sql/suites/udf/python_script_from_file.sql b/yt/yql/tests/sql/suites/udf/python_script_from_file.sql new file mode 100644 index 0000000000..259ec838aa --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/python_script_from_file.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +$udfScript = FileContent("python_script.py"); +$udf = Python::AppendNum(Callable<(String, Int32?)->String>, $udfScript); + +select $udf(value, cast(subkey as Int32)) as value from Input; diff --git a/yt/yql/tests/sql/suites/udf/python_struct.cfg b/yt/yql/tests/sql/suites/udf/python_struct.cfg new file mode 100644 index 0000000000..3c11f9c54b --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/python_struct.cfg @@ -0,0 +1,3 @@ +in Input input.txt +udf python3_udf +providers yt diff --git a/yt/yql/tests/sql/suites/udf/python_struct.sql b/yt/yql/tests/sql/suites/udf/python_struct.sql new file mode 100644 index 0000000000..82e43427d2 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/python_struct.sql @@ -0,0 +1,23 @@ +/* postgres can not */ +use plato; + +$udf = YQL::@@(block '( + (let $udfScript (String '@@@@ +class Person: + def __init__(self, name, age): + self.name = name + self.age = age + +def NewPerson(name, age): + return Person(name, age) +@@@@)) + (let ui32 (DataType 'Uint32)) + (let str (DataType 'String)) + (let personType (StructType '('name str) '('age ui32))) + (let udfType (CallableType '() '(personType) '(str) '(ui32))) + (let udf (ScriptUdf 'Python3 'NewPerson udfType $udfScript)) + (return udf) +))@@; + +$persons = (select $udf(value, 100) as val from Input); +select val from $persons; diff --git a/yt/yql/tests/sql/suites/udf/regexp_udf.cfg b/yt/yql/tests/sql/suites/udf/regexp_udf.cfg new file mode 100644 index 0000000000..ce7c51a32a --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/regexp_udf.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf pire_udf diff --git a/yt/yql/tests/sql/suites/udf/regexp_udf.sql b/yt/yql/tests/sql/suites/udf/regexp_udf.sql new file mode 100644 index 0000000000..f3fba96738 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/regexp_udf.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +$regexp = Pire::Match("q.*"); +select * from plato.Input where $regexp(value); diff --git a/yt/yql/tests/sql/suites/udf/two_regexps.cfg b/yt/yql/tests/sql/suites/udf/two_regexps.cfg new file mode 100644 index 0000000000..ce7c51a32a --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/two_regexps.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf pire_udf diff --git a/yt/yql/tests/sql/suites/udf/two_regexps.sql b/yt/yql/tests/sql/suites/udf/two_regexps.sql new file mode 100644 index 0000000000..23c16a81cd --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/two_regexps.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +$is_abc = Pire::Match(".*abc"); +$_is_wtf = Pire::Match(".*wtf"); + +SELECT * FROM plato.Input WHERE $is_abc(value) LIMIT 10; diff --git a/yt/yql/tests/sql/suites/udf/udaf.cfg b/yt/yql/tests/sql/suites/udf/udaf.cfg new file mode 100644 index 0000000000..289c4251bb --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/udaf.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf python3_udf diff --git a/yt/yql/tests/sql/suites/udf/udaf.sql b/yt/yql/tests/sql/suites/udf/udaf.sql new file mode 100644 index 0000000000..ea2d7fa7ba --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/udaf.sql @@ -0,0 +1,49 @@ +/* postgres can not */ +/* syntax version 1 */ +$script = @@ +import heapq +import json + +N_SMALLEST = 3 + +def create(item): + return [item] + +def add(state, item): + heapq.heappush(state, item) + return heapq.nsmallest(N_SMALLEST, state) + +def merge(state_a, state_b): + merged = heapq.merge(state_a, state_b) + return heapq.nsmallest(N_SMALLEST, merged) + +def get_result(state): + result = heapq.nsmallest(N_SMALLEST, state) + return '%d smallest items: %s' % ( + N_SMALLEST, + ', '.join(map(str, result)) + ) + +def serialize(state): + return json.dumps(state) + +def deserialize(serialized): + return json.loads(serialized) +@@; + +$create = Python3::create(Callable<(Double)->Resource<Python3>>, $script); +$add = Python3::add(Callable<(Resource<Python3>,Double)->Resource<Python3>>, $script); +$merge = Python3::merge(Callable<(Resource<Python3>,Resource<Python3>)->Resource<Python3>>, $script); +$get_result = Python3::get_result(Callable<(Resource<Python3>)->String>, $script); +$serialize = Python3::serialize(Callable<(Resource<Python3>)->String>, $script); +$deserialize = Python3::deserialize(Callable<(String)->Resource<Python3>>, $script); + +SELECT UDAF( + CAST(key AS Double), + $create, + $add, + $merge, + $get_result, + $serialize, + $deserialize +) FROM plato.Input; diff --git a/yt/yql/tests/sql/suites/udf/udaf_distinct.cfg b/yt/yql/tests/sql/suites/udf/udaf_distinct.cfg new file mode 100644 index 0000000000..289c4251bb --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/udaf_distinct.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf python3_udf diff --git a/yt/yql/tests/sql/suites/udf/udaf_distinct.sql b/yt/yql/tests/sql/suites/udf/udaf_distinct.sql new file mode 100644 index 0000000000..2bde48ca55 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/udaf_distinct.sql @@ -0,0 +1,53 @@ +/* postgres can not */ +/* syntax version 1 */ +$script = @@ +import heapq +import json + +N_SMALLEST = 3 + +def create(item): + return [item] + +def add(state, item): + heapq.heappush(state, item) + return heapq.nsmallest(N_SMALLEST, state) + +def merge(state_a, state_b): + merged = heapq.merge(state_a, state_b) + return heapq.nsmallest(N_SMALLEST, merged) + +def get_result(state): + result = heapq.nsmallest(N_SMALLEST, state) + return '%d smallest items: %s' % ( + N_SMALLEST, + ', '.join(map(str, result)) + ) + +def serialize(state): + return json.dumps(state) + +def deserialize(serialized): + return json.loads(serialized) +@@; + +$create = Python3::create(Callable<(Int64)->Resource<Python3>>, $script); +$add = Python3::add(Callable<(Resource<Python3>,Int64)->Resource<Python3>>, $script); +$merge = Python3::merge(Callable<(Resource<Python3>,Resource<Python3>)->Resource<Python3>>, $script); +$get_result = Python3::get_result(Callable<(Resource<Python3>)->String>, $script); +$serialize = Python3::serialize(Callable<(Resource<Python3>)->String>, $script); +$deserialize = Python3::deserialize(Callable<(String)->Resource<Python3>>, $script); + +SELECT UDAF( + DISTINCT item, + $create, + $add, + $merge, + $get_result, + $serialize, + $deserialize +) FROM ( + SELECT + CAST(LENGTH(value) AS Int64) AS item + FROM plato.Input +); diff --git a/yt/yql/tests/sql/suites/udf/udaf_lambda.sql b/yt/yql/tests/sql/suites/udf/udaf_lambda.sql new file mode 100644 index 0000000000..9e2a4d11b5 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/udaf_lambda.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +$create = ($item, $_parent) -> { return $item }; +$add = ($state, $item, $_parent) -> { return $item + $state }; +$merge = ($state1, $state2) -> { return $state1 + $state2 }; +$get_result = ($state) -> { return $state }; +$serialize = ($state) -> { return $state }; +$deserialize = ($state) -> { return $state }; + +SELECT UDAF( + length(key), + $create, + $add, + $merge, + $get_result, + $serialize, + $deserialize, + 0u +) FROM plato.Input; diff --git a/yt/yql/tests/sql/suites/udf/udaf_short.cfg b/yt/yql/tests/sql/suites/udf/udaf_short.cfg new file mode 100644 index 0000000000..289c4251bb --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/udaf_short.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf python3_udf diff --git a/yt/yql/tests/sql/suites/udf/udaf_short.sql b/yt/yql/tests/sql/suites/udf/udaf_short.sql new file mode 100644 index 0000000000..9072ffb8cc --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/udaf_short.sql @@ -0,0 +1,27 @@ +/* postgres can not */ +/* syntax version 1 */ +$script = @@ +def create(item): + return item + +def add(state, item): + return state + item + +def merge(state_a, state_b): + return state_a + state_b +@@; + +$create = Python3::create(Callable<(Int64)->Int64>, $script); +$add = Python3::add(Callable<(Int64,Int64)->Int64>, $script); +$merge = Python3::merge(Callable<(Int64,Int64)->Int64>, $script); + +SELECT UDAF( + item, + $create, + $add, + $merge +) FROM ( + SELECT + CAST(LENGTH(value) AS Int64) AS item + FROM plato.Input +); diff --git a/yt/yql/tests/sql/suites/udf/udf.cfg b/yt/yql/tests/sql/suites/udf/udf.cfg new file mode 100644 index 0000000000..abdcfc8271 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/udf.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf simple_udf diff --git a/yt/yql/tests/sql/suites/udf/udf.sql b/yt/yql/tests/sql/suites/udf/udf.sql new file mode 100644 index 0000000000..8b6d115640 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/udf.sql @@ -0,0 +1,2 @@ +/* postgres can not */ +select key, subkey, SimpleUdf::Concat(value, "test") as value from plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/udf/udf_call_with_group_and_limit.cfg b/yt/yql/tests/sql/suites/udf/udf_call_with_group_and_limit.cfg new file mode 100644 index 0000000000..abdcfc8271 --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/udf_call_with_group_and_limit.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf simple_udf diff --git a/yt/yql/tests/sql/suites/udf/udf_call_with_group_and_limit.sql b/yt/yql/tests/sql/suites/udf/udf_call_with_group_and_limit.sql new file mode 100644 index 0000000000..c2285575ba --- /dev/null +++ b/yt/yql/tests/sql/suites/udf/udf_call_with_group_and_limit.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +select SimpleUdf::Echo(key) as key, count(*) as count + from plato.Input + group by key + order by key /* sort for stable results only */ + limit 2;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/union/default.cfg b/yt/yql/tests/sql/suites/union/default.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/union/default.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/union/union_multiin.cfg b/yt/yql/tests/sql/suites/union/union_multiin.cfg new file mode 100644 index 0000000000..311e41d04b --- /dev/null +++ b/yt/yql/tests/sql/suites/union/union_multiin.cfg @@ -0,0 +1,2 @@ +in Input input.txt +in Input2 input2.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/union/union_multiin.sql b/yt/yql/tests/sql/suites/union/union_multiin.sql new file mode 100644 index 0000000000..b13293562a --- /dev/null +++ b/yt/yql/tests/sql/suites/union/union_multiin.sql @@ -0,0 +1,4 @@ +SELECT * FROM plato.Input +UNION +SELECT * FROM plato.Input2 +ORDER BY key, subkey, value; diff --git a/yt/yql/tests/sql/suites/union/union_trivial.sql b/yt/yql/tests/sql/suites/union/union_trivial.sql new file mode 100644 index 0000000000..e4112d94ce --- /dev/null +++ b/yt/yql/tests/sql/suites/union/union_trivial.sql @@ -0,0 +1,4 @@ +SELECT * FROM plato.Input +UNION +SELECT * FROM plato.Input +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/union_all/default.cfg b/yt/yql/tests/sql/suites/union_all/default.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/default.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/union_all/infer_3.sql b/yt/yql/tests/sql/suites/union_all/infer_3.sql new file mode 100644 index 0000000000..ba01618d8a --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/infer_3.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +use plato; + +select Just(1) as x,1 as y +union all +select Just(1l) as x, 2 as y +union all +select 3 as y; diff --git a/yt/yql/tests/sql/suites/union_all/inner_union_all_with_limits.sql b/yt/yql/tests/sql/suites/union_all/inner_union_all_with_limits.sql new file mode 100644 index 0000000000..07ec3df9ba --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/inner_union_all_with_limits.sql @@ -0,0 +1,21 @@ +USE plato; + +SELECT + key, + value +FROM ( + (select * from Input limit 3) + union all + (select * from Input limit 2) +) +WHERE key < "100"; + +SELECT + key, + value +FROM ( + (select * from Input limit 3) + union all + select * from Input +) +WHERE key < "200"; diff --git a/yt/yql/tests/sql/suites/union_all/input_infer.txt.attr b/yt/yql/tests/sql/suites/union_all/input_infer.txt.attr new file mode 100644 index 0000000000..ada1f836f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/input_infer.txt.attr @@ -0,0 +1,3 @@ +{ + "infer_schema"=%true +} diff --git a/yt/yql/tests/sql/suites/union_all/mix_map_and_project-trivial_map.cfg b/yt/yql/tests/sql/suites/union_all/mix_map_and_project-trivial_map.cfg new file mode 100644 index 0000000000..c557142061 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/mix_map_and_project-trivial_map.cfg @@ -0,0 +1,2 @@ +in Input input.txt +in Input2 input_infer.txt diff --git a/yt/yql/tests/sql/suites/union_all/mix_map_and_project.cfg b/yt/yql/tests/sql/suites/union_all/mix_map_and_project.cfg new file mode 100644 index 0000000000..0e44b7c5ba --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/mix_map_and_project.cfg @@ -0,0 +1,2 @@ +in Input input.txt +in Input2 input.txt diff --git a/yt/yql/tests/sql/suites/union_all/mix_map_and_project.sql b/yt/yql/tests/sql/suites/union_all/mix_map_and_project.sql new file mode 100644 index 0000000000..60d039f9a5 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/mix_map_and_project.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +/* kikimr can not */ +PRAGMA yt.InferSchema; + +SELECT * FROM ( + SELECT key, '' as value FROM plato.Input + UNION ALL + SELECT key, value from plato.Input2 + UNION ALL + SELECT '' as key, value from plato.Input +) +ORDER BY key, value +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/union_all/mix_map_and_read.sql b/yt/yql/tests/sql/suites/union_all/mix_map_and_read.sql new file mode 100644 index 0000000000..43f7bcef57 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/mix_map_and_read.sql @@ -0,0 +1,9 @@ +SELECT * FROM ( + SELECT key, subkey, '' as value FROM plato.Input + UNION ALL + SELECT * from plato.Input + UNION ALL + SELECT '' as key, subkey, value from plato.Input +) +ORDER BY key, subkey, value +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/union_all/path_and_record.sql b/yt/yql/tests/sql/suites/union_all/path_and_record.sql new file mode 100644 index 0000000000..9aa42057eb --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/path_and_record.sql @@ -0,0 +1,11 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +SELECT * FROM ( + select key, value, TablePath() as path, TableRecordIndex() as record from Input + union all + select key, value, "" as path, TableRecordIndex() as record from Input +) +ORDER BY key, path, record +; diff --git a/yt/yql/tests/sql/suites/union_all/union_all_fields.sql b/yt/yql/tests/sql/suites/union_all/union_all_fields.sql new file mode 100644 index 0000000000..4d313c3659 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/union_all_fields.sql @@ -0,0 +1,7 @@ +SELECT * FROM ( + SELECT CAST(key AS int) as key, '' as value FROM plato.Input + UNION ALL + SELECT 0 as key, value from plato.Input +) +ORDER BY key, value +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/union_all/union_all_multiin.cfg b/yt/yql/tests/sql/suites/union_all/union_all_multiin.cfg new file mode 100644 index 0000000000..8d2f379d10 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/union_all_multiin.cfg @@ -0,0 +1,2 @@ +in Input input.txt +in Input2 input2.txt diff --git a/yt/yql/tests/sql/suites/union_all/union_all_multiin.sql b/yt/yql/tests/sql/suites/union_all/union_all_multiin.sql new file mode 100644 index 0000000000..284528b526 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/union_all_multiin.sql @@ -0,0 +1,9 @@ +USE plato; + +SELECT * FROM ( + SELECT key, value from Input + UNION ALL + SELECT subkey as key, value from Input2 +) +ORDER BY key, value +; diff --git a/yt/yql/tests/sql/suites/union_all/union_all_multiple.sql b/yt/yql/tests/sql/suites/union_all/union_all_multiple.sql new file mode 100644 index 0000000000..d5fc95436f --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/union_all_multiple.sql @@ -0,0 +1,9 @@ +SELECT * FROM ( + SELECT CAST(key AS int) as key, '' as subkey, '' as value FROM plato.Input + UNION ALL + SELECT 1 as key, subkey, '' as value from plato.Input + UNION ALL + SELECT 1 as key, '' as subkey, value from plato.Input +) +ORDER BY key, subkey, value +;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/union_all/union_all_subexpr.sql b/yt/yql/tests/sql/suites/union_all/union_all_subexpr.sql new file mode 100644 index 0000000000..9f7f840ce9 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/union_all_subexpr.sql @@ -0,0 +1,7 @@ +SELECT * +FROM ( + SELECT key, CAST(subkey AS int) as subkey, NULL as value FROM plato.Input + UNION ALL + SELECT key, NULL as subkey, value from plato.Input +) as x +ORDER BY key, subkey, value;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/union_all/union_all_trivial.sql b/yt/yql/tests/sql/suites/union_all/union_all_trivial.sql new file mode 100644 index 0000000000..6ba8ed0790 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/union_all_trivial.sql @@ -0,0 +1,3 @@ +SELECT * FROM plato.Input +UNION ALL +SELECT * FROM plato.Input;
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/union_all/union_all_with_discard_into_result_ansi.sql b/yt/yql/tests/sql/suites/union_all/union_all_with_discard_into_result_ansi.sql new file mode 100644 index 0000000000..d3d7107e79 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/union_all_with_discard_into_result_ansi.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ + +use plato; +pragma AnsiOrderByLimitInUnionAll; + +select * from Input +union all +select * from Input into result aaa; + +discard +select * from Input +union all +select * from Input; diff --git a/yt/yql/tests/sql/suites/union_all/union_all_with_limits.sql b/yt/yql/tests/sql/suites/union_all/union_all_with_limits.sql new file mode 100644 index 0000000000..ad00f72d99 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/union_all_with_limits.sql @@ -0,0 +1,3 @@ +(SELECT * FROM plato.Input WHERE key < "100" LIMIT 2) +UNION ALL +(SELECT * FROM plato.Input WHERE key > "100" LIMIT 2); diff --git a/yt/yql/tests/sql/suites/union_all/union_all_with_parenthesis.sql b/yt/yql/tests/sql/suites/union_all/union_all_with_parenthesis.sql new file mode 100644 index 0000000000..b782887269 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/union_all_with_parenthesis.sql @@ -0,0 +1,4 @@ +(SELECT * FROM plato.Input) +UNION ALL +(SELECT * FROM plato.Input) + diff --git a/yt/yql/tests/sql/suites/union_all/union_all_with_top_level_limits_ansi.sql b/yt/yql/tests/sql/suites/union_all/union_all_with_top_level_limits_ansi.sql new file mode 100644 index 0000000000..304bf54999 --- /dev/null +++ b/yt/yql/tests/sql/suites/union_all/union_all_with_top_level_limits_ansi.sql @@ -0,0 +1,28 @@ +/* syntax version 1 */ +/* postgres can not */ + +use plato; +pragma AnsiOrderByLimitInUnionAll; + +$foo = +select * from Input +union all +select * from Input limit 2; + +$bar = +select * from Input +union all +(select * from Input limit 2); + + +select * from $foo order by subkey; +select * from $bar order by subkey; + +select 1 as key +union all +select 2 as key assume order by key into result aaa; + +discard +select 1 as key +union all +select 2 as key assume order by key; diff --git a/yt/yql/tests/sql/suites/view/all_from_view.cfg b/yt/yql/tests/sql/suites/view/all_from_view.cfg new file mode 100644 index 0000000000..8b7633b301 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/all_from_view.cfg @@ -0,0 +1 @@ +in Input view_input.txt diff --git a/yt/yql/tests/sql/suites/view/all_from_view.sql b/yt/yql/tests/sql/suites/view/all_from_view.sql new file mode 100644 index 0000000000..9deea8173f --- /dev/null +++ b/yt/yql/tests/sql/suites/view/all_from_view.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +/* syntax version 1 */ +SELECT * FROM plato.`Input` VIEW `key`; diff --git a/yt/yql/tests/sql/suites/view/default.cfg b/yt/yql/tests/sql/suites/view/default.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/default.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/view/file_eval.cfg b/yt/yql/tests/sql/suites/view/file_eval.cfg new file mode 100644 index 0000000000..3c3eef57dc --- /dev/null +++ b/yt/yql/tests/sql/suites/view/file_eval.cfg @@ -0,0 +1,2 @@ +in Input view_file.txt +xfail
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/view/file_eval.sql b/yt/yql/tests/sql/suites/view/file_eval.sql new file mode 100644 index 0000000000..6e64be4356 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/file_eval.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* syntax version 1 */ +/* custom error:FileContent function can't be used inside generated code in views*/ +pragma yt.ViewIsolation = 'true'; +USE plato; +SELECT k, s, v FROM Input VIEW file_eval; diff --git a/yt/yql/tests/sql/suites/view/file_inner.cfg b/yt/yql/tests/sql/suites/view/file_inner.cfg new file mode 100644 index 0000000000..6ec6d9a459 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/file_inner.cfg @@ -0,0 +1,2 @@ +in Input view_file.txt +http_file foo.txt foo.txt diff --git a/yt/yql/tests/sql/suites/view/file_inner.sql b/yt/yql/tests/sql/suites/view/file_inner.sql new file mode 100644 index 0000000000..fb8dd1ce41 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/file_inner.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +/* syntax version 1 */ +pragma yt.ViewIsolation = 'true'; +USE plato; +SELECT k, s, v FROM Input VIEW file_inner; diff --git a/yt/yql/tests/sql/suites/view/file_inner_library.cfg b/yt/yql/tests/sql/suites/view/file_inner_library.cfg new file mode 100644 index 0000000000..51e0aafced --- /dev/null +++ b/yt/yql/tests/sql/suites/view/file_inner_library.cfg @@ -0,0 +1,2 @@ +in Input view_file_inner_library.txt +http_file mylib.sql mylib.sql.txt diff --git a/yt/yql/tests/sql/suites/view/file_inner_library.sql b/yt/yql/tests/sql/suites/view/file_inner_library.sql new file mode 100644 index 0000000000..f81464e158 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/file_inner_library.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +/* syntax version 1 */ +pragma yt.ViewIsolation = 'true'; +USE plato; +SELECT k, s, v FROM Input VIEW file_inner_library; diff --git a/yt/yql/tests/sql/suites/view/file_inner_udf.cfg b/yt/yql/tests/sql/suites/view/file_inner_udf.cfg new file mode 100644 index 0000000000..9e38dc624d --- /dev/null +++ b/yt/yql/tests/sql/suites/view/file_inner_udf.cfg @@ -0,0 +1,4 @@ +in Input view_file_inner_udf.txt +http_file myfile yql/essentials/udfs/test/test_import/libtest_import_udf.so +os linux +providers yt diff --git a/yt/yql/tests/sql/suites/view/file_inner_udf.sql b/yt/yql/tests/sql/suites/view/file_inner_udf.sql new file mode 100644 index 0000000000..9b1a90e856 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/file_inner_udf.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +/* syntax version 1 */ +pragma yt.ViewIsolation = 'true'; +USE plato; +SELECT k, s, v FROM Input VIEW file_inner_udf1 +UNION ALL +SELECT k, s, v FROM Input VIEW file_inner_udf2; + diff --git a/yt/yql/tests/sql/suites/view/file_outer.cfg b/yt/yql/tests/sql/suites/view/file_outer.cfg new file mode 100644 index 0000000000..331e1aedcc --- /dev/null +++ b/yt/yql/tests/sql/suites/view/file_outer.cfg @@ -0,0 +1,3 @@ +in Input view_file.txt +file foo.txt foo.txt +xfail
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/view/file_outer.sql b/yt/yql/tests/sql/suites/view/file_outer.sql new file mode 100644 index 0000000000..952a4d8d92 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/file_outer.sql @@ -0,0 +1,4 @@ +/* custom error:File not found*/ +pragma yt.ViewIsolation = 'true'; +USE plato; +SELECT k, s, v FROM Input VIEW file_outer; diff --git a/yt/yql/tests/sql/suites/view/file_outer_library.cfg b/yt/yql/tests/sql/suites/view/file_outer_library.cfg new file mode 100644 index 0000000000..cf7d8cce56 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/file_outer_library.cfg @@ -0,0 +1,4 @@ +in Input view_file_outer_library.txt +http_file mylib.sql mylib.sql.txt +xfail + diff --git a/yt/yql/tests/sql/suites/view/file_outer_library.sql b/yt/yql/tests/sql/suites/view/file_outer_library.sql new file mode 100644 index 0000000000..e994026f4b --- /dev/null +++ b/yt/yql/tests/sql/suites/view/file_outer_library.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* syntax version 1 */ +/* custom error: does not exist*/ +pragma yt.ViewIsolation = 'true'; +USE plato; +PRAGMA library('mylib.sql'); +SELECT k, s, v FROM Input VIEW file_outer_library; diff --git a/yt/yql/tests/sql/suites/view/init_view_after_eval.sql b/yt/yql/tests/sql/suites/view/init_view_after_eval.sql new file mode 100644 index 0000000000..3dafc5f598 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/init_view_after_eval.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +use plato; + +$i = select * from Input; +$i = process $i; + +$members = StructTypeComponents(ListItemType(TypeHandle(TypeOf($i)))); +$filteredMembers = ListFilter(ListMap($members, ($x) -> { return $x.Name }), ($x) -> { return $x > "k" }); + +select ChooseMembers(TableRow(), $filteredMembers) from Input view raw; diff --git a/yt/yql/tests/sql/suites/view/input_lambda.txt.attr b/yt/yql/tests/sql/suites/view/input_lambda.txt.attr new file mode 100644 index 0000000000..c9e8e9e38d --- /dev/null +++ b/yt/yql/tests/sql/suites/view/input_lambda.txt.attr @@ -0,0 +1,32 @@ +{ + "_yql_view_lambda"="$update_key = ($key) -> ($key || '.updated'); SELECT $update_key(key) as key, subkey, value from self"; + "_yql_view_lambda_process"="$update_row = ($row) -> (AddMember($row, 'new_value', 'NEW_VALUE')); PROCESS self USING $update_row(TableRow());"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/view/input_library.txt.attr b/yt/yql/tests/sql/suites/view/input_library.txt.attr new file mode 100644 index 0000000000..f053d1dea6 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/input_library.txt.attr @@ -0,0 +1,32 @@ +{ + "_yql_view_library"="PRAGMA Library('nested_library.sql', 'http_test://nested_library.sql.txt'); import nested_library symbols $to_lower; SELECT key, subkey, value, $to_lower(key) as lower_key from self"; + "_yql_syntax_version_library"=1; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/view/secure.cfg b/yt/yql/tests/sql/suites/view/secure.cfg new file mode 100644 index 0000000000..faeeed07f3 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/secure.cfg @@ -0,0 +1,2 @@ +in Input view_secure.txt +xfail
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/view/secure.sql b/yt/yql/tests/sql/suites/view/secure.sql new file mode 100644 index 0000000000..15ef309d96 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/secure.sql @@ -0,0 +1,4 @@ +/* custom error:SecureParam function can't be used in views*/ +pragma yt.ViewIsolation = 'true'; +USE plato; +SELECT k, s, v FROM Input VIEW secure; diff --git a/yt/yql/tests/sql/suites/view/secure_eval.cfg b/yt/yql/tests/sql/suites/view/secure_eval.cfg new file mode 100644 index 0000000000..faeeed07f3 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/secure_eval.cfg @@ -0,0 +1,2 @@ +in Input view_secure.txt +xfail
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/view/secure_eval.sql b/yt/yql/tests/sql/suites/view/secure_eval.sql new file mode 100644 index 0000000000..13acee4487 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/secure_eval.sql @@ -0,0 +1,4 @@ +/* custom error:SecureParam function can't be used in views*/ +pragma yt.ViewIsolation = 'true'; +USE plato; +SELECT k, s, v FROM Input VIEW secure_eval; diff --git a/yt/yql/tests/sql/suites/view/secure_eval_dyn.cfg b/yt/yql/tests/sql/suites/view/secure_eval_dyn.cfg new file mode 100644 index 0000000000..faeeed07f3 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/secure_eval_dyn.cfg @@ -0,0 +1,2 @@ +in Input view_secure.txt +xfail
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/view/secure_eval_dyn.sql b/yt/yql/tests/sql/suites/view/secure_eval_dyn.sql new file mode 100644 index 0000000000..0a1b696155 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/secure_eval_dyn.sql @@ -0,0 +1,4 @@ +/* custom error:FuncCode should have constant function name in views*/ +pragma yt.ViewIsolation = 'true'; +USE plato; +SELECT k, s, v FROM Input VIEW secure_eval_dynamic; diff --git a/yt/yql/tests/sql/suites/view/standalone_view_lambda.cfg b/yt/yql/tests/sql/suites/view/standalone_view_lambda.cfg new file mode 100644 index 0000000000..b4c7e23249 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/standalone_view_lambda.cfg @@ -0,0 +1,3 @@ +in InputView standalone_view_lambda.txt +in Input input.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/view/standalone_view_lambda.sql b/yt/yql/tests/sql/suites/view/standalone_view_lambda.sql new file mode 100644 index 0000000000..7edb28296d --- /dev/null +++ b/yt/yql/tests/sql/suites/view/standalone_view_lambda.sql @@ -0,0 +1,8 @@ +use plato; + +$stream = process InputView; +$type = EvaluateType(TypeHandle(ListItemType(TypeOf($stream)))); + +$lambda = ($row) -> (Cast($row as $type)); + +process InputView using $lambda(TableRow()); diff --git a/yt/yql/tests/sql/suites/view/standalone_view_lambda.txt.attr b/yt/yql/tests/sql/suites/view/standalone_view_lambda.txt.attr new file mode 100644 index 0000000000..2666763633 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/standalone_view_lambda.txt.attr @@ -0,0 +1,4 @@ +{ + "_yql_type" = <syntax_version=1>"view"; + "type" = "document"; +} diff --git a/yt/yql/tests/sql/suites/view/system_udf.cfg b/yt/yql/tests/sql/suites/view/system_udf.cfg new file mode 100644 index 0000000000..3760566137 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/system_udf.cfg @@ -0,0 +1,2 @@ +in Input view_system_udf.txt +udf string_udf diff --git a/yt/yql/tests/sql/suites/view/system_udf.sql b/yt/yql/tests/sql/suites/view/system_udf.sql new file mode 100644 index 0000000000..e5599aa9c2 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/system_udf.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +/* syntax version 1 */ +pragma yt.ViewIsolation = 'true'; +USE plato; +SELECT k, s, v FROM Input VIEW system_udf; diff --git a/yt/yql/tests/sql/suites/view/trivial_view.cfg b/yt/yql/tests/sql/suites/view/trivial_view.cfg new file mode 100644 index 0000000000..8b7633b301 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/trivial_view.cfg @@ -0,0 +1 @@ +in Input view_input.txt diff --git a/yt/yql/tests/sql/suites/view/trivial_view.sql b/yt/yql/tests/sql/suites/view/trivial_view.sql new file mode 100644 index 0000000000..d126465c8c --- /dev/null +++ b/yt/yql/tests/sql/suites/view/trivial_view.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; +SELECT k, s, v FROM Input VIEW ksv; diff --git a/yt/yql/tests/sql/suites/view/trivial_view_concat.cfg b/yt/yql/tests/sql/suites/view/trivial_view_concat.cfg new file mode 100644 index 0000000000..8b7633b301 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/trivial_view_concat.cfg @@ -0,0 +1 @@ +in Input view_input.txt diff --git a/yt/yql/tests/sql/suites/view/trivial_view_concat.sql b/yt/yql/tests/sql/suites/view/trivial_view_concat.sql new file mode 100644 index 0000000000..bad7874f6b --- /dev/null +++ b/yt/yql/tests/sql/suites/view/trivial_view_concat.sql @@ -0,0 +1,4 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; +SELECT k, s, v FROM concat(Input view ksv, Input view ksv); diff --git a/yt/yql/tests/sql/suites/view/view_file.txt.attr b/yt/yql/tests/sql/suites/view/view_file.txt.attr new file mode 100644 index 0000000000..b70ac5691b --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_file.txt.attr @@ -0,0 +1,33 @@ +{ + "_yql_view_file_eval"="SELECT EvaluateCode(FuncCode('FileContent', AtomCode('foo.txt'))) as k, subkey as s, value as v FROM self"; + "_yql_view_file_outer"="SELECT FileContent('foo' || '.txt') as k, subkey as s, value as v FROM self"; + "_yql_view_file_inner"="pragma file('foo.txt','http_test://foo.txt');SELECT FileContent('foo.txt') as k, subkey as s, value as v FROM self"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/view/view_file_inner_library.txt.attr b/yt/yql/tests/sql/suites/view/view_file_inner_library.txt.attr new file mode 100644 index 0000000000..43581a8c93 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_file_inner_library.txt.attr @@ -0,0 +1,31 @@ +{ + "_yql_view_file_inner_library"="PRAGMA library('mylib.sql','http_test://mylib.sql');IMPORT mylib SYMBOLS $x;select $x as k, 2 as s, 3 as v"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/view/view_file_inner_udf.txt.attr b/yt/yql/tests/sql/suites/view/view_file_inner_udf.txt.attr new file mode 100644 index 0000000000..51babfc5e8 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_file_inner_udf.txt.attr @@ -0,0 +1,32 @@ +{ + "_yql_view_file_inner_udf1"="PRAGMA file('myfile','http_test://myfile');PRAGMA udf('myfile');select TestImportUdf::Concat(key,'!') as k, 2 as s, 3 as v from self"; + "_yql_view_file_inner_udf2"="PRAGMA file('myfile','http_test://myfile');PRAGMA udf('myfile');select TestImportUdf::Concat(key,'?') as k, 2 as s, 3 as v from self"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/view/view_file_outer_library.txt.attr b/yt/yql/tests/sql/suites/view/view_file_outer_library.txt.attr new file mode 100644 index 0000000000..c0e969f6f1 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_file_outer_library.txt.attr @@ -0,0 +1,31 @@ +{ + "_yql_view_file_outer_library"="IMPORT mylib SYMBOLS $x;select $x as k, 2 as s, 3 as v"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/view/view_input.txt.attr b/yt/yql/tests/sql/suites/view/view_input.txt.attr new file mode 100644 index 0000000000..07386c98e5 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_input.txt.attr @@ -0,0 +1,32 @@ +{ + "_yql_view_ksv"="SELECT key as k, subkey as s, value as v FROM self"; + "_yql_view_key"="SELECT key FROM self"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/view/view_secure.txt.attr b/yt/yql/tests/sql/suites/view/view_secure.txt.attr new file mode 100644 index 0000000000..2d8ed382fc --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_secure.txt.attr @@ -0,0 +1,33 @@ +{ + "_yql_view_secure"="SELECT SecureParam('api:oauth') as k, subkey as s, value as v FROM self"; + "_yql_view_secure_eval"="SELECT EvaluateCode(FuncCode('SecureParam', AtomCode('api:oauth'))) as k, subkey as s, value as v FROM self"; + "_yql_view_secure_eval_dynamic"="SELECT EvaluateCode(FuncCode('S' || 'ecureParam', AtomCode('api:oauth'))) as k, subkey as s, value as v FROM self"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/view/view_system_udf.txt.attr b/yt/yql/tests/sql/suites/view/view_system_udf.txt.attr new file mode 100644 index 0000000000..2badea2c2a --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_system_udf.txt.attr @@ -0,0 +1,31 @@ +{ + "_yql_view_system_udf"="SELECT String::Strip(key) as k, subkey as s, value as v FROM self"; + "_yql_row_spec" = { + "Type" = [ + "StructType"; + [ + [ + "key"; + [ + "DataType"; + "String" + ] + ]; + [ + "subkey"; + [ + "DataType"; + "String" + ] + ]; + [ + "value"; + [ + "DataType"; + "String" + ] + ] + ] + ] + } +} diff --git a/yt/yql/tests/sql/suites/view/view_with_lambda.cfg b/yt/yql/tests/sql/suites/view/view_with_lambda.cfg new file mode 100644 index 0000000000..8cb4920700 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_with_lambda.cfg @@ -0,0 +1,2 @@ +in Input input_lambda.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/view/view_with_lambda.sql b/yt/yql/tests/sql/suites/view/view_with_lambda.sql new file mode 100644 index 0000000000..c698d5c100 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_with_lambda.sql @@ -0,0 +1,2 @@ +use plato; +select * from Input view lambda; diff --git a/yt/yql/tests/sql/suites/view/view_with_lambda_process.cfg b/yt/yql/tests/sql/suites/view/view_with_lambda_process.cfg new file mode 100644 index 0000000000..8cb4920700 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_with_lambda_process.cfg @@ -0,0 +1,2 @@ +in Input input_lambda.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/view/view_with_lambda_process.sql b/yt/yql/tests/sql/suites/view/view_with_lambda_process.sql new file mode 100644 index 0000000000..0db9c8b8ce --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_with_lambda_process.sql @@ -0,0 +1,2 @@ +use plato; +select * from Input view lambda_process; diff --git a/yt/yql/tests/sql/suites/view/view_with_library.cfg b/yt/yql/tests/sql/suites/view/view_with_library.cfg new file mode 100644 index 0000000000..fa1b395601 --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_with_library.cfg @@ -0,0 +1,3 @@ +in Input input_library.txt +http_file nested_library.sql.txt nested_library.sql.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/view/view_with_library.sql b/yt/yql/tests/sql/suites/view/view_with_library.sql new file mode 100644 index 0000000000..3d10f4272f --- /dev/null +++ b/yt/yql/tests/sql/suites/view/view_with_library.sql @@ -0,0 +1,2 @@ +use plato; +select * from Input view `library`; diff --git a/yt/yql/tests/sql/suites/weak_field/default.cfg b/yt/yql/tests/sql/suites/weak_field/default.cfg new file mode 100644 index 0000000000..58878f8945 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/default.cfg @@ -0,0 +1 @@ +in Input input.txt diff --git a/yt/yql/tests/sql/suites/weak_field/few_source_different_columns.cfg b/yt/yql/tests/sql/suites/weak_field/few_source_different_columns.cfg new file mode 100644 index 0000000000..84859da06f --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/few_source_different_columns.cfg @@ -0,0 +1,2 @@ +in Input1 infer_scheme.txt +in Input2 input_other_yson_esc.txt diff --git a/yt/yql/tests/sql/suites/weak_field/few_source_different_columns.sql b/yt/yql/tests/sql/suites/weak_field/few_source_different_columns.sql new file mode 100644 index 0000000000..321ffdf307 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/few_source_different_columns.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* syntax version 1 */ +PRAGMA yt.InferSchema="2"; + +USE plato; + +SELECT + WeakField(key, "String", "funny"), + WeakField(subkey, "String", "bunny"), + WeakField(value, "String", "boom") +FROM RANGE(``, ``, ``) +--FROM Concat(Input1, Input2) diff --git a/yt/yql/tests/sql/suites/weak_field/hor_join_with_mix_weak_access.cfg b/yt/yql/tests/sql/suites/weak_field/hor_join_with_mix_weak_access.cfg new file mode 100644 index 0000000000..400d2341a2 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/hor_join_with_mix_weak_access.cfg @@ -0,0 +1 @@ +in Input other1.txt
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/weak_field/hor_join_with_mix_weak_access.sql b/yt/yql/tests/sql/suites/weak_field/hor_join_with_mix_weak_access.sql new file mode 100644 index 0000000000..74aad3d484 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/hor_join_with_mix_weak_access.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +select key, WeakField(value1, "String", "funny") as value from Input +union all +select key, _other["value1"] as value from Input; diff --git a/yt/yql/tests/sql/suites/weak_field/infer_scheme.txt.attr b/yt/yql/tests/sql/suites/weak_field/infer_scheme.txt.attr new file mode 100644 index 0000000000..3c0f7e55c1 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/infer_scheme.txt.attr @@ -0,0 +1,3 @@ +{ + "infer_schema" = %true +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/weak_field/input_other_yson.txt.attr b/yt/yql/tests/sql/suites/weak_field/input_other_yson.txt.attr new file mode 100644 index 0000000000..49d98771a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/input_other_yson.txt.attr @@ -0,0 +1,17 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="string";"name"="key"}; + {"type"="string";"name"="subkey"}; + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "type" = "string" + }; + { + "name" = "subkey"; + "type" = "string" + } + ] +} diff --git a/yt/yql/tests/sql/suites/weak_field/input_other_yson_esc.txt.attr b/yt/yql/tests/sql/suites/weak_field/input_other_yson_esc.txt.attr new file mode 100644 index 0000000000..49d98771a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/input_other_yson_esc.txt.attr @@ -0,0 +1,17 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="string";"name"="key"}; + {"type"="string";"name"="subkey"}; + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "type" = "string" + }; + { + "name" = "subkey"; + "type" = "string" + } + ] +} diff --git a/yt/yql/tests/sql/suites/weak_field/input_rest.txt.attr b/yt/yql/tests/sql/suites/weak_field/input_rest.txt.attr new file mode 100644 index 0000000000..68b8ac17ed --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/input_rest.txt.attr @@ -0,0 +1,11 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"String"]]; + ["subkey";["DataType";"String"]]; + ["_rest";["DictType";["DataType";"String"];["DataType";"Yson"]]] + ]]; + "SortDirections"=[1;1;]; + "SortedBy"=["key";"subkey";]; + "SortedByTypes"=[["DataType";"String";];["DataType";"String";];]; + "SortMembers"=["key";"subkey";]; +}} diff --git a/yt/yql/tests/sql/suites/weak_field/input_tutorial_email_short_as_other.txt.attr b/yt/yql/tests/sql/suites/weak_field/input_tutorial_email_short_as_other.txt.attr new file mode 100644 index 0000000000..8f81910ca5 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/input_tutorial_email_short_as_other.txt.attr @@ -0,0 +1,12 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="uint64";"name"="yandexuid"}; + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "yandexuid"; + "type" = "uint64" + } + ] +} diff --git a/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields.txt.attr b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields.txt.attr new file mode 100644 index 0000000000..ada1f836f8 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields.txt.attr @@ -0,0 +1,3 @@ +{ + "infer_schema"=%true +} diff --git a/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_combine.cfg b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_combine.cfg new file mode 100644 index 0000000000..548d8860d2 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_combine.cfg @@ -0,0 +1 @@ +in Input optimize_weak_fields.txt diff --git a/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_combine.sql b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_combine.sql new file mode 100644 index 0000000000..7050c55069 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_combine.sql @@ -0,0 +1,4 @@ +/* kikimr can not */ +pragma yt.InferSchema; +USE plato; +SELECT key, min(WeakField(subkey, "Int64")), max(WeakField(value, "String")) FROM Input GROUP BY key ORDER BY key; diff --git a/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_filter_combine.cfg b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_filter_combine.cfg new file mode 100644 index 0000000000..548d8860d2 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_filter_combine.cfg @@ -0,0 +1 @@ +in Input optimize_weak_fields.txt diff --git a/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_filter_combine.sql b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_filter_combine.sql new file mode 100644 index 0000000000..f981ba133b --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_filter_combine.sql @@ -0,0 +1,4 @@ +/* kikimr can not */ +pragma yt.InferSchema; +USE plato; +SELECT min(key),subkey,max(WeakField(value, "String")) FROM Input where WeakField(subkey, "Int64") > 0 group by WeakField(subkey, "Int64") as subkey order by subkey; diff --git a/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_map.cfg b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_map.cfg new file mode 100644 index 0000000000..548d8860d2 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_map.cfg @@ -0,0 +1 @@ +in Input optimize_weak_fields.txt diff --git a/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_map.sql b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_map.sql new file mode 100644 index 0000000000..6cbe12e979 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_map.sql @@ -0,0 +1,4 @@ +/* kikimr can not */ +pragma yt.InferSchema; +USE plato; +SELECT key, WeakField(subkey, "Int64"), WeakField(value, "String") FROM Input; diff --git a/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_map_combine.cfg b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_map_combine.cfg new file mode 100644 index 0000000000..548d8860d2 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_map_combine.cfg @@ -0,0 +1 @@ +in Input optimize_weak_fields.txt diff --git a/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_map_combine.sql b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_map_combine.sql new file mode 100644 index 0000000000..ec5fe0a26f --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/optimize_weak_fields_map_combine.sql @@ -0,0 +1,4 @@ +/* kikimr can not */ +pragma yt.InferSchema; +USE plato; +SELECT min(key),subkey,max(WeakField(value, "String")) FROM Input group by WeakField(subkey, "Int64") as subkey order by subkey; diff --git a/yt/yql/tests/sql/suites/weak_field/optional.txt.attr b/yt/yql/tests/sql/suites/weak_field/optional.txt.attr new file mode 100644 index 0000000000..7962199d3e --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/optional.txt.attr @@ -0,0 +1,85 @@ +{ + "_yql_row_spec" = {"Type" = [ + "StructType"; + [ + [ + "first_null"; + [ + "OptionalType"; + [ + "DataType"; + "Uint32" + ] + ] + ]; + [ + "first_num"; + [ + "OptionalType"; + [ + "DataType"; + "Uint32" + ] + ] + ]; + [ + "second_null"; + [ + "OptionalType"; + [ + "OptionalType"; + [ + "DataType"; + "Uint32" + ] + ] + ] + ]; + [ + "second_num"; + [ + "OptionalType"; + [ + "OptionalType"; + [ + "DataType"; + "Uint32" + ] + ] + ] + ]; + [ + "third_null"; + [ + "OptionalType"; + [ + "OptionalType"; + [ + "OptionalType"; + [ + "DataType"; + "Uint32" + ] + ] + ] + ] + ]; + [ + "third_num"; + [ + "OptionalType"; + [ + "OptionalType"; + [ + "OptionalType"; + [ + "DataType"; + "Uint32" + ] + ] + ] + ] + ] + ] + ]}; +} diff --git a/yt/yql/tests/sql/suites/weak_field/other1.txt.attr b/yt/yql/tests/sql/suites/weak_field/other1.txt.attr new file mode 100644 index 0000000000..49d98771a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/other1.txt.attr @@ -0,0 +1,17 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="string";"name"="key"}; + {"type"="string";"name"="subkey"}; + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "type" = "string" + }; + { + "name" = "subkey"; + "type" = "string" + } + ] +} diff --git a/yt/yql/tests/sql/suites/weak_field/other2.txt.attr b/yt/yql/tests/sql/suites/weak_field/other2.txt.attr new file mode 100644 index 0000000000..49d98771a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/other2.txt.attr @@ -0,0 +1,17 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="string";"name"="key"}; + {"type"="string";"name"="subkey"}; + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "type" = "string" + }; + { + "name" = "subkey"; + "type" = "string" + } + ] +} diff --git a/yt/yql/tests/sql/suites/weak_field/other3.txt.attr b/yt/yql/tests/sql/suites/weak_field/other3.txt.attr new file mode 100644 index 0000000000..49d98771a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/other3.txt.attr @@ -0,0 +1,17 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="string";"name"="key"}; + {"type"="string";"name"="subkey"}; + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "type" = "string" + }; + { + "name" = "subkey"; + "type" = "string" + } + ] +} diff --git a/yt/yql/tests/sql/suites/weak_field/other4.txt.attr b/yt/yql/tests/sql/suites/weak_field/other4.txt.attr new file mode 100644 index 0000000000..49d98771a8 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/other4.txt.attr @@ -0,0 +1,17 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="string";"name"="key"}; + {"type"="string";"name"="subkey"}; + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "type" = "string" + }; + { + "name" = "subkey"; + "type" = "string" + } + ] +} diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field.cfg new file mode 100644 index 0000000000..1410268275 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field.cfg @@ -0,0 +1,2 @@ +in Input1 other1.txt +in Input2 other2.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field.sql b/yt/yql/tests/sql/suites/weak_field/weak_field.sql new file mode 100644 index 0000000000..96e155080d --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +use plato; +select "input1-value1" as src, key, WeakField(value1, "String", "funny") as ozer from Input1 +union all +select "input2-value1" as src, key, WeakField(value1, "String", "funny") as ozer from Input2 +union all +select "input1-value2" as src, key, WeakField(value2, "String") as ozer from Input1 +union all +select "input2-value2" as src, key, WeakField(value2, "String") as ozer from Input2 diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_aggregation.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_aggregation.cfg new file mode 100644 index 0000000000..b41a784aca --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_aggregation.cfg @@ -0,0 +1 @@ +in Input4 other4.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_aggregation.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_aggregation.sql new file mode 100644 index 0000000000..904f01470d --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_aggregation.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + odd, + sum(WeakField(data3, "int32") + WeakField(datahole3, "uint32", 999)) as score +FROM Input4 +GROUP BY cast(subkey as uint32) % 2 as odd +ORDER BY odd, score diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_data.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_data.cfg new file mode 100644 index 0000000000..2c8cfa4101 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_data.cfg @@ -0,0 +1 @@ +in Input3 other3.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_data.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_data.sql new file mode 100644 index 0000000000..e3d3002084 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_data.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +use plato; +select subkey, WeakField(data1, "Int32", 32) as d1, WeakField(data3, "Int32", 32) as d3 from Input3 order by subkey diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_esc_string.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_esc_string.cfg new file mode 100644 index 0000000000..ec92471037 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_esc_string.cfg @@ -0,0 +1 @@ +in Input input_other_yson_esc.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_esc_string.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_esc_string.sql new file mode 100644 index 0000000000..9c394f9ca9 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_esc_string.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT WeakField(subkey, 'string'), WeakField(strE1, 'string') +FROM Input +ORDER BY subkey; diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_esc_yson.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_esc_yson.cfg new file mode 100644 index 0000000000..ec92471037 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_esc_yson.cfg @@ -0,0 +1 @@ +in Input input_other_yson_esc.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_esc_yson.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_esc_yson.sql new file mode 100644 index 0000000000..28482d250f --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_esc_yson.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + Cast(WeakField(subkey, 'string') as uint32) as subkey, + WeakField(strE1, 'string'), + YQL::FromYsonSimpleType(WeakField(strE1, "Yson"), AsAtom("String")) AS strE1overYson +FROM Input +ORDER BY subkey; diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_in_group_by.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_in_group_by.cfg new file mode 100644 index 0000000000..b1dd7b3cd5 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_in_group_by.cfg @@ -0,0 +1 @@ +in Input input_other_yson.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_in_group_by.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_in_group_by.sql new file mode 100644 index 0000000000..a1bf197bb5 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_in_group_by.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +USE plato; + +SELECT + sk, + count(*) as count +FROM Input +GROUP BY WeakField(uiData, 'uint64') as sk +ORDER BY sk
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_infer_scheme.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_infer_scheme.cfg new file mode 100644 index 0000000000..4895b73f21 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_infer_scheme.cfg @@ -0,0 +1 @@ +in Input infer_scheme.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_infer_scheme.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_infer_scheme.sql new file mode 100644 index 0000000000..a403fed293 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_infer_scheme.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +/* kikimr can not */ +USE plato; +pragma yt.InferSchema; + +SELECT key, subkey, WeakField(value, "String") as value FROM Input; diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_join.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_join.cfg new file mode 100644 index 0000000000..1410268275 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_join.cfg @@ -0,0 +1,2 @@ +in Input1 other1.txt +in Input2 other2.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_join.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_join.sql new file mode 100644 index 0000000000..dd834f50a3 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_join.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +use plato; + +SELECT + i1.subkey as sk, + WeakField(i1.value1, "String", "funny") as i1v1, + WeakField(i1.value2, "String", "bunny") as i1v2, + WeakField(i2.value1, "String", "short") as i2v1, + WeakField(i2.value2, "String", "circuit") as i2v2 +FROM Input1 as i1 join Input2 as i2 USING(subkey) ORDER BY sk diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_join_condition.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_join_condition.cfg new file mode 100644 index 0000000000..1410268275 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_join_condition.cfg @@ -0,0 +1,2 @@ +in Input1 other1.txt +in Input2 other2.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_join_condition.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_join_condition.sql new file mode 100644 index 0000000000..7818c68f11 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_join_condition.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + i1.subkey as sk, + WeakField(i1.value1, "String", "funny") as i1v1, + WeakField(i1.value2, "String", "bunny") as i1v2, + WeakField(i2.value1, "String", "short") as i2v1, + WeakField(i2.value2, "String", "circuit") as i2v2 +FROM Input1 as i1 JOIN Input2 as i2 ON WeakField(i1.value1, "String") == WeakField(i2.value2, "String") ORDER BY sk diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_join_where.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_join_where.cfg new file mode 100644 index 0000000000..1410268275 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_join_where.cfg @@ -0,0 +1,2 @@ +in Input1 other1.txt +in Input2 other2.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_join_where.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_join_where.sql new file mode 100644 index 0000000000..0807940069 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_join_where.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + i1.subkey as sk, + WeakField(i1.value1, "String", "funny") as i1v1, + WeakField(i1.value2, "String", "bunny") as i1v2, + WeakField(i2.value1, "String", "short") as i2v1, + WeakField(i2.value2, "String", "circuit") as i2v2 +FROM Input1 as i1 JOIN Input2 as i2 ON WeakField(i1.value1, "String") == WeakField(i2.value2, "String") +WHERE WeakField(i2.key, "String") == "150" or WeakField(i1.key, "String") == "075" +ORDER BY sk diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_long_fields.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_long_fields.cfg new file mode 100644 index 0000000000..11c3f04b25 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_long_fields.cfg @@ -0,0 +1 @@ +in Input input_tutorial_email_short_as_other.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_long_fields.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_long_fields.sql new file mode 100644 index 0000000000..81cc5bacd9 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_long_fields.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + WeakField(email, "String"), + WeakField(yandexuid, "Uint64") +FROM Input diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_long_name.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_long_name.cfg new file mode 100644 index 0000000000..e85c3febf4 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_long_name.cfg @@ -0,0 +1 @@ +in Input other1.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_long_name.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_long_name.sql new file mode 100644 index 0000000000..ab439e9cc9 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_long_name.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + WeakField(long_long_long_column_name, 'string') +FROM Input diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_num_access.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_num_access.cfg new file mode 100644 index 0000000000..b41a784aca --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_num_access.cfg @@ -0,0 +1 @@ +in Input4 other4.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_num_access.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_num_access.sql new file mode 100644 index 0000000000..eb6365bff3 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_num_access.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + subkey, + WeakField(data3, "int32") as data3, + WeakField(datahole3, "uint32", 999) as holes3 +FROM Input4 +ORDER BY subkey diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_opt.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_opt.cfg new file mode 100644 index 0000000000..2c8cfa4101 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_opt.cfg @@ -0,0 +1 @@ +in Input3 other3.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_opt.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_opt.sql new file mode 100644 index 0000000000..8f66299362 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_opt.sql @@ -0,0 +1,3 @@ +/* postgres can not */ +use plato; +select subkey, WeakField(data3, "int32") as data3str, WeakField(datahole3, "int32", 999) as holes3 from Input3 order by subkey diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_real_col.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_real_col.sql new file mode 100644 index 0000000000..3249bbc634 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_real_col.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + WeakField(key, "String", 'test'), + WeakField(balu, "String", 'bebe'), + WeakField(value, "String", 'zzz') +FROM Input +WHERE key < "200" +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_rest.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_rest.cfg new file mode 100644 index 0000000000..2c0d92202d --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_rest.cfg @@ -0,0 +1 @@ +in Input input_rest.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_rest.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_rest.sql new file mode 100644 index 0000000000..a330421f3f --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_rest.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +USE plato; + +--INSERT INTO Output +SELECT + WeakField(animal, "String"), + WeakField(size, "String") as sizeRating, + WeakField(weightMin, "Float"), + WeakField(weightMax, "Float"), + WeakField(wild, "Bool"), + WeakField(pet, "Bool", false), + WeakField(miss, "Bool", true) +FROM Input +ORDER BY weightMin diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_strict.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_strict.cfg new file mode 100644 index 0000000000..64b3f61710 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_strict.cfg @@ -0,0 +1 @@ +in Input optional.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_strict.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_strict.sql new file mode 100644 index 0000000000..e156940290 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_strict.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +use plato; +SELECT + WeakField(first_num, "uint32") as num_nodef, + WeakField(first_num, "uint32", 11) as num_def, + WeakField(first_null, "uint32") as null_nodef, + WeakField(first_null, "uint32", 42) as null_def, + WeakField(val, "string") as missed_nodef, + WeakField(val, "string", "no value") as missed_def +FROM Input diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_to_yson.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_to_yson.cfg new file mode 100644 index 0000000000..b1dd7b3cd5 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_to_yson.cfg @@ -0,0 +1 @@ +in Input input_other_yson.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_to_yson.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_to_yson.sql new file mode 100644 index 0000000000..bc00acf465 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_to_yson.sql @@ -0,0 +1,5 @@ +USE plato; + +SELECT + YQL::FromYsonSimpleType(WeakField(uiData, "Yson"), AsAtom("Uint32")) AS val +FROM Input diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_type.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_type.sql new file mode 100644 index 0000000000..0411ee0b98 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_type.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +use plato; +select + WeakField(key, DataType("String")), + WeakField(subkey, OptionalType(DataType("String"))), + WeakField(value, "String") +from Input; diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_wrong_types_fail.cfg b/yt/yql/tests/sql/suites/weak_field/weak_field_wrong_types_fail.cfg new file mode 100644 index 0000000000..faca17b0b2 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_wrong_types_fail.cfg @@ -0,0 +1,2 @@ +xfail +in Input optional.txt diff --git a/yt/yql/tests/sql/suites/weak_field/weak_field_wrong_types_fail.sql b/yt/yql/tests/sql/suites/weak_field/weak_field_wrong_types_fail.sql new file mode 100644 index 0000000000..447c2a5804 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/weak_field_wrong_types_fail.sql @@ -0,0 +1,5 @@ +/* custom error:incompatible WeakField types: Optional<Int32!=Uint32>*/ +use plato; +SELECT + WeakField(first_num, "int32", 42) -- first_num column have another type +FROM Input diff --git a/yt/yql/tests/sql/suites/weak_field/yql-7888_input.txt.attr b/yt/yql/tests/sql/suites/weak_field/yql-7888_input.txt.attr new file mode 100644 index 0000000000..5976cdb9c2 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/yql-7888_input.txt.attr @@ -0,0 +1,22 @@ +{ + "_read_schema" = <"strict" = %false>[ + {"type"="string";"name"="key"}; + {"type"="string";"name"="subkey"}; + {"type"="string";"name"="value"}; + ]; + "schema" = <"strict" = %false; "unique_keys" = %false> + [ + { + "name" = "key"; + "type" = "string" + }; + { + "name" = "subkey"; + "type" = "string" + }; + { + "name" = "value"; + "type" = "string" + } + ] +} diff --git a/yt/yql/tests/sql/suites/weak_field/yql-7888_mapfieldsubset.cfg b/yt/yql/tests/sql/suites/weak_field/yql-7888_mapfieldsubset.cfg new file mode 100644 index 0000000000..b4421ba5f3 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/yql-7888_mapfieldsubset.cfg @@ -0,0 +1 @@ +in Input yql-7888_input.txt diff --git a/yt/yql/tests/sql/suites/weak_field/yql-7888_mapfieldsubset.sql b/yt/yql/tests/sql/suites/weak_field/yql-7888_mapfieldsubset.sql new file mode 100644 index 0000000000..34b7271562 --- /dev/null +++ b/yt/yql/tests/sql/suites/weak_field/yql-7888_mapfieldsubset.sql @@ -0,0 +1,27 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +define subquery $input() as + select + value, + WeakField(strongest_id, "String") as strongest_id, + WeakField(video_position_sec, "String") as video_position_sec, + key, + subkey + from concat(Input, Input) + where key in ("heartbeat", "show", "click") + and subkey in ("native", "gif"); +end define; + +-- Native: +define subquery $native_show_and_clicks($input) as + select + value, strongest_id, key + from $input() + where subkey == "native" + and key in ("click", "show"); +end define; + +select count(distinct strongest_id) as native_users from $native_show_and_clicks($input); +select count(distinct strongest_id) as native_users_with_click from $native_show_and_clicks($input) where key == "click";
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/window/all_columns_hide_window_special_ones.sql b/yt/yql/tests/sql/suites/window/all_columns_hide_window_special_ones.sql new file mode 100644 index 0000000000..b9b356c939 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/all_columns_hide_window_special_ones.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +use plato; +pragma simplecolumns; + +select +a.*, +(ROW_NUMBER() over w) - 1 as position_cnt, +lag(key) over w as pkey, +lead(key) over w as nkey +from Input as a +window w as ( + order by value desc +) +order by position_cnt; diff --git a/yt/yql/tests/sql/suites/window/current/aggregations.cfg b/yt/yql/tests/sql/suites/window/current/aggregations.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/aggregations.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/current/aggregations.sql b/yt/yql/tests/sql/suites/window/current/aggregations.sql new file mode 100644 index 0000000000..444ea196cc --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/aggregations.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + COUNT(*) over w1 as count1, + ListSort(AGGREGATE_LIST_DISTINCT(subkey) over w1) as agglist_distinct1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + AGGREGATE_LIST(subkey) over w2 as agglist2, +FROM plato.Input +WINDOW + w1 as (PARTITION BY key ORDER BY value), + w2 as ( ORDER BY value) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/current/aggregations_leadlag.cfg b/yt/yql/tests/sql/suites/window/current/aggregations_leadlag.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/aggregations_leadlag.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/current/aggregations_leadlag.sql b/yt/yql/tests/sql/suites/window/current/aggregations_leadlag.sql new file mode 100644 index 0000000000..c73f26cb67 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/aggregations_leadlag.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + LEAD(value || value, 3) over w1 as dvalue_lead1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + LAG(cast(value as uint32)) over w2 as value_lag2, +FROM plato.Input +WINDOW + w1 as (PARTITION BY key ORDER BY value), + w2 as ( ORDER BY value) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/current/ansi_current.cfg b/yt/yql/tests/sql/suites/window/current/ansi_current.cfg new file mode 100644 index 0000000000..812be3893b --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/ansi_current.cfg @@ -0,0 +1 @@ +in Input input4.txt diff --git a/yt/yql/tests/sql/suites/window/current/ansi_current.sql b/yt/yql/tests/sql/suites/window/current/ansi_current.sql new file mode 100644 index 0000000000..d005c57dc2 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/ansi_current.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma AnsiCurrentRow; + +SELECT + value, + key, + subkey, + SUM(cast(subkey as Int32)) over w as subkey_sum, +FROM plato.Input +WINDOW w AS ( + PARTITION BY value + ORDER BY key +) +ORDER BY value, key, subkey; diff --git a/yt/yql/tests/sql/suites/window/current/ansi_current_mixed.cfg b/yt/yql/tests/sql/suites/window/current/ansi_current_mixed.cfg new file mode 100644 index 0000000000..812be3893b --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/ansi_current_mixed.cfg @@ -0,0 +1 @@ +in Input input4.txt diff --git a/yt/yql/tests/sql/suites/window/current/ansi_current_mixed.sql b/yt/yql/tests/sql/suites/window/current/ansi_current_mixed.sql new file mode 100644 index 0000000000..b89caf963f --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/ansi_current_mixed.sql @@ -0,0 +1,25 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma AnsiCurrentRow; + +SELECT + value, + key, + subkey, + SUM(cast(subkey as Int32)) over w as subkey_sum_ansi, + SUM(cast(subkey as Int32)) over w1 as subkey_sum, + SUM(cast(subkey as Int32)) over w2 as subkey_sum_next, +FROM plato.Input +WINDOW w AS ( + PARTITION BY value + ORDER BY key +), w1 AS ( + PARTITION BY value + ORDER BY key + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +), w2 AS ( + PARTITION BY value + ORDER BY key + ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING +) +ORDER BY value, key, subkey; diff --git a/yt/yql/tests/sql/suites/window/current/ansi_current_with_win.cfg b/yt/yql/tests/sql/suites/window/current/ansi_current_with_win.cfg new file mode 100644 index 0000000000..812be3893b --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/ansi_current_with_win.cfg @@ -0,0 +1 @@ +in Input input4.txt diff --git a/yt/yql/tests/sql/suites/window/current/ansi_current_with_win.sql b/yt/yql/tests/sql/suites/window/current/ansi_current_with_win.sql new file mode 100644 index 0000000000..8baa348440 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/ansi_current_with_win.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma AnsiCurrentRow; + +SELECT + value, + key, + subkey, + SUM(cast(subkey as Int32)) over w as subkey_sum_ansi, + LEAD(cast(subkey as Int32)) over w as subkey_next, +FROM plato.Input +WINDOW w AS ( + PARTITION BY value + ORDER BY key +) +ORDER BY value, key, subkey; diff --git a/yt/yql/tests/sql/suites/window/current/session.cfg b/yt/yql/tests/sql/suites/window/current/session.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/session.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/window/current/session.sql b/yt/yql/tests/sql/suites/window/current/session.sql new file mode 100644 index 0000000000..10ae2c44d3 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/session.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + ts, + payload, + AGGREGATE_LIST(ts) over w as ts_session, + COUNT(1) over w as session_len, +FROM plato.Input +WINDOW w AS ( + PARTITION BY user, SessionWindow(ts, 10) + ORDER BY ts +) +ORDER BY user, payload; diff --git a/yt/yql/tests/sql/suites/window/current/session_aliases.cfg b/yt/yql/tests/sql/suites/window/current/session_aliases.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/session_aliases.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/window/current/session_aliases.sql b/yt/yql/tests/sql/suites/window/current/session_aliases.sql new file mode 100644 index 0000000000..9aa080e22c --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/session_aliases.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + ts, + SessionStart() over w1 as ss1, + SessionStart() over w as ss, + + AGGREGATE_LIST(ts) over w as ts_session, + COUNT(1) over w as session_len, +FROM plato.Input +WINDOW w AS ( + PARTITION BY user, SessionWindow(ts, 10) as ss0 + ORDER BY ts +), +w1 AS ( + PARTITION BY SessionWindow(ts, 10), user + ORDER BY ts +) +ORDER BY user, ts, session_len; diff --git a/yt/yql/tests/sql/suites/window/current/session_extended.cfg b/yt/yql/tests/sql/suites/window/current/session_extended.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/session_extended.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/window/current/session_extended.sql b/yt/yql/tests/sql/suites/window/current/session_extended.sql new file mode 100644 index 0000000000..5990b4ec12 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/session_extended.sql @@ -0,0 +1,29 @@ +/* syntax version 1 */ +/* postgres can not */ + +$init = ($row) -> (AsStruct($row.ts ?? 0 as value, 1 as count)); + +$calculate = ($_row, $state) -> ($state.value); +-- split partition into two-element grooups, make session key to be cumulative sum of ts from partition start +$update = ($row, $state) -> { + $state = AsStruct($state.count + 1 as count, $state.value as value); + $state = AsStruct($state.count as count, $state.value + ($row.ts ?? 0) as value); + return AsTuple(Unwrap($state.count % 2) == 1, $state); +}; + + +SELECT + user, + ts, + payload, + AGGREGATE_LIST(cast(ts as string) ?? "null") over w as ts_session, + COUNT(1) over w as session_len, + SessionStart() over w as session_start, + SessionState() over w as session_state, +FROM plato.Input +WINDOW w AS ( + PARTITION BY user, SessionWindow(ts + 1, $init, $update, $calculate) + ORDER BY ts +) +ORDER BY user, payload; + diff --git a/yt/yql/tests/sql/suites/window/current/session_incompat_sort.cfg b/yt/yql/tests/sql/suites/window/current/session_incompat_sort.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/session_incompat_sort.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/window/current/session_incompat_sort.sql b/yt/yql/tests/sql/suites/window/current/session_incompat_sort.sql new file mode 100644 index 0000000000..81efa941a6 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/current/session_incompat_sort.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + ts, + payload, + AGGREGATE_LIST(ts) over w as ts_session, + COUNT(1) over w as session_len, + SessionStart() over w as session_start, +FROM plato.Input +WINDOW w AS ( + PARTITION BY SessionWindow(ts, 10), user + ORDER BY payload +) +ORDER BY user, payload; diff --git a/yt/yql/tests/sql/suites/window/default.cfg b/yt/yql/tests/sql/suites/window/default.cfg new file mode 100644 index 0000000000..0b7e11f3c5 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/default.cfg @@ -0,0 +1,2 @@ +in Input input.txt +in Input4 input4.txt diff --git a/yt/yql/tests/sql/suites/window/distinct_over_window.cfg b/yt/yql/tests/sql/suites/window/distinct_over_window.cfg new file mode 100644 index 0000000000..ed883e79be --- /dev/null +++ b/yt/yql/tests/sql/suites/window/distinct_over_window.cfg @@ -0,0 +1 @@ +in Input input3.txt diff --git a/yt/yql/tests/sql/suites/window/distinct_over_window.sql b/yt/yql/tests/sql/suites/window/distinct_over_window.sql new file mode 100644 index 0000000000..536db81911 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/distinct_over_window.sql @@ -0,0 +1,20 @@ +/* syntax version 1 */ +/* postgres can not */ + +USE plato; + +PRAGMA DistinctOverWindow; + +$input = (SELECT cast(key AS Int32) AS key, cast(subkey AS Int32) AS subkey, value FROM Input); + +SELECT + subkey, + key, + value, + -- assuming ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + count(DISTINCT key) OVER (PARTITION BY subkey ORDER BY key) AS count_by_key, + count(DISTINCT value || "force_preagg") OVER (PARTITION BY subkey ORDER BY key) AS count_by_value, + sum(DISTINCT key) OVER (PARTITION BY subkey ORDER BY key) AS sum, + median(DISTINCT key) OVER (PARTITION BY subkey ORDER BY key) AS median, +FROM $input +ORDER BY subkey, key, value; diff --git a/yt/yql/tests/sql/suites/window/distinct_over_window_full_frames.cfg b/yt/yql/tests/sql/suites/window/distinct_over_window_full_frames.cfg new file mode 100644 index 0000000000..ed883e79be --- /dev/null +++ b/yt/yql/tests/sql/suites/window/distinct_over_window_full_frames.cfg @@ -0,0 +1 @@ +in Input input3.txt diff --git a/yt/yql/tests/sql/suites/window/distinct_over_window_full_frames.sql b/yt/yql/tests/sql/suites/window/distinct_over_window_full_frames.sql new file mode 100644 index 0000000000..973a23db8c --- /dev/null +++ b/yt/yql/tests/sql/suites/window/distinct_over_window_full_frames.sql @@ -0,0 +1,22 @@ +/* syntax version 1 */ +/* postgres can not */ + +USE plato; + +PRAGMA DistinctOverWindow; + +$input = (SELECT cast(key AS Int32) AS key, cast(subkey AS Int32) AS subkey, value FROM Input); + +SELECT + subkey, + key, + value, + -- assuming ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + count(DISTINCT key) OVER () AS cnt_distinct_total, + sum(DISTINCT key) OVER () AS sum_distinct_total, + median(DISTINCT key) OVER () AS median_distinct_total, + count(DISTINCT key) OVER (PARTITION BY subkey) AS cnt_distinct_part, + sum(DISTINCT key) OVER (PARTITION BY subkey) AS sum_distinct_part, + median(DISTINCT key) OVER (PARTITION BY subkey) AS median_distinct_part, +FROM $input +ORDER BY subkey, key, value; diff --git a/yt/yql/tests/sql/suites/window/distinct_over_window_struct.sql b/yt/yql/tests/sql/suites/window/distinct_over_window_struct.sql new file mode 100644 index 0000000000..57e76a0935 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/distinct_over_window_struct.sql @@ -0,0 +1,37 @@ +/* syntax version 1 */ +/* postgres can not */ + +USE plato; + +PRAGMA DistinctOverWindow; + +$input = AsList( + AsStruct(1 AS key, 1 AS subkey, AsStruct(1 AS i1, 2 AS i2, 3 AS i3) AS col), + AsStruct(2 AS key, 1 AS subkey, AsStruct(1 AS i1, 2 AS i2, 3 AS i3) AS col), + AsStruct(3 AS key, 1 AS subkey, AsStruct(1 AS i1, 2 AS i2, 3 AS i3) AS col), + AsStruct(4 AS key, 2 AS subkey, AsStruct(3 AS i1, 4 AS i2, 5 AS i3) AS col), + AsStruct(5 AS key, 2 AS subkey, AsStruct(3 AS i1, 4 AS i2, 5 AS i3) AS col), + AsStruct(6 AS key, 2 AS subkey, AsStruct(5 AS i1, 5 AS i2, 5 AS i3) AS col), + AsStruct(7 AS key, 3 AS subkey, AsStruct(5 AS i1, 6 AS i2, 7 AS i3) AS col), + AsStruct(8 AS key, 3 AS subkey, AsStruct(6 AS i1, 7 AS i2, 8 AS i3) AS col), + AsStruct(9 AS key, 3 AS subkey, AsStruct(7 AS i1, 8 AS i2, 9 AS i3) AS col), +); + +SELECT + key, + subkey, + col, + -- assuming ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + count(DISTINCT col) OVER (PARTITION BY subkey ORDER BY key ASC) AS cnt1_asc, + count(DISTINCT col) OVER (PARTITION BY subkey ORDER BY key DESC) AS cnt2_desc, +FROM AS_TABLE($input) +ORDER BY key; + +SELECT + key, + subkey, + col, + -- assuming ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING + count(DISTINCT col) OVER (PARTITION BY subkey) AS cnt, +FROM AS_TABLE($input) +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/window/empty/aggregations.cfg b/yt/yql/tests/sql/suites/window/empty/aggregations.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/empty/aggregations.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/empty/aggregations.sql b/yt/yql/tests/sql/suites/window/empty/aggregations.sql new file mode 100644 index 0000000000..673e724f83 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/empty/aggregations.sql @@ -0,0 +1,18 @@ +/* syntax version 1 */ +/* postgres can not */ + +PRAGMA warning("disable", "4520"); + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + COUNT(*) over w1 as count1, + ListSort(AGGREGATE_LIST_DISTINCT(subkey) over w1) as agglist_distinct1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + AGGREGATE_LIST(subkey) over w2 as agglist2, +FROM plato.Input +WINDOW + w1 as (PARTITION BY key ORDER BY value ROWS BETWEEN 5 PRECEDING AND 10 PRECEDING), + w2 as ( ROWS BETWEEN 3 FOLLOWING AND 2 FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/empty/aggregations_leadlag.cfg b/yt/yql/tests/sql/suites/window/empty/aggregations_leadlag.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/empty/aggregations_leadlag.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/empty/aggregations_leadlag.sql b/yt/yql/tests/sql/suites/window/empty/aggregations_leadlag.sql new file mode 100644 index 0000000000..c305328b8b --- /dev/null +++ b/yt/yql/tests/sql/suites/window/empty/aggregations_leadlag.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ + +PRAGMA warning("disable", "4520"); + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + LEAD(value || value, 3) over w1 as dvalue_lead1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + LAG(cast(value as uint32)) over w2 as value_lag2, +FROM plato.Input +WINDOW + w1 as (PARTITION BY key ORDER BY value ROWS BETWEEN 5 PRECEDING AND 10 PRECEDING), + w2 as (ORDER BY value DESC ROWS BETWEEN 3 FOLLOWING AND 2 FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/full/aggregations.cfg b/yt/yql/tests/sql/suites/window/full/aggregations.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/aggregations.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/full/aggregations.sql b/yt/yql/tests/sql/suites/window/full/aggregations.sql new file mode 100644 index 0000000000..b413db5f7c --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/aggregations.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + COUNT(*) over w1 as count1, + ListSort(AGGREGATE_LIST_DISTINCT(subkey) over w1) as agglist_distinct1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + AGGREGATE_LIST(subkey) over w2 as agglist2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (), + w2 as (PARTITION BY key ORDER BY value DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/full/aggregations_compact.cfg b/yt/yql/tests/sql/suites/window/full/aggregations_compact.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/aggregations_compact.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/full/aggregations_compact.sql b/yt/yql/tests/sql/suites/window/full/aggregations_compact.sql new file mode 100644 index 0000000000..1c18473298 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/aggregations_compact.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + COUNT(*) over w1 as count1, + ListSort(AGGREGATE_LIST_DISTINCT(subkey) over w1) as agglist_distinct1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + AGGREGATE_LIST(subkey) over w2 as agglist2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION COMPACT BY ()), + w2 as (PARTITION COMPACT BY key ORDER BY value DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/full/aggregations_leadlag.cfg b/yt/yql/tests/sql/suites/window/full/aggregations_leadlag.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/aggregations_leadlag.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/full/aggregations_leadlag.sql b/yt/yql/tests/sql/suites/window/full/aggregations_leadlag.sql new file mode 100644 index 0000000000..413e1a0ddd --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/aggregations_leadlag.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + LEAD(value || value, 3) over w1 as dvalue_lead1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + LAG(cast(value as uint32)) over w2 as value_lag2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + w2 as (PARTITION BY key ORDER BY value DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/full/aggregations_leadlag_compact.cfg b/yt/yql/tests/sql/suites/window/full/aggregations_leadlag_compact.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/aggregations_leadlag_compact.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/full/aggregations_leadlag_compact.sql b/yt/yql/tests/sql/suites/window/full/aggregations_leadlag_compact.sql new file mode 100644 index 0000000000..c68f9946a1 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/aggregations_leadlag_compact.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + LEAD(value || value, 3) over w1 as dvalue_lead1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + LAG(cast(value as uint32)) over w2 as value_lag2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION COMPACT BY () ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + w2 as (PARTITION COMPACT BY key ORDER BY value DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/full/leadlag.cfg b/yt/yql/tests/sql/suites/window/full/leadlag.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/leadlag.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/full/leadlag.sql b/yt/yql/tests/sql/suites/window/full/leadlag.sql new file mode 100644 index 0000000000..1fccdfd276 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/leadlag.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ + +$in = SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + LEAD(value || value, 3) over w1 as dvalue_lead1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + LAG(cast(value as uint32)) over w2 as value_lag2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + w2 as (PARTITION BY key ORDER BY value DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +; + +SELECT value, dvalue_lead1, value_lag2 FROM $in ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/full/leadlag_compact.cfg b/yt/yql/tests/sql/suites/window/full/leadlag_compact.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/leadlag_compact.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/full/leadlag_compact.sql b/yt/yql/tests/sql/suites/window/full/leadlag_compact.sql new file mode 100644 index 0000000000..45a8a6232f --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/leadlag_compact.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ + +$in = SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + LEAD(value || value, 3) over w1 as dvalue_lead1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + LAG(cast(value as uint32)) over w2 as value_lag2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION /*+ COMPACT() */ BY () ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + w2 as (PARTITION COMPACT BY key ORDER BY value DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +; + +SELECT value, dvalue_lead1, value_lag2 FROM $in ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/full/noncompact_with_nulls.cfg b/yt/yql/tests/sql/suites/window/full/noncompact_with_nulls.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/noncompact_with_nulls.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/full/noncompact_with_nulls.sql b/yt/yql/tests/sql/suites/window/full/noncompact_with_nulls.sql new file mode 100644 index 0000000000..019551ef7e --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/noncompact_with_nulls.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ +/* postgres can not */ + +$input = ( +SELECT * FROM plato.Input WHERE key = '1' +UNION ALL +SELECT NULL AS key, "9" as subkey, "000" as value +UNION ALL +SELECT NULL AS key, "9" as subkey, "001" as value +); + + +SELECT + key, + subkey, + value, + + AGGREGATE_LIST(value) over w1 as agglist1, + +FROM $input +WINDOW + w1 as (PARTITION BY key, subkey ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/full/noncompact_with_nulls_tuple_key.cfg b/yt/yql/tests/sql/suites/window/full/noncompact_with_nulls_tuple_key.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/noncompact_with_nulls_tuple_key.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/full/noncompact_with_nulls_tuple_key.sql b/yt/yql/tests/sql/suites/window/full/noncompact_with_nulls_tuple_key.sql new file mode 100644 index 0000000000..81c3fe43ff --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/noncompact_with_nulls_tuple_key.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ +/* postgres can not */ + +$input = ( +SELECT * FROM plato.Input WHERE key = '1' +UNION ALL +SELECT NULL AS key, "9" as subkey, "000" as value +UNION ALL +SELECT NULL AS key, "9" as subkey, "001" as value +); + + +SELECT + key, + subkey, + value, + + AGGREGATE_LIST(value) over w1 as agglist1, + +FROM $input +WINDOW + w1 as (PARTITION BY (key, subkey) as pkey ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/full/noncompact_with_tablerow.cfg b/yt/yql/tests/sql/suites/window/full/noncompact_with_tablerow.cfg new file mode 100644 index 0000000000..bcf4082c5c --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/noncompact_with_tablerow.cfg @@ -0,0 +1 @@ +in Input input_optkey2.txt diff --git a/yt/yql/tests/sql/suites/window/full/noncompact_with_tablerow.sql b/yt/yql/tests/sql/suites/window/full/noncompact_with_tablerow.sql new file mode 100644 index 0000000000..1b3778fc96 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/noncompact_with_tablerow.sql @@ -0,0 +1,14 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + key, + subkey, + value, + + AGGREGATE_LIST(TableRow()) OVER w AS frame, + +FROM plato.Input +WINDOW + w as (PARTITION BY key, subkey ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/full/session.cfg b/yt/yql/tests/sql/suites/window/full/session.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/session.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/window/full/session.sql b/yt/yql/tests/sql/suites/window/full/session.sql new file mode 100644 index 0000000000..76ee7bd0c8 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/session.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +-- add non-optional partition key +$src = SELECT t.*, user ?? "u0" as user_nonopt FROM Input as t; + +SELECT + user, + user_nonopt, + ts, + payload, + AGGREGATE_LIST(TableRow()) over w as full_session, + COUNT(1) over w as session_len, +FROM $src +WINDOW w AS ( + PARTITION BY user, user_nonopt, SessionWindow(ts, 10) + ORDER BY ts + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING +) +ORDER BY user, payload; diff --git a/yt/yql/tests/sql/suites/window/full/session_aliases.cfg b/yt/yql/tests/sql/suites/window/full/session_aliases.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/session_aliases.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/window/full/session_aliases.sql b/yt/yql/tests/sql/suites/window/full/session_aliases.sql new file mode 100644 index 0000000000..b809c6b534 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/session_aliases.sql @@ -0,0 +1,19 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + ts, + SessionStart() over w1 as ss1, + SessionStart() over w as ss, + + ListSort(AGGREGATE_LIST(ts) over w) as ts_session, + COUNT(1) over w as session_len, +FROM plato.Input +WINDOW w AS ( + PARTITION BY user, SessionWindow(ts, 10) as ss0 +), +w1 AS ( + PARTITION BY SessionWindow(ts, 10), user +) +ORDER BY user, ts; diff --git a/yt/yql/tests/sql/suites/window/full/session_aliases_compact.cfg b/yt/yql/tests/sql/suites/window/full/session_aliases_compact.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/session_aliases_compact.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/window/full/session_aliases_compact.sql b/yt/yql/tests/sql/suites/window/full/session_aliases_compact.sql new file mode 100644 index 0000000000..2bd49f12f1 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/session_aliases_compact.sql @@ -0,0 +1,19 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + ts, + SessionStart() over w1 as ss1, + SessionStart() over w as ss, + + ListSort(AGGREGATE_LIST(ts) over w) as ts_session, + COUNT(1) over w as session_len, +FROM plato.Input +WINDOW w AS ( + PARTITION COMPACT BY user, SessionWindow(ts, 10) as ss0 +), +w1 AS ( + PARTITION COMPACT BY SessionWindow(ts, 10), user +) +ORDER BY user, ts; diff --git a/yt/yql/tests/sql/suites/window/full/session_compact.cfg b/yt/yql/tests/sql/suites/window/full/session_compact.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/session_compact.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/window/full/session_compact.sql b/yt/yql/tests/sql/suites/window/full/session_compact.sql new file mode 100644 index 0000000000..8c86df8e1c --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/session_compact.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + ts, + payload, + AGGREGATE_LIST(ts) over w as ts_session, + COUNT(1) over w as session_len, +FROM plato.Input +WINDOW w AS ( + PARTITION COMPACT BY user, SessionWindow(ts, 10) + ORDER BY ts + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING +) +ORDER BY user, payload; diff --git a/yt/yql/tests/sql/suites/window/full/session_incompat_sort.cfg b/yt/yql/tests/sql/suites/window/full/session_incompat_sort.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/session_incompat_sort.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/window/full/session_incompat_sort.sql b/yt/yql/tests/sql/suites/window/full/session_incompat_sort.sql new file mode 100644 index 0000000000..6280f571af --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/session_incompat_sort.sql @@ -0,0 +1,21 @@ +/* syntax version 1 */ +/* postgres can not */ +USE plato; + +-- add non-optional partition key +$src = SELECT t.*, user ?? "u0" as user_nonopt FROM Input as t; + +SELECT + user, + user_nonopt, + ts, + payload, + AGGREGATE_LIST(TableRow()) over w as full_session, + COUNT(1) over w as session_len, +FROM $src +WINDOW w AS ( + PARTITION BY user, user_nonopt, SessionWindow(ts, 10) + ORDER BY ts DESC + ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING +) +ORDER BY user, payload; diff --git a/yt/yql/tests/sql/suites/window/full/syscolumns.cfg b/yt/yql/tests/sql/suites/window/full/syscolumns.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/syscolumns.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/full/syscolumns.sql b/yt/yql/tests/sql/suites/window/full/syscolumns.sql new file mode 100644 index 0000000000..d2533c062b --- /dev/null +++ b/yt/yql/tests/sql/suites/window/full/syscolumns.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +select + value, + max(value) over (partition by cast(TableName() as Utf8)), + cast(TableName() as Utf8), +from Input order by value; + +select + value, + max(value) over (order by cast(TableName() as Utf8) rows between unbounded preceding and unbounded following), + cast(TableName() as Utf8), +from Input order by value; diff --git a/yt/yql/tests/sql/suites/window/generic/aggregations_after_current.cfg b/yt/yql/tests/sql/suites/window/generic/aggregations_after_current.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/aggregations_after_current.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/generic/aggregations_after_current.sql b/yt/yql/tests/sql/suites/window/generic/aggregations_after_current.sql new file mode 100644 index 0000000000..aca3f1c6e6 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/aggregations_after_current.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + COUNT(*) over w1 as count1, + ListSort(AGGREGATE_LIST_DISTINCT(subkey) over w1) as agglist_distinct1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + AGGREGATE_LIST(subkey) over w2 as agglist2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION BY key ORDER BY value ROWS BETWEEN 3 FOLLOWING AND 5 FOLLOWING), + w2 as (PARTITION BY key ORDER BY value ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/generic/aggregations_before_current.cfg b/yt/yql/tests/sql/suites/window/generic/aggregations_before_current.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/aggregations_before_current.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/generic/aggregations_before_current.sql b/yt/yql/tests/sql/suites/window/generic/aggregations_before_current.sql new file mode 100644 index 0000000000..e3adba7ded --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/aggregations_before_current.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + COUNT(*) over w1 as count1, + ListSort(AGGREGATE_LIST_DISTINCT(subkey) over w1) as agglist_distinct1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + AGGREGATE_LIST(subkey) over w2 as agglist2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION BY key ORDER BY value ROWS BETWEEN 5 PRECEDING AND 3 PRECEDING), + w2 as (PARTITION BY key ORDER BY value ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/generic/aggregations_include_current.cfg b/yt/yql/tests/sql/suites/window/generic/aggregations_include_current.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/aggregations_include_current.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/generic/aggregations_include_current.sql b/yt/yql/tests/sql/suites/window/generic/aggregations_include_current.sql new file mode 100644 index 0000000000..8b43cd6699 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/aggregations_include_current.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + COUNT(*) over w1 as count1, + ListSort(AGGREGATE_LIST_DISTINCT(subkey) over w1) as agglist_distinct1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + AGGREGATE_LIST(subkey) over w2 as agglist2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION BY key ORDER BY value ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING), + w2 as (PARTITION BY key ORDER BY value ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/generic/aggregations_mixed.cfg b/yt/yql/tests/sql/suites/window/generic/aggregations_mixed.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/aggregations_mixed.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/generic/aggregations_mixed.sql b/yt/yql/tests/sql/suites/window/generic/aggregations_mixed.sql new file mode 100644 index 0000000000..f301c179de --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/aggregations_mixed.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + COUNT(*) over w1 as count1, + ListSort(AGGREGATE_LIST_DISTINCT(subkey) over w1) as agglist_distinct1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + AGGREGATE_LIST(subkey) over w2 as agglist2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION BY key ORDER BY value ROWS BETWEEN 3 PRECEDING AND 1 PRECEDING), + w2 as (PARTITION BY key ORDER BY value ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/generic/aggregations_mixed_leadlag.cfg b/yt/yql/tests/sql/suites/window/generic/aggregations_mixed_leadlag.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/aggregations_mixed_leadlag.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/generic/aggregations_mixed_leadlag.sql b/yt/yql/tests/sql/suites/window/generic/aggregations_mixed_leadlag.sql new file mode 100644 index 0000000000..2b744948ca --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/aggregations_mixed_leadlag.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + LEAD(value || value, 3) over w1 as dvalue_lead1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + LAG(cast(value as uint32)) over w2 as value_lag2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION BY key ORDER BY value ROWS BETWEEN 3 PRECEDING AND 1 PRECEDING), + w2 as (PARTITION BY key ORDER BY value ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/generic/session.cfg b/yt/yql/tests/sql/suites/window/generic/session.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/session.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/window/generic/session.sql b/yt/yql/tests/sql/suites/window/generic/session.sql new file mode 100644 index 0000000000..998f12e1ea --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/session.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + ts, + payload, + AGGREGATE_LIST(ts) over w as ts_session, + COUNT(1) over w as session_len, +FROM plato.Input +WINDOW w AS ( + PARTITION BY user, SessionWindow(ts, 10) + ORDER BY ts + ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING +) +ORDER BY user, payload; diff --git a/yt/yql/tests/sql/suites/window/generic/session_aliases.cfg b/yt/yql/tests/sql/suites/window/generic/session_aliases.cfg new file mode 100644 index 0000000000..c788a7d1ec --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/session_aliases.cfg @@ -0,0 +1 @@ +in Input session1.txt diff --git a/yt/yql/tests/sql/suites/window/generic/session_aliases.sql b/yt/yql/tests/sql/suites/window/generic/session_aliases.sql new file mode 100644 index 0000000000..2375d56064 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/generic/session_aliases.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + user, + ts, + SessionStart() over w1 as ss1, + SessionStart() over w as ss, + + AGGREGATE_LIST(ts) over w as ts_session, + COUNT(1) over w as session_len, +FROM plato.Input +WINDOW w AS ( + PARTITION BY user, SessionWindow(ts, 10) as ss0 + ORDER BY ts + ROWS BETWEEN 10 PRECEDING AND 10 FOLLOWING +), +w1 AS ( + PARTITION BY SessionWindow(ts, 10), user + ORDER BY ts + ROWS BETWEEN 100 PRECEDING AND 100 FOLLOWING +) +ORDER BY user, ts; diff --git a/yt/yql/tests/sql/suites/window/input_optkey1.txt.attr b/yt/yql/tests/sql/suites/window/input_optkey1.txt.attr new file mode 100644 index 0000000000..1ca6ee6155 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/input_optkey1.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["DataType";"Int32"]]; + ["optkey";["OptionalType";["DataType";"Int32"]]]; + ["value";["DataType";"String"]]] + ]; +}} diff --git a/yt/yql/tests/sql/suites/window/input_optkey2.txt.attr b/yt/yql/tests/sql/suites/window/input_optkey2.txt.attr new file mode 100644 index 0000000000..14e8d693aa --- /dev/null +++ b/yt/yql/tests/sql/suites/window/input_optkey2.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["key";["OptionalType";["DataType";"Int32"]]]; + ["subkey";["DataType";"Uint32"]]; + ["value";["DataType";"String"]]] + ]; +}} diff --git a/yt/yql/tests/sql/suites/window/lagging/aggregations.cfg b/yt/yql/tests/sql/suites/window/lagging/aggregations.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/lagging/aggregations.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/lagging/aggregations.sql b/yt/yql/tests/sql/suites/window/lagging/aggregations.sql new file mode 100644 index 0000000000..bd38e584e8 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/lagging/aggregations.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + COUNT(*) over w1 as count1, + ListSort(AGGREGATE_LIST_DISTINCT(subkey) over w1) as agglist_distinct1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + AGGREGATE_LIST(subkey) over w2 as agglist2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION BY key ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND 3 PRECEDING), + w2 as (PARTITION BY key ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/lagging/aggregations_leadlag.cfg b/yt/yql/tests/sql/suites/window/lagging/aggregations_leadlag.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/lagging/aggregations_leadlag.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/lagging/aggregations_leadlag.sql b/yt/yql/tests/sql/suites/window/lagging/aggregations_leadlag.sql new file mode 100644 index 0000000000..f87bf21f0e --- /dev/null +++ b/yt/yql/tests/sql/suites/window/lagging/aggregations_leadlag.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + LEAD(value || value, 3) over w1 as dvalue_lead1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + LAG(cast(value as uint32)) over w2 as value_lag2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION BY key ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND 3 PRECEDING), + w2 as (PARTITION BY key ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/leading/aggregations.cfg b/yt/yql/tests/sql/suites/window/leading/aggregations.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/leading/aggregations.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/leading/aggregations.sql b/yt/yql/tests/sql/suites/window/leading/aggregations.sql new file mode 100644 index 0000000000..9e2fb4090d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/leading/aggregations.sql @@ -0,0 +1,16 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + COUNT(*) over w1 as count1, + ListSort(AGGREGATE_LIST_DISTINCT(subkey) over w1) as agglist_distinct1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + AGGREGATE_LIST(subkey) over w2 as agglist2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION BY key ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND 3 FOLLOWING), + w2 as (PARTITION BY key ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/leading/aggregations_leadlag.cfg b/yt/yql/tests/sql/suites/window/leading/aggregations_leadlag.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/leading/aggregations_leadlag.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/leading/aggregations_leadlag.sql b/yt/yql/tests/sql/suites/window/leading/aggregations_leadlag.sql new file mode 100644 index 0000000000..23f6c5ae87 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/leading/aggregations_leadlag.sql @@ -0,0 +1,15 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + LEAD(value || value, 3) over w1 as dvalue_lead1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + LAG(cast(value as uint32)) over w2 as value_lag2, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION BY key ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND 3 FOLLOWING), + w2 as (PARTITION BY key ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/mixed/aggregations.cfg b/yt/yql/tests/sql/suites/window/mixed/aggregations.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/mixed/aggregations.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/mixed/aggregations.sql b/yt/yql/tests/sql/suites/window/mixed/aggregations.sql new file mode 100644 index 0000000000..d54d034301 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/mixed/aggregations.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ + +SELECT + value, + + SUM(unwrap(cast(subkey as uint32))) over w1 as sum1, + AGGREGATE_LIST(subkey) over w1 as agglist1, + + SUM(cast(subkey as uint32)) over w2 as sum2, + AGGREGATE_LIST(subkey) over w2 as agglist2, + +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION BY key ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + w2 as (PARTITION BY key ORDER BY value ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) +ORDER BY value; diff --git a/yt/yql/tests/sql/suites/window/p_int32.json b/yt/yql/tests/sql/suites/window/p_int32.json new file mode 100644 index 0000000000..18d17df026 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/p_int32.json @@ -0,0 +1 @@ +"3" diff --git a/yt/yql/tests/sql/suites/window/presort_window_order_by_table.sql b/yt/yql/tests/sql/suites/window/presort_window_order_by_table.sql new file mode 100644 index 0000000000..a635674af9 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/presort_window_order_by_table.sql @@ -0,0 +1,16 @@ +/* postgres can not */ +use plato; + +$list = AsList( + AsList(3,1), + AsList(1,1), + AsList(1), + ); + +insert into @foo +select x from (select $list as x) +flatten by x; +commit; +select x,row_number() over w as r from @foo +window w as (order by x asc); + diff --git a/yt/yql/tests/sql/suites/window/presort_window_partition_by_table.sql b/yt/yql/tests/sql/suites/window/presort_window_partition_by_table.sql new file mode 100644 index 0000000000..402496130b --- /dev/null +++ b/yt/yql/tests/sql/suites/window/presort_window_partition_by_table.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +use plato; +SELECT + key, row_number() over w +FROM (SELECT AsList(key) as key, value from Input) +WINDOW w AS (partition by key order by value) +ORDER BY key; diff --git a/yt/yql/tests/sql/suites/window/rank/opt.cfg b/yt/yql/tests/sql/suites/window/rank/opt.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/rank/opt.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/rank/opt.sql b/yt/yql/tests/sql/suites/window/rank/opt.sql new file mode 100644 index 0000000000..3260ffb6ea --- /dev/null +++ b/yt/yql/tests/sql/suites/window/rank/opt.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ +/* postgres can not */ + +PRAGMA warning("disable", "4520"); +PRAGMA AnsiRankForNullableKeys; + +SELECT + key, + subkey, + RANK() over w1 as r1, + DENSE_RANK() over w1 as r2, + RANK(subkey) over w1 as r3, + DENSE_RANK(subkey) over w1 as r4, + + RANK() over w2 as r5, + DENSE_RANK() over w2 as r6, + RANK(subkey || subkey) over w2 as r7, + DENSE_RANK(subkey || subkey) over w2 as r8, +FROM (SELECT cast(key as uint32) as key, subkey, value FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION BY key ORDER BY subkey ROWS BETWEEN UNBOUNDED PRECEDING AND 5 PRECEDING), + w2 as ( ORDER BY key, subkey ROWS BETWEEN 3 FOLLOWING AND 2 FOLLOWING) +ORDER BY key,subkey; diff --git a/yt/yql/tests/sql/suites/window/rank/plain.cfg b/yt/yql/tests/sql/suites/window/rank/plain.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/rank/plain.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/rank/plain.sql b/yt/yql/tests/sql/suites/window/rank/plain.sql new file mode 100644 index 0000000000..dee09aefe6 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/rank/plain.sql @@ -0,0 +1,23 @@ +/* syntax version 1 */ +/* postgres can not */ + +PRAGMA warning("disable", "4520"); +PRAGMA AnsiRankForNullableKeys; + +SELECT + key, + subkey, + RANK() over w1 as r1, + DENSE_RANK() over w1 as r2, + RANK(subkey) over w1 as r3, + DENSE_RANK(subkey) over w1 as r4, + + RANK() over w2 as r5, + DENSE_RANK() over w2 as r6, + RANK(subkey || subkey) over w2 as r7, + DENSE_RANK(subkey || subkey) over w2 as r8, +FROM (SELECT * FROM plato.Input WHERE key = '1') +WINDOW + w1 as (PARTITION BY key ORDER BY subkey ROWS BETWEEN UNBOUNDED PRECEDING AND 5 PRECEDING), + w2 as ( ORDER BY key, subkey ROWS BETWEEN 3 FOLLOWING AND 2 FOLLOWING) +ORDER BY key,subkey; diff --git a/yt/yql/tests/sql/suites/window/rank/unordered.cfg b/yt/yql/tests/sql/suites/window/rank/unordered.cfg new file mode 100644 index 0000000000..000848a05d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/rank/unordered.cfg @@ -0,0 +1 @@ +in Input input5.txt diff --git a/yt/yql/tests/sql/suites/window/rank/unordered.sql b/yt/yql/tests/sql/suites/window/rank/unordered.sql new file mode 100644 index 0000000000..c8213f505e --- /dev/null +++ b/yt/yql/tests/sql/suites/window/rank/unordered.sql @@ -0,0 +1,20 @@ +/* syntax version 1 */ +/* postgres can not */ + +PRAGMA warning("disable", "4520"); +PRAGMA warning("disable", "4521"); +PRAGMA AnsiRankForNullableKeys; + +SELECT + key, + subkey, + RANK() over w1 as r1, + DENSE_RANK() over w1 as r2, + + RANK() over w2 as r3, + DENSE_RANK() over w2 as r4, +FROM plato.Input +WINDOW + w1 as (PARTITION BY key ROWS BETWEEN UNBOUNDED PRECEDING AND 5 PRECEDING), + w2 as ( ROWS BETWEEN 3 FOLLOWING AND 2 FOLLOWING) +ORDER BY key,subkey; diff --git a/yt/yql/tests/sql/suites/window/row_number_no_part_from_subq.sql b/yt/yql/tests/sql/suites/window/row_number_no_part_from_subq.sql new file mode 100644 index 0000000000..1b767deceb --- /dev/null +++ b/yt/yql/tests/sql/suites/window/row_number_no_part_from_subq.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +USE plato; + +SELECT key, ROW_NUMBER() OVER w AS row_num +FROM (select * from Input where key != "020") +WINDOW w AS (); diff --git a/yt/yql/tests/sql/suites/window/row_number_no_part_multi_input.sql b/yt/yql/tests/sql/suites/window/row_number_no_part_multi_input.sql new file mode 100644 index 0000000000..df8eebf750 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/row_number_no_part_multi_input.sql @@ -0,0 +1,25 @@ +/* postgres can not */ +USE plato; + +insert into @foo select * from Input; + +commit; + +$input = ( + select * from Input where key != "020" + union all + select * from @foo + union all + select * from Input +); + +$output = SELECT key, ROW_NUMBER() OVER w AS row_num +FROM $input +WINDOW w AS (); + +select + min(key) as min_key, + count(distinct row_num) as dist_rn, + min(row_num) as min_rn, + max(row_num) as max_rn, +from $output; diff --git a/yt/yql/tests/sql/suites/window/row_number_to_map.sql b/yt/yql/tests/sql/suites/window/row_number_to_map.sql new file mode 100644 index 0000000000..914b36e574 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/row_number_to_map.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +/* syntax version 1 */ + +USE plato; + +SELECT key, subkey, + ROW_NUMBER() OVER w1 AS rn1, + ROW_NUMBER() OVER w2 AS rn2, + COUNT(*) OVER w2 AS w2_cnt, + ROW_NUMBER() OVER w3 AS rn3, + ROW_NUMBER() OVER w4 AS rn4, +FROM Input +WINDOW + w1 AS (), + w2 AS (ORDER BY subkey ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + w3 AS (ORDER BY subkey DESC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW), + w4 AS (ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) +ORDER BY subkey; diff --git a/yt/yql/tests/sql/suites/window/row_number_to_map_multiple.sql b/yt/yql/tests/sql/suites/window/row_number_to_map_multiple.sql new file mode 100644 index 0000000000..979699b5af --- /dev/null +++ b/yt/yql/tests/sql/suites/window/row_number_to_map_multiple.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +/* syntax version 1 */ + +USE plato; + +SELECT key, subkey, + ROW_NUMBER() OVER w1 AS rn1, + ROW_NUMBER() OVER w2 AS rn2, + ROW_NUMBER() OVER w3 AS rn3, +FROM Input +WINDOW + w1 AS (), + w2 AS (ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), + w3 AS (ORDER BY subkey DESC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) +ORDER BY subkey; diff --git a/yt/yql/tests/sql/suites/window/row_number_to_map_noncompact.sql b/yt/yql/tests/sql/suites/window/row_number_to_map_noncompact.sql new file mode 100644 index 0000000000..7d870be944 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/row_number_to_map_noncompact.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* syntax version 1 */ + +USE plato; + +SELECT + ROW_NUMBER() OVER w AS rn, + COUNT(*) OVER w AS cnt, +FROM Input +WINDOW + w AS () +ORDER BY rn; diff --git a/yt/yql/tests/sql/suites/window/session1.txt.attr b/yt/yql/tests/sql/suites/window/session1.txt.attr new file mode 100644 index 0000000000..0df1a044c1 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/session1.txt.attr @@ -0,0 +1,7 @@ +{"_yql_row_spec"={ + "Type"=["StructType";[ + ["user";["OptionalType";["DataType";"String"]]]; + ["ts";["OptionalType";["DataType";"Int32"]]]; + ["payload";["DataType";"Int32"]]] + ]; +}} diff --git a/yt/yql/tests/sql/suites/window/udaf_window.cfg b/yt/yql/tests/sql/suites/window/udaf_window.cfg new file mode 100644 index 0000000000..289c4251bb --- /dev/null +++ b/yt/yql/tests/sql/suites/window/udaf_window.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf python3_udf diff --git a/yt/yql/tests/sql/suites/window/udaf_window.sql b/yt/yql/tests/sql/suites/window/udaf_window.sql new file mode 100644 index 0000000000..34f9f56c6a --- /dev/null +++ b/yt/yql/tests/sql/suites/window/udaf_window.sql @@ -0,0 +1,51 @@ +/* postgres can not */ +/* syntax version 1 */ +$script = @@ +import heapq +import json + +N_SMALLEST = 3 + +def create(item): + return [item] + +def add(state, item): + heapq.heappush(state, item) + return heapq.nsmallest(N_SMALLEST, state) + +def merge(state_a, state_b): + merged = heapq.merge(state_a, state_b) + return heapq.nsmallest(N_SMALLEST, merged) + +def get_result(state): + result = heapq.nsmallest(N_SMALLEST, state) + return '%d smallest items: %s' % ( + N_SMALLEST, + ', '.join(map(str, result)) + ) + +def serialize(state): + return json.dumps(state) + +def deserialize(serialized): + return json.loads(serialized) +@@; + +$create = Python3::create(Callable<(Double)->Resource<Python3>>, $script); +$add = Python3::add(Callable<(Resource<Python3>,Double)->Resource<Python3>>, $script); +$merge = Python3::merge(Callable<(Resource<Python3>,Resource<Python3>)->Resource<Python3>>, $script); +$get_result = Python3::get_result(Callable<(Resource<Python3>)->String>, $script); +$serialize = Python3::serialize(Callable<(Resource<Python3>)->String>, $script); +$deserialize = Python3::deserialize(Callable<(String)->Resource<Python3>>, $script); + +SELECT UDAF( + CAST(key AS Double), + $create, + $add, + $merge, + $get_result, + $serialize, + $deserialize +) OVER w +FROM plato.Input +WINDOW w AS (ORDER by value); diff --git a/yt/yql/tests/sql/suites/window/win_by_all_aggregate.cfg b/yt/yql/tests/sql/suites/window/win_by_all_aggregate.cfg new file mode 100644 index 0000000000..0dba2231fb --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_by_all_aggregate.cfg @@ -0,0 +1,4 @@ +in Input input_tutorial_users.txt +udf histogram_udf +udf math_udf +udf stat_udf diff --git a/yt/yql/tests/sql/suites/window/win_by_all_aggregate.sql b/yt/yql/tests/sql/suites/window/win_by_all_aggregate.sql new file mode 100644 index 0000000000..d144fc095d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_by_all_aggregate.sql @@ -0,0 +1,38 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$data = (select cast(key as uint32) as age, cast(subkey as uint32) as region, value as name from Input); + +-- insert into Output +select + region, + name, + sum(age) over w1 as sum, + min(age) over w1 as min, + max(age) over w1 as max, + count(age) over w1 as count, + count(*) over w1 as count_all, + count_if(age>20) over w1 as count_if, + some(age) over w1 as some, + bit_and(age) over w1 as bit_and, + bit_or(age) over w1 as bit_or, + bit_xor(age) over w1 as bit_xor, + bool_and(age>20) over w1 as bool_and, + bool_or(age>20) over w1 as bool_or, + avg(age) over w1 as avg, + aggr_list(age) over w1 as `list`, + min_by(age, name) over w1 as min_by, + max_by(age, name) over w1 as max_by, + nanvl(variance(age) over w1, -999.0) as variance, + nanvl(stddev(age) over w1, -999.0) as stddev, + nanvl(populationvariance(age) over w1, -999.0) as popvar, + nanvl(stddevpopulation(age) over w1, -999.0) as popstddev, + histogram(age) over w1 as hist, + median(age) over w1 as median, + percentile(age, 0.9) over w1 as perc90, + aggregate_by(age, aggregation_factory("count")) over w1 as aggby +from $data +window w1 as (partition by region order by name desc) +order by region, name desc +; diff --git a/yt/yql/tests/sql/suites/window/win_by_all_avg_interval.sql b/yt/yql/tests/sql/suites/window/win_by_all_avg_interval.sql new file mode 100644 index 0000000000..c2ff089f9e --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_by_all_avg_interval.sql @@ -0,0 +1,19 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$data = (select cast(key as uint32) as age, cast(subkey as uint32) as region, value as name from Input); + +-- insert into Output +$data2 = (select + region, + name, + avg(CAST(age as Interval)) over w1 as avg_age, +from $data +window w1 as (partition by region order by name desc) +); + +discard select + EnsureType(avg_age, Interval?) as avg_age +from $data2 +; diff --git a/yt/yql/tests/sql/suites/window/win_by_all_percentile_interval.sql b/yt/yql/tests/sql/suites/window/win_by_all_percentile_interval.sql new file mode 100644 index 0000000000..b7c1cf8a79 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_by_all_percentile_interval.sql @@ -0,0 +1,36 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$zero = unwrap( cast(0 as Interval) ); + +-- safely cast data to get rid of optionals after cast +$prepared = select + cast(key as Interval) ?? $zero as age + , cast(subkey as uint32) as region + , value as name + from Input; + +-- we want to check both optional<interval> and plain interval +$data = (select + age + , just(age) as age_opt + , region + , name + from $prepared); + +$data2 = (select + region, + name, + percentile(age, 0.8) over w1 as age_p80, + percentile(age_opt, 0.8) over w1 as age_opt_p80, +from $data +window w1 as (partition by region order by name desc) +); + +select + EnsureType(age_p80, Interval) as age_p80 + , EnsureType(age_opt_p80, Interval?) as age_opt_p80 +from $data2 +; + diff --git a/yt/yql/tests/sql/suites/window/win_expr_bounds.cfg b/yt/yql/tests/sql/suites/window/win_expr_bounds.cfg new file mode 100644 index 0000000000..10325bfb63 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_expr_bounds.cfg @@ -0,0 +1,2 @@ +in Input4 input4.txt +param $begin p_int32.json diff --git a/yt/yql/tests/sql/suites/window/win_expr_bounds.sql b/yt/yql/tests/sql/suites/window/win_expr_bounds.sql new file mode 100644 index 0000000000..64e7387bc6 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_expr_bounds.sql @@ -0,0 +1,13 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +declare $begin as Int32; + +select + key, subkey, + COUNT(*) over w as cnt +from Input4 +window + w as (order by key, subkey rows between $begin preceding and 1 + 1 following) +order by key, subkey; diff --git a/yt/yql/tests/sql/suites/window/win_extract_members.sql b/yt/yql/tests/sql/suites/window/win_extract_members.sql new file mode 100644 index 0000000000..7785cf9eb9 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_extract_members.sql @@ -0,0 +1,21 @@ +/* postgres can not */ +use plato; + +$foo = ( + select key, subkey, value, + sum(cast(subkey as uint32)) over w as sks + from Input + window w as (partition by key order by subkey) +); + +$bar = ( + select key, subkey, + sum(cast(subkey as uint32)) over w as sks, + avg(cast(subkey as uint32)) over w as ska + from Input4 + window w as (partition by key order by subkey) +); + +select key,subkey, value from $foo order by key, subkey; +select key,ska from $bar order by key,ska; + diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_4func.cfg b/yt/yql/tests/sql/suites/window/win_func_aggr_4func.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_4func.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_4func.sql b/yt/yql/tests/sql/suites/window/win_func_aggr_4func.sql new file mode 100644 index 0000000000..245bbdf5b3 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_4func.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +select + subkey, + 2 * sum(cast(key as uint32)) over w1 as dbl_sum, + count(key) over w1 as c, + min(key) over w1 as mink, + max(key) over w1 as maxk +from plato.Input window w1 as (partition by subkey order by key) +order by subkey, c; diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_4func_no_part.cfg b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_no_part.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_no_part.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_4func_no_part.sql b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_no_part.sql new file mode 100644 index 0000000000..6d15ae0b4b --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_no_part.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +select + 2 * sum(cast(key as uint32)) over w1 as dbl_sum, + count(key) over w1 as c, + min(key) over w1 as mink, + max(key) over w1 as maxk +from plato.Input window w1 as (order by key desc) +order by c; diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_4func_no_part_sorted.cfg b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_no_part_sorted.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_no_part_sorted.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_4func_no_part_sorted.sql b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_no_part_sorted.sql new file mode 100644 index 0000000000..34f8c138f6 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_no_part_sorted.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +select + 2 * sum(cast(key as uint32)) over w1 as dbl_sum, + count(key) over w1 as c, + min(key) over w1 as mink, + max(key) over w1 as maxk +from plato.Input +window w1 as (order by key) +order by c; diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_4func_sort.cfg b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_sort.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_sort.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_4func_sort.sql b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_sort.sql new file mode 100644 index 0000000000..821da3fefd --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_sort.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +select + subkey, + sum(cast(key as uint32)) over w1 as s, + count(key) over w1 as c, + min(key) over w1 as mink, + max(key) over w1 as maxk +from plato.Input window w1 as (partition by subkey order by key) +order by subkey, c; diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_4func_sort_desc.cfg b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_sort_desc.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_sort_desc.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_4func_sort_desc.sql b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_sort_desc.sql new file mode 100644 index 0000000000..3553711d4d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_4func_sort_desc.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +select + subkey, + sum(cast(key as uint32)) over w1 as s, + count(key) over w1 as c, + min(key) over w1 as mink, + max(key) over w1 as maxk +from plato.Input window w1 as (partition by subkey order by key desc) +order by subkey, c; diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_hist.cfg b/yt/yql/tests/sql/suites/window/win_func_aggr_hist.cfg new file mode 100644 index 0000000000..79b8cf294f --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_hist.cfg @@ -0,0 +1,2 @@ +in Input input_intersect.txt +udf histogram_udf diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_hist.sql b/yt/yql/tests/sql/suites/window/win_func_aggr_hist.sql new file mode 100644 index 0000000000..c7c506e390 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_hist.sql @@ -0,0 +1,5 @@ +/* postgres can not */ +select subkey, HISTOGRAM(cast(key as uint32) % 10, 2.) over w1 as hh, count(key) over w1 as c, min(key) over w1 as mink, max(key) over w1 as maxk +from plato.Input +window w1 as (partition by subkey order by key) +order by subkey, c; diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_stat.cfg b/yt/yql/tests/sql/suites/window/win_func_aggr_stat.cfg new file mode 100644 index 0000000000..b0a6e1e6b6 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_stat.cfg @@ -0,0 +1,2 @@ +in Input input.txt +udf math_udf diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_stat.sql b/yt/yql/tests/sql/suites/window/win_func_aggr_stat.sql new file mode 100644 index 0000000000..7d7ed2bb52 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_stat.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +select + key, subkey, + nanvl(correlation(cast(key as double), cast(subkey as double)) over w, NULL) as corr, + nanvl(covariance(cast(key as double), cast(subkey as double)) over w, -9.9) as covar, + hll(value, 18) over w as hll +from plato.Input +window w as (order by subkey); diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_with_qualified_all.cfg b/yt/yql/tests/sql/suites/window/win_func_aggr_with_qualified_all.cfg new file mode 100644 index 0000000000..144f0dd840 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_with_qualified_all.cfg @@ -0,0 +1 @@ +in Input input2.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_with_qualified_all.sql b/yt/yql/tests/sql/suites/window/win_func_aggr_with_qualified_all.sql new file mode 100644 index 0000000000..976046bcc8 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_with_qualified_all.sql @@ -0,0 +1,6 @@ +pragma SimpleColumns; +use plato; + +$q = (select CAST(key as Int32) as key, CAST(subkey as Int32) as subkey, value from Input); + +select t.*, sum(subkey) over w as subkey_sum, sum(key) over w from $q as t window w as (partition by key order by value) order by key,subkey; diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_with_qualified_all_no_simple_columns.cfg b/yt/yql/tests/sql/suites/window/win_func_aggr_with_qualified_all_no_simple_columns.cfg new file mode 100644 index 0000000000..144f0dd840 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_with_qualified_all_no_simple_columns.cfg @@ -0,0 +1 @@ +in Input input2.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_aggr_with_qualified_all_no_simple_columns.sql b/yt/yql/tests/sql/suites/window/win_func_aggr_with_qualified_all_no_simple_columns.sql new file mode 100644 index 0000000000..d790cfea62 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_aggr_with_qualified_all_no_simple_columns.sql @@ -0,0 +1,7 @@ +pragma DisableSimpleColumns; + +use plato; + +$q = (select CAST(key as Int32) as key, CAST(subkey as Int32) as subkey, value from Input); + +select t.*, sum(subkey) over w as subkey_sum, sum(key) over w from $q as t window w as (partition by key order by value) order by `t.key`,`t.subkey`; diff --git a/yt/yql/tests/sql/suites/window/win_func_auto_arg.sql b/yt/yql/tests/sql/suites/window/win_func_auto_arg.sql new file mode 100644 index 0000000000..4dea9c50b1 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_auto_arg.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; +PRAGMA DisableAnsiRankForNullableKeys; + +SELECT + RANK() over w as rank_noarg, + DENSE_RANK() over w as dense_rank_noarg, + RANK(cast(subkey as uint32) / 10 % 2) over w as rank, + DENSE_RANK(cast(subkey as uint32) / 10 % 2) over w as dense_rank, + zz.* +FROM + Input4 as zz +WINDOW + w as (PARTITION BY key ORDER BY subkey) +ORDER BY key, subkey, value +; diff --git a/yt/yql/tests/sql/suites/window/win_func_auto_arg_selective_rank.sql b/yt/yql/tests/sql/suites/window/win_func_auto_arg_selective_rank.sql new file mode 100644 index 0000000000..aae50e65f4 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_auto_arg_selective_rank.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; +PRAGMA DisableSimpleColumns; +PRAGMA DisableAnsiRankForNullableKeys; + +--INSERT INTO Output +SELECT + RANK() over w as rank_noarg, + DENSE_RANK() over w as dense_rank_noarg, + RANK(AsTuple(key, value)) over w as rank, + DENSE_RANK(AsTuple(key, value)) over w as dense_rank, + zz.* +FROM + Input4 as zz +WINDOW + w as (ORDER BY key, subkey, value) +; diff --git a/yt/yql/tests/sql/suites/window/win_func_auto_arg_two_sort.sql b/yt/yql/tests/sql/suites/window/win_func_auto_arg_two_sort.sql new file mode 100644 index 0000000000..67f6c8cc5f --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_auto_arg_two_sort.sql @@ -0,0 +1,18 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; +PRAGMA DisableAnsiRankForNullableKeys; + +--INSERT INTO Output +SELECT + RANK() over w as rank_noarg, + DENSE_RANK() over w as dense_rank_noarg, + RANK(subkey) over w as rank, + DENSE_RANK(subkey) over w as dense_rank, + zz.* +FROM + Input4 as zz +WINDOW + w as (PARTITION BY key ORDER BY subkey, value) +ORDER BY key, subkey, value +; diff --git a/yt/yql/tests/sql/suites/window/win_func_first_last.cfg b/yt/yql/tests/sql/suites/window/win_func_first_last.cfg new file mode 100644 index 0000000000..1af92ac7be --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_first_last.cfg @@ -0,0 +1 @@ +in Input input_intersect_with_holes.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_first_last.sql b/yt/yql/tests/sql/suites/window/win_func_first_last.sql new file mode 100644 index 0000000000..1e0c82e8fd --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_first_last.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +SELECT + key, + FIRST_VALUE(cast(subkey as uint32)) RESPECT NULLS OVER w1, + FIRST_VALUE(cast(subkey as uint32)) IGNORE NULLS OVER w1, + LAST_VALUE(cast(subkey as uint32)) OVER w1, + LAST_VALUE(cast(subkey as uint32)) IGNORE NULLS OVER w1, + subkey +FROM plato.Input +WINDOW w1 as (ORDER BY key desc, subkey); diff --git a/yt/yql/tests/sql/suites/window/win_func_first_last_over_nonopt.sql b/yt/yql/tests/sql/suites/window/win_func_first_last_over_nonopt.sql new file mode 100644 index 0000000000..9303079983 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_first_last_over_nonopt.sql @@ -0,0 +1,19 @@ +/* postgres can not */ +/* syntax version 1 */ +SELECT + key, + + FIRST_VALUE(key) RESPECT NULLS OVER w1, + FIRST_VALUE(key) IGNORE NULLS OVER w1, + LAST_VALUE(key) OVER w1, + LAST_VALUE(key) IGNORE NULLS OVER w1, + + FIRST_VALUE(null) RESPECT NULLS OVER w1, + FIRST_VALUE(null) IGNORE NULLS OVER w1, + LAST_VALUE(null) OVER w1, + LAST_VALUE(null) IGNORE NULLS OVER w1, + + subkey +FROM plato.Input +WINDOW w1 as (ORDER BY subkey ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) +ORDER BY subkey; diff --git a/yt/yql/tests/sql/suites/window/win_func_first_last_rev.cfg b/yt/yql/tests/sql/suites/window/win_func_first_last_rev.cfg new file mode 100644 index 0000000000..1af92ac7be --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_first_last_rev.cfg @@ -0,0 +1 @@ +in Input input_intersect_with_holes.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_first_last_rev.sql b/yt/yql/tests/sql/suites/window/win_func_first_last_rev.sql new file mode 100644 index 0000000000..ce137c76f3 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_first_last_rev.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +SELECT + key, + FIRST_VALUE(cast(subkey as uint32)) OVER w1, + FIRST_VALUE(cast(subkey as uint32)) IGNORE NULLS OVER w1, + LAST_VALUE(cast(subkey as uint32)) RESPECT NULLS OVER w1, + LAST_VALUE(cast(subkey as uint32)) IGNORE NULLS OVER w1, + subkey +FROM plato.Input +WINDOW w1 as (ORDER BY key asc, subkey); diff --git a/yt/yql/tests/sql/suites/window/win_func_first_last_with_part.cfg b/yt/yql/tests/sql/suites/window/win_func_first_last_with_part.cfg new file mode 100644 index 0000000000..1af92ac7be --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_first_last_with_part.cfg @@ -0,0 +1 @@ +in Input input_intersect_with_holes.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_first_last_with_part.sql b/yt/yql/tests/sql/suites/window/win_func_first_last_with_part.sql new file mode 100644 index 0000000000..84de1048c6 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_first_last_with_part.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +$input=(select cast(key as int32) / 100 as key_hundred, cast(key as int32) as key, cast(subkey as int32) as subkey, value from plato.Input); + +SELECT + key_hundred, + key, + FIRST_VALUE(cast(subkey as uint32)) RESPECT NULLS OVER w1 as first_res_null, + FIRST_VALUE(cast(subkey as uint32)) IGNORE NULLS OVER w1 as first_esc_null, + LAST_VALUE(cast(subkey as uint32)) OVER w1 as last_res_null, + LAST_VALUE(cast(subkey as uint32)) IGNORE NULLS OVER w1 as last_esc_null, + subkey +FROM $input +WINDOW w1 as (PARTITION BY key_hundred ORDER BY key) +ORDER BY key_hundred, key, subkey; diff --git a/yt/yql/tests/sql/suites/window/win_func_in_lib.cfg b/yt/yql/tests/sql/suites/window/win_func_in_lib.cfg new file mode 100644 index 0000000000..b6318845f7 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_in_lib.cfg @@ -0,0 +1,2 @@ +file lib1.sql lib1.sql.txt +in Input input.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_in_lib.sql b/yt/yql/tests/sql/suites/window/win_func_in_lib.sql new file mode 100644 index 0000000000..3c6dd9719c --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_in_lib.sql @@ -0,0 +1,6 @@ +USE plato; +PRAGMA library('lib1.sql'); + +IMPORT lib1 symbols $subq; + +SELECT * FROM $subq(); diff --git a/yt/yql/tests/sql/suites/window/win_func_into_udf.cfg b/yt/yql/tests/sql/suites/window/win_func_into_udf.cfg new file mode 100644 index 0000000000..061efc4f73 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_into_udf.cfg @@ -0,0 +1,2 @@ +in Input input4.txt +udf math_udf diff --git a/yt/yql/tests/sql/suites/window/win_func_into_udf.sql b/yt/yql/tests/sql/suites/window/win_func_into_udf.sql new file mode 100644 index 0000000000..45083bc46d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_into_udf.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +SELECT + key, Math::Sqrt(CAST(row_number() over w as double)) as sq +FROM plato.Input +WINDOW w AS (partition by key order by subkey) +ORDER BY key, sq; diff --git a/yt/yql/tests/sql/suites/window/win_func_lead_lag_opt.cfg b/yt/yql/tests/sql/suites/window/win_func_lead_lag_opt.cfg new file mode 100644 index 0000000000..f0840473ba --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_lead_lag_opt.cfg @@ -0,0 +1,2 @@ +in Input input.txt +in InputOpt input_optkey1.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_lead_lag_opt.sql b/yt/yql/tests/sql/suites/window/win_func_lead_lag_opt.sql new file mode 100644 index 0000000000..192103f030 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_lead_lag_opt.sql @@ -0,0 +1,23 @@ +/* postgres can not */ +use plato; + +select + subkey, + lag(Just(subkey)) over w as opt_lag, + lead(Just(subkey)) over w as opt_lead, + lag(subkey, 0) over w as lag0, + lead(subkey, 0) over w as lead0 +from Input window w as () +order by subkey; + + +select + key, + lag(optkey) over w as opt_lag, + lead(Just(optkey)) over w as opt_lead, + lag(Just(optkey), 0) over w as lag0, + lead(optkey, 0) over w as lead0 +from InputOpt window w as () +order by key; + +select lead(null) over w from (select 1 as key) window w as (); diff --git a/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm.cfg b/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm.sql b/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm.sql new file mode 100644 index 0000000000..4400f070f2 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm.sql @@ -0,0 +1,21 @@ +/* postgres can not */ +use plato; + +$input=(select cast(key as int32) as key, cast(subkey as int32) as subkey, value from Input); + +--insert into Output +select + lead(key, 3) over w as keyL, + lead(key, 2) over w as keyM, + lead(key, 1) over w as keyN, + key as keyO, + lag(key, 1) over w as key_1, + lag(key, 2) over w as key_2, + lag(key, 3) over w as key_3, + lag(key, 4) over w as key_4, + lag(key, 5) over w as key_5, + value +from $input +window w as (order by key, value) +order by keyO, value +; diff --git a/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm_with_part.cfg b/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm_with_part.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm_with_part.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm_with_part.sql b/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm_with_part.sql new file mode 100644 index 0000000000..509cd93f05 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm_with_part.sql @@ -0,0 +1,22 @@ +/* postgres can not */ +use plato; + +$input=(select cast(key as int32) / 100 as key_hundred, cast(key as int32) as key, cast(subkey as int32) as subkey, value from Input); + +--insert into Output +select + key_hundred as a_part, + lead(key, 3) over w as keyL, + lead(key, 2) over w as keyM, + lead(key, 1) over w as keyN, + key as keyO, + lag(key, 1) over w as key_1, + lag(key, 2) over w as key_2, + lag(key, 3) over w as key_3, + lag(key, 4) over w as key_4, + lag(key, 5) over w as key_5, + value +from $input +window w as (partition by key_hundred order by key, value) +order by a_part, keyO, value +; diff --git a/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm_with_part_other.cfg b/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm_with_part_other.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm_with_part_other.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm_with_part_other.sql b/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm_with_part_other.sql new file mode 100644 index 0000000000..1da77dd086 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_lead_lag_worm_with_part_other.sql @@ -0,0 +1,22 @@ +/* postgres can not */ +use plato; + +$input=(select cast(key as int32) % 4 as key_quad, cast(key as int32) as key, cast(subkey as int32) as subkey, value from Input); + +--insert into Output +select + key_quad as a_part, + lead(key, 3) over w as keyL, + lead(key, 2) over w as keyM, + lead(key, 1) over w as keyN, + key as keyO, + lag(key, 1) over w as key_1, + lag(key, 2) over w as key_2, + lag(key, 3) over w as key_3, + lag(key, 4) over w as key_4, + lag(key, 5) over w as key_5, + value +from $input +window w as (partition by key_quad order by key, value) +order by a_part, keyO, value +; diff --git a/yt/yql/tests/sql/suites/window/win_func_on_cloned_source.sql b/yt/yql/tests/sql/suites/window/win_func_on_cloned_source.sql new file mode 100644 index 0000000000..a4cd401589 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_on_cloned_source.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +USE plato; + +$sub_raws = (SELECT ROW_NUMBER() OVER trivialWindow as RowNum +FROM Input WINDOW trivialWindow As () +); + +--INSERT INTO Output +SELECT + * +FROM $sub_raws; + +SELECT + * +FROM $sub_raws; diff --git a/yt/yql/tests/sql/suites/window/win_func_order_by_udf_empty_rank.cfg b/yt/yql/tests/sql/suites/window/win_func_order_by_udf_empty_rank.cfg new file mode 100644 index 0000000000..144f0dd840 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_order_by_udf_empty_rank.cfg @@ -0,0 +1 @@ +in Input input2.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_order_by_udf_empty_rank.sql b/yt/yql/tests/sql/suites/window/win_func_order_by_udf_empty_rank.sql new file mode 100644 index 0000000000..6508a8c827 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_order_by_udf_empty_rank.sql @@ -0,0 +1,17 @@ +/* syntax version 1 */ +/* postgres can not */ +PRAGMA DisableAnsiRankForNullableKeys; + +USE plato; + +SELECT + key, + RANK() over w as ix, + subkey, + String::Base64Encode(subkey) as subkey_enc +FROM Input +WINDOW w AS ( + PARTITION BY key + ORDER BY String::Base64Encode(subkey) DESC +) +ORDER BY key, ix; diff --git a/yt/yql/tests/sql/suites/window/win_func_over_group_by.cfg b/yt/yql/tests/sql/suites/window/win_func_over_group_by.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_over_group_by.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_over_group_by.sql b/yt/yql/tests/sql/suites/window/win_func_over_group_by.sql new file mode 100644 index 0000000000..2766549b6e --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_over_group_by.sql @@ -0,0 +1,17 @@ +/* postgres can not */ +use plato; + +$data = (select cast(key as uint32) as age, cast(subkey as uint32) as region, value as name from Input); + +--insert into Output +select + prefix, + region, + avg(age) as avg_age, + sum(avg(age)) over w1 as sum_by_avg_age +from $data +group by region, SUBSTRING(name,0,1) as prefix +-- how to use single avg_age? +window w1 as (partition by region order by avg(age)) +order by region, avg_age +; diff --git a/yt/yql/tests/sql/suites/window/win_func_over_group_by_compl.cfg b/yt/yql/tests/sql/suites/window/win_func_over_group_by_compl.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_over_group_by_compl.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_over_group_by_compl.sql b/yt/yql/tests/sql/suites/window/win_func_over_group_by_compl.sql new file mode 100644 index 0000000000..fda60ad550 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_over_group_by_compl.sql @@ -0,0 +1,25 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$data = (select cast(key as uint32) as age, cast(subkey as uint32) as region, value as name from Input); + +--insert into Output +select + prefix, + region, + region + 2 as region_2, + --age, + avg(age) as avg_age, + sum(age) as sum_age, + sum(avg(age)) over w1 as sum_by_avg_age, + lag(region) over w1 as prev_region, + lag(aggr_list(region)) over w1 as prev_region_list, + 'test' +from $data +group by region, SUBSTRING(name,0,1) as prefix +-- how to use single avg_age? +window w1 as (partition by region order by avg(age) desc) +--window w1 as (order by avg(age) desc) +order by region, avg_age desc +; diff --git a/yt/yql/tests/sql/suites/window/win_func_over_group_by_list_names.cfg b/yt/yql/tests/sql/suites/window/win_func_over_group_by_list_names.cfg new file mode 100644 index 0000000000..582479bcde --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_over_group_by_list_names.cfg @@ -0,0 +1 @@ +in Input input_tutorial_users.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_over_group_by_list_names.sql b/yt/yql/tests/sql/suites/window/win_func_over_group_by_list_names.sql new file mode 100644 index 0000000000..d6ec520dae --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_over_group_by_list_names.sql @@ -0,0 +1,27 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$data = (select cast(key as uint32) as age, cast(subkey as uint32) as region, value as name from Input); + +--insert into Output +select + prefix, + region, + region + 2 as region_2, + --age, + avg(age) as avg_age, + sum(age) as sum_age, + sum(avg(age)) over w1 as sum_by_avg_age, + lag(region) over w1 as prev_region, + aggr_list(prefix) over w1 as prefix_list, + lag(prefix) over w1 as prev_prefix_list, + lag(aggr_list(name)) over w1 as prev_region_list, + 'test' +from $data +group by region, SUBSTRING(name,0,1) as prefix +-- how to use single avg_age? +window w1 as (partition by region order by avg(age) desc, prefix) +--window w1 as (order by avg(age) desc) +order by region, avg_age desc, prefix +; diff --git a/yt/yql/tests/sql/suites/window/win_func_over_group_by_list_names_order_prefix.cfg b/yt/yql/tests/sql/suites/window/win_func_over_group_by_list_names_order_prefix.cfg new file mode 100644 index 0000000000..582479bcde --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_over_group_by_list_names_order_prefix.cfg @@ -0,0 +1 @@ +in Input input_tutorial_users.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_over_group_by_list_names_order_prefix.sql b/yt/yql/tests/sql/suites/window/win_func_over_group_by_list_names_order_prefix.sql new file mode 100644 index 0000000000..3050750f9b --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_over_group_by_list_names_order_prefix.sql @@ -0,0 +1,24 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; + +$data = (select cast(key as uint32) as age, cast(subkey as uint32) as region, value as name from Input); + +--insert into Output +select + prefix, + region, + region + 2 as region_2, + avg(age) as avg_age, + sum(age) as sum_age, + sum(avg(age)) over w1 as sum_by_avg_age, + lag(region) over w1 as prev_region, + aggr_list(prefix) over w1 as prefix_list, + lag(prefix) over w1 as prev_prefix_list, + lag(agg_list(name)) over w1 as prev_region_list, + 'test' +from $data +group by region, SUBSTRING(name,0,1) as prefix +window w1 as (partition by region order by prefix desc) +order by region desc, prefix, sum_by_avg_age +; diff --git a/yt/yql/tests/sql/suites/window/win_func_part_by_expr.cfg b/yt/yql/tests/sql/suites/window/win_func_part_by_expr.cfg new file mode 100644 index 0000000000..582479bcde --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_part_by_expr.cfg @@ -0,0 +1 @@ +in Input input_tutorial_users.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_part_by_expr.sql b/yt/yql/tests/sql/suites/window/win_func_part_by_expr.sql new file mode 100644 index 0000000000..f101052580 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_part_by_expr.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +use plato; + +$data = (select cast(key as uint32) as age, cast(subkey as uint32) as region, value as name from Input); + +--insert into Output +select + prefix, + region, + name, + sum(age) over w1 as sum1 +from $data +window w1 as (partition by SUBSTRING(name,0,1) as prefix order by name) +order by prefix, region, name; diff --git a/yt/yql/tests/sql/suites/window/win_func_part_by_expr_new.sql b/yt/yql/tests/sql/suites/window/win_func_part_by_expr_new.sql new file mode 100644 index 0000000000..cec51e2e40 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_part_by_expr_new.sql @@ -0,0 +1,9 @@ +/* postgres can not */ +/* syntax version 1 */ +-- YQL-1977 +use plato; + +--insert into Output +select key_mod, aggr_list(value) over w, aggr_list(subkey) over w +from Input window w as (partition by cast(key as uint32) % 10 as key_mod order by subkey) +order by key_mod, column1; diff --git a/yt/yql/tests/sql/suites/window/win_func_rank_by_all.cfg b/yt/yql/tests/sql/suites/window/win_func_rank_by_all.cfg new file mode 100644 index 0000000000..1af92ac7be --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_rank_by_all.cfg @@ -0,0 +1 @@ +in Input input_intersect_with_holes.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_rank_by_all.sql b/yt/yql/tests/sql/suites/window/win_func_rank_by_all.sql new file mode 100644 index 0000000000..963a93391f --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_rank_by_all.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +PRAGMA DisableAnsiRankForNullableKeys; + +$input=(select cast(key as int32) ?? 0 as key, cast(subkey as int32) as subkey, value from Input); + +SELECT + rank(key) over w1 as rank_key, + dense_rank(key) over w1 as dense_rank_key, + key +FROM $input +WINDOW w1 as (ORDER BY key); diff --git a/yt/yql/tests/sql/suites/window/win_func_rank_by_opt_all.cfg b/yt/yql/tests/sql/suites/window/win_func_rank_by_opt_all.cfg new file mode 100644 index 0000000000..1af92ac7be --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_rank_by_opt_all.cfg @@ -0,0 +1 @@ +in Input input_intersect_with_holes.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_rank_by_opt_all.sql b/yt/yql/tests/sql/suites/window/win_func_rank_by_opt_all.sql new file mode 100644 index 0000000000..fd589fcba2 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_rank_by_opt_all.sql @@ -0,0 +1,13 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +PRAGMA DisableAnsiRankForNullableKeys; + +$input=(select cast(key as int32) as key, cast(subkey as int32) as subkey, value from Input); + +SELECT + rank(key) over w1 as rank_key, + dense_rank(key) over w1 as dense_rank_key, + key +FROM $input +WINDOW w1 as (ORDER BY key); diff --git a/yt/yql/tests/sql/suites/window/win_func_rank_by_opt_part.cfg b/yt/yql/tests/sql/suites/window/win_func_rank_by_opt_part.cfg new file mode 100644 index 0000000000..1af92ac7be --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_rank_by_opt_part.cfg @@ -0,0 +1 @@ +in Input input_intersect_with_holes.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_rank_by_opt_part.sql b/yt/yql/tests/sql/suites/window/win_func_rank_by_opt_part.sql new file mode 100644 index 0000000000..72e506b183 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_rank_by_opt_part.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +PRAGMA DisableAnsiRankForNullableKeys; + +$input=(select cast(key as int32) % 4 as key_quad, cast(key as int32) as key, cast(subkey as int32) as subkey, value from Input); + +SELECT + rank(key) over w1 as rank_key, + dense_rank(key) over w1 as dense_rank_key, + key_quad, + key +FROM $input +WINDOW w1 as (PARTITION BY key_quad ORDER BY key) +ORDER BY rank_key, dense_rank_key, key_quad; diff --git a/yt/yql/tests/sql/suites/window/win_func_rank_by_part.cfg b/yt/yql/tests/sql/suites/window/win_func_rank_by_part.cfg new file mode 100644 index 0000000000..1af92ac7be --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_rank_by_part.cfg @@ -0,0 +1 @@ +in Input input_intersect_with_holes.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_rank_by_part.sql b/yt/yql/tests/sql/suites/window/win_func_rank_by_part.sql new file mode 100644 index 0000000000..6b94e82863 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_rank_by_part.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +/* syntax version 1 */ +use plato; +PRAGMA DisableAnsiRankForNullableKeys; + +$input=(select cast(key as int32) % 4 as key_quad, cast(key as int32) ?? 0 as key, cast(subkey as int32) as subkey, value from Input); + +SELECT + rank(key) over w1 as rank_key, + dense_rank(key) over w1 as dense_rank_key, + key_quad, + key +FROM $input +WINDOW w1 as (PARTITION BY key_quad ORDER BY key) +ORDER BY rank_key, dense_rank_key, key_quad; diff --git a/yt/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.cfg b/yt/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.sql b/yt/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.sql new file mode 100644 index 0000000000..5153e2cca7 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_rank_with_order_by_aggr_key.sql @@ -0,0 +1,9 @@ +use plato; + +select + key, + RANK() over w +from Input +group by key +WINDOW w as (order by key) +order by key; diff --git a/yt/yql/tests/sql/suites/window/win_func_spec_with_part.cfg b/yt/yql/tests/sql/suites/window/win_func_spec_with_part.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_spec_with_part.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_spec_with_part.sql b/yt/yql/tests/sql/suites/window/win_func_spec_with_part.sql new file mode 100644 index 0000000000..c4ccbc43be --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_spec_with_part.sql @@ -0,0 +1,14 @@ +/* postgres can not */ +$input=(select cast(key as int32) / 100 as key_hundred, cast(key as int32) as key, cast(subkey as int32) as subkey, value from plato.Input); + +select + key_hundred, + key, + (key - lag(key, 1) over w) as key_diff, + (subkey - lag(subkey, 1) over w) as subkey_diff, + row_number() over w as row, + value +from $input +window w as (partition by key_hundred order by key, value) +order by key_hundred, key, value +; diff --git a/yt/yql/tests/sql/suites/window/win_func_special.cfg b/yt/yql/tests/sql/suites/window/win_func_special.cfg new file mode 100644 index 0000000000..3df7813790 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_special.cfg @@ -0,0 +1 @@ +in Input input_intersect.txt diff --git a/yt/yql/tests/sql/suites/window/win_func_special.sql b/yt/yql/tests/sql/suites/window/win_func_special.sql new file mode 100644 index 0000000000..1dd68979b3 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_special.sql @@ -0,0 +1,11 @@ +/* postgres can not */ +$input=(select cast(key as int32) as key, cast(subkey as int32) as subkey, value from plato.Input); + +select + key, + (key - lag(key, 1) over w) as key_diff, + (subkey - lag(subkey, 1) over w) as subkey_diff, + row_number() over w as row, + value +from $input +window w as (order by key, subkey, value); diff --git a/yt/yql/tests/sql/suites/window/win_func_with_struct_access.sql b/yt/yql/tests/sql/suites/window/win_func_with_struct_access.sql new file mode 100644 index 0000000000..47c0a0001e --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_with_struct_access.sql @@ -0,0 +1,21 @@ +/* postgres can not */ +USE plato; + +$input=(SELECT + Cast(key as int32) / 100 as key_hundred, + AsStruct( + Cast(key as int32) as key, + Cast(subkey as int32) as subkey + ) as `struct`, + value +FROM Input as inSrc); + +--INSERT INTO Output +SELECT + key_hundred as a_part, + `struct`.key - lead(`struct`.key, 1) over w as keyDiff, + value +FROM $input as outSrc +WINDOW w as (partition by key_hundred ORDER BY `struct`.key, value) +ORDER by a_part, value +; diff --git a/yt/yql/tests/sql/suites/window/win_func_with_struct_access_full_access.sql b/yt/yql/tests/sql/suites/window/win_func_with_struct_access_full_access.sql new file mode 100644 index 0000000000..49642a734e --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_func_with_struct_access_full_access.sql @@ -0,0 +1,21 @@ +/* postgres can not */ +USE plato; + +$input=(SELECT + Cast(key as int32) / 100 as key_hundred, + AsStruct( + Cast(key as int32) as key, + Cast(subkey as int32) as subkey + ) as `struct`, + value +FROM Input as inSrc); + +--INSERT INTO Output +SELECT + key_hundred as a_part, + `struct`.key - lead(outSrc.`struct`.key, 1) over w as keyDiff, + value +FROM $input as outSrc +WINDOW w as (partition by key_hundred ORDER BY `struct`.key, value) +ORDER by a_part, value +; diff --git a/yt/yql/tests/sql/suites/window/win_fuse_window.sql b/yt/yql/tests/sql/suites/window/win_fuse_window.sql new file mode 100644 index 0000000000..644031aeaf --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_fuse_window.sql @@ -0,0 +1,25 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; +$data = (select unwrap(cast(key as uint32)) as key, unwrap(cast(subkey as uint32)) as subkey, value, value || value as unused from Input4); + +insert into @data +select * from $data; + +commit; + +select + key, subkey, + FIRST_VALUE(value) over w1 as w1_first_value, + SUM(subkey) over w2 as w2_sum_subkey, + LAST_VALUE(value) over w3 as w3_last_value, + SUM(key) over w4 as w4_sum_key, + LEAD(value) over w5 as w5_next_value, +from @data +window + w1 as (partition by subkey, key order by value), + w2 as (order by key,subkey rows unbounded preceding), + w3 as (partition by key, subkey order by value rows unbounded preceding), -- = w1 + w4 as (order by key,subkey rows between unbounded preceding and current row), -- = w2 + w5 as (partition by subkey, key order by value rows between unbounded preceding and current row) -- = w1 +order by key, subkey; diff --git a/yt/yql/tests/sql/suites/window/win_inline_spec.sql b/yt/yql/tests/sql/suites/window/win_inline_spec.sql new file mode 100644 index 0000000000..b881a07689 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_inline_spec.sql @@ -0,0 +1,9 @@ +/* syntax version 1 */ +select + key, + max(key) over (order by key) as running_max, + lead(key) over (order by key rows unbounded preceding) as next_key, + aggregate_list(key) over w as keys, +from plato.Input +window w as (order by key rows between unbounded preceding and current row) +order by key; diff --git a/yt/yql/tests/sql/suites/window/win_lead_in_mem.sql b/yt/yql/tests/sql/suites/window/win_lead_in_mem.sql new file mode 100644 index 0000000000..ae78304cbd --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_lead_in_mem.sql @@ -0,0 +1,10 @@ +/* postgres can not */ +USE plato; + +$list = (select item FROM (select AsList('foo', 'bar', 'baz', 'quux', 'bat') as `list`) FLATTEN BY `list` as item); + +--INSERT INTO Output +SELECT + item, YQL::Concat('+', Lead(item, 1) over w), YQL::Concat("++", Lead(item,2) over w) +FROM $list +WINDOW w as (); diff --git a/yt/yql/tests/sql/suites/window/win_multiaggr.sql b/yt/yql/tests/sql/suites/window/win_multiaggr.sql new file mode 100644 index 0000000000..4d641e8a53 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_multiaggr.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +use plato; + +select MULTI_AGGREGATE_BY(AsStruct(subkey as a,value as b), AGGREGATION_FACTORY("count")) over w, +MULTI_AGGREGATE_BY(AsStruct(subkey as a,value as b), AGGREGATION_FACTORY("max")) over w +from Input window w as (order by key); diff --git a/yt/yql/tests/sql/suites/window/win_multiaggr_library.cfg b/yt/yql/tests/sql/suites/window/win_multiaggr_library.cfg new file mode 100644 index 0000000000..f71ef4179c --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_multiaggr_library.cfg @@ -0,0 +1,3 @@ +in Input input.txt +file agg_factory.sql agg_factory.sql.txt +file multiaggr_subq.sql multiaggr_subq.sql.txt diff --git a/yt/yql/tests/sql/suites/window/win_multiaggr_library.sql b/yt/yql/tests/sql/suites/window/win_multiaggr_library.sql new file mode 100644 index 0000000000..a9f599906c --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_multiaggr_library.sql @@ -0,0 +1,7 @@ +/* postgres can not */ +pragma library('multiaggr_subq.sql'); +pragma library('agg_factory.sql'); + +import multiaggr_subq symbols $multiaggr_win; + +select * from $multiaggr_win() order by rn; diff --git a/yt/yql/tests/sql/suites/window/win_multiaggr_list.sql b/yt/yql/tests/sql/suites/window/win_multiaggr_list.sql new file mode 100644 index 0000000000..5eeb21148c --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_multiaggr_list.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +use plato; + +select MULTI_AGGREGATE_BY(AsList(subkey,value), AGGREGATION_FACTORY("count")) over w, +MULTI_AGGREGATE_BY(AsList(subkey,value), AGGREGATION_FACTORY("max")) over w +from Input window w as (order by key); diff --git a/yt/yql/tests/sql/suites/window/win_multiaggr_tuple.sql b/yt/yql/tests/sql/suites/window/win_multiaggr_tuple.sql new file mode 100644 index 0000000000..2384757bfb --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_multiaggr_tuple.sql @@ -0,0 +1,6 @@ +/* postgres can not */ +use plato; + +select MULTI_AGGREGATE_BY(AsTuple(subkey,value), AGGREGATION_FACTORY("count")) over w, +MULTI_AGGREGATE_BY(AsTuple(subkey,value), AGGREGATION_FACTORY("max")) over w +from Input window w as (order by key); diff --git a/yt/yql/tests/sql/suites/window/win_over_few_partitions.cfg b/yt/yql/tests/sql/suites/window/win_over_few_partitions.cfg new file mode 100644 index 0000000000..582479bcde --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_over_few_partitions.cfg @@ -0,0 +1 @@ +in Input input_tutorial_users.txt diff --git a/yt/yql/tests/sql/suites/window/win_over_few_partitions.sql b/yt/yql/tests/sql/suites/window/win_over_few_partitions.sql new file mode 100644 index 0000000000..20f59940d0 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_over_few_partitions.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +$data = (select + cast(key as uint32) as age, + cast(key as uint32)/10 as age_decade, + cast(subkey as uint32) as region, + value as name +from plato.Input); + +select + region, age, name, sum(age) over w1 as sum1, sum(age) over w2 as sum2 +from $data +window + w1 as (partition by region order by name), + w2 as (partition by age_decade order by name) +order by region, age; diff --git a/yt/yql/tests/sql/suites/window/win_over_few_partitions_other.cfg b/yt/yql/tests/sql/suites/window/win_over_few_partitions_other.cfg new file mode 100644 index 0000000000..582479bcde --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_over_few_partitions_other.cfg @@ -0,0 +1 @@ +in Input input_tutorial_users.txt diff --git a/yt/yql/tests/sql/suites/window/win_over_few_partitions_other.sql b/yt/yql/tests/sql/suites/window/win_over_few_partitions_other.sql new file mode 100644 index 0000000000..19bd3fe37b --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_over_few_partitions_other.sql @@ -0,0 +1,15 @@ +/* postgres can not */ +$input = (select cast(key as uint32) as key, cast(subkey as uint32) as subkey, value from plato.Input); + +select + subkey, + sum(subkey) over w2 AS x, + 2 * sum(key) over w1 as dbl_sum, + count(key) over w1 as c, + min(key) over w1 as mink, + max(key) over w1 as maxk +from $input +window + w1 as (partition by subkey order by key % 3, key), + w2 as (partition by key order by subkey) +order by subkey, x, dbl_sum; diff --git a/yt/yql/tests/sql/suites/window/win_with_cur_row.cfg b/yt/yql/tests/sql/suites/window/win_with_cur_row.cfg new file mode 100644 index 0000000000..582479bcde --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_with_cur_row.cfg @@ -0,0 +1 @@ +in Input input_tutorial_users.txt diff --git a/yt/yql/tests/sql/suites/window/win_with_cur_row.sql b/yt/yql/tests/sql/suites/window/win_with_cur_row.sql new file mode 100644 index 0000000000..15c59c9159 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/win_with_cur_row.sql @@ -0,0 +1,8 @@ +/* postgres can not */ +$data = (select cast(key as uint32) as age, cast(subkey as uint32) as region, value as name from plato.Input); + +select + region, name, sum(age) over w1 as sum1 +from $data +window w1 as (partition by region order by name) +order by region, name; diff --git a/yt/yql/tests/sql/suites/window/yql-14479.sql b/yt/yql/tests/sql/suites/window/yql-14479.sql new file mode 100644 index 0000000000..1a28ebbb4d --- /dev/null +++ b/yt/yql/tests/sql/suites/window/yql-14479.sql @@ -0,0 +1,8 @@ +/* custom check: len(yt_res_yson[0][b'Write'][0][b'Data']) < 4 */ +/* ignore plan diff */ +USE plato; + +SELECT a.*, row_number() OVER (PARTITION BY key, subkey) as rn, TableName() as tn +FROM Input as a +TABLESAMPLE BERNOULLI(10.0) REPEATABLE(1) +; diff --git a/yt/yql/tests/sql/suites/window/yql-14738.sql b/yt/yql/tests/sql/suites/window/yql-14738.sql new file mode 100644 index 0000000000..b295b092c2 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/yql-14738.sql @@ -0,0 +1,12 @@ +/* postgres can not */ +/* syntax version 1 */ +USE plato; + +SELECT + t.*, + COUNT(*) OVER (PARTITION BY key || "1") as c1, + COUNT(*) OVER (PARTITION BY key || "2") as c2, + COUNT(*) OVER w as c3, +FROM Input as t +WINDOW w AS (PARTITION BY key || "3") +ORDER BY subkey; diff --git a/yt/yql/tests/sql/suites/window/yql-15636.sql b/yt/yql/tests/sql/suites/window/yql-15636.sql new file mode 100644 index 0000000000..b9efdb2c56 --- /dev/null +++ b/yt/yql/tests/sql/suites/window/yql-15636.sql @@ -0,0 +1,37 @@ +/* syntax version 1 */ +/* postgres can not */ +use plato; + +insert into @tmp +select + Just('foo') as driver_license_pd_id, + 'bar' as order_id, + '1' as user_phone_pd_id, + '2' as utc_order_dttm; +commit; + + + +SELECT + driver_license_pd_id, + user_phone_pd_id, + utc_order_dttm, + order_id, + + LEAD( + <|"order_id": order_id, "order_dttm": utc_order_dttm|>, + 1 + ) OVER ( + PARTITION BY user_phone_pd_id + ORDER BY utc_order_dttm + ) AS next_user_order, + + LEAD( + <|"order_id": order_id|>, + 1 + ) OVER ( + PARTITION BY driver_license_pd_id + ORDER BY utc_order_dttm + ) AS next_driver_order, + +FROM @tmp; diff --git a/yt/yql/tests/sql/suites/ypath/complex.sql b/yt/yql/tests/sql/suites/ypath/complex.sql new file mode 100644 index 0000000000..8c8ec6cba9 --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/complex.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +SELECT * FROM plato.`Input[#0:#2,"075",#7:#9,("150","2"):("150","5")]`; diff --git a/yt/yql/tests/sql/suites/ypath/default.cfg b/yt/yql/tests/sql/suites/ypath/default.cfg new file mode 100644 index 0000000000..6f99339756 --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/default.cfg @@ -0,0 +1,2 @@ +in Input input.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/ypath/direct_read_from_dynamic.cfg b/yt/yql/tests/sql/suites/ypath/direct_read_from_dynamic.cfg new file mode 100644 index 0000000000..1908d503d1 --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/direct_read_from_dynamic.cfg @@ -0,0 +1,2 @@ +in Input dynamic.txt +res result.txt diff --git a/yt/yql/tests/sql/suites/ypath/direct_read_from_dynamic.sql b/yt/yql/tests/sql/suites/ypath/direct_read_from_dynamic.sql new file mode 100644 index 0000000000..1f9f690313 --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/direct_read_from_dynamic.sql @@ -0,0 +1,4 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma direct_read; +SELECT * FROM plato.`Input["150"]`; diff --git a/yt/yql/tests/sql/suites/ypath/dynamic.txt.attr b/yt/yql/tests/sql/suites/ypath/dynamic.txt.attr new file mode 100644 index 0000000000..9e3c33c4cb --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/dynamic.txt.attr @@ -0,0 +1,33 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key"; ["DataType"; "String"]]; + ["subkey"; ["DataType"; "String"]]; + ["value"; ["DataType"; "String"]]; + ]]; + "SortMembers"=["key"; "subkey"]; + "SortedBy"=["key"; "subkey"]; + "SortDirections"=[1; 1]; + "SortedByTypes"=[["DataType";"String"]; ["DataType";"String"]] + }; + "_yql_dynamic"=%true; + "schema"=< + "strict" = %true; + "unique_keys" = %true + >[ + { + "name" = "key"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "subkey"; + "type" = "string"; + "sort_order" = "ascending"; + }; + { + "name" = "value"; + "type" = "string"; + }; + ] +}
\ No newline at end of file diff --git a/yt/yql/tests/sql/suites/ypath/empty_range-dynamic.cfg b/yt/yql/tests/sql/suites/ypath/empty_range-dynamic.cfg new file mode 100644 index 0000000000..a35dbb3169 --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/empty_range-dynamic.cfg @@ -0,0 +1,3 @@ +in Input dynamic.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/ypath/empty_range.cfg b/yt/yql/tests/sql/suites/ypath/empty_range.cfg new file mode 100644 index 0000000000..2c31ed76e1 --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/empty_range.cfg @@ -0,0 +1,3 @@ +in Input input.txt +res result.txt +providers yt diff --git a/yt/yql/tests/sql/suites/ypath/empty_range.sql b/yt/yql/tests/sql/suites/ypath/empty_range.sql new file mode 100644 index 0000000000..397ed970db --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/empty_range.sql @@ -0,0 +1,2 @@ +/*ytfile can not*/ +SELECT * FROM plato.`<ranges=[]>//Input`; diff --git a/yt/yql/tests/sql/suites/ypath/input.txt.attr b/yt/yql/tests/sql/suites/ypath/input.txt.attr new file mode 100644 index 0000000000..7a11b85b77 --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/input.txt.attr @@ -0,0 +1,13 @@ +{ + "_yql_row_spec"={ + "Type"=["StructType";[ + ["key"; ["DataType"; "String"]]; + ["subkey"; ["DataType"; "String"]]; + ["value"; ["DataType"; "String"]]; + ]]; + "SortMembers"=["key"; "subkey"]; + "SortedBy"=["key"; "subkey"]; + "SortDirections"=[1; 1]; + "SortedByTypes"=[["DataType";"String"]; ["DataType";"String"]] + }; +} diff --git a/yt/yql/tests/sql/suites/ypath/limit_with_key.sql b/yt/yql/tests/sql/suites/ypath/limit_with_key.sql new file mode 100644 index 0000000000..7d0b726842 --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/limit_with_key.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +SELECT * FROM plato.`Input["150"]` LIMIT 2; diff --git a/yt/yql/tests/sql/suites/ypath/limit_with_range.sql b/yt/yql/tests/sql/suites/ypath/limit_with_range.sql new file mode 100644 index 0000000000..7739be5c32 --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/limit_with_range.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +SELECT * FROM plato.`Input[#1:#4]` LIMIT 2; diff --git a/yt/yql/tests/sql/suites/ypath/multi_key.sql b/yt/yql/tests/sql/suites/ypath/multi_key.sql new file mode 100644 index 0000000000..ccc77294e8 --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/multi_key.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +SELECT * FROM plato.`Input[("150","2"):("150","5"),"075"]`; diff --git a/yt/yql/tests/sql/suites/ypath/multi_range.sql b/yt/yql/tests/sql/suites/ypath/multi_range.sql new file mode 100644 index 0000000000..ecdc211aea --- /dev/null +++ b/yt/yql/tests/sql/suites/ypath/multi_range.sql @@ -0,0 +1,3 @@ +/* syntax version 1 */ +/* postgres can not */ +SELECT * FROM plato.`Input[#0:#2,#4:#7]`;
\ No newline at end of file |