主頁 > 資料庫 > 資料轉換工具DBT介紹及實操

資料轉換工具DBT介紹及實操

2023-03-03 09:06:24 資料庫

一、什么是DBT

dbt (data build tool)是一款流行的開源資料轉換工具,能夠通過 SQL 實作資料轉化,將命令轉化為表或者視圖,提升資料分析師的作業效率,dbt 主要功能在于轉換資料庫或資料倉庫中的資料,在 E(Extract)、L(Load)、T(Transform) 的流程中,僅負責轉換(transform)的程序, 通過 dbt插件,資料分析師能夠通過 SQL 直接建立表單并匹配資料,而無需關注創建 table 或 view 的程序,并且可以直觀地看到資料的流動;同時能夠運用 dbt 撰寫 SQL、進行測驗、以及包管理等功能,

二、DBT官方支持的資料源

Data Platform latest verified version
AlloyDB (same as dbt-postgres)
Azure Synapse 1.3.0
BigQuery 1.2.0
Databricks 1.3.0 ??
Dremio 1.3.0 ??
Postgres 1.2.0
Redshift 1.2.0
Snowflake 1.2.0
Spark 1.2.0
Starburst & Trino 1.2.0 ??

三、開源社區支持的資料源

Athena Greenplum Oracle
Clickhouse Hive Rockset
IBM DB2 Impala SingleStore
Doris & SelectDB Infer SQLite
DuckDB iomete SQL Server & Azure SQL
Dremio Layer Teradata
Exasol Analytics Materialize TiDB
Firebolt MindsDB Vertica
AWS Glue MySQL
Databend Cloud fal - Python models

四、DBT關于建模的兩個特點

1、DBT 能避免撰寫DDL陳述句

僅使用 查詢SQL 陳述句或 Python dataframe撰寫業務邏輯,并回傳所需的資料集,dbt 負責這些資料集的物化,從而構建可重用或模塊化的資料模型,這些資料模型可以在后續作業中參考,而不是從每次分析的原始資料開始,這顯著減少了資料查詢的運行時間,dbt還能通過函式、工具包等構建和管理模型的ER圖,

2、DBT 提供更可靠的分析

不再復制和粘貼 SQL,因為這可能會導致邏輯更改時出錯,dbt可以構建可重用的資料模型,并將其提取到后續模型和分析中,更改一次模型,該更改將傳播到其所有依賴項,發布特定資料模型的規范版本,封裝所有復雜的業務邏輯,此模型之上的所有分析都將包含相同的業務邏輯,而無需重新實作它,使用類似git一樣成熟的源代碼管理流程,如分支、拉取請求和代碼評審,在基礎資料上快速輕松地撰寫資料質量測驗,

五、DBT建模功能總結

特征 描述
將SQL查詢陳述句轉化為關系 資料模型通過撰寫固定格式的標準select陳述句來實作,DBT能夠識別一個模型組態檔內SQL陳述句之間的血緣關系,在將SQL陳述句執行為表或視圖的同時,提取表或視圖之間的關系進行展示,
固化模型的執行順序 通過DBT做復雜的資料轉換,將分多個步驟,關于每個步驟的執行順序,DBT 通過REF函式分階段實作轉換,
類似git的版本控制 DBT將模型撰寫、版本控制和每個模型和欄位撰寫描述等,通過類似git的模式進行管控,
資料模型管理功能 DBT 附帶了一個包管理器,使得模型代碼的公共和私有存盤庫能夠被有權限的其他人直接呼叫,
本地檔案匯入 如一些碼表資訊、CSV檔案等,能夠直接加載為資料庫中的表,
資料快照 DBT 提供了為某個時間點的原始資料創建快照的機制,

六、DBT資料建模全流程實操

1、搭建DBT環境

DBT可在windows\mac\linux等系統獨立部署運行,也可通過Docker部署,官方還提供DBT Cloud,本檔案的演示環境為在windows系統下的linux環境,DBT的運行依賴Python環境,推薦Python3.9+版本,本檔案的演示環境為Python3.9.7,

#1、安裝必須的插件
###centos或者RedHat環境下:
sudo yum install redhat-rpm-config gcc libffi-devel  python-devel openssl-devel
pip install --upgrade pip wheel setuptools

###ubutun或者deb、deepin環境下
sudo apt-get install  redhat-rpm-config gcc libffi-devel  python-devel openssl-devel
pip install --upgrade pip wheel setuptools

#2、安裝需要的資料源插件(按需選擇,如本檔案演示環境為Kingbase8,選擇postgres即可)
pip install \
  dbt-core \
  dbt-postgres \
  dbt-redshift \
  dbt-snowflake \
  dbt-bigquery

#3、安裝完畢后,查看版本號
dbt --version

