-
Notifications
You must be signed in to change notification settings - Fork 255
Transformers
Sun Jianbo edited this page Oct 25, 2017
·
24 revisions
Transformer是Parser的一个补充,它针对字段进行数据变换。
在大多数场景下,你可能用Parser就解决了全部问题,但是有些场合,你使用的Parser可能比较简单,如json parser,此时你发现数据里面有一部分字段你希望做一些扩展,比如有个ip字符串,你希望将其扩展为 ip 对应的区域、城市、省份、运营商等信息,此时你就可以配置一个Transformer,对IP字段进行转换。
再比如,当你希望做一些字符串替换的时候,你又不想写一个Parser,只希望对某个字段做一个字符串替换处理,那就可以写配置一个replace transformer。
Transform既可以在Parser前调用,也可以在Parser后调用。同样,也可以连着调用,调用顺序就是你在配置文件中配置的顺序。
一份带有 Transformer的配置如下:
{
"name":"test2.csv",
"reader":{
"log_path":"./tests/logdir",
"mode":"dir"
},
"parser":{
"name":"jsonps",
"type":"json"
},
"transforms":[{
"type":"replace",
"stage":"before_parser",
"old":"\\x",
"new":"\\\\x"
}],
"senders":[{
"name":"file_sender",
"sender_type":"file",
"file_send_path":"./test2/test2_csv_file.txt"
}]
}
可以看到,在reader、parser 和 sender 同级别下面,增加一个 transforms 字段,对应的就是不同transformer对应的列表。
type
字段是固定的,每个Transformer都有,表示Transformer的类型名称,其他字段则根据Transformer表达的转换行为各不相同。可以参见每个Transformer的介绍页。
目前支持的Transformer有:
- replace transformer : 针对字段做字符串替换。
- IP transformer: 针对ip做运营商信息字段扩展。
- date transformer: 将字段解析为时间并做一些转换。
- discard transformer: 将指定字段的数据抛弃。
- split transformer: 将指定字段的数据切分为字符串数组。
- convert transformer: 按照dsl将数据进行格式转换。
// 注意: transform的规则是,出错要把数据原样返回
type Transformer interface {
Description() string
SampleConfig() string
ConfigOptions() []utils.Option
Type() string
Transform([]sender.Data) ([]sender.Data, error)
RawTransform([]string) ([]string, error)
Stage() string
Stats() utils.StatsInfo
}
快速开始 | Pandora | Readers | Parsers | Senders | Download | 七牛智能日志管理平台 | logkit-pro专业版