Я получал минимальные и максимальные даты для указанного c временного ряда в таблице фактов базы данных следующим образом:
auxiliar.dates <- function(machine, signal) {
q.Aux1 <- paste("SELECT
t1.machine,
t1.signal,
t2.signal_name,
t1.min_snsr_dt,
t1.max_snsr_dt,
t1.min_snsr_ts,
t1.max_snsr_ts,
t1.min_etl_dt,
t1.max_etl_dt,
t1.rec_cnt
FROM ", config$SF_CONFIG$my_schema_name1, ".mytable1 AS t1
LEFT JOIN ", config$SF_CONFIG$my_schema_name1, ".mytable2", "AS t2
ON t1.signal=t2.signal
WHERE t1.unit_key=")
q.Aux2 <- " AND t1.signal="
q.Aux.final <- str_c(q.Aux1, machine, q.Aux2, signal)
res <- dbSendQuery(myConn, q.Aux.final)
df <- as.data.table(dbFetch(res, n=-1))
dbClearResult(res)
return(df)
}
dates <-auxiliar.dates("machine", "signal")
Вывод этой функции представляет собой таблицу данных следующим образом:
Затем я использовал выходные данные для запроса указанного c сигнала между min и max ts следующим образом:
signalQuery <- function(machine, signal, min_ts, max_ts) {
q1.aux1 <- paste("SELECT snsr_val,
snsr_ts,
snsr_dt,
signal,
qual,
machine
FROM ", config$SF_CONFIG$schema_name1,
".mytable1 AS v
WHERE machine=", sep="")
q3.aux1 <-paste(" AND signal=", signal, " AND snsr_ts BETWEEN ", "'", min_ts, "'",
" AND ", "'", max_ts, "'", " ORDER BY v.snsr_ts", sep = "")
qt.auxtotal <- str_c(q1.aux1,
machine,
q3.aux1) #we join que full query with stringr library
res <- dbSendQuery(myConn, qt.auxtotal)
df <- as.data.table(dbFetch(res,n=-1))
dbClearResult(res) #cleaning memory
return(df)
}
Например, чтобы вызвать сигнал 71, я делал:
signal71.dates <- auxiliar.dates(machine, 71)
df <- signalQuery(machine, 71, signal71.dates$min_snsr_dt, signal71.dates$max_snsr_dt)
В случае, если мне нужно было запросить больше сигналов, я делал точно такую же процедуру, но я принимал минимальное значение max_snsr_dt для моего кадра данных, вызывающего signal_number. даты и максимальное значение min_snsr_dt моих dataframes signal_number.dates.
Я хотел бы знать, чтобы немного изменить процесс и иметь возможность вводить вектор, сигналы которого я хочу, как в auxiliar.dates, так и в Функция signalQuery.
Моим первым испытанием было изменить auxiliar.dates:
q.Aux2 <- " AND t1.signal="
на:
q.Aux2 <- " AND t1.signal IN ("
q.Aux.final <- str_c(q.Aux1, machine, q.Aux2, paste(signal, ")", sep = ""))
Однако, когда я вызываю функцию как:
test <- auxiliar.dates(984, c(70,71))
Я получаю следующее ошибка:
Ошибка в new_result (connection@ptr, оператор): ожидание единственного строкового значения: [тип = символ; экстент = 2].
Кто-нибудь сможет поддержать?
BR