अध्याय · अपना data जोड़ें

हर source।
एक प्रवेश द्वार।

एक call एक source पंजीकृत करती है, एक typed schema अनुमानित करती है, और उसका revision हर उस plan में pin करती है जो उसे स्पर्श करता है। Files और SQLite in-process चलते हैं — कोई key नहीं, कुछ बाहर नहीं जाता। Live databases engine के माध्यम से जुड़ते हैं — सीधे, प्रत्येक database के अपने wire protocol पर: credentials encrypted, कोई data copied नहीं।

const sales = await sqai.connect("./data/sales.csv", { name: "sales" })

→ row_count 12 · schema_revision e4938027… · status ready

टाइप्ड · हैश-पिन्ड · केवल-पठन

IItype cases

दो trays। छब्बीस drawers।

हर drawer एक ही contract पर खुलता है: यह कैसे जुड़ता है, क्या चाहिए, क्या बाहर जाता है। एक खोलें।

In-processकोई key नहीं · कोई daemon नहीं · कोई network नहीं

CSV
case
फ़ाइल
कनेक्ट
"./data/sales.csv"
प्रमाणीकरण
कोई नहीं। SQAI आपकी प्रक्रिया में बाइट्स सीधे पढ़ता है।
कुंजी
कुंजी-रहित — कोई खाता नहीं, कोई कार्ड नहीं, पूरी रीड-ओनली सतह।
डेटा
कुछ भी प्रक्रिया से बाहर नहीं जाता।
TSV
case
फ़ाइल
कनेक्ट
"./data/orders.tsv"
प्रमाणीकरण
कोई नहीं। SQAI आपकी प्रक्रिया में बाइट्स सीधे पढ़ता है।
कुंजी
कुंजी-रहित — कोई खाता नहीं, कोई कार्ड नहीं, पूरी रीड-ओनली सतह।
डेटा
कुछ भी प्रक्रिया से बाहर नहीं जाता।
JSON
case
फ़ाइल
कनेक्ट
"./data/sales.json"
प्रमाणीकरण
कोई नहीं। SQAI आपकी प्रक्रिया में बाइट्स सीधे पढ़ता है।
कुंजी
कुंजी-रहित — कोई खाता नहीं, कोई कार्ड नहीं, पूरी रीड-ओनली सतह।
डेटा
कुछ भी प्रक्रिया से बाहर नहीं जाता।
नोट
एक पाथ या एक ऑब्जेक्ट।
rows
case
इन-मेमोरी
कनेक्ट
[{ region: "east", revenue: 512 }, …]
प्रमाणीकरण
कोई नहीं। SQAI आपकी प्रक्रिया में बाइट्स सीधे पढ़ता है।
कुंजी
कुंजी-रहित — कोई खाता नहीं, कोई कार्ड नहीं, पूरी रीड-ओनली सतह।
डेटा
कुछ भी प्रक्रिया से बाहर नहीं जाता।
{ records }
case
इन-मेमोरी
कनेक्ट
{ records: [ … ] }
प्रमाणीकरण
कोई नहीं। SQAI आपकी प्रक्रिया में बाइट्स सीधे पढ़ता है।
कुंजी
कुंजी-रहित — कोई खाता नहीं, कोई कार्ड नहीं, पूरी रीड-ओनली सतह।
डेटा
कुछ भी प्रक्रिया से बाहर नहीं जाता।
SQLite
case
एम्बेडेड डेटाबेस
कनेक्ट
{ provider: "sqlite", path, table | query }
प्रमाणीकरण
कोई नहीं। SQAI आपकी प्रक्रिया में बाइट्स सीधे पढ़ता है।
कुंजी
कुंजी-रहित — कोई खाता नहीं, कोई कार्ड नहीं, पूरी रीड-ओनली सतह।
डेटा
कुछ भी प्रक्रिया से बाहर नहीं जाता।
नोट
एक पूर्ण डेटाबेस, फिर भी इन-प्रोसेस। कोई तालिका या रीड-ओनली क्वेरी निर्दिष्ट करें।
Excel
case
फ़ाइल
कनेक्ट
"./data/sales.xlsx"
प्रमाणीकरण
कोई नहीं। SQAI आपकी प्रक्रिया में बाइट्स सीधे पढ़ता है।
कुंजी
कुंजी-रहित — कोई खाता नहीं, कोई कार्ड नहीं, पूरी रीड-ओनली सतह।
डेटा
कुछ भी प्रक्रिया से बाहर नहीं जाता।
नोट
केवल Python।
Parquet
case
फ़ाइल
कनेक्ट
"./data/sales.parquet"
प्रमाणीकरण
कोई नहीं। SQAI आपकी प्रक्रिया में बाइट्स सीधे पढ़ता है।
कुंजी
कुंजी-रहित — कोई खाता नहीं, कोई कार्ड नहीं, पूरी रीड-ओनली सतह।
डेटा
कुछ भी प्रक्रिया से बाहर नहीं जाता।
नोट
केवल Python।

