SnowConvert AI - Hive - SELECT¶
Applies to
Hive SQL
Spark SQL
Databricks SQL
Description¶
Spark prend en charge une instruction SELECT et se conforme à la norme ANSI SQL. Les requêtes sont utilisées pour récupérer les jeux de résultats à partir d’une ou plusieurs tables. (Référence de langage Spark SQL SELECT)
Avertissement
Cette grammaire est partiellement prise en charge dans Snowflake. Traduction en attente pour ces éléments CREATE VIEW :
[ 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
Grammar 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`
Modèles d’échantillons de sources¶
GROUP BY¶
La syntaxe WITH { CUBE | ROLLUP } est transformée en son équivalent CUBE(expr1, ...) ou ROLLUP(expr1, ...).
Code d’entrée :¶
-- 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;
Code de sortie :¶
-- 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);
Indications¶
Snowflake effectue une optimisation automatique des JOINs et du partitionnement, ce qui signifie que les indications ne sont pas nécessaires. Elles sont conservées en tant que commentaires dans le code de sortie.
Code d’entrée :¶
SELECT
/*+ REBALANCE */ /*+ COALESCE(2) */
*
FROM my_table;
Code de sortie :¶
SELECT
/*+ REBALANCE */ /*+ COALESCE(2) */
*
FROM
my_table;
CTE¶
Le mot-clé AS est facultatif dans Spark/Databricks, mais il est obligatoire dans Snowflake. Il est donc ajouté.
Code d’entrée :¶
WITH my_cte (
SELECT id, name FROM my_table
)
SELECT *
FROM my_cte
WHERE id = 1;
Code de sortie :¶
WITH my_cte AS (
SELECT id, name FROM
my_table
)
SELECT *
FROM
my_cte
WHERE id = 1;
LIMIT¶
LIMIT ALL est supprimé, car il n’est pas nécessaire dans Snowflake. LIMIT avec une valeur littérale est conservé tel quel.
Code d’entrée :¶
SELECT * FROM my_table LIMIT ALL;
SELECT * FROM my_table LIMIT 5;
Code de sortie :¶
SELECT * FROM
my_table;
SELECT * FROM
my_table
LIMIT 5;
ORDER BY¶
Note
Cette clause est entièrement prise en charge dans Snowflake.
WHERE¶
Note
Cette clause est entièrement prise en charge dans Snowflake.
HAVING¶
Note
Cette clause est entièrement prise en charge dans Snowflake.
FROM table_relation¶
Note
Cette clause est entièrement prise en charge dans Snowflake.
FROM inline_table¶
Note
Cette clause est entièrement prise en charge dans Snowflake.
UNION [ALL | DISTINCT]¶
Note
Cette clause est entièrement prise en charge dans Snowflake.
INTERSECT (pas de mots-clés)¶
Note
Cette clause est entièrement prise en charge dans Snowflake.
EXCEPT (pas de mots-clés)¶
Note
Cette clause est entièrement prise en charge dans Snowflake.