Sdílet prostřednictvím


posexplode funkce generátoru s tabulkovými hodnotami

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

Vrátí sadu řádků rozbalením expr s očíslováním pozic.

Ve verzích Databricks Runtime 16.1 a novějších tato funkce podporuje volání pojmenovaných parametrů.

Syntaxe

posexplode(collection)

Argumenty

  • collection: An ARRAY nebo MAP expression.

Návraty

Sada řádků složená z pozice a prvků pole nebo klíčů a hodnot mapy. Sloupce vytvořené polem posexplode se nazývají pos a col. Sloupce mapy se nazývají pos, key a value.

Pokud collection nejsou NULL vytvořeny žádné řádky.

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

    posexplode lze umístit pouze do seznamu SELECT jako kořen výrazu nebo za LATERAL VIEW. Při umístění funkce do seznamu SELECT nesmí být ve stejném seznamu SELECT žádná jiná generátorová funkce, jinak se vyvolá chyba 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šší:

    Vyvolání z klauzule LATERAL VIEW nebo či ze seznamu SELECT je zastaralé. Místo toho se vyvolá posexplode jako table_reference.

Příklady

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

> 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

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(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