Kapitel · Daten verbinden

Jede Quelle.
Ein Eingang.

Ein Aufruf registriert eine Quelle, leitet ein typisiertes Schema ab und fixiert dessen Revision in jeden Plan, der sie berührt. Dateien und SQLite laufen im Prozess — kein Schlüssel, nichts verlässt das System. Live-Datenbanken verbinden sich über die Engine — direkt, über das native Wire-Protokoll der jeweiligen Datenbank: Zugangsdaten verschlüsselt, keine Daten kopiert.

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

→ row_count 12 · schema_revision e4938027… · status ready

typisiert · hash-fixiert · schreibgeschützt

IIDie Typfälle

Zwei Schalen. Sechsundzwanzig Fächer.

Jedes Fach öffnet sich zum selben Vertrag: wie es sich verbindet, was es benötigt, was das System verlässt. Eines aufziehen.

Im Prozesskein Schlüssel · kein Daemon · kein Netzwerk

CSV
Fall
Datei
Verbinden
"./data/sales.csv"
Auth
Keine. SQAI liest die Bytes im eigenen Prozess.
Schlüssel
Schlüssellos — kein Konto, keine Karte, die vollständige schreibgeschützte Oberfläche.
Daten
Nichts verlässt den Prozess.
TSV
Fall
Datei
Verbinden
"./data/orders.tsv"
Auth
Keine. SQAI liest die Bytes im eigenen Prozess.
Schlüssel
Schlüssellos — kein Konto, keine Karte, die vollständige schreibgeschützte Oberfläche.
Daten
Nichts verlässt den Prozess.
JSON
Fall
Datei
Verbinden
"./data/sales.json"
Auth
Keine. SQAI liest die Bytes im eigenen Prozess.
Schlüssel
Schlüssellos — kein Konto, keine Karte, die vollständige schreibgeschützte Oberfläche.
Daten
Nichts verlässt den Prozess.
Hinweis
Ein Pfad oder ein Objekt.
rows
Fall
Im Arbeitsspeicher
Verbinden
[{ region: "east", revenue: 512 }, …]
Auth
Keine. SQAI liest die Bytes im eigenen Prozess.
Schlüssel
Schlüssellos — kein Konto, keine Karte, die vollständige schreibgeschützte Oberfläche.
Daten
Nichts verlässt den Prozess.
{ records }
Fall
Im Arbeitsspeicher
Verbinden
{ records: [ … ] }
Auth
Keine. SQAI liest die Bytes im eigenen Prozess.
Schlüssel
Schlüssellos — kein Konto, keine Karte, die vollständige schreibgeschützte Oberfläche.
Daten
Nichts verlässt den Prozess.
SQLite
Fall
Eingebettete Datenbank
Verbinden
{ provider: "sqlite", path, table | query }
Auth
Keine. SQAI liest die Bytes im eigenen Prozess.
Schlüssel
Schlüssellos — kein Konto, keine Karte, die vollständige schreibgeschützte Oberfläche.
Daten
Nichts verlässt den Prozess.
Hinweis
Eine vollständige Datenbank, weiterhin im Prozess. Tabelle oder schreibgeschützte Abfrage angeben.
Excel
Fall
Datei
Verbinden
"./data/sales.xlsx"
Auth
Keine. SQAI liest die Bytes im eigenen Prozess.
Schlüssel
Schlüssellos — kein Konto, keine Karte, die vollständige schreibgeschützte Oberfläche.
Daten
Nichts verlässt den Prozess.
Hinweis
Nur Python.
Parquet
Fall
Datei
Verbinden
"./data/sales.parquet"
Auth
Keine. SQAI liest die Bytes im eigenen Prozess.
Schlüssel
Schlüssellos — kein Konto, keine Karte, die vollständige schreibgeschützte Oberfläche.
Daten
Nichts verlässt den Prozess.
Hinweis
Nur Python.

Über die EngineZugangsdaten verschlüsselt · keine Daten kopiert

