CodeKitHub
JSON-työkalut

CSV-SQL-muunnin

Viimeksi päivitetty:

CSV-rivin muuttamiseksi SQL:ksi jokaisesta sarakkeesta tulee arvo INSERT INTO -lauseessa — numerot pysyvät ilman lainausmerkkejä, teksti kääritään yksinkertaisiin lainausmerkkeihin sisäiset lainausmerkit kahdentaen (O'Brien muuttuu muotoon O''Brien), ja tyhjistä soluista tulee NULL. Tämä työkalu tekee tämän muunnoksen koko CSV-tiedostollesi, kokonaan selaimessasi.

Mikä tämä työkalu on?

Testitietokannan täyttäminen, taulukkolaskentaviennin lataaminen tauluun tai pienen datajoukon siirtäminen alkaa usein samalla tavalla: sinulla on CSV-tiedosto ja tarvitset SQL:ää. Tämä työkalu jäsentää CSV:si (käyttäen otsikkoriviä sarakkeiden niminä) ja rakentaa yhden INSERT INTO -lauseen, joka kattaa kaikki datarivit, valmiina liitettäväksi tietokantaohjelmaan.

Merkkijonoarvot käärtään yksinkertaisiin lainausmerkkeihin, ja sisäiset lainausmerkit merkitään kahdentamalla (O'Brien muuttuu muotoon O''Brien), mikä on MySQL:n, PostgreSQL:n ja SQLiten yhteinen vakiokäytäntö. Tyhjä CSV-solu kirjoitetaan SQL-avainsanana NULL eikä tyhjänä merkkijonona — tämä on tietoinen valinta, sillä tyhjä solu taulukkolaskennassa tarkoittaa yleensä "ei arvoa" eikä "tyhjää tekstinpätkää", ja NULL on se, mitä useimmat skeemat odottavat siihen.

Sen, saako arvo lainausmerkit vai jätetäänkö se ilman, ratkaisee yksinkertainen heuristiikka, ei todellinen tyyppipäättely: jos rajattu solu näyttää tavalliselta kokonaisluvulta tai desimaaliluvulta (valinnaisesti alkuun sijoitetulla miinusmerkillä), se kirjoitetaan ilman lainausmerkkejä; kaikki muu — mukaan lukien asiat, jotka vain muistuttavat numeroita ylimääräisin merkein, kuten puhelinnumerot tai etunollalliset postinumerot — lainataan merkkijonona. Tämä pitää tuloksen rehellisenä: se on hyvä lähtökohta pienelle tuonnille, ei korvaa datan validointia varsinaista taulun skeemaa vasten ennen ajamista.

Lähde: CSV-jäsennys noudattaa RFC 4180-standardia, joka on lähinnä virallista CSV-standardia; yksinkertaisen lainausmerkin kahdentaminen merkkijonon merkintänä on yhteinen käytäntö, jonka dokumentoivat MySQL, PostgreSQL ja SQLite.

Miksi käyttää sitä?

  • Mukautettu taulun nimi — aseta kohdetaulu kerran, ja jokainen rivi kohdistuu siihen tauluun.
  • Oikea merkkijonon merkintä — arvojen sisäiset yksinkertaiset lainausmerkit kahdennetaan, jotta SQL ei mene rikki tai katkea.
  • Ennustettava NULL-käsittely — tyhjistä soluista tulee NULL tyhjän merkkijonon sijaan, mikä vastaa sitä, miten useimmat tietokannat erottavat puuttuvan datan.
  • Yleinen SQL-syntaksi — tässä luotu INSERT INTO ... VALUES ... -muoto toimii sellaisenaan MySQL:ssä, PostgreSQL:ssä ja SQLitessä.
  • 100 % selainpohjainen — CSV-datasi (joka saattaa sisältää asiakastietoja tai yritystietoja) jäsennetään ja muunnetaan selaimessasi eikä sitä koskaan ladata minnekään.

Käyttöohje

  1. Liitä CSV-dataa otsikkorivin kanssa, esim. name,age\nAlice,30\nBob,25.
  2. Syötä kohdetaulun nimi (oletuksena my_table).
  3. Klikkaa "Generate SQL".
  4. Kopioi INSERT INTO -lause tai lataa se .sql-tiedostona, ja aja se sitten tietokantaasi vasten.

Esimerkki

Syöte

name,age,city
Alice,30,
Bob,,NYC

Tuloste

INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
  ('Alice', 30, NULL),
  ('Bob', NULL, 'NYC');

Huomaa, että tyhjistä soluista tuli NULL (ei tyhjiä merkkijonoja), ja numeromainen age-arvo 30 jätettiin ilman lainausmerkkejä, kun taas jokainen tekstiarvo lainattiin.

Käytännön vinkkejä

  • Paikallisen testitietokannan täyttäminen: vie pieni näyte CSV:nä taulukkolaskennasta, muunna se täällä ja aja INSERT-lause kehitystietokantaasi vasten.
  • Tarkista aina sarakkeiden tyypit ennen generoidun SQL:n ajamista todellista taulua vasten — tämä työkalu päättelee numeeriset ja tekstiarvot yksinkertaisella heuristiikalla, ei varsinaisen skeemasi perusteella, joten tietyn muodon odottava kokonaislukusarake saattaa tarvita manuaalista säätöä.
  • Jos sinulla on tuhansia rivejä, tämän työkalun luoma yksi monirivinen INSERT-lause on silti pätevä SQL, mutta hyvin suuret lauseet voivat osua tietokannan maksimipakettikokoon — jaa CSV pienempiin eriin etukäteen, jos törmäät siihen rajaan.

Miksi NULL eikä tyhjä merkkijono

Yleinen virhe CSV-SQL-skriptejä käsin kirjoitettaessa on käsitellä jokainen puuttuva solu tyhjänä merkkijonona ''. Se on teknisesti pätevää SQL:ää, mutta se ei yleensä tarkoita sitä mitä haluat: kokonaislukusarake hylkää arvon '' suoraan, ja jopa tekstisarakkeessa '' tarkoittaa hiljaisesti eri asiaa kuin "emme tiedä tätä arvoa" useimmissa skeemasuunnitelmissa ja raportointikyselyissä (WHERE column IS NULL -tarkistus ei täsmää tyhjiin merkkijonoihin, eikä päinvastoin). NULL-arvon käyttäminen tyhjille soluille vastaa semantiikkaa, jota useimmat tietokannat ja ORM:t odottavat, ja se välttää tyyppivirheet, kun numeerisessa sarakkeessa sattuu olemaan puuttuvia arvoja joillakin riveillä.

Usein kysytyt kysymykset

Toimiiko tämä jokaisen SQL-tietokannan kanssa?

Generoitu syntaksi — takaisinkenoviivoin lainatut tunnisteet, yksinkertaisin lainausmerkein merkityt merkkijonoarvot, vakiomuotoinen INSERT INTO ... VALUES ... — on yhteinen MySQL:lle, PostgreSQL:lle ja SQLitelle. PostgreSQL ei tiukasti vaadi takaisinkenoviivoja tunnisteiden ympärille (se käyttää kaksinkertaisia lainausmerkkejä, jos lainausta tarvitaan ollenkaan), mutta takaisinkenoviivoin lainatut nimet ovat vaarattomia myös siellä, kunhan sinulla ei ole epätavallisia sarakenimiä, jotka törmäävät varattuihin sanoihin. Mitään yhtä virallista SQL-standardia ei noudateta tässä — vain syntaksia, joka toimii sellaisenaan yleisimmissä tietokannoissa.

Miksi tyhjästä solusta tulee NULL eikä tyhjä merkkijono ''?

Tämä on tietoinen suunnitteluvalinta: useimmissa todellisissa CSV-vienneissä tyhjä solu tarkoittaa, että arvo on tuntematon tai ei sovellu, ei kirjaimellisesti tyhjää tekstiä. NULL on se, mitä useimmat tietokantaskeemat odottavat siihen. Jos käyttötapauksesi todella tarvitsee tyhjiä merkkijonoja, sinun täytyy muokata generoitua SQL:ää käsin niiden tapausten osalta.

Miten työkalu päättää, tarvitseeko arvo lainausmerkit?

Kyse on yksinkertaisesta heuristiikasta, ei todellisesta tyyppipäättelystä: jos rajattu solu koostuu vain numeroista (valinnaisella etumerkillä ja enintään yhdellä desimaalipisteellä), se kirjoitetaan numerona ilman lainausmerkkejä. Kaikki muu lainataan merkkijonona. Tämä tarkoittaa, että postinumeroa kuten 00501 tai puhelinnumeroa käsitellään tekstinä (koska se epäonnistuu tiukassa kokonaislukumallissa vain jos siinä on ylimääräisiä merkkejä — pelkkä etunolla jäsentyy silti numeroksi täällä, joten tarkista tunnisteet kuten postinumerot ja ID:t ennen SQL:n ajamista).

Ladataanko dataani minnekään?

Ei. Jäsennys ja SQL:n luonti tapahtuvat molemmat JavaScriptillä selaimessasi — mitään ei lähetetä palvelimelle, mikä tekee tästä turvallisen käyttää vietyjen asiakas- tai yritystietojen kanssa.

Osaako se käsitellä CSV-arvoja, joissa on pilkkuja tai lainausmerkkejä?

Kyllä. CSV jäsennetään asianmukaisella lainattuja kenttiä ymmärtävällä jäsentimellä, joka ymmärtää pilkut, rivinvaihdot ja kahdennetut lainausmerkit lainattujen kenttien sisällä — ei naiivilla pilkkuun perustuvalla jaolla — joten kenttä kuten "Smith, John" luetaan yhtenä arvona, ei kahtena sarakkeena.

Liittyvät työkalut