Trino 连接器¶
Trino 通过它的 REST 客户端协议接入:Dosi 向 /v1/statement 发起请求,然后一路跟着 nextUri 轮询到查询结束,轮询退避是 50 → 200 毫秒。在这套协议里 HTTP 503 表示"忙,稍后再问",会重试约十秒才作为超时抛出。
这里没有连接池——一个保活的 HTTP 客户端,连接超时 10 秒、请求超时 60 秒。由 exec-http 控制。
连接配置¶
datasources:
trino:
type: trino
host: trino.internal
port: 8080
username: dosi # 作为 X-Trino-User 发送
catalog: hive # 会话 catalog,编译出的 schema.table 名在它下面解析
schema: sales # 可选的会话 schema
uri: http://trino.internal:8080 可以替代 host:/port:。
参数¶
| 键 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
type |
string | 是 | — | trino |
uri |
string | 是* | — | *或者给 host:。带 scheme 的 coordinator 端点。 |
host |
string | 是* | — | *或者给 uri:。拼成 http://<host>:<port>——固定是 http,所以走 HTTPS 的 coordinator 必须显式写 uri:。 |
port |
int | 否 | 8080 |
只有从 host: 拼端点时才用到。 |
username |
string | 否 | osi |
作为 X-Trino-User 发送。这个默认值只是兜底,不是推荐——请显式设置。 |
catalog |
string | 否 | — | 会话 catalog,作为 X-Trino-Catalog 发送。 |
schema |
string | 否 | — | 会话 schema,作为 X-Trino-Schema 发送。 |
database |
string | 否 | — | 另一种写法:用一个键写 catalog 或 catalog.schema。两者都给时,database: 优先。 |
default |
bool | 否 | false |
见连接配置。 |
本连接器解析但不使用的键: password——完全不会发送任何认证头,所以要求密码或 JWT 认证的 coordinator 目前还连不上——以及 sslmode、sslrootcert、arrow_flight_port、account、role、warehouse、compat_mode。
HTTPS 需要带 TLS 的构建
和 ClickHouse 一样,只启用 exec-http 时链接进去的 HTTP 客户端不带 TLS。官方二进制带 exec-all,不受影响;自己编译的要加 --features exec-all。
已知限制¶
- 没有三参数
DATEDIFF。 Trino 把它写作date_diff,所以按单位在前的DATEDIFF写法在这个方言下会在编译期被拒。 - 没有认证。 见上面那条"解析但不使用"的说明。
- 没有 Arrow 路径。 Trino 的 spooled 协议基于 JSON,它的 Arrow 支持还没进上游,所以结果是按行传回来的。
时间戳会替你归一:Trino 会把它补齐到声明精度并附上时区名称,解码器会把它规整成其它引擎产出的同一种无时区形态。
本地验证连接¶
$ dosi query --model model.yaml \
--metrics revenue --group-by orders.status --execute --connection trino
排错¶
| 报错 | 原因与处理 |
|---|---|
connection "x" (trino) is missing required field "uri" |
给 uri: 或 host:。 |
trino rejected SQL (<errorName>): <message> |
coordinator 拒了这条语句;catalog 或 schema 没写对会出现在这里。 |
trino kept responding 503 (busy) for over 10s |
集群饱和或还在启动;等它有容量了再试。 |
bad trino response: <e> |
端点不是 Trino coordinator,或者被代理改写了响应。 |
HTTP 401: <body> |
coordinator 要求认证,而这个连接器不发认证信息。 |
cannot reach server: <e> |
主机、端口或网络。 |
参考链接¶
- 官网:https://trino.io/
- 连接配置:Trino 客户端协议——上面那些头就是它的
X-Trino-*系列 - 共用同一套 HTTP 构建:ClickHouse
- 连接配置