有没有办法将参数传递给 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 ...
如您所见,我们也使用 NULL
和 array
表示法。我们没有看到速度问题。
【讨论】:
您好,感谢您的回复!但是,我特别询问有关使用 javascript/node api 库将数组作为参数传递给 bigQuery 并想知道该参数是否必须在查询中与 UNNEST 一起使用,因为我似乎无法让它工作只需 IN以上是关于有没有办法将参数传递给 google bigquery 以在其“IN”函数中使用的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 CodeIgniter *不*使用 ActiveRecord 的情况下将参数传递给查询?