2008-12-24 2 views
6

Aus irgendeinem Grund habe ich viele Kunden, die vorhandene Daten in Tabellen gespeichert haben. Oft gibt es hunderte, wenn nicht sogar tausende von Items in jeder Tabelle, und die Aufforderung an den Kunden, sie manuell über eine Webseite einzugeben (oder der Himmel verbietet es, sie auf diese Weise selbst zu importieren) kommt nicht in Frage. In der Regel wird mit diesen Daten die Spreadsheet-Spalte nicht einfach der Datenbankspalte zugeordnet. Das wäre zu einfach. Oft müssen die Daten manipuliert werden, bevor sie in die Datenbank gehen (Daten müssen durch Kommata getrennt werden, usw.) oder die Daten müssen über mehrere Tabellen verteilt werden. Oder beides.Wie importieren Sie Daten aus einer Tabelle normalerweise in mehrere Datenbankspalten?

Ich stelle diese Frage, nicht weil ich nicht über eine Vielzahl von Möglichkeiten weiß, es zu tun, sondern weil ich mich nicht auf eine Art und Weise entschieden habe, die nicht mehr Arbeit braucht, als sie sollte . Bisher habe ich alle folgenden Ansätze genommen (und wahrscheinlich mehr, dass ich vergessen habe):

  • Excel Unter Verwendung der Daten zu ändern, so ist es ein wenig einfacher
  • Importieren der gesamten Tabelle zu importieren eine temporäre Tabelle in und dann mit SQL Import
  • ein Skript zu schreiben und die Daten mit dem Import

