Sdílet prostřednictvím


explode 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í collection.

V Databricks SQL a Databricks Runtime 13.3 LTS a vyšší podporuje volání pojmenovaných parametrů.

Syntaxe

explode(collection)

Argumenty

  • collection: An ARRAY nebo MAP expression.

Návraty

Sada řádků složená z prvků pole nebo klíčů a hodnot mapy. Sloupec vytvořený polem explode má název col. Sloupce pro mapu jsou volána 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ší:

    explode 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á explode jako table_reference.

Příklady

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

> SELECT explode(array(10, 20)) AS elem, 'Spark';
 10 Spark
 20 Spark

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

> SELECT explode(array(1, 2)), explode(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 elem, 'Spark' FROM explode(array(10, 20)) AS t(elem);
 10 Spark
 20 Spark

> SELECT num, val, 'Spark' FROM explode(map(1, 'a', 2, 'b')) AS t(num, val);
 1   a   Spark
 2   b   Spark

> SELECT * FROM explode(array(1, 2)), explode(array(3, 4));
 1   3
 1   4
 2   3
 2   4

-- Using lateral correlation in Databricks 12.2 and above
> SELECT * FROM explode(array(1, 2)) AS t, LATERAL explode(array(3 * t.col, 4 * t.col));
 1   3
 1   4
 2   6
 2   8