Запуск запроса в R после установления соединения с базой данных

Вопрос или проблема

Кажется, я не могу понять, что не так в следующем заявлении. Подключение к 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
")

Объяснение изменений:

  1. Кавычки: В SQL строковые значения должны быть заключены в одинарные кавычки ('). Для идентификаторов, которые содержат символы, отличные от букв и цифр (например, пробелы), следует использовать двойные кавычки ("). В вашем случае колонка Professional_Status была обрамлена двойными кавычками без экранирования, что привело к ошибке.

  2. Сопоставление значений: В вашем запросе для сравнения используется неправильный синтаксис для строк. Например, вместо date="2018-01-19" нужно использовать date::date = '2018-01-19'.

  3. NULL проверки: В SQL для проверки значения NULL правильным синтаксисом будет использовать IS NULL или IS NOT NULL, в вашем примере логически правильный вариант уже применён: interaction IS TRUE.

Заключение

Решив проблему с кавычками и корректно составив запрос, вы должны получить результат без ошибок. Убедитесь, что ваши данные и типы совпадают с ожидаемыми значениями в базе данных. Правильное обращение с кавычками и структура запроса являются ключом к успешному выполнению ваших SQL-инструкций в R.

Если у вас возникнут дополнительные вопросы или потребуется помощь с другими аспектами работы с R и базами данных, не стесняйтесь обращаться за консультацией.

Оцените материал
Добавить комментарий

Капча загружается...