Domanda

Per qualsiasi motivo, ho molti clienti che dispongono di dati esistenti archiviati in fogli di calcolo.Spesso ci sono centinaia, se non migliaia di elementi in ciascun foglio di calcolo, e chiedere al cliente di inserirli manualmente tramite un sito Web (o il cielo non voglia importarli io stesso in questo modo) è fuori questione.In genere, questi dati non associano semplicemente la colonna del foglio di calcolo alla colonna del database.Sarebbe troppo facile.Spesso i dati devono essere manipolati prima di essere inseriti nel database (i dati devono essere divisi con virgole, ecc.) oppure i dati devono essere distribuiti su più tabelle.O entrambi.

Sto ponendo questa domanda, non perché non conosca una moltitudine di modi per farlo, ma perché non ho scelto un modo che non sembri richiedere più lavoro del dovuto.Finora ho adottato tutti i seguenti approcci (e probabilmente altri che ho dimenticato):

  • Utilizzo di Excel per modificare i dati, quindi è un po' più semplice importarli
  • Importazione dell'intero foglio di calcolo in una tabella temporanea e quindi importazione con SQL
  • Scrivere uno script e importare i dati con esso (ho usato VBScript, C# e ora Ruby)

Finora, l'utilizzo di uno script è sembrato il modo più flessibile, ma risulta comunque un po' macchinoso.Devo svolgere questo compito così tanto che ho persino preso in considerazione l'idea di scrivere un piccolo DSL per questo, solo per accelerare le cose.

Ma prima di farlo, sono curioso, esiste un modo migliore?

È stato utile?

Soluzione

Devi stabilire dei limiti, se puoi.Dovresti provare a fornire loro un modello da utilizzare con i dati previsti, che includa il tipo di file (Excel, CSV, ecc.), nomi di colonne, valori validi, ecc.Dovresti consentire all'utente di cercare il file e caricarlo sulla tua pagina/modulo.

Una volta caricato il file, è necessario eseguire la convalida e l'importazione.A tale scopo è possibile utilizzare ADO.NET, flussi di file, DTS/SSIS o Office Automation (se si utilizza lo stack Microsoft).Nella parte di convalida, dovresti dirlo all'utente esattamente cosa hanno fatto di sbagliato o cosa devono cambiare.Ciò potrebbe includere il fatto che la pagina di convalida contenga i dati effettivi in ​​una griglia dati e fornisca etichette rosse con errori sulla riga/colonna esatta.Se utilizzi Office Automation, puoi fornire loro il numero di cellulare esatto, ma Office PIA è una seccatura.

Una volta accettata la convalida, puoi importare le informazioni come preferisci.Preferisco inserirlo in una tabella di staging e utilizzare un proc memorizzato per caricarlo, ma sono solo io.Alcuni preferiscono utilizzare il modello a oggetti, ma questo può essere molto lento se si dispone di molti dati.

Se carichi personalmente questi file manualmente e devi entrare e manipolarli, suggerirei di trovare punti in comune tra loro e trovare uno standard da seguire.Una volta ottenuto ciò, puoi fare in modo che l'utente possa farlo da solo oppure puoi farlo tu stesso molto più velocemente.

Sì, c'è molto lavoro da fare, ma nel caso sbagliato, quando c'è un programma che funziona il 95% delle volte, tutti vincono.

Se questa sarà una situazione che non può essere automatizzata, probabilmente dovrai solo avere una tabella di staging vanilla e avere SQL per l'importazione.Dovrai caricare i dati in una tabella di staging, eseguire la manipolazione di base e quindi caricarli nella tabella di staging prevista dal tuo SQL.

Ho eseguito così tante importazioni e strumenti ETL e non esiste davvero un modo semplice per gestirli.L’unico modo è trovare davvero uno standard che sia ragionevole, attenervisi e programmare attorno a quello.

Altri suggerimenti

yeah .. che proprio schifo.

Vorrei andare con lo script. E presumo che avete a ripetere le colonne che devono corrispondere a una singola riga in un'altra tabella. Farei corrispondenza ragionevole e se si incontra una riga che lo script non può affrontare e spostare i dati ... quindi accedere e fare qualcuno farlo manualmente.

E 'i piccoli dettagli che ti ammazzo su questo, naturalmente, ma in generale, ho avuto successo con l'esportazione dei dati in formato CSV da Excel, quindi la lettura utilizzando un Rool o uno script, munging in base alle esigenze, e inserendolo. A seconda della magnificenza del mio ambiente, che può essere fatto con un'interfaccia di base di dati per il linguaggio di scripting, fino ad includere la scrittura istruzioni SQL INSERT in un file di script.

Ci sono buoni pacchetti CSV disponibile per Python , rubino , e Perl .

Una DSL è la strada da percorrere.

Creare un modello di dominio per il vostro problema. Lei parla di celle, colonne, righe, le tabelle del database, i campi di scissione, combinando i campi, la mappatura da cellule di colonne di database, in modo che sono i concetti che è necessario. Inoltre, probabilmente si vuole gamme (delle cellule), e le lenzuola.

Una visione semplice guarda solo ai valori nelle fogli di calcolo, non le formule sottostanti. Esportazione del foglio di calcolo come testo separato da tabulazioni consente di accedere a questo. Se è necessario accedere alle formule, si sta meglio che con la rappresentazione XML, sia l'XML-foglio di calcolo, o il formato Office XML.

Potreste essere in grado di venire con un modem DSL in Excel. Questo potrebbe consentire agli utenti più intelligenti da fare (in parte) la mappatura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top