Databestanden importeren (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(48 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 1: Regel 1:
 +
This might be what I've been looking for: https://sqlizer.io/
 +
 
== PMA ==
 
== PMA ==
  
 
PHPMyAdmin heeft een hele aardige import-functie. Wat daar zo aardig aan is: Er wordt dynamisch een tabel aangemaakt van (meestal) passende dimensies.
 
PHPMyAdmin heeft een hele aardige import-functie. Wat daar zo aardig aan is: Er wordt dynamisch een tabel aangemaakt van (meestal) passende dimensies.
  
== CSV & LOAD DATA INFILE ==
+
Maar zoals nix in deze wereld perfect is, is ook dit dat niet:
  
De standaardmanier om rekenbladen te importeren, is door deze in CSV-formaat weg te schrijven en te laden met behulp van het commando <code>LOAD DATA INFILE</code>.
+
* PMA is niet altijd beschikbaar
 +
* Time out-storingen
 +
* Onduidelijke foutmeldingen.
  
* Vantevoren moet je de doeltabel defineren, inclusief velden met passende dimensies [https://www.quora.com/How-can-I-import-Excel-data-into-MySQL]
+
In zulke gevallen is 't waarschijnlijk handiger om rechtstreeks mbv. SQL te importeren.
  
<pre>
+
== Vanuit Excel ==
drop table if exists ean_code;
 
CREATE TABLE `webwinkels`.`ean_code` (
 
  `ean_id` VARCHAR(13) NOT NULL,
 
  `sku` VARCHAR(45) NULL,
 
  PRIMARY KEY (`ean_id`));
 
  
load data infile "/var/mysql-export/ean01.txt"
+
Vaak krijg ik data aangeleverd in Excel-formaat. Je weet wel, data nare semi-gesloten format. Hoe daar een mouw aan te passen?
into table ean_code
 
</pre>
 
  
== Excel-bestanden importeren ==
+
Meestal volg ik de laatste methode hieronder: Ik open het bestand in LibreOffice Calc, en schrijf het weg in ods-formaat. Voilà: Geen Excel meer in the picture.
  
''' Add-ons & losse routines '''
+
=== Add-ons & losse programma'tjes ===
  
 
* '''MySQL for Excel-addon:''' Er bestaat een add-on voor Excel om te exporteren naar MySQL [https://dev.mysql.com/doc/mysql-for-excel/en/mysql-for-excel-export.html]. Daar kan ik weinig mee
 
* '''MySQL for Excel-addon:''' Er bestaat een add-on voor Excel om te exporteren naar MySQL [https://dev.mysql.com/doc/mysql-for-excel/en/mysql-for-excel-export.html]. Daar kan ik weinig mee
Regel 29: Regel 26:
 
* '''SQLyog:''' Nog een import add-on.
 
* '''SQLyog:''' Nog een import add-on.
  
''' Overig '''
+
=== Indirect ===
 +
 
 +
* '''[[OpenRefine]]:''' Veelbelovend, maar geeft bij mij storingen. Het idee zou zijn: Laden in OpenRefine » Extraction » Wegschrijven als tsv-bestand
 +
* '''CSV:''' Wegschrijven in CSV-formaat, en dan op een andere manier importeren
 +
* '''[[LibreOffice Basic]]:''' Bestand opslaan als ods-bestand » Voorbereidend werk doen mbv. macro's (ihb.: Tabbladen samenvoegen) » Wegschrijven als tsv-bestand » Laden met een eigen LOAD INTO-routine in MySQL
 +
 
 +
== SQL - LOAD DATA ==
 +
 
 +
''LOAD DATA'' is het standaardcommando om te importeren. Helaas kun je het niet toepassen in sprocs; alleen in losse SQL-scripts.
  
* '''MySQL Workbench:'''
+
Zie [[LOAD DATA (MySQL)]] voor details.
* '''LOAD INTO:''' De gebruikelijke manier is door de data weg te schrijven in CSV-formaat en daarna te laden. Zie elders voor details
 
* '''INSERT INTO:''' Open het CSV-bestand en voeg 'INSERT INTO'-commando's in. Veel werk, maar bij kleine hoeveelheden data soms een prima oplossing.
 
  
== Tabbladen in bronsbestand samenvoegen ==
+
== SQL - LOAD_FILE ==
  
* http://superuser.com/questions/304899/how-can-i-merge-hundreds-of-excel-spreadsheet-files - Voorbeeld VBA-code in Excel
+
De beperkingen omtrent <code>LOAD DATA</code> schijnen niet te gelden voor <code>LOAD_FILE</code>. Hierbij wordt de data in één groot object ingeladen, dus wellicht geschikt om á là PMA dynamisch de bijbehorende tabel te genereren. LOAD_FILE lijkt echter z'n eigen beperkingen te hebben, en tot op heden heb ik het nog niet aan de praat gekregen.
  
== Calc-bestanden importeren inclusief alle tabbladen ==
+
== Zie ook ==
  
Soms krijg ik Excelbestanden aangeleverd met data verspreid over bv. 20 tabbladen. Bij export naar CSV wordt er maar één tabblad per keer gedaan. Kan dat niet handiger? Bv. met OpenRefine?
+
* [[LibreOffice Basic]] - Rekenbladen samenvoegen
 +
* [[LOAD DATA (MySQL)]] - Standaardmethode voor import in MySQL.
 +
* [[Opmaak tekstbestanden]]
  
 
== Bronnen ==
 
== Bronnen ==
Regel 55: Regel 60:
  
 
* https://ask.libreoffice.org/en/question/38010/merge-multiple-spreadsheets-files-into-one/
 
* https://ask.libreoffice.org/en/question/38010/merge-multiple-spreadsheets-files-into-one/
 +
* http://superuser.com/questions/304899/how-can-i-merge-hundreds-of-excel-spreadsheet-files - Voorbeeld VBA-code in Excel
 +
* https://ask.libreoffice.org/en/question/31401/calc-how-to-combine-multiple-tables-in-different-sheets-into-a-new-one/ → Aardige oplossing
 +
* https://ask.libreoffice.org/en/question/16604/how-do-i-access-the-current-sheet-name-in-formula-to-use-in-indirect/ - Read name current sheet
 +
 +
''' Automate in Calc '''
 +
 +
* http://www.debugpoint.com/2014/09/libreoffice-workbook-worksheet-and-cell-processing-using-macro/
 +
 +
''' Import MySQL '''
 +
 +
* https://dev.mysql.com/doc/refman/5.7/en/load-data.html
 +
 +
''' Beperkingen stored procedures '''
 +
 +
* https://dev.mysql.com/doc/refman/5.6/en/stored-program-restrictions.html
 +
* https://www.morpheusdata.com/blog/2014-12-21-the-fastest-way-to-import-text-xml-and-csv-files-into-mysql-tables

Huidige versie van 20 dec 2022 om 12:36

This might be what I've been looking for: https://sqlizer.io/

PMA

PHPMyAdmin heeft een hele aardige import-functie. Wat daar zo aardig aan is: Er wordt dynamisch een tabel aangemaakt van (meestal) passende dimensies.

Maar zoals nix in deze wereld perfect is, is ook dit dat niet:

  • PMA is niet altijd beschikbaar
  • Time out-storingen
  • Onduidelijke foutmeldingen.

In zulke gevallen is 't waarschijnlijk handiger om rechtstreeks mbv. SQL te importeren.

Vanuit Excel

Vaak krijg ik data aangeleverd in Excel-formaat. Je weet wel, data nare semi-gesloten format. Hoe daar een mouw aan te passen?

Meestal volg ik de laatste methode hieronder: Ik open het bestand in LibreOffice Calc, en schrijf het weg in ods-formaat. Voilà: Geen Excel meer in the picture.

Add-ons & losse programma'tjes

Indirect

  • OpenRefine: Veelbelovend, maar geeft bij mij storingen. Het idee zou zijn: Laden in OpenRefine » Extraction » Wegschrijven als tsv-bestand
  • CSV: Wegschrijven in CSV-formaat, en dan op een andere manier importeren
  • LibreOffice Basic: Bestand opslaan als ods-bestand » Voorbereidend werk doen mbv. macro's (ihb.: Tabbladen samenvoegen) » Wegschrijven als tsv-bestand » Laden met een eigen LOAD INTO-routine in MySQL

SQL - LOAD DATA

LOAD DATA is het standaardcommando om te importeren. Helaas kun je het niet toepassen in sprocs; alleen in losse SQL-scripts.

Zie LOAD DATA (MySQL) voor details.

SQL - LOAD_FILE

De beperkingen omtrent LOAD DATA schijnen niet te gelden voor LOAD_FILE. Hierbij wordt de data in één groot object ingeladen, dus wellicht geschikt om á là PMA dynamisch de bijbehorende tabel te genereren. LOAD_FILE lijkt echter z'n eigen beperkingen te hebben, en tot op heden heb ik het nog niet aan de praat gekregen.

Zie ook

Bronnen

Merge Calc sheets

Automate in Calc

Import MySQL

Beperkingen stored procedures