PostgreSQL
Fall
Relational
Verbinden
{ type: "postgres", host, port, database, user, password, table | query }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
MySQL
Fall
Relational
Verbinden
{ type: "mysql", host, port, database, user, password, table | query }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
Oracle
Fall
Relational
Verbinden
{ type: "oracle", host, port, database, user, password, table | query }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
Hinweis
Mitgelieferter Thin-Mode-Treiber — kein Oracle-Client erforderlich.
SQL Server
Fall
Relational
Verbinden
{ type: "mssql", host, port, database, user, password, table | query }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
Snowflake
Fall
Warehouse
Verbinden
{ type: "snowflake", connection_string, query }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
BigQuery
Fall
Warehouse
Verbinden
{ type: "bigquery", connection_string, query }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
ClickHouse
Fall
Warehouse
Verbinden
{ type: "clickhouse", connection_string, query }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
Redshift
Fall
Warehouse
Verbinden
{ type: "redshift", connection_string, query }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
S3
Fall
Objektspeicher
Verbinden
{ type: "s3", … }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
GCS
Fall
Objektspeicher
Verbinden
{ type: "gcs", … }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
Azure Blob
Fall
Objektspeicher
Verbinden
{ type: "azure_blob", … }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
Redis
Fall
NoSQL · Graph · Suche
Verbinden
{ type: "redis", … }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
Neo4j
Fall
NoSQL · Graph · Suche
Verbinden
{ type: "neo4j", … }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
Elasticsearch
Fall
NoSQL · Graph · Suche
Verbinden
{ type: "elasticsearch", … }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
REST
Fall
API
Verbinden
{ type: "rest", … }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
GitHub
Fall
Code-Repos
Verbinden
{ type: "github", … }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
GitLab
Fall
Code-Repos
Verbinden
{ type: "gitlab", … }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.
Bitbucket
Fall
Code-Repos
Verbinden
{ type: "bitbucket", … }
Auth
SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für die eigene.
Schlüssel
Ein Schlüssel oder die eigene Engine-URL.
Daten
Zugangsdaten verschlüsselt in der Engine. Zeilen werden bei Bedarf gelesen — nie kopiert.

Modus wird aus der Umgebung abgeleitet

SQAI_ENGINE_URLself_hosted

Eigene Engine, eigenes Netzwerk.

SQAI_API_KEYapi

Die gehostete Engine.

keines gesetztlocal

Nur im Prozess.

Dateien und SQLite funktionieren in jedem Modus. Live-Datenbanken erfordern api oder self_hosted. Die Engine stellt einmalig eine Verbindung bereit und bleibt warm — ein residenter Daemon, kein Cold Start pro Abfrage.

Keine Synchronisation. Kein Export.
Keine Drittanbieter-Bridge.

direkte Konnektivität über das native Wire-Protokoll der Datenbank

IIIDas Protokoll

Direkt. Bis zum Protokoll.

Die Engine verbindet sich direkt und spricht das native Wire-Protokoll jeder Datenbank. Abfragen laufen vor Ort, auf Ihre Organisation beschränkt — Ihre Datenbank wird nie kopiert.

Abb. — das Protokoll
Ihre DatenbankZeilen bleiben vor Ort
natives Wire-Protokoll — direkt von der Engine gesprochen
die Engineschreibgeschützte Abfragen

Vor Ort, im Scope.

Die Engine fragt Ihre Daten dort ab, wo sie liegen, auf Ihre Organisation beschränkt — und greift nie über das Konfigurierte hinaus.

Zugangsdaten versiegelt.

Verschlüsselt im Ruhezustand, auf die Organisation beschränkt, ausschließlich zur Bedienung eigener Abfragen verwendet. Ein Connector gibt seine Konfiguration nie zurück — nur Name, Typ, Status und das letzte Testergebnis.

nie kopiert

Die Engine kopiert Ihre Datenbank nie — Zeilen werden dort gelesen, wo sie liegen.

SELECT 1ok · connector: live

Jeder Test öffnet eine echte Verbindung — SELECT 1 für SQL, ein HEAD für Objektspeicher, ein Beispielabruf für REST. Ein Connector ist erst aktiv, sobald eine echte Verbindung gelingt; wird die Konfiguration bearbeitet, fällt er auf „ungetestet" zurück.

Das Flaggschiff-Protokoll · Oracle

Thin Mode. Nichts zu installieren.

Die Engine bündelt python-oracledb im Thin Mode und verbindet sich direkt — kein Instant Client, kein zusätzlicher Laufzeitprozess, kein weiteres Python-Paket. Die Engine besitzt das Wire-Ende vollständig: den Treiber, den begrenzten Connection-Pool, die Zugangsdatenprüfung, das Schema-Browsing und einen Arrow-kompatiblen Batch-Fetch-Pfad — nie eine versteckte ungepoolte Fallback-Verbindung.

  • Nur SELECT / WITH als Wurzeln
  • gebundenes ROWNUM-Limit
  • persistierte Probe · bei 0 ms wiederverwendet

Redshift antwortet über PostgreSQL.

Tabellen werden vor Ort über das PostgreSQL-Wire-Protokoll gelesen — der Cluster wird nie kopiert. Selbst die Erfolgsmeldung des Tests nennt PostgreSQL.

