隨著資料湖的興起,資料工程師需要更有效率的工具來處理和分析大量的原始資料。dbt 作為一個重要的資料轉換工具,允許工程師使用 SQL 建立可重複使用和模組化的轉換邏輯,有效地將原始資料轉換成乾淨且結構化的資料集。配合 SQL 的強大查詢和分析能力,dbt 可以大幅提升資料處理的效率和資料品質。這篇文章將會探討如何結合 SQL 和 dbt 來構建高效能的資料工程流程,並探討資料建模、資料轉換和最佳實務等關鍵議題。
資料工程的革新:SQL與dbt的協同應用
在當今的資料驅動時代,企業對於高效、精確的資料分析需求日益增長。隨著資料倉儲向資料湖的轉變,資料在轉換前就已進入儲存函式庫,使得工程師能夠將原始資料建模為乾淨、定義明確的資料集。資料建構工具(dbt)幫助我們進一步推動資料的應用。
資料建模技術的核心要素
資料建模是資料工程的基礎,它涉及將複雜的資料結構轉化為有意義的資訊。資料建模過程主要分為三個階段:概念階段、邏輯階段和物理階段。
概念階段
在概念階段,我們定義資料的高層次結構,識別關鍵實體及其關係。這一階段的重點是捕捉業務需求並將其轉化為資料模型。
邏輯階段
邏輯階段進一步細化概念模型,定義實體之間的具體關係和屬性。這一階段需要深入理解業務邏輯和資料流動。
物理階段
物理階段將邏輯模型轉化為實際的資料函式庫結構,包括表的設計、索引的建立等。這一階段需要考慮效能、擴充套件性等因素。
SQL在資料分析中的關鍵作用
SQL(結構化查詢語言)是與資料函式庫互動的主要語言,用於建立、管理及查詢資料函式庫中的資料。SQL的不僅能夠執行基本的CRUD(建立、讀取、更新、刪除)操作,還能進行複雜的資料分析和處理。
-- 建立一個名為 customers 的表格
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
#### 內容解密:
此SQL陳述式建立了一個名為 `customers` 的表格,包含 `id`、`name` 和 `email` 三個欄位。其中,`id` 是主鍵,自動遞增;`name` 和 `email` 分別儲存客戶的姓名和電子郵件地址,且 `email` 必須是唯一的。
dbt在資料轉換中的應用
dbt是一種專為分析工程設計的工具,它允許使用者使用SQL編寫可重複使用、模組化的資料轉換邏輯。dbt的核心優勢在於其能夠簡化資料轉換流程,提高開發效率,並確保資料的一致性和可靠性。
dbt專案結構
一個典型的dbt專案包含以下幾個關鍵部分:
- models:定義資料轉換邏輯的核心目錄。
- sources:描述原始資料來源的組態。
- tests:用於驗證資料品質的測試案例。
-- models/customer_order_summary.sql
WITH orders AS (
SELECT customer_id, SUM(order_amount) AS total_spent
FROM {{ source('jaffle_shop', 'orders') }}
GROUP BY customer_id
)
SELECT customers.name, orders.total_spent
FROM {{ ref('customers') }} AS customers
JOIN orders ON customers.id = orders.customer_id;
#### 內容解密:
此dbt模型計算每個客戶的總消費金額。首先,它從 `orders` 表格中彙總每個客戶的訂單金額,然後與 `customers` 表格聯結,輸出客戶姓名和總消費金額。
資料工程的最佳實踐
- 模組化設計:將複雜的資料轉換邏輯分解為小的、可重複使用的模組,提高程式碼的可維護性和可重用性。
- 測試驅動開發:編寫測試案例以驗證資料品質,確保資料轉換邏輯的正確性。
- 檔案自動生成:利用dbt的檔案生成功能,保持資料模型的最新檔案,提高團隊協作效率。
分析工程的真諦:超越資料管道與視覺化
在瞬息萬變的商業世界中,一個引人注目的概念——分析工程(Analytics Engineering)——應運而生。它迅速成為業界熱議的話題,被管理者追捧、IT 公司大力推廣,並令使用者對其所提供的可能性讚嘆不已。然而,在這股熱潮背後,許多人並不清楚分析工程的真正內涵。他們以為這僅僅是關於建立資料管道、設計驚豚的視覺化圖表,以及運用先進的演算法。殊不知,這種理解是大錯特錯!
試想一下,將精通分析的福爾摩斯(Sherlock Holmes)與擁有卓越工程技術的東尼·史塔克(Tony Stark,又稱鋼鐵俠)結合在一起。福爾摩斯代表了分析思維,而東尼·史塔克則象徵了工程技術。這兩者的結合正是分析工程的真實寫照,它融合了福爾摩斯的卓越問題解決能力與鋼鐵俠的尖端科技。
分析工程的核心價值
然而,如果你認為分析工程僅僅侷限於資料管道和視覺化,那就忽略了福爾摩斯所代表的資料分析師或商業分析師所帶來的深度演繹思維。這個領域是分析調查與軟體工程師或資料工程師技術的交匯點,正如東尼·史塔克所代表的那樣。
在探討分析工程之前,請暫停片刻,思考資料在您的業務中的重要性。為什麼您需要資料?答案在於對知識的追求。分析技術用於將原始資料轉化為可行的洞察,作為明智決策的基礎。它是一個強大的支援系統,提供事實來照亮您的業務現實。然而,它並不會替您做出決定,而是為您提供成功所需的資訊。
建立有效的分析工程
在開發令人印象深刻的「鋼鐵俠套裝」般的分析技術之前,請先汲取福爾摩斯的智慧。運用他的敏銳觀察力來識別和理解您面臨的核心挑戰。不要被視覺化和演算法所吸引,因為其他人對它們著迷而盲目跟隨。請記住,分析工程不僅僅是技術;它是一種管理工具,只有在與組織戰略和目標保持一致時才能取得成功。
關鍵績效指標(KPI)與業務現實的對齊
確保您的關鍵績效指標與業務現實相符,這將保證您的分析工程努力所產生的結果準確、具有影響力,並且不會令人失望。
分析工程的實踐之路
分析工程的偉大冒險並非始於構建資料管道或選擇先進的演算法。相反,它始於對組織知識缺口的深入反思。找出為什麼這些知識很重要,以及如何利用它們來推動業務成功。使用分析的變革力量作為您的針,在浩瀚的資料海洋中指引方向,走向成功。
在追求分析工程的過程中,請始終記住福爾摩斯的故事。避免構建過於複雜的「飛機」,當一輛樸實的「腳踏車」就足夠時。讓問題的複雜性和上下文細微差別來指導您的努力。請記住,分析不僅僅是關於技術;它是一盞管理的明燈,一種無價的工具,必須有目的和精確地使用它。讓它成為您通往成功的道路上恆久的伴侶。
為什麼我們寫這本文
在當今資訊爆炸的時代,重要的知識、概念和技術往往會在科技快速發展和創新追求中被掩蓋。在這場動態變革中,一些基本的概念有時會被無意中忽視。這種忽視並非因為它們不再重要,而是因為進步的速度太快。
資料建模的重要性
一個經常被忽視的基本概念是資料管理背景下的資料建模。值得注意的是,資料建模涵蓋了多種方法,包括 Kimball、概念建模、邏輯建模和物理建模等。我們認識到,在這個多元化的格局中,強調資料建模的重要性是一個迫切的需求,這也是我們撰寫這本文的主要原因之一。在這些頁面中,我們旨在闡明資料建模的複雜性和多個維度,以及它如何支撐更廣泛的分析工程領域。
隨著時間的推移,資料建模在保證堅實的資料管理系統方面的重要性逐漸淡出了人們的視野。這並不是因為它過時了,而是因為行業重點的轉移。新詞彙、工具和方法的出現,使得基本原理變得不那麼重要了。從傳統實踐到現代解決方案的轉變承諾了快速和效率,有時卻導致了基礎實力的喪失。
分析工程的演進與資料管理的未來
分析工程的興起帶來了資料管理的革新。這不僅僅是一個充滿流行詞彙的趨勢,更是迴歸資料管理基本原則的體現,呼應了商業智慧領域的理念。不同的是,現代工具、基礎設施和技術使得這些原則的實施更加高效。
為何記錄我們的思考?
我們之所以覺得需要記錄我們的思考,有兩個主要原因。首先,強調像資料建模這樣成熟概念的持久價值和意義至關重要。雖然這些方法已經存在一段時間,但它們為現代技術的發展提供了堅實的基礎。其次,我們希望強調分析工程並不是一個獨立的實體,而是商業智慧遺產的自然進步。透過將二者結合,組織可以構建更強韌的資料價值鏈,確保其資料不僅廣泛而且可操作,最終提高其效用。
本文的目的
本文不僅僅是對過去的懷舊之旅或對現狀的評論,更是對未來的藍圖。我們的目標是幫助組織重新審視其基礎,欣賞新舊技術的優勢,並將它們整合起來,以實作全面的資料管理方法。我們將探討資料建模和轉換的細節,解釋其重要性,並研究它如何與現代分析工程工具互動。我們的目標是為讀者提供完整的理解,使他們能夠加強其資料管理流程並充分利用其資料的潛力。
本文適合哪些人閱讀?
本文適合處理複雜資料管理和分析世界的專業人士、學生和愛好者。無論您是經驗豐富的老手,回憶起資料建模的基本原理,還是渴望瞭解從商業智慧到當代分析工程轉變的新晉分析師,我們的故事都能提供清晰的方向。
尋求加強其資料流程的組織將在本文中討論的成熟原則和現代工具的結閤中發現巨大的價值。總之,如果您希望透過結合過去的優勢和當前的創新來充分利用您的資料,本文將為您提供指導。
本文的結構
我們將本文分為六個章節:
第一章:分析工程
本章節追溯了資料管理從傳統的根據SQL的系統到創新工具(如Apache Airflow和dbt)的演變,每個工具都在改變我們處理和看待資料的方式。分析工程師角色橋接了資料工程和分析,確保我們的洞察可靠且可操作。
第二章:分析的資料建模
本章節探討了資料建模在當今分析驅動環境中的關鍵作用。我們將研究它如何幫助構建資料以實作高效分析,並探討資料標準化在減少重複性方面的重要性。
第三章:用於分析的SQL
本章節探討了SQL作為首要分析語言的持久優勢。我們將從概述資料函式庫的基本知識以及SQL如何作為與資料函式庫互動的主要語言開始。我們的旅程將涵蓋檢視在簡化查詢中的用處、視窗函式在先進計算中的強大功能,以及公共表表達式在最佳化複雜查詢中的靈活性。
第四章:使用dbt進行資料轉換
本章節提供了對dbt的詳細探索,超出了初步介紹。我們將研究dbt在資料分析生命週期中的關鍵作用,並展示它如何將原始資料轉換為結構化和可存取的模型。
結語
本文旨在為讀者提供對資料管理的全面理解,透過結合成熟的原則和現代工具。無論您是經驗豐富的專業人士還是新晉分析師,本文都將為您提供加強資料管理流程和充分利用資料潛力的指導。
本文架構與使用
本文主要介紹使用SQL和dbt進行分析工程的技術和方法,全書共分為六個章節,以下是各章節的簡介:
章節概覽
第一章:分析工程簡介
- 本章介紹分析工程的基本概念及其重要性,為讀者奠定基礎。
第二章:SQL基礎與分析工程
- 探討SQL在分析工程中的應用,為後續章節做好技術準備。
第三章:dbt簡介
- 介紹dbt(Data Build Tool)的基本概念及其在資料轉換工作流程中的作用。
第四章:使用dbt開發資料模型
- 詳細講解如何使用dbt開發、檔案化及測試資料模型,並深入解析dbt構件,包括YAML檔案的使用。
第五章:dbt進階主題
- 本章探討dbt的進階功能,包括不同型別的模型物化(如短暫模型、資料快照及增量模型),以及如何利用Jinja、宏和包最佳化程式碼效率,使其遵循DRY(Don’t Repeat Yourself)原則。同時介紹dbt語義層的作用及其在連線原始資料與有意義洞察中的關鍵角色。
第六章:構建端對端分析工程案例
- 結合前幾章所學的知識和技術,從零開始構建一個完整的分析工程案例,展示如何設計、實施和佈署全面的分析解決方案。重點關注資料建模的多樣化目的,並透過實際操作克服常見挑戰,提供有效的策略。
本文使用的排版慣例
- 斜體字:表示新術語、URL、電子郵件地址、檔名及副檔名。
等寬字型:用於程式清單,以及在段落中參照程式元素,如變數或函式名、資料函式庫、資料型別、環境變數、陳述式及關鍵字。等寬粗體字型:顯示應由使用者逐字輸入的命令或其他文字。等寬斜體字型:顯示應由使用者提供的值或由上下文決定的值所取代的文字。
致謝
- Rui Machado特別感謝他的妻子Ana和兩個女兒Mimi與Magui,感謝她們每天的激勵。同時感謝共同作者Hélder在夢想道路上的堅持與韌性。
- Hélder Russa感謝未來的妻子在最艱難時期的支援與鼓勵,也感謝父母讓他能夠繼續學習並追求夢想。同時感謝共同作者Rui Machado的積極反饋和建設性意見。
分析工程的演進與重要性
分析工程(Analytics Engineering)的歷史發展包含多項重要的里程碑和技術,這些進展塑造了今日的分析領域。這個領域的發展始於1980年代的資料倉儲(Data Warehousing),它為組織和分析商業資料奠定了基礎框架。電腦科學家比爾·恩蒙(Bill Inmon)在1980和1990年代持續發表相關研究,被廣泛認為為資料倉儲提供了第一個堅實的理論基礎。
隨後,拉爾夫·金博爾(Ralph Kimball)於1996年出版了其具有影響力的著作《資料倉儲工具包》(The Data Warehouse Toolkit),進一步推動了資料倉儲和商業智慧(Business Intelligence, BI)領域的發展。金博爾的工作奠定了維度建模(Dimensional Modeling)的基礎,標誌著分析領域的另一個重要里程碑。恩蒙和金博爾在20世紀晚期的貢獻,共同塑造了資料倉儲和分析的格局。
進入21世紀初,像谷歌和亞馬遜這樣的科技巨頭的出現,推動了處理海量資料的需求,促成了Google檔案系統(Google File System)和Apache Hadoop的釋出。這標誌著大資料工程(Big Data Engineering)時代的到來,專業人士利用Hadoop框架處理大量資料。
雲端運算與資料處理技術的革新
公有雲供應商如亞馬遜網路服務(Amazon Web Services, AWS)的崛起,徹底改變了軟體和資料應用的開發和佈署方式。AWS於2012年推出的Amazon Redshift,是早期的重要產品,它結合了線上分析處理(OLAP)和傳統資料函式庫技術。早期的Redshift需要資料函式倉管理員進行諸如清理和擴充套件等管理工作,以維持最佳效能。
內容解密:
Amazon Redshift是一種用於大資料分析的資料倉儲服務。它透過結合列式儲存、平行處理和壓縮技術,提供高效的查詢效能。Redshift在早期需要手動管理,如執行VACUUM命令來回收空間和維護資料分佈,這些任務對於保持系統效能至關重要。
-- 示例:執行VACUUM命令
VACUUM FULL my_table;
隨著雲原生技術的不斷演進,Redshift本身也經歷了顯著的改進。除了保留其核心優勢外,更新版本的Redshift以及Google BigQuery和Snowflake等雲原生平台,都簡化了許多管理任務,為各種規模的企業提供了先進的資料處理能力。這一演變凸顯了雲端資料處理生態系統中的持續創新。
現代資料堆積疊與分析工程的興起
現代資料堆積疊(Modern Data Stack)由Apache Airflow、資料建構工具(dbt)和Looker等工具組成,進一步改變了資料工作流程。隨著這些進展,「大資料工程師」的角色逐漸被淘汰,為更廣泛、更具包容性的資料工程師角色鋪平了道路。這一轉變在Maxime Beauchemin(Apache Superset和Airflow的創造者,以及Facebook和Airbnb的首批資料工程師之一)的文章《資料工程師的崛起》(The Rise of the Data Engineer)中得到了認可,該文強調了資料工程在行業中的日益重要性。
現代資料堆積疊組成
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title SQL與dbt協同應用開發高效能資料工程
package "資料庫架構" {
package "應用層" {
component [連線池] as pool
component [ORM 框架] as orm
}
package "資料庫引擎" {
component [查詢解析器] as parser
component [優化器] as optimizer
component [執行引擎] as executor
}
package "儲存層" {
database [主資料庫] as master
database [讀取副本] as replica
database [快取層] as cache
}
}
pool --> orm : 管理連線
orm --> parser : SQL 查詢
parser --> optimizer : 解析樹
optimizer --> executor : 執行計畫
executor --> master : 寫入操作
executor --> replica : 讀取操作
cache --> executor : 快取命中
master --> replica : 資料同步
note right of cache
Redis/Memcached
減少資料庫負載
end note
@enduml圖表翻譯: 此圖示展示了現代資料堆積疊的主要組成部分,包括從資料來源到最終的資料視覺化的整個流程。資料首先被攝入系統,然後儲存於適當的儲存解決方案中,接著經過轉換處理,最終用於分析和視覺化呈現。
分析工程在資料驅動決策中的角色
本章節將介紹分析工程領域及其在資料驅動決策過程中的作用。我們將討論分析工程在當今資料驅動世界中的重要性,以及分析工程師的主要角色。此外,我們還將探討分析工程生命週期如何用於管理分析過程,以及如何確保所產生資料和洞察的品質和準確性。我們還將討論當前趨勢和未來展望。
資料函式庫對分析工程的影響
在當今競爭激烈的商業環境中,資料已成為企業關注的焦點,無論是為了保持競爭優勢、改善內部流程,還是瞭解客戶行為。隨著新工具、新工作方式和新知識領域(如資料科學和商業智慧(BI))的出現,資料領域正變得日益複雜。技術的自然進步導致了資料分析和視覺化工具的過剩,每種工具都提供獨特的功能和特性。然而,這些工具的快速佈署導致了碎片化的景觀,要求個人和組織保持對最新技術發展的瞭解,同時對如何使用它們做出審慎的選擇。
資料函式庫的演進與重要性
幾十年來,電子試算表曾是儲存、管理和分析資料的標準技術,無論是在業務營運管理還是在分析層面。然而,隨著企業變得更加複雜,對資料相關決策的需求也隨之增加。資料函式庫的出現徹底改變了這一領域。資料函式庫可以被定義為一個有組織的結構化資訊或資料集合,通常以電子方式儲存在電腦系統中。這些資料可以是文字、數字、影像或其他型別的數字資訊。資料以一種便於存取和檢索的方式儲存,使用一套預定義的規則和結構(稱為模式)。
資料函式庫是分析工程的基礎,因為它們提供了一種有效的方式來儲存、組織和檢索大量資料,使分析師能夠輕鬆存取所需的資料,以進行複雜的分析,從而獲得原本難以或無法獲得的洞察。此外,資料函式庫可以被組態為確保資料完整性,保證被分析的資料是準確和一致的,從而使分析更加可靠和值得信賴。
資料函式庫在分析工程中的應用
資料函式庫在分析工程中的一個常見應用是資料倉儲技術,即構建和使用資料倉儲。資料倉儲是一個大型、集中式的資料儲存,旨在簡化資料的使用。資料倉儲中的資料通常從多種來源提取,如交易系統、外部資料來源和其他資料函式庫。然後,這些資料被清理、轉換和整合到一個單一、一致的資料模型中,通常遵循維度建模技術,如星型模式或Data Vault。
資料函式庫在分析工程中的另一個重要應用是資料探勘過程。資料探勘使用統計和機器學習技術來發現大型資料集中的模式和關係。透過這種方式,可以識別趨勢、預測未來行為和其他型別的預測。
資料函式庫技術與分析工程的未來
資料函式庫技術和資料科學家在資料科學的興起中發揮了至關重要的作用,透過提供一種有效的方式來儲存、組織和檢索大量資料,使資料科學家能夠處理大型資料集,並專注於從資料中取得知識。使用SQL和其他程式語言(如Python或Scala)與資料函式庫互動,使資料科學家能夠執行複雜的資料查詢和操作。此外,使用像Tableau這樣的資料視覺化工具,可以幫助將複雜的資料洞察以直觀和易於理解的方式呈現出來。
程式碼範例:使用SQL查詢資料函式庫
SELECT
customer_id,
COUNT(order_id) AS total_orders,
SUM(order_amount) AS total_spent
FROM
orders
GROUP BY
customer_id
ORDER BY
total_spent DESC;
內容解密:
這段SQL查詢用於從訂單表中檢索客戶ID、訂單總數和總消費金額。首先,使用GROUP BY陳述式按客戶ID分組資料,然後計算每個客戶的訂單總數和總消費金額。最後,使用ORDER BY陳述式按總消費金額降序排列結果。這種查詢可以用於分析客戶行為,找出最有價值的客戶。