Pemanggilan fungsi bernilai tabel (TVF)

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Memanggil fungsi yang mengembalikan relasi atau sekumpulan baris sebagai referensi tabel .

TVF dapat berupa:

  • Fungsi tabel yang ditentukan oleh pengguna SQL.

  • Rentang fungsi bernilai tabel.

  • Setiap fungsi generator bernilai tabel, seperti explode.

    Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime 12.2 LTS ke atas.

Nota

Apache Hive UDTF tidak dapat dipanggil sebagai referensi tabel, tetapi harus dipanggil dari SELECT atau menggunakan klausa LATERAL VIEW.

Sintaks

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

Parameter

  • function_name

    Fungsi bernilai tabel. Jika fungsi tidak dapat diselesaikan sebagai fungsi bernilai tabel, Azure Databricks menaikkan UNRESOLVABLE_TABLE_VALUED_FUNCTION.

  • expression

    Kombinasi satu atau beberapa nilai, operator, dan fungsi SQL yang menghasilkan nilai.

  • table_alias

    Label opsional untuk mereferensikan hasil fungsi dan kolomnya.

Kondisi kesalahan umum

Contoh

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

Pada Databricks SQL dan Databricks Runtime 12.2 LTS ke atas:

> 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