कोर्स
SQLite क्या है?
यदि आप रिलेशनल डेटाबेस सिस्टम से परिचित हैं, तो संभव है कि आपने MySQL, SQL Server या PostgreSQL जैसे दिग्गजों के बारे में सुना हो। हालाँकि, SQLite एक और उपयोगी RDBMS है जिसे सेटअप और संचालित करना बहुत सरल है और जिसके अन्य रिलेशनल डेटाबेस के मुकाबले कई विशिष्ट फीचर्स हैं। इन फीचर्स में शामिल हैं:
- सर्वर की आवश्यकता नहीं: यानी, कोई सर्वर प्रक्रियाएँ नहीं हैं जिन्हें शुरू, बंद या कॉन्फ़िगर करना पड़े। इंस्टेंस असाइन करने या यूज़र एक्सेस परमिशन प्रबंधित करने के लिए डेटाबेस प्रशासकों की आवश्यकता नहीं होती।
- सरल डेटाबेस फ़ाइलें: एक SQLite डेटाबेस एक एकल साधारण डिस्क फ़ाइल होती है जिसे किसी भी डायरेक्टरी में संग्रहीत किया जा सकता है। इससे साझा करना भी आसान हो जाता है क्योंकि डेटाबेस फ़ाइलों को आसानी से मेमोरी स्टिक पर कॉपी किया जा सकता है या ईमेल के माध्यम से भेजा जा सकता है।
- मैनिफेस्ट टाइपिंग: अधिकांश SQL डेटाबेस इंजन स्थैतिक टाइपिंग पर निर्भर करते हैं। यानी, आप किसी कॉलम के साथ संबद्ध विशेष डेटाटाइप के समान प्रकार के मान ही स्टोर कर सकते हैं। हालाँकि, SQLite मैनिफेस्ट टाइपिंग का उपयोग करता है, जो किसी भी कॉलम में, कॉलम के घोषित डेटाटाइप की परवाह किए बिना, किसी भी प्रकार के किसी भी मात्रा के डेटा का भंडारण करने की अनुमति देता है। ध्यान दें कि इस नियम के कुछ अपवाद हैं। ऐसा ही एक अपवाद integer primary key कॉलम हैं, जो केवल पूर्णांक ही स्टोर कर सकते हैं।
जैसा कि अधिकांश चीज़ों के साथ होता है, अन्य डेटाबेस इंजनों की तुलना में SQLite की कुछ सीमाएँ भी हैं। उदाहरण के लिए, SQLite में Right या Full Outer Joins करने का विकल्प नहीं है, और सर्वरलेस प्रकृति सुरक्षा और डेटा के दुरुपयोग से सुरक्षा के संदर्भ में भी नुकसानदायक हो सकती है। फिर भी, यह एक बहुत ही शक्तिशाली टूल है जो कुछ स्थितियों में बेहद काम आता है। उदाहरण के लिए, मैंने हाल ही में एक सोशल मीडिया विश्लेषण प्रोजेक्ट में लाखों Twitter उपयोगकर्ताओं की $edge \space list^{1}$ को बहुत ही सरल और कुशल तरीके से स्टोर करने के लिए SQLite डेटाबेस का उपयोग किया।
इसलिए, इस शुरुआती ट्यूटोरियल में, मैं दिखाऊँगा कि SQLite डेटाबेस के साथ कैसे काम किया जाता है। हम SQLite सेटअप, टेबल निर्माण और ऑपरेशंस, SQLite डॉट कमांड्स, और SQLite डेटाबेस के अंदर डेटा में हेरफेर करने के लिए सरल SQL क्वेरियों के उपयोग पर जाएँगे।
$^{1}$ एक edge list या adjacency list नेटवर्क विश्लेषण में ग्राफ़ का प्रतिनिधित्व करने के लिए प्रयुक्त अव्यवस्थित सूचियों का संग्रह है। प्रत्येक सूची ग्राफ़ में मौजूद किसी दिए गए नोड या वर्टेक्स के पड़ोसियों के सेट का वर्णन करती है।
SQLite कैसे इंस्टॉल और सेटअप करें
सबसे पहले हम यह कवर करेंगे कि अपने कंप्यूटर में SQLite कैसे लाएँ। यह अत्यंत सरल है। यदि आप Sayak Paul द्वारा SQLite with Python Tutorial देखें, तो आपको महसूस होगा कि DB Browser for SQLite नाम का एक GUI टूल है जो आपको आसानी से शुरुआत करने में मदद कर सकता है। हालाँकि, विविधता के लिए, मैं दिखाऊँगा कि कमांड-लाइन टूल का उपयोग कैसे करें, जिसे मैं भी कभी-कभी प्राथमिकता देता हूँ।
यदि आपके पास Windows डिवाइस है, तो सबसे पहले आपको निम्न साइट पर जाकर sqlite-tools-win32-x86-3270200.zip डाउनलोड करना होगा। फ़ोल्डर को अनज़िप करने के बाद, आपको निम्न तीन फ़ाइलें दिखाई देनी चाहिए:

