使用 Flink SQL 访问 Tablestore 源表

简介:     本文将介绍如何使用使用 Flink SQL 通过流处理的方式访问 Tablestore 源表。 在流计算场景下,用户可以基于[通道服务](https://help.aliyun.com/document_detail/102489.html),利用CDC(数据变更捕获)技术,通过 Flink 完成流式消费和计算。 Flink on Tablesto

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

Tablestore 简介

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

前置准备

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

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

image.png
image.png

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

image.png

快速开始

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

    1. 创建 Tablestore 源表

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

image.png

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

image.png

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

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

image.png

    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. 点击保存后,上线。点击运维,查看流计算任务运行情况。具体如下图所示:

image.png

步骤三 观察流计算结果

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

欢迎加入

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

相关实践学习
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
API 数据库 流计算
有大佬知道在使用flink cdc实现数据同步,如何实现如果服务停止了对数据源表的某个数据进行删除操作,重启服务之后目标表能进行对源表删除的数据进行删除吗?
【2月更文挑战第27天】有大佬知道在使用flink cdc实现数据同步,如何实现如果服务停止了对数据源表的某个数据进行删除操作,重启服务之后目标表能进行对源表删除的数据进行删除吗?
496 3
|
SQL Java 关系型数据库
实时计算 Flink版操作报错之如何处理从源表插入数据到结果表报错误:[ERROR] Could not execute SQL statement.
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之delete主键删除源表一条记录,目标表未删除数据问题如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
837 1
|
SQL Java Apache
实时计算 Flink版操作报错合集之使用parquet时,怎么解决报错:无法访问到java.uti.Arrays$ArrayList类的私有字段
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
消息中间件 Kubernetes 监控
实时计算 Flink版操作报错合集之在编译源码时遇到报错:无法访问,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
数据采集 关系型数据库 MySQL
实时计算 Flink版操作报错合集之源表的数据已经被手动删除,时间窗口内的数据仍存在,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
382 1
|
机器学习/深度学习 Kubernetes Java
实时计算 Flink版产品使用合集之如果一个表既是源表又是维表,该怎么进行处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
310 1
|
关系型数据库 MySQL API
实时计算 Flink版操作报错合集之同步MySQL数据到另一个MySQL数据库,第一次同步后源表数据发生变化时目标表没有相应更新,且Web UI中看不到运行的任务,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
534 0
|
消息中间件 JSON Kafka
实时计算 Flink版操作报错合集之kafka源表没有指定group.id,遇到报错,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
620 0
|
JSON 分布式计算 数据处理
实时计算 Flink版产品使用问题之如何判断源表是否支持startTime
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。