Ich werde diese Frage vorwegnehmen, indem ich sage, dass ich für professionelle Softwareentwickler sehr neu bin.
Ich arbeite in einem Team, das Daten von anderen Gruppen in meinem Unternehmen aufnimmt und diese Daten in Berichte umwandelt, die von Geschäftsführern verwendet werden können.
Beim Übertragen und Parsen von Daten haben wir einige SQL-Anweisungen, die viel Daten verarbeiten. Fast alle SELECT
Anwendungen TRIM
, SUBSTR
, CAST
etc ausführlich Felder auf die richtige Größe und das Format zu reduzieren. Darüber hinaus gibt es viele Sonderfälle, die durch die Verwendung von CASE
Anweisungen in SELECT
's berücksichtigt werden .
Die von uns verwendete Teradata-Serversoftware gibt bemerkenswert kryptische Fehlermeldungen aus. Infolgedessen raten wir viel darüber, welche Daten welche SQL-Anweisung beschädigen.
Meine Frage ist: Wäre es eine gute Idee, diese etwas komplexen SQL-Anweisungen auf eine weniger komplexe Form zu reduzieren, bei der die Verarbeitung und die Behandlung von Sonderfällen weggelassen werden, und dies stattdessen in einem externen Skript oder Programm zu tun? Ist das sinnvoll?
quelle
Ich stimme dem bereits gemachten Vorschlag zu, eine Ansicht für diese Logik zu verwenden. Ich möchte nur noch etwas zu den Case-Aussagen hinzufügen. Beachten Sie, dass das Herausziehen der Case-Anweisungen aus dem SQL zu erheblichen Auswirkungen auf die Leistung des Systems führen kann. Diese Case-Anweisungen können die zurückgegebene Datenmenge erheblich reduzieren. Das Ausführen der Fallfilterung in der Datenbankebene über SQL-Anweisungen ist normalerweise viel effizienter als das Zurückziehen aller Daten und das Filtern in einem externen Skript oder Programm. Wenn Sie dies in Betracht ziehen, empfehle ich dringend, einige Datenanalysen und Leistungstests durchzuführen, bevor Sie mit dieser Lösung fortfahren.
quelle
Das Hinzufügen eines externen Prozesses erschwert normalerweise nur das Debuggen des Systems, hängt jedoch wirklich von der jeweiligen Situation ab. Verwenden Sie Ihr Urteilsvermögen . Berücksichtigen Sie die Zeit, die für die Entwicklung / Wartung von Out-of-Band-Projekten erforderlich ist.
Verwenden Sie bereits einen ETL- Prozess? Ich habe keine Erfahrung mit Teradata, aber die Trennung Ihrer Schritte bietet eine viel klarere Sicht auf die Vorgänge. Hier ist eine 2 Sekunden Übersicht:
Dies liefert normalerweise genügend Informationen, um diesen Systemtyp erfolgreich zu verwalten.
quelle
Ich wäre geneigt, die CASE-Bits an Ort und Stelle zu lassen, da diese mit der tatsächlichen Logik der Erzeugung der Daten für jemanden / eine Sache zum Konsumieren zusammenhängen. Wenn Sie diese herausnehmen, müssen Sie einen größeren Datensatz zurücksenden und der Client muss einige Verarbeitungsschritte ausführen. Jetzt haben Sie Ihre Berichts- "Logik" auf zwei separate Ebenen aufgeteilt, und dies ist nicht gut.
Aber ich würde jede Formatierung aus Ihrem Code wie ein heißer Stein löschen (es sei denn, sie ist speziell Teil von JOIN-Prädikaten usw.), da die Formatierung Aufgabe des Verbrauchers ist. Unabhängig davon, welches Berichtstool sie verwenden, sei es Excel, Crystal usw. ist gut darin, Sachen im richtigen Gebietsschema und im ganzen Jazz zu formatieren. Lassen Sie den Client das tun, was er kann (Dinge in hübschen Farben anzeigen), und lassen Sie den Server sich auf das konzentrieren, was er am besten kann - das Knacken von Daten.
quelle