Вопрос или проблема
Кажется, я не могу понять, что не так в следующем заявлении. Подключение к DWH установлено, но оператор запроса в R, похоже, не работает, с следующей ошибкой:
LR=dbGetQuery(con, "select id as ID,
date_c."Professional_Status" as Prof_Status,
case when talk_sec >= 5 then 1 else 0 end as Established_Connection
from id_collect as id_c
left join date_conncet as date_c on id_c.date=date_c.date
where date::date="2018-01-19" and country = 'IT' and type="shop"
and 'district' = 'South' and interaction is true")
Этот кусок запроса работает в редакторе SQL (используя Postgresql), но в R я получаю сообщение об ошибке: Ошибка: неожиданный символ в ” или неожиданная числовая константа. Я использую следующее:
install.packages("RPostgreSQL")
install.packages("DBI")
library(RPostgreSQL)
Я полагаю, что дело не в синтаксисе, а в кавычках, которые я использую. Каков правильный этикет кавычек в R при использовании числовых и категориальных значений? Все выражение select должно начинаться и заканчиваться на “select ….”, верно?
Также добавлю, как установить подключение к вашему DTW (добавьте информацию о вашем DWH):
con <- dbConnect(RPostgreSQL::PostgreSQL(),
dbname="DBNAME",
host= "HOSTNAME",
port=0000,
user="youruser",
password="yourpassword")
Я понимаю ваш вопрос так: я пытаюсь отправить этот запрос в базу данных, но это не работает. Насколько я вижу, проблема здесь:
"select id as ID,
date_c."Professional_Status" as
Вы сначала начинаете с двойных кавычек, и R считает, что строка заканчивается на следующей двойной кавычке, то есть перед Professional_Status. Используйте либо одинарные кавычки, как вы делаете в date="2018-01-19"
либо используйте одинарные кавычки на концах и двойные между ними. Не смешивайте стили, это не сработает.
Поскольку профессиональный статус не определенная переменная и не является допустимым оператором R, это приведет к ошибке.
Несколько небольших советов:
Если вы хотите заменить professional_status на переменную, которую вы определили в своей сессии R, используйте что-то вроде paste("text", variable " text")
или используйте отличный пакет glue, который позволяет вам писать glue("text {variable} text")
Последний совет, если вы используете IDE, например RStudio, вы можете увидеть, что текст заканчивается на первой второй кавычке, потому что подсветка различна.
Ответ или решение
Для решения проблемы с выполнением SQL-запроса в R, после установления соединения с базой данных DWH, необходимо учесть несколько аспектов, касающихся синтаксиса и правильной работы с кавычками.
Установление соединения с БД
Для начала убедитесь, что соединение с базой данных установлено корректно. Пример кода для подключения к PostgreSQL:
library(RPostgreSQL)
library(DBI)
con <- dbConnect(RPostgreSQL::PostgreSQL(),
dbname = "DBNAME",
host = "HOSTNAME",
port = 0000,
user = "youruser",
password = "yourpassword")
Формирование SQL-запроса
При формировании SQL-запроса в R важно точно следовать правилам синтаксиса, особенно в отношении кавычек. В вашем запросе присутствует несколько ошибок, связанных с использованием кавычек. Давайте разберем оригинальный запрос и исправим его:
LR <- dbGetQuery(con, "
SELECT
id AS ID,
date_c.\"Professional_Status\" AS Prof_Status,
CASE WHEN talk_sec >= 5 THEN 1 ELSE 0 END AS Established_Connection
FROM
id_collect AS id_c
LEFT JOIN
date_conncet AS date_c ON id_c.date = date_c.date
WHERE
date::date = '2018-01-19'
AND country = 'IT'
AND type = 'shop'
AND district = 'South'
AND interaction IS TRUE
")
Объяснение изменений:
-
Кавычки: В SQL строковые значения должны быть заключены в одинарные кавычки (
'
). Для идентификаторов, которые содержат символы, отличные от букв и цифр (например, пробелы), следует использовать двойные кавычки ("
). В вашем случае колонкаProfessional_Status
была обрамлена двойными кавычками без экранирования, что привело к ошибке. -
Сопоставление значений: В вашем запросе для сравнения используется неправильный синтаксис для строк. Например, вместо
date="2018-01-19"
нужно использоватьdate::date = '2018-01-19'
. -
NULL проверки: В SQL для проверки значения
NULL
правильным синтаксисом будет использоватьIS NULL
илиIS NOT NULL
, в вашем примере логически правильный вариант уже применён:interaction IS TRUE
.
Заключение
Решив проблему с кавычками и корректно составив запрос, вы должны получить результат без ошибок. Убедитесь, что ваши данные и типы совпадают с ожидаемыми значениями в базе данных. Правильное обращение с кавычками и структура запроса являются ключом к успешному выполнению ваших SQL-инструкций в R.
Если у вас возникнут дополнительные вопросы или потребуется помощь с другими аспектами работы с R и базами данных, не стесняйтесь обращаться за консультацией.