TVF(테이블 반환 함수) 호출

적용 대상:검사 '예'로 표시 Databricks SQL 검사 '예'로 표시 Databricks 런타임

관계 또는 행 집합을 [table-reference](sql-ref)로 반환하는 함수를 호출합니다.

TVF는 다음과 같습니다.

  • SQL 사용자 정의 테이블 함수입니다.

  • 범위 테이블 반환 함수입니다.

  • 분해와 같은 테이블 반환 생성기 함수입니다.

    적용 대상:검사 '예'로 표시 Databricks SQL 검사 '예'로 표시 Databricks Runtime 12.2 LTS 이상.

구문

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

매개 변수

  • function_name

    테이블 반환 함수입니다.

  • expression

    값을 생성하는 하나 이상의 값, 연산자 및 SQL 함수의 조합입니다.

  • table_alias

    함수 결과 및 해당 열을 참조하는 선택적 레이블입니다.

예제

-- 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 fucntion are not allowed in the FROM clause
> SELECT * FROM trim('hello  ');
  Error

Databricks SQL amd Databricks Runtime 12.2 LTS 이상에서:

> 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