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
Copy

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

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

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

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

Ausgabecode:

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

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

Ausgabecode:

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

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

Ausgabecode:

SELECT * FROM
my_table;

SELECT * FROM
my_table
LIMIT 5;
Copy

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.