使用 Flink SQL 访问 Tablestore 源表

    本文将介绍如何使用使用 Flink SQL 通过流处理的方式访问 Tablestore 源表。
在流计算场景下,用户可以基于通道服务,利用CDC(数据变更捕获)技术,通过 Flink 完成流式消费和计算。 Flink on Tablestore 可以提供 at-least-once 一致性语义。

Tablestore 简介

    Tablestore 启发自 Google 的 Bigtable 论文,从 2009 年开始,在阿里云的飞天团队内,开始孵化。经过 10 年的锤炼,如今在集团、公有云和专有云积累了各式各样的客户和场景。
    Tablestore 是一款 Serverless 云原生存储引擎,Serverless 相比实例售卖类型的产品,在业务有波峰波谷时天生就有较大的优势,基于 Bigtable 的主存储采用行的方式进行存储,可以支撑单表亿级别的 QPS。下面列了一些 Tablestore 的核心特性:
使用 Flink SQL 访问 Tablestore 源表

前置准备

    由于本文是 Flink SQL - Tablestore 使用系列的第一篇文章,将会有一些篇幅介绍Flink实时计算平台的申请与使用。以下是几个前置准备步骤:

    1. 购买 Flink 服务,步骤参见实时计算Flink版-产品文档,建议购买 Blink 独享集群(Flink 全托管 / 半托管暂不支持 Tablestore 源表)。如下图所示:

使用 Flink SQL 访问 Tablestore 源表
使用 Flink SQL 访问 Tablestore 源表

    2. 创建Flink集群以及项目,如下图所示:

使用 Flink SQL 访问 Tablestore 源表

快速开始

步骤一 创建 Tablestore 源表和数据通道

    1. 创建 Tablestore 源表

    Tablestore 的详细开通步骤请参考官方文档,本文demo中所创建出来的表名为 Demo, 其中,CellNumber、StartTime 作为数据表的主键,分别代表主叫号码和通话发生时间,CalledNumber、Duration 和 BaseStationNumber 三列为数据表的预定义列,分别代表被叫号码、通话时长和基站号码,数据示例如下图所示。

使用 Flink SQL 访问 Tablestore 源表

    2. 在主表上创建数据通道,如下图所示,通道列表里面会显示该通道的名字、ID 以及类型。其中,通道名会用于后续的流式处理。

使用 Flink SQL 访问 Tablestore 源表

步骤二 编写 Flink SQL 任务并启动

    1. 进入 Flink 项目开发平台,进行任务开发,如下图所示:

使用 Flink SQL 访问 Tablestore 源表

    2. 编写流任务

# 创建tablestore源表
CREATE TABLE Demo (
    CellNumber              VARCHAR,
    StartTime               BIGINT,
    BaseStationNumber       VARCHAR,
    CalledNumber            VARCHAR,
    Duration                BIGINT,
    OtsRecordType           VARCHAR header,
    OtsRecordTimestamp      BIGINT header,
    Duration_OtsColumnType  VARCHAR header
) WITH (
    type ='ots',
    endPoint ='https://instance_name.cn-hangzhou.vpc.tablestore.aliyuncs.com',
    instanceName = 'instance_name',
    tableName ='table_name',
    tunnelName = 'tunnel_name',
    accessId ='access_xxxxxx_id',
    accessKey ='access_xxxxxx_key',
    ignoreDelete = 'true'
);

# 创建print结果表(打印到taskmanager.out中)
CREATE TABLE print_sink (
    CellNumber              VARCHAR,
    StartTime               BIGINT,
    BaseStationNumber       VARCHAR,
    CalledNumber            VARCHAR,
    Duration                BIGINT,
    OtsRecordType           VARCHAR,
    OtsRecordTimestamp      BIGINT,
    Duration_OtsColumnType  VARCHAR
) WITH (
  type='print'
);

# 创建数据转换过程
INSERT INTO print_sink
SELECT *
FROM Demo;

    源表字段header配置:

    - OtsRecordType:数据操作类型,包括PUT, UPDATE, DELETE。
    - OtsRecordTimestamp:数据操作时间(全量数据时,OtsRecordTimestamp为0)。
    - <列名>_OtsColumnType:某列的操作类型,包括PUT, UPDATE, DELETE。

    源表参数配置:

    - type:数据源类型,tablestore源表为ots。
    - endPoint: 表格存储实例访问地址,建议用VPC地址。
    - instanceName:实例名。
    - tableName:表名
    - tunnelName:tunnel名。
    - accessId: 阿里云账号AK ID。
    - accessKey:阿里云账号AK Secret。
    - ignoreDelete: 是否忽略delete操作,默认值为false。

    更详细的配置请参考:Flink官方文档-创建表格存储Tablestore源表

    3. 点击保存后,上线。点击运维,查看流计算任务运行情况。具体如下图所示:

使用 Flink SQL 访问 Tablestore 源表

步骤三 观察流计算结果

    在上面的 Case 中,我们将 Tablestore 源表上的数据打印到 Taskmanager 的输出中,具体运维与结果观察方式如下图所示:
使用 Flink SQL 访问 Tablestore 源表
使用 Flink SQL 访问 Tablestore 源表

欢迎加入

    表格存储 Tablestore 推出了很多贴近用户场景的文章与示例代码,欢迎大家加入我们的钉钉公开交流群一起讨论,群号:23307953。(1 群已满员,欢迎加入 2 群)
使用 Flink SQL 访问 Tablestore 源表

上一篇:Tablestore在本地生活用户圈选场景下的分析实践


下一篇:Python3 基础语法