依次運行完上述命令后,正常情況下會輸出以下內容,,證明安裝完畢!image.png

2、初始化DBT構建專案

dbt init dbt_project

運行完成后,會在當前用戶家目錄下生成.dbt目錄,目錄結構如下,一般訪問~/.dbt路徑即可到達該目錄,目錄下生成了以下子檔案夾及dbt_project.yml即可證明初始化成功,建議將該目錄遷移到某一個固定空間,如本文的D:/test/dbt_project
image.png

3、修改資料庫連接資訊

修改profiles.yml檔案,添加資料庫連接的URL、USERNAME、PASSWORD等資訊,保存后運行命令:

dbt debug

當輸出如下內容,即證明DBT成功連接到配置好的資料庫(本文連接的是測驗環境KingbBase)
image.png

4、啟動DBT

dbt run

輸出以下資訊,即可證明啟動成功!
image.png

5、為專案生成檔案

dbt docs generate

DBT初始化后自動加載一個dbt.mysql_first_model、dbt.my_second_dbt_model的資料模型,除此之外的模型都是自定義模型,具體輸出如下日志即可證明成功生成檔案,
image.png

6、打開Web頁面查看模型

dbt docs serve

啟動后自動記錄訪問日志,輸出如下:
image.png

web頁面本地訪問地址:http://127.0.0.1:8080

fd03ce47870286f365b77db04f5bf1f.jpg

7、自定義模型開發

本次資料建模從資料匯入、資料計算、模型生成三個步驟進行,模擬真實建模程序,

7.1、通過DBT匯入資料到資料庫

創建兩個個csv檔案fund_name_em.csv,放入專案下的seeds目錄,然后seeds目錄下再創建fund_data.yml,一次建模所需的檔案準備就已經完成,可以看到,僅需一個資料檔案,一個yml格式的組態檔,

fund_code,pinyin_abbr,fund_name,fund_type,pinyin_full
000001,HXCZHH,華夏成長混合,混合型-靈活,HUAXIACHENGZHANGHUNHE
000002,HXCZHH,華夏成長混合(后端),混合型-靈活,HUAXIACHENGZHANGHUNHE
000003,ZHKZZZQA,中海可轉債債券A,債券型-可轉債,ZHONGHAIKEZHUANZHAIZHAIQUANA
000004,ZHKZZZQC,中海可轉債債券C,債券型-可轉債,ZHONGHAIKEZHUANZHAIZHAIQUANC
000005,JSZQXYDQZQ,嘉實增強信用定期債券,債券型-長債,JIASHIZENGQIANGXINYONGDINGQIZHAIQUAN

fund_name_em.csv

seq,stock_code,stock_nme,percent,holding_number,holding_value,season,found_code
1,300438,鵬輝能源,6.4,587.41,36096.38,2022年2季度股票投資明細,001532
2,2340,格林美,3.73,2313.92,21056.69,2022年2季度股票投資明細,001532
3,601888,中國中免,3.22,78.01,18170.61,2022年2季度股票投資明細,001532
4,300568,星源材質,3.05,593.07,17222.69,2022年2季度股票投資明細,001532
5,300613,富瀚微,2.78,184.72,15664.18,2022年2季度股票投資明細,001532
6,2196,方正電機,2.59,1498.45,14624.82,2022年2季度股票投資明細,001532
7,601567,三星醫療,2.37,1007.9,12384.95,2022年2季度股票投資明細,001532
8,603259,蒟明康德,2.36,128.23,13335.06,2022年2季度股票投資明細,001532

fund_portfolio_hold_em.csv
image.png
其中fund_data.yml檔案的內容如下,解讀下關鍵資訊,name代表需要通過DBT匯入資料庫的模型名稱(就是表名稱),config代表自定義配置項(DBT會自動推斷欄位型別,如需指定可通過此方式完成):

version: 2
seeds:
  - name: fund_name_em
    config:
      column_types: 
        fund_code: varchar(16)
        
  - name: fund_portfolio_hold_em
    config:
      column_types: 
        fund_code: varchar(16)

以上準備作業完成后,運行命令實作資料匯入:

dbt seed

正確執行完成輸出的日志為:
image.png
查看資料庫可以發現已經實作了資料自動建表
image.png

tips??:多次執行dbt seed不會產生多份資料, 匯入前會先truncate清空老的資料,如果表結構有變化, 則需要洗掉表在執行seed命令,

7.2、創建自定義的模型

在DBT安裝根目錄下的models檔案夾,新建一個子目錄,目錄名即為專案名,如本次命名為fund_status, 然后在該目錄下新增一個sql檔案fund_portfolio_stats.sql,注意這個sql檔案,就是本次模型構建的關鍵,

