用Google CDC来同步Cloud SQL的数据到Bigquery

在Google的云平台中,我创建了一个Cloud SQL的Postgresql实例,在上面保存了一些业务数据。现在需要定期把这些数据同步到Bigquery数据仓库中,这样我们就能在Bigquery上进行数据的后续分析处理,生成数据报表。

Google提供了一个Datastream的服务,通过CDC(Capture data change)的方式,把Cloudsql数据库的改动,例如增删更新等操作,同步到Bigquery的数据集。以下将介绍如何设置Datastream来完成。

因为我的Cloudsql实例没有暴露公网IP,因此我们需要设置VPC peering的方式,把Datastream的VPC和我的GCP项目的VPC网络连接起来。另外Cloudsql是在一个单独的Service network中,我们还需要通过反向代理的方式来连接到cloudsql

设置Datastream私有连接

在Datastream的Private Connectivity里面,新建一个连接profile。在profile里面我们需要设置VPC network,这个就是我们项目当前所在的VPC网络。然后需要分配一个IP地址段给Datastream来起一个子网。这个IP地址段不能是已分配的IP地址段,并且至少要具备/29的地址。

设置防火墙规则

在VPC网络的防火墙设置里面,新增两条规则,分别对应ingress和egress。其中target需要输入我们刚才分配的地址段,然后开放TCP:5432端口。

设置反向代理

在VPC网络里面设置一台VM,然后运行以下代码的脚本,设置一个反向代理

#! /bin/bashexport DB_ADDR=[IP]
export DB_PORT=[PORT]export ETH_NAME=$(ip -o link show | awk -F': ' '{print $2}' | grep -v lo)export LOCAL_IP_ADDR=$(ip -4 addr show $ETH_NAME | grep -Po 'inet \K[\d.]+')echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -m tcp --dport $DB_PORT -j DNAT \
--to-destination $DB_ADDR:$DB_PORT
iptables -t nat -A POSTROUTING -j SNAT --to-source $LOCAL_IP_ADDR

这里的DB_ADDR,DB_PORT填写CloudSQL的PG数据库的地址和端口

PG配置

连接到PG数据库,创建一个publication和replication slot

以下命令将赋予用户创建replication的role

ALTER USER USER_NAME WITH REPLICATION;

创建一个publication,这里假设我们要复制public这个schma的test表,那么把以下的SCHEMA1替换为public,把TABLE1替换为test

CREATE PUBLICATION PUBLICATION_NAME FOR TABLE SCHEMA1.TABLE1, SCHEMA2.TABLE2;

创建一个replication slot

SELECT PG_CREATE_LOGICAL_REPLICATION_SLOT('REPLICATION_SLOT_NAME', 'pgoutput');

设置Datastream

最后就可以设置一个stream了,这里连接数据库的地址需要输入刚才我们设置的反向代理的VM的地址和端口,以及我们之前配置的PG的publication和replication slot的name。最后就可以成功运行了。我们可以测试一下,在PG数据表里面做相应的改动,然后在Bigquery的数据表里面等待一会儿就可以看到数据能同步过去了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QTday3(QT实现文件对话框保存操作、实现键盘触发事件【WASD控制小球的移动】)