Bisher mit einem Skript die Art und Weise wurde (ich habe VBScript, C# und jetzt Rubin verwendet wird), dass schien am flexibelsten, aber es fühlt sich immer noch etwas klobig an. Ich muss diese Aufgabe genug ausführen, dass ich sogar daran gedacht habe, ein wenig DSL dafür zu schreiben, nur um die Dinge zu beschleunigen.

Aber bevor ich das tue, bin ich neugierig, gibt es einen besseren Weg?

Antwort

3

Sie müssen Grenzen setzen, wenn Sie können. Sie sollten versuchen, eine Vorlage für die Verwendung mit den erwarteten Daten bereitzustellen, einschließlich Dateityp (Excel, CSV usw.), Spaltennamen, gültigen Werten usw. Sie sollten es dem Benutzer ermöglichen, nach der Datei zu suchen und sie hochzuladen auf deiner Seite/deinem Formular.

Sobald die Datei hochgeladen ist, müssen Sie Validierung und Import durchführen. Sie können dazu ADO.NET, Dateiströme, DTS/SSIS oder Office-Automatisierung verwenden (wenn Sie den Microsoft-Stack verwenden). Im Validierungsabschnitt sollten Sie dem Benutzer genau mitteilen, was sie falsch gemacht haben oder ändern müssen. Dies kann beinhalten, dass die Validierungsseite die tatsächlichen Daten in einem Datagrid hat und rote Labels mit Fehlern in der exakten Zeile/Spalte versehen werden. Wenn Sie Office-Automatisierung verwenden, können Sie ihnen die genaue Zellnummer geben, aber der Office-PIA ist eine Nervensäge.

Sobald die Validierung akzeptiert wurde, können Sie die Informationen nach Belieben importieren.Ich bevorzuge es, es in eine Staging-Tabelle zu setzen und einen gespeicherten Proc zu verwenden, um es zu laden, aber das bin nur ich. Einige bevorzugen es, das Objektmodell zu verwenden, aber das kann sehr langsam sein, wenn Sie viele Daten haben.

Wenn Sie persönlich diese Dateien manuell laden und hineingehen und sie manipulieren müssen, würde ich vorschlagen, die Gemeinsamkeit zwischen ihnen zu finden und einen Standard zu entwickeln, dem ich folgen kann. Sobald Sie das haben, können Sie es so machen, dass der Benutzer es selbst tun kann, oder Sie können es selbst viel schneller machen.

Ja, das ist eine Menge Arbeit, aber in der langen falschen, wenn es ein Programm gibt, das 95% der Zeit funktioniert, gewinnt jeder.

Wenn dies eine Situation sein wird, die einfach nicht automatisiert werden kann, dann müssen Sie wahrscheinlich nur eine Vanilla-Staging-Tabelle haben und SQL zum Import haben. Sie müssen die Daten in eine Staging-Tabelle laden, die grundlegende Manipulation durchführen und dann in die Staging-Tabelle laden, die Ihr SQL erwartet.

Ich habe so viele Importe und ETL-Tools gemacht, und es gibt wirklich keinen einfachen Weg, damit umzugehen. Die einzige Möglichkeit besteht darin, einen vernünftigen Standard zu entwickeln und dabei zu bleiben.

+0

Die meisten Kunden sind ziemlich gut darin, einem Standard zu folgen, wenn die Importe häufig vorkommen. Die größten Probleme treten beim Importieren von Daten auf, die nur einmal importiert werden müssen (vor dem Start einer Site oder wenn neue Features hinzugefügt werden usw.). –

+0

Das scheint mir einzigartig zu sein. Und das sind die Zeiten, in denen wir unsere Jobs hassen. –

+0

Ich habe in der Vergangenheit MSSQL DTS dafür verwendet, und es hat gut funktioniert. Sie sollten das DTS-Paket in ein Protokoll in der Datenbank schreiben lassen, damit Sie wissen, wann es erfolgreich ist oder fehlschlägt. –

2

ja .. das ist einfach scheiße.

Ich würde mit dem Skript gehen. Und ich nehme an, Sie haben sich wiederholende Spalten, die einer einzelnen Zeile in einer anderen Tabelle entsprechen müssen. Ich würde vernünftige Übereinstimmungen machen und wenn Sie auf eine Zeile stoßen, mit der das Skript nicht umgehen kann, und die Daten verschieben ... dann loggen Sie es und lassen Sie es von jemandem manuell machen.

+0

Ich habe wiederholte Spalten wie Sie beschreiben, und vernünftige Abstimmung ist so ziemlich, was ich Kunden gesagt habe, dass ich tun kann. Wenn sie keine eindeutige ID angeben können, verstehen sie, dass Dinge nicht immer perfekt zusammenpassen. –

2

Es sind natürlich die kleinen Details, die Sie umbringen werden, aber im Allgemeinen hatte ich Erfolg beim Exportieren der Daten als CSV aus Excel, dann Lesen mit Hilfe eines Rools oder Skripts, Munging je nach Bedarf und es einfügen. Je nachdem, wie wunderbar meine Umgebung ist, kann dies mit einer Datenbankschnittstelle zur Skriptsprache erfolgen, bis hin zum Schreiben von SQL INSERT-Anweisungen in eine Skriptdatei.

Es sind gute CSV-Pakete für Python, Ruby und Perl verfügbar.

+0

Ruby hat tatsächlich eine Bibliothek, die (merkwürdigerweise) Spreadsheet genannt wird, die auch für den direkten Import aus Excel funktioniert. Ich hatte Probleme mit der ParseExcel-Bibliothek (was ein Perl-Port ist, denke ich), aber Spreadsheet baut ParseExcel ab und scheint eine Menge Probleme behoben zu haben. –

0

Ein DSL ist der Weg zu gehen.

Erstellen Sie ein Domänenmodell für Ihr Problem. Sie sprechen über Zellen, Spalten, Zeilen, Datenbanktabellen, Aufteilen von Feldern, Kombinieren von Feldern, Zuordnen von Zellen zu Datenbankspalten, so dass Sie die benötigten Konzepte benötigen. Außerdem möchten Sie wahrscheinlich Bereiche (von Zellen) und Blätter.

In einer einfachen Ansicht werden nur die Werte in den Tabellen angezeigt, nicht die zugrunde liegenden Formeln. Das Exportieren der Tabelle als tabulatorgetrennter Text ermöglicht Ihnen den Zugriff darauf. Wenn Sie auf die Formeln zugreifen müssen, verwenden Sie besser die XML-Darstellung, entweder die XML-Tabelle oder das Office-XML-Format.

Sie könnten in der Lage sein, mit einem DSL in Excel zu kommen. Dies könnte Ihren klügeren Benutzern ermöglichen, das Mapping (teilweise) zu tun.

Verwandte Themen