【问题标题】:Parameterized Bigquery and Array of string values参数化 Bigquery 和字符串值数组
【发布时间】:2020-02-27 09:24:44
【问题描述】:

我正在运行一个运行参数化选择查询的 nodejs 程序。我有以下要传递给查询的参数

  1. 身份证
  2. 姓名

在我的表中,id 是一个数字字段,而 name 是一个字符串。现在,即使参数化查询中的名称数组由字符串值组成,最终生成的查询也没有字符串形式的名称,因此查询失败。如果我从查询中删除名称并单独使用 Id 运行它,它就可以工作。这是我的查询的样子。


ids = [1,2,3,4,5,6]
names = ["john", "rocky", "sam", "alice"]

const sqlQuery = 'SELECT * FROM `table_name_here` WHERE id IN UNNEST ([' + Ids + ']) AND name IN UNNEST ([' + Names + '])';

**final generated query that runs on bigquery**
SELECT * FROM `jenkins_notifications.prod_notifications_build` WHERE id IN UNNEST ([1,2,3,4,5,6]) AND name IN UNNEST ([john, rocky, sam, alice])

The final query should be like 

SELECT * FROM `jenkins_notifications.prod_notifications_build` WHERE id IN UNNEST ([1,2,3,4,5,6]) AND name IN UNNEST (["john", "rocky", "sam", "alice"])

【问题讨论】:

    标签: javascript node.js parameters google-bigquery parameter-passing


    【解决方案1】:

    解决问题的最简单方法是使用下面的名称

    names = ["'john'", "'rocky'", "'sam'", "'alice'"]  
    

    或者,更好的选择是使用地图功能

    names.map(function(name) {return "'" + name + "'";}).toString()
    

    如下例所示

    ids = [1,2,3,4,5,6]
    names = ["john", "rocky", "sam", "alice"]
    
    const sqlQuery = 'SELECT * FROM `table_name_here` WHERE id IN UNNEST ([' + Ids + ']) AND name IN UNNEST ([' + names.map(function(name) {return "'" + name + "'";}).toString() + '])';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2020-02-18
      • 1970-01-01
      • 2016-10-19
      • 2021-06-02
      • 1970-01-01
      • 2013-03-29
      相关资源
      最近更新 更多