数据集成
1、配置数据源时选择了阿里云子账号,运行任务时实际使用的是哪个 AK/SK
答:产品不会使用永久性的 AccessKey(AK/SecretKey)。在任务运行时,系统会为每次任务动态生成临时的 AK/SK。这些临时凭证具有最小化权限,并在任务完成后失效,确保数据访问的安全性与可审计性。
2、MongoDB Reader读取数据的时候报错。Exception when job run com.mongodb.MongoSocketReadException: Prematurely reached end of stream
答:用户MongoDB实例正常,DataWorks中MongoDB数据源网络联通正常。这个报错看起来是MongoDB 客户端在读取响应时,连接被意外中断,提前到达了流的末尾。可以按照以下步骤检查。
(1)检查Mongo和DataWorks是否是相同的region,是公网还是vpc网络。
(2)调整MongoDB连接串的超时时间。
(3)以上检查都没有问题。可以尝试设置参数useSplitVector: false。
参数说明
useSplitVector: true 会触发MongoDB分片操作,可能导致连接中断。临时关闭此功能以稳定连接。
3、数据集成Polardb到MaxCompute一键创建目标表的时候,源端datetime类型被自动映射成了timestamp类型。
答:写MaxCompute,一键创建目标表datetime类型映射和MaxCompute数据类型2.0有关。如果用户项目配置的数据类型是1.0,则datetime会正常映射成datetime类型,如果用户项目配置的数据类型是2.0,则datetime会正常映射成timestamp类型。timestamp是新2.0类型,精度高,承载的数据范围大于等于datetime。
可以检查一下用户项目级别的参数odps.sql.type.system.odps2值。
遇到此类问题建议用户手动在一键建表的地方修改下数据类型, 或者考虑使用odps sql节点先自主创建表。不建议轻易去调整项目级别的odps.sql.type.system.odps2参数去解决此问题。在不修改项目级别类型参数的情况下,若要调整默认的映射关系。请提工单咨询。
4、数据源查看关联任务的入口是哪里。
答:DataWorks数据源入口有两个,第一个是通过工作空间管理入口进去查看数据源列表,这里的数据源没有查看关联任务的按钮。第二个是通过数据集成入口进去,这里数据源有查看关联任务的方式。仅限于数据集成的同步任务。引擎类的计算任务(如:holo sql)不包含在内。
5、ES Reader 报 String cannot be cast to Map
报错堆栈关键行
at com.alibaba.datax.plugin.reader.elasticsearchreader.Key.getSort(Key.java:182) at com.alibaba.datax.common.util.Configuration.getMap(Configuration.java:502) java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.Map
根因:ES Reader 的 sort 参数被配置成字符串(如 "sort": "msgtime"),但 Reader 内部用 Configuration.getMap("sort") 解析,期望的是 Map 对象。
答:
任选其一:
| 方案 | 写法 | 适用场景 |
| A. 改成 Map | "sort": { "msgtime": { "order": "asc" } } |
确实需要按字段排序 |
| B. 删掉 sort(推荐) | 整行删除 | 已有 range 时间过滤,离线同步不依赖排序 |
重要澄清:官方文档某段示例里 "sort":["IXgdO4MB4GR_1DmrjTXP"] 是 ES _search 接口返回数据的字段,不是 Reader 配置项,不要照抄。
6、ESReader 报 JSONObject cannot be cast to String(search 字段)
报错堆栈关键行
at com.alibaba.datax.plugin.reader.elasticsearchreader.ESReaderUtil.initQueryData(ESReaderUtil.java:331) java.lang.ClassCastException: class com.alibaba.fastjson.JSONObject cannot be cast to class java.lang.String
根因search 参数虽然官方文档里展示成嵌套对象示例,但实际底层用 getString() 解析,必须传转义后的 JSON 字符串。
错误写法
"search": { "bool": { "filter": [ { "range": { "msgtime": { "gte": "...", "lt": "..." } } } ] } }
正确写法
"search": "{\"bool\":{\"filter\":[{\"range\":{\"msgtime\":{\"gte\":\"${bizdate}\",\"lt\":\"${bizdate}\"}}}]}}"
答:
- 整段 query body 外面包一对 "
- 内部所有 " 转义为 \"
- 验证方法:runtime config 里 search 必须呈现为字符串字面量而非嵌套对象
7、ESReader 报 JSONObject cannot be cast to String(column 字段)
根因 ES Reader 的 column 必须是字符串数组,不是对象数组。这跟 ES Writer 不同,Writer 才用 [{"name":..,"type":..}]。
错误写法
"column": [ { "name": "text.content", "type": "text" }, { "name": "msgtime", "type": "long" } ]
正确写法
"column": [ "text.content", "msgtime" ]
数据类型由 ES mapping 自动决定,Reader 不需要也不能再声明 type。
8、ESReader 报 The data column xxx is not defined in _mapping
报错堆栈关键行
ESReader-10: The data column text.content is not defined in _mapping {...} at ESReaderUtil.transportOneRecord(ESReaderUtil.java:723)
根因
需要读取 OBJECT/NESTED 嵌套对象字段下的子属性(如 text.content),但 ES Reader 默认按平铺 mapping 严格校验,找不到 parent.child 这种路径。
解决方案
在 reader parameter 里增加 multi 配置(必须脚本模式,向导模式不支持):
"multi": { "multi": true }
支持的路径形式:
- 属性
- 属性.子属性
- 属性[0].子属性
文档参数表里 multi 那行只是引用,详细配置在「Elasticsearch 数据源 → 高级功能 → 场景二:嵌套或对象字段属性同步」章节。
9、
数据质量
智能监控/基线
1、基线预计完成时间怎么理解
平台根据基线任务历史一段时间内(通常统计范围为10天)的平均完成时间计算基线的预计完成时间,若预计完成时间晚于基线预警时间,平台会触发基线报警。尽管实际任务未超时,但系统预判任务可能无法按时完成从而发出预警。
2、为什么GetBaselineKeyPath接口获取的任务预计结束时间EndCast在预计开始时间BeginCast之前。
答:此处设计上是任务运行的时候会去改这个预计结束时间,运行前按预期开始时间来了, 任务实例运行之后就变成了 运行开始时间+预期执行时间。实例运行的时候预期开始时间不会更新,所以就出现了预期结束时间比预期开始时间早的情况了。
换句话说就是一旦实例进入运行态,EndCast计算就会使用 begtime 而不是 BeginCast 了,所以 BeginCast > EndCast 是有可能的。想拿到预计时间,需要根据实例状态,在abstime不为0的时候,用 abstime - begtime 才是预测值
DataWorks规则管理中的“节点成环报警”和“节点孤立报警”是全局默认规则,适用于所有任务节点。根据当前文档说明,这些默认规则支持在规则管理页面对每条规则执行“关闭”操作,但未明确说明是否可针对特定工作空间单独关闭。建议您在目标工作空间的运维中心 > 规则管理中尝试操作,或确认该功能是否受DataWorks版本限制(如企业版支持更细粒度控制)。