Есть ли способ передать параметр в Google BigQuery для использования в их функции "IN" - PullRequest
0 голосов
/ 25 марта 2020

В настоящее время я пишу приложение, которое обращается к google bigquery через их библиотеку "@ google-cloud / bigquery": "^ 2.0.6". В одном из моих запросов у меня есть предложение where, где мне нужно передать список идентификаторов. Если я использую UNNEST, как в их примере, и передаю массив строк, он работает нормально.

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

Тем не менее, я обнаружил, что UNNEST может быть очень медленным и просто хочет использовать IN самостоятельно и передать список идентификаторов строк. Независимо от того, какой формат списка строк я отправляю, запрос возвращает нулевые результаты. Я думаю, что это из-за того, как они конвертируют параметры, чтобы избежать sql внедрения. Я должен использовать параметр, потому что я сам хочу избежать атак SQL на мое приложение. Если я передаю только один идентификатор, он работает нормально, но если я передаю список, он взрывается, поэтому я думаю, что это как-то связано с форматированием, но я знаю, что мой формат правильный с точки зрения того, что IN обычно ожидал бы, т.е. IN ('' , '')

Кто-нибудь смог просто передать параметр в IN и он работает? то есть IN (@idParam)?

1 Ответ

0 голосов
/ 25 марта 2020

Мы объявляем такие параметры в начале сценария:

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 запись также Мы не видим проблем со скоростью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...