Udostępnij za pośrednictwem


posexplode funkcja generatora wartości tabeli

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime

Zwraca zestaw wierszy poprzez rozpakowywanie expr i numerowanie pozycji.

W usługach Databricks SQL i Databricks Runtime 16.1 i nowszych ta funkcja obsługuje wywoływanie parametrów.

Składnia

posexplode(collection)

Argumenty

  • collection: wyrażenie ARRAY lub MAP .

Zwraca

Zestaw wierszy składający się z pozycji i elementów tablicy lub kluczy i wartości mapy. Kolumny generowane przez posexplode tablicy mają nazwę pos i col. Kolumny mapy są nazywane pos, key i value.

Jeśli collection nie są NULL generowane żadne wiersze.

  • Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks Runtime 12.1 i starsze:

    posexplode można umieścić tylko na liście SELECT jako pierwiastek wyrażenia lub po LATERAL VIEW. Podczas umieszczania funkcji na liście SELECT nie może istnieć żadna inna funkcja generatora na tej samej liście SELECT, w przeciwnym razie zostaje zgłoszone UNSUPPORTED_GENERATOR.MULTI_GENERATOR.

  • Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime 12.2 LTS i nowsze:

    Odwołanie z klauzuli LATERAL VIEW lub z listy SELECT jest przestarzałe. Zamiast tego należy wywołać posexplode jako table_reference.

Przykłady

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks Runtime 12.1 i starsze:

> SELECT posexplode(array(10, 20)) AS elem, 'Spark';
 0  10 Spark
 1  20 Spark

> SELECT posexplode(map(1, 'a', 2, 'b')) AS (num, val), 'Spark';
 0  1   a   Spark
 1  2   b   Spark

> SELECT posexplode(array(1, 2)), posexplode(array(3, 4));
  Error: UNSUPPORTED_GENERATOR.MULTI_GENERATOR

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime 12.2 LTS i nowsze:

> SELECT pos, col FROM posexplode(array(10, 20));
 0  10
 1  20

> SELECT pos, key, value FROM posexplode(map(10, 'a', 20, 'b'));
 0  10   a
 1  22   b

> SELECT p1.*, p2.* FROM posexplode(array(1, 2)) AS p1, posexplode(array(3, 4)) AS p2;
 0  1  0  3
 0  1  1  4
 1  2  0  3
 1  2  1  4

-- Using lateral correlation in Databricks 12.2 and above
> SELECT p1.*, p2.* FROM posexplode(array(1, 2)) AS p1, LATERAL posexplode(array(3 * p1.col, 4 * p1.col)) AS p2;
 0      1  0  3
 0      1  1  4
 1      2  0  6
 1      2  1  8