跳转至

并行拉取配置说明

在数据源加速刷新时,可以开启并行拉取来加速大表抽取。需要配置两个参数:分批字段分批数量

参数含义

  • 分批字段(**partitionColumn**:按哪一列把数据切开。填列名即可,推荐选带索引的数值或日期列(如主键 id、创建时间 create_time)。

  • 分批数量(**numPartitions**:把表切成几份并行拉取,也就是并发度。填 4 表示 4 个线程同时拉,不是每批 4 条数据

配置示例

拉取订单表 ordersid 范围 1 ~ 1,000,000):

  • 分批字段 = id

  • 分批数量 = 4

系统会自动切成 4 条 SQL 并发执行:

分区 SQL
1 SELECT * FROM orders WHERE id >= 1 AND id < 250001
2 SELECT * FROM orders WHERE id >= 250001 AND id < 500001
3 SELECT * FROM orders WHERE id >= 500001 AND id < 750001
4 SELECT * FROM orders WHERE id >= 750001 AND id <= 1000000

每条拉 25 万行,最后合并返回。

分批字段支持的类型

只支持数值日期两大类:

类别 支持的类型
数值 INTEGERBIGINTFLOATDOUBLEDECIMAL
日期 DATETIMESTAMP

为什么不支持文本(text/varchar)

Spark 按范围切分需要字段「能排序、能定上下界、能下推」,文本三样都不稳:

  • 字典序 ≠ 业务序'10' < '2''2024-1-1' < '2024-10-1',切出来的批次数据分布不可控

  • 无法确定上下界:Spark 拿不到有意义的 min/max,算不出均匀的切片边界

  • 谓词下推失效:text 上的 range 条件在源端走不动索引,分批反而比不分批更慢

如果客户表字段全是 text 怎么办

按成本从低到高:

  1. 找事实上的时序字段:text 里有没有 '2024-04-21 10:30:00' 这种规整内容 → 有就用派生列/视图 CAST 成 TIMESTAMP 再做分批字段

  2. 入仓 ETL 洗一道:加工链路里把关键列转成正确类型

  3. 都不行就别做增量:走全量覆盖,或按物理分区粒度刷新

  4. 根本解法:上 CDC(binlog / Debezium),绕开基于字段范围的切分

⚠️ 不要直接改 DWS 元数据里的类型标注——数据本身还是 text,Spark 执行时按字符串比较,结果会静默错数。要改就改数据本身(派生列 / 视图 / ETL),不要只改标注。