有没有办法将参数传递给 google bigquery 以在其“IN”函数中使用

Posted

技术标签:

【中文标题】有没有办法将参数传递给 google bigquery 以在其“IN”函数中使用【英文标题】:Is there a way to pass a parameter to google bigquery to be used in their "IN" function 【发布时间】:2020-03-25 16:46:57 【问题描述】:

我目前正在编写一个通过他们的“@google-cloud/bigquery”:“^2.0.6”库访问 google bigquery 的应用程序。在我的一个查询中,我有一个 where 子句,我需要在其中传递一个 id 列表。如果我在他们的示例中使用 UNNEST 并传递一个字符串数组,它工作正常。

https://cloud.google.com/bigquery/docs/parameterized-queries

但是,我发现 UNNEST 可能真的很慢,只想单独使用 IN 并传入一个字符串列表。无论我发送什么格式的字符串列表,查询都会返回空结果。我认为这是因为他们转换参数的方式以避免sql注入。我必须使用一个参数,因为我自己想避免对我的应用程序进行 SQL 注入攻击。如果我只传递一个 id 它工作正常,但如果我传递一个列表它会爆炸,所以我认为它与格式化有关,但我知道我的格式在 IN 通常期望的方面是正确的,即 IN ('' , '')

有没有人能够将一个参数传递给 IN 并让它工作?即 IN (@idParam)?

【问题讨论】:

对不起,应该是 IN ("id1", "id2") 【参考方案1】:

我们在脚本开头这样声明参数:

DECLARE var_country_ids ARRAY<INT64> DEFAULT [1,2,3];

并像这样使用:

WHERE if(var_country_ids is not null,p.country_id IN UNNEST(var_country_ids),true) AND ...

如您所见,我们也使用 NULLarray 表示法。我们没有看到速度问题。

【讨论】:

您好,感谢您的回复!但是,我特别询问有关使用 javascript/node api 库将数组作为参数传递给 bigQuery 并想知道该参数是否必须在查询中与 UNNEST 一起使用,因为我似乎无法让它工作只需 IN

以上是关于有没有办法将参数传递给 google bigquery 以在其“IN”函数中使用的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将参数传递给Runnable? [复制]

有没有办法避免将所有参数传递给函数[重复]

有没有办法在 CodeIgniter *不*使用 ActiveRecord 的情况下将参数传递给查询?

有没有办法将命令行参数传递给自定义入口点(C / C ++)

有没有办法在不重复变量名的情况下将命名参数传递给格式化宏?

有没有办法将参数传递给 Flask-Restless GET_SINGLE 预处理器?