Ankündigung

Einklappen
Keine Ankündigung bisher.

upload verschiedener CSV in verschiedenen mySQL DB Tabellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • upload verschiedener CSV in verschiedenen mySQL DB Tabellen

    Hallo zusammen,

    mein Name ist Daniel und Ich bin noch ganz neu hier im Forum, habe aber in letzter Zeit sehr aktiv Beiträge recherchiert und konnte auch schon einige interessante Dinge mitnehmen und lernen. Leider sind meine Programmierkenntnisse noch nicht sehr ausgeprägt, was sich aber hoffentlich bald ändert. Ich verstehe PHP, bin jedoch noch nicht in der Lage mir ein eigenes Script für den im folgenden beschriebenen Fall zu schreiben, weshalb ich mir hier im Forum Hilfe erhoffe.

    Die Aufgabe/ Das Ziel: Import von verschiedenen CSV Dateien in verschiedenen Tabellen einer MySql Datenbank.

    Ich habe bereits viele Informationen zu dem Thema gefunden und es gibt ja auch diverse Programme mit denen man dem Import einzelner Dateien vornehmen kann.
    Mein Ziel ist es aber Daten in der Datenbank per Batch/ Bulk Verarbeitung zu aktualisieren. Im Optimalfall führe ich ein Script auf meinem Server aus und alle Daten werden aktualisiert, ggf automatisiert über CronJobs.

    Ich habe verschiedenen csv Dateien ( bsp. DL1.csv, DL2.csv, DL3.csv, FL1.csv, EL1.csv usw. ). Die CSV Dateien enthalten jeweils 11 Spalten ( Spalte 1, spalte 2 , Spalte 3 etc ) und sind durch Komma getrennt. Diese Dateien liegen in einem Verzeichnis auf meinem Server ( bsp. Server/datenaustausch ). Parallel Dazu habe ich eine mySql Datenbank auf dem Server eingerichtet ( TestBD ). Innerhalb der DB habe ich bereits pro CSV Datei eine Tabelle angelegt ( bsp.TAB_DL1, TAB_DL2, TAB_DL3, TAB_FL1, TAB_EL1 usw. ).

    Die CSV Dateien haben immer einen unique Namen welcher sich nie ändert.

    Die CSV Dateien werden in regelmäßigen Abständen lokal aktualisiert. Hierzu schiebe ich einfach die aktuellen CSV Dateien welche ich Lokal erzeuge in das Serververzeichnis ( bsp. Server/datenaustausch ) und überschreibe die älteren Versionen.

    Hat diese Aktualisierung statt gefunden möchte ich automatisch alle Dateien in die My SQL Datenbank importieren und die alten Daten in der DB überschreiben. Im Optimalfall wie oben geschrieben per Ausführung eines php scripts. Es muss NIE eine neue Tabelle erzeugt werden. Es werden immer nur vorhandene CSV Dateien in den jeweiligen vorhandenen DB Tabellen überschrieben.

    Beim Import soll eine vorher festgelegte Zuordnung statt finden: DL1.csv wird importiert in TAB_DL1, DL2.csv wird importiert in TAB_DL2, DL3.csv wird importiert in TAB_DL3, usw.

    Wie oben geschrieben habe ich bereits einige Scripte zum Thema finden können, jedoch nicht speziell zu meinen Anforderungen.

    Ich wäre euch sehr dankbar wenn Ihr mir das Vorgehen einmal erläutern könntet. GGf. Hat ja auch bereits jemand eine ähnliche Aufgabe gelöst und kann den Code teilen ?


    Freue mich auf eure Antworten.


    Beste Grüße



    Daniel


  • #2
    Dafür brauchst du noch nicht mal PHP. Schau dir mal https://dev.mysql.com/doc/refman/8.0/en/load-data.html an:

    Code:
    LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;

    Kommentar


    • #3
      Danke Meister 1900, das hatte ich auch schon gesehen. Was mir hierbei nicht klar ist, ist wie ich das parallel für alle Dateien machen kann.
      Wie müsste der Code aussehen, wenn ich alle Daten auf einmal importieren ( mit der jeweils richtigen Zuordnung , csv in dazugehörige Tabelle ) möchte ?

      Kommentar


      • #4
        Fertigen Code bekommst du von mir hier nicht. Kurzanleitung was du machen kannst:
        • Mit glob() alle csv Dateinamen in ein Array holen
        • Datenbank-Verbindung herstellen (nimm gleich PDO ! )
        • In einer foreach-Schleife über alle Dateinamen gehen, jeweils mit String-Funktionen die Tabellen-Namen erzeugen, die LOAD DATA INFILE SQL-Anweisung erstellen und zur DB schicken
        PHP-Klassen auf github

        Kommentar


        • #5
          Danke Jspit für die Antwort, wenngleich mich deine Anleitung nicht wirklich weiter bringt. Wie ich oben bereits schrieb bin ich kompletter Anfänger. Sicherlich kann ich die syntax recherchieren und tue dies auch. Wenn ich aus dem was ich selber recherchiere schlau werden würde bräuchte ich ja nicht dieses Forum bemühen. Es wäre klasse wenn ich ein wenig mehr Erklärung zu dem von dir skizzierten Lösungsansatz erhalten könnte. Ich habe mir sehr viel mühe damit gemacht, meine Aufgabenstellung so präzise wie möglich zu schildern. Da wäre es wirklich sehr hilfreich wenn ich beispiele erhalten könnte wie beispielsweise die einzelnen abschnitte im code gestaltet werden können. Oder zumindest eine Erklärung welcher Teil im Code was genau bewirkt.

          Kommentar


          • #6
            Schau mal hier https://stackoverflow.com/questions/...mysql-database für Beispiele

            Kommentar


            • #7
              Die PHP-Lösung im Link von Meister1900 macht es fast so wie von mir #4 beschrieben. Nur mit einem gewaltigen Schönheitsfehler: Es wird das veraltete (und unter PHP 7 entfernte) MySQL Interface benutzt.

              diabolis01 : Das Forum hier ist nicht dafür da Einsteigern Grundlagen zu vermitteln. Die musst du dir schon selbst aneignen. S.a. Regeln und Richtlinien.
              Fange doch erstmal mit Punkt 1 (glob) an. Die wichtigsten Grundlagen findest du auch hier in der Wissenssammlung.
              PHP-Klassen auf github

              Kommentar


              • #8
                Im Grunde genommen willst du, das es dir jemand schreibt und dir auch erklärt was da im Einzelnen passiert, damit du daraus was lernen kannst.
                So funktionieren Fachforen aber nicht. Auch wenn du dir schon viel angelesen hast und dir bestimmt viel Mühe gibst, ist dein Vorhaben sehr ambitioniert für deinen Kenntnisstand.

                Du machst schon bei der Erstellung der Tabellen Anfängerfehler, in dem du diese durchnummerierst
                Innerhalb der DB habe ich bereits pro CSV Datei eine Tabelle angelegt ( bsp.TAB_DL1, TAB_DL2, TAB_DL3, TAB_FL1, TAB_EL1 usw. ).
                Auch die Verwendung von TAB_ als Präfix für eine Tabelle ist des Guten schon zu viel.

                Dein Konzept und was das für Daten sind und warum du das in einer DB haben willst die du dann leerst und wieder befüllst ist alles andere als nachvollziehbar. Du könntest ja auch mit PHP direkt auf die CSV Dateien zugreifen und diese ohne Umwege der DB verwenden.
                Aber das wird alles nicht klar, da auch nicht bekannt ist wie viele Datensätze es sind und welchen Zweck das ganze Vorhaben haben soll.

                Was soll zudem mit den Daten anschliesssend passieren?
                Wo kommen die her, warum erstellst du erst CSV Dateien und nimmst die Daten nicht direkt?
                Alles Fragen die du noch für dich beantworten solltest.

                Dann kommt das Konzept. Ist die DB notwendig, welche Vorteile bietet es mir ggü. Direkzugriff auf die CSV Daten.
                Warum so viele Tabellen, stehen die Daten in irgend einem Zusammenhang zueinader etc.

                Wenn du PHP lernen willst solltest du mit einem einfacherem Projekt beginnen.
                Wenn du eine Lösung haben willst, ist evtl die Auftragsvergabe besser geeignet.

                Die Links geben jedenfalls schon Lösungsansätze vor aus denen du ableiten kannst. Ist der Code jedoch zu schwer für dich ist die Aufgabe zu noch nicht die Richtige da zu fortgeschritten, in dem Fall solltest du noch mal ein Tutorial zur Hand nehmen und lernen.

                Kommentar


                • #9
                  Hallo Zusammen, vielen Dank an dieser Stelle für die zahlreichen Antworten.

                  Gern gehe ich auf die Fragen ein hier nun noch gestellt wurden und gebe weitere Informationen.

                  1. Einen Fehler könnte ich nur gemacht haben wenn ich die Tabellen bereits erstellt hätte. Die von mir verwendeten Bezeichnung wie TAB_DL1oder ähnliches stellen lediglich Arbeitsnamen für die beispielhafte Schilderung dar.
                  Wenn TAB_xxx kein Sinn macht, dann nennt sie gerne Diabolis_a1 oder sonstige. Die Benamung sollte lediglich die Vielzahl der Tabellen/ Csv darstellen.
                  2. Die Durchnumerierung liegt in den Datenquellen begründet und grenzt die Quelldateien der Dateiquellen voneinander ab. Dies ist wichtig, da ich mit den Daten Berechnungen vornehmen möchte ( Im Rahmen von Statistiken ).
                  Jede Tabelle stellt immer die Datenbasis für eine unique Berechnung dar. Mehrere Tabellen/Quellen werden parallel berechnet. Die finale Berechnung findet über wissenschaftliche Rechenmodelle in Excel statt und gibt die Ergebnisse aus.
                  3. Ich sammele die Daten mit einem Parser von den jeweiligen Webbasierten Quellen, meist Websites, immer ohne API oder ähnliche Schnittstellen. Die Ausgangsdaten ändern sich teilweise täglich. Die Daten werden als CSV gespeichert.
                  4. Die CSV Daten werden manuell auf den Server geladen, ein Script wird manuell ausgeführt und die Daten in der Datenbank werden getauscht.
                  5. Mein Excel Kalkulationssheet wird geöffnet (MYSQL Verbindung ist eingerichtet ). Die Daten in der excel Weden in den vorgesehenen Feldern aktualisiert. Die Berechnung mit aktuellen Daten kann starten.

                  Aktuell kopiere ich die Daten bei jeder Datenanpassung aus der CSV händisch in die Excel. diesen Schritt möchte ich zumindest teilautomatisieren.

                  Es mag sein dass es Lösungen gibt die hier eher angezeigt werden. Dies jedoch sind die mir mit meinem Kenntnisstand gegebenen Möglichkeiten um das Projekt umzusetzen.

                  Ich verlange nicht dass mir hier irgendjemand einen Code schreibt. Das mache ich schon selber.
                  Aber irgendwo muss ich Anfangen. Ich konzentriere mich im Übrigen darauf Lösungen zu finden und nur auf Probleme aufmerksam zu machen.
                  Leider ist das eine Erfahrung die man sehr häufig in Foren macht. Erstmal kritisieren, Probleme und Fehler aufzeigen ohne aber wirklich helfen zu wollen. Prostestix ist da schon ein treffender Nick.

                  Trotzdem, vielen Dank allen hier die versuchen zu helfen.

                  D






                  Kommentar


                  • #10
                    Zitat von diabolis01 Beitrag anzeigen
                    Aktuell kopiere ich die Daten bei jeder Datenanpassung aus der CSV händisch in die Excel. diesen Schritt möchte ich zumindest teilautomatisieren.
                    Warum dann nicht direkt den Parser anpassen oder ein Excel Makro schreiben, sondern der Umweg über PHP und MySQL?

                    Kommentar


                    • #11
                      Innerhalb der DB habe ich bereits pro CSV Datei eine Tabelle angelegt ( bsp.TAB_DL1, TAB_DL2, TAB_DL3, TAB_FL1, TAB_EL1 usw. ).
                      (..)
                      1. Einen Fehler könnte ich nur gemacht haben wenn ich die Tabellen bereits erstellt hätte. Die von mir verwendeten Bezeichnung wie TAB_DL1oder ähnliches stellen lediglich Arbeitsnamen für die beispielhafte Schilderung dar.
                      Keine einzige Zeile Code, nur fiktive Beispile, die mit der tatsächlichen Situation nichts zu tun haben, aber mitForisten anmotzen,
                      Ein richtig guter Start

                      Wie oben geschrieben habe ich bereits einige Scripte zum Thema finden können, jedoch nicht speziell zu meinen Anforderungen.

                      Ich wäre euch sehr dankbar wenn Ihr mir das Vorgehen einmal erläutern könntet. GGf. Hat ja auch bereits jemand eine ähnliche Aufgabe gelöst und kann den Code teilen ?

                      (..)

                      Ich verlange nicht dass mir hier irgendjemand einen Code schreibt.
                      Richtig, für Dich scheiben soll es niemand, schon geschriebenen hättest Du gerne. Das ist scheinbar weniger verpflichtend.

                      Kommentar


                      • #12
                        @Meister1900: danke für den Tipp. Den Parser kann ich nicht anpassen. Hierbei handelt es sich um ein Browser PlugIn, welches ich nicht anpassen kann. Das Excel Marko müsste dann ja direkt auf die Webquelle zugreifen. Geht das ?
                        Wie gesagt, danke für die Sätze. GGf. ergibt sich hieraus ja ein anderer Lösungsweg. Werde das jedenfalls mal prüfen.

                        @TomBuilder: Kein einziger Kommentar der wirklich weiter hilft, nur auf den Fehlern rum reiten und neuen Mitgliedern durch die Blume mitteilen wollen, wie faul sie doch eigentlich sind. Nicht wirklich ein besserer Start.
                        Der Rest ist hier "Wortschieberei". Du solltest dir wirklich gut überlegen ob du mit deinen qualifizierten Kommentaren irgendjemandem Hilfreich bist. Schreiben werde ich den Code am Ende sicherlich selber.
                        Initial kam mir der Gedanke dass jemand ggf. eine ähnliche Aufgabe gelöst hat, deshalb die Frage nach dem Code. Scheinst du aber nicht zu verstehen. Weiter möchte ich hier auch gar nicht weiter auf deine Worte eingehen.

                        Ich melde mich ab, vielen Dank allen, die WIRKLICH KONSTRUKTIV versucht haben zu helfen !

                        D

                        Kommentar


                        • #13
                          @TomBuilder: Kein einziger Kommentar der wirklich weiter hilft, (..)Nicht wirklich ein besserer Start.
                          Ich finde nicht, dass ich mich hier irgendwie als neuling einführen muss.
                          Schön, dass Du alle oder wenigstens die meisten meiner Kommentare gelesen hast und qualifiziert bewerten kannst.

                          Wie dem auch sei, tschüss.

                          Kommentar

                          Lädt...
                          X