Il modo migliore per appiattire un documento XML

0

Supponiamo di avere un documento come questo:

<names>
  <first>Joe</first>
  <last>Smoe</last>
  <phonenumbers>
     <phonenumber type="home">123-567-9876</phonenumber>
     <phonenumber type="cell">345-678-1234</phonenumber>
  </phonenumbers>
  <emails>
     <email>[email protected]</email>
     <email>[email protected]</email>
  </emails>
</names>

Sono un po 'stumped sul miglior formato di tabella quando lo si appiattisce in tabella. Nel mio caso, è una tabella per un database Hive.

Non voglio 4 record per "Joe Smoe". Quindi, può avere campi come "phone1", "phone2", "email1", "email2".

Ma questa tabella in realtà è una tabella Hive, quindi abbiamo "matrici" come tipi di dati. Quindi, potrei avere questo:

last|first|phones                     |emails
----+-----+---------------------------+-------------------------
Joe |Smoe |[123-567-9876,345-678-1234]|[[email protected],[email protected]]

Ma poi come salvare il tipo di telefono nella tabella. Forse con una "mappa"?

last|first|phones                                     |emails
----+-----+-------------------------------------------+-------------
Joe |Smoe |[{"number":"123-567-9876", "type"="home"}] |

Come si appiattisce questo tipo di XML (ad esempio collezioni in raccolte) in un tavolo piatto?

    
posta swdev 06.02.2016 - 00:39
fonte

1 risposta

2

Se si intende mappare da XML a un modello relazionale, sarà necessario avere una relazione uno a molti dal nome ai numeri di telefono. Avrai anche bisogno di uno a molti dal nome agli indirizzi email.

Diagramma delle relazioni tra entità (ERD)

I nomi avrebbero bisogno di una chiave primaria (designata PK sull'immagine) da utilizzare come chiave esterna (FK designato nell'immagine) nelle relative tabelle. Secondo il mio diagramma, avresti bisogno di un nome per esistere prima di poter creare il record PhoneNum o il record Email. Inoltre, i record figlio sono facoltativi.

    
risposta data 06.02.2016 - 00:56
fonte

Leggi altre domande sui tag