将相同输入类型的多个值传递给 BigQuery 表值函数
Posted
技术标签:
【中文标题】将相同输入类型的多个值传递给 BigQuery 表值函数【英文标题】:Pass multiple values of same input type to BigQuery Table Valued Function 【发布时间】:2021-10-27 21:01:50 【问题描述】:假设我有一个表值函数 (TVF),例如
CREATE TEMP TABLE FUNCTION Job(
input_val INT64)
AS
SELECT
val,
row2
FROM TableOfInterest
WHERE val = input_val;
这很好用,并为单个 input_val
返回适当的结果。但我想返回多行,每个值对应input_val
。
通过做类似这样的伪代码
SELECT
val,
row2
FROM
Job(
(
SELECT
val
FROM ValTable
LIMIT 100
))
我希望返回 100 行,其中每一行为我提供来自 TableOfInterest
的相应结果,对应 input_val
的值。
另一个问题是,最终我想加入第二个 TVF,如下所示
CREATE TEMP TABLE FUNCTION Job2(
input_val INT64)
AS
SELECT
val,
row3
FROM TableOfInterest2
WHERE val = TIMESTAMP_FROM_UNIX_MICROS(input_val);
如何为input_val
传递这些 TVF 的多个值并取回表格?
我查看了 this 和 this,但它们似乎没有解决我在 BigQuery 中尝试做的事情。感觉很简单。不是吗?
我确定我只是在文档中遗漏了一些明显的东西。感谢您的帮助!
【问题讨论】:
【参考方案1】:但我想返回多行,一个对应 input_val 的每个值。
考虑以下:
第 1 步 - 创建表函数
CREATE TABLE FUNCTION project.dataset.Job(input_vals array<INT64>) AS (
SELECT
val,
row2
FROM TableOfInterest
WHERE val IN UNNEST(input_vals)
);
第 2 步 - 使用它:o)
SELECT
val,
row2
FROM project.dataset.Job(
ARRAY(
SELECT val
FROM ValTable
LIMIT 100
))
【讨论】:
谢谢!所以我只是错过了将输入类型更改为array
然后 UNNEST
ing 数组。感谢您的帮助!
是的。你非常接近:o)也请记住 - 不支持临时表函数(至少到目前为止):o)以上是关于将相同输入类型的多个值传递给 BigQuery 表值函数的主要内容,如果未能解决你的问题,请参考以下文章
将 STRUCT 的 ARRAY 传递给标准 BigQuery SQL 的用户定义函数