यह ट्यूटोरियल DuckDB की प्रमुख विशेषताओं और व्यावहारिक उपयोगों से परिचित कराता है—जैसे टेबल बनाना, डेटा विश्लेषण करना, RAG एप्लिकेशन बनाना, और LLM के साथ SQL क्वेरी इंजन का उपयोग करना।
हाल ही में DuckDB बीटा से बाहर आकर अपना स्थिर संस्करण लेकर आया है और तेज़ी से लोकप्रिय हो रहा है, क्योंकि विभिन्न डेटा फ्रेमवर्क इसे अपने इकोसिस्टम में समाहित कर रहे हैं। यह DuckDB सीखने का बढ़िया समय है ताकि आप डेटा और एआई की बदलती दुनिया के साथ कदम मिला सकें।
इस ट्यूटोरियल में, हम DuckDB और इसकी प्रमुख विशेषताओं को कोड उदाहरणों के साथ सीखेंगे। हमारा मुख्य फोकस यह होगा कि हम इसे मौजूदा एआई फ्रेमवर्क्स के साथ कैसे जोड़ सकते हैं। इसके लिए हम दो प्रोजेक्ट्स पर काम करेंगे। पहले, हम DuckDB को एक वेक्टर डेटाबेस के रूप में उपयोग करके Retrieval-Augmented Generation (RAG) एप्लिकेशन बनाएंगे। फिर, हम DuckDB को एआई क्वेरी इंजन की तरह उपयोग करेंगे ताकि SQL के बजाय प्राकृतिक भाषा से डेटा का विश्लेषण किया जा सके।
DuckDB क्या है?
DuckDB एक आधुनिक, उच्च-प्रदर्शन, इन-मेमाेरी विश्लेषणात्मक डेटाबेस प्रबंधन प्रणाली (DBMS) है, जिसे जटिल विश्लेषणात्मक क्वेरियों के लिए डिज़ाइन किया गया है। यह एक रिलेशनल (टेबल-उन्मुख) DBMS है जो Structured Query Language (SQL) को सपोर्ट करता है।
DuckDB, SQLite की सरलता और उपयोग में आसानी को विश्लेषणात्मक वर्कलोड के लिए आवश्यक उच्च-प्रदर्शन क्षमताओं के साथ जोड़ता है, जिससे यह डेटा वैज्ञानिकों और विश्लेषकों के लिए उत्कृष्ट विकल्प बनता है।
मुख्य विशेषताएँ
सरल संचालन: DuckDB सर्वरलेस है, इसकी कोई बाहरी निर्भरता नहीं है, और यह होस्ट प्रोसेस में एम्बेडेड रहता है। इससे इंस्टॉल और डिप्लॉय करना आसान हो जाता है—बिल्ड करने के लिए केवल C++11 कंपाइलर चाहिए।
फ़ीचर-समृद्ध: यह व्यापक SQL डेटा प्रबंधन सुविधाओं को सपोर्ट करता है। DuckDB Python और R के साथ गहरा इंटीग्रेशन भी प्रदान करता है, जिससे यह डेटा साइंस और इंटरैक्टिव डेटा विश्लेषण के लिए उपयुक्त बनता है।
तेज़ विश्लेषणात्मक क्वेरियाँ: DuckDB एक कॉलमनर-वेक्टराइज़्ड क्वेरी एक्ज़िक्यूशन इंजन का उपयोग करता है जो एनालिटिक्स के लिए अनुकूलित है, जिससे समानांतर क्वेरी प्रोसेसिंग और बड़े डेटासेट्स का कुशल प्रबंधन संभव होता है।
मुक्त और ओपन सोर्स: यह उदार MIT लाइसेंस के तहत जारी किया गया है, जिससे यह मुफ्त और ओपन-सोर्स है।
पोर्टेबिलिटी: किसी बाहरी निर्भरता के बिना, DuckDB अत्यधिक पोर्टेबल है और विभिन्न ऑपरेटिंग सिस्टम (Linux, macOS, Windows) और CPU आर्किटेक्चर (x86, ARM) पर चल सकता है। यह DuckDB-Wasm का उपयोग कर वेब ब्राउज़रों में भी चल सकता है।
विस्तारशीलता: DuckDB एक लचीला एक्सटेंशन मैकेनिज़्म सपोर्ट करता है, जो नए डेटा टाइप्स, फ़ंक्शंस, फ़ाइल फ़ॉर्मैट्स और SQL सिंटैक्स जोड़ने की अनुमति देता है।
सघन परीक्षण: इसे Continuous Integration के माध्यम से गहन परीक्षण से गुज़ारा जाता है, जिसमें लाखों क्वेरियों वाला टेस्ट सूट शामिल है। यह विभिन्न प्लेटफ़ॉर्म और कंपाइलरों पर स्थिरता और विश्वसनीयता सुनिश्चित करता है।
DuckDB के साथ शुरुआत
इस सेक्शन में, हम DuckDB सेट अप करना, CSV फ़ाइलें लोड करना, डेटा विश्लेषण करना, और रिलेशन्स व क्वेरी फ़ंक्शंस के बारे में सीखेंगे।
हम DuckDB का Python पैकेज इंस्टॉल करने से शुरू करेंगे।
स्थायी डेटाबेस बनाने के लिए, आपको बस connect फ़ंक्शन का उपयोग करना है और उसे डेटाबेस का नाम देना है।
import duckdb
con = duckdb.connect("datacamp.duckdb")संचालित द्वारा
यह आपकी लोकल डायरेक्टरी में एक डेटाबेस फ़ाइल बना देगा।
हम एक CSV फ़ाइल लोड करेंगे और एक "bank" टेबल बनाएंगे। जिस डेटासेट का हम उपयोग कर रहे हैं वह DataLab पर उपलब्ध है और इसे Bank Marketing कहा जाता है। इसमें एक पुर्तगाली बैंकिंग संस्था के सीधे विपणन अभियानों का डेटा है, जो फ़ोन कॉल्स के माध्यम से किया गया था।
CSV फ़ाइल लोड करने के लिए, आपको पहले SQL का उपयोग करके एक टेबल बनानी होती है और फिर फ़ाइल लोड करने के लिए SQL स्क्रिप्ट के भीतर read_csv() फ़ंक्शन का उपयोग करना होता है। बस इतना ही सरल।
इसके बाद, हम एक SQL स्क्रिप्ट चलाकर अपनी टेबल को वैलिडेट करेंगे जो डेटाबेस के भीतर सभी टेबल्स दिखाती है और परिणाम को pandas DataFrame के रूप में दिखाने के लिए fetchdf फ़ंक्शन का उपयोग करेंगे।
नोट: हम DataCamp के DataLab का उपयोग कोड एडिटर के रूप में कर रहे हैं। DataLab एक क्लाउड Jupyter Notebook है, जिसे आप DataCamp अकाउंट होने पर मुफ्त में एक्सेस कर सकते हैं।
con.execute("""
CREATE TABLE IF NOT EXISTS bank AS
SELECT * FROM read_csv('bank-marketing.csv')
""")
con.execute("SHOW ALL TABLES").fetchdf()संचालित द्वारा
अब जब हमने सफलतापूर्वक अपनी पहली टेबल बना ली है, तो हम डेटा का विश्लेषण करने के लिए एक शुरुआती-स्तर की क्वेरी चलाएँगे और परिणाम को DataFrame के रूप में दिखाएँगे।
con.execute("SELECT * FROM bank WHERE duration < 100 LIMIT 5").fetchdf()संचालित द्वारा
DuckDB, DataCamp के नए DataLab में नैटिव रूप से एकीकृत है। इसके बारे में अधिक जानने के लिए ब्लॉग "DuckDB Makes SQL a First-Class Citizen on DataLab" पढ़ें और डेटा का विश्लेषण करने के लिए इंटरैक्टिव SQL सेल का उपयोग करें।
DuckDB Relations
DuckDB रिलेशन्स मूलतः टेबल्स हैं जिन्हें Relational API का उपयोग कर क्वेरी किया जा सकता है। यह API, Pandas DataFrames जैसे डेटा स्रोतों पर विभिन्न क्वेरी ऑपरेशनों को चेन करने की अनुमति देता है। SQL क्वेरियों का उपयोग करने के बजाय, आप डेटा के विश्लेषण के लिए विभिन्न Python फ़ंक्शंस को एक साथ चेन करेंगे।
उदाहरण के लिए, हम एक CSV फ़ाइल लोड करके DuckDB रिलेशन बनाएँगे। टेबल का विश्लेषण करने के लिए, आप फ़िल्टर और लिमिट फ़ंक्शंस को चेन कर सकते हैं।
bank_duck = duckdb.read_csv("bank-marketing.csv",sep=";")
bank_duck.filter("duration < 100").limit(3).df()संचालित द्वारा
हम DuckDB डेटाबेस से टेबल लोड करके भी रिलेशन्स बना सकते हैं।
['age','job','marital','education','default','housing','loan','contact','month','day_of_week','duration','campaign','pdays','previous','poutcome','emp.var.rate','cons.price.idx','cons.conf.idx','euribor3m','nr.employed','y']संचालित द्वारा
आइए एक ऐसा रिलेशन लिखें जो डेटा विश्लेषण के लिए कई फ़ंक्शंस का उपयोग करे।
rel.filter("duration < 100").project("job,education,loan").order("job").limit(3).df()संचालित द्वारा
हमें तीन पंक्तियाँ और कॉलम मिले हैं जो job के अनुसार सॉर्ट किए गए हैं और duration कॉलम से फ़िल्टर किए गए हैं।
DuckDB Query फ़ंक्शन
DuckDB का क्वेरी फ़ंक्शन डेटाबेस के भीतर SQL क्वेरियों को चलाने की अनुमति देता है और ऐसे परिणाम लौटाता है जिन्हें आगे के विश्लेषण के लिए विभिन्न फ़ॉर्मैट्स में बदला जा सकता है।
कोड उदाहरण में, हम SQL क्वेरी चला रहे हैं ताकि 30 वर्ष से अधिक आयु वाले क्लाइंट्स के जॉब टाइटल्स पता चलें, प्रत्येक जॉब के लिए संपर्क किए गए क्लाइंट्स की संख्या गिनी जाए, और कैंपेन की औसत अवधि निकाली जाए।
सरल डेटा विश्लेषण के लिए रिलेशनल डेटाबेस को मैनेज करना और क्वेरियाँ चलाना सीखने के लिए SQL Fundamentals स्किल ट्रैक लें।
res = duckdb.query("""SELECT
job,
COUNT(*) AS total_clients_contacted,
AVG(duration) AS avg_campaign_duration,
FROM
'bank-marketing.csv'
WHERE
age > 30
GROUP BY
job
ORDER BY
total_clients_contacted DESC;""")
res.df()संचालित द्वारा
अब हम डेटाबेस से कनेक्शन बंद करेंगे और उस कनेक्शन से संबद्ध संसाधनों को मुक्त करेंगे, ताकि संभावित मेमोरी और फ़ाइल हैंडल लीक से बचा जा सके।
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.vector_stores.duckdb import DuckDBVectorStore
from llama_index.core import StorageContext
from IPython.display import Markdown, displayसंचालित द्वारा
GPT-4o और एम्बेडिंग मॉडल सेट करना
भाषा मॉडल के लिए, हम नवीनतम GPT4o मॉडल और OpenAI API का उपयोग करेंगे। बड़े भाषा मॉडल (LLM) क्लाइंट बनाने के लिए, आपको बस मॉडल का नाम औरAPI key प्रदान करनी है।
import os
from llama_index.llms.openai import OpenAI
llm = OpenAI(model="gpt-4o",api_key=os.environ["OPENAI_API_KEY"])संचालित द्वारा
इसके बाद, हम OpenAI के text-embedding-3-small मॉडल का उपयोग कर एम्बेड मॉडल क्लाइंट बनाएँगे।
नोट: यदि आपके विकास परिवेश में “OPENAI_API_KEY” नाम से इनवायरनमेंट वेरिएबल सेट है, तो OpenAI API key अलग से देना वैकल्पिक है।
from llama_index.embeddings.openai import OpenAIEmbedding
embed_model = OpenAIEmbedding(
model="text-embedding-3-small",)संचालित द्वारा
हम OpenAI LLM और एम्बेडिंग मॉडलों को LlamaIndex की सभी फ़ंक्शंस के लिए ग्लोबल सेट करेंगे। संक्षेप में, ये मॉडल डिफ़ॉल्ट के रूप में सेट हो जाएँगे।
from llama_index.core import Settings
Settings.llm = llm
Settings.embed_model = embed_modelसंचालित द्वारा
DuckDB को वेक्टर डेटाबेस के रूप में उपयोग करना
अपने प्रोजेक्ट के लिए, हम डेटा फ़ोल्डर से PDF फ़ाइलें लोड करेंगे। ये PDF फ़ाइलें DataCamp की ट्यूटोरियल्स हैं, जिन्हें ब्राउज़र के प्रिंट फ़ंक्शन से PDF के रूप में सेव किया गया है।
फ़ोल्डर डायरेक्टरी को SimpleDirectoryReader फ़ंक्शन को दें और डेटा लोड करें।
documents = SimpleDirectoryReader("Data").load_data()संचालित द्वारा
इसके बाद, "datacamp.duckdb" नामक मौजूदा डेटाबेस का उपयोग करके “blog” नाम का एक वेक्टर स्टोर बनाएँ। फिर PDF के डेटा को एम्बेडिंग्स में बदलें और उन्हें वेक्टर स्टोर में सहेजें।
vector_store = DuckDBVectorStore(database_name ="datacamp.duckdb",table_name ="blog",persist_dir="./", embed_dim=1536)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(
documents, storage_context=storage_context
)संचालित द्वारा
यह जाँचने के लिए कि हमारा वेक्टर स्टोर सफलतापूर्वक बना है या नहीं, हम DuckDB Python API का उपयोग करके डेटाबेस से कनेक्ट करेंगे और डेटाबेस की सभी टेबल्स दिखाने के लिए SQL क्वेरी चलाएँगे।
import duckdb
con = duckdb.connect("datacamp.duckdb")
con.execute("SHOW ALL TABLES").fetchdf()संचालित द्वारा
हमारे पास दो टेबल्स हैं: एक “bank” प्रचारात्मक टेबल और एक “blog” टेबल, जो एक वेक्टर स्टोर है। “blog” टेबल में “embedding” कॉलम है जहाँ सभी एम्बेडिंग्स सहेजी जाती हैं।
एक साधारण RAG एप्लिकेशन बनाना
इंडेक्स को क्वेरी इंजन में बदलें, जो अपने आप पहले वेक्टर डेटाबेस में समान दस्तावेज़ खोजेगा और अतिरिक्त संदर्भ का उपयोग करके उत्तर जनरेट करेगा।
RAG क्वेरी इंजन का परीक्षण करने के लिए, हम ट्यूटोरियल के बारे में प्रश्न पूछेंगे।
query_engine = index.as_query_engine()
response = query_engine.query("Who wrote 'GitHub Actions and MakeFile: A Hands-on Introduction'?")
display(Markdown(f"<b>{response}</b>"))संचालित द्वारा
और उत्तर सही है।
The author of "GitHub Actions and MakeFile: A Hands-on Introduction"is Abid Ali Awan.संचालित द्वारा
मेमोरी के साथ RAG चैटबॉट बनाना
अब, आइए एक उन्नत RAG एप्लिकेशन बनाएँ जो उत्तर जनरेट करने के लिए बातचीत के इतिहास का उपयोग करता है। इसके लिए, हमें एक चैट मेमोरी बफ़र बनाना होगा और फिर मेमोरी, LLM और वेक्टर स्टोर रिट्रीवर के साथ एक चैट इंजन बनाना होगा।
from llama_index.core.memory import ChatMemoryBuffer
from llama_index.core.chat_engine import CondensePlusContextChatEngine
memory = ChatMemoryBuffer.from_defaults(token_limit=3900)
chat_engine = CondensePlusContextChatEngine.from_defaults(
index.as_retriever(),
memory=memory,
llm=llm
)
response = chat_engine.chat("What is the easiest way of finetuning the Llama 3 model? Please provide step-by-step instructions.")
display(Markdown(response.response))संचालित द्वारा
हमने चैट इंजन से पूछा कि Llama 3 मॉडल को फाइन-ट्यून कैसे करें, और उसने वेक्टर स्टोर का उपयोग करके अत्यधिक सटीक उत्तर दिया।
यह जाँचने के लिए कि मेमोरी बफ़र सही काम कर रहा है, हम एक फ़ॉलो-अप प्रश्न पूछेंगे।
response = chat_engine.chat("Could you please provide more details about the Post Fine-Tuning Steps?")
display(Markdown(response.response))संचालित द्वारा
चैट इंजन ने पिछली बातचीत को याद रखा और उसी के अनुरूप जवाब दिया।
दूसरे प्रोजेक्ट में, हम DuckDB को एक SQL क्वेरी इंजन के रूप में उपयोग करेंगे। इसमें डेटाबेस इंजन को GPT-4o मॉडल के साथ एकीकृत करना शामिल है ताकि डेटाबेस से जुड़े प्रश्नों के प्राकृतिक भाषा में उत्तर जनरेट किए जा सकें।
SQLAlchemy का उपयोग करके डेटाबेस इंजन बनाने के लिए duckdb-engine इंस्टॉल करें।
हम create_engine फ़ंक्शन का उपयोग करके DuckDB डेटाबेस लोड करेंगे और फिर यह जाँचने के लिए एक सरल SQL क्वेरी लिखेंगे कि क्या यह सफलतापूर्वक लोड हो गया है।
from sqlalchemy import create_engine
engine = create_engine("duckdb:///datacamp.duckdb")with engine.connect()as connection:
cursor = connection.exec_driver_sql("SELECT * FROM bank LIMIT 3")print(cursor.fetchall())संचालित द्वारा
बेहतरीन। हमारा DuckDB डेटाबेस इंजन उपयोग के लिए तैयार है।
[(56,'housemaid','married','basic.4y','no','no','no','telephone','may','mon',261,1,999,0,'nonexistent',1.1,93.994,-36.4,4.857,5191.0,'no'),(57,'services','married','high.school','unknown','no','no','telephone','may','mon',149,1,999,0,'nonexistent',1.1,93.994,-36.4,4.857,5191.0,'no'),(37,'services','married','high.school','no','yes','no','telephone','may','mon',226,1,999,0,'nonexistent',1.1,93.994,-36.4,4.857,5191.0,'no')]संचालित द्वारा
अब, हमें SQLDatabase फ़ंक्शन का उपयोग करके एक डेटाबेस टूल बनाना है। इसे एक इंजन ऑब्जेक्ट और टेबल नाम दें।
from llama_index.core import SQLDatabase
sql_database = SQLDatabase(engine, include_tables=["bank"])संचालित द्वारा
SQL क्वेरी इंजन बनाना
LlamaIndex SQL डेटाबेस ऑब्जेक्ट प्रदान करके NLSQLTableQueryEngine फ़ंक्शन का उपयोग कर SQL क्वेरी इंजन बनाएँ।
from llama_index.core.query_engine import NLSQLTableQueryEngine
query_engine = NLSQLTableQueryEngine(sql_database)संचालित द्वारा
क्वेरी इंजन से “bank” टेबल के बारे में प्राकृतिक भाषा में प्रश्न पूछें।
response = query_engine.query("Which is the longest running campaign?")print(response.response)संचालित द्वारा
जवाब में, हमें हमारे प्रश्न का उत्तर प्राकृतिक भाषा में मिलेगा। यह शानदार है, क्या यह नहीं है?
The longest running campaign in the database has a duration of 4918 days.संचालित द्वारा
आइए एक जटिल प्रश्न पूछते हैं।
response = query_engine.query("Which type of job has the most housing loan?")print(response.response)संचालित द्वारा
उत्तर सटीक है और अतिरिक्त जानकारी भी देता है।
The job type with the most housing loans is 'admin.' with 5559 housing loans. This is followed by 'blue-collar' with 4710 housing loans and 'technician' with 3616 housing loans. Other job types with significant housing loans include 'services', 'management', 'retired', 'entrepreneur', and 'self-employed'.संचालित द्वारा
बैकएंड में क्या चल रहा है, यह देखने के लिए हम मेटाडेटा प्रिंट करेंगे।
जैसा कि हम देख सकते हैं, GPT-4o पहले SQL क्वेरी जनरेट करता है, परिणाम पाने के लिए क्वेरी चलाता है, और फिर उसी परिणाम का उपयोग करके उत्तर तैयार करता है। यह बहु-चरणीय प्रक्रिया केवल दो पंक्तियों के कोड से हासिल हो जाती है।
{'d4ddf03c-337e-4ee6-957a-5fd2cfaa4b1c': {},'sql_query': "SELECT job, COUNT(housing) AS housing_loan_count\nFROM bank\nWHERE housing = 'yes'\nGROUP BY job\nORDER BY housing_loan_count DESC;",'result': [('admin.',5559),('blue-collar',4710),('technician',3616),('services',2050),('management',1490),('retired',892),('entrepreneur',779),('self-employed',740),('unemployed',557),('housemaid',540),('student',471),('unknown',172)],'col_keys': ['job','housing_loan_count']}संचालित द्वारा
यदि आपको ऊपर दिया गया कोड चलाने में समस्या आ रही है, तो कृपया DuckDB SQL Query Engine वर्कस्पेस देखें।
निष्कर्ष
DuckDB तेज़ है, उपयोग में आसान है, और अनेक डेटा व एआई फ्रेमवर्क्स के साथ बिना किसी रुकावट के एकीकृत हो जाता है। एक डेटा वैज्ञानिक के रूप में, आपको इसकी API के साथ अभ्यस्त होने और इसे किसी अन्य Python पैकेज की तरह उपयोग करना शुरू करने में कुछ ही मिनट लगेंगे। DuckDB की सबसे अच्छी विशेषताओं में से एक यह है कि इसकी कोई निर्भरता नहीं है—अर्थात आप इसे लगभग कहीं भी उपयोग कर सकते हैं, होस्टिंग या अतिरिक्त सेटअप की चिंता किए बिना।
इस ट्यूटोरियल में, हमने DuckDB और इसकी प्रमुख विशेषताओं के बारे में सीखा। हमने DuckDB Python API का भी अन्वेषण किया, जिसका उपयोग कर एक टेबल बनाई और सरल डेटा विश्लेषण किया। ट्यूटोरियल के दूसरे भाग में दो प्रोजेक्ट कवर किए गए: एक में DuckDB को वेक्टर डेटाबेस के रूप में उपयोग करते हुए Retrieval-Augmented Generation (RAG) एप्लिकेशन बनाना, और दूसरे में DuckDB को एक SQL क्वेरी इंजन के रूप में प्रदर्शित करना।
किसी SQL क्वेरी इंजन का उपयोग करने या डेटाबेस को एआई के साथ एकीकृत करने से पहले, आपको SQL और डेटा विश्लेषण की बुनियादी समझ होनी चाहिए। आप क्वेरी लिख सकते हैं, लेकिन आपको यह कैसे पता चलेगा कि कौन सा सवाल पूछना है? यहीं पर डेटा विश्लेषण और SQL का बुनियादी ज्ञान काम आता है। आप यह ज्ञान Associate Data Analyst in SQL करियर ट्रैक पूरा करके हासिल कर सकते हैं।
एक प्रमाणित डेटा साइंटिस्ट के रूप में, मैं अत्याधुनिक तकनीक का उपयोग करके नवाचारी मशीन लर्निंग अनुप्रयोग बनाने के लिए उत्साहित रहता/रहती हूँ। स्पीच रिकॉग्निशन, डेटा विश्लेषण और रिपोर्टिंग, MLOps, संवादात्मक AI और NLP में मजबूत पृष्ठभूमि के साथ, मैंने ऐसे बुद्धिमान सिस्टम विकसित करने में अपनी विशेषज्ञता निखारी है जो वास्तविक प्रभाव डाल सकें। तकनीकी दक्षता के अलावा, मैं जटिल अवधारणाओं को स्पष्ट और संक्षिप्त भाषा में प्रस्तुत करने में भी निपुण हूँ। परिणामस्वरूप, मैं डेटा साइंस पर एक मांग में रहने वाला/वाली ब्लॉगर बन गया/गई हूँ, और डेटा प्रोफेशनलों के बढ़ते समुदाय के साथ अपने अनुभव और विचार साझा करता/करती हूँ। वर्तमान में, मैं कंटेंट निर्माण और संपादन पर केंद्रित हूँ, बड़े भाषा मॉडलों के साथ काम करते हुए ऐसा प्रभावशाली और आकर्षक कंटेंट विकसित कर रहा/रही हूँ जो व्यवसायों और व्यक्तियों दोनों को अपने डेटा का अधिकतम लाभ उठाने में मदद कर सके।
हाल ही में DuckDB बीटा से बाहर आकर अपना स्थिर संस्करण लेकर आया है और तेज़ी से लोकप्रिय हो रहा है, क्योंकि विभिन्न डेटा फ्रेमवर्क इसे अपने इकोसिस्टम में समाहित कर रहे हैं। यह DuckDB सीखने का बढ़िया समय है ताकि आप डेटा और एआई की बदलती दुनिया के साथ कदम मिला सकें।
इस ट्यूटोरियल में, हम DuckDB और इसकी प्रमुख विशेषताओं को कोड उदाहरणों के साथ सीखेंगे। हमारा मुख्य फोकस यह होगा कि हम इसे मौजूदा एआई फ्रेमवर्क्स के साथ कैसे जोड़ सकते हैं। इसके लिए हम दो प्रोजेक्ट्स पर काम करेंगे। पहले, हम DuckDB को एक वेक्टर डेटाबेस के रूप में उपयोग करके Retrieval-Augmented Generation (RAG) एप्लिकेशन बनाएंगे। फिर, हम DuckDB को एआई क्वेरी इंजन की तरह उपयोग करेंगे ताकि SQL के बजाय प्राकृतिक भाषा से डेटा का विश्लेषण किया जा सके।
DuckDB क्या है?
DuckDB एक आधुनिक, उच्च-प्रदर्शन, इन-मेमाेरी विश्लेषणात्मक डेटाबेस प्रबंधन प्रणाली (DBMS) है, जिसे जटिल विश्लेषणात्मक क्वेरियों के लिए डिज़ाइन किया गया है। यह एक रिलेशनल (टेबल-उन्मुख) DBMS है जो Structured Query Language (SQL) को सपोर्ट करता है।
DuckDB, SQLite की सरलता और उपयोग में आसानी को विश्लेषणात्मक वर्कलोड के लिए आवश्यक उच्च-प्रदर्शन क्षमताओं के साथ जोड़ता है, जिससे यह डेटा वैज्ञानिकों और विश्लेषकों के लिए उत्कृष्ट विकल्प बनता है।
मुख्य विशेषताएँ
DuckDB के साथ शुरुआत
इस सेक्शन में, हम DuckDB सेट अप करना, CSV फ़ाइलें लोड करना, डेटा विश्लेषण करना, और रिलेशन्स व क्वेरी फ़ंक्शंस के बारे में सीखेंगे।
हम DuckDB का Python पैकेज इंस्टॉल करने से शुरू करेंगे।
DuckDB डेटाबेस बनाना
स्थायी डेटाबेस बनाने के लिए, आपको बस
connectफ़ंक्शन का उपयोग करना है और उसे डेटाबेस का नाम देना है।यह आपकी लोकल डायरेक्टरी में एक डेटाबेस फ़ाइल बना देगा।
हम एक CSV फ़ाइल लोड करेंगे और एक "bank" टेबल बनाएंगे। जिस डेटासेट का हम उपयोग कर रहे हैं वह DataLab पर उपलब्ध है और इसे Bank Marketing कहा जाता है। इसमें एक पुर्तगाली बैंकिंग संस्था के सीधे विपणन अभियानों का डेटा है, जो फ़ोन कॉल्स के माध्यम से किया गया था।
CSV फ़ाइल लोड करने के लिए, आपको पहले SQL का उपयोग करके एक टेबल बनानी होती है और फिर फ़ाइल लोड करने के लिए SQL स्क्रिप्ट के भीतर
read_csv()फ़ंक्शन का उपयोग करना होता है। बस इतना ही सरल।इसके बाद, हम एक SQL स्क्रिप्ट चलाकर अपनी टेबल को वैलिडेट करेंगे जो डेटाबेस के भीतर सभी टेबल्स दिखाती है और परिणाम को
pandasDataFrame के रूप में दिखाने के लिएfetchdfफ़ंक्शन का उपयोग करेंगे।नोट: हम DataCamp के DataLab का उपयोग कोड एडिटर के रूप में कर रहे हैं। DataLab एक क्लाउड Jupyter Notebook है, जिसे आप DataCamp अकाउंट होने पर मुफ्त में एक्सेस कर सकते हैं।
अब जब हमने सफलतापूर्वक अपनी पहली टेबल बना ली है, तो हम डेटा का विश्लेषण करने के लिए एक शुरुआती-स्तर की क्वेरी चलाएँगे और परिणाम को DataFrame के रूप में दिखाएँगे।
DuckDB, DataCamp के नए DataLab में नैटिव रूप से एकीकृत है। इसके बारे में अधिक जानने के लिए ब्लॉग "DuckDB Makes SQL a First-Class Citizen on DataLab" पढ़ें और डेटा का विश्लेषण करने के लिए इंटरैक्टिव SQL सेल का उपयोग करें।
DuckDB Relations
DuckDB रिलेशन्स मूलतः टेबल्स हैं जिन्हें Relational API का उपयोग कर क्वेरी किया जा सकता है। यह API, Pandas DataFrames जैसे डेटा स्रोतों पर विभिन्न क्वेरी ऑपरेशनों को चेन करने की अनुमति देता है। SQL क्वेरियों का उपयोग करने के बजाय, आप डेटा के विश्लेषण के लिए विभिन्न Python फ़ंक्शंस को एक साथ चेन करेंगे।
उदाहरण के लिए, हम एक CSV फ़ाइल लोड करके DuckDB रिलेशन बनाएँगे। टेबल का विश्लेषण करने के लिए, आप फ़िल्टर और लिमिट फ़ंक्शंस को चेन कर सकते हैं।
हम DuckDB डेटाबेस से टेबल लोड करके भी रिलेशन्स बना सकते हैं।
आइए एक ऐसा रिलेशन लिखें जो डेटा विश्लेषण के लिए कई फ़ंक्शंस का उपयोग करे।
हमें तीन पंक्तियाँ और कॉलम मिले हैं जो job के अनुसार सॉर्ट किए गए हैं और duration कॉलम से फ़िल्टर किए गए हैं।
DuckDB Query फ़ंक्शन
DuckDB का क्वेरी फ़ंक्शन डेटाबेस के भीतर SQL क्वेरियों को चलाने की अनुमति देता है और ऐसे परिणाम लौटाता है जिन्हें आगे के विश्लेषण के लिए विभिन्न फ़ॉर्मैट्स में बदला जा सकता है।
कोड उदाहरण में, हम SQL क्वेरी चला रहे हैं ताकि 30 वर्ष से अधिक आयु वाले क्लाइंट्स के जॉब टाइटल्स पता चलें, प्रत्येक जॉब के लिए संपर्क किए गए क्लाइंट्स की संख्या गिनी जाए, और कैंपेन की औसत अवधि निकाली जाए।
सरल डेटा विश्लेषण के लिए रिलेशनल डेटाबेस को मैनेज करना और क्वेरियाँ चलाना सीखने के लिए SQL Fundamentals स्किल ट्रैक लें।
अब हम डेटाबेस से कनेक्शन बंद करेंगे और उस कनेक्शन से संबद्ध संसाधनों को मुक्त करेंगे, ताकि संभावित मेमोरी और फ़ाइल हैंडल लीक से बचा जा सके।
यदि आपको ऊपर दिया गया कोड चलाने में समस्या आ रही है, तो कृपया Getting Started with DuckDB वर्कस्पेस देखें।
DuckDB के साथ RAG एप्लिकेशन बनाना
पहले प्रोजेक्ट में, हम LlamaIndex के साथ एक RAG एप्लिकेशन बनाना सीखेंगे और DuckDB को वेक्टर डेटाबेस और रिट्रीवर के रूप में उपयोग करेंगे।
सेटअप
इंडेक्स बनाने और रिट्रीव करने के लिए आवश्यक सभी Python पैकेज इंस्टॉल करें।
आवश्यक Python पैकेज और फ़ंक्शंस इम्पोर्ट करें।
GPT-4o और एम्बेडिंग मॉडल सेट करना
भाषा मॉडल के लिए, हम नवीनतम GPT4o मॉडल और OpenAI API का उपयोग करेंगे। बड़े भाषा मॉडल (LLM) क्लाइंट बनाने के लिए, आपको बस मॉडल का नाम और API key प्रदान करनी है।
इसके बाद, हम OpenAI के
text-embedding-3-smallमॉडल का उपयोग कर एम्बेड मॉडल क्लाइंट बनाएँगे।नोट: यदि आपके विकास परिवेश में “OPENAI_API_KEY” नाम से इनवायरनमेंट वेरिएबल सेट है, तो OpenAI API key अलग से देना वैकल्पिक है।
हम OpenAI LLM और एम्बेडिंग मॉडलों को LlamaIndex की सभी फ़ंक्शंस के लिए ग्लोबल सेट करेंगे। संक्षेप में, ये मॉडल डिफ़ॉल्ट के रूप में सेट हो जाएँगे।
DuckDB को वेक्टर डेटाबेस के रूप में उपयोग करना
अपने प्रोजेक्ट के लिए, हम डेटा फ़ोल्डर से PDF फ़ाइलें लोड करेंगे। ये PDF फ़ाइलें DataCamp की ट्यूटोरियल्स हैं, जिन्हें ब्राउज़र के प्रिंट फ़ंक्शन से PDF के रूप में सेव किया गया है।
फ़ोल्डर डायरेक्टरी को
SimpleDirectoryReaderफ़ंक्शन को दें और डेटा लोड करें।इसके बाद, "datacamp.duckdb" नामक मौजूदा डेटाबेस का उपयोग करके “blog” नाम का एक वेक्टर स्टोर बनाएँ। फिर PDF के डेटा को एम्बेडिंग्स में बदलें और उन्हें वेक्टर स्टोर में सहेजें।
यह जाँचने के लिए कि हमारा वेक्टर स्टोर सफलतापूर्वक बना है या नहीं, हम DuckDB Python API का उपयोग करके डेटाबेस से कनेक्ट करेंगे और डेटाबेस की सभी टेबल्स दिखाने के लिए SQL क्वेरी चलाएँगे।
हमारे पास दो टेबल्स हैं: एक “bank” प्रचारात्मक टेबल और एक “blog” टेबल, जो एक वेक्टर स्टोर है। “blog” टेबल में “embedding” कॉलम है जहाँ सभी एम्बेडिंग्स सहेजी जाती हैं।
एक साधारण RAG एप्लिकेशन बनाना
इंडेक्स को क्वेरी इंजन में बदलें, जो अपने आप पहले वेक्टर डेटाबेस में समान दस्तावेज़ खोजेगा और अतिरिक्त संदर्भ का उपयोग करके उत्तर जनरेट करेगा।
RAG क्वेरी इंजन का परीक्षण करने के लिए, हम ट्यूटोरियल के बारे में प्रश्न पूछेंगे।
और उत्तर सही है।
मेमोरी के साथ RAG चैटबॉट बनाना
अब, आइए एक उन्नत RAG एप्लिकेशन बनाएँ जो उत्तर जनरेट करने के लिए बातचीत के इतिहास का उपयोग करता है। इसके लिए, हमें एक चैट मेमोरी बफ़र बनाना होगा और फिर मेमोरी, LLM और वेक्टर स्टोर रिट्रीवर के साथ एक चैट इंजन बनाना होगा।
हमने चैट इंजन से पूछा कि Llama 3 मॉडल को फाइन-ट्यून कैसे करें, और उसने वेक्टर स्टोर का उपयोग करके अत्यधिक सटीक उत्तर दिया।
यह जाँचने के लिए कि मेमोरी बफ़र सही काम कर रहा है, हम एक फ़ॉलो-अप प्रश्न पूछेंगे।
चैट इंजन ने पिछली बातचीत को याद रखा और उसी के अनुरूप जवाब दिया।
यदि आपको ऊपर दिया गया कोड चलाने में समस्या आ रही है, तो कृपया Building a RAG application with DuckDB वर्कस्पेस देखें।
LLM का उपयोग कर DuckDB SQL क्वेरी इंजन बनाना
दूसरे प्रोजेक्ट में, हम DuckDB को एक SQL क्वेरी इंजन के रूप में उपयोग करेंगे। इसमें डेटाबेस इंजन को GPT-4o मॉडल के साथ एकीकृत करना शामिल है ताकि डेटाबेस से जुड़े प्रश्नों के प्राकृतिक भाषा में उत्तर जनरेट किए जा सकें।
SQLAlchemy का उपयोग करके डेटाबेस इंजन बनाने के लिए
duckdb-engineइंस्टॉल करें।DuckDB डेटाबेस लोड करना
हम
create_engineफ़ंक्शन का उपयोग करके DuckDB डेटाबेस लोड करेंगे और फिर यह जाँचने के लिए एक सरल SQL क्वेरी लिखेंगे कि क्या यह सफलतापूर्वक लोड हो गया है।बेहतरीन। हमारा DuckDB डेटाबेस इंजन उपयोग के लिए तैयार है।
अब, हमें
SQLDatabaseफ़ंक्शन का उपयोग करके एक डेटाबेस टूल बनाना है। इसे एक इंजन ऑब्जेक्ट और टेबल नाम दें।SQL क्वेरी इंजन बनाना
LlamaIndex SQL डेटाबेस ऑब्जेक्ट प्रदान करके
NLSQLTableQueryEngineफ़ंक्शन का उपयोग कर SQL क्वेरी इंजन बनाएँ।क्वेरी इंजन से “bank” टेबल के बारे में प्राकृतिक भाषा में प्रश्न पूछें।
जवाब में, हमें हमारे प्रश्न का उत्तर प्राकृतिक भाषा में मिलेगा। यह शानदार है, क्या यह नहीं है?
आइए एक जटिल प्रश्न पूछते हैं।
उत्तर सटीक है और अतिरिक्त जानकारी भी देता है।
बैकएंड में क्या चल रहा है, यह देखने के लिए हम मेटाडेटा प्रिंट करेंगे।
जैसा कि हम देख सकते हैं, GPT-4o पहले SQL क्वेरी जनरेट करता है, परिणाम पाने के लिए क्वेरी चलाता है, और फिर उसी परिणाम का उपयोग करके उत्तर तैयार करता है। यह बहु-चरणीय प्रक्रिया केवल दो पंक्तियों के कोड से हासिल हो जाती है।
प्रोजेक्ट पूरा होने पर इंजन को बंद कर दें।
यदि आपको ऊपर दिया गया कोड चलाने में समस्या आ रही है, तो कृपया DuckDB SQL Query Engine वर्कस्पेस देखें।
निष्कर्ष
DuckDB तेज़ है, उपयोग में आसान है, और अनेक डेटा व एआई फ्रेमवर्क्स के साथ बिना किसी रुकावट के एकीकृत हो जाता है। एक डेटा वैज्ञानिक के रूप में, आपको इसकी API के साथ अभ्यस्त होने और इसे किसी अन्य Python पैकेज की तरह उपयोग करना शुरू करने में कुछ ही मिनट लगेंगे। DuckDB की सबसे अच्छी विशेषताओं में से एक यह है कि इसकी कोई निर्भरता नहीं है—अर्थात आप इसे लगभग कहीं भी उपयोग कर सकते हैं, होस्टिंग या अतिरिक्त सेटअप की चिंता किए बिना।
इस ट्यूटोरियल में, हमने DuckDB और इसकी प्रमुख विशेषताओं के बारे में सीखा। हमने DuckDB Python API का भी अन्वेषण किया, जिसका उपयोग कर एक टेबल बनाई और सरल डेटा विश्लेषण किया। ट्यूटोरियल के दूसरे भाग में दो प्रोजेक्ट कवर किए गए: एक में DuckDB को वेक्टर डेटाबेस के रूप में उपयोग करते हुए Retrieval-Augmented Generation (RAG) एप्लिकेशन बनाना, और दूसरे में DuckDB को एक SQL क्वेरी इंजन के रूप में प्रदर्शित करना।
किसी SQL क्वेरी इंजन का उपयोग करने या डेटाबेस को एआई के साथ एकीकृत करने से पहले, आपको SQL और डेटा विश्लेषण की बुनियादी समझ होनी चाहिए। आप क्वेरी लिख सकते हैं, लेकिन आपको यह कैसे पता चलेगा कि कौन सा सवाल पूछना है? यहीं पर डेटा विश्लेषण और SQL का बुनियादी ज्ञान काम आता है। आप यह ज्ञान Associate Data Analyst in SQL करियर ट्रैक पूरा करके हासिल कर सकते हैं।