posexplode_outer Funkce generátoru s hodnotami tabulky

Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime

Vrátí řádky zrušením vnořením pole s počtem pozic pomocí OUTER sémantiky.

Syntaxe

posexplode_outer(expr)

Argumenty

  • expr: Výraz ARRAY nebo MAP.

Návraty

Sada řádků složená z pozice a prvků pole nebo klíčů a hodnot mapy. Sloupce vytvořené polem posexplode_outer jsou pojmenovány pos a col. Sloupce pro mapu se nazývají poskey a value.

Pokud expr je NULL, jeden řádek s NULLy pro maticové nebo mapové hodnoty.

  • Platí pro: zaškrtnutí označeného ano Databricks Runtime 12.1 a starší:

    posexplode_outer lze umístit SELECT do seznamu pouze jako kořen výrazu nebo za zobrazením LATERAL. Při umístění funkce do SELECT seznamu nesmí existovat žádná jiná generátorová funkce ve stejném SELECT seznamu nebo UNSUPPORTED_GENERATOR. MULTI_GENERATOR je vyvolána.

  • Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 12.2 LTS a vyšší:

    Vyvolání z klauzule LATERAL VIEW nebo SELECT je seznam zastaralý. Místo toho se vyvolá posexplode_outer jako table_reference.

Příklady

Platí pro: zaškrtnutí označeného ano Databricks Runtime 12.1 a starší:

> 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

Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 12.2 LTS a vyšší:

> 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