Chapter · データを接続する

あらゆるソース。
一つの入口。

一度の呼び出しでソースを登録し、型付きスキーマを推論し、そのリビジョンをそれに触れるすべてのプランにピン留めする。ファイルと SQLite はインプロセスで動作 — キー不要、データは外に出ない。ライブデータベースはエンジン経由で接続 — 各データベース固有のワイヤープロトコルを直接使用し、認証情報は暗号化、データはコピーされない。

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

→ row_count 12 · schema_revision e4938027… · status ready

型付き · ハッシュピン留め · 読み取り専用

IIタイプ一覧

2トレイ、26ドロワー。

どのドロワーも同じコントラクトに開く:接続方法、必要なもの、外に出るもの。一つ引いてみよ。

インプロセスキー不要 · デーモン不要 · ネットワーク不要

CSV
ケース
ファイル
接続
"./data/sales.csv"
認証
なし。SQAI はプロセス内のバイトを直接読み取ります。
キー
キー不要 — アカウントも不要。読み取り専用の全機能を利用できます。
データ
プロセスの外にデータは出ません。
TSV
ケース
ファイル
接続
"./data/orders.tsv"
認証
なし。SQAI はプロセス内のバイトを直接読み取ります。
キー
キー不要 — アカウントも不要。読み取り専用の全機能を利用できます。
データ
プロセスの外にデータは出ません。
JSON
ケース
ファイル
接続
"./data/sales.json"
認証
なし。SQAI はプロセス内のバイトを直接読み取ります。
キー
キー不要 — アカウントも不要。読み取り専用の全機能を利用できます。
データ
プロセスの外にデータは出ません。
備考
パスまたはオブジェクトを指定します。
rows
ケース
インメモリ
接続
[{ region: "east", revenue: 512 }, …]
認証
なし。SQAI はプロセス内のバイトを直接読み取ります。
キー
キー不要 — アカウントも不要。読み取り専用の全機能を利用できます。
データ
プロセスの外にデータは出ません。
{ records }
ケース
インメモリ
接続
{ records: [ … ] }
認証
なし。SQAI はプロセス内のバイトを直接読み取ります。
キー
キー不要 — アカウントも不要。読み取り専用の全機能を利用できます。
データ
プロセスの外にデータは出ません。
SQLite
ケース
組み込みデータベース
接続
{ provider: "sqlite", path, table | query }
認証
なし。SQAI はプロセス内のバイトを直接読み取ります。
キー
キー不要 — アカウントも不要。読み取り専用の全機能を利用できます。
データ
プロセスの外にデータは出ません。
備考
プロセス内で動作する完全なデータベース。テーブル名または読み取り専用クエリを指定できます。
Excel
ケース
ファイル
接続
"./data/sales.xlsx"
認証
なし。SQAI はプロセス内のバイトを直接読み取ります。
キー
キー不要 — アカウントも不要。読み取り専用の全機能を利用できます。
データ
プロセスの外にデータは出ません。
備考
Python 専用。
Parquet
ケース
ファイル
接続
"./data/sales.parquet"
認証
なし。SQAI はプロセス内のバイトを直接読み取ります。
キー
キー不要 — アカウントも不要。読み取り専用の全機能を利用できます。
データ
プロセスの外にデータは出ません。
備考
Python 専用。

エンジン経由認証情報暗号化 · データコピーなし

PostgreSQL
ケース
リレーショナル
接続
{ type: "postgres", host, port, database, user, password, table | query }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
MySQL
ケース
リレーショナル
接続
{ type: "mysql", host, port, database, user, password, table | query }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
Oracle
ケース
リレーショナル
接続
{ type: "oracle", host, port, database, user, password, table | query }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
備考
Thin モードドライバを同梱 — Oracle クライアントのインストール不要。
SQL Server
ケース
リレーショナル
接続
{ type: "mssql", host, port, database, user, password, table | query }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
Snowflake
ケース
データウェアハウス
接続
{ type: "snowflake", connection_string, query }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
BigQuery
ケース
データウェアハウス
接続
{ type: "bigquery", connection_string, query }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
ClickHouse
ケース
データウェアハウス
接続
{ type: "clickhouse", connection_string, query }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
Redshift
ケース
データウェアハウス
接続
{ type: "redshift", connection_string, query }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
S3
ケース
オブジェクトストレージ
接続
{ type: "s3", … }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
GCS
ケース
オブジェクトストレージ
接続
{ type: "gcs", … }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
Azure Blob
ケース
オブジェクトストレージ
接続
{ type: "azure_blob", … }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
Redis
ケース
NoSQL · グラフ · 検索
接続
{ type: "redis", … }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
Neo4j
ケース
NoSQL · グラフ · 検索
接続
{ type: "neo4j", … }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
Elasticsearch
ケース
NoSQL · グラフ · 検索
接続
{ type: "elasticsearch", … }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
REST
ケース
API
接続
{ type: "rest", … }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
GitHub
ケース
コードリポジトリ
接続
{ type: "github", … }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
GitLab
ケース
コードリポジトリ
接続
{ type: "gitlab", … }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。
Bitbucket
ケース
コードリポジトリ
接続
{ type: "bitbucket", … }
認証
ホスト型エンジンには SQAI_API_KEY、自前のエンジンには SQAI_ENGINE_URL を使用します。
キー
APIキー、または自前のエンジン URL。
データ
認証情報はエンジン側で暗号化。行はオンデマンドで読み取られ、コピーされることはありません。

