Skip to content

Commit

Permalink
add more snowflake tests (#1215)
Browse files Browse the repository at this point in the history
add more tests
  • Loading branch information
pgrivachev authored Sep 25, 2023
1 parent 52ef08b commit 5cb046e
Show file tree
Hide file tree
Showing 16 changed files with 201 additions and 69 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
SELECT
CAST('1234567' AS VARIANT),
CAST(1 AS VARIANT),
CAST(1 AS VARIANT) + 1,
CAST(1 AS VARIANT) - 1,
CAST(1 AS VARIANT) * 1,
CAST(1 AS VARIANT) / 1,
CAST(1 AS VARIANT) % 1,
-- TODO: fix casting array to variant
-- CAST(STRTOK_TO_ARRAY('1 2') AS VARIANT)[0],
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
select
count(*),
count((select 1))
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
WITH product_data AS (
SELECT 'Red' AS color
UNION ALL
SELECT 'Red'
UNION ALL
SELECT 'Green'
UNION ALL
SELECT 'Blue'
UNION ALL
SELECT 'Blue'
UNION ALL
SELECT 'Yellow'
UNION ALL
SELECT 'Red'
UNION ALL
SELECT 'Blue'
UNION ALL
SELECT 'Green'
UNION ALL
SELECT 'Yellow'
WITH TestData AS (
SELECT 'A' AS Category, 10 AS Value UNION ALL
SELECT 'A' AS Category, 15 AS Value UNION ALL
SELECT 'A' AS Category, 20 AS Value UNION ALL
SELECT 'B' AS Category, 5 AS Value UNION ALL
SELECT 'B' AS Category, 25 AS Value UNION ALL
SELECT 'C' AS Category, 30 AS Value
),

ApproxTopKData AS (
SELECT
Category,
Value,
APPROX_TOP_K(Value, 2) AS TopK_Values
FROM TestData
GROUP BY Category, Value
)
-- Query using APPROX_TOP_K function
SELECT color, frequency
FROM APPROX_TOP_K(color, 3) OVER ()
FROM product_data;

SELECT
Category,
Value,
TopK_Values,
ROW_NUMBER() OVER(PARTITION BY Category ORDER BY TopK_Values DESC) AS RankWithinCategory
FROM ApproxTopKData
WHERE ARRAY_CONTAINS(Value, TopK_Values)
ORDER BY Category, RankWithinCategory;
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
WITH TestData AS (
SELECT 'A' AS Category, 10 AS Value UNION ALL
SELECT 'A' AS Category, 15 AS Value UNION ALL
SELECT 'A' AS Category, 20 AS Value UNION ALL
SELECT 'B' AS Category, 5 AS Value UNION ALL
SELECT 'B' AS Category, 25 AS Value UNION ALL
SELECT 'C' AS Category, 30 AS Value
),

ApproxTopKData AS (
SELECT
Category,
Value,
APPROX_TOP_K(Value, 2) AS TopK_Values
FROM TestData
GROUP BY Category, Value
)

SELECT
Category,
Value,
TopK_Values,
ROW_NUMBER() OVER(PARTITION BY Category ORDER BY TopK_Values DESC) AS RankWithinCategory
FROM ApproxTopKData
WHERE ARRAY_CONTAINS(Value, TopK_Values)
ORDER BY Category, RankWithinCategory;
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ WITH sample_data AS (
SELECT 'E' AS col1, 10 AS col2
)
SELECT
APPROX_TOP_K_ACCUMULATE(col2, 5) as top_k_accum
APPROX_TOP_K_ACCUMULATE(col2, 5) as top_k_accum,
APPROX_TOP_K_ACCUMULATE(col2, 5):counters,
APPROX_TOP_K_ACCUMULATE(col2, 5):"counters"
FROM
sample_data;
Original file line number Diff line number Diff line change
@@ -1,13 +1,24 @@
WITH sales_data AS (
SELECT 'A' AS product, '2022-01' AS month, 10 AS revenue
UNION ALL
SELECT 'A', '2022-02', 15
UNION ALL
SELECT 'B', '2022-01', 20
UNION ALL
SELECT 'B', '2022-02', 25
WITH TestData AS (
SELECT 'A' AS Col1, 'X' AS Col2, 10 AS Col3, TRUE AS IsTrue UNION ALL
SELECT 'A', 'Y', 20, FALSE UNION ALL
SELECT 'A', 'Y', 30, TRUE UNION ALL
SELECT 'B', 'X', 40, FALSE UNION ALL
SELECT 'B', 'Z', 50, TRUE UNION ALL
SELECT 'B', 'Z', 60, FALSE
)
SELECT product, month, SUM(revenue) AS total_revenue, GROUPING(product) AS product_grouping, GROUPING(month) AS month_grouping
FROM sales_data
GROUP BY GROUPING SETS ((product, month), (product), (month))
ORDER BY product, month;

SELECT
Col1,
Col2,
Col3,
IsTrue,
GROUPING(Col1) AS GroupingID_Col1,
GROUPING(Col2) AS GroupingID_Col2,
GROUPING(Col3) AS GroupingID_Col3,
GROUPING(IsTrue) AS GroupingID_IsTrue,
GROUPING(Col1, Col2) AS GroupingID_Col1_Col2,
GROUPING(Col1, Col2, Col3, IsTrue) AS GroupingID_Col1_Col2_Col3_IsTrue
FROM
TestData
GROUP BY
ROLLUP (Col1, Col2, Col3, IsTrue);
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
WITH TestData AS (
SELECT 'A' AS Col1, 'X' AS Col2, 10 AS Col3, TRUE AS IsTrue UNION ALL
SELECT 'A', 'Y', 20, FALSE UNION ALL
SELECT 'A', 'Y', 30, TRUE UNION ALL
SELECT 'B', 'X', 40, FALSE UNION ALL
SELECT 'B', 'Z', 50, TRUE UNION ALL
SELECT 'B', 'Z', 60, FALSE
)

SELECT
Col1,
Col2,
Col3,
IsTrue,
GROUPING_ID(Col1) AS GroupingID_Col1,
GROUPING_ID(Col2) AS GroupingID_Col2,
GROUPING_ID(Col3) AS GroupingID_Col3,
GROUPING_ID(IsTrue) AS GroupingID_IsTrue,
GROUPING_ID(Col1, Col2) AS GroupingID_Col1_Col2,
GROUPING_ID(Col1, Col2, Col3, IsTrue) AS GroupingID_Col1_Col2_Col3_IsTrue
FROM
TestData
GROUP BY
ROLLUP (Col1, Col2, Col3, IsTrue);
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
WITH sample_data AS (
SELECT 1 AS id, 'A' AS grade
UNION ALL
SELECT 2, 'B'
UNION ALL
SELECT 3, 'A'
UNION ALL
SELECT 4, 'C'
UNION ALL
SELECT 5, 'B'
WITH test_data AS (
SELECT 1 AS id, 'A' AS value UNION ALL
SELECT 2, 'B' UNION ALL
SELECT 3, 'C' UNION ALL
SELECT 4, 'D'
)

SELECT id,
grade,
DECODE(grade, 'A', 'Excellent', 'B', 'Good', 'C', 'Average', 'Unknown') AS performance
FROM sample_data;
SELECT
id,
value,
DECODE(value, 'A', 'First', 'B', 'Second', 'Unknown') AS decode_simple,
DECODE(value, 'A', 'First', 'B', 'Second', 'C', 'Third', 'Unknown') AS decode_extended,
DECODE(value, 'A', 'First', 'B', 'Second', 'C', 'Third', 'D', 'Fourth', 'Unknown') AS decode_full
FROM test_data;
Original file line number Diff line number Diff line change
@@ -1 +1,18 @@
select iff(True, 'true', 'false');
WITH test_data AS (
SELECT 1 AS id, 'A' AS value, 10 AS num UNION ALL
SELECT 2, 'B', 20 UNION ALL
SELECT 3, 'C', 30 UNION ALL
SELECT 4, 'D', 40
)

SELECT
id,
value,
num,
IFF(value = 'A', 'First', 'Not First') AS iff_simple,
IFF(num > 20, 'Greater than 20', 'Less than 20') AS iff_extended,
IFF(false, true, false),
IFF(true, true, false),
IFF(false, true, 'false'),
IFF(true, 'true', false)
FROM test_data;
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
WITH sample_data AS (
SELECT 1 AS id, NULL AS score
UNION ALL
SELECT 2, 80
UNION ALL
SELECT 3, 90
UNION ALL
SELECT 4, NULL
UNION ALL
SELECT 5, 75
WITH test_data AS (
SELECT NULL AS col1, 'Hello' AS col2, 100 AS col3
UNION ALL
SELECT 'World', NULL, 200
UNION ALL
SELECT NULL, NULL, NULL
)

SELECT id,
score,
NVL(score, 0) AS score_with_default
FROM sample_data;
SELECT
col1,
col2,
col3,
NVL(col1, 'Default') AS nvl_col1_string,
NVL(col2, 'Default') AS nvl_col2_string,
NVL(col3, 0) AS nvl_col3_int,
NVL(null, 1),
NVL(1, 2),
NVL(col3, 2),
NVL(col3, col3)
FROM test_data;
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ WITH sample_data AS (

SELECT id,
score,
NVL2(score, 'Has Score', 'No Score') AS score_status
NVL2(score, 1, 'No Score') AS score_status
FROM sample_data;
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ WITH test_data AS (
ARRAY_CONSTRUCT(4, 5, 6) AS array2,
NULL AS array3,
ARRAY_CONSTRUCT(NULL) AS array4,
ARRAY_CONSTRUCT(7, 8, 9) AS array5
ARRAY_CONSTRUCT(7, 8, 9) AS array5,
ARRAY_CONSTRUCT('7', '8', '9') AS array6
)

SELECT
Expand All @@ -23,5 +24,7 @@ SELECT
ARRAY_CONTAINS(NULL, array4) AS contains_null_in_array4,
ARRAY_CONTAINS(1, array5) AS contains_1_in_array5,
ARRAY_CONTAINS(4, array5) AS contains_4_in_array5,
ARRAY_CONTAINS(NULL, array5) AS contains_null_in_array5
ARRAY_CONTAINS(NULL, array5) AS contains_null_in_array5,
ARRAY_CONTAINS('4', array6) AS contains_4_in_array6,

FROM test_data;
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
WITH cte1 AS (SELECT 1 AS a),
cte2 AS (SELECT 1 AS a),
cte3 AS (SELECT 1 AS a)

SELECT *
FROM cte1 c1
JOIN cte2 c2
JOIN cte3 c3
ON c1.a = c3.a
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
WITH cte1 AS (SELECT 1 AS a),
cte2 AS (SELECT 1 AS a),
cte3 AS (SELECT 1 AS a)

SELECT *
FROM cte1 c1
JOIN cte2 c2
JOIN cte3 c3
ON c2.a = c3.a
ON c1.a = c3.a
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
WITH cte1 AS (SELECT 1 AS a),
cte2 AS (SELECT 1 AS a),
cte3 AS (SELECT 1 AS a)

SELECT *
FROM cte1 c1, cte2 c2
JOIN cte3 c3
ON c2.a = c3.a
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
WITH cte1 AS (SELECT 1 AS a),
cte2 AS (SELECT 1 AS a),
cte3 AS (SELECT 1 AS a),
cte4 AS (SELECT 1 AS a)

SELECT *
FROM cte1 c1, cte2 c2
JOIN cte3 c3
JOIN cte4 c4
ON c3.a = c4.a
ON c2.a = c4.a

0 comments on commit 5cb046e

Please sign in to comment.