使用全局富化函数作富化时, 须要传递一个字典或者表格结构作富化. 参考构建字典与表格作数据富化的各类途径比较.
本篇介绍从使用资源函数res_log_logstore_pull
从其余logstore拉取数据的作富化的详细实践.关于res_log_logstore_pull
的参数说明, 参考这里. 该语法目前支持两种模式去logstore拉取数据,一种是拉取指定时间间隔内的logstore 的数据内容,另一种是不设置结束时间,持续的拉取目标logstore内容数据库
这里咱们有两个logstore,一个是存储我的信息的source_logstore,一个是酒店存储客人入住信息的target_logstore ,咱们如今将酒店的入住信息拿来作富化。
注意: 这里采用pull_log接口拉取数据, 富化的logstore并不依赖索引.服务器
我的信息 source_logstore函数
topic:xxx city:xxx cid:12345 name:maki topic:xxx city:xxx cid:12346 name:vicky topic:xxx city:xxx cid:12347 name:mary
酒店入住信息logstorefetch
time:1567038284 status:check in cid:12345 name:maki room_number:1111 time:1567038284 status:check in cid:12346 name:vicky room_number:2222 time:1567038500 status:check in cid:12347 name:mary room_number:3333 time:1567038500 status:leave cid:12345 name:maki room_number:1111
基本语法spa
res_log_logstore_pull( endpoint, ak_id, ak_secret, project, logstore, fields, from_time=None, to_time=None, fetch_include_data=None, fetch_exclude_data=None, primary_keys=None, delete_data=None, refresh_interval_max=60, fetch_interval=2):
具体的参数说明请参考res_log_logstore_pull,须要注意的地方是,res_log_logstore_pull 是一个单独的语法,只负责从目标logstore 拉取数据下来,自己本身并无作任何富化的操做,因此请不要单独使用res_log_logstore_pull语法,结合e_table_map和e_search_table_map语句一块儿使用才是有意义的,本篇也会结合e_table_map和e_search_map_table的使用给出一些例子进行演示。日志
注意: 这里的时间是日志获取时间.code
res_log_logstore_pull(..., ["cid","name","room_number"],from_time=1567038284,to_time=1567038500)
#这里咱们的语法中 field 填入了 cid,name,room_number 三个字段,,而且指定了时间范围,将会获取这个时间范围内的logstore的全部数据的这三个字段的值 cid:12345 name:maki room_number:1111 cid:12346 name:vicky room_number:2222 cid:12347 name:mary room_number:3333 cid:12345 name:maki room_number:1111
# 设置白名单,只有 room_number 值等于 1111的的数据会被拉去下来 res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_include_data="room_number:1111")
# 设置了 ferch_include_data 白名单,只有包含 room_numver:1111的数据会被拉去下来,其余数据不会被拉取。 status: check in cid:12345 name:maki room_number:1111 status:leave cid:12345 name:maki room_number:1111
res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="room_number:1111")
# 设置黑名单 fetch_exclude_data 当数据包含 room_number:1111的时候丢弃这条数据。 status:check in cid:12346 name:vicky room_number:2222 status:check in cid:12347 name:mary room_number:3333
res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="status:leave",fetch_include_data="status:check in")
# 黑白名单同时存在的状况下,优先进行黑名单数据的匹配,这里咱们填入的是 status:leave的值,当数据包含status:leave的值时候,数据会被直接丢弃,然后匹配白名单,白名单咱们填入的是 status:check in 当数据包含 status: check in 的值时候,该数据才会被拉取下来. status:check in cid:12345 name:maki room_number:1111 status:check in cid:12346 name:vicky room_number:2222 status:check in cid:12347 name:mary room_number:3333
若是目标logstore 的数据是持续写入,咱们须要持续的去拉取时候,设置 to_time 参数为None 就能够,同时能够设置fetch_interval 设置拉取的时间间隔,和refresh_interval_max 当拉取遇到错误的时候退火重试的最大时间间隔索引
res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=None,fetch_interval=15,refresh_interval_max=60) # 须要注意的是,在持续拉取的过程当中,若是遇到错误,服务器会一直退火重试,直到成功为止,不会中止数据加工进程。
目前该功能仅限使用全部数据存储在logstore的同一个shard中,因此暂时不推荐使用该功能。接口
以咱们的我的信息logstore 和 酒店信息logstore的数据进行举例,由于logstore和数据库不一样,logstore中的数据只能写入,没法删除,因此有的时候咱们但愿匹配的时候将已经删除的数据不要进行匹配,这时候就须要开启主键维护功能。进程
如今咱们想拉取酒店信息logstore中,全部入住尚未离开的客人信息,当status=leave的时候,表示客人已经离开酒店,因此不须要将该信息进行拉取。
res_log_logstore_pull(..., ["cid","name","room_number","status","time"],from_time=1567038284,to_time=None,primary_keys="cid",delete_data="status:leave")
## 能够看到 name为maki 的客人的最后更新status为leave ,已经离开酒店,因此并无将 maki的数据拉取下来, time:1567038284 status:check in cid:12346 name:vicky room_number:2222 time:1567038500 status:check in cid:12347 name:mary room_number:3333
须要注意的是 primary_keys 目前只支持设置单字符串,这个须要设置logstore数据中 值为惟一的字段,好比样例中的cid , 相似数据库的惟一主键,而且当设置primary_keys的时候,delete_data 也必须不为 None,这样才有意义。
原文连接 本文为云栖社区原创内容,未经容许不得转载。