371 lines
5.8 KiB
SQL
371 lines
5.8 KiB
SQL
# title: lateral
|
|
# execute: false
|
|
SELECT a, m FROM z LATERAL VIEW EXPLODE([1, 2]) q AS m;
|
|
SELECT
|
|
"z"."a" AS "a",
|
|
"q"."m" AS "m"
|
|
FROM "z" AS "z"
|
|
LATERAL VIEW
|
|
EXPLODE(ARRAY(1, 2)) q AS "m";
|
|
|
|
# title: unnest
|
|
SELECT x FROM UNNEST([1, 2]) AS q(x, y);
|
|
SELECT
|
|
"q"."x" AS "x"
|
|
FROM UNNEST(ARRAY(1, 2)) AS "q"("x", "y");
|
|
|
|
# title: Union in CTE
|
|
WITH cte AS (
|
|
(
|
|
SELECT
|
|
a
|
|
FROM
|
|
x
|
|
)
|
|
UNION ALL
|
|
(
|
|
SELECT
|
|
b AS a
|
|
FROM
|
|
y
|
|
)
|
|
)
|
|
SELECT
|
|
*
|
|
FROM
|
|
cte;
|
|
WITH "cte" AS (
|
|
(
|
|
SELECT
|
|
"x"."a" AS "a"
|
|
FROM "x" AS "x"
|
|
)
|
|
UNION ALL
|
|
(
|
|
SELECT
|
|
"y"."b" AS "a"
|
|
FROM "y" AS "y"
|
|
)
|
|
)
|
|
SELECT
|
|
"cte"."a" AS "a"
|
|
FROM "cte";
|
|
|
|
# title: Chained CTEs
|
|
WITH cte1 AS (
|
|
SELECT a
|
|
FROM x
|
|
), cte2 AS (
|
|
SELECT a + 1 AS a
|
|
FROM cte1
|
|
)
|
|
SELECT
|
|
a
|
|
FROM cte1
|
|
UNION ALL
|
|
SELECT
|
|
a
|
|
FROM cte2;
|
|
WITH "cte1" AS (
|
|
SELECT
|
|
"x"."a" AS "a"
|
|
FROM "x" AS "x"
|
|
)
|
|
SELECT
|
|
"cte1"."a" AS "a"
|
|
FROM "cte1"
|
|
UNION ALL
|
|
SELECT
|
|
"cte1"."a" + 1 AS "a"
|
|
FROM "cte1";
|
|
|
|
# title: Correlated subquery
|
|
SELECT a, SUM(b) AS sum_b
|
|
FROM (
|
|
SELECT x.a, y.b
|
|
FROM x, y
|
|
WHERE (SELECT max(b) FROM y WHERE x.b = y.b) >= 0 AND x.b = y.b
|
|
) d
|
|
WHERE (TRUE AND TRUE OR 'a' = 'b') AND a > 1
|
|
GROUP BY a;
|
|
WITH "_u_0" AS (
|
|
SELECT
|
|
MAX("y"."b") AS "_col_0",
|
|
"y"."b" AS "_u_1"
|
|
FROM "y" AS "y"
|
|
GROUP BY
|
|
"y"."b"
|
|
)
|
|
SELECT
|
|
"x"."a" AS "a",
|
|
SUM("y"."b") AS "sum_b"
|
|
FROM "x" AS "x"
|
|
LEFT JOIN "_u_0" AS "_u_0"
|
|
ON "x"."b" = "_u_0"."_u_1"
|
|
JOIN "y" AS "y"
|
|
ON "x"."b" = "y"."b"
|
|
WHERE
|
|
"_u_0"."_col_0" >= 0 AND "x"."a" > 1
|
|
GROUP BY
|
|
"x"."a";
|
|
|
|
# title: Root subquery
|
|
(SELECT a FROM x) LIMIT 1;
|
|
(
|
|
SELECT
|
|
"x"."a" AS "a"
|
|
FROM "x" AS "x"
|
|
)
|
|
LIMIT 1;
|
|
|
|
# title: Root subquery is union
|
|
(SELECT b FROM x UNION SELECT b FROM y ORDER BY b) LIMIT 1;
|
|
(
|
|
SELECT
|
|
"x"."b" AS "b"
|
|
FROM "x" AS "x"
|
|
UNION
|
|
SELECT
|
|
"y"."b" AS "b"
|
|
FROM "y" AS "y"
|
|
ORDER BY
|
|
"b"
|
|
)
|
|
LIMIT 1;
|
|
|
|
# title: broadcast
|
|
# dialect: spark
|
|
SELECT /*+ BROADCAST(y) */ x.b FROM x JOIN y ON x.b = y.b;
|
|
SELECT /*+ BROADCAST(`y`) */
|
|
`x`.`b` AS `b`
|
|
FROM `x` AS `x`
|
|
JOIN `y` AS `y`
|
|
ON `x`.`b` = `y`.`b`;
|
|
|
|
# title: aggregate
|
|
# execute: false
|
|
SELECT AGGREGATE(ARRAY(x.a, x.b), 0, (x, acc) -> x + acc + a) AS sum_agg FROM x;
|
|
SELECT
|
|
AGGREGATE(ARRAY("x"."a", "x"."b"), 0, ("x", "acc") -> "x" + "acc" + "x"."a") AS "sum_agg"
|
|
FROM "x" AS "x";
|
|
|
|
# title: values
|
|
SELECT cola, colb FROM (VALUES (1, 'test'), (2, 'test2')) AS tab(cola, colb);
|
|
SELECT
|
|
"tab"."cola" AS "cola",
|
|
"tab"."colb" AS "colb"
|
|
FROM (VALUES
|
|
(1, 'test'),
|
|
(2, 'test2')) AS "tab"("cola", "colb");
|
|
|
|
# title: spark values
|
|
# dialect: spark
|
|
SELECT cola, colb FROM (VALUES (1, 'test'), (2, 'test2')) AS tab(cola, colb);
|
|
SELECT
|
|
`tab`.`cola` AS `cola`,
|
|
`tab`.`colb` AS `colb`
|
|
FROM VALUES
|
|
(1, 'test'),
|
|
(2, 'test2') AS `tab`(`cola`, `colb`);
|
|
|
|
# title: complex CTE dependencies
|
|
WITH m AS (
|
|
SELECT a, b FROM (VALUES (1, 2)) AS a1(a, b)
|
|
), n AS (
|
|
SELECT a, b FROM m WHERE m.a = 1
|
|
), o AS (
|
|
SELECT a, b FROM m WHERE m.a = 2
|
|
) SELECT
|
|
n.a,
|
|
n.b,
|
|
o.b
|
|
FROM n
|
|
FULL OUTER JOIN o ON n.a = o.a
|
|
CROSS JOIN n AS n2
|
|
WHERE o.b > 0 AND n.a = n2.a;
|
|
WITH "m" AS (
|
|
SELECT
|
|
"a1"."a" AS "a",
|
|
"a1"."b" AS "b"
|
|
FROM (VALUES
|
|
(1, 2)) AS "a1"("a", "b")
|
|
), "n" AS (
|
|
SELECT
|
|
"m"."a" AS "a",
|
|
"m"."b" AS "b"
|
|
FROM "m"
|
|
WHERE
|
|
"m"."a" = 1
|
|
), "o" AS (
|
|
SELECT
|
|
"m"."a" AS "a",
|
|
"m"."b" AS "b"
|
|
FROM "m"
|
|
WHERE
|
|
"m"."a" = 2
|
|
)
|
|
SELECT
|
|
"n"."a" AS "a",
|
|
"n"."b" AS "b",
|
|
"o"."b" AS "b"
|
|
FROM "n"
|
|
FULL JOIN "o"
|
|
ON "n"."a" = "o"."a"
|
|
JOIN "n" AS "n2"
|
|
ON "n"."a" = "n2"."a"
|
|
WHERE
|
|
"o"."b" > 0;
|
|
|
|
# title: Broadcast hint
|
|
# dialect: spark
|
|
WITH m AS (
|
|
SELECT
|
|
x.a,
|
|
x.b
|
|
FROM x
|
|
), n AS (
|
|
SELECT
|
|
y.b,
|
|
y.c
|
|
FROM y
|
|
), joined as (
|
|
SELECT /*+ BROADCAST(n) */
|
|
m.a,
|
|
n.c
|
|
FROM m JOIN n ON m.b = n.b
|
|
)
|
|
SELECT
|
|
joined.a,
|
|
joined.c
|
|
FROM joined;
|
|
SELECT /*+ BROADCAST(`y`) */
|
|
`x`.`a` AS `a`,
|
|
`y`.`c` AS `c`
|
|
FROM `x` AS `x`
|
|
JOIN `y` AS `y`
|
|
ON `x`.`b` = `y`.`b`;
|
|
|
|
# title: Mix Table and Column Hints
|
|
# dialect: spark
|
|
WITH m AS (
|
|
SELECT
|
|
x.a,
|
|
x.b
|
|
FROM x
|
|
), n AS (
|
|
SELECT
|
|
y.b,
|
|
y.c
|
|
FROM y
|
|
), joined as (
|
|
SELECT /*+ BROADCAST(m), MERGE(m, n) */
|
|
m.a,
|
|
n.c
|
|
FROM m JOIN n ON m.b = n.b
|
|
)
|
|
SELECT
|
|
/*+ COALESCE(3) */
|
|
joined.a,
|
|
joined.c
|
|
FROM joined;
|
|
SELECT /*+ COALESCE(3),
|
|
BROADCAST(`x`),
|
|
MERGE(`x`, `y`) */
|
|
`x`.`a` AS `a`,
|
|
`y`.`c` AS `c`
|
|
FROM `x` AS `x`
|
|
JOIN `y` AS `y`
|
|
ON `x`.`b` = `y`.`b`;
|
|
|
|
WITH cte1 AS (
|
|
WITH cte2 AS (
|
|
SELECT a, b FROM x
|
|
)
|
|
SELECT a1
|
|
FROM (
|
|
WITH cte3 AS (SELECT 1)
|
|
SELECT a AS a1, b AS b1 FROM cte2
|
|
)
|
|
)
|
|
SELECT a1 FROM cte1;
|
|
SELECT
|
|
"x"."a" AS "a1"
|
|
FROM "x" AS "x";
|
|
|
|
# title: recursive cte
|
|
WITH RECURSIVE cte1 AS (
|
|
SELECT *
|
|
FROM (
|
|
SELECT 1 AS a, 2 AS b
|
|
) base
|
|
CROSS JOIN (SELECT 3 c) y
|
|
UNION ALL
|
|
SELECT *
|
|
FROM cte1
|
|
WHERE a < 1
|
|
)
|
|
SELECT *
|
|
FROM cte1;
|
|
WITH RECURSIVE "base" AS (
|
|
SELECT
|
|
1 AS "a",
|
|
2 AS "b"
|
|
), "y" AS (
|
|
SELECT
|
|
3 AS "c"
|
|
), "cte1" AS (
|
|
SELECT
|
|
"base"."a" AS "a",
|
|
"base"."b" AS "b",
|
|
"y"."c" AS "c"
|
|
FROM "base" AS "base"
|
|
CROSS JOIN "y" AS "y"
|
|
UNION ALL
|
|
SELECT
|
|
"cte1"."a" AS "a",
|
|
"cte1"."b" AS "b",
|
|
"cte1"."c" AS "c"
|
|
FROM "cte1"
|
|
WHERE
|
|
"cte1"."a" < 1
|
|
)
|
|
SELECT
|
|
"cte1"."a" AS "a",
|
|
"cte1"."b" AS "b",
|
|
"cte1"."c" AS "c"
|
|
FROM "cte1";
|
|
|
|
# title: right join should not push down to from
|
|
SELECT x.a, y.b
|
|
FROM x
|
|
RIGHT JOIN y
|
|
ON x.a = y.b
|
|
WHERE x.b = 1;
|
|
SELECT
|
|
"x"."a" AS "a",
|
|
"y"."b" AS "b"
|
|
FROM "x" AS "x"
|
|
RIGHT JOIN "y" AS "y"
|
|
ON "x"."a" = "y"."b"
|
|
WHERE
|
|
"x"."b" = 1;
|
|
|
|
# title: right join can push down to itself
|
|
SELECT x.a, y.b
|
|
FROM x
|
|
RIGHT JOIN y
|
|
ON x.a = y.b
|
|
WHERE y.b = 1;
|
|
WITH "y_2" AS (
|
|
SELECT
|
|
"y"."b" AS "b"
|
|
FROM "y" AS "y"
|
|
WHERE
|
|
"y"."b" = 1
|
|
)
|
|
SELECT
|
|
"x"."a" AS "a",
|
|
"y"."b" AS "b"
|
|
FROM "x" AS "x"
|
|
RIGHT JOIN "y_2" AS "y"
|
|
ON "x"."a" = "y"."b";
|