首页 > 数据库 >GaussDB数据库SQL系列-SQL与ETL浅谈

GaussDB数据库SQL系列-SQL与ETL浅谈

时间:2024-11-25 16:45:46浏览次数:9  
标签:浅谈 -- GaussDB SQL 数据 ETL 加载

一、前言
在SQL语言中,ETL(抽取、转换和加载)是一种用于将数据从源系统抽取到目标系统的过程。ETL过程通常包括三个阶段:抽取(Extract)、转换(Transform)和加载(Load)。但这些其实都脱离不了数据库系统,本节从GaussDB数据库生态出发,给大家简单讲一下SQL 与 ETL的过程与关系。

二、SQL与ETL的概述
SQL(结构化查询语言)

SQL是一种用于管理关系数据库系统的标准编程语言(例如、MySql、GaussDB等)。它用于查询、插入、更新和删除数据库中的数据。SQL语言主要用于数据库管理系统的交互,它并不是一种通用的编程语言,而是专门设计用于操作关系数据库的。

ETL(Extract-Transform-Load)

ETL是一个过程,用于从源系统提取数据,将其转换为目标系统所需的格式,然后将其加载到目标系统库。ETL是数据集成的一部分,用于将分散的、不一致的数据整合到一起,然后通过统一的接口将数据传输到目标系统库进行分析和应用。

ETL是数据库处理数据的重要环节,当在ETL过程中使用SQL时,通常涉及如下图操作。

​​在这里插入图片描述

三、ETL过程中的SQL示例(GaussDB)
本章节涉及到的SQL适用于GaussDB等数据库。

1、提取(Extract)
在ETL过程中,抽取是将数据从源系统中获取并传输到目标系统的第一步。这可能涉及到连接到数据库、读取文件、调用API等操作。在抽取数据时,需要考虑以下几个方面:

数据源的选择:根据具体业务需求选择数据源,并考虑数据量、数据质量、数据类型等因素。
抽取方式的选择:可以选择增量、全量更新等不同的抽取方式。
数据抽取的调度:需要考虑时间、频率、并发等因素,以确保数据的及时性和准确性。
常用SQL语句示例:

1)全量(表)提取

SELECT * FROM source_table;

2)增量提取(例如,根据日期字段,按天、月、年提取,或其他维度)

SELECT * FROM source_table WHERE t_date=’20230907’;

Tip:根据业务需求提取全字段或者指定字段。

2、转换(Transform)
在ETL过程中,转换是对抽取的数据进行清洗、转换、过滤和格式化等操作,以满足目标系统的需求。转换的主要操作包括:

数据清洗:包括去重、填充缺失值、异常值处理等操作,以确保数据的质量和准确性。
数据转换:包括数据类型转换、字段计算、格式化等操作,以使数据符合目标系统的数据结构和数据类型。
常用SQL语句示例:

1)数据行去重

--数据行去重(随机保留或者优先保留)

SELECT order_id, user, product, number
  FROM (
     SELECT * ,ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY proctime ASC) as row_num
     FROM Orders)
  WHERE row_num = 1;


-- 参数说明:
-- ROW_NUMBER(): 从第一行开始,依次为每一行分配一个唯一且连续的号码。
-- PARTITION BY col1[, col2...]: 指定分区的列,例如去重的键。
-- ORDER BY time_attr [asc|desc]: 指定排序的列。升序( ASC )排列指只保留第一行,而降序排列( DESC )则指保留最后一行。
-- WHERE rownum = 1: 取ROW_NUMBER()生成的编号1。

可参考上一篇文章:

GaussDB数据库SQL系列-数据去重_Gauss松鼠会的博客-CSDN博客

2)字段清洗(例如:去空格)

通过TRIM()、REPLACE()、CASE WHEN … THEN … END等关键字或函数进行异常字符处理。

--清洗空格

SELECT length(' 去空格 ')
              ,length(TRIM(' 去空格 '))       
              ,length(REPLACE(' 去空格 ',' ','')) 
              ,length(CASE WHEN ' 去空格 ' <>'去空格' THEN '去空格' END);

-- 说明:
-- Trim(),通过去空格函数进行清洗
-- Replace(), 通过替换清洗
-- case when … then …end 与字典表比对进行清洗,此处的与字典表比对省略,具体根据业务需求进行。

