細說SQL與ETL之間的小秘密

来源:https://www.cnblogs.com/huaweiyun/archive/2023/12/06/17879504.html
-Advertisement-
Play Games

本文分享自華為雲社區《GaussDB資料庫SQL系列-SQL與ETL淺談》,作者:Gauss松鼠會小助手2。 一、前言 在SQL語言中,ETL(抽取、轉換和載入)是一種用於將數據從源系統抽取到目標系統的過程。ETL過程通常包括三個階段:抽取(Extract)、轉換(Transform)和載入(Loa ...


本文分享自華為雲社區《GaussDB資料庫SQL系列-SQL與ETL淺談》,作者:Gauss松鼠會小助手2。

一、前言

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

可參考上一篇文章:

https://blog.csdn.net/GaussDB/article/details/132752614

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寫法必不可少。

 

點擊關註,第一時間瞭解華為雲新鮮技術~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Parallel.ForEach Parallel.ForEach 是一個用於在集合上並行執行迭代操作的強大工具。它通過有效地利用多核處理器的能力來提高性能。Parallel.ForEach 不僅能夠簡化並行編程,而且它在執行簡單迴圈時可以提供比傳統迭代更好的性能。 下麵是一個簡單的示例,演示瞭如何 ...
  • 版本 Linux 6.5 背景 在學習cgroupv2的時候,想給子cgroup開啟cpu控制器結果失敗了: # 查看可以開啟哪些控制器 root@ubuntu-vm:/sys/fs/cgroup# cat cgroup.controllers cpuset cpu io memory hugetl ...
  • 使用 ssh-keygen 生成密鑰 參考資料 https://learn.microsoft.com/zh-cn/azure/virtual-machines/linux/create-ssh-keys-detailed 快速開始 以下 ssh-keygen 命令預設在 ~/.ssh 目錄中生成 ...
  • 家中有閑置的小新,是A卡正好合適裝linux 安裝前 關閉安全引導 通過關機鍵旁邊的重置口重新開機 OR 在開機界面按F2(開啟Hotkey 模式的要按Fn+F2) 進入BIOS 設置界面,關閉Secure Boot,這樣方便安裝linux 系統刻錄 linux有很多發行版 大家可以自行選擇,推薦U ...
  • ssh介紹 SSH,全稱為Secure Shell,是一種用於在網路中安全地進行遠程登錄和執行命令的協議。它通過加密的方式提供了對網路通信的保護,使得用戶可以在不安全的網路環境下安全地進行遠程管理和數據傳輸。 以下是 SSH 協議的一些重要特點和功能: 安全性:SSH 使用加密技術來保護數據在網路中 ...
  • 資料庫完整性包括正確性和相容性,DBMS通過提供約束條件機制、檢查方法和違約處理功能維護資料庫完整性,其中實體完整性通過主鍵確保唯一標識,參照實體性通過外鍵關聯,用戶定義完整性滿足特定應用需求,而觸發器和斷言提供事件驅動和複雜約束支持,共同構成資料庫保持一致性的關鍵機制。 ...
  • SQL(結構化查詢語言)的演變從IBM的SystemR開始,經過ANSI的標準化,近年來SQL標準變得更加豐富和複雜。SQL的特點包括綜合統一、高度非過程化、面向集合的操作方式以及提供多種使用方式的統一語法結構。在資料庫實例中,基本表獨立存在,而視圖是基本表導出的虛表,用於供人查看。資料庫模式結構包... ...
  • SQL ALTER TABLE 語句 SQL ALTER TABLE 語句用於在現有表中添加、刪除或修改列,也可用於添加和刪除各種約束。 ALTER TABLE - 添加列 要在表中添加列,請使用以下語法: ALTER TABLE 表名 ADD 列名 數據類型; 以下 SQL 向 "Customer ...
一周排行
    -Advertisement-
    Play Games
  • 最近做項目過程中,使用到了海康相機,官方只提供了C/C++的SDK,沒有搜尋到一個合適的封裝了的C#庫,故自己動手,簡單的封裝了一下,方便大家也方便自己使用和二次開發 ...
  • 前言 MediatR 是 .NET 下的一個實現消息傳遞的庫,輕量級、簡潔高效,用於實現進程內的消息傳遞機制。它基於中介者設計模式,支持請求/響應、命令、查詢、通知和事件等多種消息傳遞模式。通過泛型支持,MediatR 可以智能地調度不同類型的消息,非常適合用於領域事件處理。 在本文中,將通過一個簡 ...
  • 前言 今天給大家推薦一個超實用的開源項目《.NET 7 + Vue 許可權管理系統 小白快速上手》,DncZeus的願景就是做一個.NET 領域小白也能上手的簡易、通用的後臺許可權管理模板系統基礎框架。 不管你是技術小白還是技術大佬或者是不懂前端Vue 的新手,這個項目可以快速上手讓我們從0到1,搭建自 ...
  • 第1章:WPF概述 本章目標 瞭解Windows圖形演化 瞭解WPF高級API 瞭解解析度無關性概念 瞭解WPF體繫結構 瞭解WPF 4.5 WPF概述 ​ 歡迎使用 Windows Presentation Foundation (WPF) 桌面指南,這是一個與解析度無關的 UI 框架,使用基於矢 ...
  • 在日常開發中,並不是所有的功能都是用戶可見的,還在一些背後默默支持的程式,這些程式通常以服務的形式出現,統稱為輔助角色服務。今天以一個簡單的小例子,簡述基於.NET開發輔助角色服務的相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 第3章:佈局 本章目標 理解佈局的原則 理解佈局的過程 理解佈局的容器 掌握各類佈局容器的運用 理解 WPF 中的佈局 WPF 佈局原則 ​ WPF 視窗只能包含單個元素。為在WPF 視窗中放置多個元素並創建更貼近實用的用戶男面,需要在視窗上放置一個容器,然後在這個容器中添加其他元素。造成這一限制的 ...
  • 前言 在平時項目開發中,定時任務調度是一項重要的功能,廣泛應用於後臺作業、計劃任務和自動化腳本等模塊。 FreeScheduler 是一款輕量級且功能強大的定時任務調度庫,它支持臨時的延時任務和重覆迴圈任務(可持久化),能夠按秒、每天/每周/每月固定時間或自定義間隔執行(CRON 表達式)。 此外 ...
  • 目錄Blazor 組件基礎路由導航參數組件參數路由參數生命周期事件狀態更改組件事件 Blazor 組件 基礎 新建一個項目命名為 MyComponents ,項目模板的交互類型選 Auto ,其它保持預設選項: 客戶端組件 (Auto/WebAssembly): 最終解決方案裡面會有兩個項目:伺服器 ...
  • 先看一下效果吧: isChecked = false 的時候的效果 isChecked = true 的時候的效果 然後我們來實現一下這個效果吧 第一步:創建一個空的wpf項目; 第二步:在項目裡面添加一個checkbox <Grid> <CheckBox HorizontalAlignment=" ...
  • 在編寫上位機軟體時,需要經常處理命令拼接與其他設備進行通信,通常對不同的命令封裝成不同的方法,擴展稍許麻煩。 本次擬以特性方式實現,以兼顧維護性與擴展性。 思想: 一種命令對應一個類,其類中的各個屬性對應各個命令段,通過特性的方式,實現其在這包數據命令中的位置、大端或小端及其轉換為對應的目標類型; ...