Kas ir šis rīks?
Testa datubāzes piepildīšana, izklājlapas eksporta ielāde tabulā vai neliela datu kopas migrācija bieži sākas vienādi: tev ir CSV fails, un vajag SQL. Šis rīks parsē tavu CSV (izmantojot virsrakstu rindu kā kolonnu nosaukumus) un veido vienu INSERT INTO instrukciju, kas aptver katru datu rindu, gatavu ielīmēšanai datubāzes klientā.
Teksta vērtības tiek ietvertas vienpēdiņās ar dubultotām iekšējām pēdiņām (tā O'Brien kļūst par O''Brien), kas ir standarta pēdiņu apstrādes noteikums, ko izmanto MySQL, PostgreSQL un SQLite. Tukša CSV šūna tiek uzrakstīta kā SQL atslēgvārds NULL, nevis tukša virkne — tā ir apzināta izvēle, jo tukša šūna izklājlapā parasti nozīmē "nav vērtības", nevis "tukšs teksta gabals", un tieši to no lielākās daļas shēmu sagaida NULL.
Vai vērtība tiek ietverta pēdiņās vai atstāta bez tām, tiek noteikts ar vienkāršu heiristiku, nevis īstu tipu secinājumu: ja apgriezta šūna izskatās kā vienkāršs vesels vai decimāls skaitlis (ar iespējamu mīnus zīmi priekšā), tā tiek uzrakstīta bez pēdiņām; viss pārējais — arī tas, kas tikai atgādina skaitli ar papildu rakstzīmēm, piemēram, telefona numuri vai pasta indeksi ar sākuma nullēm — tiek ietverts pēdiņās kā teksts. Tas notur izvadi godīgu: tas ir labs sākumpunkts nelielai importēšanai, nevis aizstājējs tavu datu validācijai pret faktisko tabulas shēmu, pirms izpildi.
Avots: CSV parsēšana seko RFC 4180, tuvākajam formālajam CSV standartam; vienpēdiņu dubultošana teksta pēdiņu apstrādei ir kopīga konvencija, ko dokumentē MySQL, PostgreSQL un SQLite.
Kāpēc to izmantot?
- Pielāgots tabulas nosaukums — iestati mērķa tabulu vienreiz, un katra rinda mērķē uz to.
- Pareiza teksta pēdiņu apstrāde — vienpēdiņas vērtību iekšienē tiek dubultotas, lai SQL nesalūztu vai netiktu saīsināts.
- Paredzama NULL apstrāde — tukšas šūnas kļūst par NULL, nevis tukšu virkni, atbilstoši tam, kā lielākā daļa datubāzu atšķir iztrūkstošus datus.
- Izplatīts SQL sintakse — šeit ģenerētā INSERT INTO ... VALUES ... forma darbojas bez izmaiņām MySQL, PostgreSQL un SQLite.
- 100% klientā — tavi CSV dati (kas var ietvert klientu vai biznesa datus) tiek parsēti un pārveidoti tavā pārlūkā un nekad netiek nekur augšupielādēti.
Kā to lietot
- Ielīmē CSV datus ar virsrakstu rindu, piemēram, name,age\nAlice,30\nBob,25.
- Ievadi mērķa tabulas nosaukumu (pēc noklusējuma my_table).
- Nospied "Generate SQL".
- Kopē INSERT INTO instrukciju vai lejupielādē to kā .sql failu, tad izpildi savā datubāzē.
Piemērs
Ievade
name,age,city
Alice,30,
Bob,,NYCIzvade
INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
('Alice', 30, NULL),
('Bob', NULL, 'NYC');Pamani, kā tukšās šūnas kļuva par NULL (nevis tukšām virknēm), un skaitliski izskatošā age vērtība 30 palika bez pēdiņām, kamēr katra teksta vērtība tika ietverta pēdiņās.
Praktiski padomi
- Vietējas testa datubāzes piepildīšana: eksportē nelielu paraugu kā CSV no izklājlapas, pārvērt to šeit un izpildi INSERT instrukciju pret savu izstrādes datubāzi.
- Vienmēr pārskati kolonnu tipus, pirms izpildi ģenerēto SQL pret reālu tabulu — šis rīks secina skaitlisku vai teksta tipu ar vienkāršu heiristiku, nevis pēc tavas faktiskās shēmas, tāpēc vesela skaitļa kolonnai ar konkrētu formātu var būt vajadzīga manuāla korekcija.
- Ja ir tūkstošiem rindu, viena vairāku rindu INSERT instrukcija, ko rada šis rīks, joprojām ir derīgs SQL, bet ļoti lielas instrukcijas var sasniegt datubāzes maksimālo pakotnes izmēru — sadali CSV mazākos gabalos, ja saskaries ar šo ierobežojumu.
Kāpēc NULL, nevis tukša virkne
Izplatīta kļūda, ar roku rakstot CSV-uz-SQL skriptus, ir katras trūkstošas šūnas uzskatīšana par tukšu virkni ''. Tas ir tehniski derīgs SQL, bet parasti nenozīmē to, ko vēlies: vesela skaitļa kolonna pilnībā noraidīs '', un pat teksta kolonnā '' klusi nozīmē kaut ko citu nekā "mēs nezinām šo vērtību" lielākajā daļā shēmu dizainu un pārskatu vaicājumu (WHERE column IS NULL pārbaude nesakritīs ar tukšām virknēm un otrādi). NULL izmantošana tukšām šūnām atbilst semantikai, ko sagaida lielākā daļa datubāzu un ORM, un tas novērš tipu kļūdas, ja skaitliskā kolonnā dažām rindām gadās iztrūkstošas vērtības.
Biežāk uzdotie jautājumi
Vai tas strādā ar katru SQL datubāzi?
Ģenerētā sintakse — apostrofā ietverti identifikatori, vienpēdiņās ietvertas teksta vērtības, standarta INSERT INTO ... VALUES ... — ir izplatīta MySQL, PostgreSQL un SQLite. PostgreSQL striktā ziņā neprasa apostrofu ap identifikatoriem (tas izmanto dubultpēdiņas, ja vispār nepieciešamas pēdiņas), bet apostrofā ietverti nosaukumi tur arī nekaitē, ja vien nav neparastu kolonnu nosaukumu, kas sakrīt ar rezervētiem vārdiem. Šeit netiek ievērots viens vienots oficiāls SQL standarts — tikai sintakse, kas darbojas bez izmaiņām visbiežāk lietotajās datubāzēs.
Kāpēc tukša šūna kļūst par NULL, nevis tukšu virkni ''?
Tā ir apzināta dizaina izvēle: lielākajā daļā reālu CSV eksportu tukša šūna nozīmē, ka vērtība nav zināma vai nav piemērojama, nevis burtiski tukšs teksta gabals. NULL ir tas, ko lielākā daļa datubāzu shēmu sagaida šai situācijai. Ja tavam gadījumam patiešām vajag tukšas virknes, tev būs ar roku jārediģē ģenerētais SQL šiem gadījumiem.
Kā rīks nosaka, vai vērtībai vajag pēdiņas?
Tā ir vienkārša heiristika, nevis īsts tipu secinājums: ja apgriezta šūna sastāv tikai no cipariem (ar iespējamu sākuma mīnusu un ne vairāk kā vienu decimālpunktu), tā tiek uzrakstīta bez pēdiņām kā skaitlis. Viss pārējais tiek ietverts pēdiņās kā teksts. Tas nozīmē, ka pasta indekss, piemēram, 00501, vai telefona numurs tiks uzskatīts par tekstu (jo tas neatbilst striktajam vesela skaitļa modelim tikai tad, ja tam ir papildu rakstzīmes — sākuma nulle vien šeit joprojām tiek parsēta kā skaitliska, tāpēc pārbaudi identifikatorus, piemēram, pasta indeksus un ID, pirms izpildi SQL).
Vai mani dati tiek kaut kur augšupielādēti?
Nē. Parsēšana un SQL ģenerēšana abas notiek JavaScript tavā pārlūkā — nekas netiek nosūtīts uz serveri, kas padara to drošu lietošanai ar eksportētiem klientu vai biznesa ierakstiem.
Vai tas var apstrādāt CSV vērtības, kas satur komatus vai pēdiņas?
Jā. CSV tiek parsēts ar īstu pēdiņās ietvertu lauku parseri, kas saprot komatus, rindu pārtraukumus un dubultotas pēdiņas pēdiņās ietvertos laukos — nevis naivu sadalīšanu pēc komata —, tāpēc lauks, piemēram, "Smith, John", tiek nolasīts kā viena vērtība, nevis sadalīts divās kolonnās.