作者:腾讯云流计算 Oceanus 团队

流计算 Oceanus 简介

流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发、无缝连接、亚秒延时、低廉成本、安全稳定等特点的企业级实时大数据分析平台。流计算 Oceanus 以实现企业数据价值最大化为目标,加速企业实时化数字化的建设进程。本文将为您详细介绍如何实时获取 CKafka 中的 JSON 格式数据,经过数据抽取、平铺转换后存入 MySQL 中。

操作视频

前置准备

创建流计算 Oceanus 集群

进入流计算 Oceanus 控制台 [1],点击左侧【集群管理】,点击左上方【创建集群】,具体可参考流计算 Oceanus 官方文档 创建独享集群 [2]。

创建消息队列 CKafka

进入 CKafka 控制台 [3],点击左上角【新建】,即可完成 CKafka 的创建,具体可参考 CKafka 创建实例 [4]。创建 Topic:  进入 CKafka 实例,点击【topic 管理】>【新建】,即可完成 Topic 的创建,具体可参考 CKafka 创建 Topic [5]。数据准备:  进入同子网的 CVM 下,启动 Kafka 客户端,模拟发送数据,具体操作参见 运行 Kafka 客户端 [6]。

// 数据格式{  "id": 1,  "message": "流计算 Oceanus 1元限量秒杀活动",  "userInfo": {      "name": "张三",      "phone": ["12345678910", "8547942"]      },  "companyInfo": {      "name": "Tencent",      "address": "深圳市腾讯大厦"      }}

创建 MySQL 实例

进入 MySQL 控制台 [7],点击【新建】。具体可参考官方文档 创建 MySQL 实例 [8]。

-- 建表语句CREATE TABLE `oceanus_advanced2` (  `id`              int (100) NOT NULL,  `message`         varchar (100) NULL DEFAULT '',  `name`            varchar (50)  NULL DEFAULT '',  `phone`           varchar (11)  NULL DEFAULT '',  `company_name`    varchar (100) NULL DEFAULT '',  `company_address` varchar (100) NULL DEFAULT '',  PRIMARY KEY (`id`)) ENGINE = innodb

流计算 Oceanus 作业

1. 创建 Source

CREATE TABLE `kafka_json_source_table` (    `id`             INT,    `message`        STRING,    `userInfo`       ROW<`name` STRING,`phone` ARRAY<STRING>>,  -- 采用 ROW 嵌套 ARRAY 格式接收 JSON 字段    `companyInfo`    MAP<STRING,STRING>    -- 采用 MAP 格式接收 JSON 字段) WITH (  'connector' = 'kafka',  'topic' = 'oceanus_advanced2',                      -- 替换为您要消费的 Topic  'scan.startup.mode' = 'earliest-offset',            -- 可以是 latest-offset/earliest-offset/specific-offsets/group-offsets/timestamp 的任何一种  'properties.bootstrap.servers' = '10.0.0.29:9092',  -- 替换为您的 Kafka 连接地址  'properties.group.id' = 'testGroup',                -- 必选参数, 一定要指定 Group ID  'format' = 'json',                                  -- 定义 JSON 格式,部分其他格式可能不支持抽取平铺  'json.fail-on-missing-field' = 'false',             -- 如果设置为 false, 则遇到缺失字段不会报错。  'json.ignore-parse-errors' = 'true'                 -- 如果设置为 true,则忽略任何解析报错。);

2. 创建 Sink

CREATE TABLE `jdbc_upsert_sink_table` (    `id`                INT,    `message`           STRING,    `name`              STRING,    `phone`             STRING,    `company_name`      STRING,    `company_address`   STRING) WITH (    'connector' = 'jdbc',    'url' = 'jdbc:mysql://10.0.0.158:3306/testdb?rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai',         -- 请替换为您的实际 MySQL 连接参数    'table-name' = 'oceanus_advanced2',    -- 需要写入的数据表    'username' = 'root',                   -- 数据库访问的用户名(需要提供 INSERT 权限)    'password' = 'Tencent123$',            -- 数据库访问的密码    'sink.buffer-flush.max-rows' = '200',  -- 批量输出的条数    'sink.buffer-flush.interval' = '2s'    -- 批量输出的间隔);

3. 编写业务 SQL

INSERT INTO `jdbc_upsert_sink_table`SELECTid                        AS  id,message                   AS  message,userInfo.name             AS  name,              -- 获取 Row 中成员采用.成员的方式userInfo.phone[1]         AS  phone,             -- 获取 Array 中成员采用 [数组下标] 的方式companyInfo['name']       AS  company_name,      -- 获取 Map 中成员采用 ['属性名'] 的方式companyInfo['address']    AS  company_addressFROM `kafka_json_source_table`;

新版 Flink 1.13 集群无需用户选择内置 Connector,平台自动匹配获取

总结

本文详细介绍了如何通过 SQL 作业定义和获取 MAP、ARRAY、ROW 类型数据。更多内置运算符和函数请参考流计算 Oceanus 官方文档 [9]。

参考链接

[1]流计算 Oceanus 控制台:https://console.cloud.tencent.com/oceanus/overview

[2] 创建独享集群:https://cloud.tencent.com/document/product/849/48298

