表格存储触发java runtime的函数计算处理示例教程

前言

函数计算(Function Compute)是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Table Store Stream是用于获取Table Store表中增量数据的一个数据通道,通过创建Table Store触发器,能够实现Table Store Stream和函数计算的自动对接,从而实现表格存储中的表数据发生变更时候定制化的自动处理。具体可以查看表格存储触发函数计算官方教程,但是该官方教程只有python版的代码示例,本教程展示java版的代码示例。

具体过程
表格存储传给函数event参数是cbor格式,格式如下:
{
    "Version": "string",
    "Records": [
        {
            "Type": "string",
            "Info": {
                "Timestamp": int64
            },
            "PrimaryKey": [
                {
                    "ColumnName": "string",
                    "Value": formated_value
                }
            ],
            "Columns": [
                {
                    "Type": "string",
                    "ColumnName": "string",
                    "Value": formated_value,
                    "Timestamp": int64
                }
            ]
        }
    ]
}

1, 参考函数计算java runtime教程, 创建一个java8 runtime的函数, 本教程使用的是jackson库, 其中有关cbor处理;

注意:所依赖的第三方包也要一并打包进来,参考java 函数计算使用自定义包

下面展示是相关配置和代码:

<dependencies>
        <dependency>
            <groupId>com.aliyun.fc.runtime</groupId>
            <artifactId>fc-java-core</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-cbor</artifactId>
            <version>2.8.8</version>
        </dependency>
</dependencies>
package example;
import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.Credentials;
import com.aliyun.fc.runtime.StreamRequestHandler;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.dataformat.cbor.CBORFactory;
import com.fasterxml.jackson.databind.JsonNode;


public class HelloFC implements StreamRequestHandler {
    @Override
    public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context)
            throws IOException {

        CBORFactory f = new CBORFactory();
        ObjectMapper mapper = new ObjectMapper(f);
        mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

        JsonNode node = mapper.readTree(inputStream);
        System.out.println("Version: " + node.get("Version"));

        JsonNode records = node.get("Records");

        if (records.isArray())
        {
            for (JsonNode record : records)
            {

                System.out.println("Type: " + record.get("Type"));

                JsonNode Info = record.get("Info");
                System.out.println("Timestamp: " + Info.get("Timestamp"));

                JsonNode PrimaryKey = record.get("PrimaryKey");
                if (PrimaryKey.isArray())
                {
                    for (JsonNode objNode : PrimaryKey)
                    {
                        System.out.println(objNode.get("ColumnName") + ": " + objNode.get("Value"));
                    }
                }

                JsonNode Columns = record.get("Columns");
                if (Columns.isArray())
                {
                    for (JsonNode objNode : Columns)
                    {
                        System.out.println(objNode.get("Type") + "  " + objNode.get("ColumnName") + ": " + objNode.get("Value") + "  >>" + objNode.get("Timestamp"));
                    }
                }
            }
        }

        outputStream.write(new String("ok").getBytes());
    }

2, 参考表格存储触发函数计算官方教程 创建对应的ots实例和表,并且配置该表的触发器是一个1中创建的函数,最后效果如下图所示:

image

3,使用表格存储客户端或者表格存储操作表代码往对应的表中进行数据操作;
本人最后显示效果如下:

需要配置函数的service日志能写入logstore,具体参考函数计算访问日志服务

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值