通过函数计算访问表格存储,对表格存储增量数据进行实时计算。
背景信息
函数计算(Function Compute)是一个事件驱动的服务,通过函数计算,无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而您只需根据实际代码运行所消耗的资源进行付费。更多信息,请参见什么是函数计算。Tablestore Stream是用于获取Tablestore表中增量数据的一个数据通道,通过创建Tablestore触发器,能够实现Stream和函数计算的自动对接,让计算函数中自定义的程序逻辑自动处理Tablestore表中发生的数据修改。
使用场景
如下图所示,使用函数计算可以实现如下任务。
- 数据同步:同步表格存储中的实时数据到数据缓存、搜索引擎或者其他数据库实例中。
- 数据归档:增量归档表格存储中的数据到OSS等做冷备份。
- 事件驱动:利用触发器触发函数调用IoT套件、云应用API或者做消息通知等。

准备工作
注意事项
请确保表格存储数据表与函数计算服务处于同一地域。
步骤一:为数据表开启Stream功能
使用触发器功能需要先在表格存储控制台开启数据表的Stream功能,才能在函数计算中处理写入表格存储中的增量数据。
- 登录表格存储控制台。
- 在概览页面,单击实例名称或在操作列单击实例管理。
- 在实例详情页签的数据表列表区域,单击数据表名称后选择实时消费通道页签或单击
后选择实时消费通道。
- 在实时消费通道页签,单击Stream信息对应的开启。
- 在开启Stream功能对话框,设置日志过期时长,单击开启。
日志过期时长取值为非零整数,单位为小时,最长时长为168小时。
说明 日志过期时长设置后不能修改,请谨慎设置。
步骤二:配置Tablestore触发器
在函数计算控制台创建Tablestore触发器来处理Tablestore数据表的实时数据流。
- 创建函数计算的服务。
- 创建函数计算的函数。 说明 系统支持使用标准Runtime从零创建、使用自定义运行时平滑迁移Web Server、使用容器镜像创建、使用模板创建等方式创建函数。此处以使用标准Runtime从零创建方式为例介绍,其他创建方式,请分别参见使用容器镜像创建函数和使用模板创建函数。
步骤三:验证测试
函数计算支持函数的在线调试功能,您可以构建触发的Event,并测试代码逻辑是否符合期望。
由于Tablestore触发函数服务的Event是CBOR格式,该数据格式是一种类似JSON的二进制格式,可以按照如下方法进行在线调试。
- 编写代码。
- 验证测试。
附录:数据处理
配置测试参数时,需要按照特定的数据格式设置事件内容。
- 数据格式
Tablestore触发器使用CBOR格式对增量数据进行编码构成函数计算的Event。增量数据的具体数据格式如下:
{ "Version": "string", "Records": [ { "Type": "string", "Info": { "Timestamp": int64 }, "PrimaryKey": [ { "ColumnName": "string", "Value": formated_value } ], "Columns": [ { "Type": "string", "ColumnName": "string", "Value": formated_value, "Timestamp": int64 } ] } ] }
- 成员定义
成员定义请参见下表。
参数 说明 Version payload版本号,目前为Sync-v1。类型为string。 Records 数据表中的增量数据行数组。包含如下内部成员: - Type:数据行类型,包含PutRow、UpdateRow和DeleteRow。类型为string。
- Info:包含Timestamp内部成员。Timestamp表示该行的最后修改UTC时间。类型为int64。
PrimaryKey 主键列数组。包含如下内部成员: - ColumnName:主键列名称。类型为string。
- Value:主键列内容。类型为formated_value,支持integer、string和blob。
Columns 属性列数组。包括如下内部成员: - Type:属性列类型,包含Put、DeleteOneVersion和DeleteAllVersions。类型为string。
- ColumnName:属性列名称。类型为string。
- Value:属性列内容。类型为formated_value,支持integer、boolean、double、string和blob。
- Timestamp:属性列最后修改UTC时间。类型为int64。
- 数据示例
{ "Version": "Sync-v1", "Records": [ { "Type": "PutRow", "Info": { "Timestamp": 1506416585740836 }, "PrimaryKey": [ { "ColumnName": "pk_0", "Value": 1506416585881590900 }, { "ColumnName": "pk_1", "Value": "2017-09-26 17:03:05.8815909 +0800 CST" }, { "ColumnName": "pk_2", "Value": 1506416585741000 } ], "Columns": [ { "Type": "Put", "ColumnName": "attr_0", "Value": "hello_table_store", "Timestamp": 1506416585741 }, { "Type": "Put", "ColumnName": "attr_1", "Value": 1506416585881590900, "Timestamp": 1506416585741 } ] } ] }
附录:使用已有函数计算创建Tablestore触发器
在表格存储控制台,使用已有函数计算的服务以及服务下的函数创建Tablestore触发器。
- 登录表格存储控制台。
- 在概览页面,单击实例名称或在操作列单击实例管理。
- 在实例详情页签的数据表列表区域,单击数据表名称。
- 在触发器管理页签,单击使用已有函数计算。
- 在创建触发器对话框,选择函数计算服务以及服务下的函数,并填写触发器名称,单击确定。