Engine के माध्यम सेcredentials encrypted · कोई data copied नहीं

PostgreSQL
case
रिलेशनल
कनेक्ट
{ type: "postgres", host, port, database, user, password, table | query }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
MySQL
case
रिलेशनल
कनेक्ट
{ type: "mysql", host, port, database, user, password, table | query }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
Oracle
case
रिलेशनल
कनेक्ट
{ type: "oracle", host, port, database, user, password, table | query }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
नोट
बंडल्ड Thin-mode ड्राइवर — कोई Oracle क्लाइंट इंस्टॉल नहीं करना।
SQL Server
case
रिलेशनल
कनेक्ट
{ type: "mssql", host, port, database, user, password, table | query }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
Snowflake
case
वेयरहाउस
कनेक्ट
{ type: "snowflake", connection_string, query }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
BigQuery
case
वेयरहाउस
कनेक्ट
{ type: "bigquery", connection_string, query }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
ClickHouse
case
वेयरहाउस
कनेक्ट
{ type: "clickhouse", connection_string, query }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
Redshift
case
वेयरहाउस
कनेक्ट
{ type: "redshift", connection_string, query }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
S3
case
ऑब्जेक्ट स्टोरेज
कनेक्ट
{ type: "s3", … }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
GCS
case
ऑब्जेक्ट स्टोरेज
कनेक्ट
{ type: "gcs", … }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
Azure Blob
case
ऑब्जेक्ट स्टोरेज
कनेक्ट
{ type: "azure_blob", … }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
Redis
case
NoSQL · ग्राफ़ · सर्च
कनेक्ट
{ type: "redis", … }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
Neo4j
case
NoSQL · ग्राफ़ · सर्च
कनेक्ट
{ type: "neo4j", … }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
Elasticsearch
case
NoSQL · ग्राफ़ · सर्च
कनेक्ट
{ type: "elasticsearch", … }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
REST
case
API
कनेक्ट
{ type: "rest", … }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
GitHub
case
कोड रिपॉज़िटरी
कनेक्ट
{ type: "github", … }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
GitLab
case
कोड रिपॉज़िटरी
कनेक्ट
{ type: "gitlab", … }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।
Bitbucket
case
कोड रिपॉज़िटरी
कनेक्ट
{ type: "bitbucket", … }
प्रमाणीकरण
होस्टेड इंजन के लिए SQAI_API_KEY, या अपने इंजन के लिए SQAI_ENGINE_URL।
कुंजी
एक कुंजी, या आपका स्वयं का इंजन URL।
डेटा
क्रेडेंशियल इंजन पर एन्क्रिप्टेड। पंक्तियाँ माँग पर पढ़ी जाती हैं — कभी कॉपी नहीं।

मोड परिवेश से स्वतः निर्धारित होता है

SQAI_ENGINE_URLself_hosted

आपका इंजन, आपका नेटवर्क।

SQAI_API_KEYapi

होस्टेड इंजन।

कोई भी सेट नहींlocal

केवल इन-प्रोसेस।

फ़ाइलें और SQLite हर मोड में काम करते हैं। लाइव डेटाबेस के लिए api या self_hosted आवश्यक है। इंजन एक बार कनेक्शन स्थापित करता है, फिर सक्रिय रहता है — एक स्थायी डेमन, प्रति-क्वेरी कोल्ड स्टार्ट नहीं।

