dbt-core软件适配GaussDB开源开发介绍及其心得体会
开源dbt-gaussdbdws介绍
dbt-core软件适配GaussDB的插件是dbt-gaussdbdws
的主要目的是让 dbt-core
社区支持 GaussDB和GaussDB(DWS)。旨在拓展GaussDB(DWS) 的影响力,同时为 dbt-core
用户提供更灵活的数据库选择,使其能够轻松使用 GaussDB(DWS)。
实现的目标
增强数据集成能力
通过适配 GaussDB(DWS),dbt-core
能够为使用该数据库的用户提供强大的数据建模和转化功能,使其能够更方便地管理和分析数据。
提升数据处理效率
通过将 dbt-core
的功能与 GaussDB(DWS) 相结合,用户可以利用 dbt 的自动化和可扩展性,快速构建和维护复杂的数据管道。
支持数据驱动决策
使企业能够更好地利用 GaussDB 存储的数据,通过 dbt-core
提供的功能进行高效的数据分析和报表生成,促进数据驱动的业务决策。
降低技术复杂性
为使用 GaussDB 的用户提供一个易于使用的工具,简化数据建模和转化流程,降低技术门槛。
db-core介绍
开源地址
在github的开源地址dbt-core
什么是dbt-core?
dbt-core
是一款开源的数据转换工具,专为 分析工程师
和 数据团队
设计,用于高效地管理和转换数据。 全称是 Data Build Tool,主要用于在数据仓库中对数据进行建模、清洗和优化。
通俗来说,dbt-core
帮助你完成以下任务:
- 从原始数据到可用数据的整个转换过程。
- 简化数据操作,让你更专注于业务逻辑,而不是处理繁琐的SQL脚本。
为什么选择dbt-core?
- 简单易用:基于 SQL 的开发模式,门槛低,小白容易上手。
- 高效协作:像开发代码一样管理数据,团队协作更高效。
- 自动化强:自动生成依赖关系和文档,节省手动处理时间。
- 开源免费:作为开源工具,
dbt-core
完全免费,可以搭配各种云数据仓库使用(如 Snowflake、BigQuery、Redshift、华为云 GaussDB 等)。
适合谁使用?
- 数据分析师:简化数据准备过程,专注于分析。
- 数据工程师:搭建和维护数据仓库的逻辑层。
- 数据科学家:高效清洗数据,准备用于模型训练的数据集。
dbt-core的工作原理
数据源准备
连接你的数据仓库(如 PostgreSQL、GaussDB 等)。
编写转换脚本
编写 SQL 文件来定义数据模型和转换逻辑。
运行任务
使用命令运行 dbt(如 dbt run),dbt 会根据你的定义转换数据并生成结果表或视图。
生成文档和测试
通过 dbt docs 自动生成模型文档,运行 dbt test 确保数据质量。
dbt-core的核心功能
SQL 自动化管理
dbt 使用 SQL
+ Jinja
模板,让你可以像写代码一样处理 SQL。 通过编写简单的 SQL 查询,dbt 会帮助你生成复杂的转换逻辑。
数据模型构建
dbt-core
支持定义分层数据模型(如:原始数据层、清洗层、分析层)。 它可以自动处理模型之间的依赖关系。
版本控制与协作
可以将 dbt 项目存储在 Git 仓库中,与团队协作开发和维护数据模型。
运行和调度任务
dbt 可以运行 SQL 语句并生成转换后的表或视图,支持任务的自动化调度。
数据文档与测试
自动生成数据文档,清晰展示模型的依赖关系和字段描述。 提供数据测试功能,帮助验证数据质量。
GaussDB 介绍
什么是云数据库GaussDB
GaussDB是华为自主创新研发的分布式关系型数据库。该产品支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。同时拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。
在华为云官方可以访问 GaussDB 的帮助文档
整体架构
GaussDB分布式版形态整体架构
GaussDB分布式版形态整体架构如下:
图1 GaussDB分布式版形态整体架构图
- Coordinator Node:协调节点CN,负责接收来自应用的访问请求,并向客户端返回执行结果;负责分解任务,并调度任务分片在各DN上并行执行。
- GTM:全局事务管理器(Global Transaction Manager),负责生成和维护全局事务ID、事务快照、时间戳、Sequence信息等全局唯一的信息。
- Data Node:数据节点DN,负责存储业务数据、执行数据查询任务以及向CN返回执行结果。
GaussDB 集中式形态整体架构
GaussDB 集中式形态整体架构如下:
图2 GaussDB集中式形态整体架构图
- ETCD:分布式键值存储系统(Editable Text Configuration Daemon)。用于共享配置和服务发现(服务注册和查找)。
- CMS:集群管理模块(Cluster Manager)。管理和监控分布式系统中各个功能单元和物理资源的运行情况,确保整个系统的稳定运行。
- Data Node:数据节点DN,负责存储业务数据、执行数据查询任务以及返回执行结果。
产品优势
- 高安全
GaussDB拥有TOP级的商业数据库安全特性,如下所示,能够满足政企和金融级客户的核心安全诉求。 数据动态脱敏,行级访问控制,密态计算。
- 健全的工具与服务化能力
GaussDB已经拥有华为云,商用服务化部署能力,同时支持DAS、DRS等生态工具。有效保障用户开发、运维、优化、监控、迁移等日常工作需要。
- 全栈自研
GaussDB基于鲲鹏生态,是当前国内唯一能够做到全栈自主可控的国产品牌。同时GaussDB能够基于硬件优势在底层不断进行优化,提升产品综合性能。
- 开源生态
GaussDB已经支持开源社区,并提供集中式版本下载。
GaussDB(DWS) 介绍
什么是是数据仓库服务GaussDB(DWS)
数据仓库服务GaussDB(DWS)是一种基于华为云基础架构和平台的在线数据分析处理数据库,提供即开即用、可扩展且完全托管的分析型数据库服务,兼容ANSI/ISO标准的SQL92、SQL99和SQL 2003语法,同时兼容PostgreSQL/Oracle/Teradata/MySQL等数据库生态,为各行业PB级海量大数据分析提供有竞争力的解决方案。
在华为云官方可以访问 GaussDB(DWS) 的帮助文档
集群逻辑架构
GaussDB(DWS)集群逻辑架构如下:
图1 集群逻辑架构图
- CM: 集群管理模块(Cluster Manager)。管理和监控分布式系统中各个功能单元和物理资源的运行情况,确保整个系统的稳定运行。
- GTM: 全局事务管理器(Global Transaction Manager),负责生成和维护全局事务ID、事务快照、时间戳等全局唯一的信息。
- WLM: 工作负载管理器(Workload Manager)。控制系统资源的分配,防止过量业务负载对系统的冲击而导致业务拥塞和系统崩溃。
- CN: 协调节点(Coordinator)。负责接收来自应用的访问请求,并向客户端返回执行结果;负责分解任务,并调度任务分片在各DN上并行执行。
- DN: 数据节点(Datanode)。负责存储业务数据(支持行存、列存、混合存储)、执行数据查询任务以及向CN返回执行结果。
- Storage: 服务器的本地存储资源,持久化存储数据。
产品优势
GaussDB(DWS)数据库内核自主研发,兼容PostgreSQL的数据库内核引擎,从单机OLTP数据库改造为企业级MPP(大规模并行处理)架构的OLAP分布式数据库,其主要面向海量数据分析场景。
GaussDB(DWS)与传统数据仓库相比,主要有以下特点与显著优势,可解决多行业超大规模数据处理与通用平台管理问题:
易使用
- 一站式可视化便捷管理
GaussDB(DWS)让您能够轻松完成从项目概念到生产部署的整个过程。通过使用GaussDB(DWS)管理控制台,您不需要安装数据仓库软件,也不需要部署数据仓库服务器,就可以在几分钟之内获得高性能、高可靠的企业级数据仓库集群。
- 与大数据无缝集成
您可以使用标准SQL查询HDFS、对象存储服务(Object Storage Service,OBS)上的数据,数据无需搬迁。
- 提供一键式异构数据库迁移工具
GaussDB(DWS)提供配套的迁移工具,可支持MySQL、Oracle和Teradata的SQL脚本迁移到GaussDB(DWS)。
高性能
- 云化分布式架构
GaussDB(DWS)采用全并行的MPP架构数据库,业务数据被分散存储在多个节点上,数据分析任务被推送到数据所在位置就近执行,并行地完成大规模的数据处理工作,实现对数据处理的快速响应。
- 查询高性能,万亿数据秒级响应
GaussDB(DWS)通过算子并行执行、向量化执行引擎实现指令在寄存器并行执行,以及LLVM动态编译减少查询时冗余的条件逻辑判断,助力数据查询性能提升。
GaussDB(DWS)支持行列混合存储,可以同时为用户提供更优的数据压缩比(列存)、更好的索引性能(列存)、更好的点更新和点查询(行存)性能。
- 数据加载快
GaussDB(DWS)提供了GDS极速并行大规模数据加载工具。
-列存下的数据压缩
对于非活跃的早期数据可以通过压缩来减少空间占用,降低采购和运维成本。
GaussDB(DWS)列存储压缩支持Delta Value Encoding、Dictionary、RLE 、LZ4、ZLIB等压缩算法,且能够根据数据特征自适应的选择压缩算法,平均压缩比7:1。压缩数据可直接访问,对业务透明,极大缩短历史数据访问的准备时间。
易扩展
- 按需扩展:Shared-Nothing开放架构,可随时根据业务情况增加节点,扩展系统的数据存储能力和查询分析性能。
- 扩容后性能线性提升:容量和性能随集群规模线性提升,线性比0.8。
- 扩容不中断业务:扩容过程中支持数据增、删、改、查,及DDL操作(Drop/Truncate/Alter table),表级别扩容技术,扩容期间业务不中断、无感知。
- 支持在线升级:8.1.1及以上源版本支持大版本在线升级,8.1.3及以上源版本支持补丁在线升级,升级期间用户无需停止业务,业务存在闪级秒断。
高可靠
- 事务管理
- 支持事务块,用户可以通过start transaction命令显式启动一个事务块。
- 支持单语句事务,用户不显式启动事务,则单条语句就是一个事务。
- 分布式事务管理。支持全局事务信息管理,包括gxid、snapshot、timestamp的管理,分布式事务状态管理,gxid溢出的处理。
- 分布式事务支持ACID特性(Atomicity,Consistency,Isolation,Durability),数据强一致保证。
-
支持分布式死锁预防,保证在出现死锁时自动解锁或者预防死锁。
-
全方位HA设计
GaussDB(DWS)所有的软件进程均有主备保证,集群的协调节点(CN)、数据节点(DN)等逻辑组件全部有主备保证,能够保证在任意单点物理故障的情况下系统依然能够保证数据可靠、一致,同时还能对外提供服务。
- 安全
GaussDB(DWS)支持数据透明加密,同时可与数据库安全服务(DBSS)对接,基于网络隔离及安全组规则,保护系统和用户隐私及数据安全。GaussDB(DWS)还支持自动数据全量、增量备份,提升数据可靠性。
低成本
- 按需付费:GaussDB(DWS)按实际使用量和使用时长计费。您需要支付的费率很低,只需为实际消耗的资源付费。
- 门槛低:您无需前期投入较多固定成本,可以从低规格的数据仓库实例起步,后续随时根据业务情况弹性伸缩所需资源,按需开支。
dbt-gaussdbdws介绍
开源地址
在github的开源地址: dbt-gaussdbdws
项目已经编译提交到pypi
, 支持以下方式安装
pip install dbt-gaussdbdws
什么是dbt-gaussdbdws?
dbt-gaussdbdws 是一个专为 华为 GaussDB 和 GaussDB(DWS) 数据库设计的扩展包,提供了使 dbt-core 高效适配华为数据库的全部代码支持。它通过标准化和模块化的方式,帮助用户更轻松地完成数据建模、转换与管理任务,满足现代数据分析的高效性和可扩展性需求。
主要功能
使用 dbt-gaussdbdws,用户能够:
便捷的数据建模
通过配置文件快速定义表结构与数据模型,自动生成 SQL 脚本,无需手动编写复杂的代码。
高效的数据转换
支持 ELT(Extract-Load-Transform)流程中的数据清洗、去标准化、过滤、重命名和预聚合操作,使原始数据转换为适合分析的数据。
无缝的数据库集成
深度适配 华为 GaussDB 和 GaussDB(DWS),充分发挥数据库的分布式计算能力和性能优势。
与开发者工具链集成
遵循与软件工程类似的最佳实践,例如版本控制、模块化设计和 CI/CD 集成,使数据团队能够更快速、更安全地交付数据产品。
灵活的团队协作
通过定义清晰的数据依赖关系,提升跨团队协作的效率,减少数据开发过程中的重复劳动和错误。
在华为云部署项目
Demo介绍
开发任务中对Demo的要求如下:
1.通过本地 GaussDB 作为数据源,通过 dbt-core 将数据转换成 GaussDB(DWS)适用的数据,通过 GaussDB(DWS) 的API上传数据;
2.GaussDB(DWS) 接收到转换后的数据,利用 GaussDB(DWS) 高效的数据加载、转换和查询性能等优势,生成目标数据;
3.最后,通过RESTful API操作数据库供前端使用。
经过分析,采用Jaffle Shop来实现Demo。
Demo业务场景介绍
Jaffle Shop 假设了一家在线零售商的业务模型,模拟了客户购买行为的数据流转。其数据来源是CSV文件,包含 订单、客户和支付 等原始数据。这些数据经过 dbt-gaussdbdws 加载到GaussDB,在GaussDB中进行初步转换后,生成一系列干净、规范化的数据表。再同步到GaussDB(DWS),经过 dbt-gaussdbdws 的清洗,得到结果表(如汇总表或维度表),为分析师提供支持。
Jaffle Shop 是理解现代数据建模和转换的最佳实践的完美起点。
Demo部署架构
下图是Demo的部署架构,基于CCE容器化部署:
- 终端层
支持不同的类型终端访问Restful API接口
- 网关层
通过ELB进行负载均衡代理
- 中间层
在CCE中部署3个无状态服务:
jaffle-shop-gaussdb: 负责加载原始数据到GaussDB,并且在GaussDB中初加工数据
jaffle-shop-dws: 负责对GaussDB(DWS)中间表进行汇总加工,得到结果表
resource-service-python: 负责对GaussDB(DWS)结果表提供RESTful API接口
- 数据库层
GaussDB加工原始业务数据,主要负责初步清洗
GaussDB(DWS)加工汇总数据,得到结果表
Demo数据流图
下图从整体逻辑上介绍了每个过程的数据处理:
下图主要介绍在GaussDB中每个表的加工逻辑:
下图主要介绍在GaussDB(DWS)中每个表的加工逻辑:
Demo开源地址
Demo中涉及的开源项目地址如下(点开超链接即可跳转):
- jaffle-shop-gaussdb : 负责加载原始数据到GaussDB,并且在GaussDB中初加工数据
- jaffle-shop-dws : 负责对GaussDB(DWS)中间表进行汇总加工,得到结果表
- resource-service-python : 负责对GaussDB(DWS)结果表提供RESTful API接口
步骤一:云资源购买与配置
Demo部署主要依赖的云资源如下:
- VPC: 虚拟私有云,实现隔离
- ECS:制作镜像
- ELB:负载均衡和代理
- GaussDB:数据库加工原始数据
- GaussDB(DWS):数据库加工汇总数据
- CCE:容器化部署
- SWR: 存放容器镜像
- NAT网关: 容器中访问公网
购买ECS并克隆项目
ECS配置如下:
- 购买数量:1台
- 规格:鲲鹏通用计算增强型 | kc1.2xlarge.4 | 8vCPUs | 32GiB
- 镜像: Huawei Cloud EulerOS 2.0 标准版 64位 ARM版
- 登录凭证:密码
- 系统盘: 通用型SSD, 40GiB
具体购买操作可参考 快速购买和使用Linux ECS
购买后,待服务器启动,登录服务器按下面的操作继续。
安装Docker
安装Git
克隆项目并且制作镜像
# 创建工作目录
mkdir mydemo
cd mydemo/
# 克隆 jaffle-shop-gaussdb
git clone https://github.com/pangpang20/jaffle-shop-gaussdb.git
# 制作镜像 jaffle-shop-gaussdb:1.0.0 (注意:需要一段时间,根据实际网络而定)
cd jaffle-shop-gaussdb
docker build -t jaffle-shop-gaussdb:1.0.0 .
# 返回工作目录,克隆 jaffle-shop-dws
cd ..
git clone https://github.com/pangpang20/jaffle-shop-dws.git
# 制作镜像 jaffle-shop-dws:1.0.0
cd jaffle-shop-dws
docker build -t jaffle-shop-dws:1.0.0 .
# 返回工作目录,克隆 resource-service-python
cd ..
git clone https://github.com/pangpang20/resource-service-python.git
# 制作镜像 resource-service-python:1.0.0
cd resource-service-python
docker build -t resource-service-python:1.0.0 .
# 查看镜像(3个镜像)
docker images
上传镜像到SWR
进入容器镜像服务 SWR
,点击 组织管理
,点击 创建组织
点击总览
,点击右上角 登录指令
,复制到ECS中执行
上传镜像
sudo docker tag {镜像名称}:{版本名称} swr.cn-south-1.myhuaweicloud.com/{组织名称}/{镜像名称}:{版本名称}
sudo docker push swr.cn-south-1.myhuaweicloud.com/{组织名称}/{镜像名称}:{版本名称}
上传后在我的镜像
中可以查看
购买GaussDB并创建用户和数据库
GaussDB配置如下:
- 数据库引擎: GaussDB
- 数据库引擎版本:V2.0-8.201
- 内核引擎版本:505.2.0
- 实例类型: 集中式版
- 部署形态: 1主2备
- 性能规格: 通用型(1:4)| 4 vCPUs | 16 GB
- 存储空间: 40 GB
- 数据库端口: 默认端口8000
具体购买操作可参考 购买并通过界面化工具DAS连接GaussDB实例(推荐)
购买后,待数据库实例启动,登录DAS创建数据库和创建用户。
🔔 注意: 这里需要记录EIP或内网IP,数据库名,用户名,密码,后面需要。
购买GaussDB(DWS)并创建用户和数据库
GaussDB(DWS)配置如下:
- 版本选择:存算一体
- 部署类型: 集群
- 节点数量:3
- 存储容量:20G/节点
- 集群版本: 9.1.0.211
具体购买操作可参考 快速创建GaussDB(DWS)集群并导入数据进行查询
购买后,待数据库实例启动,可参考创建GaussDB(DWS)数据库和用户
🔔 注意: 这里需要记录EIP或内网IP,数据库名,用户名,密码,后面需要。
购买CCE和节点
CCE配置如下:
- 集群类型CCE: Turbo
- 容器网络模型云原生网络: 2.0
- 集群版本: v1.30
- 集群规模: 50 节点
- 集群 master 实例数: 3实例(高可用)
CCE集群创建后,创建节点,节点配置如下:
- 节点类型:弹性云服务器-虚拟机
- 节点规格:鲲鹏通用计算增强型 | kc2.2xlarge.4 | 8 vCPUs | 32 GiB
- 容器引擎:Docker
- 操作系统:Huawei Cloud EulerOS2.0
- 登录方式:密码
- 磁盘:默认
- 节点数量:3
具体购买操作可参考 在CCE集群中部署NGINX无状态工作负载
购买ELB
ELB配置如下:
- 实例类型:独享型
- 实例规格:弹性规格,应用型+网络型
- 所属VPC:和CCE在同一个VPC
- 弹性公网IP带宽:10 Mbit/s
具体购买操作可参考 实现单个Web应用的负载均衡
步骤二:部署Demo
在CCE中添加3个无状态的工作负载,具体如下:
jaffle-shop-gaussdb
创建并配置工作负载
参考下图配置基本信息:
参考下图配置容器基本信息:
参考下图配置容器环境变量,使用GaussDB的信息:
工作负载运行成功后如下:
进入容器执行数据处理
参考下图登录容器:
在容器中,测试GaussDB连接,使用下面的命令:
dbt debug
测试数据在seeds目录:
ls -ltr seeds/
执行dbt的数据导入,使用下面的命令:
dbt seed
此时,可以在GaussDB中查看到数据已经导入:
ANALYZE jaffle_shop.raw_customers;
ANALYZE jaffle_shop.raw_items;
ANALYZE jaffle_shop.raw_orders;
ANALYZE jaffle_shop.raw_products;
ANALYZE jaffle_shop.raw_stores;
ANALYZE jaffle_shop.raw_supplies;
SELECT
relname AS table_name,
reltuples::BIGINT AS table_row_count
FROM
pg_class c
JOIN
pg_namespace n ON c.relnamespace = n.oid
WHERE
n.nspname = 'jaffle_shop'
AND c.relkind = 'r' -- 只查询普通表
ORDER BY
table_name;
继续执行 dbt run 来运行项目,将raw开头的表经过数据清洗转换后加载到stg开头的表。
# 运行项目
dbt run
# 或者可以开启Debug模式,在运行过程中打印生成的每个 SQL 查询语句
dbt run -d --print
在GaussDB中查看数据:
ANALYZE jaffle_shop.stg_customers;
ANALYZE jaffle_shop.stg_order_items;
ANALYZE jaffle_shop.stg_orders;
ANALYZE jaffle_shop.stg_products;
ANALYZE jaffle_shop.stg_locations;
ANALYZE jaffle_shop.stg_supplies;
SELECT
relname AS table_name,
reltuples::BIGINT AS table_row_count
FROM
pg_class c
JOIN
pg_namespace n ON c.relnamespace = n.oid
WHERE
n.nspname = 'jaffle_shop'
AND c.relkind = 'r' -- 只查询普通表
AND c.relname like 'stg%' -- 只查询stg开头的表
ORDER BY
table_name;
把GaussDB的数据通过GaussDB(DWS)的API导入到GaussDB(DWS),按下面代码执行
# 复制配置文件
cp sample_trans_settings.yml trans_settings.yml
# 按说明修改参数
vi trans_settings.yml
# 执行数据迁移
source .venv/bin/activate
python3 datatrans.py
此时,可以在GaussDB(DWS)中查看到数据:
SQL语句同GaussDB一样。
jaffle-shop-dws
创建并配置工作负载
参考下图配置基本信息:
参考下图配置容器基本信息:
参考下图配置容器环境变量,使用GaussDB(DWS)的信息:
工作负载运行成功后如下:
进入容器执行数据处理
参考下图登录容器:
在容器中,测试GaussDB(DWS)连接,使用下面的命令:
source .venv/bin/activate
dbt debug
执行 dbt run
来运行项目,将stg开头的表经过数据清洗转换后加载结果表。
dbt run
此时,可以在GaussDB(DWS)中查看到数据:
ANALYZE jaffle_shop.customers;
ANALYZE jaffle_shop.order_items;
ANALYZE jaffle_shop.orders;
ANALYZE jaffle_shop.products;
ANALYZE jaffle_shop.locations;
ANALYZE jaffle_shop.supplies;
ANALYZE jaffle_shop.metricflow_time_spine;
SELECT
relname AS table_name,
reltuples::BIGINT AS table_row_count
FROM
pg_class c
JOIN
pg_namespace n ON c.relnamespace = n.oid
WHERE
n.nspname = 'jaffle_shop'
AND c.relkind = 'r'
AND c.relname not like 'stg%'
ORDER BY
table_name;
resource-service-python
创建并配置工作负载
参考下图配置基本信息:
参考下图配置容器基本信息:
参考下图配置容器环境变量,使用GaussDB(DWS)的信息:
参考下图配置服务:
工作负载运行成功后如下:
访问API接口
参考下图获取访问地址:
访问API(当然,DEMO没有做权限等控制)
获取API数据
项目开发心得体会
我将从对项目需求分析、代码开发、Demo实现等三个方面,分享dbt-gaussdbdws这个开源项目的心得体会。
关于项目需求分析
因为我对GaussDB(DWS)比较熟悉了,已经接触有很多年,所以还是有信心能做好这个项目。
但是后面仔细分析需求,发现除了需要支持GaussDB(DWS)还要支持GaussDB,这两个其实是有差别的,前者是OLAP,主要是做数据仓库,后者是OLTP,主要是做事务性的业务系统数据库。
所以,在接下来的几天中,我一直在犹豫,纠结,如果搞砸了,怎么办?
再加上我在数据治理领域也快10年了,但是 dbt-core
对我来说并不是常用的,更别说要基于源码开发插件,这个对我来说也是不小的挑战。
幸好,华为技术支持团队及时拉群,对我的疑问也及时答疑解惑,才让我有了勇气做下去。
关于代码开发
在我开发的过程中,参考了dbt-postgres的代码实现。但是,我发现postgres的内核比GaussDB要高,而且物化视图的系统表有些也不存在。这就需要我仔细对比GaussDB和postgres的差异,找出差异后就容易实现了。
另外,GaussDB(DWS)的最新版本9.x对于某些视图是支持的,而8.x是不支持的,基于此,我增加了参数化的类型,给默认值也是优先支持最新版本。
经过不断的调试、测试,终于完成项目的开发。
关于Demo实现
在考虑Demo如何实现的过程中,当时也是经过很多的思考。因为既要用到GaussDB,又要用到GaussDB(DWS),所以我就将jaffle_shop按数仓分层加工的思想来实现。
在GaussDB中做数据的标准化清洗,在GaussDB(DWS)中做数据的汇总加工,最后通过API对外提供数据服务。
为了实现Demo,我先对Demo的业务场景进行了分析,并且画了数据流图和建模,最后要基于CCE进行部署,画好部署架构。
接下来就是对Demo的开发,我先是开发基于虚拟机ECS的实现,然后再做容器化改造,这样一步一步,终于完成了Demo的开发、部署、验证。
- 点赞
- 收藏
- 关注作者
评论(0)