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
Copy

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` 
Copy

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;
Copy

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);
Copy

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;
Copy

Code de sortie :

SELECT
/*+ REBALANCE */ /*+ COALESCE(2) */
*
FROM
my_table;
Copy

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;
Copy

Code de sortie :

WITH my_cte AS (
     SELECT id, name FROM
        my_table
  )
SELECT *
FROM
     my_cte
WHERE id = 1;
Copy

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;
Copy

Code de sortie :

SELECT * FROM
my_table;

SELECT * FROM
my_table
LIMIT 5;
Copy

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.