Lettura di file CSV situati su un server Linux e aggiornamento delle tabelle in un database SQL Server

1

Mi chiedevo come potevamo importare i file CSV che si trovano su un server Red Hat Linux in tabelle del database SQL Server.

So che possiamo scrivere una stored procedure / bulk insert per leggere i file che si trovano sullo stesso server Windows di SQL Server e aggiornare il database, ma non sappiamo come farlo quando i file sono presenti su un server Linux .

Qualsiasi aiuto sarebbe molto apprezzato.

    
posta user1345260 05.08.2013 - 11:41
fonte

1 risposta

2

La chiave per la connessione a un MS SQL Server da posizioni arbitrarie è ODBC .

Stai cercando un linguaggio che possa gestire facilmente la lettura di csv e inserire i dati su ODBC.

Ci sono diverse scelte per ODBC. Se sei un negozio Java, puoi andare a ottenere jdbc per SQL Server e connetterti a il database in questo modo. Chiedi a .jar di essere parte del tuo percorso di classe e connetterti. Probabilmente questo dovrebbe essere l'opzione se hai persone con tecnologie di dettatura elevate (java è abbastanza sicuro e puoi sempre trovare o assumere un programmatore java).

Me? Sono un ragazzo perl nel cuore. Scriccatura di un file di dati ed esportazione in un altro è un classico dominio perl soluzione.

Con perl, si otterrebbe DBI ( documenti ) per l'interfaccia con un livello di database, e quindi DBD :: CSV ( tutorial ) per leggere i dati dal file csv come se fosse era un database stesso, quindi DBD :: ODBC per scrivere su un ODBC connessione. L'installazione di moduli perl tramite CPAN è abbastanza semplice (anche se ammetto che lo dico dopo averlo fatto molte, molte volte).

Questo potrebbe essere fatto con Text :: CSV invece . Tuttavia, vi è una certa eleganza nell'approccio DBD di scrivere un programma per leggere da un database arbitrario (fare qualsiasi trasformazione appropriata sui dati) e scrivere su un altro database arbitrario. Se fatto bene, e ti ritrovi a voler copiare i dati da un altro database a un certo punto, diventa una modifica abbastanza piccola al codice (installa il driver DBD appropriato per il database e leggi i dati.

Adottando un approccio completamente diverso che si piega di più nel mondo sysadmin rispetto al dominio del programmatore, è possibile spostare i dati dalla macchina Linux alla macchina Windows su base regolare.

  • Puoi mettere i file su una condivisione di samba e montarli da windows.
  • Opzione simile a quella precedente, potresti rendere il file disponibile su un server web e poi recuperarlo ed elaborarlo su Windows.
  • Con i pacchetti appropriati, si potrebbe montare una condivisione Windows su Linux (qualcosa lungo la linea di mount -t cifs -o guest,uid=client_user,gid=users //192.168.1.100/share /path_to/mount o //192.168.44.100/share /path_to/mount cifs guest,_netdev 0 0 in / etc / fstab)
  • Invece di condividere linux in windows, o windows in linux, NAS (network attached storage) è un modo semplice per avere un singolo server (non linux o windows) che serve i file a ciascuno.
  • Configura un server ftp su linux e ha un lavoro programmato per estrarre il file da windows.
  • Avere un lavoro automatico su linux ( cron ) ftp il file su windows (questo presuppone che tu abbia impostato un ftp server su alcune macchine Windows).
  • Crea un'app Web su Windows che può inserire un file csv in un database, chiama questa app web tramite arricciatura da finestre.

Queste opzioni richiedono un maggior grado di sincronizzazione tra le macchine. Rendere il file disponibile richiede che entrambe le macchine possano accedervi reciprocamente. Questo può essere difficile se si dice, nel dmz e un altro no. Avere due serie di programmi per eseguire il lavoro su macchine diverse (copia file, file di processo) richiede che gli orologi siano sincronizzati in modo ragionevole e siano in grado di eseguire più serie di processi pianificati.

    
risposta data 05.08.2013 - 14:40
fonte

Leggi altre domande sui tag