Sdílet prostřednictvím


posexplode 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í sadu řádků zrušením vnořením expr s počtem pozic.

Syntaxe

posexplode(expr)

Argumenty

  • expr: 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 jsou pojmenovány pos a col. Sloupce pro mapu se nazývají poskey a value.

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

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

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