Flight SQL 是基于 gRPC 的协议。只支持 PostgreSQL / MySQL 线协议的工具(
psql、mysql
CLI、Navicat)无法连接;请使用 DBeaver、Arrow Flight SQL JDBC 驱动或任意 ADBC 客户端。开启端点
监听器默认关闭。在config.toml 中开启后重启:
鉴权
Flight SQL 直接接入 MoleSignal 既有认证体系,标准 basic auth 握手接受两种凭据:| Username | Password | 适用场景 | |
|---|---|---|---|
| 账号登录 | 你的邮箱 | 账号密码 | 人交互(DBeaver、临时查询) |
| API token | 任意(建议 token) | ms_... token | 自动化、脚本、BI 服务 |
@<org>,例如 [email protected]@acme,其中 acme 为 org 的 name、slug 或 id。
另外两点需要知道:
- SSO 用户:通过 OIDC/SAML 登录的用户没有本地密码,账号登录方式必然失败,请使用 API token。
- 会话过期:账号登录签发的 JWT 受服务端
token_ttl_secs限制,过期后请求返回UNAUTHENTICATED;DBeaver 会用保存的凭据自动重连,交互场景基本无感。长时间运行的 ADBC 脚本请改用不过期的 API token。
DBeaver
DBeaver Community 不内置 Flight SQL 驱动,需要手动注册一次 Arrow Flight SQL JDBC 驱动 (约一分钟):- 数据库 → 驱动管理器 → 新建
- 切到 库(Libraries) 标签,点 添加 Artifact,粘贴
org.apache.arrow:flight-sql-jdbc-driver:RELEASE,再点 下载/更新 (也可用 添加文件 指向本地下载好的驱动 jar) - 回到 设置 标签:驱动名
Arrow Flight SQL,类名org.apache.arrow.driver.jdbc.ArrowFlightJdbcDriver,URL 模板jdbc:arrow-flight-sql://{host}:{port}/?useEncryption=false - 新建连接 → 选刚建的驱动 → Host 填服务器地址,Port 填
5083 - Username 填邮箱(可写
email@org选组织)、Password 填账号密码;或 Username 填token、Password 填ms_...
molesignal)、四个 schema(logs、metrics、traces、
extend),以及当前 org 的 stream 列表(作为表)。
JDBC
org.apache.arrow:flight-sql-jdbc-driver。
Python(ADBC)
查询写法
- 表名用 stream 类型限定:
logs.nginx、metrics.cpu_usage、traces.checkout、extend.lookup_table。不限定时默认按logs处理。带 catalog 的全限定名 (molesignal.logs.nginx,DBeaver 浏览表数据时生成的写法)同样支持。 - 只读:
INSERT/UPDATE/DELETE/ DDL 一律拒绝。 - 时间窗:Flight SQL 协议没有时间范围参数,服务端按最近
default_lookback_hours(默认 24h)做分区裁剪;WHERE里的_timestamp条件在该窗口内仍然生效。要查更久的 数据,调大default_lookback_hours,或改用支持显式时间范围的 HTTP 查询 API。 _timestamp列以微秒精度的 timestamp 类型返回。
限制
- 支持 prepared statement,但不支持参数绑定 —— 请内联字面量。
- 无事务(只读引擎)。
- Flight SQL 上不提供 PromQL;PromQL 请走 HTTP API。
FlightInfo中的结果 schema 为空,客户端以数据流自带的 schema 为准(DBeaver 与 ADBC 都会透明处理)。
GET /api/v1/query/running,可用
POST /api/v1/query/{id}/cancel 取消。