Просмотр исходного кода

docs(kb): 00 §6.3 补 DataX ini 代码实现现状(ds_type 白名单 + RDBMS columnType 覆盖)

tianyu.chu 2 недель назад
Родитель
Сommit
eb87ace423
1 измененных файлов с 5 добавлено и 0 удалено
  1. 5 0
      kb/00-项目架构.md

+ 5 - 0
kb/00-项目架构.md

@@ -585,6 +585,11 @@ writeMode = truncate
 - `dataSource` 字段只写 `{db_type}/{instance}`,**不含环境**。环境由启动脚本的 `-env` 参数注入
 - 新项目推荐规范见 §6.4;老项目里 `dataSource = pg-hobby-prod` 这种把环境拼进字符串的写法是历史遗留,重构中统一改为上述新形式
 
+**⚠️ 当前代码实现现状(2026-04-20 实测,与上述目标态有差距,`datax-gc-generator` 重写时一并对齐)**:
+
+1. **`dataSource` 前缀必须用数据源全名**,`dw_base/datax/plugins/plugin_factory.py:33` 按 `-` 拆取第 0 段作为 ds_type,与 `plugin_factory.py` 的类型白名单比对。白名单仅 8 个全名:`postgresql` / `mysql` / `clickhouse` / `hdfs` / `hbase` / `kafka` / `mongo` / `elasticsearch`。`pg-xxx` / `ch-xxx` / `mq-xxx` 这种简写**当前会报 `DataSource type pg ... is not supported yet`**;上面样例里写 `dataSource = pg/hobby` 是目标态,当前代码未支持(`split('-')` 逻辑 + `/` 路径推导都要跟着 §6.4 改)。
+2. **RDBMS reader 的 `columnType` 当前被完全忽略**:`PostgreSQLReader.load_column`(`postgresql_reader.py:74-76`)、`MySQLReader`、`ClickHouseReader` 都覆盖了基类 `Plugin.load_column`,只读 `column`(字段名列表),`columnType` 不解析;类型靠 JDBC 驱动的 `ResultSetMetaData` 返回。对应的 writer 同样只读 `column`。**只有 HDFS/HBase/Kafka 这类读写文件/非关系型存储的插件**走基类 `Plugin.load_column`(`plugin.py:63-118`),此时 `columnType` 才生效,且字符串字段可省略(基类默认类型是 `string`,见 `plugin.py:77`)。这一条与 kb/20 §8.1 raw 层"DataX ini 不写类型映射"的约定方向一致,但底层机制是上游代码覆盖掉了,不是约定的结果。
+
 **增量/全量区分:**
 - `dt=19700101` 或 `query={}` → 全量
 - `query` 中含 `${start_date}`/`${stop_date}` → 增量