|
||||
0001 -- Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group 0002 -- 0003 -- Window Functions Testing 0004 -- https://github.com/postgres/postgres/blob/REL_12_STABLE/src/test/regress/sql/window.sql#L320-562 0005 0006 -- Test window operator with codegen on and off. 0007 --CONFIG_DIM1 spark.sql.codegen.wholeStage=true 0008 --CONFIG_DIM1 spark.sql.codegen.wholeStage=false,spark.sql.codegen.factoryMode=CODEGEN_ONLY 0009 --CONFIG_DIM1 spark.sql.codegen.wholeStage=false,spark.sql.codegen.factoryMode=NO_CODEGEN 0010 0011 CREATE TABLE empsalary ( 0012 depname string, 0013 empno integer, 0014 salary int, 0015 enroll_date date 0016 ) USING parquet; 0017 0018 INSERT INTO empsalary VALUES 0019 ('develop', 10, 5200, date '2007-08-01'), 0020 ('sales', 1, 5000, date '2006-10-01'), 0021 ('personnel', 5, 3500, date '2007-12-10'), 0022 ('sales', 4, 4800, date '2007-08-08'), 0023 ('personnel', 2, 3900, date '2006-12-23'), 0024 ('develop', 7, 4200, date '2008-01-01'), 0025 ('develop', 9, 4500, date '2008-01-01'), 0026 ('sales', 3, 4800, date '2007-08-01'), 0027 ('develop', 8, 6000, date '2006-10-01'), 0028 ('develop', 11, 5200, date '2007-08-15'); 0029 0030 -- [SPARK-28429] SQL Datetime util function being casted to double instead of timestamp 0031 -- CREATE TEMP VIEW v_window AS 0032 -- SELECT i, min(i) over (order by i range between '1 day' preceding and '10 days' following) as min_i 0033 -- FROM range(now(), now()+'100 days', '1 hour') i; 0034 0035 -- RANGE offset PRECEDING/FOLLOWING tests 0036 0037 SELECT sum(unique1) over (order by four range between 2 preceding and 1 preceding), 0038 unique1, four 0039 FROM tenk1 WHERE unique1 < 10; 0040 0041 SELECT sum(unique1) over (order by four desc range between 2 preceding and 1 preceding), 0042 unique1, four 0043 FROM tenk1 WHERE unique1 < 10; 0044 0045 -- [SPARK-28428] Spark `exclude` always expecting `()` 0046 -- SELECT sum(unique1) over (order by four range between 2 preceding and 1 preceding exclude no others), 0047 -- unique1, four 0048 -- FROM tenk1 WHERE unique1 < 10; 0049 0050 -- [SPARK-28428] Spark `exclude` always expecting `()` 0051 -- SELECT sum(unique1) over (order by four range between 2 preceding and 1 preceding exclude current row), 0052 -- unique1, four 0053 -- FROM tenk1 WHERE unique1 < 10; 0054 0055 -- [SPARK-28428] Spark `exclude` always expecting `()` 0056 -- SELECT sum(unique1) over (order by four range between 2 preceding and 1 preceding exclude group), 0057 -- unique1, four 0058 -- FROM tenk1 WHERE unique1 < 10; 0059 0060 -- [SPARK-28428] Spark `exclude` always expecting `()` 0061 -- SELECT sum(unique1) over (order by four range between 2 preceding and 1 preceding exclude ties), 0062 -- unique1, four 0063 -- FROM tenk1 WHERE unique1 < 10; 0064 0065 -- [SPARK-28428] Spark `exclude` always expecting `()` 0066 -- SELECT sum(unique1) over (order by four range between 2 preceding and 6 following exclude ties), 0067 -- unique1, four 0068 -- FROM tenk1 WHERE unique1 < 10; 0069 0070 -- [SPARK-28428] Spark `exclude` always expecting `()` 0071 -- SELECT sum(unique1) over (order by four range between 2 preceding and 6 following exclude group), 0072 -- unique1, four 0073 -- FROM tenk1 WHERE unique1 < 10; 0074 0075 SELECT sum(unique1) over (partition by four order by unique1 range between 5 preceding and 6 following), 0076 unique1, four 0077 FROM tenk1 WHERE unique1 < 10; 0078 0079 -- [SPARK-28428] Spark `exclude` always expecting `()` 0080 -- SELECT sum(unique1) over (partition by four order by unique1 range between 5 preceding and 6 following 0081 -- exclude current row),unique1, four 0082 -- FROM tenk1 WHERE unique1 < 10; 0083 0084 -- [SPARK-28429] SQL Datetime util function being casted to double instead of timestamp 0085 -- select sum(salary) over (order by enroll_date range between '1 year' preceding and '1 year' following), 0086 -- salary, enroll_date from empsalary; 0087 0088 -- [SPARK-28429] SQL Datetime util function being casted to double instead of timestamp 0089 -- select sum(salary) over (order by enroll_date desc range between '1 year' preceding and '1 year' following), 0090 -- salary, enroll_date from empsalary; 0091 0092 -- [SPARK-28429] SQL Datetime util function being casted to double instead of timestamp 0093 -- select sum(salary) over (order by enroll_date desc range between '1 year' following and '1 year' following), 0094 -- salary, enroll_date from empsalary; 0095 0096 -- [SPARK-28428] Spark `exclude` always expecting `()` 0097 -- select sum(salary) over (order by enroll_date range between '1 year' preceding and '1 year' following 0098 -- exclude current row), salary, enroll_date from empsalary; 0099 0100 -- [SPARK-28428] Spark `exclude` always expecting `()` 0101 -- select sum(salary) over (order by enroll_date range between '1 year' preceding and '1 year' following 0102 -- exclude group), salary, enroll_date from empsalary; 0103 0104 -- [SPARK-28428] Spark `exclude` always expecting `()` 0105 -- select sum(salary) over (order by enroll_date range between '1 year' preceding and '1 year' following 0106 -- exclude ties), salary, enroll_date from empsalary; 0107 0108 -- [SPARK-27951] ANSI SQL: NTH_VALUE function 0109 -- select first_value(salary) over(order by salary range between 1000 preceding and 1000 following), 0110 -- lead(salary) over(order by salary range between 1000 preceding and 1000 following), 0111 -- nth_value(salary, 1) over(order by salary range between 1000 preceding and 1000 following), 0112 -- salary from empsalary; 0113 0114 -- [SPARK-30734] AnalysisException that window RangeFrame not match RowFrame 0115 -- select last(salary) over(order by salary range between 1000 preceding and 1000 following), 0116 -- lag(salary) over(order by salary range between 1000 preceding and 1000 following), 0117 -- salary from empsalary; 0118 0119 -- [SPARK-27951] ANSI SQL: NTH_VALUE function 0120 -- select first_value(salary) over(order by salary range between 1000 following and 3000 following 0121 -- exclude current row), 0122 -- lead(salary) over(order by salary range between 1000 following and 3000 following exclude ties), 0123 -- nth_value(salary, 1) over(order by salary range between 1000 following and 3000 following 0124 -- exclude ties), 0125 -- salary from empsalary; 0126 0127 -- [SPARK-28428] Spark `exclude` always expecting `()` 0128 -- select last(salary) over(order by salary range between 1000 following and 3000 following 0129 -- exclude group), 0130 -- lag(salary) over(order by salary range between 1000 following and 3000 following exclude group), 0131 -- salary from empsalary; 0132 0133 -- [SPARK-28428] Spark `exclude` always expecting `()` 0134 -- select first(salary) over(order by enroll_date range between unbounded preceding and '1 year' following 0135 -- exclude ties), 0136 -- last(salary) over(order by enroll_date range between unbounded preceding and '1 year' following), 0137 -- salary, enroll_date from empsalary; 0138 0139 -- [SPARK-28428] Spark `exclude` always expecting `()` 0140 -- select first(salary) over(order by enroll_date range between unbounded preceding and '1 year' following 0141 -- exclude ties), 0142 -- last(salary) over(order by enroll_date range between unbounded preceding and '1 year' following 0143 -- exclude ties), 0144 -- salary, enroll_date from empsalary; 0145 0146 -- [SPARK-28428] Spark `exclude` always expecting `()` 0147 -- select first(salary) over(order by enroll_date range between unbounded preceding and '1 year' following 0148 -- exclude group), 0149 -- last(salary) over(order by enroll_date range between unbounded preceding and '1 year' following 0150 -- exclude group), 0151 -- salary, enroll_date from empsalary; 0152 0153 -- [SPARK-28428] Spark `exclude` always expecting `()` 0154 -- select first(salary) over(order by enroll_date range between unbounded preceding and '1 year' following 0155 -- exclude current row), 0156 -- last(salary) over(order by enroll_date range between unbounded preceding and '1 year' following 0157 -- exclude current row), 0158 -- salary, enroll_date from empsalary; 0159 0160 -- RANGE offset PRECEDING/FOLLOWING with null values 0161 select ss.id, ss.y, 0162 first(ss.y) over w, 0163 last(ss.y) over w 0164 from 0165 (select x.id, x.id as y from range(1,6) as x 0166 union all select null, 42 0167 union all select null, 43) ss 0168 window w as 0169 (order by ss.id asc nulls first range between 2 preceding and 2 following); 0170 0171 select ss.id, ss.y, 0172 first(ss.y) over w, 0173 last(ss.y) over w 0174 from 0175 (select x.id, x.id as y from range(1,6) as x 0176 union all select null, 42 0177 union all select null, 43) ss 0178 window w as 0179 (order by ss.id asc nulls last range between 2 preceding and 2 following); 0180 0181 select ss.id, ss.y, 0182 first(ss.y) over w, 0183 last(ss.y) over w 0184 from 0185 (select x.id, x.id as y from range(1,6) as x 0186 union all select null, 42 0187 union all select null, 43) ss 0188 window w as 0189 (order by ss.id desc nulls first range between 2 preceding and 2 following); 0190 0191 select ss.id, ss.y, 0192 first(ss.y) over w, 0193 last(ss.y) over w 0194 from 0195 (select x.id, x.id as y from range(1,6) as x 0196 union all select null, 42 0197 union all select null, 43) ss 0198 window w as 0199 (order by ss.id desc nulls last range between 2 preceding and 2 following); 0200 0201 -- Check overflow behavior for various integer sizes 0202 0203 select x.id, last(x.id) over (order by x.id range between current row and 2147450884 following) 0204 from range(32764, 32767) x; 0205 0206 select x.id, last(x.id) over (order by x.id desc range between current row and 2147450885 following) 0207 from range(-32766, -32765) x; 0208 0209 select x.id, last(x.id) over (order by x.id range between current row and 4 following) 0210 from range(2147483644, 2147483647) x; 0211 0212 select x.id, last(x.id) over (order by x.id desc range between current row and 5 following) 0213 from range(-2147483646, -2147483645) x; 0214 0215 select x.id, last(x.id) over (order by x.id range between current row and 4 following) 0216 from range(9223372036854775804, 9223372036854775807) x; 0217 0218 select x.id, last(x.id) over (order by x.id desc range between current row and 5 following) 0219 from range(-9223372036854775806, -9223372036854775805) x; 0220 0221 -- Test in_range for other numeric datatypes 0222 0223 create table numerics ( 0224 id int, 0225 f_float4 float, 0226 f_float8 float, 0227 f_numeric int 0228 ) using parquet; 0229 0230 insert into numerics values 0231 (1, -3, -3, -3), 0232 (2, -1, -1, -1), 0233 (3, 0, 0, 0), 0234 (4, 1.1, 1.1, 1.1), 0235 (5, 1.12, 1.12, 1.12), 0236 (6, 2, 2, 2), 0237 (7, 100, 100, 100); 0238 -- (8, 'infinity', 'infinity', '1000'), 0239 -- (9, 'NaN', 'NaN', 'NaN'), 0240 -- (0, '-infinity', '-infinity', '-1000'); -- numeric type lacks infinities 0241 0242 select id, f_float4, first(id) over w, last(id) over w 0243 from numerics 0244 window w as (order by f_float4 range between 0245 1 preceding and 1 following); 0246 0247 select id, f_float4, first(id) over w, last(id) over w 0248 from numerics 0249 window w as (order by f_float4 range between 0250 1 preceding and 1.1 following); 0251 0252 select id, f_float4, first(id) over w, last(id) over w 0253 from numerics 0254 window w as (order by f_float4 range between 0255 'inf' preceding and 'inf' following); 0256 0257 select id, f_float4, first(id) over w, last(id) over w 0258 from numerics 0259 window w as (order by f_float4 range between 0260 1.1 preceding and 'NaN' following); -- error, NaN disallowed 0261 0262 select id, f_float8, first(id) over w, last(id) over w 0263 from numerics 0264 window w as (order by f_float8 range between 0265 1 preceding and 1 following); 0266 0267 select id, f_float8, first(id) over w, last(id) over w 0268 from numerics 0269 window w as (order by f_float8 range between 0270 1 preceding and 1.1 following); 0271 0272 select id, f_float8, first(id) over w, last(id) over w 0273 from numerics 0274 window w as (order by f_float8 range between 0275 'inf' preceding and 'inf' following); 0276 0277 select id, f_float8, first(id) over w, last(id) over w 0278 from numerics 0279 window w as (order by f_float8 range between 0280 1.1 preceding and 'NaN' following); -- error, NaN disallowed 0281 0282 select id, f_numeric, first(id) over w, last(id) over w 0283 from numerics 0284 window w as (order by f_numeric range between 0285 1 preceding and 1 following); 0286 0287 select id, f_numeric, first(id) over w, last(id) over w 0288 from numerics 0289 window w as (order by f_numeric range between 0290 1 preceding and 1.1 following); 0291 0292 select id, f_numeric, first(id) over w, last(id) over w 0293 from numerics 0294 window w as (order by f_numeric range between 0295 1 preceding and 1.1 following); -- currently unsupported 0296 0297 select id, f_numeric, first(id) over w, last(id) over w 0298 from numerics 0299 window w as (order by f_numeric range between 0300 1.1 preceding and 'NaN' following); -- error, NaN disallowed 0301 0302 drop table empsalary; 0303 drop table numerics;
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.1.0 LXR engine. The LXR team |