Databestanden importeren (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(33 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 ==
  
Regel 11: Regel 13:
 
In zulke gevallen is 't waarschijnlijk handiger om rechtstreeks mbv. SQL te importeren.
 
In zulke gevallen is 't waarschijnlijk handiger om rechtstreeks mbv. SQL te importeren.
  
== SQL ==
+
== Vanuit Excel ==
 
 
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>. Vantevoren moet je de doeltabel defineren, inclusief velden met passende dimensies [https://www.quora.com/How-can-I-import-Excel-data-into-MySQL]
 
 
 
=== Eenvoudig voorbeeld ===
 
 
 
<pre>
 
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"
 
into table ean_code
 
</pre>
 
 
 
=== Voorbeeld - Amazon export-bestand importeren ===
 
  
<pre>
+
Vaak krijg ik data aangeleverd in Excel-formaat. Je weet wel, data nare semi-gesloten format. Hoe daar een mouw aan te passen?
drop table if exists import_tmp;
 
  
create table import_tmp
+
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.
(
 
item_sku varchar(45) null,
 
external_product_id varchar(45) null,
 
external_product_id_type varchar(45) null,
 
item_name varchar(1000) null,
 
bullet_point1 varchar(500) null,
 
bullet_point2 varchar(500) null,
 
bullet_point3 varchar(500) null,
 
bullet_point4 varchar(500) null,
 
bullet_point5 varchar(500) null,
 
generic_keywords1 varchar(1010) null,
 
generic_keywords2 varchar(1010) null,
 
generic_keywords3 varchar(1010) null,
 
generic_keywords4 varchar(1010) null,
 
generic_keywords5 varchar(1010) null,
 
description varchar(1000) null,
 
recommended_browse_nodes varchar(45) null,
 
manufacturer varchar(45) null,
 
feed_product_type varchar(45) null,
 
brand_name varchar(45) null,
 
update_delete varchar(45) null,
 
standard_price varchar(45) null,
 
quantity varchar(45) null,
 
fulfillment_latency varchar(45) null,
 
condition_type varchar(45) null,
 
number_of_items varchar(45) null,
 
main_image_url varchar(100) null,
 
other_image_url1 varchar(100) null,
 
other_image_url2 varchar(100) null,
 
other_image_url3 varchar(100) null,
 
other_image_url4 varchar(100) null,
 
other_image_url5 varchar(100) null,
 
website_shipping_weight varchar(45) null,
 
website_shipping_weight_unit_of_measure varchar(45) null,
 
item_length varchar(45) null,
 
item_width varchar(45) null,
 
item_height varchar(45) null,
 
item_dimensions_unit_of_measure varchar(45) null,
 
item_weight varchar(45) null,
 
item_weight_unit_of_measure varchar(45) null,
 
target_audience_keywords varchar(45) null,
 
package_height varchar(45) null,
 
package_height_unit_of_measure varchar(45) null,
 
package_width varchar(45) null,
 
package_width_unit_of_measure varchar(45) null,
 
package_length varchar(45) null,
 
package_length_unit_of_measure varchar(45) null,
 
package_weight varchar(45) null,
 
package_weight_unit_of_measure varchar(45) null,
 
color_name varchar(45) null,
 
color_map varchar(45) null,
 
material_type varchar(45) null,
 
specific_uses_for_product varchar(45) null,
 
internal_sort_order varchar(5) null
 
);
 
  
load data infile "/var/export/eanbosch.csv"
+
=== Add-ons & losse programma'tjes ===
into table import_tmp
 
fields terminated by '\t' -- Tab als veldscheidingsteken
 
enclosed by '"' -- Alle velden zijn omsloten met dubbele aanhalingstekens
 
lines terminated by "\n" -- Alle records zijn afgesloten met een \n
 
ignore 1 rows; -- Regel 1 bevat veldnamen en worden overgeslagen (gebruiken bij testen!)
 
</pre>
 
 
 
=== Voorbeeld - Amazon upload-bestand importeren ===
 
 
 
== Excel-bestanden importeren ==
 
 
 
''' Add-ons & losse routines '''
 
  
 
* '''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 109: Regel 26:
 
* '''SQLyog:''' Nog een import add-on.
 
* '''SQLyog:''' Nog een import add-on.
  
''' Overig '''
+
=== Indirect ===
  
* '''MySQL Workbench:'''
+
* '''[[OpenRefine]]:''' Veelbelovend, maar geeft bij mij storingen. Het idee zou zijn: Laden in OpenRefine » Extraction » Wegschrijven als tsv-bestand
* '''LOAD INTO:''' De gebruikelijke manier is door de data weg te schrijven in CSV-formaat en daarna te laden. Zie elders voor details
+
* '''CSV:''' Wegschrijven in CSV-formaat, en dan op een andere manier importeren
* '''INSERT INTO:''' Open het CSV-bestand en voeg 'INSERT INTO'-commando's in. Veel werk, maar bij kleine hoeveelheden data soms een prima oplossing.
+
* '''[[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
  
''' Indirect '''
+
== SQL - LOAD DATA ==
  
* '''[[OpenRefine]]:''' Veelbelovend, maar geeft bij mij storingen. Het idee zou zijn: Laden in OpenRefine » Extraction » Wegschrijven als tsv-bestand
+
''LOAD DATA'' is het standaardcommando om te importeren. Helaas kun je het niet toepassen in sprocs; alleen in losse SQL-scripts.
* '''[[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
+
 
 +
Zie [[LOAD DATA (MySQL)]] voor details.
 +
 
 +
== SQL - LOAD_FILE ==
  
Deze laatste optie lijkt nogal ver gezocht, maar is (okt. 2016) de manier waarop ik dit daadwerkelijk doe.
+
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.
  
== Tabbladen in bronsbestand samenvoegen ==
+
== Zie ook ==
  
Zie [[LibreOffice Basic]].
+
* [[LibreOffice Basic]] - Rekenbladen samenvoegen
 +
* [[LOAD DATA (MySQL)]] - Standaardmethode voor import in MySQL.
 +
* [[Opmaak tekstbestanden]]
  
 
== Bronnen ==
 
== Bronnen ==
Regel 145: 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