कोई सिंक नहीं। कोई एक्सपोर्ट नहीं।
कोई थर्ड-पार्टी ब्रिज नहीं।

डेटाबेस के स्वयं के वायर प्रोटोकॉल पर प्रत्यक्ष कनेक्टिविटी

IIIवायर

प्रत्यक्ष। प्रोटोकॉल तक।

इंजन सीधे जुड़ता है, प्रत्येक डेटाबेस का अपना वायर प्रोटोकॉल बोलते हुए। क्वेरी वहीं चलती हैं, आपके संगठन तक सीमित — आपका डेटाबेस कभी कॉपी नहीं होता।

आकृति — वायर
आपका डेटाबेसपंक्तियाँ यथास्थान रहती हैं
इसका अपना वायर प्रोटोकॉल — इंजन द्वारा सीधे बोला जाता है
इंजनरीड-ओनली क्वेरी

यथास्थान, दायरे में।

इंजन आपके डेटा को वहीं क्वेरी करता है जहाँ वह रहता है, आपके संगठन तक सीमित — और कभी उससे आगे नहीं जाता जो आपने कॉन्फ़िगर किया है।

क्रेडेंशियल सुरक्षित।

विश्राम पर एन्क्रिप्टेड, org-स्कोप्ड, केवल आपके संगठन की क्वेरी सेवा के लिए उपयोग। एक कनेक्टर अपना कॉन्फ़िग कभी नहीं लौटाता — केवल नाम, प्रकार, स्थिति और अंतिम परीक्षण परिणाम।

कभी कॉपी नहीं

इंजन आपका डेटाबेस कभी कॉपी नहीं करता — पंक्तियाँ वहीं पढ़ी जाती हैं जहाँ वे रहती हैं।

SELECT 1ok · connector: live

हर परीक्षण एक वास्तविक कनेक्शन खोलता है — SQL के लिए SELECT 1, ऑब्जेक्ट स्टोरेज के लिए HEAD, REST के लिए सैंपल फ़ेच। कनेक्टर तभी लाइव होता है जब वास्तविक कनेक्शन सफल हो; कॉन्फ़िग संपादित करने पर वह अपरीक्षित स्थिति में लौट जाता है।

प्रमुख वायर · Oracle

Thin मोड। कुछ भी इंस्टॉल नहीं।

इंजन python-oracledb को Thin मोड में बंडल करता है और सीधे जुड़ता है — कोई Instant Client नहीं, कोई अतिरिक्त रनटाइम प्रक्रिया नहीं, कोई अतिरिक्त Python पैकेज नहीं। इंजन वायर को पूरी तरह नियंत्रित करता है: ड्राइवर, बाउंडेड कनेक्शन पूल, क्रेडेंशियल सत्यापन, स्कीमा ब्राउज़, और एक Arrow-संगत बैच फ़ेच पाथ — कोई छिपा हुआ अनपूल्ड फ़ॉलबैक कनेक्शन नहीं।

  • केवल SELECT / WITH रूट
  • बाउंड ROWNUM सीमा
  • स्थायी प्रोब · 0 ms पर पुनः उपयोग

Redshift PostgreSQL में उत्तर देता है।

तालिकाएँ PostgreSQL वायर प्रोटोकॉल पर यथास्थान पढ़ी जाती हैं — क्लस्टर कभी कॉपी नहीं होता। परीक्षण सफलता संदेश भी PostgreSQL का नाम लेता है।

एक प्रवेश, हर पाथ।

ऑब्जेक्ट स्टोरेज और अपलोड एक ही पार्सर साझा करते हैं — S3 में एक Parquet ऑब्जेक्ट और एक अपलोड की गई Parquet फ़ाइल इंजन में एक समान पहुँचती हैं।

समान अनुरोध → समान पंक्तियाँ, समान क्रम · हर एक्सेस ऑडिट योग्य · एग्रेस एक फेल-क्लोज्ड प्रति-डिप्लॉयमेंट अनुमति सूची है

IVएकरूपता