इसके बाद, SQLite कमांड लाइन प्रारंभ करना उतना ही सरल है जितना कि sqlite3 एप्लिकेशन पर क्लिक करना, जिससे कमांड लाइन कुछ इस प्रकार पॉप अप होगी:

अब आप नोटिस कर सकते हैं कि SQLite का डिफ़ॉल्ट एक अस्थायी इन-मेमोरी डेटाबेस का उपयोग करना है। अधिकांश समय आप ऐसा नहीं चाहेंगे। इसके बजाय, हम डॉट कमांड .open का उपयोग करके, उसके बाद अपने नए डेटाबेस फ़ाइल को देने वाला नाम टाइप करके, एक नया डेटाबेस बनाएँगे (नीचे देखें):

बस इतना करते ही, आपने एक नया डेटाबेस बना लिया। साथ ही, ध्यान दें कि डेटाबेस फ़ाइल बनाने के लिए अपने मनचाहे डेटाबेस नाम के बाद .db लगाना आवश्यक है। हमने डेटाबेस का नाम Tweet_Data.db रखा है क्योंकि मैं डेटाबेस में तालिकाएँ भरने के लिए ट्वीट्स का उपयोग करूँगा।
टेबल्स बनाना
अब जब डेटाबेस बन चुका है, हम अपने ट्वीट्स की टेबल बनाने की प्रक्रिया शुरू कर सकते हैं। हम यह दो तरीकों से कर सकते हैं। पहला, हम एक .csv फ़ाइल को सीधे इम्पोर्ट करके उसे टेबल बना सकते हैं। यह .mode डॉट कमांड के बाद csv लिखकर SQLite को csv मोड पर सेट करके, और .import डॉट कमांड का उपयोग करके किया जाता है जो एक फ़ाइल (इस मामले में वही फ़ोल्डर में स्थित csv, लेकिन यदि आप पूरा पथ लिखते हैं तो आपके कंप्यूटर में कोई भी csv हो सकता है) और आपकी पसंद का एक टेबल नाम लेता है। आप कॉलम हेडर्स को प्रदर्शित करना भी चाह सकते हैं, इसके लिए .headers डॉट कमांड के बाद on लिखें। (नीचे देखें)

एक बार ऐसा करने के बाद, आप .tables कमांड का उपयोग करके किसी डेटाबेस फ़ाइल में उपलब्ध सभी टेबल्स प्रदर्शित कर सकते हैं, साथ ही .schema कमांड के बाद टेबल का नाम लिखकर टेबल की संरचना दिखा सकते हैं। इसके अलावा, आप डेटा वहाँ है या नहीं यह जाँचने के लिए SELECT $$ FROM Table_Name* जैसी सरल क्वेरी चला सकते हैं।

csv जैसी फ़ाइलों को इम्पोर्ट करके टेबल बनाने के अतिरिक्त, आप CREATE TABLE का उपयोग करके टेबल बना सकते हैं और फिर INSERT INTO का उपयोग करके नई पंक्तियाँ जोड़ सकते हैं। निम्न उदाहरण में, आप देखेंगे कि शून्य से टेबल कैसे बनाई जा सकती है और दो नई पंक्तियाँ कैसे डाली जा सकती हैं।
नोट: SQLite कमांड लाइन में, यदि आप मेरे उदाहरण की तरह अगली पंक्ति में वही क्वेरी लिखना जारी रखना चाहते हैं, तो जब नई पंक्ति चाहिए तब Enter दबाएँ। पंक्ति के अंत में सेमीकोलन होने पर Enter दबाने के बाद क्वेरी मूल्यांकित होगी।

