Anrop för tabellvärdesfunktion (TVF)

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime

Anropar en funktion som returnerar en relation eller en uppsättning rader som en tabellreferens.

En TVF kan vara en:

  • SQL-användardefinierad tabellfunktion.

  • Tabellvärdefunktionen för intervallet .

  • Alla tabellvärdefunktioner, till exempel explode.

    Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 12.2 LTS och senare.

  • En parameteriserad måttvy.

    Gäller för:check markerad ja Databricks SQL-kontroll markerad ja Databricks Runtime 18.2 och senare.

    Important

    Den här funktionen finns som allmänt tillgänglig förhandsversion.

Anmärkning

Hive UDTF kan inte anropas som en tabellreferens, men måste anropas från SELECT eller med LATERAL VIEW-satsen.

Syntax

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

Parametrar

  • function_name

    En tabellvärdesfunktion. Om funktionen inte kan matchas som en tabellvärdesfunktion Azure Databricks genererar UNRESOLVABLE_TABLE_VALUED_FUNCTION.

  • uttryck

    En kombination av ett eller flera värden, operatorer och SQL-funktioner som resulterar i ett värde.

  • table_alias

    En valfri etikett som refererar till funktionsresultatet och dess kolumner.

Vanliga felvillkor

Exempel

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

På Databricks SQL och Databricks Runtime 12.2 LTS och senare:

> 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

I Databricks SQL och Databricks Runtime 18.2 och senare kan du anropa en parameteriserad måttvy som en tabellvärdesfunktion. Skicka varje parameter som ett namngivet argument eller utelämna argumenten för att använda standardvärdena när varje parameter har en. För en måttvy med namnet discounted_sales_metrics som definierar en discount parameter:

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