explode
funkcja generatora wartości tabeli
Dotyczy: Databricks SQL Databricks Runtime
Zwraca zestaw wierszy przez anulowanie zagnieżdżania collection
.
W usługach Databricks SQL i Databricks Runtime 13.3 LTS i nowszych ta funkcja obsługuje wywołanie nazwanych parametrów.
Składnia
explode(collection)
Argumenty
collection
: wyrażenieARRAY
lubMAP
.
Zwraca
Zestaw wierszy składający się z elementów tablicy lub kluczy i wartości mapy.
Kolumna utworzona przez explode
tablicę ma nazwę col
.
Kolumny mapy są wywoływane i key
value
.
Jeśli collection
nie są NULL
generowane żadne wiersze. Aby zwrócić pojedynczy wiersz z wartościami NULL
tablicy lub mapowania, użyj funkcji explode_outer().
Dotyczy: Databricks Runtime 12.1 i starsze:
explode
Można umieścić naSELECT
liście tylko jako element główny wyrażenia lub po WIDOKU LATERAL. Podczas umieszczania funkcji naSELECT
liście nie może istnieć żadna inna funkcja generatora na tej samejSELECT
liście lub UNSUPPORTED_GENERATOR. MULTI_GENERATOR jest podniesiona .Dotyczy: Databricks SQL Databricks Runtime 12.2 LTS i nowsze:
Wywołanie z klauzuli LATERAL VIEW lub
SELECT
lista jest przestarzała. Zamiast tego należy wywołaćexplode
jako table_reference.
Przykłady
Dotyczy: Databricks SQL Databricks Runtime 12.1 i starsze:
> SELECT explode(array(10, 20)) AS elem, 'Spark';
10 Spark
20 Spark
> SELECT explode(map(1, 'a', 2, 'b')) AS (num, val), 'Spark';
1 a Spark
2 b Spark
> SELECT explode(array(1, 2)), explode(array(3, 4));
Error: UNSUPPORTED_GENERATOR.MULTI_GENERATOR
-- The difference between explode() and explode_outer() is that explode_outer() returns NULL if the array is NULL.
> SELECT explode_outer(c1) AS elem, 'Spark' FROM VALUES(array(10, 20)), (null) AS T(c1);
10 Spark
20 Spark
NULL Spark
> SELECT explode(c1) AS elem, 'Spark' FROM VALUES(array(10, 20)), (null) AS T(c1);
10 Spark
20 Spark
Dotyczy: Databricks SQL Databricks Runtime 12.2 LTS i nowsze:
> SELECT elem, 'Spark' FROM explode(array(10, 20)) AS t(elem);
10 Spark
20 Spark
> SELECT num, val, 'Spark' FROM explode(map(1, 'a', 2, 'b')) AS t(num, val);
1 a Spark
2 b Spark
> SELECT * FROM explode(array(1, 2)), explode(array(3, 4));
1 3
1 4
2 3
2 4
-- Using lateral correlation in Databricks 12.2 and above
> SELECT * FROM explode(array(1, 2)) AS t, LATERAL explode(array(3 * t.col, 4 * t.col));
1 3
1 4
2 6
2 8