You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Hop Python脚本转换输出metrics字段为NULL如何解决

问题解决方法

核心原因

你的Python脚本最后生成了metrics JSON字符串,但没有将这个值赋值到Hop的行(row)对象中,后续的写入步骤无法读取到该字段,所以写入表时显示为NULL。

具体修复步骤

  • 在脚本末尾添加行赋值代码
    在metrics = json.dumps(metrics)之后,添加一行代码,将JSON字符串写入Hop行的指定字段(比如你要写入表的metrics字段):

    # 假设目标字段名为metrics,将值写入row对象
    row.setValue("metrics", metrics)
    

    如果你的目标字段名不是metrics,替换成实际的字段名称即可。

  • 确保Python脚本转换的输出字段配置正确
    打开Python脚本转换的配置界面,切换到字段标签页,确认已经添加了要输出的metrics字段(或你指定的字段名),字段类型设置为String(因为JSON是字符串格式);如果没有添加,点击添加按钮填写字段名和类型后保存配置。

  • 可选:处理无匹配的边界情况
    如果matches为空(即没有匹配到任何指标数据),当前代码生成的metrics只有hop_job键,可能不符合预期。可以添加判断避免空指标的情况:

    # 在循环结束后添加
    if ingest_nr not in metrics:
        metrics[ingest_nr] = 0
        metrics[written_nr] = 0
        metrics[error_nr] = 0
    

修复后的完整代码

import re
import json

metrics_regex = r'\d\d\d\d/\d\d/\d\d\s\d\d:\d\d:\d\d\s-\s.*\s-\sFinished processing\s\(I=(\d+),\s\w=\d+,\s\w=\d+,\s\w=(\d+),\s\w=\d+,\s\w=(\d+)\)'
matches = re.findall(metrics_regex, rowMeta.getString(row, 6))
ingest_nr = 'total_records_ingested'
written_nr = 'total_records_written' 
error_nr = 'total_errored_records'

metrics = {'hop_job': rowMeta.getString(row, 1)}
for match in matches:
    r_in, r_out, r_err = int(match[0]), int(match[1]), int(match[2])
    
    if len(metrics.keys()) == 1:
        metrics[ingest_nr] = r_in
        metrics[written_nr] = r_out
        metrics[error_nr] = r_err
    else:
        metrics[ingest_nr] += r_in
        metrics[written_nr] += r_out
        metrics[error_nr] += r_err

# 处理无匹配的情况,避免缺失指标字段
if ingest_nr not in metrics:
    metrics[ingest_nr] = 0
    metrics[written_nr] = 0
    metrics[error_nr] = 0

metrics = json.dumps(metrics)
# 将结果赋值到row对象的metrics字段,供后续步骤读取
row.setValue("metrics", metrics)

内容的提问来源于stack exchange,提问作者it2901

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:53:12