モードは環境から自動的に判定されます

SQAI_ENGINE_URLself_hosted

自前のエンジン、自前のネットワーク。

SQAI_API_KEYapi

ホスト型エンジン。

いずれも未設定local

プロセス内のみ。

ファイルと SQLite はすべてのモードで動作します。ライブデータベースには api または self_hosted が必要です。エンジンは接続を一度確立した後、常駐デーモンとしてウォーム状態を維持します — クエリごとのコールドスタートはありません。

同期ではありません。エクスポートでもありません。
サードパーティのブリッジでもありません。

データベース固有のワイヤープロトコルによる直接接続

IIIワイヤー

直接接続。プロトコルレベルで。

エンジンは各データベース固有のワイヤープロトコルで直接接続します。クエリはその場で実行され、組織のスコープ内に限定されます — データベースがコピーされることはありません。

図 — ワイヤー
あなたのデータベース行はその場に留まります
固有のワイヤープロトコル — エンジンが直接通信
エンジン読み取り専用クエリ

その場で、スコープ内で。

エンジンはデータの所在地でクエリを実行し、組織のスコープ内に限定されます — 設定した範囲を超えてアクセスすることはありません。

認証情報は封印済み。

保存時に暗号化され、組織スコープで管理され、自組織のクエリ処理にのみ使用されます。コネクターが返すのは名前、タイプ、ステータス、および最終テスト結果のみで、設定内容は返しません。

コピーされません

エンジンはデータベースをコピーしません — 行はその所在地で読み取られます。

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同一性

CSV も Snowflake も、下流には区別がつかない。

すべてのソースは同一の型付き SqaiSource を返す――同じフィールド、同じピン、同じ保証。ウェアハウスをファイルに差し替えても、下流は何も変わらない。

インプロセス"./data/sales.csv"
エンジン経由{ type: "snowflake", connection_string, query }

SqaiSource

同一の形状 · すべてのソース
name"sales"
source_ide135c6f7eec0e846c01c4ef8
fieldsregion · product · revenue · cost · units · order_date
typed_fields2 string · 3 number · 1 date
row_count12
schema_revisione4938027ddf0d2210f019770403efd45d350eac28100902ddd7c5191c9b8cfbe
statusready

ソースを問わず、証明書はひとつ。下流のコードは行の在処を知らない。

登録は一度だけ。
再定義は不可。

名前の再バインドは例外をスローする source_already_registered

Vピン

データが変われば、リプレイがそれを示す。

connect() はスキーマリビジョンをすべてのプランと計算にピン留めする。変更されたデータに対してストアドプランをリプレイすると、変更が明示される――数値がサイレントに変わることはない。

schema_revision
接続時にピン留めされ、そのソースに触れるすべてのプランと計算に埋め込まれる。
schema_revision_mismatch
リプレイ中にデータが変更されていた場合に返される値。
source_already_registered
ソースはイミュータブル――名前を別のデータに暗黙で再指定することはできない。

provenance.bindings[0]

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

バインドされたすべてのフィールドは、その来歴を持つ。

VIよくある質問

LLM のデータベースアクセス、解説。

LLM にデータベースへのアクセスを与えるには?

connect() でコード内にソースを登録する。モデルは接続文字列を参照しない――型付きソースに対する読み取り専用の3つのツールを受け取り、どのソースとフィールドに触れられるかはポリシーが決定する。

接続するとデータがどこかにコピーされますか?

されない。インプロセスのソースはマシン外に出ない。エンジンのソースは認証情報を暗号化して保持し、行はオンデマンドで読み取られ、コピーされることはない。

SQAI はデータベースへの同期、エクスポート、またはサードパーティブリッジですか?

いずれでもない。接続はデータベース固有のワイヤプロトコルで直接行われる――エンジンはデータをその場でクエリし、組織のスコープ内に限定し、データベースをコピーしない。

データを接続するために API キーは必要ですか?

ファイル、インメモリ行、SQLite には不要――これらはアカウントなしでインプロセスで動作する。ライブデータベースとウェアハウスには、ホスト型エンジン用に SQAI_API_KEY、または独自エンジン用に SQAI_ENGINE_URL が必要。

モデルは認証情報を参照できますか?

できない。認証情報はコード内の connect() 時に提供され、エンジンで暗号化される。モデルのツール入力が持つのは型付きの意図のみ――接続の詳細もポリシーフィールドも含まれない。

Oracle はクライアントをインストールせずに使えますか?

使える。エンジンにはバンドルされた Thin モードドライバが同梱されているため、Oracle クライアントのインストールは不要。

元のデータが変更された場合はどうなりますか?

接続時にピン留めされた schema_revision が一致しなくなり、リプレイはサイレントな数値の変化ではなく schema_revision_mismatch を返す。登録済みの名前を再バインドしようとすると source_already_registered がスローされる。

何かを接続する。

Node ≥ 20 · Python ≥ 3.10 · ファイルと SQLite はキー不要