skonto opened a new pull request #25098: [SPARK-28280][SQL][PYTHON][TESTS]. 
Convert and port 'group-by.sql' into UDF test base
URL: https://github.com/apache/spark/pull/25098
 
 
   ## What changes were proposed in this pull request?
   
   This PR adds some tests converted from `group-by.sql` to test UDFs. Please 
see contribution guide of this umbrella ticket - SPARK-27921.
   <details><summary>Diff comparing to 'group-by.sql'</summary>
   <p>
   
   ```diff
   diff --git 
a/sql/core/src/test/resources/sql-tests/results/udf/udf-group-by.sql.out 
b/sql/core/src/test/resources/sql-tests/results/udf/udf-group-by.sql.out
   index 3a5df254f2..97c831aec4 100644
   --- a/sql/core/src/test/resources/sql-tests/results/udf/udf-group-by.sql.out
   +++ b/sql/core/src/test/resources/sql-tests/results/udf/udf-group-by.sql.out
   @@ -13,35 +13,35 @@ struct<>
    
    
    -- !query 1
   -SELECT a, COUNT(b) FROM testData
   +SELECT udf(a), udf(COUNT(b)) FROM testData
    -- !query 1 schema
    struct<>
    -- !query 1 output
    org.apache.spark.sql.AnalysisException
   -grouping expressions sequence is empty, and 'testdata.`a`' is not an 
aggregate function. Wrap '(count(testdata.`b`) AS `count(b)`)' in windowing 
function(s) or wrap 'testdata.`a`' in first() (or first_value) if you don't 
care which value you get.;
   +grouping expressions sequence is empty, and 'testdata.`a`' is not an 
aggregate function. Wrap '(udf(count(b)) AS `udf(count(b))`)' in windowing 
function(s) or wrap 'testdata.`a`' in first() (or first_value) if you don't 
care which value you get.;
    
    
    -- !query 2
   -SELECT COUNT(a), COUNT(b) FROM testData
   +SELECT COUNT(udf(a)), udf(COUNT(b)) FROM testData
    -- !query 2 schema
   -struct<count(a):bigint,count(b):bigint>
   +struct<count(udf(a)):bigint,udf(count(b)):string>
    -- !query 2 output
   -7   7
   +9   7
    
    
    -- !query 3
   -SELECT a, COUNT(b) FROM testData GROUP BY a
   +SELECT udf(a), COUNT(udf(b)) FROM testData GROUP BY a
    -- !query 3 schema
   -struct<a:int,count(b):bigint>
   +struct<udf(a):string,count(udf(b)):bigint>
    -- !query 3 output
    1   2
    2   2
   -3   2
   -NULL        1
   +3   3
   +nan 2
    
    
    -- !query 4
   -SELECT a, COUNT(b) FROM testData GROUP BY b
   +SELECT udf(a), udf(COUNT(b)) FROM testData GROUP BY b
    -- !query 4 schema
    struct<>
    -- !query 4 output
   @@ -50,22 +50,22 @@ expression 'testdata.`a`' is neither present in the 
group by, nor is it an aggre
    
    
    -- !query 5
   -SELECT COUNT(a), COUNT(b) FROM testData GROUP BY a
   +SELECT COUNT(udf(a)), COUNT(udf(b)) FROM testData GROUP BY a
    -- !query 5 schema
   -struct<count(a):bigint,count(b):bigint>
   +struct<count(udf(a)):bigint,count(udf(b)):bigint>
    -- !query 5 output
   -0   1
    2   2
    2   2
   -3   2
   +2   2
   +3   3
    
    
    -- !query 6
   -SELECT 'foo', COUNT(a) FROM testData GROUP BY 1
   +SELECT 'foo', COUNT(udf(a)) FROM testData GROUP BY 1
    -- !query 6 schema
   -struct<foo:string,count(a):bigint>
   +struct<foo:string,count(udf(a)):bigint>
    -- !query 6 output
   -foo 7
   +foo 9
    
    
    -- !query 7
   @@ -77,35 +77,35 @@ struct<foo:string>
    
    
    -- !query 8
   -SELECT 'foo', APPROX_COUNT_DISTINCT(a) FROM testData WHERE a = 0 GROUP BY 1
   +SELECT 'foo', udf(APPROX_COUNT_DISTINCT(udf(a))) FROM testData WHERE a = 0 
GROUP BY 1
    -- !query 8 schema
   -struct<foo:string,approx_count_distinct(a):bigint>
   +struct<foo:string,udf(approx_count_distinct(udf(a), 0.05, 0, 0)):string>
    -- !query 8 output
    
    
    
    -- !query 9
   -SELECT 'foo', MAX(STRUCT(a)) FROM testData WHERE a = 0 GROUP BY 1
   +SELECT 'foo', MAX(STRUCT(udf(a))) FROM testData WHERE a = 0 GROUP BY 1
    -- !query 9 schema
   -struct<foo:string,max(named_struct(a, a)):struct<a:int>>
   +struct<foo:string,max(named_struct(col1, udf(a))):struct<col1:string>>
    -- !query 9 output
    
    
    
    -- !query 10
   -SELECT a + b, COUNT(b) FROM testData GROUP BY a + b
   +SELECT udf(a + b), udf(COUNT(b)) FROM testData GROUP BY a + b
    -- !query 10 schema
   -struct<(a + b):int,count(b):bigint>
   +struct<udf((a + b)):string,udf(count(b)):string>
    -- !query 10 output
    2   1
    3   2
    4   2
    5   1
   -NULL        1
   +nan 1
    
    
    -- !query 11
   -SELECT a + 2, COUNT(b) FROM testData GROUP BY a + 1
   +SELECT udf(a + 2), udf(COUNT(b)) FROM testData GROUP BY a + 1
    -- !query 11 schema
    struct<>
    -- !query 11 output
   @@ -114,60 +114,60 @@ expression 'testdata.`a`' is neither present in the 
group by, nor is it an aggre
    
    
    -- !query 12
   -SELECT a + 1 + 1, COUNT(b) FROM testData GROUP BY a + 1
   +SELECT udf(a + 1 + 1), udf(COUNT(b)) FROM testData GROUP BY a + 1
    -- !query 12 schema
   -struct<((a + 1) + 1):int,count(b):bigint>
   +struct<udf(((a + 1) + 1)):string,udf(count(b)):string>
    -- !query 12 output
    3   2
    4   2
    5   2
   -NULL        1
   +nan 1
    
    
    -- !query 13
   -SELECT SKEWNESS(a), KURTOSIS(a), MIN(a), MAX(a), AVG(a), VARIANCE(a), 
STDDEV(a), SUM(a), COUNT(a)
   +SELECT SKEWNESS(udf(a)), udf(KURTOSIS(a)), udf(MIN(a)), MAX(udf(a)), 
udf(AVG(udf(a))), udf(VARIANCE(a)), STDDEV(udf(a)), udf(SUM(a)), udf(COUNT(a))
    FROM testData
    -- !query 13 schema
   -struct<skewness(CAST(a AS DOUBLE)):double,kurtosis(CAST(a AS 
DOUBLE)):double,min(a):int,max(a):int,avg(a):double,var_samp(CAST(a AS 
DOUBLE)):double,stddev_samp(CAST(a AS 
DOUBLE)):double,sum(a):bigint,count(a):bigint>
   +struct<skewness(CAST(udf(a) AS DOUBLE)):double,udf(kurtosis(cast(a as 
double))):string,udf(min(a)):string,max(udf(a)):string,udf(avg(cast(udf(a) as 
double))):string,udf(var_samp(cast(a as 
double))):string,stddev_samp(CAST(udf(a) AS DOUBLE)):double,udf(sum(cast(a as 
bigint))):string,udf(count(a)):string>
    -- !query 13 output
   --0.2723801058145729 -1.5069204152249134     1       3       
2.142857142857143       0.8095238095238094      0.8997354108424372      15      
7
   +-0.2723801058145729 -1.5069204152249134     1       nan     
2.142857142857143       0.8095238095238094      0.8997354108424372      15      
7
    
    
    -- !query 14
   -SELECT COUNT(DISTINCT b), COUNT(DISTINCT b, c) FROM (SELECT 1 AS a, 2 AS b, 
3 AS c) GROUP BY a
   +SELECT COUNT(DISTINCT udf(b)), udf(COUNT(DISTINCT b, c)) FROM (SELECT 1 AS 
a, 2 AS b, 3 AS c) GROUP BY a
    -- !query 14 schema
   -struct<count(DISTINCT b):bigint,count(DISTINCT b, c):bigint>
   +struct<count(DISTINCT udf(b)):bigint,udf(count(distinct b, c)):string>
    -- !query 14 output
    1   1
    
    
    -- !query 15
   -SELECT a AS k, COUNT(b) FROM testData GROUP BY k
   +SELECT a AS k, COUNT(udf(b)) FROM testData GROUP BY k
    -- !query 15 schema
   -struct<k:int,count(b):bigint>
   +struct<k:int,count(udf(b)):bigint>
    -- !query 15 output
    1   2
    2   2
   -3   2
   -NULL        1
   +3   3
   +NULL        2
    
    
    -- !query 16
   -SELECT a AS k, COUNT(b) FROM testData GROUP BY k HAVING k > 1
   +SELECT a AS k, udf(COUNT(b)) FROM testData GROUP BY k HAVING k > 1
    -- !query 16 schema
   -struct<k:int,count(b):bigint>
   +struct<k:int,udf(count(b)):string>
    -- !query 16 output
    2   2
    3   2
    
    
    -- !query 17
   -SELECT COUNT(b) AS k FROM testData GROUP BY k
   +SELECT udf(COUNT(b)) AS k FROM testData GROUP BY k
    -- !query 17 schema
    struct<>
    -- !query 17 output
    org.apache.spark.sql.AnalysisException
   -aggregate functions are not allowed in GROUP BY, but found 
count(testdata.`b`);
   +aggregate functions are not allowed in GROUP BY, but found udf(count(b));
    
    
    -- !query 18
   @@ -180,7 +180,7 @@ struct<>
    
    
    -- !query 19
   -SELECT k AS a, COUNT(v) FROM testDataHasSameNameWithAlias GROUP BY a
   +SELECT k AS a, udf(COUNT(udf(v))) FROM testDataHasSameNameWithAlias GROUP 
BY a
    -- !query 19 schema
    struct<>
    -- !query 19 output
   @@ -197,32 +197,32 @@ spark.sql.groupByAliases       false
    
    
    -- !query 21
   -SELECT a AS k, COUNT(b) FROM testData GROUP BY k
   +SELECT a AS k, udf(COUNT(udf(b))) FROM testData GROUP BY k
    -- !query 21 schema
    struct<>
    -- !query 21 output
    org.apache.spark.sql.AnalysisException
   -cannot resolve '`k`' given input columns: [testdata.a, testdata.b]; line 1 
pos 47
   +cannot resolve '`k`' given input columns: [testdata.a, testdata.b]; line 1 
pos 57
    
    
    -- !query 22
   -SELECT a, COUNT(1) FROM testData WHERE false GROUP BY a
   +SELECT a, COUNT(udf(1)) FROM testData WHERE false GROUP BY a
    -- !query 22 schema
   -struct<a:int,count(1):bigint>
   +struct<a:int,count(udf(1)):bigint>
    -- !query 22 output
    
    
    
    -- !query 23
   -SELECT COUNT(1) FROM testData WHERE false
   +SELECT udf(COUNT(1)) FROM testData WHERE false
    -- !query 23 schema
   -struct<count(1):bigint>
   +struct<udf(count(1)):string>
    -- !query 23 output
    0
    
    
    -- !query 24
   -SELECT 1 FROM (SELECT COUNT(1) FROM testData WHERE false) t
   +SELECT 1 FROM (SELECT udf(COUNT(1)) FROM testData WHERE false) t
    -- !query 24 schema
    struct<1:int>
    -- !query 24 output
   @@ -232,7 +232,7 @@ struct<1:int>
    -- !query 25
    SELECT 1 from (
      SELECT 1 AS z,
   -  MIN(a.x)
   +  udf(MIN(a.x))
      FROM (select 1 as x) a
      WHERE false
    ) b
   @@ -244,32 +244,32 @@ struct<1:int>
    
    
    -- !query 26
   -SELECT corr(DISTINCT x, y), corr(DISTINCT y, x), count(*)
   +SELECT corr(DISTINCT x, y), udf(corr(DISTINCT y, x)), count(*)
      FROM (VALUES (1, 1), (2, 2), (2, 2)) t(x, y)
    -- !query 26 schema
   -struct<corr(DISTINCT CAST(x AS DOUBLE), CAST(y AS 
DOUBLE)):double,corr(DISTINCT CAST(y AS DOUBLE), CAST(x AS 
DOUBLE)):double,count(1):bigint>
   +struct<corr(DISTINCT CAST(x AS DOUBLE), CAST(y AS 
DOUBLE)):double,udf(corr(distinct cast(y as double), cast(x as 
double))):string,count(1):bigint>
    -- !query 26 output
    1.0 1.0     3
    
    
    -- !query 27
   -SELECT 1 FROM range(10) HAVING true
   +SELECT udf(1) FROM range(10) HAVING true
    -- !query 27 schema
   -struct<1:int>
   +struct<udf(1):string>
    -- !query 27 output
    1
    
    
    -- !query 28
   -SELECT 1 FROM range(10) HAVING MAX(id) > 0
   +SELECT udf(udf(1)) FROM range(10) HAVING MAX(id) > 0
    -- !query 28 schema
   -struct<1:int>
   +struct<udf(udf(1)):string>
    -- !query 28 output
    1
    
    
    -- !query 29
   -SELECT id FROM range(10) HAVING id > 0
   +SELECT udf(id) FROM range(10) HAVING id > 0
    -- !query 29 schema
    struct<>
    -- !query 29 output
   @@ -291,39 +291,39 @@ struct<>
    
    
    -- !query 31
   -SELECT every(v), some(v), any(v) FROM test_agg WHERE 1 = 0
   +SELECT udf(every(v)), udf(some(v)), any(v) FROM test_agg WHERE 1 = 0
    -- !query 31 schema
   -struct<every(v):boolean,some(v):boolean,any(v):boolean>
   +struct<udf(every(v)):string,udf(some(v)):string,any(v):boolean>
    -- !query 31 output
   -NULL        NULL    NULL
   +None        None    NULL
    
    
    -- !query 32
   -SELECT every(v), some(v), any(v) FROM test_agg WHERE k = 4
   +SELECT udf(every(v)), some(v), any(v) FROM test_agg WHERE k = 4
    -- !query 32 schema
   -struct<every(v):boolean,some(v):boolean,any(v):boolean>
   +struct<udf(every(v)):string,some(v):boolean,any(v):boolean>
    -- !query 32 output
   -NULL        NULL    NULL
   +None        NULL    NULL
    
    
    -- !query 33
   -SELECT every(v), some(v), any(v) FROM test_agg WHERE k = 5
   +SELECT every(v), udf(some(v)), any(v) FROM test_agg WHERE k = 5
    -- !query 33 schema
   -struct<every(v):boolean,some(v):boolean,any(v):boolean>
   +struct<every(v):boolean,udf(some(v)):string,any(v):boolean>
    -- !query 33 output
   -false       true    true
   +false       True    true
    
    
    -- !query 34
   -SELECT k, every(v), some(v), any(v) FROM test_agg GROUP BY k
   +SELECT k, every(v), udf(some(v)), any(v) FROM test_agg GROUP BY k
    -- !query 34 schema
   -struct<k:int,every(v):boolean,some(v):boolean,any(v):boolean>
   +struct<k:int,every(v):boolean,udf(some(v)):string,any(v):boolean>
    -- !query 34 output
   -1   false   true    true
   -2   true    true    true
   -3   false   false   false
   -4   NULL    NULL    NULL
   -5   false   true    true
   +1   false   True    true
   +2   true    True    true
   +3   false   False   false
   +4   NULL    None    NULL
   +5   false   True    true
    
    
    -- !query 35
   @@ -346,7 +346,7 @@ struct<k:int,every(v):boolean>
    
    -- !query 37
    SELECT k,
   -       Every(v) AS every
   +       udf(Every(v)) AS every
    FROM   test_agg
    WHERE  k = 2
           AND v IN (SELECT Any(v)
   @@ -354,13 +354,13 @@ WHERE  k = 2
                     WHERE  k = 1)
    GROUP  BY k
    -- !query 37 schema
   -struct<k:int,every:boolean>
   +struct<k:int,every:string>
    -- !query 37 output
   -2   true
   +2   True
    
    
    -- !query 38
   -SELECT k,
   +SELECT udf(udf(k)),
           Every(v) AS every
    FROM   test_agg
    WHERE  k = 2
   @@ -369,45 +369,45 @@ WHERE  k = 2
                     WHERE  k = 1)
    GROUP  BY k
    -- !query 38 schema
   -struct<k:int,every:boolean>
   +struct<udf(udf(k)):string,every:boolean>
    -- !query 38 output
    
    
    
    -- !query 39
   -SELECT every(1)
   +SELECT every(udf(1))
    -- !query 39 schema
    struct<>
    -- !query 39 output
    org.apache.spark.sql.AnalysisException
   -cannot resolve 'every(1)' due to data type mismatch: Input to function 
'every' should have been boolean, but it's [int].; line 1 pos 7
   +cannot resolve 'every(udf(1))' due to data type mismatch: Input to function 
'every' should have been boolean, but it's [string].; line 1 pos 7
    
    
    -- !query 40
   -SELECT some(1S)
   +SELECT some(udf(1S))
    -- !query 40 schema
    struct<>
    -- !query 40 output
    org.apache.spark.sql.AnalysisException
   -cannot resolve 'some(1S)' due to data type mismatch: Input to function 
'some' should have been boolean, but it's [smallint].; line 1 pos 7
   +cannot resolve 'some(udf(1))' due to data type mismatch: Input to function 
'some' should have been boolean, but it's [string].; line 1 pos 7
    
    
    -- !query 41
   -SELECT any(1L)
   +SELECT any(udf(1L))
    -- !query 41 schema
    struct<>
    -- !query 41 output
    org.apache.spark.sql.AnalysisException
   -cannot resolve 'any(1L)' due to data type mismatch: Input to function 'any' 
should have been boolean, but it's [bigint].; line 1 pos 7
   +cannot resolve 'any(udf(1))' due to data type mismatch: Input to function 
'any' should have been boolean, but it's [string].; line 1 pos 7
    
    
    -- !query 42
   -SELECT every("true")
   +SELECT udf(every("true"))
    -- !query 42 schema
    struct<>
    -- !query 42 output
    org.apache.spark.sql.AnalysisException
   -cannot resolve 'every('true')' due to data type mismatch: Input to function 
'every' should have been boolean, but it's [string].; line 1 pos 7
   +cannot resolve 'every('true')' due to data type mismatch: Input to function 
'every' should have been boolean, but it's [string].; line 1 pos 11
    
    
    -- !query 43
   @@ -428,26 +428,26 @@ struct<k:int,v:boolean,every(v) OVER (PARTITION BY k 
ORDER BY v ASC NULLS FIRST
    
    
    -- !query 44
   -SELECT k, v, some(v) OVER (PARTITION BY k ORDER BY v) FROM test_agg
   +SELECT k, udf(udf(v)), some(v) OVER (PARTITION BY k ORDER BY v) FROM 
test_agg
    -- !query 44 schema
   -struct<k:int,v:boolean,some(v) OVER (PARTITION BY k ORDER BY v ASC NULLS 
FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW):boolean>
   +struct<k:int,udf(udf(v)):string,some(v) OVER (PARTITION BY k ORDER BY v ASC 
NULLS FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW):boolean>
    -- !query 44 output
   -1   false   false
   -1   true    true
   -2   true    true
   -3   NULL    NULL
   -3   false   false
   -4   NULL    NULL
   -4   NULL    NULL
   -5   NULL    NULL
   -5   false   false
   -5   true    true
   +1   False   false
   +1   True    true
   +2   True    true
   +3   False   false
   +3   None    NULL
   +4   None    NULL
   +4   None    NULL
   +5   False   false
   +5   None    NULL
   +5   True    true
    
    
    -- !query 45
   -SELECT k, v, any(v) OVER (PARTITION BY k ORDER BY v) FROM test_agg
   +SELECT udf(udf(k)), v, any(v) OVER (PARTITION BY k ORDER BY v) FROM test_agg
    -- !query 45 schema
   -struct<k:int,v:boolean,any(v) OVER (PARTITION BY k ORDER BY v ASC NULLS 
FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW):boolean>
   +struct<udf(udf(k)):string,v:boolean,any(v) OVER (PARTITION BY k ORDER BY v 
ASC NULLS FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW):boolean>
    -- !query 45 output
    1   false   false
    1   true    true
   @@ -462,33 +462,33 @@ struct<k:int,v:boolean,any(v) OVER (PARTITION BY k 
ORDER BY v ASC NULLS FIRST RA
    
    
    -- !query 46
   -SELECT count(*) FROM test_agg HAVING count(*) > 1L
   +SELECT udf(count(*)) FROM test_agg HAVING count(*) > 1L
    -- !query 46 schema
   -struct<count(1):bigint>
   +struct<udf(count(1)):string>
    -- !query 46 output
    10
    
    
    -- !query 47
   -SELECT k, max(v) FROM test_agg GROUP BY k HAVING max(v) = true
   +SELECT k, udf(max(udf(v))) FROM test_agg GROUP BY k HAVING max(v) = true
    -- !query 47 schema
   -struct<k:int,max(v):boolean>
   +struct<k:int,udf(max(udf(v))):string>
    -- !query 47 output
   -1   true
   -2   true
   -5   true
   +1   True
   +2   True
   +5   True
    
    
    -- !query 48
   -SELECT * FROM (SELECT COUNT(*) AS cnt FROM test_agg) WHERE cnt > 1L
   +SELECT * FROM (SELECT udf(COUNT(*)) AS cnt FROM test_agg) WHERE cnt > 1L
    -- !query 48 schema
   -struct<cnt:bigint>
   +struct<cnt:string>
    -- !query 48 output
    10
    
    
    -- !query 49
   -SELECT count(*) FROM test_agg WHERE count(*) > 1L
   +SELECT udf(count(*)) FROM test_agg WHERE count(*) > 1L
    -- !query 49 schema
    struct<>
    -- !query 49 output
   @@ -500,7 +500,7 @@ Invalid expressions: [count(1)];
    
    
    -- !query 50
   -SELECT count(*) FROM test_agg WHERE count(*) + 1L > 1L
   +SELECT udf(count(*)) FROM test_agg WHERE count(*) + 1L > 1L
    -- !query 50 schema
    struct<>
    -- !query 50 output
   @@ -512,7 +512,7 @@ Invalid expressions: [count(1)];
    
    
    -- !query 51
   -SELECT count(*) FROM test_agg WHERE k = 1 or k = 2 or count(*) + 1L > 1L or 
max(k) > 1
   +SELECT udf(count(*)) FROM test_agg WHERE k = 1 or k = 2 or count(*) + 1L > 
1L or max(k) > 1
    -- !query 51 schema
    struct<>
    -- !query 51 output
   
   ```
   
   </p>
   </details>
   ## How was this patch tested?
   
   Tested as guided in 
[SPARK-27921](https://issues.apache.org/jira/browse/SPARK-27921).
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to