posexplode tabellvärdesgeneratorfunktion

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime

Returnerar en uppsättning rader genom att ta bort kapsling expr med numrering av positioner.

Syntax

posexplode(expr)

Argument

  • expr: Ett ARRAY eller-uttryck MAP .

Returer

En uppsättning rader som består av positionen och elementen i matrisen eller nycklarna och värdena på kartan. Kolumnerna som skapas av posexplode en matris heter pos och col. Kolumnerna för en karta kallas pos, key och value.

Om expr är NULL skapas inga rader.

  • Gäller för:markerad ja Databricks Runtime 12.1 och tidigare:

    posexplode kan endast placeras i SELECT listan som roten för ett uttryck eller efter en LATERAL VY. När du placerar funktionen i SELECT listan får det inte finnas någon annan generatorfunktion i samma SELECT lista eller UNSUPPORTED_GENERATOR. MULTI_GENERATOR höjs.

  • Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 12.2 LTS och senare:

    Anrop från LATERAL VIEW-satsen eller så SELECT är listan inaktuell. Anropa posexplode i stället som en table_reference.

Exempel

Gäller för:markerad ja Databricks Runtime 12.1 och tidigare:

> 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

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 12.2 LTS och senare:

> 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