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

流计算 Oceanus 简介

流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发、无缝连接、亚秒延时、低廉成本、安全稳定等特点的企业级实时大数据分析平台。流计算 Oceanus 以实现企业数据价值最大化为目标,加速企业实时化数字化的建设进程。
本文将向您详细介绍如何获取 PostgreSQL 表数据,并使用字符串函数进行转换,最后将数据输出到 ClickHouse 中。

操作视频

前置准备

创建流计算 Oceanus 集群

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

创建 PostgreSQL 实例

进入 PostgreSQL 控制台 [3],点击左上角【新建】创建实例,具体参考 创建 PostgreSQL 实例 [4]。

数据准备:

进入实例数据库,创建 test1 表,并手动插入数据。

-- 建表语句create table public.test1 (    id INT,    str_one VARCHAR(50),    str_two VARCHAR(50),    str_thr VARCHAR(50),    PRIMARY key(id));-- 插入语句INSERT INTO public.test1 VALUES (1, 'hello world', 'b', 'Oceanus-1');INSERT INTO public.test1 VALUES (2, 'good job', 'c', 'Oceanus-2');INSERT INTO public.test1 VALUES (3, 'hello oceanus', 'd', 'Oceanus-3');

笔者这里使用 DBeaver 进行外网连接,更多连接方式参考官网文档 连接 PostgreSQL 实例 [5]

创建 ClickHouse 集群

进入 ClickHouse 控制台 [6],点击左上角【新建集群】,完成 ClickHouse 集群创建,具体可参考 ClickHouse 快速入门 [7]。创建 ClickHouse 表:  登陆 ClickHouse 集群(登入方式参考 ClickHouse 快速入门 [7]),并建表。

CREATE TABLE default.pg_to_ck on cluster default_cluster (    id  Int8,    str_one String,    str_two String,    str_thr String,    Sign Int8 )ENGINE = ReplicatedCollapsingMergeTree('/clickhouse/tables/{layer}-{shard}/default/pg_to_ck', '{replica}',Sign)ORDER BY (id);

注:流计算 Oceanus 集群、PostgreSQL 实例、ClickHouse 集群需在同一 VPC 下。

流计算 Oceanus 作业

1. 创建 Source

-- PostgreSQL CDC Source。CREATE TABLE PostgreSourceTable (  id INT,  str_one VARCHAR,  str_two VARCHAR,  str_thr VARCHAR,  PRIMARY KEY (id) NOT ENFORCED -- 如果要同步的数据库表定义了主键, 则这里也需要定义) WITH (  'connector' = 'postgres-cdc',  -- 必须为 'postgres-cdc'  'hostname' = '10.0.0.236',     -- 数据库的 IP  'port' = '5432',               -- 数据库的访问端口  'username' = 'root',           -- 数据库访问使用的用户名(需要提供 REPLICATION 权限, 日志级别必须大于等于 logical, 且设置后需要重启实例)  'password' = 'xxxxxxxxxxx',    -- 数据库访问使用的密码  'database-name' = 'postgres',  -- 需要同步的数据库名  'schema-name' = 'public',      -- 需要同步的数据库模式 (Schema)  'table-name' = 'test1'         -- 需要同步的数据表名);

2. 创建 Sink

-- ClickHouse Sink (不完全支持upsert,详见说明文档)。配合 flink-connector-clickhouse 使用。CREATE TABLE clickhouse_sink (  id INT,  str_one VARCHAR,  str_two VARCHAR,  str_thr VARCHAR,  PRIMARY KEY (id) NOT ENFORCED          -- 如果要同步的数据库表定义了主键, 则这里也需要定义) WITH (  'connector' = 'clickhouse',              -- connector 类型为 clickhouse  'url' = 'clickhouse://10.0.0.178:8123',  -- 指定数据库链接 url  'database-name' = 'default',             -- 需要写入的 clickhouse 库名  'table-name' = 'pg_to_ck',               -- 需要写入的 clickhouse 表名  'table.collapsing.field' = 'Sign'        -- 采用 CollapsingMergeTree 引擎的 clickhouse 表,Collapsing 列字段的名称);

3. 编写业务 SQL

INSERT INTO clickhouse_sinkSELECT   id,--INITCAP:将 str_one 中的单词转为大写开头,例如 INITCAP('i have a dream') 返回 'I Have A Dream'。  INITCAP(str_one)    AS str_one,--TO_BASE64:将 string 表示的字符串编码为 Base64 字符串。  TO_BASE64(str_two)  AS str_two,--REPLACE:将 string1 字符串中所有的 string2 替换为 string3。例如 REPLACE('banana', 'a', 'A') 返回 'bAnAnA'。  REPLACE(str_thr,'Oceanus','Hello Oceanus') AS str_thr FROM PostgreSourceTable;

这里我们使用 Flink 1.13 集群,旧版 Flink 集群需选择相应的内置 Connector

总结

  1. 使用 Postgres-CDC 连接器:

  • 用于同步的 Postgres 用户至少需要开启 REPLICATION、LOGIN、SCHEMA、DATABASE、SELECT 权限。可以进入 PostgreSQL 数据库进行授权操作。

