Condividi tramite


posexplode_outer Funzione generatore con valori di tabella

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime

Restituisce le righe annullando l'annidamento della matrice con numerazione delle posizioni usando la semantica OUTER.

In Databricks Runtime 16.1 e versioni successive questa funzione supporta chiamata di parametri denominati.

Sintassi

posexplode_outer(collection)

Argomenti

  • collection: espressione ARRAY o MAP.

Valori restituiti

Set di righe composte dalla posizione e dagli elementi della matrice o delle chiavi e dei valori della mappa. Le colonne prodotte da posexplode_outer una matrice sono denominate pos e col. Le colonne per una mappa sono denominate pose keyvalue .

Se collection è NULL, una singola riga con valori nulli per la matrice o i valori della mappa.

  • Si applica a:segno di spunta sì Databricks Runtime 12.1 e versioni precedenti:

    posexplode_outer può essere inserito nell'elenco SELECT solo come radice di un'espressione o dopo una VISUALIZZAZIONE LATERALE. Quando si inserisce la funzione nell'elenco SELECT non deve essere presente alcuna altra funzione generatore nello stesso SELECT elenco o UNSUPPORTED_GENERATOR. MULTI_GENERATOR viene generato.

  • Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime 12.2 LTS e versioni successive:

    La chiamata dalla clausola LATERAL VIEW o dall'elenco SELECT è deprecata. Richiamare posexplode_outer invece come table_reference.

Esempi

Si applica a:segno di spunta sì Databricks Runtime 12.1 e versioni precedenti:

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

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

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

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime 12.2 LTS e versioni successive:

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

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

> SELECT p1.*, p2.* FROM posexplode_outer(array(1, 2)) AS p1, posexplode_outer(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_outer(array(1, 2)) AS p1, LATERAL posexplode_outer(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