Как вставить R-кадр данных в существующую таблицу в SQL Server - PullRequest
0 голосов
/ 14 февраля 2019

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

Мне удалось написать новую таблицу с использованием пакета DBI, но я не могу найти способ вставить в этот метод.Глядя на документацию, кажется, что способа вставки не существует.

Поскольку существует более 1000 строк данных, использование sqlQuery из пакета RODBC также кажется нереальным.

Кто-нибудь может предложить рабочий метод для вставки больших объемов данных из кадра данных в существующую таблицу SQL?

1 Ответ

0 голосов
/ 14 февраля 2019

У меня были аналогичные потребности при использовании R и PostGreSQL с использованием драйверов, специфичных для r-postgres.Я предполагаю, что подобные проблемы могут существовать с SQLServer.Лучшее решение, которое я нашел, - это запись во временную таблицу в базе данных с использованием dbWriteTable или одной из базовых функций для записи из потока для загрузки очень больших таблиц (например, для Postgres, postgresqlCopyInDataframe).Последнее обычно требует больше работы с точки зрения определения и выравнивания типов данных SQL и типов классов R, чтобы обеспечить запись, тогда как dbWriteTable, как правило, немного проще.После записи во временную таблицу выполните команду SQL для вставки в таблицу, как в среде базы данных.Ниже приведен пример использования высокоуровневых вызовов базы данных библиотеки DBI:

  dbExecute(conn,"start transaction;")
  dbExecute(conn,"drop table if exists myTempTable")
  dbWriteTable(conn,"myTempTable",df)
  dbExecute(conn,"insert into myRealTable(a,b,c) select a,b,c from myTempTable")
  dbExecute(conn,"drop table if exists myTempTable")
  dbExecute(conn,"commit;")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...