使用资源函数增量获取数据

更新时间:
复制为 MD 格式

使用增量拉取模式获取数据时,日志服务每次只拉取新增或更新的数据,效率高。本文介绍如何使用res_rds_mysql函数增量获取RDS MySQL数据库中的数据。

操作视频

前提条件

  • 日志服务

    • 已上传数据到日志服务源LogStore中。具体操作,请参见数据采集

    • 已创建日志服务目标LogStore。具体操作,请参见创建基础LogStore

    • 如果您使用的是RAM用户,则需要先授予RAM用户数据加工操作权限。具体操作,请参见授权RAM用户操作数据加工

    • 已配置源LogStore和目标LogStore的索引。具体操作,请参见创建索引

      数据加工任务不依赖索引;但不配置索引,您无法执行查询和分析操作。

  • RDS

    • 已创建RDS数据库和账号。具体操作,请参见创建数据库和账号

    • 已上传数据到RDS MySQL数据库表。

    • 已配置RDS MySQL白名单。具体操作,请参见通过客户端、命令行连接RDS MySQL实例

      重要

      使用res_rds_mysql函数从RDS MySQL数据库中提取数据时,需先在RDS MySQL中配置白名单为0.0.0.0,使所有IP地址都可访问数据库。

背景信息

某科技公司将客户信息保存在云数据库RDS MySQL数据库中,将客户维护记录保存在日志服务的LogStore中,两种数据都在持续更新。现在该公司希望将两种数据JOIN后保存到一个新的LogStore中。

日志服务提供res_rds_mysql函数,可从RDS MySQL数据库中拉取数据,保存到目标LogStore中。增量拉取模式下,在加工任务运行过程中,日志服务根据数据库中的时间戳字段增量拉取数据,只拉取更新或新增的数据,效率高。适用于数据库中的数据量大、更新频繁、删除数据较少、数据加工实时性要求高的场景。

其他拉取模式以及增量拉取的更多信息,请参见res_rds_mysql

资源信息与数据示例

  • 日志服务资源

    • Project:client-project

    • LogStore:client-log

      数据样例包含以下字段:__tag__:__client_ip__(客户端 IP)、c_id(客户 ID)、staff_id(客服 ID)、status(跟进状态,如"持续跟进"、"跟进")、tag(客户标签,如"二次回访"、"客户高意向")。例如:记录 52 的字段值为 c_id:1staff_id:002status:持续跟进tag:二次回访;记录 53 的字段值为 c_id:1staff_id:001status:跟进tag:客户高意向

    • 目标LogStore:client-information

  • RDS资源

    • 数据库:client-db

    • 数据库表:client

      client表包含c_idnametelephoneupdate_timedelete_flag5个字段。3条示例记录分别为:c_id=1, name=maki, telephone=010-123;c_id=2, name=evan, telephone=010-156;c_id=3, name=vicky, telephone=010-166。update_time均为1606358931,delete_flag均为false。

    • 数据库用户名和密码:test/test1234@@

    • 数据库外网地址:rm-bp1k****tp8o.mysql.rds.aliyuncs.com

