Добавить новый столбец в существующую таблицу MySQL, используя RMySQL - PullRequest
0 голосов
/ 02 июля 2018

Мне нужна лучшая идея, чтобы обойти 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?

Так что я ищу какие-нибудь лучшие и стабильные идеи для выполнения этой задачи. Рабочий процесс хорош? Какие функции я должен использовать?

Спасибо за любую помощь!

...