CREATE ROLE debezium_user REPLICATION LOGIN;GRANT USAGE ON DATABASE database_name TO debezium_user;GRANT USAGE ON SCHEMA schema_name TO debezium_user;GRANT SELECT ON scheam_name.table_name, scheam_name.table_name TO debezium_user;
  • 日志级别必须大于等于 logical, 且设置后需要重启实例。进入数据库实例,单击【参数设置】,单击【WAL】,修改【wal_level】的【参数运行值】为 "logical"。修改成功后点击右上角【重启】。

  1. 更多字符串操作函数请参考流计算 Oceanus 官方文档 字符串函数[8]。

参考链接

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

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

[3] PostgreSQL 控制台:https://console.cloud.tencent.com/postgres/index

[4] 创建 PostgreSQL 实例:https://cloud.tencent.com/document/product/409/56961

[5] 连接 PostgreSQL 实例:https://cloud.tencent.com/document/product/409/40429

[6] ClickHouse 控制台:https://console.cloud.tencent.com/cdwch?region=ap-guangzhou

[7] ClickHouse 快速入门:https://cloud.tencent.com/document/product/1299/49824

[8] 流计算 Oceanus 字符串函数:https://cloud.tencent.com/document/product/849/18073

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

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


Flink 实践教程:入门(6):读取 PG 数据写入 ClickHouse的更多相关文章

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

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

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

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

  3. Openxml入门---Openxm读取Excel数据

    Openxml读取Excel数据: 有些问题,如果当Cell 里面是 日期和浮点型的话,对应的Cell.DataType==Null,对应的时间会转换为一个浮点型,对于这块可以通过DateTime.F ...

  4. Logstash读取Kafka数据写入HDFS详解

    强大的功能,丰富的插件,让logstash在数据处理的行列中出类拔萃 通常日志数据除了要入ES提供实时展示和简单统计外,还需要写入大数据集群来提供更为深入的逻辑处理,前边几篇ELK的文章介绍过利用lo ...

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

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

  6. Flink 实践教程-进阶(2):复杂格式数据抽取

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

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

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

  8. Diagramming for WinForms 教程一(读取图元数据)

    1,新建“Visual c#” Windows窗体应用程序. 2,从“工具箱”的“Diagramming”选项卡下,托出“DiagramView”控件到Form1上.控件的"Name&quo ...

  9. acegi security实践教程—入门

    Acegi Security概念    Acegi Security是基于J2EE的企业软件应用提供全面的安全服务.通俗的说,就是封装的安全框架.提到安全,大家脑子中第一反应肯定是权限控制.的确如此, ...

随机推荐

  1. ARC115E-LEQ and NEQ【容斥,dp,线段树】

    正题 题目链接:https://atcoder.jp/contests/arc115/tasks/arc115_d 题目大意 \(n\)个数字的序列\(x\),第\(x_i\in [1,A_i]\ca ...

  2. 深入浅出WPF-08.Event( 事件)01

    事件(Event) 首先我们来继续说一下UI组件树,因为WPF事件 的路由环境就是组件树.WPF中的树有两种,一种是逻辑树(Logical Tree),一种是可视元素树(Visual Tree).逻辑 ...

  3. 踩坑系列《一》数据库建表权限 CREATE command denied to user for table

    今天在表中用Navicat连接服务器上的mysql账号进行建表,报了个这样类似的错, CREATE command denied to user for table 是数据库权限设置的问题,所以无法进 ...

  4. Snipaste屏幕截图的使用

    什么是Snipaste Snipaste是一款屏幕截图软件 类似于微信的截图 Snipaste使用步骤 百度搜索Snipaste 如图 点击 根据自己电脑系统选择安装 下载完成后 解压到当前文件夹 点 ...

  5. SpringBoot 如何进行限流?老鸟们都这么玩的!

    大家好,我是飘渺.SpringBoot老鸟系列的文章已经写了四篇,每篇的阅读反响都还不错,那今天继续给大家带来老鸟系列的第五篇,来聊聊在SpringBoot项目中如何对接口进行限流,有哪些常见的限流算 ...

  6. Midway Serverless 发布 2.0,一体化让前端研发再次提效

    作者 | 张挺 来源 | Serverless 公众号 自去年 Midway Serverless 1.0 发布之后,许多业务开始尝试其中,并利用 Serverless 容器的弹性能力,减少了大量研发 ...

  7. CF992E Nastya and King-Shamans(线段树二分+思维)

    这是一道卡常好题 从160s卡到36s qwq 由于题目设计到原数组的单点修改,那么就对应着前缀和数组上的区间加. 很显然能想到用线段树来维护这么个东西. 那么该如果求题目要求的位置呢 我们来看这个题 ...

  8. 洛谷3163 CQOI2014危桥 (最大流)

    一开始想了一发费用流做法然后直接出负环了 首先,比较显然的思路就是对于原图中没有限制的边,对应的流量就是\(inf\),如果是危桥,那么流量就应该是\(2\). 由于存在两个起始点,我们考虑直接\(s ...

  9. OpenGL思维导图

  10. 如何在另一台设备上搭建python接口自动化项目所需要的第三方库

    1.如何将当前项目引用的第三方库导出,在新建项目时,选择New environment using>Virtualenv 2.然后右键选择open in terminal:输入命令:pip fr ...