Я передаю строку запроса в соединение, и результат должен выглядеть так:
select game_name, month, count(*) as count
from device_metrics.mtu_events
where YEAR = '2019' and month between '07' and '09'
group by game_name, month
order by game_name asc, month asc
Это отлично работает, если я передаю вышеуказанный блок как одну строку в DBI::dbGetQuery(con, myquery)
Но даты — это переменная в блестящем приложении, поэтому я попытался создать функцию для генерации строки запроса:
my_query <- function(start_date, end_date) {
yr <- year(ymd(start_date))
month_start <- month(ymd(start_date))
month_end <- month(ymd(end_date))
query <- paste0(
"select game_name, month, count(*) as count
from device_metrics.mtu_events
where YEAR = ", yr, " and month between ", month_start, " and ", month_end,
" group by game_name, month
order by game_name asc, month asc")
return(query)
}
Когда я вызываю эту функцию и пытаюсь запросить с ее помощью нашу базу данных, я получаю:
Произошла ошибка клиента AWS Athena. Ошибка Athena №: 372, код ответа HTTP: 1, сообщение об ошибке: SYNTAX_ERROR: строка 3:15: «=» не может применяться к varchar, целому числу
Есть ли «правильный» способ сделать это? Как я могу построить строку запроса с переменными и передать ее DBI::dbGetQuery()
where YEAR = '", yr, "' and month between '", month_start, "' and '", month_end, "' group_by grame_name, month
, потому что одинарные кавычки вокруг «год», «месяц_начало», «месяц_конец» не находятся вpaste0
- person akrun   schedule 25.01.2020month_start <- month(ymd(start_date)) %>% str()
- person Doug Fir   schedule 25.01.2020month(Sys.Date())
возвращает числовое значение. Попробуйтеmy_query <- function(start_date, end_date) { yr <- year(ymd(start_date)) month_start <- month(ymd(start_date)) month_end <- month(ymd(end_date)) query <- paste0( "select game_name, month, count(*) as count from device_metrics.mtu_events where YEAR = '", yr, "' and month between '", month_start, "' and '", month_end, "' group by game_name, month order by game_name asc, month asc") return(query) }
- person akrun   schedule 25.01.2020glue
/stringr::str_glue
? - person camille   schedule 25.01.2020DBI::dbBind
с параметризованными запросами, а не цитировать и тому подобное (bobby-tables.com а>). (Я не знаком с диалектом Афины и не уверен, насколько хорошо он поддерживается.) - person r2evans   schedule 25.01.2020sQuote
для строковых литералов, так как это обрабатывает кавычки в середине строки (тогда как использование литерала'
не делает) . - person r2evans   schedule 25.01.2020