fdl-js
阅读发布的DuckLake表 FDL 没有DuckDB的JavaScript存储库:解析一个ref到一个版本,列出它的表的数据文件 files.json,并按范围读取Parquet文件 hyparquet. 它运行在Cloudflare Workers、浏览器和Node中。
它读取;它不会写字。它只读取文件可以按原样读取的表:拒绝删除行或重命名列的表,因为在没有编目的情况下读取其Parquet文件将返回已删除的行或遗漏的列。请使用DuckDB阅读。
安装
npm install @queria-io/fdl-js
它是一个具有类型定义的ES模块,适用于Node 20或更高版本以及任何捆绑器。
使用
import { httpStore, open, openParquet, readWhere, tableFiles } from "@queria-io/fdl-js";
const store = httpStore("https://data.example.org/towns/");
const version = await open(store); // HEAD, or open(store, "2025-final"), or a version ID
const [file] = tableFiles(version, "main.town") ?? [];
const parquet = await openParquet(store, file);
const rows = await readWhere(parquet, "lg_code", "131016", ["name"]);
readWhere 仅读取min/max可以保存该值的行组,因此它从按该列排序的文件中读取的内容很少。
商店
存储是存储库的根所在的位置。键是布局的路径(fdl.json, refs/heads/main, versions/<ID>/files.json, data/...)。
| 商店 | 读取从 |
|---|---|
httpStore(root, { fetch, headers }) | URL,带 Range 请求 |
r2Store(bucket, prefix) | worker中的R2绑定 |
fileStore(dir) 从 @queria-io/fdl-js/node | 本地文件夹 |
每个请求都会重试一次失败的请求。一个仓库有三个功能(text, size, range),所以另一个是几行。
缓存
- 参移动。
refreshing(() => open(store), 5 * 60_000)保留五分钟的版本,并保留最后一个版本,当一个ref不能读取一会儿 - 数据文件永远不会改变,所以它们的页脚可以永远保存:pass
{ cache: cacheApiFooterCache(caches.default) }(工人)或memoryFooterCache()来openParquet. 与footer_bytes在files.json,一个未缓存页脚是一个读取
接下来是什么
阅读 在规范中: HEAD 裁判紧随其后, version.json 必须命名自己的ID和已知的 fdl 主版本,有版本 expired.json 被拒绝,文件路径从 files.json 如下所示 data_dir. 没有的版本 files.json 这个库无法读取。
开发
pnpm install
pnpm test
pnpm typecheck
pnpm check
pnpm build # dist/
要释放,请设置 version 在 package.json 在pull请求中,合并它,并推送标签 v<version>. 发布工作流将它发布到npm。
test/fixture/repo 小仓库是由 fdl 命令: FDL=fdl test/make-fixture.sh 重塑。