将相同输入类型的多个值传递给 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 然后 UNNESTing 数组。感谢您的帮助! 是的。你非常接近:o)也请记住 - 不支持临时表函数(至少到目前为止):o)

以上是关于将相同输入类型的多个值传递给 BigQuery 表值函数的主要内容,如果未能解决你的问题,请参考以下文章

如果将相同数量的值传递给存储过程,则会出错

将 STRUCT 的 ARRAY 传递给标准 BigQuery SQL 的用户定义函数

BigQuery - 如何取消嵌套多个数组,并从一列分配值?

使用 pandas 将一组值传递给 bigquery 查询

将不同类型的值传递给着色器

如何将用户定义的类型作为输入传递给存储过程?