Databestanden importeren (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(42 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 ===
 
 
* '''MySQL Workbench:'''
 
* '''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 ==
 
 
 
Soms krijg ik Excelbestanden aangeleverd met data verspreid over bv. 20 tabbladen. Hoe kan ik die samenvoegen?
 
 
 
=== Worksheet-naam invoegen ===
 
 
 
Met deze functie kun je de naam van de sheet invoeren in een extra kolom. Die extra kolom moet je vooralsnog zelf aanmaken.
 
  
<pre>
+
* '''[[OpenRefine]]:''' Veelbelovend, maar geeft bij mij storingen. Het idee zou zijn: Laden in OpenRefine » Extraction » Wegschrijven als tsv-bestand
function sn()
+
* '''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
  
sn = thiscomponent.getcurrentcontroller.activesheet.GetName
+
== SQL - LOAD DATA ==
  
end function
+
''LOAD DATA'' is het standaardcommando om te importeren. Helaas kun je het niet toepassen in sprocs; alleen in losse SQL-scripts.
</pre>
 
  
 +
Zie [[LOAD DATA (MySQL)]] voor details.
  
=== Worksheets samenvoegen ===
+
== SQL - LOAD_FILE ==
  
Met lookup-functies kun je data uitlezen en in één sheet stoppen [https://ask.libreoffice.org/en/question/31401/calc-how-to-combine-multiple-tables-in-different-sheets-into-a-new-one/]. Da's een heel aardig begin.
+
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
* Wat OpenRefine betekent: Die kutzooi crasht met diverse simultane fouten.
+
* [[LOAD DATA (MySQL)]] - Standaardmethode voor import in MySQL.
 +
* [[Opmaak tekstbestanden]]
  
 
== Bronnen ==
 
== Bronnen ==
Regel 80: Regel 67:
  
 
* http://www.debugpoint.com/2014/09/libreoffice-workbook-worksheet-and-cell-processing-using-macro/
 
* 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