Downstream को CSV और Snowflake में फ़र्क नहीं दिखता।

हर source एक ही typed SqaiSource लौटाता है — समान fields, समान pins, समान गारंटी। warehouse को file की जगह रखें और downstream में कुछ नहीं बदलता।

in-process"./data/sales.csv"
इंजन के माध्यम से{ type: "snowflake", connection_string, query }

SqaiSource

एक ही आकार · हर source
name"sales"
source_ide135c6f7eec0e846c01c4ef8
fieldsregion · product · revenue · cost · units · order_date
typed_fields2 string · 3 number · 1 date
row_count12
schema_revisione4938027ddf0d2210f019770403efd45d350eac28100902ddd7c5191c9b8cfbe
statusready

एक प्रमाणपत्र, चाहे source कोई भी हो। Downstream कोड को कभी पता नहीं चलता कि rows कहाँ हैं।

एक बार पंजीकृत।
कभी पुनर्परिभाषित नहीं।

नाम फिर से बाँधने पर error आती है source_already_registered

VThe pin

डेटा बदलें। Replay बता देगा।

connect() हर plan और computation में एक schema revision pin करता है। बदले हुए डेटा पर stored plan replay करने पर बदलाव सामने आता है — चुपचाप गलत संख्याएँ नहीं।

schema_revision
connect के समय हर उस plan और computation में pin होता है जो source को छूता है।
schema_revision_mismatch
जब replay के दौरान नीचे का डेटा बदल चुका हो तो यही लौटता है।
source_already_registered
Sources अपरिवर्तनीय हैं — किसी नाम को चुपचाप दूसरे डेटा पर नहीं मोड़ा जा सकता।

provenance.bindings[0]

source_name"sales"
fields["revenue"]
schema_revisione4938027…c9b8cfbe
row_count12
input_hash2ea5ede7…478e3212

हर bound field अपनी वंशावली साथ रखता है।

VIप्रश्न

LLM का डेटाबेस एक्सेस — उत्तर सहित।

मैं किसी LLM को अपने डेटाबेस का एक्सेस कैसे दूँ?

connect() से code में source पंजीकृत करें। Model को connection string कभी नहीं दिखती — उसे typed sources पर तीन read-only tools मिलते हैं, और policy तय करती है कि वह कौन से sources और fields छू सकता है।

क्या connect करने पर मेरा डेटा कहीं copy होता है?

नहीं। In-process sources आपकी machine नहीं छोड़ते। Engine sources में credentials encrypted रहते हैं; rows माँगने पर पढ़ी जाती हैं और कभी copy नहीं होतीं।

क्या SQAI मेरे डेटाबेस का sync, export, या third-party bridge है?

इनमें से कुछ नहीं। Connectivity सीधे डेटाबेस के अपने wire protocol से होती है — engine आपके डेटा को उसी जगह query करता है, आपके organization के scope में, और आपका डेटाबेस कभी copy नहीं करता।

डेटा connect करने के लिए API key चाहिए?

Files, in-memory rows, या SQLite के लिए नहीं — ये बिना किसी account के in-process चलते हैं। Live databases और warehouses के लिए hosted engine हेतु SQAI_API_KEY, या अपने engine के लिए SQAI_ENGINE_URL चाहिए।

क्या model मेरे credentials देख सकता है?

नहीं। Credentials आपके code में connect() के समय दिए जाते हैं और engine पर encrypted होते हैं। Model के tool input में typed intent होता है — कोई connection details नहीं, कोई policy fields नहीं।

क्या Oracle बिना client install किए supported है?

हाँ। Engine में एक bundled Thin-mode driver शामिल है, इसलिए कोई Oracle client install नहीं करना पड़ता।

अगर underlying data बदल जाए तो क्या होता है?

connect के समय pin की गई schema_revision मेल खाना बंद कर देती है, और replay चुपचाप गलत संख्याओं की बजाय schema_revision_mismatch दिखाता है। किसी पंजीकृत नाम को फिर से bind करने पर source_already_registered आती है।

कुछ connect करें।

Node ≥ 20 · Python ≥ 3.10 · फ़ाइलें और SQLite के लिए कोई key आवश्यक नहीं