天天看点

日志服务数据加工最佳实践: 从RDS-MySQL拉取数据做富化进一步参考

日志服务数据加工最佳实践: 从RDS-MySQL拉取数据做富化进一步参考

概述

使用

全局富化函数

做富化时, 需要传递一个字典或者

表格结构

做富化. 参考

构建字典与表格做数据富化

的各种途径比较.

本篇介绍从使用资源函数

res_rds_mysql

从RDS-MySQL拉取数据的做富化的详细实践.关于

res_rds_mysql

的参数说明, 参考

这里

.

背景

这里我们在RDS中存放用户信息表格

userinfo

.

原始数据库表中内容:

id province city uid
1 jiangsu nanjing 01234
2 henan zhengzhou 01235
3 heilongjiang haerbin 01236
4 yantai 01237

场景1:定期刷新拉取所有

富化数据如果定期会全量刷新时, 希望数据加工任务能够自动定期去拉取, 可以如下配置:

res_rds_mysql(..., refresh_interval=300)           

上述语法会返回一个

, 并且会自动跟踪表格, 每隔5分钟重新拉取一遍mysql 表的内容并刷新这个表格内容。

场景2:拉取部分数据

如果仅仅使用RDS-MySQL中个别字段做富化, 推荐使用参数

table

,

sql

fields

来进行行或者列过滤. 这样可以降低

维表

大小, 增加富化效率.

如下进行列过滤, 值选择

city

uid

列, 两者效果没有任何区别.

res_rds_mysql(..., sql="select city, uid from userinfo")      # 列过滤
res_rds_mysql(..., table="userinfo", fields=["city", "uid"])    # 列过滤           

如下使用

sql

进行列与的行过滤, 选择所有

uid > 1234

的数据.

res_rds_mysql(..., sql="select * from userinfo where uid > 1234")   # 行过滤
res_rds_mysql(..., sql="select city, uid from userinfo where uid > 1234")   # 行列过滤           

场景3:拉取后再过滤数据

在使用参数

table

sql

fields

来进行行或者列过滤不能满足需求时, 可以进一步使用参数

fetch_exclude_data

和/或

fetch_include_data

来进行行过滤.

例如:

res_rds_mysql(..., fetch_include_data="uid==0123*")   # 保留所有uid以0123开头的数据
res_rds_mysql(..., fetch_exclude_data="uid < 1234")    # 去除所有uid小于1234的数据
res_rds_mysql(..., fetch_include_data="city:n", fetch_exclude_data="uid < 1234")            

参考以上注释了解两者区别, 注意到这里的这两个参数的格式都是

查询字符串

同时配置

fetch_exclude_data

fetch_include_data

, 会优先执行

fetch_exclude_data

语法,将不符合的数据剔除,然后在执行

fetch_include_data

语法,将符合的数据添加进来,fetch_exclude_data和fetch_exclude_data参数语法都是根据

e_search语法

,支持正则匹配,模糊匹配等多种方式,上述第三行语法含义为,拉取表中uid大于等于1234, 且以city包含字母n的所有数据做维表.

注意: 这种过滤是在拉取数据到本地后再进行过滤, 因此效率没有参数

table

sql

fields

过滤高.

场景4:调整返回表格结构

默认返回的表格列名与RDS-MySQL中的表格结构一致, 如果需要调整, 例如将

province

字段编程

prov

等, 可以使用如下方法:

res_rds_mysql(..., sql="select id, uid, province as prov, city from userinfo")
res_rds_mysql(..., table="userinfo", fields=["id", "uid", ("province", "prov"), "city" ])           

两个方法是一样效果. 关于

fields

参数, 可以进一步参考

数据列列表

进一步参考

欢迎扫码加入官方钉钉群获得实时更新与阿里云工程师的及时直接的支持:

日志服务数据加工最佳实践: 从RDS-MySQL拉取数据做富化进一步参考