Skip to content

Creare un database da XML o JSON ​

Strumenti → Crea database da XML / JSON prende un documento XML o JSON, ricava la struttura relazionale che vi si nasconde e ne costruisce un database — tabelle, colonne, tipi, relazioni e dati.

Serve per il caso in cui un sistema ti consegna un export voluminoso — un catalogo prodotti, un dataset medico o farmaceutico, un dump di API, il file di un partner — e tu lo vuoi come database vero e non come file.

Sono accettati quattro formati: .xml, .json e JSON per righe come .jsonl o .ndjson. Il formato si sceglie dall'estensione; tutto ciò che segue l'analisi iniziale è condiviso, quindi anteprima, DDL generato e caricamento si comportano allo stesso modo da qualunque tu sia partito.

I tre passaggi ​

1. Impostazione ​

  • File XML / JSON — scegli il documento.
  • Connessione di destinazione — dove verrà creato il database.
  • Database di destinazione — il nome del database. Per SQLite è il file della connessione.

2. Anteprima ​

NabuSQL analizza il documento e mostra ciò che ha trovato: le tabelle che creerà, le loro colonne e i tipi dedotti. Il DDL generato può essere ispezionato prima che parta qualcosa.

Leggi bene questo passaggio. È qui che scopri che un campo che ti aspettavi numerico è stato dedotto come testo perché un record su cinquantamila contiene un carattere di troppo.

3. Esecuzione ​

L'importazione procede con avanzamento per tabella. Alla fine ottieni un esito per tabella: righe caricate ed eventuali errori.

Come viene ricavata la struttura ​

Da XML ​

Gli elementi ripetuti diventano tabelle. Attributi e testo degli elementi diventano colonne. Un elemento che compare una sola volta dentro il genitore viene incorporato nel genitore come colonne con prefisso: un blocco <meta><author>…</author></meta> diventa una colonna meta_author e non una tabella a sé con una riga.

Da JSON ​

La stessa idea, nel vocabolario di JSON:

Nel documentoNel database
Chiave con uno scalareColonna sulla tabella di quell'oggetto
Chiave con un oggettoIncorporata nel genitore come colonne con prefisso
Chiave con un arrayTabella figlia con chiave esterna verso il genitore
Scalare nudo dentro un arrayLa colonna _text della tabella

JSON dice una cosa più chiaramente di quanto XML possa fare: un array significa "molti" anche quando questo particolare file ne contiene uno solo, quindi diventa una tabella a prescindere dalla lunghezza. XML deve dedurre lo stesso dal ripetersi di un tag, il che significa che un elemento figlio isolato appare identico a una collezione che per caso ha un solo membro.

Un array di primo livello è trattato come un elenco di record radice. Un oggetto di primo livello è un unico record radice. Con .jsonl / .ndjson ogni riga è un record radice e le righe vuote vengono saltate.

Poiché JSON non ha un tag radice da cui prendere i nomi, è il nome del file a dare il nome alla tabella radice: catalog.json produce una tabella catalog.

Come funziona ​

Tre aspetti dell'implementazione contano nella pratica:

  • Analisi in due passate. La prima determina la struttura, la seconda carica i dati.
  • Memoria. XML e JSON per righe vengono letti in streaming, quindi la dimensione del file è limitata dal disco e non dalla RAM. Un file .json normale è un unico valore JSON e va interpretato per intero, quindi uno molto grande è limitato dalla memoria. Se controlli l'export, chiedi .ndjson.
  • Le chiavi esterne si applicano dopo il caricamento. I record sono spesso ordinati in modo che un figlio arrivi prima del genitore; creare i vincoli in anticipo rifiuterebbe righe perfettamente valide. I vincoli si aggiungono alla fine, quando ogni riga è al suo posto.

Dopo ​

  • Controlla i tipi dedotti in Tabelle e colonne e restringi ciò che è uscito più largo del necessario.
  • Apri il diagramma ER per vedere la struttura ricavata.
  • Aggiungi indici per le colonne che interrogherai davvero: l'importazione crea chiavi e vincoli, non gli indici che servono ai tuoi report.

Se una tabella esce male ​

La struttura segue il documento. Quando un campo è incoerente tra i record, l'analisi allarga il tipo per accogliere ogni valore incontrato. Correggerlo dopo il caricamento — un ALTER TABLE su un dataset ormai noto — di solito è più rapido che rimodellare il file di origine.

I booleani sorprendono spesso: true / false di JSON vengono salvati come 1 / 0, quindi la colonna esce intera e non testuale.