Tablo değerli işlev (TVF) kullanımı

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime

tablo başvurusu olarak bir ilişkiyi veya satır kümesini döndüren bir işlevçağırır.

TVF şu olabilir:

  • SQL kullanıcı tanımlı tablo işlevi.

  • aralığı tablo değerli işlevi.

  • explode gibi tablo değerli oluşturucu işlevleri.

    Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime 12.2 LTS ve üzeri.

  • Parametreli ölçüm görünümü.

    Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL denetimi yes Databricks Runtime 18.2 ve üzeri olarak işaretlendi .

    Important

    Bu özellik Genel Önizleme aşamasındadır.

Not

Hive UDTF tablo başvurusu olarak çağrılamaz; SELECT veya LATERAL VIEW yan tümcesiyle çağrılmalıdır.

Sözdizimi

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

Parametreler

  • function_name

    Tablo değerli bir işlev. İşlev tablo değerli bir işlev olarak çözümlenemiyorsa Azure Databricks UNRESOLVABLE_TABLE_VALUED_FUNCTION oluşturur.

  • ifade

    Bir veya daha fazla değerin, işleçlerin ve SQL işlevlerinin bir bileşimidir ve bu da bir değere neden olur.

  • tablo_takma_adı

    İşlev sonucuna ve sütunlarına başvurmak için isteğe bağlı bir etiket.

Yaygın hata koşulları

Örnekler

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

Databricks SQL ve Databricks Runtime 12.2 LTS ve üzeri üzerinde:

> 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

Databricks SQL ve Databricks Runtime 18.2 ve üzerinde, parametreli ölçüm görünümünü tablo değerli bir işlev olarak çağırabilirsiniz. Her parametreyi adlandırılmış bağımsız değişken olarak geçirin veya her parametrenin bir parametresi olduğunda varsayılanları kullanmak için bağımsız değişkenleri atlar. Parametre tanımlayan adlı discounted_sales_metrics ölçüm görünümü için discount :

-- Pass a named argument
> SELECT order_priority, measure(discounted_revenue)
  FROM discounted_sales_metrics(discount => 0.15)
  GROUP BY ALL;

-- Omit the arguments to use the parameter defaults
> SELECT order_priority, measure(discounted_revenue)
  FROM discounted_sales_metrics
  GROUP BY ALL;