dbt-core软件适配GaussDB开源开发介绍及其心得体会

举报
chenyunliang 发表于 2024/12/18 00:22:30 2024/12/18
【摘要】 本文介绍开源dbt-gaussdbdws的实现及其Demo部署和开发心得,希望能让其他开发者有参考

开源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分布式版形态整体架构图

1-1.png

  • Coordinator Node:协调节点CN,负责接收来自应用的访问请求,并向客户端返回执行结果;负责分解任务,并调度任务分片在各DN上并行执行。
  • GTM:全局事务管理器(Global Transaction Manager),负责生成和维护全局事务ID、事务快照、时间戳、Sequence信息等全局唯一的信息。
  • Data Node:数据节点DN,负责存储业务数据、执行数据查询任务以及向CN返回执行结果。

GaussDB 集中式形态整体架构

GaussDB 集中式形态整体架构如下:

图2 GaussDB集中式形态整体架构图

1-2.png

  • 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 集群逻辑架构图

1-3.png

  • 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容器化部署:

2-0.png

  • 终端层

支持不同的类型终端访问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数据流图

下图从整体逻辑上介绍了每个过程的数据处理:


2-1.png

下图主要介绍在GaussDB中每个表的加工逻辑:


2-2.png

下图主要介绍在GaussDB(DWS)中每个表的加工逻辑:

2-3.png

Demo开源地址

Demo中涉及的开源项目地址如下(点开超链接即可跳转):

步骤一:云资源购买与配置

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

参考 基于EulerOS部署Docker

安装Git

参考 基于EulerOS配置GitHub

克隆项目并且制作镜像

# 创建工作目录
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中执行

2-4.png

上传镜像

sudo docker tag {镜像名称}:{版本名称} swr.cn-south-1.myhuaweicloud.com/{组织名称}/{镜像名称}:{版本名称}

sudo docker push swr.cn-south-1.myhuaweicloud.com/{组织名称}/{镜像名称}:{版本名称}

上传后在我的镜像中可以查看

2-5.png

购买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

创建并配置工作负载

参考下图配置基本信息:

3-1.png

参考下图配置容器基本信息:

3-2.png

参考下图配置容器环境变量,使用GaussDB的信息

3-3.png

工作负载运行成功后如下:

3-4.png

进入容器执行数据处理

参考下图登录容器:

3-5.png

3-6.png

在容器中,测试GaussDB连接,使用下面的命令:

dbt debug


3-7.png

测试数据在seeds目录:

ls -ltr seeds/

3-8.png

执行dbt的数据导入,使用下面的命令:

dbt seed

3-9.png

此时,可以在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;

3-10.png

继续执行 dbt run 来运行项目,将raw开头的表经过数据清洗转换后加载到stg开头的表。

# 运行项目
dbt run

# 或者可以开启Debug模式,在运行过程中打印生成的每个 SQL 查询语句
dbt run -d --print

3-11.png

在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;

3-12.png

把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

3-13.png

此时,可以在GaussDB(DWS)中查看到数据:

SQL语句同GaussDB一样。

3-14.png

jaffle-shop-dws

创建并配置工作负载

参考下图配置基本信息:

4-1.png

参考下图配置容器基本信息:

4-2.png

参考下图配置容器环境变量,使用GaussDB(DWS)的信息

4-3.png

工作负载运行成功后如下:

4-4.png

进入容器执行数据处理

参考下图登录容器:

4-5.png

在容器中,测试GaussDB(DWS)连接,使用下面的命令:

source .venv/bin/activate
dbt debug

4-6.png

执行 dbt run 来运行项目,将stg开头的表经过数据清洗转换后加载结果表。

dbt run

4-7.png

此时,可以在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;

4-8.png

resource-service-python

创建并配置工作负载

参考下图配置基本信息:

5-1.png

参考下图配置容器基本信息:

5-2.png

参考下图配置容器环境变量,使用GaussDB(DWS)的信息

5-3.png

参考下图配置服务:

5-4.png

工作负载运行成功后如下:

5-5.png

访问API接口

参考下图获取访问地址:

5-6.png

访问API(当然,DEMO没有做权限等控制)

5-7.png

获取API数据

5-8.png

项目开发心得体会

我将从对项目需求分析、代码开发、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的开发、部署、验证。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。