作者:腾讯云流计算 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. T-SQL——关于表数据的复制插入

    目录 0. 复制表中一列插入到另外一列 1. 复制表结构和数据到自动创建的一张新表中--select into 2. 复制表中一些字段值插入到另外一张表中--insert into 3. 将存储过过程 ...

  2. 阿里云函数计算发布新功能,支持容器镜像,加速应用 Serverless 进程

    我们先通过一段视频来看看函数计算和容器相结合后,在视频转码场景下的优秀表现.点击观看视频 >> FaaS 的门槛 Serverless 形态的云服务帮助开发者承担了大量复杂的扩缩容.运维. ...

  3. Java基础之(五):数据类型

    Java快捷键 首先我们先来介绍下IDEA的一些快捷键 psvm=public static void main(String[] args) {} sout=System.out.println(& ...

  4. pip安装加速

    PIP国内镜像源 名称 源地址 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/s ...

  5. centos无法建立ssl连接

    在centos下使用wget安装mysql5.7时,提示无法建立ssl连接 查阅资料,在命令wget后加上 --no-check-certificate也还是无法建立SSL连接. 后来,觉得可能是由于 ...

  6. SudokuSolver 1.0:用C++实现的数独解题程序 【二】

    本篇是 SudokuSolver 1.0:用C++实现的数独解题程序 [一] 的续篇. CQuizDealer::loadQuiz 接口实现 1 CQuizDealer* CQuizDealer::s ...

  7. HttpServletResponse 入门

    继承体系 功能: 设置响应消息 1. 设置响应行 格式:HTTP/1.1 200 ok 设置状态码:setStatus(int sc) 2. 设置响应头:setHeader(String name, ...

  8. flask 之 请求钩子

    请求钩子 什么是请求钩子? 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要统一处理,为了让每个视图函数避免编写重复功能的代码,flask提供了统一的接口可以添加这些处理函数,即请求钩子. f ...

  9. 264.丑数II

    题目 给你一个整数 n ,请你找出并返回第 n 个 丑数 . 丑数 就是只包含质因数 2.3 和/或 5 的正整数. 示例 1: 输入:n = 10 输出:12 解释:[1, 2, 3, 4, 5, ...

  10. Noip模拟13 2021.7.13:再刚题,就剁手&&生日祭

    T1 工业题 这波行列看反就非常尴尬.....口糊出所有正解想到的唯独行列看反全盘炸列(因为和T1斗智斗勇两个半小时...) 这题就是肯定是个O(n+m)的,那就往哪里想,a,b和前面的系数分开求,前 ...