Frage

Aus irgendeinem Grund habe ich eine Menge von Kunden, die Daten verfügen, die in Tabellen gespeichert ist. Oft gibt es Hunderte, wenn nicht Tausende von Artikeln in jeder Tabelle und den Client fragen sich manuell über eine Website zu betreten (oder Himmel sie auf diese Weise selbst verbietet den Import) indiskutabel ist. Typischerweise wird diese Daten nicht einfach Kalkulationstabelle Spalte Datenbankspalte zuordnen. Das wäre zu einfach. Oft müssen die Daten, bevor sie in die Datenbank manipuliert werden (Daten müssen durch Komma aufgeteilt werden, usw.) oder die Daten müssen über mehrere Tabellen verteilt werden. Oder beides.

Ich frage diese Frage nicht, weil ich weiß nicht, aus einer Vielzahl von Möglichkeiten, es zu tun, aber weil ich nicht auf eine Art und Weise ständiger fühlt sich nicht wie es sollte es mehr Arbeit als dauert. Bisher habe ich alle folgenden Ansätze genommen (und wahrscheinlich mehr, dass ich vergessen habe):

  • Excel Unter Verwendung der Daten zu ändern, so dass es ein wenig einfacher zu importieren ist
  • Importieren der gesamten Tabelle in eine temporäre Tabelle und dann mit SQL
  • Importieren
  • ein Skript zu schreiben und die Daten mit dem Import
  • (Ich habe VBScript, C # und jetzt Rubin verwendet)

Bisher einem Skript hat sich die Art und Weise gewesen, die flexibelste schien, aber es fühlt sich immer noch ein wenig klobig. Ich habe diese Aufgabe genug auszuführen, dass ich sogar ein wenig DSL in Betracht gezogen habe das Schreiben für sie, nur die Dinge zu beschleunigen.

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

War es hilfreich?

Lösung

Sie haben Grenzen zu setzen, wenn Sie können. Sie sollten eine Vorlage versuchen und sorgen für sie mit den erwarteten Daten zu verwenden, die Dateityp enthält (Excel, CSV, etc.), Spaltennamen gültige Werte, usw. Sie sollten die für die Datei verwendet, erlauben zu durchsuchen und es hochladen auf Ihrer Seite / Form.

Sobald die Datei hochgeladen ist, müssen Sie die Validierung und die Einfuhr tun. Sie können ADO.NET, Datei-Streams, DTS / SSIS oder Office Automation, dies zu tun (wenn Sie den Microsoft-Stack verwenden). Im Prüfabschnitts, sollten Sie den Benutzer sagen genau , was sie falsch gemacht haben oder ändern müssen. Dies könnte die Validierung Seite mit hat die aktuellen Daten in einem Datagrid und Bereitstellung von roten Etikett mit Fehlern auf der genauen Zeile / Spalte. Wenn Sie Office Automation verwenden, können Sie ihnen die genaue Zellzahl geben, aber das Büro PIA ist ein Schmerz im Nacken.

Sobald die Validierung akzeptiert wird, können Sie die Informationen jedoch importieren Sie möchten. Ich ziehe es in eine Staging-Tabelle setzen und eine gespeicherte Prozedur verwenden, es zu laden, aber das ist nur meine Meinung. Manche bevorzugen das Objektmodell zu verwenden, aber dies kann sehr langsam sein, wenn Sie eine große Datenmenge haben.

Wenn Sie persönlich sind diese Dateien manuell geladen und mit gehen und zu manipulieren, würde ich vorschlagen, die Gemeinschaftlichkeit unter sie zu finden und kam mit einem Standard zu folgen. Sobald Sie das haben, können Sie es so machen, kann der Benutzer es selbst tun, oder Sie können es selbst viel tun schneller.

Ja, das ist eine Menge Arbeit, aber auf lange falsch, wenn es ein Programm, das 95% der Zeit arbeitet, jeder gewinnt.

Wenn dies eine Situation sein wird, das kann einfach nicht automatisiert werden, dann werden Sie wahrscheinlich nur eine Vanille-Staging-Tabelle und SQL haben müssen müssen die Einfuhr. Sie werden die Daten in einer Staging-Tabelle geladen werden müssen, die grundlegende Manipulation tun, und dann laden in te Staging-Tabelle, die Ihre SQL erwartet.

Ich habe so viele Importe und ETL-Tools durchgeführt, und es gibt wirklich keine einfache Möglichkeit, es zu handhaben. Der einzige Weg ist, um wirklich mit einem Standard zu kommen, die angemessen ist und dabei zu bleiben und das Programm rund um die.

Andere Tipps

ja .. das saugt einfach.

Ich würde mit dem Skript gehen. Und ich nehme an, Sie haben Spalten wiederholen, die eine einzelne Zeile in einer anderen Tabelle übereinstimmen müssen. Ich würde vernünftige Anpassungs tun, und wenn Sie eine Zeile auftreten, dass das Skript nicht mit umgehen können und die Daten verschieben ... log er dann und machen jemand es manuell tun.

Es ist die kleinen Details, die Sie auf diesem töten würden, natürlich, aber im Allgemeinen, ich habe Erfolg gehabt mit den Daten als CSV aus Excel exportieren, lesen dann ein rool oder Skript, munging es je nach Bedarf, und Einsetzen. Je nach wonderfulness meiner Umgebung, das kann mit einer Datenbank Schnittstelle zur Skriptsprache durchgeführt werden, bis einschließlich SQL INSERT-Anweisungen in eine Skriptdatei zu schreiben.

Es gibt gute CSV Pakete für Python , Rubin und Perl .

Eine DSL ist der Weg zu gehen.

Erstellen Sie ein Domänenmodell für Ihr Problem. Sie sprechen von Zellen, Spalten, Zeilen, Datenbanktabellen, Spalten Feldern, die Kombination von Feldern, die Kartierung von Zellen auf Datenbankspalten, so dass die Konzepte sind Sie benötigen. Darüber hinaus möchten Sie wahrscheinlich Bereiche (Zellen) und Blätter.

Ein einfacher Blick sieht nur auf den Werten in den Tabellen, nicht die zugrunde liegenden Formeln. Exportieren Sie die Tabelle als Tab-separierte Text können Sie auf das zuzugreifen. Wenn Sie Zugang zu den Formeln benötigen, sind Sie besser mit der 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. Das könnte Ihre intelligentere Benutzer erlauben, um die Zuordnung zu tun (zum Teil).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top