Ein Eingang, jeder Pfad.

Objektspeicher und Uploads teilen dieselben Parser — ein Parquet-Objekt in S3 und eine hochgeladene Parquet-Datei landen identisch in der Engine.

Gleiche Anfrage → gleiche Zeilen, gleiche Reihenfolge · jeder Zugriff auditierbar · Egress ist eine fail-closed Allowlist pro Deployment

IVDie Einheitlichkeit

Downstream unterscheidet CSV nicht von Snowflake.

Jede Quelle gibt dasselbe typisierte SqaiSource zurück – gleiche Felder, gleiche Pins, gleiche Garantien. Tauschen Sie das Warehouse gegen die Datei aus, und downstream ändert sich nichts.

im Prozess"./data/sales.csv"
über die Engine{ type: "snowflake", connection_string, query }

SqaiSource

gleiche Form · jede Quelle
name"sales"
source_ide135c6f7eec0e846c01c4ef8
fieldsregion · product · revenue · cost · units · order_date
typed_fields2 string · 3 number · 1 date
row_count12
schema_revisione4938027ddf0d2210f019770403efd45d350eac28100902ddd7c5191c9b8cfbe
statusready

Ein Zertifikat, unabhängig von der Quelle. Downstream-Code weiß nie, wo die Zeilen liegen.

Einmal registriert.
Nie neu definiert.

eine Neubindung eines Namens wirft einen Fehler source_already_registered

VDer Pin

Daten ändern sich. Der Replay zeigt es.

connect() verankert eine Schema-Revision in jeden Plan und jede Berechnung. Ein gespeicherter Plan, der gegen geänderte Daten wiederholt wird, macht die Änderung sichtbar – nie stillschweigend andere Zahlen.

schema_revision
Beim Verbinden in jeden Plan und jede Berechnung eingebunden, die die Quelle berührt.
schema_revision_mismatch
Was ein Replay zurückgibt, wenn sich die Daten darunter verändert haben.
source_already_registered
Quellen sind unveränderlich – ein Name kann nie stillschweigend auf andere Daten umgelenkt werden.

provenance.bindings[0]

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

Jedes gebundene Feld trägt seine Herkunft.

VIFragen

LLM-Datenbankzugriff – beantwortet.

Wie gebe ich einem LLM Zugriff auf meine Datenbank?

Registrieren Sie die Quelle im Code mit connect(). Das Modell sieht nie einen Connection-String – es erhält drei schreibgeschützte Tools über typisierte Quellen, und die Richtlinie entscheidet, welche Quellen und Felder es berühren darf.

Werden meine Daten beim Verbinden irgendwo kopiert?

Nein. Im-Prozess-Quellen verlassen Ihren Rechner nie. Engine-Quellen speichern Zugangsdaten verschlüsselt; Zeilen werden bei Bedarf gelesen und nie kopiert.

Ist SQAI eine Synchronisierung, ein Export oder eine Drittanbieter-Brücke zu meiner Datenbank?

Nichts davon. Die Verbindung erfolgt direkt über das native Wire-Protokoll der Datenbank – die Engine fragt Ihre Daten vor Ort ab, auf Ihre Organisation beschränkt, und kopiert Ihre Datenbank nie.

Benötige ich einen API-Schlüssel, um Daten zu verbinden?

Nicht für Dateien, In-Memory-Zeilen oder SQLite – diese laufen im Prozess, ganz ohne Account. Live-Datenbanken und Warehouses benötigen SQAI_API_KEY für die gehostete Engine oder SQAI_ENGINE_URL für Ihre eigene.

Kann das Modell meine Zugangsdaten sehen?

Nein. Zugangsdaten werden in Ihrem Code zum Zeitpunkt von connect() übergeben und in der Engine verschlüsselt. Die Tool-Eingabe des Modells trägt typisierte Absicht – keine Verbindungsdetails, keine Richtlinienfelder.

Wird Oracle ohne Installation eines Clients unterstützt?

Ja. Die Engine enthält einen integrierten Thin-Mode-Treiber, sodass kein Oracle-Client installiert werden muss.

Was passiert, wenn sich die zugrunde liegenden Daten ändern?

Die beim Verbinden verankerte schema_revision stimmt nicht mehr überein, und ein Replay gibt schema_revision_mismatch zurück, statt stillschweigend andere Zahlen zu liefern. Das Neubinden eines registrierten Namens wirft source_already_registered.

Etwas verbinden.

Node ≥ 20 · Python ≥ 3.10 · Dateien & SQLite benötigen keinen Schlüssel