概述使用全局扩充功能进行扩充时,需要通过字典或表结构进行扩充。参考建字典建表数据富集各种富集方式的比较。本文介绍使用资源函数res_log_logstore_pull从其他logstore拉取数据进行丰富的详细实践。res_log_logstore_pull的参数说明可以参考这里。该语法目前支持两种模式从logstore中拉取数据,一种是在指定时间间隔内拉取logstore的数据内容,另一种是不设置结束时间,持续拉取目标logstore的内容背景这里我们有两个logstore,一个是存放个人信息的source_logstore,一个是酒店存放客人入住信息的target_logstore。现在我们利用酒店的入住信息来充实。注意:这里使用pull_log接口拉取数据,丰富的logstore不依赖索引。个人信息source_logstoretopic:xxxcity:xxxcid:12345name:makitopic:xxxcity:xxxcid:12346name:vickytopic:xxxcity:xxxcid:12347name:mary酒店入住信息logstoretime:1567038284status:checkincid:12345name:makiroom_number:1111time:1567038284:status:checkincid12346name:vickyroom_number:2222time:1567038500status:checkincid:12347name:maryroom_number:3333time:1567038500status:leavecid:12345name:makiroom_number:1111基础语言法res_log_logstore_pull(endpoint,ak_id,nproject,tolog_store=one,fields,toak_time=one,fieldsfetch_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的使用给出一些例子来演示场景一:获取指定时间内的所有数据注意:这里的时间是日志获取时间。DSL排列语法res_log_logstore_pull(...,["cid","name","room_number"],from_time=1567038284,to_time=1567038500)获取数据#这里我们的语法中,field填写cid,name三个字段,和room_number,并且指定时间范围的话,会得到这个时间范围内所有logstore数据的这三个字段的值cid:12345name:makiroom_number:1111cid:12346name:vickyroom_number:2222cid:12347name:maryroom_number:3333cid:12345name:makiroom_number:1111Scene2:设置黑白名单参数,过滤拉取的数据1.DSLlayoutsyntax(onlysetthewhitelist)#设置白名单,只有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的数据才会被拉下,其他data不会被拉动。status:检查incid:12345name:makiroom_number:1111status:leavecid:12345name:makiroom_number:11112.DSL排列语法(只设置了黑名单)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:checkincid:12346name:vickyroom_number:2222status:checkincid:12347name:maryroom_number:33333.DSL编程语法(同时设置黑白名单)res_log_logstore_pull(...,["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="status:leave",fetch_include_data="status:checkin")获取数据#当黑名单和黑名单同时存在时,匹配黑名单数据优先,这里我们填status:leave的值。当数据中包含status:leave的值时,数据会直接被丢弃,然后匹配白名单。在白名单中我们填写status:checkin当数据中包含status:checkin只有值为.status:checkincid:12345name:makiroom_number:1111status:checkincid:12346name:vickyroom_number时才会拉取数据:2222status:checkincid:12347name:maryroom_number:3333场景三:启用连续拉取目标logstore数据DSL编排语法如果目标logstore的数据不断写入,需要继续拉取,则将to_time参数设置为None。同时可以设置fetch_interval来设置fetch的间隔,refresh_interval_maxfetch遇到错误时退火和重试的最大时间间隔res_log_logstore_pull(...,["cid","name","room_number""status"],from_time=1567038284,to_time=None,fetch_interval=15,refresh_interval_max=60)#需要注意的是,在持续拉取过程中,如果遇到错误,服务器会一直退火重试,直到成功,并且不会停止数据处理流程场景四:启用主键维护拉取的目标logstore数据(暂不推荐)注意事项目前该功能仅限于logstore同一个shard下的所有数据,暂时不推荐使用该功能。背景以我们的个人信息logstore和酒店信息logstore的数据为例。因为logstore不同于数据库,logstore中的数据只能写入不能删除,所以有时候我们希望在匹配的时候不要处理删除的数据。匹配,则需要开启主键维护功能。需求演示现在我们要拉取酒店信息logstore,所有已经入住还没有离开的客人信息。当status=leave时,表示客人已经离开酒店,不需要拉取信息。DSL编程语法res_log_logstore_pull(...,["cid","name","room_number","status","time"],from_time=1567038284,to_time=None,primary_keys="cid",delete_data="status:leave获取的数据")##可以看到名字为maki的客人最后一次更新状态为leave,已经离开酒店,所以maki数据还没有拉下来,time:1567038284status:checkincid:12346name:vickyroom_number:2222time:1567038500status:checkincid:12347name:maryroom_number:3333需要注意的是primary_keys目前只支持设置单个字符串,需要在logstore数据中设置一个值唯一的字段,比如例子中的cid,类似于数据库的唯一主键,而且在设置primary_keys的时候,delete_data也一定不能为None,这样才有意义。进一步参考日志服务最佳实践总结(持续更新)完整的DSL语法介绍和参考PDF下载(持续更新)数据处理指南介绍:功能概述概念原理快速入门:快速入门(SLB日志处理实践)控制台操作源和目标AccessSecret关键配置作业诊断指南性能指南成本优化指南语法:DSL语法介绍查询字符串语法JMES语法介绍管理配置:子账号授权配置转载。
