【问题标题】:Is there a way to pass a parameter to google bigquery to be used in their "IN" function有没有办法将参数传递给 google bigquery 以在其“IN”函数中使用
【发布时间】: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")

标签: node.js parameters google-bigquery


【解决方案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
猜你喜欢
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 2013-06-19
  • 2020-04-15
相关资源
最近更新 更多