XML-bestand importeren in MariaDB: afwijkende kolomnamen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • pporrio
  • Registratie: Februari 2010
  • Laatst online: 09:23
Beste mede-Tweakers,

Mijn vraag
Kan ik een XML-bestand inlezen waarin de kolomnamen beginnen met 'ns:' ? Ik probeer een XML-bestand in te lezen waarin alle tags (kolomnamen) beginnen met 'ns:'. Het bestand wordt met andere XML-bestanden van tabeldumps nachtelijk geleverd.

Probleem is dat het XML LOAD onderdeel ROWS IDENTIFIED BY '<ns:Organisatie>' de kolomnamen die binnen deze tags staan niet kan mappen aan de kolommen in mijn database (zonder 'ns:' voor de kolomnaam).

Relevante software en hardware die ik gebruik
MariaDB 10.3 lokaal op een laptop voorzien van Windows 10 Enterprise.

Wat ik al gevonden of geprobeerd heb
Op dit moment gebruik ik als workaround een PowerShell Command Line opdracht om de tekst 'ns:' te vervangen voor '' in het XML-bestand en vervolgens onder dezelfde naam op te slaan.

Vervolgens lees ik het gewijzigde XML bestand in middels:
code:
1
2
3
XML LOAD LOCAL INFILE 'Organisatie.xml'
INTO TABLE Organisatie
ROWS IDENTIFIED BY '<Organisatie>';

Dit werkt prima. Echter, zou het ook kunnen zonder eerst het XML-bestand aan te passen? Dus rechtstreeks de kolommapping aan te geven bij de import?

Alvast bedankt voor jullie reacties!

Peter

Mijn platencollectie

Alle reacties


Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 08:56

The Eagle

I wear my sunglasses at night

Zelf nooit echt geprobeerd, maar https://dev.mysql.com/doc/refman/8.0/en/load-data.html
En dan kijken naar field en line handling, evt in combinatie met escaping. Daar zou je een eind mee moeten komen, maar of dat de oplossing gaat bieden weet ik niet.

Wat jij zoekt is feitelijk wat ETL tools (Extract, Transform, Load) doen. Die zijn er zat. Als je veel van dit soort dingen moet doen, kijk even naar iets als Nifi.

Maar als ik dit zo lees kun je denk ik het beste even de beheerders van de aanleverende bron aankijken. Klinkt als data uit een Active Directory of andere LDAP, waarbij de beheerder gewoon een simpele dump maakt omdat daar om gevraagd is. Die zal dat ook door powershell oid uit laten voeren, koud kunstje om de pijn daar te leggen waar ie hoort ;)

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

Bronbestanden zonder namespace identifier zouden idd je probleem oplossen. Mogelijk is dat makkelijker dan netjes met de namespaces werken vanuit Sql?

Vanuit sql heb ik dat niet eerder zelf gedaan.

Death smiles at us all, all a man can do is smile back.
PSN


Acties:
  • 0 Henk 'm!

  • Sethro
  • Registratie: Maart 2017
  • Laatst online: 10-04 09:05
En de kolomnamen in je eigen database aanpassen? Of denk ik dan te simpel

Acties:
  • 0 Henk 'm!

  • pporrio
  • Registratie: Februari 2010
  • Laatst online: 09:23
Sethro schreef op woensdag 19 december 2018 @ 21:50:
En de kolomnamen in je eigen database aanpassen? Of denk ik dan te simpel
Volgens mij zijn kolomnamen met een ':' (bijvoorbeeld 'ns: Organisatie') erin niet toegestaan in MySql/MariaDB.

Mijn platencollectie


  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 08:56

The Eagle

I wear my sunglasses at night

Of het nou wel of niet mag, dat soort dingen wil je sowieso gewoon niet :X

Wat je natuurlijk ook kunt doen is het hele ding in een temp tabel inlezen als een CLOB, en dan de CLOB met wat commando's doorschrijven naar de daadwerkelijke tabel. Maar je ontkomt niet aan bewerking. Dr vraag is alleen waar je die bewerkingslogica zou moeten plaatsen. Wat mij betreft hoort die op de plek waar de data vandaan komt.

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • pporrio
  • Registratie: Februari 2010
  • Laatst online: 09:23
Bedankt voor de reacties zover d:)b Ik ben het met jullie eens dat de het probleem al ontstaat bij de bron.

Ik zal de leverancier vragen of het mogelijk is om een XML dump te leveren met de kolomnamen zonder 'ns:'.

Mijn platencollectie


  • OnTracK
  • Registratie: Oktober 2002
  • Nu online
Volgens mij mag je bij MySQL/MariaDB practisch alles in een kolomnaam stoppen op het moment dat je er backticks omheen zet `ns:organisatie`. Maar je zult dat op iedere plek moeten doen, ook weer bij het uitlezen.

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.

Pagina: 1