跳转至

SQLite 连接器

SQLite 文件可以直接作为 Dosi 的数据源:把配置指向文件,指标查询就跑在它上面。

SQLite 是一种存储格式,不是数仓方言,所以没有独立的 SQLite SQL 生成器。目前这个文件是通过 DuckDB 的 sqlite 扩展打开的——Dosi 编译 DuckDB SQL,由 DuckDB 去读 SQLite 文件。这只是实现细节,而且是临时的:原生 SQLite 支持已经在计划里,落地之后下面这份配置照样能用。

连接是只读的,批量执行也一样。要灌数据或改结构,先在外面做完再让 Dosi 连。由 exec-duckdb 控制,默认开启。

连接配置

datasources:
  fixture:
    type: sqlite
    uri: sqlite:////absolute/path/fixture.sqlite

参数

类型 必填 默认 说明
type string sqlite
uri string sqlite:////abs/pathsqlite:///rel/pathsqlite:/path 以及裸文件路径都接受。和 DuckDB 不同,这里没有内存库的写法——文件必须存在。
default bool false 连接配置

本连接器解析但不使用的键: hostportusernamepassworddatabaseschemasslmodesslrootcertarrow_flight_portcompat_mode

已知限制

  • 只读。 execute_batch 直接被拒,所以 Dosi 没法给 SQLite 建表或灌数——先用 sqlite3 命令行做完。
  • 第一次打开可能需要联网。 DuckDB 会按需安装它的 sqlite 扩展;在隔离网络的环境里,请预先安装或缓存好这个扩展。
  • SQLite 是动态类型的,日期这类列有可能以文本形态到达 DuckDB。存储类型和模型的假设对不上时,在 DATE_TRUNC 这类需要类型的函数之前显式转换(CAST(order_date AS DATE))。

本地验证连接

$ dosi query --model model.yaml --metrics revenue --execute --connection fixture

排错

报错 原因与处理
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 扩展。

参考链接