Параметризованный Bigquery и Массив строковых значений - PullRequest
0 голосов
/ 27 февраля 2020

Я запускаю программу nodejs, которая выполняет параметризованный запрос выбора. У меня есть следующие параметры, которые я передаю в запрос

  1. Id
  2. Имя

В моей таблице id - это поле цифры c тогда как имя является строкой. Теперь, хотя массив имен в параметризованном запросе состоит из строковых значений, в конечном итоге генерируемый запрос не имеет имен в виде строки, и, следовательно, запрос не выполняется. Если я удаляю имя из запроса и запускаю его только с идентификатором, это работает. Вот как выглядит мой запрос.


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"])

1 Ответ

2 голосов
/ 27 февраля 2020

Самый простой и быстрый способ решить проблему - использовать для имен ниже:

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

. Или лучше использовать функцию карты

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

, как показано в примере ниже * 1007. *

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() + '])';
...