2017-09-30 4 views
0

J'ai une trame de données locale de plus de 4000 lignes et environ 10 colonnes. Actuellement, en utilisant la fonction dbWriteTable pour écrire la table dans le serveur SQL en utilisant R. Mais il est lent lent (prend plus de 30 minutes) Y at-il une autre approche pour cela en utilisant ce que je peux le faire plus vite?Alternate pour dbwritetable pour écrire des tables de R à sql server

+1

SQL Server ou MySQL? –

+0

SQL Server est-il –

+0

_Microsoft_ SQL Server? –

Répondre

0

Pensez à exporter le dataframe à csv et exécuter de SQL Server BULK INSERT:

Vous pouvez également enregistrer le csv au format Excel (.xlsx) ou directement à partir de R au format Excel et exécuter un distributed query dans un l'action make table:

-- Adjust path and sheet name 
SELECT * 
INTO myNewTable 
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 
    'Data Source=C:\Path\To\File.xlsx;Extended Properties=Excel 12.0')...SheetName$ 


SELECT * 
INTO myNewTable 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Data Source=C:\Path\To\File.xlsx;Extended Properties=Excel 12.0', SheetName$) 

Remarques

  • Bulk operations must be granted l'utilisateur appelant l'action qui est un droit au niveau du serveur et non au niveau de la base de données. Par conséquent, vous ne pourrez peut-être pas exécuter la commande via R, mais dans la console SSMS.
  • Ad Hoc Distributed queries doit être activé sur la base de données pour se connecter aux sources de données distantes qui utilisent OLE DB.
  • Les requêtes distribuées supposent que vous disposez de SQL Server et de MS Office dans la même architecture binaire: les deux sur les installations 64 bits avec le moteur d'accès installé. Sinon, le téléchargement gratuit MS 2007/2010/2013/2016 est disponible. Voir 2016. Si SQL Server est sur 32 bits, utilisez l'ancien Microsoft.JET.OLEDB.4.0 et enregistrez le fichier Excel dans l'ancien format .xls avec les propriétés Excel 8.0.