Opmaak tekstbestanden voor import

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Regelmatig krijg ik gegevens aangeleverd in spreadsheet-formaat, die ik importeer in een MySQL-datawarehouse. Handig om deze import zo consistent mogelijk te doen. Daar gaat dit artikel over:

Algemeen

  • Meestal gebruik ik LibreOffice Calc als middleware om de aangeleverde data (meestal Excel-sheets, soms Calc-sheets) te converteren naar csv- of tsv-formaat
  • Gebruik altijd UTF-8 voor karaktercodering
  • Import in MySQL gaat middels SQL-scripts - Het LOAD DATA-commando kan niet uitgevoerd worden vanuit sprocs. Wellicht dat Python of LOAD_DATA interessante alternatieven zijn.

Casus: Productgegevens in Calc (okt. 2018)

Dit lijkt goed te werken voor import in MySQL. Alle velden worden toch als strings geïmporteerd, dus er is geen text delimiter nodig

Instellingen LibreOffice Calc

  • Character set: UTF8
  • Field delimeter: {Tab}
  • Text-delimeter: Geen

Opmerkingen

  • Extensie wordt vanzelf csv, ook al betreft het eigenlijk een tsv-bestand: Calc plaatst er altijd .csv achter
  • Als je wel een text-delimeter gebruikt, en dat karakter komt voor in de bestand (bijvoorbeeld "), dan wordt dat geëscaped ofzo - Vragen om problemen!
  • Cijfers met voorloopnullen, worden geïmporteerd als text - Precies wat de bedoeling is (bv. een artikelnummer zoals '0100' moet '0100' blijven, en niet het getal '100' worden)

Import MySQL

Bijbehorende instellingen voor import in MySQL:

load data local infile "/tmp/02.csv"

	into table import_tmp
	character set utf8
	fields terminated by '\t'
	enclosed by ''
	lines terminated by '\n'
	ignore 1 rows;   # Afhankelijk van de inhoud van het bestand, niet de opmaak

Casus: Productgegevens in Excel voor toewijzing EAN-codes (dec. 2018)

  • Ik open het bestand in LibreOffice Calc. Ik kopiëer alle gegevens
  • In een nieuw rekenblad plak ik de gegevens middels Paste special... om opmaak en formules te elimineren

Zie ook