Мне нужна лучшая идея, чтобы обойти RMySQL
.
У меня есть фрейм данных myTable
, хранящийся на сервере MySQL. Каждая строка представляет заказ от клиента и содержит имя клиента, идентификатор заказа, дату и т. Д.
Моя рабочая среда R
. Каждый раз, когда я работаю за этой таблицей, я вызываю данные, используя пакет RMySQL
. Но я никогда не называю данные целиком, потому что они слишком большие, чтобы их можно было обойти. Вместо этого я отфильтровываю нужные данные, используя следующую инструкцию:
db <- with(connectionDb, dbConnect(MySQL(),
user = user,
password= password,
dbname = dbname,
host = host))
# connectionDb returns user, password, dbname, host from our credential file.
dbSendQuery(conn = db, 'set character set "utf8"')
cond <- paste('SELECT * FROM myTable
WHERE organisation LIKE "Ikea"
AND dateA >= "2018-05-01" AND dateA < "2018-06-01"')
export <- dbGetQuery(conn = db, statement = cond)
И фрейм данных export
выглядит так в R
.
organisation Order_ID dateA dateB dateC dateD
Ikea a 2018-04-01 2018-05-07 2018-05-09 2018-05-01
Ikea a 2018-06-01 2018-05-03 2018-05-29 NA
Ikea a 2018-04-02 2018-05-01 2018-07-08 2018-05-26
Ikea b 2018-06-02 2018-05-01 NA 2018-05-26
Ikea b 2018-06-02 2018-05-01 NA 2018-05-26
Ikea b NA 2018-05-05 2018-08-02 2018-06-01
Ikea c 2018-06-01 2018-05-07 2018-05-09 2018-05-01
Ikea c 2018-06-01 2018-05-03 NA NA
Ikea c 2018-08-02 2018-05-09 2018-07-08 2018-05-26
Но теперь, в таблице, хранящейся на сервере MySQL, я хочу добавить новый столбец Billed
, который равен 1, если мы уже выставили счет за заказ, и 0, если мы этого не сделали. Поэтому результат должен выглядеть следующим образом.
organisation Order_ID dateA dateB dateC dateD Billed
Ikea a 2018-04-01 2018-05-07 2018-05-09 2018-05-01 0
Ikea a 2018-06-01 2018-05-03 2018-05-29 NA 1
Ikea a 2018-04-02 2018-05-01 2018-07-08 2018-05-26 1
Ikea b 2018-06-02 2018-05-01 NA 2018-05-26 0
Ikea b 2018-06-02 2018-05-01 NA 2018-05-26 1
Ikea b NA 2018-05-05 2018-08-02 2018-06-01 0
Ikea c 2018-06-01 2018-05-07 2018-05-09 2018-05-01 1
Ikea c 2018-06-01 2018-05-03 NA NA 1
Ikea c 2018-08-02 2018-05-09 2018-07-08 2018-05-26 0
У меня есть несколько идей, чтобы сделать это, но я не уверен, что они хороши.
Идея 1. Вызовите таблицу с запросом выше, добавьте в таблицу новый столбец в R и перезапишите всю таблицу, используя функцию dbWriteTable
. Но я боюсь, что перезапись всей таблицы может изменить формат исходных данных (str, lgl, numeric и т. Д.).
Идея 2: Вызовите таблицу с запросом выше, создайте новый фрейм данных billing
, который имеет только столбцы Order_ID
и Billed
, а в MySQL-сервере объедините billing
и исходную таблицу данных на Tour_ID
,
В любом случае я не уверен, что произойдет с исходной таблицей данных на сервере, особенно со строками, которые не были получены функцией dbGetQuery
. Собирается ли создать новый столбец Billed
с 0 и 1 для перезаписанных строк, а для остальных строк они будут всеми NA?
Так что я ищу какие-нибудь лучшие и стабильные идеи для выполнения этой задачи. Рабочий процесс хорош? Какие функции я должен использовать?
Спасибо за любую помощь!