Apache Doris 连接器¶
Apache Doris 通过 FE 的 MySQL 协议端口接入,用的是和 MySQL 相同的适配器,编译出的 SQL 按 Doris 方言生成,它保留了 FULL OUTER JOIN(这一点和 MySQL、TiDB 不同)。
Doris 同样支持 Arrow Flight SQL:加一个键,结果集就以 Arrow 批次直接从 BE 拉取,不再逐行经 FE 序列化。
由 exec-mysql 控制,Arrow 路径还需要 exec-flightsql。
连接配置¶
datasources:
doris:
type: doris
host: doris.internal
port: 9030 # FE 的 MySQL 协议端口
username: dosi
password: ${DORIS_PASSWORD}
database: analytics
开启 Arrow Flight SQL:
参数¶
| 键 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
type |
string | 是 | — | doris |
host |
string | 是* | — | *除非给了 uri:。同时也是 Flight SQL 的主机。 |
port |
int | 否 | 3306(驱动默认) |
FE 的 MySQL 端口——通常是 9030,显式写上。 |
username |
string | 否 | — | 也是 Flight SQL 握手用的用户,那里不写默认是 root。 |
password |
string | 否 | — | 尽量用 ${VAR}。 |
database |
string | 否 | — | Flight 路径下会在握手之后以 USE <database> 应用。 |
arrow_flight_port |
int | 否 | — | 写上它就换执行器。 Doris 在 fe.conf 里把它叫 arrow_flight_sql_port(建议 Doris ≥ 2.1.5);Dosi 对两个引擎用同一个键名。 |
uri |
string | 否 | — | mysql:// DSN。它会取代 host/port/username/password/database 这些离散键。 |
default |
bool | 否 | false |
见连接配置。 |
本连接器解析但不使用的键: sslmode、sslrootcert、schema、catalog、account、role、warehouse、compat_mode。
Arrow 原生结果¶
只需要加这一个键,见 Arrow。要注意两点:
- BE 可达性。 FE 会把每个 BE 自己的地址交给客户端去拉数据,所以那个地址必须能从 Dosi 所在的机器路由到。做不到时用 FE 的代理设置(
public_host+arrow_flight_sql_proxy_port)。 - 灌数走 MySQL 线协议。 配置里保留
port:,让建表和灌数有一条不依赖 Flight 端点的路径。
构建里没有 exec-flightsql 时,这个键会直接报错,而不是悄悄回落。
已知限制¶
- 没有
NTH_VALUE——用到nth_value的窗口在这个方言下会在编译期被拒。FIRST_VALUE/LAST_VALUE不受影响。 - 退化窗口下的
CORR/COVAR_*结果不同。 单行窗口帧上 Doris 返回0,而标准结果是 NULL,所以这两个双参数统计窗口会被拒绝,而不是返回一个和其它引擎都对不上的值。 - 没有三参数
DATEDIFF。 - Doris 2.1 的
OVER里不接受COUNT(*)——编译器会替你发COUNT(1),这一条不需要你做任何事。 - 两条路径都没有 TLS。
本地验证连接¶
$ dosi query --model model.yaml \
--metrics revenue --group-by orders.status --execute --connection doris
排错¶
| 报错 | 原因与处理 |
|---|---|
datasource "x" sets arrow_flight_port but this build lacks the exec-flightsql feature |
用 --features exec-flightsql(或 exec-all)重新构建,或者删掉这个键。 |
flight sql connect: <e> |
FE 的 Flight 端口不可达,或者某个 BE 地址在这台客户端上路由不到——见上面的代理设置。 |
flight sql handshake: <e> |
Flight 服务拒绝了这组凭据。 |
cannot reach server: <io error> |
MySQL 路径:主机、端口或网络。FE 端口是 9030。 |
server rejected SQL (<code>): <message> |
Doris 拒了编译出的语句。 |
参考链接¶
- 官网:https://doris.apache.org/
- 连接配置:连接数据库、Arrow Flight SQL 连接
- 同一个适配器:StarRocks · MySQL · TiDB
- Arrow · 连接配置