使用文档
从安装到你的第一条 SQL
安装 Bamboo,连接你的数据,再用只读 SQL 探索。查询在你的电脑上执行。
01 / 开始使用
下载安装
选择目标电脑的系统与芯片。下面的链接来自官网同一份正式版本清单。
macOS
Apple Silicon(M 系列)· macOS 12 或更新版本;不提供 Intel Mac 安装包。
- 在「关于本机」确认芯片与 macOS 版本,再下载 DMG。
- 双击 DMG,将 Bamboo 拖入 Applications(应用程序),然后推出安装磁盘。
- 从「应用程序」打开 Bamboo。首次启动后选择「打开数据」。
首次启动被 macOS 拦截?
当前安装包尚未经过 Apple 公证。若提示无法验证开发者,先确认下载来自本页链接的官方 GitHub Release,尝试打开一次,再到「系统设置 → 隐私与安全性」选择「仍要打开」并确认。
若提示会损坏电脑或文件已损坏,请停止并重新下载;持续出现问题时提交 Issue。无需关闭系统安全保护。
Apple 官方说明 ↗Windows
Windows 10/11 · x64;需要 Microsoft Edge WebView2 Evergreen x64 Runtime。不提供 Windows ARM64 包。
- 推荐下载 EXE 安装器,运行后按提示安装到当前用户。
- 若使用 ZIP 便携包,完整解压后运行 Bamboo/bamboo.exe;保留旁边的 extensions 和 licenses 文件夹。
- 若缺少 WebView2,从下方 Microsoft 官方页面安装 x64 Runtime,再打开 Bamboo。
当前 Windows 包未签名,可能显示 SmartScreen 提示。核对下载来源和版本说明;企业管理的电脑请联系管理员,保持系统保护开启。
Linux
x64 桌面环境;已验证 Ubuntu 22.04,需要 GTK 3、WebKitGTK 4.1 和 libsecret。其他发行版的兼容性未验证,不提供 ARM64 包。
在下载目录安装 DEB,包管理器会处理可用的依赖:
sudo apt install ./Bamboo-0.2.2-linux-x64.deb
也可以解压 tar.gz 并运行 Bamboo/bamboo。便携包不会安装系统依赖,需要先准备相同的桌面库。
连接云存储还需要活动的用户 D-Bus 会话和已解锁的 Secret Service(例如 GNOME Keyring)。凭据库不可用时,本地文件仍可使用。
02 / 连接数据
打开本地或云端文件
Bamboo 没有接收你数据的后端服务器。本地文件、SQL 和查询处理留在你的电脑上;云端数据由你的电脑直接从所配置的 S3 或 R2 按需读取。
本地文件与文件夹
- 点击「打开数据 → 本机 → 打开文件」,选择 .parquet、.csv 或 .tsv 文件;也可将文件拖入欢迎页的放置区域。
- 打开文件后,在「探索数据」查看预览,在「结构」查看列名与类型。当前文件在 SQL 中叫 data。
- 要查询多个文件,选择「打开数据 → 本机 → 打开文件夹」。展开侧栏目录,或点击工作区名称进入独立 SQL 编辑器。
重新启动或升级后,已打开的工作区、独立文件和活动选择会恢复。主动关闭的项目不会自动重开;暂时离线或无权限的记录会保留。恢复时只预览数据,不会自动运行历史 SQL。
CSV/TSV 读取选项
支持本地 UTF-8 CSV/TSV,包括 BOM、引号内分隔符和多行字段;云端本轮仍仅支持 Parquet。默认将首条记录作为表头并保留文本值,可在「读取选项」选择分隔符、关闭表头或启用保守类型推断。选项按文件保存,也适用于工作区查询。无表头文件请关闭表头,以免首行被解释为列名。
CSV 默认自动检测分隔符,TSV 默认制表符;空字段为 NULL,带引号的空文本保持为空字符串。推断仅尝试布尔、整数和日期,可能改变前导零;精确小数和时间文本可在 SQL 中显式 CAST。非法 UTF-8、格式错误或超出记录预算会报错,不静默跳行。不支持 Excel/JSON 输入、其他编码或通过任意路径调用 CSV reader。
云端连接
从「打开数据 → 云存储」选择提供商。「测试并连接」会打开工作区;在「设置 → 云连接」添加并保存的连接,可以稍后再打开。
Amazon S3
- 选择 Amazon S3,填写存储桶所在 AWS Region、Bucket 和可选的 Prefix。Prefix 是桶内目录前缀,不是完整 s3:// 地址。
- 填写 Access Key ID 与 Secret Access Key;使用临时凭据时,同时填写对应的 Session Token。
- 选择「测试并连接」。在工作区展开目录,点击 Parquet 文件即可预览;也可直接查询同工作区内的文件。
凭据至少需要目标范围的 s3:ListBucket 和 s3:GetObject;KMS 加密对象还可能需要相应密钥权限。临时凭据过期后需手动更新。Bamboo 不读取 AWS CLI profile 或自动刷新 SSO/STS 凭据。
Cloudflare R2
- 在 Cloudflare 为目标存储桶创建「Object Read only」凭据,取得 Access Key ID、Secret Access Key 和该桶的 HTTPS S3 endpoint。
- 选择 Cloudflare R2,填写 endpoint、Bucket、可选 Prefix 及两项密钥。使用控制台提供的 endpoint,包含需要的区域/司法辖区部分。
- 选择「测试并连接」,再从工作区打开文件。这里需要 S3 访问密钥,不是 Cloudflare 通用 API Token。
凭据保存到系统凭据库:macOS 钥匙串、Windows Credential Manager 或 Linux Secret Service。编辑连接时,所有凭据字段留空可保留现有凭据;更换时提供完整的新凭据。
关闭工作区会保留连接配置。删除连接需要确认,只移除本机保存的配置和凭据,不会删除云端文件。修改桶、前缀或 endpoint 前先关闭工作区。
03 / 探索数据
SQL 语法使用
Bamboo 使用 DuckDB SQL 的只读查询能力。下面的订单字段和文件名为示例,请替换为你的实际数据。
输入 SQL 后点击「运行查询」,或按 ⌘ Enter(macOS)/ Ctrl Enter(Windows、Linux)。可以在运行过程中取消。
查询当前文件
打开一个文件后,data 指向该文件。仅选中工作区、没有打开文件时,请使用下一节的 workspace 引用。
SELECT * FROM data LIMIT 100;
SELECT order_id, city, amount
FROM data
WHERE amount >= 100 AND city = 'Shanghai'
ORDER BY amount DESC
LIMIT 50;
字符串用单引号,列名用双引号。NULL 使用 IS NULL / IS NOT NULL 判断,空字符串使用 = '';二者不同。
SELECT "order id", note
FROM data
WHERE note IS NULL OR note = '';
分组与聚合
SELECT city, COUNT(*) AS orders, SUM(amount) AS total
FROM data
GROUP BY city
HAVING COUNT(*) > 1
ORDER BY total DESC;
同一工作区内跨文件查询
使用 workspace."相对路径.parquet",保留扩展名和子目录。文件不必先在侧栏打开;「工作区表」可把已发现的文件名插入光标处。每条查询限同一工作区,最多引用 32 个不同文件。
SELECT o.order_id, o.amount, c.customer_name
FROM workspace."orders.parquet" AS o
JOIN workspace."nested/customers.parquet" AS c
ON o.customer_id = c.customer_id
ORDER BY o.order_id;
SELECT * FROM workspace."2025/orders.parquet"
UNION ALL BY NAME
SELECT * FROM workspace."2026/orders.parquet";
同样的引用语法适用于本地文件夹、S3 和 R2 工作区。不能在一条查询里跨越独立工作区,也不能用 ../、任意路径或 URL 读取未授权文件。
用 CTE 组织查询
WITH paid AS (
SELECT city, amount FROM data WHERE fulfilled = true
)
SELECT city, SUM(amount) AS total
FROM paid
GROUP BY city;
结果、导出与边界
列很多时,预览页行数可能自动减少,所有列仍可横向滚动。「导出」可选当前页或完整结果,支持 CSV、TSV、JSON、JSONL。完整导出重新执行最后成功查询,保留筛选、排序和列投影,显示进度并可取消;不覆盖已有文件,失败时不发布不完整文件。
JSON 保留列名、类型及字符串/NULL 行值。JSONL 首行为列元数据,之后每行为一个 row 数组记录。精确数字以字符串传递,不经 JavaScript 浮点数。CSV/TSV 为公式样式的文本加单引号保护,但 NULL 和空文本均为空字段;需保留这种区别时选择 JSON/JSONL。
按需列统计与透视
成功查询后点击「分析」,选择列并主动计算总行数、NULL 数、不同非 NULL 值、最小/最大值和频次最高的 20 个值。使用完整查询及其筛选,保留 SQL LIMIT,不受预览页码限制,不进行采样。超过 10,000 个不同非 NULL 值会报错,可先筛选查询。
透视可选一个分组维度和 COUNT/SUM/AVG/MIN/MAX 指标,完整结果最多 1,000 组、4 MiB 值文本;超限报错,不静默截断。COUNT 计入 NULL 行,其他聚合遵循 DuckDB 语义;AVG 可返回浮点值。文本数字先 CAST。点击「导出透视结果」保存独立快照,不替换原查询预览或导出目标。
完整导出与分析会重新读取数据源,外部修改可能影响结果,不是预览时源字节的事务快照。内存、临时磁盘、超时和只读路径范围继续生效;可点击取消或按 Escape 中止分析。
字号与缩放
在「设置 → 通用」调整应用缩放(75%–200%)与数据字号(12–20 px),点击应用或重置。SQL 字号比数据字号大 1 px。偏好会在重启后恢复;高缩放下可在设置和表格内部滚动,使用 Tab 导航。
支持 SELECT、WITH、JOIN、UNION、聚合与窗口函数。写入、建表、COPY、PRAGMA、安装扩展及多语句执行受限制。查询不会修改源文件。内存、临时磁盘和超时可在「设置 → 性能」调整;LIMIT 不保证排序或聚合只读取少量数据。
INT96:保留纳秒精度
某些旧 Parquet 文件使用 INT96 存储时间。默认读取仍返回 TIMESTAMP,保留现有日期函数、比较和运算,但只保留微秒:
1970-01-01 00:00:00.123456789
→ 1970-01-01 00:00:00.123456
默认结果的导出也遵循这个精度。读完再 CAST 为 TIMESTAMP_NS 无法恢复已经截断的三位。现代 INT64 时间列保持自身原有类型与精度。
需要完整精度时,先打开本地文件,再通过以下显式查询读取。将示例路径替换成该文件的绝对规范路径;Windows 路径可使用 C:/Data/file.parquet。
SELECT *
FROM read_parquet('/path/to/file.parquet', int96_as='struct');
只有这条显式查询会把 INT96 列返回为 STRUCT(date DATE, "time" TIME_NS),同时保留 0001–9999 年范围、九位小数和 NULL。默认 data / workspace 视图不会改变。
SELECT stamp.date AS day, stamp.time AS exact_time
FROM read_parquet('/path/to/file.parquet', int96_as='struct')
ORDER BY stamp.date, stamp.time;
把 stamp 替换成实际 INT96 列名。日期与时间子字段可分别查询和排序;普通 timestamp 函数需要有意识地转换,转换时需自行确认精度与日期范围。
这一方法仅适用于已打开、获准读取的本地文件,不提供云端高精度开关,也不允许访问任意 URL。精确查询的结果页可直接导出。单独使用 int96_as='timestamp_ns' 不是全日期范围的替代方案,超出范围的日期可能变为 infinity。