数据流中Derived Column Transformation搭配Cache Sink无法使用如何解决
报错根因分析
报错信息:Function 'outputs' applies to only sink transformation with right saveOrder
这个报错出现在映射数据流场景中,核心原因是outputs()函数的使用场景不符合要求:该函数仅支持在配置了正确saveOrder(保存顺序)的Sink转换中调用,在Derived Column(派生列)等非Sink转换中调用,或者Cached Sink未配置正确的saveOrder参数时都会触发报错。
具体解决步骤
- 检查派生列转换的表达式:删除你在派生列中错误写入的
outputs()相关逻辑,写入Cached Sink前的预处理直接操作当前数据流的字段即可,不需要调用Sink专属函数。 - 调整数据流节点执行顺序:所有预处理操作(包括派生列、过滤、Join等转换)都需要放在Cached Sink的上游,完成所有数据处理后再接入Cached Sink节点,不要颠倒顺序。
- 配置Cached Sink的
saveOrder参数:打开Cached Sink的设置面板,找到saveOrder配置项,单缓存Sink直接赋值为1即可;如果存在多个Sink,按你需要的执行顺序从小到大设置整数值即可。 - 若后续节点需要引用Cached Sink的输出:必须在Sink节点之后的转换逻辑中调用,调用格式为
你的缓存Sink名称#outputs(),不要在预处理阶段调用。
验证操作
调整完成后先运行数据流的调试模式,分别查看派生列转换的输出、Cached Sink的输出是否符合预期,再执行全量作业确认报错完全消除。
内容的提问来源于stack exchange,提问作者qudsif
相关产品推荐
相关产品推荐