3)非法日期清洗

创建日历表calendar,存储19000101到30001231的所有日期,通过比对判断是否为合规的日期格式。

--与字典表比对
SELECT *,CASE WHEN create_date NOT IN (SELECT c_date FROM calendar) THEN  0  ELSE 1 END status FROM T1

--剔除所有非法日期行
DELETE FROM T1 WHERE status =0;

Tip: 上文写法适合GaussDB等关系型数据库,且都是比较基础的示意说明,具体需要根据业务需要进行编写。

3、加载(Load)
在ETL过程中,加载是将转换后的数据加载到目标系统中,通常是数据仓库或数据集市。加载的主要操作包括:

数据映射。将转换后的数据映射到目标系统中,包括表、字段等。
数据加载。将转换后的数据加载到目标系统中,并进行数据校验、数据整合等操作。
常用SQL语句示例:

1)增量表(累加,字段、表一 一映射)

INSERT INTO target_table (column1, column2, column3) SELECT column1, column2, column3 FROM source_table;

2)全量表(全删全插,字段、表一 一映射)

--情况目标表

TRUNCATE table target_table;

--全量插入

INSERT INTO target_table (column1,column2,…) SELECT column1,column2,… FROM source_table;

3)作业重跑,清空指定分区数据,重新加载

--清理表分区的数据

--清空分区etl_date

ALTER TABLE orders TRUNCATE PARTITION etl_date;

--或者清空分区etl_date=20230911。

ALTER TABLE orders TRUNCATE PARTITION for (20230911);

--插入新数据

INSERT INTO target_table (column1,column2,…,etl_date) SELECT column1,column2,…,etl_date FROM source_table;

Tip:数据加载涉及到的算法及表设计非常复杂,例如,涉及历史拉链表(关链、开链)、全量表(全删全插)、增量表(累加)等。设计时需要从数仓/数据集市的全局架构出发,确保合理、准确、高效等。

四、附DataArts Studio介绍
华为云GaussDB相关的生态工具DataArts Studio数据治理中心是一个强大的ETL工具和技术,它可以帮助开发人员设计、编写和管理ETL脚本。以下是DataArts Studio在这些方面的主要功能和优势:

可视化的ETL设计:DataArts Studio提供了一个直观的可视化界面,使开发人员能够以图形化方式设计和配置ETL流程。通过拖放组件和连接线,开发人员可以轻松定义数据提取、转换和加载的步骤,而无需编写复杂的代码。
内置的数据转换和处理功能:DataArts Studio提供了丰富的内置转换和处理组件,如数据清洗、数据格式转换、数据合并、数据计算等。开发人员可以直接使用这些组件,而无需自行编写转换逻辑,从而加快开发速度并减少错误。
强大的数据连接和集成能力:DataArts Studio支持与各种数据源的连接和集成,包括关系型数据库、文件系统、云存储、API接口等。开发人员可以轻松地配置数据源连接,并直接从这些数据源中提取数据。
可扩展的脚本编写和管理:虽然DataArts Studio提供了可视化的ETL设计界面,但它也支持自定义脚本编写。开发人员可以使用内置的脚本编辑器编写自定义的ETL脚本,以满足特定的需求。此外,DataArts Studio还提供了ETL脚本的版本控制和管理功能,方便团队协作和脚本的维护。
实时监控和调试:DataArts Studio提供了实时监控和调试功能,开发人员可以实时查看ETL流程的执行状态、数据处理的结果和错误信息。这有助于快速发现和解决问题,提高ETL脚本的质量和可靠性。
五、小结
SQL与ETL的关系在于,SQL语言通常用于ETL过程中的数据提取和转换阶段。通过使用SQL查询语句,可以从源数据库中提取所需的数据,然后使用SQL语句对数据进行必要的转换和处理,以便将其加载到目标系统。

当然了,现在好多企业都有专门的ETL工具,但其实后台都是通过类似“PYTHON + SQL”、“PERL + SQL”等方式实现的,其重点在于ETL过程中的SQL处理。 同样,在GaussDB数据库生态中也是不可或缺的,掌握GaussDB数据库相关的SQL写法必不可少。

——结束





详情参考: https://support.huaweicloud.com/gaussdb/index.html

