Joy*_*yce 3 user-defined-functions google-bigquery
在 BigQuery 中,如何编写返回表的 UDF?我想要的是能够接受参数的 CTE。据我所知,UDF 只返回标量,对吗?
UDF 可以返回不同类型的 ARRAYS,包括 ARRAY of STRUCT
但显然它与返回表不同,BigQuery UDF 并不真正支持返回表 [目前]
PS如果您有要解决的特定问题 - 提出特定问题,有人会提供帮助
下面是两个相对幼稚和无用的(从实际角度来看)示例 - 但我希望它们展示了使用 ARRAYS 在某些扩展 CTE 上模仿的概念
示例#1
#standardSQL
CREATE TEMPORARY FUNCTION pseudoCTE(x INT64, y INT64) AS (
GENERATE_ARRAY(x, y)
);
SELECT * FROM UNNEST(pseudoCTE(1,5)) z
Run Code Online (Sandbox Code Playgroud)
结果
Row z
1 1
2 2
3 3
4 4
5 5
Run Code Online (Sandbox Code Playgroud)
示例#2
#standardSQL
CREATE TEMPORARY FUNCTION pseudoCTE(x INT64, y INT64) AS (
ARRAY(SELECT AS STRUCT z AS id, RAND() AS value
FROM UNNEST(GENERATE_ARRAY(x, y)) z)
);
SELECT * FROM UNNEST(pseudoCTE(1,5))
Row id value
1 1 0.9319445195173228
2 2 0.36404932965409453
3 3 0.4615807541752828
4 4 0.5504890432993448
5 5 0.29635275888268836
Run Code Online (Sandbox Code Playgroud)
在 BigQuery 中,您现在拥有table functions:
表函数也称为表值函数 (TVF),是返回表的用户定义函数。
一个例子(在谷歌文档中找到):
CREATE OR REPLACE TABLE FUNCTION mydataset.names_by_year(y INT64)
AS
SELECT year, name, SUM(number) AS total
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE year = y
GROUP BY year, name
Run Code Online (Sandbox Code Playgroud)
要执行它:
SELECT * FROM mydataset.names_by_year(1950)
ORDER BY total DESC
LIMIT 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
788 次 |
| 最近记录: |