1. Einführung in import_table Im letzten technischen Austausch haben wir 4 gängige Methoden von MySQL Load Data zum Importieren von Textdaten in MySQL vorgestellt. In dieser Ausgabe werden wir weiterhin ein weiteres effizienteres Datenimporttool vorstellen,
2. Beispiele für die Funktion „Daten laden“ und „Tabelle importieren“Dieser Abschnitt enthält Befehlsbeispiele für dieselben Funktionen wie „Tabelle importieren“ und „Daten laden“. Wir verwenden weiterhin die Beispieldaten der Mitarbeitertabelle als Beispiel, um das umfassende Szenario des Ladens von MySQL-Daten zu demonstrieren.
## Beispieldaten sind wie folgt [root@10-186-61-162 tmp]# cat employees_01.csv "10001","1953-09-02","Georgi","Facello","M","1986-06-26" "10003","1959-12-03","Parto","Bamford","M","1986-08-28" "10002","1964-06-02","Bezalel","Simmel","F","1985-11-21" "10004","1954-05-01","Christian","Koblick","M","1986-12-01" "10005","1955-01-21","Kyoichi","Maliniak","M","1989-09-12" "10006","1953-04-20","Anneke","Preusig","F","1989-06-02" "10007","1957-05-23","Tzvetan","Zielinski","F","1989-02-10" "10008","19.02.1958","Saniya","Kalloufi","M","15.09.1994" "10009","1952-04-19","Sumant","Peac","F","1985-02-18" "10010","1963-06-01","Duangkaew","Piveteau","F","1989-08-24" ## Beispieltabellenstruktur 10.186.61.162:3306 Mitarbeiter SQL > desc emp; +-------------+------------------+------+-----+---------+---------+-------+ | Feld | Typ | Null | Schlüssel | Standard | Extra | +-------------+------------------+------+-----+---------+---------+-------+ | emp_no | int | NEIN | PRI | NULL | | | Geburtsdatum | Datum | NEIN | | NULL | | | Vorname | varchar(14) | NEIN | | NULL | | | Nachname | varchar(16) | NEIN | | NULL | | | full_name | varchar(64) | JA | | NULL | | -- Neu hinzugefügtes Feld in der Tabelle, existiert nicht in der exportierten Datendatei | gender | enum('M','F') | NEIN | | NULL | | | Einstellungsdatum | Datum | NEIN | | NULL | | | modify_date | datetime | JA | | NULL | | -- Der Tabelle wird ein neues Feld hinzugefügt, das in der exportierten Datendatei nicht vorhanden ist.| delete_flag | varchar(1) | JA | | NULL | | -- Der Tabelle wird ein neues Feld hinzugefügt, das in der exportierten Datendatei nicht vorhanden ist.+-------------+---------------+------+-----+---------+---------+ 2.1 Datenimport mit „Load Data“Die spezifische Bedeutung der Parameter wird hier nicht erläutert. Wenn Sie die Syntaxregeln und Bedeutungen verstehen müssen, lesen Sie bitte den vorherigen Artikel in der Reihe <Mehrfachverwendung von MySQL-Ladedaten> Daten in Datei laden '/data/mysql/3306/tmp/employees_01.csv' in die Tabelle employee.emp Zeichensatz utf8mb4 Felder, die mit ',' abgeschlossen sind umschlossen von '"' Zeilen, die mit '\n' beendet sind (@C1,@C2,@C3,@C4,@C5,@C6) setze emp_no=@C1, Geburtsdatum=@C2, Vorname=Obername(@C3), Nachname=Untername(@C4), vollständiger_name=concat(Vorname,' ',Nachname), Geschlecht=@C5, Einstellungsdatum=@C6 , change_date = jetzt(), delete_flag=wenn(Einstellungsdatum<'1988-01-01','J','N'); 2.2 Datenimport mit import_tableutil.import_table( [ "/data/mysql/3306/tmp/employees_01.csv", ], { "Schema": "Mitarbeiter", "Tabelle": "emp", "Dialekt": "csv-unix", "skipRows": 0, "showProgress": Wahr, "Zeichensatz": "utf8mb4", "columns": [1,2,3,4,5,6], ## Verwende so viele Seriennummern wie Spalten in der Datei vorhanden sind "decodeColumns": { "emp_no": "@1", ## entspricht der ersten Spalte in der Datei "Birth_date": "@2", ## entspricht der zweiten Spalte in der Datei "First_name": "Upper (@3)" "concat (@3, '',@4)", ## verschmilzt die dritte und vierte Spalte in der Datei, um den Feldwert in der Tabelle "Geschlecht" zu generieren, ## entspricht der fünften Spalte in der Datei "Hire_date": "@6", ## ## ## # # # # # # der fieldate "modify_date": ":" now "" "" "" "": "now" "" "" "" ":" now "" "" "" "" ":" now "" "" "" "" "": "now" "" "" "" if (@6 <'1988-01-01', 'y', 'n') "## machen ein logisches Urteil, das auf der sechsten Spalte in der Datei basiert, und generieren den entsprechenden Feldwert in der Tabelle} }) 3. import_table-spezifische Funktionen3.1 Mehrfachdateiimport (Fuzzy Matching)## Vor dem Importieren habe ich 3 separate Mitarbeiterdateien generiert und die exportierten Strukturen sind konsistent [root@10-186-61-162 tmp]# ls -lh Gesamtnutzung: 1,9 G -rw-r----- 1 mysql mysql 579 24. März 19:07 employees_01.csv -rw-r----- 1 mysql mysql 584 24. März 18:48 employees_02.csv -rw-r----- 1 mysql mysql 576 24. März 18:48 employees_03.csv -rw-r----- 1 mysql mysql 1,9 G 26. März 17:15 sbtest1.csv ## Importbefehl, bei dem employees_* für Fuzzy-Matching verwendet wird util.import_table( [ "/data/mysql/3306/tmp/employees_*", ], { "Schema": "Mitarbeiter", "Tabelle": "emp", "Dialekt": "csv-unix", "skipRows": 0, "showProgress": Wahr, "Zeichensatz": "utf8mb4", "columns": [1,2,3,4,5,6], ## Verwende so viele Seriennummern wie Spalten in der Datei vorhanden sind "decodeColumns": { "emp_no": "@1", ## entspricht der ersten Spalte in der Datei "Birth_date": "@2", ## entspricht der zweiten Spalte in der Datei "First_name": "Upper (@3)" "concat (@3, '',@4)", ## verschmilzt die dritte und vierte Spalte in der Datei, um den Feldwert in der Tabelle "Geschlecht" zu generieren, ## entspricht der fünften Spalte in der Datei "Hire_date": "@6", ## ## ## # # # # # # der fieldate "modify_date": ":" now "" "" "" "": "now" "" "" "" ":" now "" "" "" "" ":" now "" "" "" "" "": "now" "" "" "" if (@6 <'1988-01-01', 'y', 'n') "## machen ein logisches Urteil, das auf der sechsten Spalte in der Datei basiert, und generieren den entsprechenden Feldwert in der Tabelle} }) ## Importbefehl, in dem der Pfad der zu importierenden Datei eindeutig angegeben wird util.import_table( [ "/data/mysql/3306/tmp/employees_01.csv", "/data/mysql/3306/tmp/employees_02.csv", "/data/mysql/3306/tmp/employees_03.csv" ], { "Schema": "Mitarbeiter", "Tabelle": "emp", "Dialekt": "csv-unix", "skipRows": 0, "showProgress": Wahr, "Zeichensatz": "utf8mb4", "columns": [1,2,3,4,5,6], ## Verwende so viele Seriennummern wie Spalten in der Datei vorhanden sind "decodeColumns": { "emp_no": "@1", ## entspricht der ersten Spalte in der Datei "Birth_date": "@2", ## entspricht der zweiten Spalte in der Datei "First_name": "Upper (@3)" "concat (@3, '',@4)", ## verschmilzt die dritte und vierte Spalte in der Datei, um den Feldwert in der Tabelle "Geschlecht" zu generieren, ## entspricht der fünften Spalte in der Datei "Hire_date": "@6", ## ## ## # # # # # # der fieldate "modify_date": ":" now "" "" "" "": "now" "" "" "" ":" now "" "" "" "" ":" now "" "" "" "" "": "now" "" "" "" if (@6 <'1988-01-01', 'y', 'n') "## machen ein logisches Urteil, das auf der sechsten Spalte in der Datei basiert, und generieren den entsprechenden Feldwert in der Tabelle} }) 3.2 Gleichzeitiger Import Bevor wir mit dem gleichzeitigen Importieren experimentieren, erstellen wir eine 10 Millionen sbtest1-Tabelle (ca. 2G Daten), um die Parallelität zu simulieren. Der Parameter import_table verwendet ## Exportieren Sie die für den Test benötigten sbtest1-Daten [root@10-186-61-162 tmp]# ls -lh Gesamtnutzung: 1,9 G -rw-r----- 1 mysql mysql 579 24. März 19:07 employees_01.csv -rw-r----- 1 mysql mysql 584 24. März 18:48 employees_02.csv -rw-r----- 1 mysql mysql 576 24. März 18:48 employees_03.csv -rw-r----- 1 mysql mysql 1,9 G 26. März 17:15 sbtest1.csv ## Aktivieren Sie 8 Threads gleichzeitig util.import_table( [ "/data/mysql/3306/tmp/sbtest1.csv", ], { "Schema": "Demo", "Tabelle": "sbtest1", "Dialekt": "csv-unix", "skipRows": 0, "showProgress": Wahr, "Zeichensatz": "utf8mb4", "Threads": "8" }) 3.3 Einfuhrmengenkontrolle Sie können util.import_table( [ "/data/mysql/3306/tmp/sbtest1.csv", ], { "Schema": "Demo", "Tabelle": "sbtest1", "Dialekt": "csv-unix", "skipRows": 0, "showProgress": Wahr, "Zeichensatz": "utf8mb4", "Threads": "4", "maxRate": "2M" }) 3.4 Benutzerdefinierte BlockgrößeDie Standardblockgröße beträgt 50 MB. Wir können die Blockgröße anpassen, um die Transaktionsgröße zu verringern. Wenn wir beispielsweise die Blockgröße auf 1 MB anpassen, wird auch die Datenmenge, die jedes Mal von jedem Thread importiert wird, entsprechend reduziert. util.import_table( [ "/data/mysql/3306/tmp/sbtest1.csv", ], { "Schema": "Demo", "Tabelle": "sbtest1", "Dialekt": "csv-unix", "skipRows": 0, "showProgress": Wahr, "Zeichensatz": "utf8mb4", "Threads": "4", "bytesPerChunk": "1M", "maxRate": "2M" }) 4. Leistungsvergleich zwischen „Load Data“ und „import_table“
-- Daten laden-Anweisung lädt Daten in Datei '/data/mysql/3306/tmp/sbtest1.csv' in Tabelle demo.sbtest1 Zeichensatz utf8mb4 Felder, die mit ',' abgeschlossen sind umschlossen von '"' Zeilen, die mit '\n' beendet sind -- import_table-Anweisung util.import_table( [ "/data/mysql/3306/tmp/sbtest1.csv", ], { "Schema": "Demo", "Tabelle": "sbtest1", "Dialekt": "csv-unix", "skipRows": 0, "showProgress": Wahr, "Zeichensatz": "utf8mb4" }) Wie Sie sehen, dauert das Laden von Daten etwa 5 Minuten, während import_table weniger als die Hälfte der Zeit zum Abschließen des Datenimports benötigt, was mehr als doppelt so effizient ist (unter der Bedingung einer begrenzten Festplatten-E/A-Kapazität in der virtuellen Maschinenumgebung). 5. Technische Zusammenfassung
Dies ist das Ende dieses Artikels über die Implementierung des MySQL import_table-Datenimports. Weitere relevante Inhalte zum MySQL import_table-Datenimport finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
Beim Entwickeln einer Website-Funktion kann der S...
Inhaltsverzeichnis 1: Einführung in Galera-Cluste...
Normale MySQL-Sortierung, benutzerdefinierte Sort...
CSS3-Mustergalerie Diese CSS3-Musterbibliothek ze...
Inhaltsverzeichnis Erklärung des V-Texts bei „if“...
Inhaltsverzeichnis Überblick Warum ein Framework ...
Inhaltsverzeichnis 1. Beschreibung 2. Installatio...
Wie zentrieren Sie Ihre HTML-Schaltfläche selbst?...
Alibaba Cloud kauft Server Kaufen Sie einen Cloud...
Bei der Installation von tortoiseGit gab es immer...
Inhaltsverzeichnis Abhängigkeiten installieren Ko...
Die Datenintegrität wird in Entitätsintegrität, D...
Test: Chrome v80.0.3987.122 ist normal Es gibt zw...
Code kopieren Der Code lautet wie folgt: <!DOC...
Inhaltsverzeichnis 1 Einführung in den neuen Oper...