Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
Databricks SQL
Databricks Runtime 16.2 a vyšší
Zpracuje výsledek předchozího dotazu pomocí zřetězených operací.
Syntaxe
{ SELECT clause [ GROUP BY grouping_expr [ AS column_alias ] [, ...] ] |
EXTEND { expression [ [ AS ] column_alias ] } [ , ...] |
SET { column_name = expression } [, ...] |
DROP column_name [, ...] |
AS table_alias |
WHERE clause |
{ LIMIT clause |
OFFSET clause |
LIMIT clause OFFSET clause } |
aggregation |
JOIN clause |
ORDER BY clause |
set_operator |
TABLESAMPLE clause
PIVOT clause
UNPIVOT clause }
aggregation
AGGREGATE aggregate_expr [ [ AS ] column_alias ] [, ...]
[ GROUP BY grouping_expr [AS column_alias ] ]
Parametry
-
Shromažďuje sloupce, které se mají vrátit z dotazu, včetně provádění výrazů a odstranění duplicit.
V Databricks Runtime 18.0 nebo novějším může seznam sloupců obsahovat agregační funkce. Volitelná
GROUP BYklauzule určuje výrazy seskupení aSELECToperátor kanálu vrátí pouze výrazy předcházející klauzuliGROUP BY. PokudGROUP BYje vynechán, všechny řádky se považují za jednu skupinu. U starších verzí použijteAGGREGATEmísto toho operaci.GROUP BY
Určuje, podle kterých výrazů jsou řádky seskupeny. Pokud není zadáno, všechny řádky se považují za jednu skupinu.
-
Výraz identifikující sloupce seskupení. Další informace najdete v tématu GROUP BY.
-
Volitelný identifikátor sloupce, který pojme výsledek seskupování výrazu. Pokud není k dispozici žádný
column_alias, Azure Databricks jeden odvozuje.
-
ROZŠÍŘIT
Připojí nové sloupce do seznamu pro výběr dotazu.
-
Kombinace jedné nebo více hodnot, operátorů a funkcí SQL, které se vyhodnotí jako hodnota.
expressionmohou obsahovat odkazy na sloupce v seznamu výběrů dotazu i předchozícolumn_aliasv této klauzuliEXTEND. -
Volitelný identifikátor sloupce určující název výsledku výrazu. Pokud není k dispozici žádný
column_alias, Azure Databricks je odvozena.
-
SET
Přepíše existující sloupce v seznamu výběru dotazu novými hodnotami.
Operace se provádí v pořadí výskytu v klauzuli
SET. Výsledek libovolného výrazu může zohledňovat sloupce aktualizované předchozími výrazy.-
Název sloupce, který se má aktualizovat. Pokud sloupec neexistuje, Azure Databricks vyvolá chybu UNRESOLVED_COLUMN.
výrazu
Kombinace jedné nebo více hodnot, operátorů a funkcí SQL, které se vyhodnotí jako hodnota.
-
DROP column_name [, ...]
Odebere sloupce ze seznamu výběrů dotazu.
Pokud sloupec neexistuje, Azure Databricks vyvolá chybu UNRESOLVED_COLUMN.
AS TABLE_ALIAS
Přiřadí název výsledku dotazu.
-
Filtruje výsledek dotazu na základě zadaných predikátů.
-
Omezí maximální počet řádků, které může dotaz vrátit. Tato klauzule obvykle následuje ORDER BY k vytvoření deterministického výsledku.
-
Přeskočí počet řádků vrácených dotazem. Tato klauzule se obvykle používá ve spojení se LIMITstránkou prostřednictvím sady výsledků a ORDER BY k vytvoření deterministického výsledku.
agregace
Agreguje sadu výsledků dotazu na základě zadaných výrazů a volitelných výrazů seskupení.
Tato operace vytvoří sadu výsledků, ve které se sloupce seskupení zobrazí před agregovanými sloupci.
AGREGÁT
Určuje výrazy, které se mají agregovat.
-
Výraz obsahující jednu nebo více agregačních funkcí. Další informace najdete v tématu GROUP BY.
-
GROUP BY
Určuje, podle kterých výrazů jsou řádky seskupeny. Pokud není zadáno, všechny řádky se považují za jednu skupinu.
-
Volitelný identifikátor sloupce určující název výsledku výrazu. Pokud není k dispozici žádný
column_alias, Azure Databricks je odvozena.
-
Kombinuje dvě nebo více relací pomocí spojení. Další informace najdete v tématu JOIN.
-
Seřadí řádky sady výsledků dotazu. Výstupní řádky jsou seřazené napříč particemi. Tento parametr se vzájemně vylučuje s
SORT BY,CLUSTER BYaDISTRIBUTE BYa nelze jej zadat společně. -
Kombinuje dotaz s jedním nebo více poddotazů pomocí operátorů
UNION,EXCEPTneboINTERSECT. -
Zmenšuje velikost sady výsledků pouze vzorkováním zlomku řádků.
-
Používá se pro pohled na data. Agregované hodnoty můžete získat na základě konkrétních hodnot sloupců. Další informace najdete v tématu PIVOT.
-
Používá se pro pohled na data. Můžete rozdělit více skupin sloupců na řádky. Další informace najdete v tématu UNPIVOT.
Běžné chybové podmínky
- MULTIPLE_QUERY_RESULT_CLAUSES_WITH_PIPE_OPERATORS
- PIPE_OPERATOR_AGGREGATE_EXPRESSION_CONTAINS_NO_AGGREGATE_FUNCTION
- PIPE_OPERATOR_CONTAINS_AGGREGATE_FUNCTION
- UNRESOLVED_COLUMN
Příklady
-- This query
> FROM customer
|> LEFT OUTER JOIN orders ON c_custkey = o_custkey
AND o_comment NOT LIKE '%unusual%packages%'
|> AGGREGATE COUNT(o_orderkey) c_count
GROUP BY c_custkey
|> AGGREGATE COUNT(*) AS custdist
GROUP BY c_count
|> ORDER BY custdist DESC, c_count DESC;
is equivalent to:
> SELECT c_count, COUNT(*) AS custdist
FROM
(SELECT c_custkey, COUNT(o_orderkey) c_count
FROM customer
LEFT OUTER JOIN orders ON c_custkey = o_custkey
AND o_comment NOT LIKE '%unusual%packages%' GROUP BY c_custkey
) AS c_orders
GROUP BY c_count
ORDER BY custdist DESC, c_count DESC;
-- Using the SELECT clause following a FROM clause
> CREATE TABLE t AS VALUES (0), (1) AS t(col);
> FROM t
|> SELECT col * 2 AS result;
result
------
0
2
-- Adding columns to the result set
> VALUES (0), (1) tab(col)
|> EXTEND col * 2 AS result;
col result
--- ------
0 0
1 2
-- Replacing an expression
> VALUES (0), (1) tab(col)
|> SET col = col * 2;
col
---
0
2
-- Removing a column from the result set
> VALUES (0, 1) tab(col1, col2)
|> DROP col1;
col2
----
1
-- Using a table alias
> VALUES (0, 1) tab(col1, col2)
|> AS new_tab
|> SELECT col1 + col2 FROM new_tab;
col1 + col2
1
-- Filtering the result set
> VALUES (0), (1) tab(col)
|> WHERE col = 1;
col
---
1
-- Using LIMIT to truncate the result
> VALUES (0), (0) tab(col)
|> LIMIT 1;
col
---
0
-- Full-table aggregation
> VALUES (0), (1) tab(col)
|> AGGREGATE COUNT(col) AS count;
count
-----
2
-- Aggregation with grouping
> VALUES (0, 1), (0, 2) tab(col1, col2)
|> AGGREGATE COUNT(col2) AS count GROUP BY col1;
col1 count
---- -----
0 2
-- Using JOINs
> SELECT 0 AS a, 1 AS b
|> AS lhs
|> JOIN VALUES (0, 2) rhs(a, b) ON (lhs.a = rhs.a);
a b c d
--- --- --- ---
0 1 0 2
> VALUES ('apples', 3), ('bananas', 4) t(item, sales)
|> AS produce_sales
|> LEFT JOIN
(SELECT "apples" AS item, 123 AS id) AS produce_data
USING (item)
|> SELECT produce_sales.item, sales, id;
item sales id
--------- ------- ------
apples 3 123
bananas 4 NULL
-- Using ORDER BY
> VALUES (0), (1) tab(col)
|> ORDER BY col DESC;
col
---
1
0
> VALUES (0), (1) tab(a, b)
|> UNION ALL VALUES (2), (3) tab(c, d);
a b
--- ----
0 1
2 3
-- Sampling the result set
> VALUES (0), (0), (0), (0) tab(col)
|> TABLESAMPLE (1 ROWS);
col
---
0
> VALUES (0), (0) tab(col)
|> TABLESAMPLE (100 PERCENT);
col
---
0
0
-- Pivoting a query
> VALUES
("dotNET", 2012, 10000),
("Java", 2012, 20000),
("dotNET", 2012, 5000),
("dotNET", 2013, 48000),
("Java", 2013, 30000)
AS courseSales(course, year, earnings)
|> PIVOT (
SUM(earnings)
FOR COURSE IN ('dotNET', 'Java')
)
year dotNET Java
---- ------ ------
2012 15000 20000
2013 48000 30000
-- Using | as the pipe token (DBR 18.0 and above)
> CREATE TABLE t AS VALUES (0, 1), (0, 2) AS t(a, b);
> FROM t
| WHERE a < 2
| SELECT a, SUM(b) AS total GROUP BY a;
a total
- -----
0 3
-- Using SELECT with aggregates and GROUP BY (DBR 18.0 and above)
> VALUES (0, 1), (0, 2), (1, 3) tab(a, b)
|> SELECT a, SUM(b) AS total GROUP BY a;
a total
- -----
0 3
1 3
-- Full-table aggregation using SELECT (DBR 18.0 and above)
> VALUES (0), (1), (2) tab(col)
|> SELECT SUM(col) AS total;
total
-----
3
-- Using UNPIVOT
> VALUES
("dotNET", 2012, 10000),
("Java", 2012, 20000),
("dotNET", 2012, 5000),
("dotNET", 2013, 48000),
("Java", 2013, 30000)
AS courseSales(course, year, earnings)
|> UNPIVOT (
earningsYear FOR `year` IN (`2012`, `2013`, `2014`)
course year earnings
-------- ------ --------
Java 2012 20000
Java 2013 30000
dotNET 2012 15000
dotNET 2013 48000
dotNET 2014 22500