跳转至

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:

    arrow_flight_port: 8070  # FE 的 arrow_flight_sql_port

参数

类型 必填 默认 说明
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 连接配置

本连接器解析但不使用的键: sslmodesslrootcertschemacatalogaccountrolewarehousecompat_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 拒了编译出的语句。

参考链接