7
votes

Insert en vrac MS-SQL avec Rodbc

est-il possible d'effectuer une insertion en vrac dans un serveur MS-SQL (2000, 2005, 2008) à l'aide du paquet Rodbc?

Je sais que je peux le faire à l'aide de FreebCP, mais je suis curieux si le paquet Rodbc implémente cette partie de l'API Microsoft SQL et, sinon, à quel point il serait difficile de le mettre en œuvre.


0 commentaires

6 Réponses :


2
votes

Vous recherchez probablement ? SQLSAVE qui utilise un insert paramétré dans la requête (en tenant dans une seule opération) lorsque vous définissez rapide = true . .


5 commentaires

Nah, SQLSave fera plusieurs inserts. Je veux un insert en vrac qui est une seule transaction.


Est-ce que Fast = TRUE ne le fait-il pas comme une seule transaction?


des documents Rodbc: "logique. Si false, écrivez des données une ligne à la fois. Si true, utilisez une insertion paramétralisée dans ou mettez à jour la requête pour écrire toutes les données en une seule opération." .. Cependant, cela ne semble pas faire toute différence (lors de la rédaction de Netezza dans mon cas)


J'ai peur dans mon expérience de mon expérience rapide = t ou rapide = f ne change pas une chose. Les enregistrements sont insérés un par un quel que soit quoi. Au moins dans mon cas avec SQL Server 2012.


Pour moi, rapide = true, rend la fonction SQLSave ~ 3 fois plus rapide. Aussi sur SQL Server 2012.



2
votes

Maintenant, vous pouvez utiliser dbbulkcopy à partir du nouveau package RSQLServer :

Un scénario typique:

  1. Vous créez une matrice
  2. Vous l'enregistrez comme fichier CSV
  3. Vous appelez dbbulkcopy pour lire FIL et insérez-le à l'aide de BCP BCP de MS SQL Server.

    Ceci suppose que votre table est déjà créée dans la base de données: xxx


2 commentaires

Toute raison pour laquelle RsqlServer n'est pas sur le cran?


@Musx Parce qu'il est en cours de développement (spécialement documentaire et des tests) et utilise un package rclr qui n'est pas sur le cran aussi. Mais vous êtes encouragé à l'utiliser de GitHub et sera satisfait de tout retour d'information.



1
votes

De tout ce que je peux trouver, il n'y a pas de solution pour Insert en vrac à MySQL et rien qui fonctionne avec SSIS, c'est pourquoi Microsoft incluant la base de données Analytics avec SQL Server 2016 après avoir acheté Revolution R Analytics.

J'ai essayé de commenter la réponse précédente mais je n'ai pas la réputation de le faire.

Le fichier rsqlserver doit exécuter avec rclr et aucun de ces packages ne se comporte bien, notamment parce que les fonctions d'insertion SSQLServer mauvaise manipulation de type de données. Donc, si vous l'utilisez, vous n'aurez aucune idée de ce que vous regardez dans la table SQL autant d'informations de votre data.frame aura été transformée.

Considérant que le package Rodbc existe depuis 15 ans, je suis assez déçu que personne n'a créé une fonction d'insertion en vrac ...


2 commentaires

Point important sur RsqlServer, mais pour beaucoup d'entre nous, nous n'avons pas besoin de «regarder» les données (d'un point de vue r). Si cela a été modélisé et façonné et traité dans R, nous avons juste besoin du résultat dans la base de données et cela ne comporte pas ce que R transforme le type dans la base de données (tant qu'ils sont raisonnables et peuvent être lus par d'autres systèmes)


@Joe Je ne pense pas que je n'engagerais jamais quelqu'un qui dit "nous n'avons pas besoin de" regarder "les données".



1
votes

Notre N2KHelper peut utiliser BCP (BulkCopy) lorsqu'il est disponible. Lorsqu'il n'est pas disponible, il redevient à plusieurs instructions d'insertion.

Vous pouvez trouver le paquet sur https://github.com/inbo-natura2000/n2khelper

Installez-le avec devtools :: installe_git ("inbo-natura2000 / n2khelper") et recherchez le odbc_insert () fonction.


0 commentaires

5
votes

Consultez le nouveau ODBC et dbi paquets. DBI :: DBWRITETABLETABLE Ecrit environ 20 000 enregistrements par seconde ... beaucoup plus vite que les inserts de ligne de Rodbc :: sqlsave ()


2 commentaires

Je ne peux pas installer ODBC , il génère une erreur: Erreur: le chargement paresseux a échoué pour le package 'blob'


Cela ressemble à cela nécessite une question différente



2
votes

Utilisation de Rodbc, l'insert le plus rapide que nous ayons été en mesure de créer (260 millions d'insertions de rangées) ressemble à ce qui suit (en code PSeudo): xxx

si vous exécutez ceci De l'entre les serveurs, vous avez besoin d'un lecteur réseau que le serveur R puisse écrire sur (par exemple, un serveur avec des autorisations pour écrire sur la DB utilise le RScript pour la fabrication du code) et le serveur SQL peut lire. >


0 commentaires