SQLite से निर्यात करना
यदि किसी समय आप यह तय करते हैं कि किसी क्वेरी के परिणामों को किसी बाहरी फ़ाइल, जैसे कि csv, में निर्यात करना है, तो आप यह भी SQLite की शक्ति का उपयोग करके कर सकते हैं। एक साफ-सुथरे csv निर्यात के लिए, आप इम्पोर्ट की तरह ही प्रक्रिया अपना सकते हैं। पहले, .header के बाद on और .mode के बाद csv का उपयोग करें। फिर, .output डॉट कमांड का उपयोग करें और उसके बाद अपनी इच्छित csv फ़ाइल का नाम लिखें, और अंत में, वह SQL क्वेरी चलाएँ जिसे आप निर्यात करना चाहते हैं और .exit कमांड का उपयोग करके SQLite से बाहर निकलें। आइए पिछले चरण में बनाई गई नई टेबल को csv में निर्यात करने की कोशिश करें।

यह रही नई बनी csv, जिसमें Sample_Tweets_2 का डेटा भी है।

टेबल्स अपडेट करना
टेबल्स बनाने और निर्यात करने के अलावा, आप टेबल में पंक्तियों को अपडेट करने या किसी टेबल को पूरी तरह से हटाने के लिए UPDATE/SET और DROP TABLE SQL स्टेटमेंट्स का उपयोग भी कर सकते हैं। निम्न उदाहरण में हम खिलौना Sample_Tweets_2 टेबल में दूसरे ट्वीट को अपडेट करेंगे।

अब आइए खिलौना Sample_Tweets_2 टेबल को अलविदा कहें और DROP TABLE का उपयोग करके इसे डेटाबेस फ़ाइल से हटा दें:

Twitter डेटा को संभालने के लिए SQLite डेटाबेस का उपयोग
अब, आपको मोटे तौर पर यह पता चल गया है कि SQLite डेटाबेस के साथ कैसे काम करना है और टेबल्स में कैसे हेरफेर करना है, अब बस SQL क्वेरियों का उपयोग करके उपयोगी जानकारी निकालना बाकी है। फिलहाल, मैं अपने Twitter सोशल मीडिया विश्लेषण प्रोजेक्ट के दौरान की गई कुछ अपेक्षाकृत सरल क्वेरियाँ दिखाऊँगा। आप इसे SQLite डेटाबेस के वास्तविक-जीवन अनुप्रयोग को दर्शाने वाली एक छोटी-सी केस स्टडी के रूप में सोच सकते हैं।
चलें कुछ सरल से शुरू करते हैं; Sample_Tweets टेबल में सभी अद्वितीय Twitter उपयोगकर्ताओं के स्क्रीन नेम ढूँढना। उस प्रोजेक्ट में जिसके लिए मैंने इन ट्वीट्स का उपयोग किया, मेरे लिए यह आवश्यक था कि जिनसे भी मैंने ट्वीट्स इकट्ठा किए थे, उन सभी अद्वितीय उपयोगकर्ताओं को खोजूँ, क्योंकि मुझे उनकी followers सूची प्राप्त करनी थी ताकि मैं इस ट्यूटोरियल की शुरुआत में उल्लेख की गई edge list बना सकूँ।

डेटाबेस में 26,860 अद्वितीय उपयोगकर्ता। यह एक उत्कृष्ट सैंपल है, यह देखते हुए कि जिन विषयों पर मैं सुन रहा था वे वेबसाइट लोकलाइज़ेशन और अनुवाद थे। आइए थोड़ा अधिक जटिल SQL क्वेरी का उपयोग करके देखें कि सैंपल में सबसे अधिक ट्वीट्स वाले शीर्ष 20 उपयोगकर्ता कौन थे (रीट्वीट शामिल नहीं हैं):