-- 統計3只基金等權重買入后的重倉股占比
with fund_stock_map AS (
  SELECT fund_code, stock_code, stock_name, cast(percent / 3 AS DECIMAL(18,2)) AS percent
  from {{ ref('fund_portfolio_hold_em') }}
  -- WHERE fund_code IN ('001716', '002446', '005094')
  -- AND season = '2022年2季度股票投資明細'
  -- AND percent > 0
),
fund_info AS (
  SELECT fund_name, cast(fund_code as int4) as fund_code
  FROM {{ ref('fund_name_em') }}
  -- WHERE fund_code IN ('001716', '002446', '005094')
),
stock_sum AS (
  SELECT stock_code, stock_name,
  cast(SUM(percent) AS DECIMAL(18,2)) pct
  from fund_stock_map
  GROUP BY stock_code, stock_name
  HAVING SUM(percent) > 0.5
)
SELECT stock_sum.stock_code, stock_sum.stock_name, stock_sum.pct AS total_pct, 
fund_info.fund_code, fund_info.fund_name, fund_stock_map.percent AS indiv_pct
FROM stock_sum,fund_stock_map ,fund_info 
--ON fund_stock_map.stock_code = stock_sum.stock_code
--JOIN fund_info 
WHERE fund_info.fund_code = fund_stock_map.fund_code and fund_stock_map.stock_code = stock_sum.stock_code
order by pct desc

tips??:這里我們只用到了dbt最基本的ref宏, 可以用宏名稱替代具體的表名. 因為前面我們已經通過seed命令匯入了2個表, 所以這兩個表直接可以通過名字來進行參考.dbt的宏極為強大,具體可關注官網

重點來了!sql檔案保存完畢后, 通過后臺命令就可以生成這個sql檔案代表的這個模型!!!

dbt run -s fund_portfolio_stats

注意如果語法不符合所選資料源的規范,或者欄位型別不匹配等,如果針對自己撰寫的sql檔案不確定對錯,可在相關資料源進行執行驗證,比如本次欄位不匹配造成的錯誤如下:
image.png
sql檔案被DBT正確執行后,輸入的日志為:
image.png
這種自定義的模型并不會將表實際落地到資料庫,而是保存為一個視圖,這一點需要注意,在執行完以上命令后,再次在命令列依次執行dbt docs generate和dbt docs serve, 會在瀏覽器里打開檔案頁面,回到Dbeaver查看效果如下:
image.png
在Web界面打開該資料模型的血緣關系圖,可以明顯看到最終模型所用到的表,效果如下:
image.png

七、DBT使用心得

7.1 缺點

7.1.1 一定的使用門檻

DBT作為一款資料建模工具,其用戶相對偏向資料工程師、資料分析師等有一定技術背景的人員,如一次自定義模型的建設,既要通過命令列操作(可交給運維人員),也要完成優秀且沒有錯誤的SQL腳本書寫,

7.1.2 無法一套SQL隨處運行

SQL腳本需要根據DBT連接的資料源進行適配,如連接postgres、hive、Oracle等資料源時,所需的SQL檔案需要改造為符合當前資料源的語法,無法做到一個SQL,隨處建模,

7.1.3 無法一套SQL隨處運行

國內技術檔案偏少,國內常用資料源支持不足,

7.1.4 無認證流程

當DBT的web服務啟動后,所有人能夠訪問,沒有權限管控或者賬號密碼體系,

7.2 優點

7.2.1 統一資料建模規范

維護統一的基礎資料源,資料建模做了扎口,當所有人通過DBT做資料模型建設時,資料模型不僅可復用,也包含資料血緣關系展示,并且當基礎資料源有變更時,已有資料模型將自動更新,規范資料模型建設,提高了資料模型的復用性、穩定性,有效降低重復建設等成本問題,

7.2.1 資料源支持豐富

除了業界常用的數倉組件外,也支持如Oracle、Postgres等關系型資料庫以及一些時序資料庫,能做到利用DBT統一連接公司資料源供下游資料建模團隊使用,

7.2.3 自動物化查詢

實操發現DBT能夠避免人工建表,無論是資料匯入,還是資料模型,都能自動實作建表或建視圖,避免了人工出現的失誤和誤刪表等不可控操作,從一定程度上保證了資料質量,統一了源資料的口徑等,

7.2.4 資料模型版本管理功能

官網提到了資料模型歷史版本的管理功能,類似git,生產環境下,比較方便資料模型變更、回滾、快照保存等,本次測驗也可以發現,新建模型的目錄下會生成.gitkeep檔案
image.png

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/545635.html

標籤:大數據

上一篇:《資料治理行業實踐白皮書》正式發布,開辟資料治理新范式(附下載)

下一篇:推薦一款好用的資料一致性校驗工具

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more