完成Tablestore触发器创建后,您可以开始编写函数代码。本文介绍如何使用函数计算控制台编写函数。

前提条件

创建触发器

编写函数代码(Python)

  1. 登录函数计算控制台
  2. 在顶部菜单栏,选择地域。
  3. 在左侧导航栏,单击服务/函数
  4. 找到目标服务下的目标函数,单击函数名称。
  5. 单击代码执行页签,在代码编辑器中编写代码。
    本文以Python函数代码为例。 如果您想使用其他运行环境,代码示例请参见表格存储触发函数计算示例之 Nodejs/Php/Java/C# Runtime
    import logging
     import cbor
     import json
     def get_attribute_value(record, column):
         attrs = record[u'Columns']
         for x in attrs:
             if x[u'ColumnName'] == column:
                 return x['Value']
     def get_pk_value(record, column):
         attrs = record[u'PrimaryKey']
         for x in attrs:
             if x['ColumnName'] == column:
                 return x['Value']
     def handler(event, context):
         logger = logging.getLogger()
         logger.info("Begin to handle event")
         #records = cbor.loads(event)
         records = json.loads(event)
         for record in records['Records']:
             logger.info("Handle record: %s", record)
             pk_0 = get_pk_value(record, "pk_0")
             attr_0 = get_attribute_value(record, "attr_0")
         return 'OK'

event格式说明

表格存储触发器使用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:该行的最后修改UTC时间。类型为Int64。
    • PrimaryKey :主键列数组。
      • ColumnName :主键列名称。类型为String。
      • Value :主键列内容。类型为formated_value,支持Integer、String和Blob。
    • Colunms :属性列数组。
      • Type :属性列类型,包含Put、DeleteOneVersion和DeleteAllVersions。类型为String。
      • ColumnName :属性列名称。类型为String。
      • Value :属性列内容。类型为formated_value,支持Integer、Boolean、Double、String和Blob。详情
      • Timestamp :属性列最后修改UTC时间。类型为Int64。

event示例如下:

{
    "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
                }
            ]
        }
    ]
}

后续步骤

调试函数