जरा देखिए, सबसे अधिक ट्वीट्स एक बॉट के हैं! हालाँकि, जैसा कि निकला, उस सूची का अंतिम सदस्य, UweMuegge, इस प्रोजेक्ट के लिए मेरे द्वारा गणना किए गए विभिन्न नेटवर्क आँकड़ों के अनुसार काफ़ी प्रभावशाली है। फिर भी, वह निश्चित रूप से सबसे महत्वपूर्ण नहीं था।
अंत में, आइए एक और SQL क्वेरी का उपयोग करके देखें कि UweMuegge ने कौन-कौन से ट्वीट्स लिखे:

दो मुख्य विषय दिखते हैं—अनुवाद नौकरियों के विज्ञापन और अनुवाद सम्मेलनों के बारे में। यह कुछ हद तक समझ में आता है कि इस क्षेत्र के लोग उन्हें Twitter पर क्यों फॉलो करेंगे।
ऊपर दिए गए स्क्रीनशॉट से एक और बात सामने आती है कि आप SQLite कमांड-लाइन इंटरफ़ेस की एक सीमा से टकराते हैं। यदि आपके पास बड़े टेक्स्ट फ़ील्ड हैं, तो वे अच्छे से प्रदर्शित नहीं होंगे और पढ़ने में कठिन होंगे। इसलिए, इस स्थिति में DB Browser for SQLite का उपयोग करना अच्छा विचार है।
सारांश
इस ट्यूटोरियल में, आपने सीखा कि SQLite डेटाबेस कैसे बनाते हैं और डॉट कमांड्स तथा SQL स्टेटमेंट्स का उपयोग करके टेबल्स में कैसे हेरफेर करते हैं। इसके अलावा, आपने एक छोटी-सी वास्तविक-जीवन केस स्टडी भी देखी जहाँ मैंने Twitter से डेटा को संभालने के लिए SQLite डेटाबेस का उपयोग किया। यह बहुत कुछ है, तो बधाई!
यह ध्यान देने योग्य है कि SQLite डेटाबेस R और Python के साथ संयोजित होने पर सबसे अधिक उपयोगी होते हैं। आप Python में sqlite3 मॉड्यूल का उपयोग करके SQLite डेटाबेस में हेरफेर कर सकते हैं (यदि आप इसके बारे में अधिक सीखना चाहते हैं तो SQLite with Python ट्यूटोरियल देखें) या R में RSQLite के साथ। वास्तव में, Twitter उपयोगकर्ताओं के followers की वह edge list जिसका मैंने पहले उल्लेख किया है, एक SQLite डेटाबेस में संग्रहीत है जिसे मैंने RSQLIte का उपयोग करके बनाया था, जहाँ मैंने प्रत्येक उपयोगकर्ता के follower नेटवर्क को एक टेबल में जोड़कर संचित किया। प्रोजेक्ट के इस चरण में, SQLite का उपयोग महत्वपूर्ण था क्योंकि विद्युत आपूर्ति बाधित होना या Windows के स्वचालित अपडेट जैसी चीज़ें आपके कंप्यूटर को ज़बरन बंद कर सकती हैं और आपको followers नेटवर्क इकट्ठा करना फिर से शून्य से शुरू करना पड़ सकता है। Twitter के API rate limits के कारण इसमें लगभग 4 सप्ताह लग सकते हैं, इसलिए यदि ऐसा हो तो 0 से शुरू करना बहुत अवांछनीय है। हालाँकि, यदि आप चलते-चलते followers नेटवर्क को SQLite डेटाबेस में सहेजते जाते हैं, तो भले ही आपका कंप्यूटर जबरन बंद हो जाए, आप डेटाबेस में अंतिम सहेजे गए उपयोगकर्ता के बाद वाले उपयोगकर्ता से फिर से संग्रह शुरू कर सकते हैं, जो समय की बड़ी बचत है।
यह सिर्फ एक उदाहरण है कि किस तरह SQLite डेटाबेस एक डेटा वैज्ञानिक के अस्त्र-शस्त्रागार में शानदार टूल हो सकते हैं। मैं आपको प्रोत्साहित करता हूँ कि इस ट्यूटोरियल में कवर की गई बातों से आगे बढ़कर SQLite डेटाबेस और SQL पर और शोध करें। सीखते रहें; आसमान ही सीमा है!
यदि आप SQL में और सीखना चाहते हैं, तो DataCamp का Introduction to Relational Databases in SQL कोर्स करें।