TiDB 连接器¶
TiDB 讲 MySQL 线协议,所以 Dosi 用和 MySQL 完全相同的适配器连它——文本协议、池化连接、共享的 ResultSet 归一——并按 TiDB 的 MySQL 兼容方言编译 SQL。
配置里唯一容易写错的是端口:TiDB 监听 4000,不是 3306。由 exec-mysql feature 控制。
连接配置¶
datasources:
tidb:
type: tidb
host: ${TIDB_HOST}
port: 4000
username: dosi
password: ${TIDB_PASSWORD}
database: analytics
mysql:// DSN 同样可用:
参数¶
| 键 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
type |
string | 是 | — | tidb |
host |
string | 是* | — | *除非给了 uri:。 |
port |
int | 否 | 3306(驱动默认) |
TiDB 监听 4000——显式写上。 |
username |
string | 否 | — | |
password |
string | 否 | — | 尽量用 ${VAR}。 |
database |
string | 否 | — | |
uri |
string | 否 | — | mysql:// DSN。它会取代离散键:写了之后 host、port、username、password、database 都不再生效。 |
default |
bool | 否 | false |
见连接配置。 |
本连接器解析但不使用的键: sslmode、sslrootcert、schema、catalog、arrow_flight_port、account、role、warehouse、compat_mode。
已知限制¶
- 没有
FULL OUTER JOIN。 多粒度合并改用可移植的UNION键 CTE +LEFT JOIN形态,模型不用改。 - 没有三参数
DATEDIFF,也没有CORR/COVAR_*——两者都继承自 MySQL 兼容性,都在编译期被拒,而不是用近似值代替。 - 这个适配器没有 TLS,
sslmode/sslrootcert不生效。所以强制 TLS 的 TiDB Cloud Endpoint 目前还连不上。
本地验证连接¶
$ dosi query --model model.yaml \
--metrics revenue --group-by orders.status --execute --connection tidb
排错¶
| 报错 | 原因与处理 |
|---|---|
cannot reach server: <io error> |
多半是端口:TiDB 是 4000,而 3306 上可能是另一个完全不同的服务。 |
connection "x": bad url: <e> |
uri: 不是合法的 mysql:// DSN。 |
带着 TiDB 原文的 auth 错误 |
凭据不对,或者在 database: 上没权限。 |
server rejected SQL (<code>): <message> |
TiDB 拒了编译出的语句。 |
this build has no tidb executor (feature "exec-mysql" not enabled) |
TiDB 走 MySQL 适配器:--features exec-mysql。 |
参考链接¶
- 官网:https://www.pingcap.com/tidb/
- 连接配置:连接到 TiDB
- 同一个适配器:MySQL · StarRocks · Apache Doris
- 连接配置