
概述
使用全局富化函数做富化时, 需要传递一个字典或者表格结构做富化. 参考构建字典与表格做数据富化的各种途径比较.
本篇介绍从使用资源函数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 | jiangsu | 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参数, 可以进一步参考数据列列表
进一步参考
欢迎扫码加入官方钉钉群获得实时更新与阿里云工程师的及时直接的支持: 