SQLite 连接器¶
SQLite 文件可以直接作为 Dosi 的数据源:把配置指向文件,指标查询就跑在它上面。
SQLite 是一种存储格式,不是数仓方言,所以没有独立的 SQLite SQL 生成器。目前这个文件是通过 DuckDB 的 sqlite 扩展打开的——Dosi 编译 DuckDB SQL,由 DuckDB 去读 SQLite 文件。这只是实现细节,而且是临时的:原生 SQLite 支持已经在计划里,落地之后下面这份配置照样能用。
连接是只读的,批量执行也一样。要灌数据或改结构,先在外面做完再让 Dosi 连。由 exec-duckdb 控制,默认开启。
连接配置¶
参数¶
| 键 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
type |
string | 是 | — | sqlite |
uri |
string | 是 | — | sqlite:////abs/path、sqlite:///rel/path、sqlite:/path 以及裸文件路径都接受。和 DuckDB 不同,这里没有内存库的写法——文件必须存在。 |
default |
bool | 否 | false |
见连接配置。 |
本连接器解析但不使用的键: host、port、username、password、database、schema、sslmode、sslrootcert、arrow_flight_port、compat_mode。
已知限制¶
- 只读。
execute_batch直接被拒,所以 Dosi 没法给 SQLite 建表或灌数——先用sqlite3命令行做完。 - 第一次打开可能需要联网。 DuckDB 会按需安装它的
sqlite扩展;在隔离网络的环境里,请预先安装或缓存好这个扩展。 - SQLite 是动态类型的,日期这类列有可能以文本形态到达 DuckDB。存储类型和模型的假设对不上时,在
DATE_TRUNC这类需要类型的函数之前显式转换(CAST(order_date AS DATE))。
本地验证连接¶
排错¶
| 报错 | 原因与处理 |
|---|---|
datasource "x" (sqlite) is missing required field "uri" |
和 DuckDB 不同,路径是必填的:uri: sqlite:////absolute/path/database.sqlite。 |
datasource "x" (sqlite) has an empty database path |
uri: 解析下来是空的——检查是不是写了个只有 sqlite:// 没有路径的值。 |
sqlite connections are read-only; batch execution is disabled |
先在外部把 SQLite 文件准备好再跑 Dosi。 |
cannot open sqlite database through duckdb: <e> |
文件不存在或读不了,或者 DuckDB 没能安装/加载 sqlite 扩展。 |
参考链接¶
- 官网:https://www.sqlite.org/
- 连接/URI 配置:SQLite URI 文件名,以及当前承载它的 DuckDB
sqlite扩展 - DuckDB 连接器 · 连接配置