Flink 實踐教程-進階(2):複雜格式資料抽取

騰訊雲大資料發表於2021-12-04

作者:騰訊雲流計算 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~

相關文章