标签:浅谈,--,GaussDB,SQL,数据,ETL,加载
From: https://www.cnblogs.com/xxxmut/p/18567916

相关文章

  • GaussDB数据库SQL系列-UNION & UNION ALL
    一、前言SQL(结构化查询语言)是一种用于管理关系型数据库的标准语言。它允许用户通过使用SQL语言来操作数据库中的数据。而在SQL中,UNION是一个非常强大的功能,它可以将多个SELECT语句的结果合并成一个结果集。本文将以GaussDB数据库为例,介绍一下UNION操作符的使用。二、GaussDBUN......
  • GaussDB数据库SQL系列-表连接(JOIN)
    一、前言SQL是用于数据分析和数据处理的最重要的编程语言之一,表连接(JOIN)是数据库中SQL的一种常见操作,在实际应用中,我们需要根据业务需求从两个或多个相关的表中获取信息。二、GaussDBJOINGaussDB是华为推出的企业级分布式关系型数据库。GaussDBJOIN子句是基于两个或者多个表......
  • GaussDB数据库基础函数介绍-上
    ​目录一、函数在数据库中的作用二、GaussDB常用基础函数介绍与示例1、数字操作函数2、时间和日期处理函数3、类型转换函数4、数组函数5、范围函数6、窗口函数7、聚集函数8、安全函数9、系统信息函数10、动态脱敏函数.Tip:由于篇幅缘故,“5.范围函数、6.窗口函数、7.......
  • JDBC连接GaussDB云数据库操作示例
    ​目录一、实验环境二、登录华为云创建测试库表1、登录GaussDB云数据库2、建库、建表,用于测试3、新增普通角色(用户)用于登录及访问测试(可选)4、获取对应的公网IP三、创建java工程1、创建java工程2、添加jar包3、编辑Java代码四、执行并查看测试结果一、实验环境1、本......
  • GaussDB云数据库SQL应用系列-视图管理
    ​一、前言GaussDB是一款基于云计算技术的高性能关系型数据库,支持多种数据模型和分布式架构。在GaussDB中,视图管理是非常重要的一项功能,它可以帮助用户更方便地管理和查询数据。数据库视图管理是指对数据库中的视图进行创建、修改、删除、查询等操作的过程。二、准备条件参考......
  • GaussDB云数据库SQL应用系列—索引管理
    一、前言随着互联网的快速发展,数据量呈现爆炸式增长。如何高效地管理和查询这些数据成为了企业面临的重要问题。而数据库索引作为数据库优化的关键手段之一,对于提高数据库性能和查询效率具有重要作用。本文将介绍GaussDB云数据库的索引创建和管理方法,并结合实际应用场景进行分析......
  • GaussDB整体性能慢分析
    @目录问题描述问题现象告警业务影响原因分析分析步骤分析定位方法步骤一步骤二步骤三步骤四CPU满I/O满或者I/O异常内存满网络异常步骤五并发问题数据库配置问题异常等待事件长时间性能下降短时性能抖动不优SQL问题描述整体性能慢。不满足客户作业对时延要求或者不满足客户预期。......
  • MySQL误删表数据,如何快速恢复丢失的数据?
    第一步:登录数据库cd/www/server/mysql/binmysql-uroot-p第二步:查看binlog日志是否打开showvariableslike'log_%'; 查看下binlog日志列表binlog日志文件目录在/www/server/data目录下showmasterlogs; 下载生成sql文件/www/server/mysql/bin/mysq......
  • GaussDB云数据库SQL应用系列-基础使用
    ​目录一、前言二、前提条件1、连接数据库实例2、GaussDB实例正常运行三、操作示例1、选择实例并进入SQL执行界面2、创建数据库用户3、创建数据库4、创建SCHEMA5、创建表(增删改查)1)创建3张表,并初始化一些数据2)假设查询场景,并通过SQL实现一、前言随着云计算技术的不......
  • GaussDB内存过载分析
    问题现象数据库进程内存占比较高长时间占比较高观察监控平台内存占用的变化曲线,无论当前数据库是否有业务在运行,数据库进程内存占总机器内存的比例长时间处于较高状态,且不下降。执行作业期间占比较高数据库进程在没有业务执行时,内存使用持续处于较低的状态,当有业务执行时,内......