создание и вставка данных из фрейма данных R в Cloudera Impala с пакетом DBI - PullRequest
0 голосов
/ 10 декабря 2018

Я создал пару таблиц (фреймов данных) в R, которые мне нужно загрузить в Cloudera Impala. Я использую пакет DBI для соединения с Impala.Например, у меня есть:

df <-data.frame (x) </p>

Как вставить df в Impala в виде таблицы?

Я видел, что этоможно сделать с помощью dbSendUpdate (), поэтому я сделал что-то вроде этого:

dbSendUpdate (dbh, paste0 («Создать таблицу db.df as select * from», db))

, ноне повезло.

Есть идеи, как решить эту проблему с помощью этой функции или любой другой функции, которую я мог бы использовать для этого?

1 Ответ

0 голосов
/ 10 декабря 2018

Я думаю, что вместо этого вы должны использовать функцию dbCreateTable или dbWriteTable() из пакета DBI.

В вашем случае вы можете отправить df в следующем виде:

data <- DBI::dbCreateTable(con, "impala_new_df", df)

Где con - это соединение с вашей базой данных, "impala_new_df" - это имя новой таблицы, требуемой в Impala, а df - это фрейм данных, с которого вы пишете.Для этого вам, очевидно, потребуется доступ на чтение / запись к вашему экземпляру Impala.

Я считаю, что функция dbSendUpdate взята из пакета RJDBC.Который будет работать только если ваше соединение jdbc, а не odbc.Кроме того, я не верю, что использование paste0 будет вести себя так, как вы этого хотите.

Вот полезный справочник по базам данных в R: https://db.rstudio.com/odbc/

Update

Поскольку вы используете RJDBC, я считаю, что должно работать следующее:

dbSendUpdate(con, "Create Table ?", df)

Аналогично решению, приведенному здесь: https://stackoverflow.com/a/35407579/6535514

Если это не сработаетЯ бы начал искать в пакете implyr другие способы обойти это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...