Táblaértékű függvény (TVF) meghívása

A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime

Olyan függvényt hív meg, amely egy relációt vagy sorkészletként ad vissza táblahivatkozásként .

A TVF lehet:

  • SQL felhasználó által definiált táblafüggvény.

  • A tartomány táblaértékű függvény

  • Bármilyen táblaértékű generátorfüggvény, például explode.

    A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime 12.2 LTS és újabb.

  • Paraméteres metrikanézet.

    A következőre vonatkozik:yes Databricks SQL check mark yes Databricks Runtime 18.2 és újabb.

    Important

    Ez a funkció nyilvános előzetes verzióban van.

Jegyzet

Hive UDTF nem hívhatók meg táblahivatkozásként, hanem a SELECT vagy a LATERAL VIEW záradékhasználatával kell meghívni.

Szintaxis

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

Paraméterek

  • function_name

    Táblaértékű függvény. Ha a függvény nem oldható fel táblaértékű függvényként, Azure Databricks UNRESOLVABLE_TABLE_VALUED_FUNCTION.

  • kifejezés

    Egy vagy több érték, operátor és SQL-függvény kombinációja, amely értéket eredményez.

  • table_alias

    Nem kötelező címke a függvény eredményére és oszlopaira való hivatkozáshoz.

Gyakori hibafeltételek

Példák

-- 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 és Databricks Runtime 12.2 LTS és újabb verziókon:

> 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

A Databricks SQL-en és a Databricks Runtime 18.2-s vagy újabb verziója esetén a paraméteres metrikanézetet táblaértékkel rendelkező függvényként hívhatja meg. Adja át az egyes paramétereket névvel ellátott argumentumként, vagy hagyja ki az argumentumokat az alapértelmezett értékek használatára, ha minden paraméter rendelkezik ilyen argumentumokkal. Paramétert definiáló discounted_sales_metrics metrikanézet discount esetén:

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