数据对接-ETL之StreamSet学习之旅三

本篇文章是StreamSet的进阶篇,主要讲述其Js脚本评估器的用法。

目标

在这里插入图片描述
本次的目标是,对文本文件进行解析,读取的文本文件已经按 回车换行分隔成Records数组,我们要做的是,按照固定长度对Records的内容进行解析,拆分成一个json对象。
因为拆分字符串比较复杂,因此,首先是使用脚本解析。

JavaScript Evaluator

其介绍如下:配置js脚本用作管道
其有两种模式:

  • Record by Record - 分开处理单个记录,并记录错误.
  • Batch by Batch - 批量处理记录集. 并返回错误集
    默认是 Batch by Batch模式。
    可以写脚本的时机有 Init Script,Script,Destroy Script.
    本次处理仅需要在Script时机内写脚本,脚本要按照定义输出:
var rds = [];

// 跳过首行
var lens = [20,22,12,8,24,66,25,19,14,27,10];
for(var i = 1; i < records.length; i++) {
  try {
    var obj = [];
    var text = records[i].value['text'] || '';
    text = text.trim();
    var nIndex = 0;    
    for( var j in lens){
      var s = text.substring(nIndex,nIndex + lens[j]) || '';
      s = s.trim();
      obj.push(s);
      nIndex += lens[j];
    }
    records[i].value.text = obj;
    output.write(records[i]);      
  } catch (e) {
    // Send record to error
    error.write(records[0], e);
  }
}

这里存在的坑是 Record对象不是简单的对象,一定要使用旧的,或者调用

sdcFunctions.createRecord(String recordId)

建立一个新的记录对象,否则执行会抛出转换错误的异常。

结论

javascript 执行器提供了强大的脚本注入功能,可以使用其完成复杂的转换甚至验证功能。


在此我向大家推荐一个微服务架构学习交流群。交流学习QQ群号:864759589 里面会分享一些资深架构师录制的视频录像:高并发、高性能、分布式、微服务架构的原理,分布式架构等这些成为架构师必备的知识体系。
在这里插入图片描述


引用链接

  1. 口袋代码仓库
  2. 在线计算器
  3. 本节源码:github

猜你喜欢

转载自blog.csdn.net/webmote/article/details/84872473