Skip to content

Ustvarjanje baze iz XML ali JSON ​

Orodja → Ustvari bazo iz XML-a / JSON-a vzame dokument XML ali JSON, ugotovi relacijsko strukturo, ki se skriva v njem, in iz njega zgradi bazo — tabele, stolpce, tipe, razmerja in podatke.

To je za primer, ko vam sistem preda velik izvoz — katalog izdelkov, medicinski ali farmacevtski nabor podatkov, dump API-ja, podatkovno datoteko partnerja — vi pa ga želite kot pravo bazo in ne kot datoteko.

Sprejeti so štirje formati: .xml, .json in JSON, ločen po vrsticah, kot .jsonl ali .ndjson. Format se izbere po priponi datoteke; vse po začetni analizi je skupno, zato se predogled, ustvarjeni DDL in nalaganje obnašajo enako ne glede na to, s čim ste začeli.

Trije koraki ​

1. Nastavitev ​

  • Datoteka XML / JSON — izberite dokument.
  • Ciljna povezava — kje bo baza ustvarjena.
  • Ciljna baza — ime baze. Pri SQLite je to datoteka baze povezave.

2. Predogled ​

NabuSQL analizira dokument in pokaže, kaj je našel: tabele, ki jih bo ustvaril, njihove stolpce in izpeljane tipe. Ustvarjeni DDL lahko pregledate, preden se karkoli izvede.

Ta korak preberite pozorno. Tu ugotovite, da je bilo polje, za katero ste pričakovali, da bo številsko, izpeljano kot besedilo, ker en zapis od petdeset tisoč vsebuje zalutali znak.

3. Izvedba ​

Uvoz teče z napredkom po tabelah. Ko se konča, dobite rezultat po tabelah: naložene vrstice in morebitne napake.

Kako se izpelje struktura ​

Iz XML ​

Ponavljajoči se elementi postanejo tabele. Atributi in besedilo elementov postanejo stolpci. Element, ki se v nadrejenem pojavi samo enkrat, se vgradi v nadrejenega kot stolpci s predpono — blok <meta><author>…</author></meta> postane stolpec meta_author namesto lastne tabele z eno vrstico.

Iz JSON ​

Ista zamisel, izražena v besednjaku JSON:

V dokumentuV bazi
Ključ s skalarno vrednostjoStolpec v tabeli tega objekta
Ključ z objektomVgrajen v nadrejenega kot stolpci s predpono
Ključ s poljemPodrejena tabela s tujim ključem na nadrejeno
Goli skalar v poljuStolpec _text tabele

JSON pove nekaj jasneje kot XML: polje pomeni »več« tudi takrat, ko ta datoteka slučajno vsebuje en sam element, zato postane tabela ne glede na dolžino. XML mora isto izpeljati iz ponavljanja oznake, zaradi česar je enkraten podrejeni element videti enako kot zbirka, ki ima slučajno enega člana.

Polje na najvišji ravni se obravnava kot seznam korenskih zapisov. Objekt na najvišji ravni je en korenski zapis. Pri .jsonl / .ndjson je vsaka vrstica en korenski zapis, prazne vrstice pa se preskočijo.

Ker JSON nima korenske oznake, po kateri bi poimenovali stvari, ime korenske tabele določi ime datoteke — catalog.json ustvari tabelo catalog.

Kako deluje ​

V praksi so pomembne tri stvari glede izvedbe:

  • Razčlenjevanje v dveh prehodih. Prvi prehod določi strukturo, drugi naloži podatke.
  • Pomnilnik. XML in JSON, ločen po vrsticah, se bereta pretočno, zato velikost datoteke omejuje disk in ne RAM. Navadna datoteka .json je ena sama vrednost JSON in jo je treba razčleniti v celoti, zato je zelo velika omejena s pomnilnikom. Če imate izvoz pod nadzorom, zahtevajte .ndjson.
  • Tuji ključi se uveljavijo po nalaganju podatkov. Zapisi so pogosto urejeni tako, da podrejeni pride pred nadrejenim; če bi omejitve ustvarili vnaprej, bi zavrnile povsem dobre vrstice. Omejitve se dodajo na koncu, ko so vse vrstice na mestu.

Potem ​

  • V Tabele in stolpci preverite izpeljane tipe in zožite vse, kar je prišlo širše, kot je treba.
  • Odprite ER diagram, da vidite izpeljano strukturo.
  • Dodajte indekse za stolpce, po katerih boste dejansko poizvedovali — uvoz ustvari ključe in omejitve, ne pa indeksov, ki jih potrebuje vaše poročanje.

Če tabela ni pravilna ​

Struktura sledi dokumentu. Kadar je polje med zapisi nedosledno, analiza tip razširi tako, da sprejme vse vrednosti, ki jih je videla. Popravek po nalaganju — en ALTER TABLE na preverjenem naboru podatkov — je običajno hitrejši od preoblikovanja izvorne datoteke.

Logične vrednosti so pogosto presenečenje: JSON true / false se shranita kot 1 / 0, zato je stolpec celoštevilski in ne besedilni.