Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:
Databricks SQL
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.
Alla tabellvärdefunktioner, till exempel explode.
Gäller för:
Databricks SQL
Databricks Runtime 12.2 LTS och senare.En parameteriserad måttvy.
Gäller för:
Databricks
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
-
En tabellvärdesfunktion. Om funktionen inte kan matchas som en tabellvärdesfunktion Azure Databricks genererar UNRESOLVABLE_TABLE_VALUED_FUNCTION.
-
En kombination av ett eller flera värden, operatorer och SQL-funktioner som resulterar i ett värde.
-
En valfri etikett som refererar till funktionsresultatet och dess kolumner.
Vanliga felvillkor
- NUM_TABLE_VALUE_ALIASES_MISMATCH
- UNRESOLVABLE_TABLE_VALUED_FUNCTION
- WRONG_NUM_ARGS. WITHOUT_SUGGESTION
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;