Theory
Marks spreadsheet તરીકે આવે છે
અધ્યાપકો ક્યારેય INSERT નાં વિધાન ટાઈપ કરશે નહીં. ResultDesk ના inbox માં જે આવે છે એ છે dbms_marks.csv, Excel માંથી નિકાસ થયેલું:
roll,subject,score
101,DBMS,78
102,DBMS,55
સાઠ હરોળ. સાઠ INSERT ટાઈપ કરવા એ સજા છે, workflow નહીં.
sqlite3 નું shell આખી file બે commands માં ગળી શકે છે, જો તમે એક નાની વિગત બરાબર સંભાળો: એ પહેલી લીટી.
Theory
ડિલિવરીની ગાડી અને દરવાજાનું રજિસ્ટર
CSV ની file એ ડિલિવરીની ગાડી છે: માલ હરોળમાં ખડકાયેલો, ઉપર લેબલનું પાનું (header) જે દરેક ખાનું શું વહન કરે છે એનું નામ આપે છે.
.import એ દરવાજો છે: એ દરેક હરોળ તમારા કોષ્ટકમાં ઉતારે છે. અડચણ: જો વખાર (કોષ્ટક) પોતાનાં લેબલ સાથે પહેલેથી હાજર હોય, તો દરવાજા માટે ગાડીનું લેબલનું પાનું ફક્ત બીજું એક ખોખું છે: એ data તરીકે છાજલીએ ચઢી જાય છે. લેબલના પાનાનું શું થાય એ નક્કી કરવું જ આયાતનું આખું કૌશલ્ય છે.
Theory
બે command ની આયાત
.mode csv shell ના parser ને અલ્પવિરામથી છૂટા પડેલા સ્વરૂપ પર બદલે છે (એ અંદર અલ્પવિરામ ધરાવતાં અવતરણચિહ્નવાળાં ખાનાં પણ સંભાળે છે).
.import dbms_marks.csv marks file ને કોષ્ટકમાં વાંચે છે.
પછી બધું લક્ષ્ય પર આધારિત છે:
- કોષ્ટક અસ્તિત્વમાં નથી: .import એને બનાવે છે, ખાનાંનાં નામ માટે header ની લીટી વાપરીને (બધું TEXT).
- કોષ્ટક અસ્તિત્વમાં છે: .import દરેક લીટીને data તરીકે નાખે છે, header સહિત: એક નકલી હરોળ ('roll', 'subject', 'score') તમારા કોષ્ટકમાં ઊતરે છે.
Follow along
હયાત marks ના કોષ્ટકમાં સ્વચ્છ આયાત
- .mode csv Shell ને કહો કે આવતી file અલ્પવિરામથી છૂટી પડેલી છે.
- .import --csv --skip 1 dbms_marks.csv marks આધુનિક SQLite: --skip 1 એ header ની હરોળ કૂદે છે. (જૂનાં shells: આયાત કરો, પછી નકલી હરોળ કાઢવા DELETE FROM marks WHERE roll = 'roll';)
- SELECT COUNT(*) FROM marks; ચકાસો કે ગણતરી બરાબર file ની data ની હરોળ જેટલી વધી: ગાડીમાં 60 હરોળ, છાજલીએ 60 નવી હરોળ.
- પ્રકારો તપાસો: SELECT roll, score FROM marks LIMIT 3; હયાત કોષ્ટકમાં આયાત થયેલાં મૂલ્યો એની affinities પાળે છે; .import એ બનાવેલું કોષ્ટક બધું TEXT તરીકે રાખે છે.
Quiz
એક student .mode csv પછી **હયાત** marks ના કોષ્ટકમાં .import marks.csv marks ચલાવે છે, પછી data માં ('roll','subject','score') ની હરોળ મળે છે. કેમ?
- Header ની લીટી data ની હરોળ તરીકે આયાત થઈ: હયાત કોષ્ટકમાં .import દરેક લીટીને data ગણે છે
- Download દરમિયાન CSV ની file બગડી ગઈ
- .mode csv હંમેશા કોષ્ટકોમાં શીર્ષકની હરોળ ઉમેરે છે
- SQLite ને પછીના નિકાસ માટે headers સંઘરવા પડે છે
Show the answer
Header ની લીટી data ની હરોળ તરીકે આયાત થઈ: હયાત કોષ્ટકમાં .import દરેક લીટીને data ગણે છે
લક્ષ્ય કોષ્ટક પહેલેથી હાજર હોય ત્યારે, .import પાસે લીટી 1 ને ખાસ ગણવાનું કોઈ કારણ નથી: header બીજી કોઈ પણ હરોળની જેમ અંદર આવે છે, અને જાણીતી નકલી નોંધ બની જાય છે. ઉકેલ: આયાત પર --skip 1, પહેલાં header કાઢી નાખવો, કે પછી નકલી હરોળ DELETE કરવી. વિકલ્પ B થી D વર્તન ઉપજાવે છે; header-as-data નો ફાંદો સાચો, સામાન્ય, અને બરાબર એ જ છે જે શીખવવા આ વિષય છે.
Think first
બનેલા કોષ્ટકની આગાહી કરો
allmarks નું કોષ્ટક અસ્તિત્વમાં નથી. તમે .mode csv પછી .import all_terms.csv allmarks ચલાવો છો, અને file નું header છે roll,subject,score. Tap કરતાં પહેલાં: આયાત ચાલે છે? allmarks ને કયાં ખાનાં મળે છે, અને score ના ખાના સાથે અડચણ શું છે?
Show the answer
એ ચાલે છે: .import એ allmarks બનાવે છે, header માંથી ખાનાંનાં નામ roll, subject, score લઈને (આ કિસ્સામાં એ લેબલ તરીકે વપરાય છે, data તરીકે નખાતાં નથી).
અડચણ: દરેક ખાનું TEXT ની affinity સાથે બને છે: score માં '78' એ string છે, 78 એ સંખ્યા નહીં. SUM(score) રૂપાંતર દ્વારા હજી ચાલી શકે, પણ ORDER BY '9' ને '78' થી ઉપર ગોઠવી શકે. વ્યાવસાયિક ટેવ: પહેલાં પ્રકારવાળું કોષ્ટક જાતે બનાવો, પછી --skip 1 સાથે એમાં આયાત કરો.
Watch out
પરીક્ષાઓ જે આયાતની checklist ને ફળ આપે છે
1. .import પહેલાં .mode csv, નહીં તો parser file ખોટી વાંચે છે.
2. હયાત કોષ્ટક: header સંભાળો (--skip 1, પહેલાં કાઢી નાખવો, કે પછી delete કરવો).
3. .import દ્વારા બનેલું નવું કોષ્ટક: બધાં ખાનાં TEXT: સંખ્યાઓને સંભાળ જોઈએ.
4. File ની હરોળની સંખ્યા સામે COUNT(*) થી ચકાસો.
"CSV કેવી રીતે આયાત કરો" ના જવાબમાં આ ચાર લખો અને એ પૂરો છે.
Theory
CSV એ સર્વસામાન્ય ભાષા છે
આ પછી તમે મળો છો એ દરેક ઓજાર CSV બોલે છે: Excel એને નિકાસ કરે છે, બેંકો અને પરીક્ષા બોર્ડ એને email કરે છે, pandas એને એક call થી વાંચે છે (read_csv, એકમ 4, જ્યાં આ જ આયાત shell ને બદલે Python માં થાય છે). Header નો નિયમ અહીં એક વાર સિદ્ધ કરો અને એ દરેક ઓજારમાં તમને વળતર આપે છે: પ્રશ્ન હંમેશા એક જ છે "લીટી 1 એ લેબલ છે કે data?"
Summary
Key takeaways
- CSV: સાદા લખાણની હરોળ, અલ્પવિરામથી છૂટી પડેલી, પહેલી લીટી સામાન્ય રીતે header.
- આયાત = .mode csv, પછી .import file.csv table.
- હયાત કોષ્ટક: દરેક લીટી data બને છે, header સહિત: એને કૂદો (--skip 1) કે નકલી હરોળ કાઢો.
- અસ્તિત્વમાં ન હોય એવું કોષ્ટક: .import એને header માંથી બનાવે છે, પણ બધાં ખાનાં TEXT હોય છે.
- દરેક આયાત SELECT COUNT(*) થી ચકાસો.
- Memory hook: ડિલિવરીની ગાડીનું લેબલનું પાનું: લેબલ કે માલ?