SnowConvert AI – Hive – SELECT¶
Applies to
Hive SQL
Spark SQL
Databricks SQL
Beschreibung¶
Spark unterstützt eine SELECT-Anweisung und entspricht dem ANSI SQL-Standard. Abfragen werden verwendet, um Resultsets aus einer oder mehreren Tabellen abzurufen. (Spark SQL-Sprachreferenz – SELECT)
Warnung
Diese Syntax wird in Snowflake teilweise unterstützt. Übersetzung für diese CREATE VIEW-Elemente ausstehend:
[ SORT BY { expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [ , ... ] } ]
[ CLUSTER BY { expression [ , ... ] } ]
[ DISTRIBUTE BY { expression [, ... ] } ]
[ WINDOW { named_window [ , WINDOW named_window, ... ] } ]
[ PIVOT clause ]
[ UNPIVOT clause ]
[ LATERAL VIEW clause ] [ ... ]
[ regex_column_names ]
[ TRANSFORM (...) ]
[ LIMIT non_literal_expression ]
from_item :=
join_relation
table_value_function
LATERAL(subquery)
file_format.`file_path`
select_statement { INTERSECT | EXCEPT } { ALL | DISTINCT } select_statement
Grammatikalische Syntax¶
[ WITH with_query [ , ... ] ]
select_statement [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select_statement, ... ]
[ ORDER BY { expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [ , ... ] } ]
[ SORT BY { expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [ , ... ] } ]
[ CLUSTER BY { expression [ , ... ] } ]
[ DISTRIBUTE BY { expression [, ... ] } ]
[ WINDOW { named_window [ , WINDOW named_window, ... ] } ]
[ LIMIT { ALL | expression } ]
select_statement :=
SELECT [ hints , ... ] [ ALL | DISTINCT ] { [ [ named_expression | regex_column_names ] [ , ... ] | TRANSFORM (...) ] }
FROM { from_item [ , ... ] }
[ PIVOT clause ]
[ UNPIVOT clause ]
[ LATERAL VIEW clause ] [ ... ]
[ WHERE boolean_expression ]
[ GROUP BY expression [ , ... ] ]
[ HAVING boolean_expression ]
with_query :=
expression_name [ ( column_name [ , ... ] ) ] [ AS ] ( query )
from_item :=
table_relation |
join_relation |
table_value_function |
inline_table |
LATERAL(subquery) |
file_format.`file_path`
Beispielhafte Quellcode-Muster¶
GROUP BY¶
Die Syntax WITH { CUBE | ROLLUP } wird in ihr Äquivalent CUBE(Ausdruck1, ...) oder ROLLUP(Ausdruck1, ...) umgewandelt.
Eingabecode:¶
-- Basic case of GROUP BY
SELECT id, sum(quantity) FROM dealer GROUP BY 1;
-- Grouping by GROUPING SETS
SELECT city, car_model, sum(quantity) AS sum FROM dealer
GROUP BY GROUPING SETS ((city, car_model), (city), (car_model), ());
-- Grouping by ROLLUP
SELECT city, car_model, sum(quantity) AS sum FROM dealer
GROUP BY ROLLUP(city, car_model);
SELECT city, car_model, sum(quantity) AS sum FROM dealer
GROUP BY city, car_model WITH ROLLUP;
-- Grouping by CUBE
SELECT city, car_model, sum(quantity) AS sum FROM dealer
GROUP BY CUBE(city, car_model);
SELECT city, car_model, sum(quantity) AS sum FROM dealer
GROUP BY city, car_model WITH CUBE;
Ausgabecode:¶
-- Basic case of GROUP BY
SELECT id,
SUM(quantity) FROM
dealer
GROUP BY 1;
-- Grouping by GROUPING SETS
SELECT city, car_model,
SUM(quantity) AS sum FROM
dealer
GROUP BY GROUPING SETS ((city, car_model), (city), (car_model), () !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'EmptyGroupingSet' NODE ***/!!!);
-- Grouping by ROLLUP
SELECT city, car_model,
SUM(quantity) AS sum FROM
dealer
GROUP BY
ROLLUP(city, car_model);
SELECT city, car_model,
SUM(quantity) AS sum FROM
dealer
GROUP BY
ROLLUP(city, car_model);
-- Grouping by CUBE
SELECT city, car_model,
SUM(quantity) AS sum FROM
dealer
GROUP BY CUBE(city, car_model) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'CUBE' NODE ***/!!!;
SELECT city, car_model,
SUM(quantity) AS sum FROM
dealer
GROUP BY
CUBE(city, car_model);
Hinweise¶
Snowflake führt eine automatische Optimierung von JOINs und der Partitionierung durch, was bedeutet, dass Hinweise nicht erforderlich sind; sie werden als Kommentare im Ausgabecode beibehalten.
Eingabecode:¶
SELECT
/*+ REBALANCE */ /*+ COALESCE(2) */
*
FROM my_table;
Ausgabecode:¶
SELECT
/*+ REBALANCE */ /*+ COALESCE(2) */
*
FROM
my_table;
CTE¶
Das AS-Schlüsselwort ist in Spark/Databricks optional. In Snowflake ist es jedoch erforderlich, sodass es hinzugefügt wird.
Eingabecode:¶
WITH my_cte (
SELECT id, name FROM my_table
)
SELECT *
FROM my_cte
WHERE id = 1;
Ausgabecode:¶
WITH my_cte AS (
SELECT id, name FROM
my_table
)
SELECT *
FROM
my_cte
WHERE id = 1;
LIMIT¶
LIMIT ALL wird entfernt, da es in Snowflake nicht benötigt wird. LIMIT mit einem Literalwert bleibt erhalten, wie es ist.
Eingabecode:¶
SELECT * FROM my_table LIMIT ALL;
SELECT * FROM my_table LIMIT 5;
Ausgabecode:¶
SELECT * FROM
my_table;
SELECT * FROM
my_table
LIMIT 5;
ORDER BY¶
Bemerkung
Diese Klausel wird von Snowflake vollständig unterstützt.
WHERE¶
Bemerkung
Diese Klausel wird von Snowflake vollständig unterstützt.
HAVING¶
Bemerkung
Diese Klausel wird von Snowflake vollständig unterstützt.
FROM table_relation¶
Bemerkung
Diese Klausel wird von Snowflake vollständig unterstützt.
FROM inline_table¶
Bemerkung
Diese Klausel wird von Snowflake vollständig unterstützt.
UNION [ALL | DISTINCT]¶
Bemerkung
Diese Klausel wird von Snowflake vollständig unterstützt.
INTERSECT (keine Schlüsselwörter)¶
Bemerkung
Diese Klausel wird von Snowflake vollständig unterstützt.
EXCEPT (keine Schlüsselwörter)¶
Bemerkung
Diese Klausel wird von Snowflake vollständig unterstützt.