[3] CKafka 控制台:https://console.cloud.tencent.com/ckafka/index?rid=1

[4] CKafka 创建实例:https://cloud.tencent.com/document/product/597/54839

[5] Ckafka 创建 Topic:https://cloud.tencent.com/document/product/597/54854

[6] 运行 Kafka 客户端:https://cloud.tencent.com/document/product/597/56840

[7] MySQL 控制台:https://console.cloud.tencent.com/cdb

[8] 创建 MySQL 实例:https://cloud.tencent.com/document/product/236/46433

[9] 内置运算符和函数:https://cloud.tencent.com/document/product/849/18083

流计算 Oceanus 限量秒杀专享活动火爆进行中↓↓

关注“腾讯云大数据”公众号,技术交流、最新活动、服务专享一站Get~

Flink 实践教程-进阶(2):复杂格式数据抽取的更多相关文章

  1. Flink 实践教程-进阶(5):排序(乱序调整)

    作者:腾讯云流计算 Oceanus 团队 流计算 Oceanus 简介 流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发.无缝连接.亚 ...

  2. Flink 实践教程 - 入门(4):读取 MySQL 数据写入到 ES

    ​作者:腾讯云流计算 Oceanus 团队 流计算 Oceanus 简介 流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发.无缝连接. ...

  3. Flink 实践教程:入门(6):读取 PG 数据写入 ClickHouse

    作者:腾讯云流计算 Oceanus 团队 流计算 Oceanus 简介 流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发.无缝连接.亚 ...

  4. Flink 实践教程:入门(1):零基础用户实现简单 Flink 任务

    作者:腾讯云流计算 Oceanus 团队 流计算 Oceanus 简介 流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发.无缝连接.亚 ...

  5. Flink 实践教程-入门(8): 简单 ETL 作业

    作者:腾讯云流计算 Oceanus 团队 流计算 Oceanus 简介 流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发.无缝连接.亚 ...

  6. NGUI全面实践教程(大学霸内部资料)

    NGUI全面实践教程(大学霸内部资料)   试读文档下载地址:链接:http://pan.baidu.com/s/1jGosC9g 密码:8jq5 介绍:NGUI全面实践教程(大学霸内部资料)本书是国 ...

  7. Highcharts使用CSV格式数据绘制图表

    Highcharts使用CSV格式数据绘制图表 CSV(Comma-Separated Values,逗号分隔值文本格式)是採用逗号切割的纯文本数据.通常情况下.每一个数据之间使用逗号切割,几个相关数 ...

  8. 网页图表Highcharts实践教程之图表代码构成

    网页图表Highcharts实践教程之图表代码构成 Highcharts第一个实例 下面我们来实现本书的第一个Highcharts实例. [实例1-1]下面来制作北京连续一周最高温度折线图.操作过程如 ...

  9. python多种格式数据加载、处理与存储

    多种格式数据加载.处理与存储 实际的场景中,我们会在不同的地方遇到各种不同的数据格式(比如大家熟悉的csv与txt,比如网页HTML格式,比如XML格式),我们来一起看看python如何和这些格式的数 ...

随机推荐

  1. GeoServer-Manager应用:java编码实现发布矢量数据或栅格数据至GeoServer

    目录 简介与下载 依赖 编码发布矢量数据 编码发布栅格数据 简介与下载 GeoServer-Manager是使用Java编写的面向GeoServer的客户端库,通过GeoServer的REST管理接口 ...

  2. 【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑

    编写Java Spring Boot应用,通过配置logging.path路径把日志输出在指定的文件夹中. 第一步:通过VS Code创建一个空的Spring Boot项目 第二步:在applicat ...

  3. cat userlist(课上练习)

    问题描述 Linux文件系统的三层抽象是什么? 写出Cat userlist的过程,要详述目录文件,i-node.数据块,要画图示意. 假设块大小为4k, userlist的大小不小于10k,自己假设 ...

  4. VCS常用仿真选项开关及步骤总结

    转自:https://blog.csdn.net/bcs_01/article/details/79803304 转自:https://blog.csdn.net/wonder_coole/artic ...

  5. 使用BadBoy录制JMeter脚本

     BadBoy简介 BadBoy是一款免费WEB自动化测试工具,其实就是一个浏览器模拟工具,具有录制和回放功能,支持对录制出来的脚本进行调试.同时支持捕获表单数据的功能,所以能够进行自动化测试.但目前 ...

  6. sql sever 约束

    SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束 1.Primary Key约束在表中常有一列或多列的组合, ...

  7. [JS]什么是闭包?

    首先来思考一下下面的案例: function unclosure() { let count = 0 return count++ } for (let index = 0; index < 1 ...

  8. selet 语句详解

    SELECT 语句的基本格式为:        SELECT 要查询的列名 FROM 表名字 WHERE 限制条件;        2.0 数学符号条件            SELECT 语句常常会 ...

  9. 菜鸡的Java笔记 第四 - java 基础运算符

    数学运算符,逻辑运算,三目运算,位运算 double d2 = 314e2; //采用科学计数法的写法,表示10的2次方.= 31400.0 代码写的越简单越好   简化运算符 代码:x=x+y 可以 ...

  10. PAT A1107——并查集

     Social Clusters When register on a social network, you are always asked to specify your hobbies in ...