Query Streams 是一个安全、实时的数据库集成平台,其 SQLite 文件夹连接器可以将整个文件夹转换为 .db 将文件导入到实时 SQL 表中,您可以从 Microsoft Excel、Google Sheets、Airtable 和您的 AI 助手进行查询。 了解更多信息,请访问 QueryStreams.com 和 免费注册 几分钟内即可查询您的第一个 SQLite 文件文件夹。
最终谁会得到一个包含 SQLite 文件的文件夹
几乎没有人会刻意去创建一个 SQLite 数据库文件夹。最终你会得到一个,是因为软件在需要本地存储时通常会选择 SQLite,而且通常每个数据库都会有一个副本。 某物按设备、按站点、按租户、按会话、按备份。
- 移动应用备份 — 提取
.db按手机、按用户或按支持工单。 - 按设备和按站点划分的数据库 — 售货亭、收银机、地磅和生产线控制器各自拥有自己的本地商店,并在夜间将副本分发给股东。
- 物联网和遥测数据采集 — 一款滚动到新版本的传感器记录器
.sqlite每小时或每天提交一次。 - 每个租户的应用程序数据库 — 一款自托管产品,让每个客户都能拥有自己的文件。
- 导出浏览器、工具和桌面应用程序数据库 — 您计算机上一半的软件的历史记录、缓存和设置都保存在 SQLite 中。
每个文件本身都是一个完整的数据库,有很多工具可以打开它们。真正关键的问题在于: 我有两百个这样的查询语句,我想用一条语句查询所有这些语句。 手工缝制很快就会达到极限,而将结果缝合到电子表格中正是你想要避免的工作。
A SQLite文件夹 连接器通过将文件夹视为数据库来解决这个问题。没有任何内容被合并到新文件中。 附 语句直接写入,无需复制任何文件。Query Streams 会读取数据库所在的位置,并将文件夹呈现为一组普通的 SQL 表。这样,将 SQLite 数据导出到 Excel 就不再是繁琐的导出工作,而变成了一个只需刷新的查询。
每个成员表对应一个表,并跨所有文件进行合并
这就是整个连接器的形状,在进行任何其他操作之前,务必先弄清楚这一点。SQLite 文件并非单个表,而是一个包含多个表的小型数据库。因此,联合操作并非在文件级别进行,而是在数据库级别进行。 表名 等级。
文件中找到的每个表都称为一个 成员表对于每个不同的成员表名称,查询流都会固定一个输出表,文件夹中的每个文件都会将其数据行添加到该输出表中。如果您的两百个自助服务终端数据库每个都包含 活动, 会话 和 配置你会得到三个表,每个表涵盖所有两百个文件。
输出表的名称 数据_ 后跟成员表名称,因此成员表名为 活动 到达时 数据事件没有 表名 要更改 SQLite 卡上的字段,请执行以下操作:SQLite 是一个多表驱动程序,因此名称遵循已固定清单中记录的成员表,而不是您键入的任何内容。 数据_ 前缀已固定。成员名称经过清理以用作标识符,如果两个不同的成员表清理后输出名称相同,则属于命名拒绝而非静默冲突——您需要在文件中重命名其中一个,或者使用 `--exclude` 命令排除另一个。 表格.
如果某个文件缺少某个成员表,这并非错误。该文件中对应表的行根本不存在,其他表仍会正常同步。同样地,如果某个列存在于大多数文件中,但并非所有文件中都存在,则该列会被标记为可空,并按预期读取。 无效的 对于没有该文件的文件。
源文件 命名从中读取数据的数据库文件,以及 _row_id 在整个表中是唯一的,并且遵循源表的顺序 rowid每个设备或每个租户一个文件, 源文件 通常是表格中最有用的维度——它是设备、网站或客户。
这种组合使得跨文件查询成为普通的 SQL 查询。将一台设备与整个集群进行比较,或者查找数据看起来错误的租户,都是普通的 SQL 查询。 GROUP BY 而不是花一下午时间打开文件。
SELECT _source_file AS device, COUNT(*) AS events, MIN(occurred_at) AS first_seen, MAX(occurred_at) AS last_seen FROM data_events WHERE occured_at >= DATE '2026-08-01' GROUP BY _source_file ORDER BY events DESC;
因为成员表是作为单独的表生成的,所以它们可以相互连接,也可以与其他所有内容连接。 数据事件 可以连接到 数据会话并且,只需一条只读语句,即可将两者同时写入 PostgreSQL 实例中的 customer 表。对于所有文件夹类型,其操作机制都相同,具体内容请参阅相关文档。 文件集概览.
类型关联性:声明的类型是引脚
这就是 SQLite 与其他所有文件夹类型不同的地方,这是引擎本身的特性,而不是 Query Streams 的决定。
大多数数据库都强制执行列类型。SQLite 也有。 类型亲和力 相反,你写的那种类型 创建表 表达的是一种偏好,而非限制:一列声明 VARCHAR(20) 可以合法持有该整数 42以及声明的列 整数 可以合法持有该文本 哎呀SQLite 可以毫无问题地存储这两种类型。每个值都有自己的存储类别——INTEGER、REAL、TEXT、BLOB 或 NULL——列声明的类型只会影响 SQLite 在数据传入时尝试转换的类型。
这使得任何读取 SQLite 文件文件夹的工具都面临一个不太理想的选择:它可以信任声明的类型并寄希望于此;它可以对值进行采样并推断;或者它可以放弃,将所有内容都视为文本。最后一种选择最值得怀疑:一旦价格列被定义为文本,求和操作就会按字典顺序进行,并且 9.99 以上排序 10.00这是一个看起来像正确答案但实际上是错误的答案。
查询流采用第一条路径,然后对其进行验证。固定表由以下方式构建: 声明 类型信息从每个文件的自身模式中读取,并使用 SQLite 自身的亲和性词规则映射到实际类型——然后在读取时,每个值都会与该亲和性词规则进行比对。声明是承诺,检查是执行。
| 已在文件中声明 | 置顶 | 为什么 |
|---|---|---|
任何包含 INT - 整数, INT, 大情报, SMALLINT | 大情报 | SQLite 的整数亲和性规则应用于声明。 |
任何包含 字符, CLOB 或 文本 | VARCHAR | 文本亲和力。 VARCHAR(20) 和 文本 同意。 |
任何包含 真实的, 浮标 或 双倍 | 双倍的 | 浮点亲和性。 |
任何包含 BLOB | BLOB | 二进制数据始终是二进制数据。 |
DECIMAL(18,2), NUMERIC(12,4) | DECIMAL(18,2), DECIMAL(12,4) | 您声明的精度和比例将被保留,因此货币金额将保持准确。 |
布尔值, 日期, 时间, 日期时间, 时间戳 | 匹配的实类型 | 被人认出。 |
十进制 或 数字 没有精确度 | 指定拒绝 | 对你来说,选择哪种衡量标准就像是在猜测金钱的多少。 |
| 完全没有声明类型 | 指定拒绝 | 没有需要固定的内容。请声明类型,或排除该表。 |
表格底部的两处拒绝是故意的。缺乏精确性 十进制 未指定类型的列意味着文件提供的信息不足以给出安全答案,连接器会通过名称(文件名、成员表名和列名)来明确指出这一点,而不是选择一个看似合理的名称。如果您不关心该表,请像往常一样将其排除在外,并排除其余的文件夹固定项。
声明的类型也必须 同意文件。 如果 数量 是 整数 在大多数数据库中和 文本 其中一项否决决定同时点名了两个文件和两项声明,而非多数投票。不过,等效的声明会被视为同等效力: INT 和 整数 两者都映射到 大情报因此,即使文件夹的架构是由不同的人在多年来编写的,也不会因为表面上的差异而出错。
文本 仍有挽救的余地。 将价格以文本形式存储是 SQLite 的常见做法,因为文本数据是逐字节传输的。如果某一列被重新输入为精确的十进制数,则存储的字符串必须能够真正解析为十进制数——如果不能,文件将保持静止状态,而不是被强制转换。你永远不会得到一个伪装成总数的字典序求和。
当某个值不符合引脚要求时
由于亲和力较弱,因此列声明 整数 可能包含字符串,而模式不会发出警告。连接器正是为了捕获这种情况而存在的,它会在读取行时逐值检查,而不是进行抽样检查。
当一个值无法真实地成为固定类型时,该文件将被删除。 停放它的行不会出现在表中,原因会被记录下来,而文件夹中的其他所有文件都会保持同步。记录的原因很具体——文件、成员表、列等等。 rowid它会显示被锁定的类型、出错值的存储类以及该值本身的简短预览。通常情况下,这些信息足以在不打开数据库的情况下修复该行。
| 情况 | 会发生什么 |
|---|---|
| 存储在固定为整数的列中的文本 | 文件停放处,命名列和 rowid 它就在那里。 |
| 列中标记为文本的非文本存储类 | 文件已停放。这是亲和力惊喜的反向版本,处理方式相同。 |
| 不符合 ISO 格式的日期或时间戳字符串 | 文件已停放。仅接受明确的 ISO 形状,因此 01/02/2026 绝不会有人暗中猜测。 |
A 无效的 在一根柱子上钉住 不为空 | 文件只是暂时搁置,而不是悄然放松限制。 |
| 自销钉插入以来,成员表增加了一列。 | 漂移。之所以给这个新栏目起这个名字,是因为一个未经任何人同意的栏目,反而是一种值得关注的改变。 |
| 由于销钉的作用,成员表少了一列,或者整张表都丢失了。 | Drift,名称也相同——一个以前有但现在没有的文件改变了形状。 |
| 一张新的成员表似乎显示,该成员从未见过。 | 除非您特意将连接器限制为表列表,否则会出现漂移。 |
| 该文件根本无法作为 SQLite 数据库打开。 | 问题出在真正的原因上。第一次同步时,系统报告跳过了该文件,而其余文件仍然处于锁定状态。 |
文件的所有成员表都在单个事务中写入,这提供了一个有用的保证:文件要么完全写入,要么完全写入。错误的值 配置 回滚该文件。 活动 行数也是按整个文件计算的,因此您永远不会遇到设备在各个表中只存在一半的情况。此外,每个文件的行数限制也是按整个文件而不是按表计算的,因此包含三个大型成员表的文件将被视为一个文件。
SELECT relative_path, detail, occurred_at FROM files_events WHERE event_type = 'drift' ORDER BY occurred_at DESC;
已停放的文件会被记住,因此不会在每次同步时都重试未更改的文件。修复或替换文件后,下次同步时会自动识别。所有文件集连接器共享停放和漂移机制,并在[此处应插入完整描述]中有详细说明。 概述指南.
文件内部的哪些表会变成文件外部的表?
成员表是根据每个数据库自身的模式目录枚举的,并且规则有意设置得比较严格。
- 包含真实表格按名称顺序,以及文件本身报告的列和声明类型。
- 不包含浏览量。 只读取文件中记录为表的条目,因此视图既不会被固定也不会被查询——如果您需要视图生成的内容,请改为针对底层表编写等效的 SQL。
- SQLite 自身的内部表会被按名称跳过。因此,SQLite 维护的序列表和统计表永远不会作为数据出现。
- 虚拟表及其影子表仍然作为表被记录。 由于 SQLite 会枚举这些列,因此它们会被列出。这些列通常没有声明类型,这使得它们成为上面提到的被拒绝列之一——解决方法是将它们排除在外。
- 没有列的表将被忽略。 而不是被标记为空表。
该卡牌的唯一特定格式设置, 表格对于上述大部分问题,答案是:只需指定所需的成员表,文件中的其他内容将保持不变。对于包含四十个表但您只关心其中两个表的应用程序数据库文件夹,这也是一种更简洁的处理方式。命名一个在任何采样文件中都未出现的表本身就是一种拒绝,因为一个静默无闻、什么也不做的包含列表条目与一个正常工作的条目没有区别。出于同样的原因,驱动程序无法识别的任何选项键都会被直接拒绝。如何设置以及需要使用它的场景,请参阅相关文档。 SQLite文件夹的每个设置,以及何时更改它 以下。
没有 ROWID 表格无法读取。 行数据正以流式方式输入。 rowid 秩序,正是秩序造就了它。 _row_id 稳定且可重复。声明的成员表 没有 ROWID 由于没有此列,因此它会以此为由停顿,而不是被默默跳过。请使用以下命令将其排除: 表格 如果您想要的是数据库的其余部分。
文件为只读,因为该文件可能仍在被使用。
所有文件集连接器均为只读。对于 SQLite 而言,这一保证比其他任何地方都更具意义,因为…… .db 文件不是静静地保存在共享文件夹中的导出文件,而是一个实时数据库,其他应用程序可能正在打开它。
因此,每个成员文件都在 SQLite 自身的数据库中打开。 只读模式连接器从不获取写锁,因此拥有该文件的应用程序不会受到影响。连接池也被关闭,这在文件夹场景中尤为重要:连接池中的句柄在使用后仍然保持活动状态,这会导致客户的实时文件在同步之间保持锁定状态,而这种情况可能发生在数百个文件之间。每个文件都会被打开、读取并释放。
有两个相关细节值得明确说明,因为 SQLite 素来有留下边车文件的恶名。SQLite 会创建 -wal 和 -shm 连接器是协调写入器的伙伴文件;它本身不是写入器,也不会尝试接管无法写入的数据库的恢复工作。而且,如果文件夹中已经存在这样的伙伴文件,它们绝不会被误认为是独立的数据库:文件匹配是基于文件扩展名进行的,因此可以识别出特定的模式。 **/*.db 不匹配 store.db-wal.
如果同步操作到达某个文件时,该文件确实正在写入或被锁定,那么就会出现一个阻塞状态,其中包含 SQLite 拒绝同步的原因。同步操作完成后,读取其他文件,稍后重试正在使用的文件。任何正在使用的文件都不会阻塞连接。
选择, 和, 实践, 描述 或 解释 声明——任何可能写入的内容都会在运行前被拒绝。
SQLite文件夹的每个设置,以及何时更改它
SQLite 文件夹卡仅包含一个特定于格式的设置。其上的其他所有内容——根文件夹、递归和最大深度、排除模式、符号链接、文件名解析模式、文件夹标记、扫描间隔、内容哈希、删除策略、事件保留、扫描限制和四个摄取上限——都适用于所有文件夹类型,并在文档中有完整说明。 文件集连接器指南. 其中两个共享字段在 SQLite 中的行为方式截然不同,值得在此用一段话来介绍,因此它们将在下面进行介绍,而不是留在概述中。
表格
默认值:空这意味着固定清单中的每个表。为了缩小范围,请每行填写一个成员表名,拼写必须与 SQLite 文件中的拼写完全一致。您列出的每个名称都会成为其自身的固定表,该表会联合作用于作用域内的所有数据库文件,并携带一个 源文件 柱子。
活动会议
你应该把它设置在应用程序数据库中。 产品自身的 .db 文件很少只有两个整齐的表。它包含了你需要的两个表,外加迁移历史记录、会话状态、缓存和框架簿记信息。 sqlite_sequence, 模式迁移, django_session缓存表、作业表以及框架自身维护的其他任何数据。如果任其自行发展,连接器会将所有这些数据都固定住。
仅列出您实际需要的表可以实现三个目标。首先,它确保查询构建器树、模式智能和 Nova AI 始终指向真实数据,而不是四十个底层数据表;其次,它减少了每次同步所需的工作量,因为未列出的表永远不会被读取;最后,它一次性消除了所有类型的拒绝请求,因为从未被枚举的表不会对任何请求提出异议。在一个包含四十个表的应用程序数据库文件夹中,如果您只关心其中两个表,那么这就是一个可用连接器和一个无人问津的冗长树状结构之间的区别。
它还可以专门用于解决本页前面描述的两种情况:
- 两个成员表清理后输出名称相同 连接器拒绝碰撞。请列出您需要的连接器,并忽略其他连接器。
- 一个问题是桌子挡住了引脚 — 未键入的列,一个
十进制没有精确度,虚拟表或影子表,一个没有 ROWID表格。请按常规方式命名您需要的表格以及其他文件夹引脚,而不是用一个您从未要求过的表格来支撑整个连接器。
如果名字填错了会发生什么: 系统会立即以名称告知您。如果某个条目在任何抽样文件中都未出现,则表示存在命名拒绝,而非静默无声的空操作——消息会列出找不到的条目,然后列出找到的成员表,因此仅凭错误信息通常就能明显看出拼写错误、复数形式或大小写差异。在您修复之前,任何内容都不会被锁定。这是有意为之:一个静默无声的空操作条目看起来与一个正常工作的条目完全相同。
包含模式
此卡的默认值:两行, **/*.db 和 **/*.sqlite这是一个共享设置,但在这里值得特别关注,因为 SQLite 是唯一没有单一常规扩展名的格式。 .db, .sqlite, .sqlite3 和 .db3 这些术语都很常用,很多软件要么自己发明术语,要么根本不使用术语。这两条预设语句涵盖了两种最常见的情况,仅此而已。
如果您的数据库以其他任何名称结尾,则必须为其添加一行,否则连接器将找不到任何内容。 每行一个 glob,并且你的行会替换种子对而不是添加到它们上面,所以保留你仍然需要的行。
**/*.db **/*.sqlite **/*.sqlite3 **/*.db3 **/kiosk-*.db 仅包含自助服务终端数据库 2026/**/*.db 仅包含今年的树
这里有两件事您无需担心。匹配功能与扩展程序绑定,所以 **/*.db 从不拿起 -wal 和 -shm SQLite 会在活动数据库旁边留下附属文件。而且,一种文件夹类型对应一个连接器:扩大匹配范围以捕获同一文件夹中的 CSV 文件行不通,因为这两种格式无法共享固定形状。
清单覆盖(JSON)
隐藏在 显示高级选项这是针对结构正确但细节错误的已固定表形状的“逃生舱”——例如,您想要重命名的列、您想要确定的类型,或者您根本不想拥有的列。它在表形状固定时应用,因此会成为表定义的一部分,而不是在每次查询时都重新应用。
{ "重命名": { "数量": "数量" }, "重新类型": { "价格": "DECIMAL(18,4)" }, "排除": [ "内部备注" ] }
- 重命名 — 在文件外部为列指定一个比文件内部更好的名称。您不能重命名为
源文件或_row_id两列不能重命名为同一个名称。 - 重新输入 — 强制指定列的类型。在 SQLite 中,这是解决文中描述的亲和性问题的直接方法。 类型关联性:声明的类型是引脚 上方。文件中声明的价格列。
文本或者十进制声明中没有明确说明拒绝,但最终以一人结案。重新输入输入您实际想要的类型名称。此处设置的类型会被视为一条明确的指令,因此无需进行严格的逐值检查即可应用,否则该检查可能会导致文件被搁置。 - 排除 — 将某一列完全从固定表中移除。这对于无人查询的自由文本备注列,或者不希望每次同步时都移动的大型数据块非常有用。
清空此框会清除您的覆盖设置,并将表格恢复到采样时的形状。仅接受带有可选精度的纯类型名称。 DECIMAL(18,2), VARCHAR, 大情报, 日期 — 任何异常情况都会在保存时而不是同步时被拒绝。
这张卡牌故意省略了两个字段。
这两张卡片都存在于其他文件夹卡片上,因此有必要说明它们在这里的缺失,而不是让您自己去寻找。
- 没有“表名”字段。 单表文件夹(CSV、Parquet 和 JSONL)需要一个名称,因为所有内容都会合并到一个表中,而这个表必须由一个名称来命名。SQLite 是一个多表驱动程序:名称来自已固定清单中记录的成员表。您可以控制的是 哪个 成员表被固定,使用 表格而不是生成的表格的名称。
- 没有表格布局选项。 “每个布局一个表”的逃生通道仅适用于 Excel、CSV 和 JSONL 卡片——这些格式通常是人们手动组装的。SQLite 已经从固定的清单中派生出表,因此该选项不适用,并且如果该选项到达代理,则会被拒绝。当文件在声明的类型上确实存在冲突时,拒绝操作会同时指出两个文件及其声明;解决方法是修改文件本身。
重新输入覆盖,或者将该表排除在外 表格 — 永远不会有布局模式。
设置 SQLite 文件夹连接器
您需要一个 Query Streams 帐户,并在能够访问该文件夹的计算机上安装网络代理——可以是服务器、已映射共享的工作站,或者您自己的笔记本电脑。SQLite 文件夹连接器需要 网络代理 2.6 或更高版本.
- 从此处安装代理。 下载页面 如果它还没有运行的话。
- 在门户中,添加数据连接器并选择 SQLite文件夹.
- 输入代理计算机上显示的文件夹路径。 包含模式 到达时已播种
**/*.db和**/*.sqlite— 如果您的数据库使用其他扩展名,请添加一行,或者将其缩小到类似这样的范围:**/kiosk-*.db. - 如果文件中的表数量超过所需,请列出您需要的表。 表格这也是排除未类型化或虚拟表的方法,否则这些表会被拒绝。
- 保存。该代理最多会采样 64 个文件,每个成员表固定一个表,并报告其发现的内容——包括任何无法打开的文件。
- 打开查询构建器,选择连接器并查询合并后的表——或者让 Nova AI 为您编写 SQL。
之后,这些表格的行为就和其他连接器一样了。它们可以被 Microsoft Excel 和 Google Sheets 加载项读取,按计划推送到 Airtable、Smartsheet、Baserow、SeaTable 或 Anvil,通过 Query Streams MCP 服务器由 Claude、Cursor、ChatGPT 或 Grok 查询,或者发布为 REST 端点。
\\fileserver\backups\devices或者代理自身机器上的本地路径,并检查代理运行所用的帐户是否可以读取这些文件。
常见问题
如何将多个 SQLite 数据库合并到一个查询中? +
**/*.db没有任何内容合并到新文件中,也没有 附 需要语句——每个成员表名称对应一个 SQL 表,其中包含文件夹中每个文件的行,并且稍后添加的文件将包含在下次同步中。
所有 .db 文件都需要相同的模式吗? +
无效的 对于该文件,他们不能做的是: 不同意:声明的列 整数 在一个文件中 文本 另一份拒绝声明列出了两份文件和两份声明,而不是你永远不会看到的多数投票结果。
为什么我声明为 NUMERIC 类型的列被拒绝了? +
数字 和 十进制 不精确说明数值的小数位数,为可能代表货币的列随意设定一个刻度,纯属猜测,可能会造成财务后果。请将其声明为: DECIMAL(18,2) 文件已归档,精度完全符合要求,请用以下方式解决: 重新输入 清单覆盖,或排除该表 表格 设置。未声明类型的列(完全没有声明类型)也会因同样的原因而被拒绝。
查询流能否写入、锁定或损坏我的 SQLite 文件? +
选择, 和, 实践, 描述 或 解释 声明,您的文件永远不会被写入、移动或重命名。
如果在同步过程中应用程序正在写入文件会发生什么情况? +
是否包含视图和虚拟表? +
文件已暂存,消息中提到了 rowid。这是什么意思? +
整数SQLite 的关联规则允许这样做。记录的原因会指定文件、成员表、列等信息。 rowid它会显示已锁定的类型和出错的值,以便您可以直接跳转到相应的行。在修复之前,该文件不会向任何表中添加任何行;其他所有内容都会继续同步。
我可以只查询文件中的部分表吗? +
如何将 SQLite 数据导入 Microsoft Excel 或 Google Sheets? +
一个连接器最多可以合并多少个 SQLite 文件? +
开始
一次性查询所有 .db 文件
将代理指向该文件夹,即可获得每个表名对应的 SQL 表,涵盖其中的所有 SQLite 数据库——可从 Microsoft Excel、Google Sheets、Airtable 或您的 AI 助手读取。以只读方式打开,缓存在您的本地计算机上,绝不会上传。
相关指南: 如何使用 SQL 查询文件夹中的文件 | 合并多个 CSV 文件到一个表格中 | 下载查询流代理 | 所有文件集连接器指南
类别:文件集连接器
标签:合并 SQLite 数据库、合并 SQLite 文件、查询多个 SQLite 文件、SQLite 文件夹、SQLite 转 Excel、SQLite 类型关联、SQLite 连接器
元描述:将一个包含 SQLite 文件的文件夹查询为每个表名对应一个表。只读,不上传任何内容。

