华为云 DWS 连接器¶
GaussDB(DWS) 是源自 PostgreSQL 的分布式数仓。Dosi 用标准 PostgreSQL 线协议驱动连接它;它不是 gaussdb 连接器,后者的私有 SHA256 认证需要另一套驱动。
DWS 最关键的特性是 pg_database.datcompatibility。每个数据库分别属于 ORA、TD 或 MYSQL 模式,这个值会影响 SQL 语义。因此 Dosi 会先从实际连接的数据库解析模式,再编译 SQL,并把模式保留在编译结果中直到执行。
连接配置¶
datasources:
warehouse-td:
type: dws
host: ${DWS_HOST}
port: 8000
database: ${DWS_DATABASE_TD}
username: ${DWS_USERNAME}
password: ${DWS_PASSWORD}
schema: public
sslmode: verify-full
sslrootcert: /etc/ssl/certs/dws-ca.pem
compat_mode: TD
| 配置项 | 类型 | 必填 | 默认值 | 含义 |
|---|---|---|---|---|
host |
string | 是,除非配置 uri |
— | DWS Endpoint。 |
port |
int | 否 | 8000 |
使用离散字段配置时的 DWS 服务端口。 |
database |
string | 是 | — | 要探测兼容模式的数据库。 |
username / password |
string | 通常是 | — | PostgreSQL 线协议凭据,支持环境变量展开。 |
schema |
string | 否 | public |
会话的 search_path。 |
sslmode / sslrootcert |
string | 否 | prefer / 无 |
与 PostgreSQL 相同的 TLS 级别;校验模式必须提供 CA。 |
compat_mode |
ORA、TD 或 MYSQL |
否 | 自动探测 | 可选断言;与数据库不一致时会在编译前失败。 |
uri |
string | 二选一 | — | 完整的 postgres://...:8000/... URI,需要包含端口;compat_mode 仍单独配置。 |
不要在运行时复用一个 profile 再切换 database。每个数据库使用一个具名 profile;成功探测到的模式只缓存在该 profile 内,因此 TD 数据库不会污染 ORA 数据库的编译上下文。
兼容模式¶
Dosi 会通过所选连接执行下面这条原样查询:
值未知或不可读都会直接失败。按 dws_ora、dws_td 或 dws_mysql 编译的 SQL,只允许交给解析出相同模式的执行器。目前三个模式共用 PostgreSQL 兼容的 renderer,但模式已经成为显式编译输入;后续增加经过验证的模式专属 lowering 时,不需要再改 API,也不会发生跨数据库复用。
不连接数据库、只编译 SQL 时,必须显式给出模式:
执行时应使用具名 profile,让 Dosi 从实际数据库探测模式:
验证¶
声明式 corpus 与其他数仓共用模型、seed、查询和期望结果。DWS 有三个独立执行目标:dws_ora、dws_td、dws_mysql。每个目标分别维护 epoch、SQL gold、receipt 和云测试任务,因此一个模式通过不会被当作另外两个模式也已支持。
为兼容 DWS 8.2.1,corpus 初始化不会使用 CREATE SCHEMA IF NOT EXISTS
(该语法从 DWS 9.1 才开始支持)。corpus fixture 中的物理表引用固定为
main.<table>,因此三个模式数据库都必须预先存在可写的 main schema。
云测试工作流固定设置 DWS_SCHEMA=main;testkit 会拒绝其他值,避免在一个
schema 初始化数据、却去另一个 schema 查询。这个约束只适用于 corpus,普通
DWS 连接 profile 仍可使用任意已存在的 schema。
相关内容¶
- PostgreSQL:线协议、TLS、连接池和行解码
- GaussDB / openGauss:使用私有认证的另一个连接器
- 数仓连接器:profile 查找顺序和公共配置项