Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:
Databricks SQL
Databricks Runtime 16.2 lub nowsze
Przetwarza wynik poprzedniego zapytania przy użyciu operacji łańcuchowej.
Składnia
{ 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
-
Zbiera kolumny, które mają być zwracane z zapytania, w tym wykonywanie wyrażeń i deduplikację.
W środowisku Databricks Runtime 18.0 lub nowszym lista kolumn może zawierać funkcje agregujące. Klauzula opcjonalna
GROUP BYokreśla wyrażenia grupowania, aSELECToperator potoku zwraca tylko wyrażenia poprzedzające klauzulęGROUP BY. JeśliGROUP BYpominięto, wszystkie wiersze są traktowane jako pojedyncza grupa. W przypadku wcześniejszych wersji użyjAGGREGATEoperacji .GROUP BY
Określa, według których wyrażeń są grupowane wiersze. Jeśli nie zostanie określony, wszystkie wiersze są traktowane jako pojedyncza grupa.
-
Wyrażenie identyfikujące kolumny grupowania. Aby uzyskać więcej informacji, zobacz GROUP BY.
-
Opcjonalny identyfikator kolumny nazewnictwa wyniku wyrażenia grupowania. Jeśli nie podano
column_alias, Azure Databricks pochodzą one.
-
ROZSZERZ
Dołącza nowe kolumny do listy wyboru zapytania.
-
Kombinacja co najmniej jednej wartości, operatorów i funkcji SQL, która daje w wyniku wartość.
expressionmoże zawierać odwołania do kolumn na liście wyboru zapytania, a także do wcześniejszychcolumn_aliasw tej samej klauzuliEXTEND. -
Opcjonalny identyfikator kolumny dla nazwania wyniku wyrażenia. Jeśli nie podano
column_aliasAzure Databricks pochodzi.
-
SET
Zastępuje istniejące kolumny w liście wyników zapytania nowymi wartościami.
Operacja jest wykonywana w kolejności występowania w klauzuli
SET. Wynik dowolnego wyrażenia może obserwować kolumny zaktualizowane przez poprzednie wyrażenia.-
Nazwa kolumny, która ma zostać zaktualizowana. Jeśli kolumna nie istnieje, Azure Databricks zgłasza błąd UNRESOLVED_COLUMN.
wyrażenie
Kombinacja co najmniej jednej wartości, operatorów i funkcji SQL, która daje w wyniku wartość.
-
DROP column_name [, ...]
Usuwa kolumny z listy wyboru zapytania.
Jeśli kolumna nie istnieje, Azure Databricks zgłasza błąd UNRESOLVED_COLUMN.
JAK table_alias
Przypisuje nazwę do wyniku zapytania.
-
Filtruje wynik zapytania na podstawie podanych predykatów.
-
Ogranicza maksymalną liczbę wierszy, które mogą być zwracane przez zapytanie. Ta klauzula zwykle następuje po ORDER BY, aby uzyskać wynik deterministyczny.
-
Pomija liczbę wierszy zwracanych przez zapytanie. Ta klauzula jest zazwyczaj używana w połączeniu ze stronami od LIMIT do w obrębie zestawu wyników strony, a także z ORDER BY, aby uzyskać spójny wynik.
Notatka
Podczas stronicowania zestawu wyników przy użyciu LIMIT i OFFSET są przetwarzane wszystkie wiersze, w tym pominięte wiersze. Jednak tylko określony podzbiór wierszy jest zwracany w zestawie wyników. Stronicowanie przy użyciu tej techniki nie jest zalecane w przypadku zapytań intensywnie korzystających z zasobów.
agregacja
Agreguje zestaw wyników zapytania na podstawie podanych wyrażeń i opcjonalnych wyrażeń grupowania.
Ta operacja generuje zestaw wyników, w którym kolumny grupowania są wyświetlane przed zagregowanymi kolumnami.
AGREGAT
Określa wyrażenia do agregowania.
-
Wyrażenie zawierające co najmniej jedną funkcję agregacji. Aby uzyskać więcej informacji, zobacz GROUP BY.
-
GROUP BY
Określa, według których wyrażeń są grupowane wiersze. Jeśli nie zostanie określony, wszystkie wiersze są traktowane jako pojedyncza grupa.
-
Opcjonalny identyfikator kolumny dla nazwania wyniku wyrażenia. Jeśli nie podano
column_aliasAzure Databricks pochodzi.
-
Łączy co najmniej dwie relacje przy użyciu sprzężenia. Aby uzyskać więcej informacji, zobacz JOIN.
-
Porządkuje wiersze zestawu wyników zapytania. Wiersze wyjściowe są uporządkowane w poprzek partycji. Ten parametr wyklucza się wzajemnie z
SORT BY,CLUSTER BYiDISTRIBUTE BYi nie można go określić razem. -
Łączy zapytanie z co najmniej jedną podzapytaniem przy użyciu operatorów
UNION,EXCEPTlubINTERSECT. -
Zmniejsza rozmiar zestawu wyników, próbkując tylko ułamek wierszy.
-
Używane do perspektywy danych. Zagregowane wartości można uzyskać na podstawie określonych wartości kolumn. Aby uzyskać więcej informacji, zobacz PIVOT.
-
Używane do perspektywy danych. Można podzielić wiele grup kolumn na wiersze. Aby uzyskać więcej informacji, zobacz UNPIVOT.
Typowe warunki błędów
- MULTIPLE_QUERY_RESULT_CLAUSES_WITH_PIPE_OPERATORS
- PIPE_OPERATOR_AGGREGATE_EXPRESSION_CONTAINS_NO_AGGREGATE_FUNCTION
- PIPE_OPERATOR_CONTAINS_AGGREGATE_FUNCTION
- UNRESOLVED_COLUMN
Przykłady
-- 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