Я пытаюсь выяснить, есть ли способ передать параметры в блоки sql
, подключенные к BigQuery в RMarkdown:
```{r setup}
library(bigrquery)
bq_auth(path = "access_token.json")
db <- dbConnect(
bigquery(),
dataset = 'my_data',
project = 'my-project',
use_legacy_sql = FALSE
)
parameter_value = 10L
```
```{sql, echo=FALSE, connection=db, output.var="x}
SELECT @parameter_value
```
```{r}
print(x)
# I want to see 10 here.
```
См. Документацию по параметризованным запросам BigQuery здесь - https://cloud.google.com/bigquery/docs/parameterized-queries
Обновление 1
Хотя инъекции ?parameter_value
, похоже, работают нормально для скаляров, это не относится к векторам, например:
```{r}
parameter_value = c(10L, 20L)
```
```{sql, echo=FALSE, connection=db, output.var="x}
SELECT UNNEST(?parameter_value)
```
завершится ошибкой:
Ошибка в vapply (values, function (x) dbQuoteLiteral (conn, x), character (1)): значения должны быть длиной 1, но FUN (X [ 1 ]) результат имеет длину 2
Событие со скалярами, механизм BigQuery не использует для параметризации запроса.
Обновление 2
Я думаю, что это невозможно сделать прямо сейчас, потому что некоторые из DBI API не реализованы в пакете bigrquery
, поэтому я поднял проблему для. И knitr
пакет здесь