操作步骤

  1. 登录日志服务控制台

  2. 进入数据加工页面。

    1. Project列表中,单击目标Project(client-project)。

    2. 日志存储 > 日志库页签中,单击目标LogStore(client-log)。

    3. 在查询和分析页面,单击数据加工

  3. 在页面右上角,选择数据的时间范围。

    请确保在原始日志页签中有日志数据。

  4. 在编辑框中,输入数据加工语句。

    详细的参数说明,请参见res_rds_mysql

    e_table_map(
        res_rds_mysql(
            "rm-bp1k****tp8o.mysql.rds.aliyuncs.com",     
            "test",
            "test1234@@",
            "client-db",
            table="client",
            fields=["c_id", "name", "telephone", "update_time"],
            refresh_interval=1,
            primary_keys="c_id",
            update_time_key="update_time",
            deleted_flag_key=None,
        ),
        "c_id",
        ["name", "telephone"],
    )
  5. 快速预览数据。

    使用快速预览,确保加工语句填写正确。更多信息,请参见快速预览

    1. 单击快速

    2. 测试数据 > 数据页签中输入如下内容。

      {
        "__source__": "192.0.2.0",
        "__time__": 1624956516,
        "__topic__": "log",
        "__tag__:__client_ip__":"192.0.2.2",
        "c_id": "1",
        "staff_id": "002",
        "status": "持续跟进",
        "tag": "二次回访",
      }
    3. 测试数据 > 维表页签中输入如下内容。

      c_id,name,telephone,update_time,delete_flag
      1,maki,010-123,1606358931,false
    4. 单击预览数据

      查看预览结果。预览结果页面左侧展示解析后的数据,输出目标为 target0,解析出的字段包括 __source____tag____topic__c_idnamestaff_idstatustagtelephone 等客户信息字段。右侧 运行结果信息汇总 显示总数 1、成功 1、失败 0,表明数据加工规则运行正常。

  6. 高级预览数据。

    使用高级预览,确保日志服务连接RDS MySQL数据库成功。更多信息,请参见高级预览

    1. 单击高级

    2. 单击预览数据

    3. 添加预览配置面板中,配置授权方式,然后单击确定

      授权方式包括默认角色自定义角色密钥三种方式。选择默认角色时,角色ARN默认为 acs:ram::{账号ID}:role/aliyunlogetlrole

    4. 查看预览结果。

      预览结果页面右侧运行结果信息汇总面板显示源日志总数丢弃条数分发条数失败四项统计。确认分发条数与源日志总数一致且失败数为 0,表示加工规则运行正常。左侧日志输出列表可展开查看解析后的示例日志详情,包含 __source____topic__namestatus 等键值对字段。

      如果提示运行出错,请参见获取RDS MySQL数据语法错误

  7. 创建数据加工任务。

    1. 单击保存数据加工

    2. 创建数据加工任务面板中,配置相关信息,然后单击确定

      具体参数说明,请参见创建数据加工任务。配置项包括:规则名称(例如 rds-sls)、授权方式(可选默认角色自定义角色密钥)及角色ARN。在存储目标区域,配置目标名称(例如 rds)、目标Region(例如华东1(杭州))、目标Project(例如 client-project)、目标库(例如 client-information)及对应的授权方式角色ARN。如需投递到多个目标,可单击添加按钮增加存储目标。

      创建数据加工任务后,您可以在目标LogStore中查看已加工的日志。数据加工任务执行成功后,可在目标Logstore中查看加工后的日志记录,包含 c_idnamestaff_idstatustagtelephone 等结构化字段及对应值。

常见问题

如何使用增量更新模式中的删除功能?

增量更新模式下,日志服务会根据数据库表中的主键和时间,只拉取更新或新增的数据。如果您在数据库表中将某条数据标记为删除(例如delete_flag=true),日志服务依旧会拉取该数据继续加工。针对该情况时,日志服务在res_rds_mysql函数中新增了deleted_flag_key参数。在加工语句中配置deleted_flag_key参数后,加工任务在获取数据库表更新的数据后,会将读取到的delete_flagtrue的数据行从加工任务的内存维表中删除(不影响数据库表的内容)。在加工任务内存维表中被删除的数据行将不再参与后续与日志数据JOIN的操作。

重要
  • delete_flag设置为true1等值时,都表示删除。更多信息,请参见res_rds_mysql

  • 如果在加工语句中配置了deleted_flag_key参数,则还需配置update_time_key参数。

例如在RDS MySQL数据库表中新增两条数据(name=mia,name=tom),其中name=mia这条数据被标记为删除,即设置delete_flagtrue。则日志服务内存维表更新时,name=mia这条数据在维表中被删除,不会被加工。

image

加工语句示例如下:

e_table_map(
    res_rds_mysql(
        "rm-bp1****l3tp.mysql.rds.aliyuncs.com",     
        "test",
        "test1234@@",
        "client-db",
        table="client",
        fields=["c_id", "name", "telephone", "update_time"],
        refresh_interval=1,
        primary_keys="c_id",
        update_time_key="update_time",
        deleted_flag_key="delete_flag",
    ),
    "c_id",
    ["name", "telephone"],
)