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

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

表达式评估器组件

StreamSet Expression Evaluator执行计算并将结果写入新字段或现有字段。您还可以使用Expression Evaluator添加或修改记录标题属性和字段属性。
要创建表达式,请定义字段名称,记录标题属性或字段属性以接收表达式的结果,然后,使用表达式语言定义要使用的表达式。
您可以在表达式中使用运行时参数。

表达式评估器修改范围

  1. 可以增加或修改字段
  2. 可以增加或修改记录头属性
  3. 可以增加或修改字段属性
    字段名使用 / 开头,属性名不需要 /开头。表达式以 ${ }包含限定,所有表达式都写在{}内。

表达式支持

表达式 基于 JSP 2.0语言。在表达式内可以使用常量、日期时间常量、字段名称、功能、运行时参数,属性等。
例如:

简单表达式 含义
${record:value(’/payment_type’) == ‘CRD’} 在流选择器中,此条件将支付类型为信用卡的记录路由到流
${record:value(’[3]/State’) == “MD”} 与上面相同,但是以列表格式记录
${record:errorCode()==“FIELD_MERGER_02”} 在错误管道中的流选择器中使用时,此条件将具有FIELD_MERGER_02错误的记录路由到更正错误的流。
${record:value("[20]/value") == “”} 在警报中使用时,在指定字段不包含任何数据时触发警报。
${record:type(’/ID’)=STRING} 在流选择器中,将ID为String的记录路由到包含字段类型转换器的分支,以将字段转换为数字数据类型。

if-then -else 使用三元符 ? :

${record:value('/gender')=='1'?'M':(record:value('/gender')=='2'?'F':'U')}

字符串操作:
替换空值为 unknown字符串

${record:valueOrDefault('/Payment', 'unknown')}

数字操作
${record:value(’/total_amount’) - (record:value(’/tip_amount’) + record:value(’/tolls’) + record:value(’/mta_tax’))}

数据流的分流

当我们取得某个源的数据流时,有可能某些流记录不符合处理条件,则可以使用分流组件。分流组件可以增加条件,如果条件都不满足则走默认的流。
例如条件为:

${record:attribute('offset')=="null"}

从流组织数据到Json

可以结合表达式完成json数据的组织。例如下面:

{
 	"FileId": "${record:value('/FileId')}",
    "FileContent":"${record:value('/FileContent')}"
}

一个Demo

从ftp获取文件流内容,经过过滤后进行列名的组织,映射,然后组织为json数据发送给相关处理api,并把结果按照不同的条件发送给Redis和错误处理。
在这里插入图片描述

结论

表达式执行器提供了强大的控制功能,可以使用其完成复杂的逻辑转换甚至流程的功能,其与javascript执行器许多功能重合,相比而言,其使用更为简单。


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


引用链接

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

猜你喜欢

转载自blog.csdn.net/webmote/article/details/84969244
今日推荐