背景:morphline是一个轻量级的etl工具。除了提供标准化的方法之外,还可以定制化的开发java片段。定制化的java片段会在加载时被作为一个独立的类编译,对源数据作处理。

morphline关于java片段的例子,在配置文件上编写java代码太难了,尤其是在中文输入法下,可能逗号或者引号打错了也浑然不知。

java {
imports : "import java.util.*;"
code: """
// Update some custom metrics - see http://metrics.codahale.com/getting-started/
context.getMetricRegistry().counter("myMetrics.myCounter").inc(1);
context.getMetricRegistry().meter("myMetrics.myMeter").mark(1);
context.getMetricRegistry().histogram("myMetrics.myHistogram").update(100);
com.codahale.metrics.Timer.Context timerContext = context.getMetricRegistry().timer("myMetrics.myTimer").time(); // manipulate the contents of a record field
List tags = record.get("tags");
if (!tags.contains("hello")) {
return false;
}
tags.add("world"); logger.debug("tags: {} for record: {}", tags, record); // log to SLF4J
timerContext.stop(); // measure how much time the code block took
return child.process(record); // pass record to next command in chain
"""
}

在eclipse下开发代码也比较简单。定义一个如下的类,在test()方法里面开发代码段,需要import的包就在上面定义,这样就可以利用eclipse的编译功能来纠错了。然后把import段拷贝到morphline的import字段,把test()里面的内容拷贝到code:”””//[code] ”””里面。

package test;
import java.util.Collections;
import java.util.Iterator;
import org.kitesdk.morphline.api.Command;
import org.kitesdk.morphline.api.Record;
import org.kitesdk.morphline.base.Fields;
import com.fasterxml.jackson.databind.JsonNode; public class TestMain
{
Record record;
Command child; public boolean test()
{
JsonNode rootNode = (JsonNode) record.getFirstValue(Fields.ATTACHMENT_BODY);
JsonNode jsonNode = rootNode.get("tags");
if (jsonNode.isArray())
{
Iterator<JsonNode> tags = jsonNode.elements();
while (tags.hasNext())
{
JsonNode next = tags.next();
String name = next.get("name").asText();
JsonNode values = next.get("value");
for (JsonNode value : values)
{
record.put("custom_tag", name + "=" + value.asText());
}
}
}
return child.process(record);
}
}

最新文章

  1. CSS列表逆序
  2. JavaScript学习笔记-简单的欢迎cookie
  3. Makefile 自动化变量
  4. 如何使用代码动态的获取和设置ImageView的宽度和高度?
  5. redis 服务访问密码设定
  6. REST_FRAMEWORK加深记忆-第二次练习官方文档2
  7. ./configure: error: the HTTP rewrite module requires the PCRE library
  8. centos7后台服务部署jar包
  9. FineUIPro/Mvc/Core v5.4.0即将发布(Core基础版,新功能列表)!
  10. 十八、Linux 进程与信号---进程介绍
  11. linux服务之ntp与dns篇
  12. html5__Notifications API 桌面通知
  13. jQuery插件开发全解析[转]
  14. VS之解决方案文件夹
  15. hdu-1140(求距离,精度判断)
  16. springcloud入门系列(二):注册中心Eureka
  17. flask 安装
  18. leetcode136 Single Number
  19. 设置eclipse显示代码错误提示的
  20. 指纹识别人脸识别 iOS

热门文章

  1. Cesium原理篇:3最长的一帧之地形(2:高度图)
  2. Moon.Orm常见问题问答FAQ
  3. 7.5 数据注解特性--MaxLength&amp;&amp;MinLength
  4. 多说使用ua-parser-js显示浏览器和系统信息
  5. using 的三种用法
  6. 适配器模式 - Adapter
  7. 关于Java数组
  8. 【夯实PHP基础系列】linux下yum安装PHP APC
  9. MVC数据传递
  10. 无限级ddsmoothmenu菜单实例