Freigeben über


Aufruf einer Tabellenwertfunktion (Table-Valued Function, TVF)

Gilt für: durch Häkchen mit „Ja“ markiert Databricks SQL Häkchen gesetzt ja Databricks Runtime

Ruft eine Funktion auf, die eine Beziehung oder eine Gruppe von Zeilen als Tabellenverweis zurückgibt.

Eine TVF kann folgendes sein:

  • Benutzerdefinierte SQL-Tabellenfunktion.

  • Der Bereich einer Tabellenwertfunktion.

  • Jede Generatorfunktion für Tabellenwerte, z. B. explode.

    Gilt für: Häkchen ja Databricks SQL Häkchen gesetzt ja Databricks Runtime 12.2 LTS und höher.

Syntax

function_name ( [ expression [, ...] ] ) [ table_alias ]

Parameter

  • function_name

    Eine Tabellenwertfunktion.

  • expression

    Eine Kombination eines oder mehrerer Werte, Operatoren und SQL-Funktionen, die in einem Wert resultiert.

  • table_alias

    Eine optionale Bezeichnung, die auf das Funktionsergebnis und seine Spalten verweist.

Beispiele

-- range call with end
> SELECT * FROM range(6 + cos(3));
   0
   1
   2
   3
   4

-- range call with start and end
> SELECT * FROM range(5, 10);
   5
   6
   7
   8
   9

-- range call with numPartitions
> SELECT * FROM range(0, 10, 2, 200);
   0
   2
   4
   6
   8

-- range call with a table alias
> SELECT * FROM range(5, 8) AS test;
   5
   6
   7

-- Create a SQL UDTF and invoke it
> CREATE OR REPLACE FUNCTION table_func(a INT) RETURNS TABLE
    RETURN SELECT a * c1 AS res FROM VALUES(1), (2), (3), (4) AS T(c1)

> SELECT * FROM table_func(5);
   5
  10
  15
  20

-- Using lateral correlation
>  SELECT table_func.res FROM VALUES(10), (20) AS S(c1), LATERAL table_func(c1);
  10
  20
  20
  40
  30
  60
  40
  80

-- Scalar functions are not allowed in the FROM clause
> SELECT * FROM trim('hello  ');
  Error

In Databricks SQL und Databricks Runtime 12.2 LTS und höher:

> SELECT * FROM explode(array(10, 20));
  10
  20

> SELECT * FROM inline(array(struct(1, 'a'), struct(2, 'b')));
 col1 col2
 ---- ----
    1    a
    2    b

> SELECT * FROM posexplode(array(10,20));
 pos col
 --- ---
   0  10
   1  20

> SELECT * FROM stack(2, 1, 2, 3);
 col0 col1
 ---- ----
    1    2
    3 null

> SELECT * FROM json_tuple('{"a":1, "b":2}', 'a', 'b');
  c0  c1
 --- ---
   1   2

> SELECT * FROM parse_url('http://spark.apache.org/path?query=1', 'HOST');
  spark.apache.org

> SELECT * FROM VALUES(1), (2) AS t1(c1), LATERAL explode (ARRAY(3,4)) AS t2(c2);
 c1 c2
 -- --
  1  3
  1  4
  2  3
  2  4