1.实现文件对话框保存操作 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }void Widget::on_fontBtn_clicked() {//调用QFo…

More Effective C++学习笔记(6)

目录 条款32:在未来时态下发展程序条款33:将非尾端类设计为抽象类条款34:如何在同一个程序中结合C和C条款35:让自己习惯于标准的C语言 条款32:在未来时态下发展程序 “事情总是会改变”是一个事实,因此我们…

dll文件反编译源代码 C#反编译 dotpeek反编译dll文件后export

目录 背景下载安装dotpeek导入dll文件export导出文件参考 背景 项目合作的时候,使用前人的或者其他部门dll文件直接在机台运行,会出现很多问题,逻辑,效率等等,此时我们可以选择对他们的代码进行反编译和重构&#xff…

redisson分布式锁

RLock官网解释 基于Redis的Java分布式可重入锁对象,实现了锁接口。 如果获得锁的Redisson实例崩溃,那么这种锁可能永远挂起在获得状态。为了避免这种情况,Redisson维护了锁看门狗,它在锁持有者Redisson实例活着的时候延长锁过期时…

adb server version (19045) doesn‘t match this client (41); killing.的解决办法

我是因为安装了360手机助手,导致adb版本冲突。卸载之后问题解决 根据这个思路,如果产生"adb server version (19045) doesn’t match this client (41); killing."的错误,检查一下是否有多个版本的adb服务。

算法笔记:哈夫曼树、哈夫曼编码

1 字符的机内表示 2 前缀编码 字符只放在叶结点中字符编码可以有不同的长度由于字符只放在叶结点中,所以每个字符的编码都不可能是其他字符编码的前缀前缀编码可被惟一解码 3 哈夫曼树 哈夫曼树是一棵最小代价的二叉树,在这棵树上,所有的字…

SpotBugs(是FindBugs的继任者)安装、使用

SpotBugs介绍 SpotBugs和FindBugs的关系 SpotBugs是FindBugs的继任者,从SpotBugs停止的地方继续。 备注:FindBugs项目已经停止了,从2015年发布3.0.1版本以后再没有新的版本。 SpotBugs通过静态分析寻找java代码中的bug,通过发现…

网络渗透day10-工具和技术

以下为网络渗透的工具和技术。 让我更详细地描述网络渗透测试的各个阶段以及使用的工具。 1. 信息收集阶段: 目标识别: 在这一阶段,渗透测试人员确定测试的目标,例如特定的服务器、应用程序或网络。 开放源情报(OSIN…

lv3 嵌入式开发-9 linux TFTP服务器搭建及使用

目录 1 TFTP服务器的介绍 2 TFTP文件传输的特点 3 TFTP服务器的适用场景 4 配置介绍 4.1 配置步骤 4.2 使用 5 常见错误 1 TFTP服务器的介绍 TFTP(Trivial File Transfer Protocol)即简单文件传输协议 是TCP/IP协议族中的一个用来在客户机与服务器…

手机也可以搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站【cpolar实现公网访问】

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

mysql 安全加固

PS:之前在做安全测试的时候,报告mysql有安全漏洞,于是研究了下如何修复,于是记录下来分享给大家 1.1修改mysql 存放位置 修复 1.停服务 service mysqld stop2.迁位置 2.1 新建迁移目录 mkdir /home/database2.2 迁移数据文件…

【MySQL】MySQL8.0安装教程

下载 MySQL官网下载安装包 安装 1、双击安装程序开始安装 2、选择安装类型 选Server only(只安装mysql),然后点击“next”。 3、检测需要的安装, 直接点击Execute开始安装 4、点击next 5、点击next 6、next 7、密码验证方式&a…

这应该是最全的总结了!SQL中的开窗函数汇总!

目录 前言 窗口函数的格式 函数(Function)的类型 开窗函数over() 窗口函数使用 ROW_NUMBER() RANK()与DENSE_RANK() LEAD()与LAG() FIRST_VALUE()与LAST_VALUE() NTILE() MAX()、MIN()、AVG()、SUM()与COUNT() 窗口从句的使用 窗口从句进阶 …

macos13 arm芯片(m2) 搭建hbase docker容器 并用flink通过自定义richSinkFunction写入数据到hbase

搭建hbase docker容器 下载镜像 https://hub.docker.com/r/satoshiyamamoto/hbase/tags 点击run 使用镜像新建容器 填写容器名和 容器与宿主机的端口映射 测试 通过宿主机访问容器内的hbase webUI http://localhost:60010/master-status

I2C与I3C的对比

I2C与I3C的对比 电气特性 I2C 1.半双工 2.串行数据线(SDA)和串行时钟线(SCL) 3.数据线漏极开路,即I2C接口接上拉电阻 4.I2C总线运行速度:**标准模式100kbit/s,快速模式400kbit/s,快速模式plus 1Mbit/s,**高速模式…

深入探讨梯度下降:优化机器学习的关键步骤(三)

文章目录 🍀引言🍀随机、批量梯度下降的差异🍀随机梯度下降的实现🍀随机梯度下降的调试 🍀引言 随机梯度下降是一种优化方法,主要作用是提高迭代速度,避免陷入庞大计算量的泥沼。在每次更新时&a…

[uniapp]踩坑日记 unexpected character > 1或‘=’>1 报错

在红色报错文档里下滑&#xff0c;找到Show more 根据提示看是缺少标签&#xff0c;如果不是缺少标签&#xff0c;看看view标签内容是否含有<、>、>、<号,把以上符合都进行以<号为例做{{“<”}}处理

shell字符串处理之字符串替换、截断

引言 上文我们已经讲了字符串的比较&#xff0c;接下来我们再来学习一下字符串的替换、截断等处理操作。 字符串替换 1. 匹配串只替换一次 stra"aabbcc123" strb${stra/b/s}第一个斜杠后的表示要匹配的模式串&#xff0c;第二个斜杠之后表示要替换后的新串strb的…

Ubuntu编译运行socket.io

本篇文章记录一下自己在ubuntu上编译运行socket.io的过程&#xff0c;客户端选用的是socket.io的c的库&#xff0c;编译起来倒不难&#xff0c;但是说到运行的话&#xff0c;对我来说确实是花了点功夫。毕竟程序要能运行起来才能更方便地去熟悉代码&#xff0c;因此今天我就记录…

MySQL——索引

索引在 MySQL 数据库中分三类&#xff1a; B 树索引Hash 索引全文索引 目的&#xff1a;在查询的时候提升效率 b树 参考&#xff1a;https://blog.csdn.net/qq_40649503/article/details/115799935 数据库索引&#xff0c;是数据库管理系统中一个排序的数据结构&#xf…