Udostępnij za pośrednictwem


wywołanie funkcji Table-valued (TVF)

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime

Wywołuje funkcję, która zwraca relację lub set wierszy jako odniesienie typu table.

TvF może być:

  • Funkcja table zdefiniowana przez użytkownika SQL.

  • Funkcja o wartościach z zakresu table.

  • Każda funkcja generatora o wartości table, taka jak explode.

    Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime 12.2 LTS i nowsze.

Notatka

UDTF programu Hive nie można wywołać jako table-reference, ale należy wywołać z SELECT lub użyć klauzuli LATERAL VIEW.

Składnia

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

Parameters

  • function_name

    Funkcja table-valued.

  • wyrażenie

    Kombinacja jednego lub więcej values, operatorów i funkcji SQL, która skutkuje wartością.

  • table_alias

    Opcjonalna etykieta pozwalająca odwołać się do wyniku funkcji i jej columns.

Przykłady

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

W usługach Databricks SQL i Databricks Runtime 12.2 LTS i nowszych:

> 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