數(shù)據(jù)管理基礎(chǔ):從結(jié)構(gòu)化到數(shù)據(jù)湖
如今,由于信息包含珍貴的信息,正確有效的數(shù)據(jù)管理尤為重要。在本文中,我們將討論數(shù)據(jù)管理的一些基礎(chǔ)知識,從結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)的區(qū)別到 OLAP 和 OLTP 另外,我們還將討論它們之間的差異。 ETL/ELT、關(guān)鍵概念,如數(shù)據(jù)湖和數(shù)據(jù)倉庫。
一 結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)
了解結(jié)構(gòu)化數(shù)據(jù)與非結(jié)構(gòu)化數(shù)據(jù)的區(qū)別在數(shù)據(jù)前后文中尤為重要。前一種是指數(shù)據(jù)庫表等具有特定定義格式的數(shù)據(jù)類型,其中表中的每一個字段都包含特定類型的數(shù)據(jù)(字符串、整數(shù)等)。
另一方面,非結(jié)構(gòu)化數(shù)據(jù)是一種不遵循之前定義的數(shù)據(jù)類型,但它非常靈活,因此很難組織在表格或數(shù)據(jù)庫中,如電子郵件、音頻或視頻文件。
圖 1. 結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)的示例
現(xiàn)在,這兩種類型的數(shù)據(jù)都起著非常重要的作用,各有利弊。 有些是:
表 結(jié)構(gòu)化與非結(jié)構(gòu)化數(shù)據(jù)的比較
這個例子反映了結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)的區(qū)別。結(jié)構(gòu)化數(shù)據(jù)是根據(jù)定義的字段組織的,而非結(jié)構(gòu)化數(shù)據(jù)是純文本,提取相關(guān)信息可能需要額外的分析。
# 從 CSV 文件載入結(jié)構(gòu)化數(shù)據(jù)
with open ( 'clients.csv' , mode= 'r' ) as csv_file:
csv_reader = csv.DictReader(csv_file)
for row in csv_reader:
first_name = row[ 'first_name' ]
last_name = row[ 'last_name' ]
age = row[ 'age' ]
email = row[ 'email' ]
print ( "First name:" , first_name)
print ( "Last name:" , last_name)
print ( "Age:" , age)
print ( "Email:" , email)
# 導(dǎo)出結(jié)構(gòu)化數(shù)據(jù):
# First name: John
# Last name: Doe
# Age: 35
# Email: john.doe@example.com
# …
# 從 txt 文件包含非結(jié)構(gòu)化數(shù)據(jù)(用戶評論)
with open ( 'customer_views.txt' , mode= 'r' ) as txt_file:
意見 = txt_file.read().split( '\n\n' )
for i, opinion in enumerate (opinions, 1 ):
print ( f"Opinion {i} :" )
# 非結(jié)構(gòu)化數(shù)據(jù)導(dǎo)出:
# 意見 1:今日,我在您的商店度過了一段美好的時光。工作人員非常友好,樂于助人。
# …
二 數(shù)據(jù)倉庫
數(shù)據(jù)倉庫是一個以結(jié)構(gòu)化和集中化的方式存儲大量數(shù)據(jù)的系統(tǒng)。它們允許將來自不同來源的數(shù)據(jù)轉(zhuǎn)換整合到一個單一和連貫的地方,以便進(jìn)行后續(xù)分析,從而獲得意見并支持決策。
為了提高數(shù)據(jù)質(zhì)量,數(shù)據(jù)倉庫通常需要清理和驗證流程來提高質(zhì)量和完整性,這一點(diǎn)非常重要。但不利的一面是,數(shù)據(jù)倉庫的維護(hù)成本通常很高,因為它必須滿足以上幾點(diǎn)。
數(shù)據(jù)架構(gòu)中除數(shù)據(jù)倉庫外,還有其它重要部件:
數(shù)據(jù)集市:這些是數(shù)據(jù)倉庫的子集,旨在滿足特定職責(zé)領(lǐng)域(如銷售或財務(wù)(部門)的分析需求,或者可以根據(jù)地理區(qū)域或產(chǎn)品線(分布式)建立。
Data Vault:這是一個由三個部分組成的數(shù)據(jù)倉庫設(shè)計模型:
中心:代表關(guān)鍵概念,例如客戶,通常在單個表中建模,具有唯一的標(biāo)識符(主鍵)。
鏈接:表示中心之間的鏈接或關(guān)系,通常用作獨(dú)立的表和外鍵。
衛(wèi)星:表示中心或鏈接的描述特征,通常用作獨(dú)立的表和外鍵。
該設(shè)計有利于數(shù)據(jù)審計、數(shù)據(jù)傳承和新數(shù)據(jù)集成,提供更加靈活和可擴(kuò)展的能力。
三 數(shù)據(jù)湖
數(shù)據(jù)湖是一個集中的數(shù)據(jù)存儲庫,允許大量數(shù)據(jù)以原始格式存儲、管理和共享(即未經(jīng)事先處理的數(shù)據(jù))。這就是為什么數(shù)據(jù)湖可以以不同的格式(結(jié)構(gòu)化、半結(jié)構(gòu)化、非結(jié)構(gòu)化數(shù)據(jù))存儲數(shù)據(jù),甚至不知道未來會如何使用,而數(shù)據(jù)倉庫需要提前轉(zhuǎn)換數(shù)據(jù),使其符合定義。
數(shù)據(jù)湖的靈活性使它成為一個有價值數(shù)據(jù)的組織理想系統(tǒng),希望在傳統(tǒng)系統(tǒng)的預(yù)處理中實(shí)施高級分析并找到它。此外,由于結(jié)構(gòu)不僵化,數(shù)據(jù)探索和分析敏捷,沒有限制。
最后,數(shù)據(jù)湖成為一個集中且高度可擴(kuò)展的區(qū)域,集成來自不同來源和格式數(shù)據(jù)的選項,用于存儲來自整個組織的原始數(shù)據(jù),即它們作為組織中不同團(tuán)隊和領(lǐng)域之間合作的交匯處,以提高部門之間的協(xié)同效應(yīng)和基于可靠性和全面數(shù)據(jù)的決策。
實(shí)施數(shù)據(jù)湖的良好實(shí)踐
在企業(yè)環(huán)境中,數(shù)據(jù)湖的實(shí)施對數(shù)據(jù)管理和分析的成功尤為重要。下面是一些有效、高效地實(shí)施數(shù)據(jù)湖的好實(shí)踐。
將數(shù)據(jù)湖劃分為多層(或區(qū)域)
為了提高數(shù)據(jù)湖中數(shù)據(jù)的組織性和可訪問性,建議將其分為多層,每層包含不同目的的特定類型的數(shù)據(jù)。最常見的層是:
原始/黃銅/貼源層:顧名思義,這一層包括原始形式的數(shù)據(jù),即從不同數(shù)據(jù)庫接收的數(shù)據(jù)。這一層包括任何未轉(zhuǎn)換的數(shù)據(jù),因此作為數(shù)據(jù)提取的入口點(diǎn)。此外,這一層的數(shù)據(jù)永久存儲(不可改變)并成為歷史記錄。
一致/標(biāo)準(zhǔn)化層:一般而言,原始數(shù)據(jù)的格式不同(例如 CSV、JSON 等等)輸入。這一層將所有這些格式轉(zhuǎn)換成標(biāo)準(zhǔn)格式,通常是 Parquet,為了進(jìn)一步分析,我們可以獲得一致且優(yōu)化的數(shù)據(jù),這是一種對大量數(shù)據(jù)進(jìn)行優(yōu)化的存儲類型。
清潔/銀/處理層:這一層充當(dāng)過濾器,因為在這里進(jìn)行數(shù)據(jù)轉(zhuǎn)換(清潔、集成和合并),以獲得方法和格式統(tǒng)一的層。此外,它可以規(guī)范數(shù)據(jù),并添加元數(shù)據(jù),以便于可追溯性和高效搜索。
表示層/金層/網(wǎng)絡(luò)層/網(wǎng)絡(luò)層:利用上一層的清理數(shù)據(jù),將業(yè)務(wù)規(guī)則應(yīng)用到數(shù)據(jù)中,這樣終端用戶(如數(shù)據(jù)科學(xué)家或分析應(yīng)用程序)就可以使用這些信息。它還可以通過應(yīng)用程序聚集或摘要來應(yīng)用轉(zhuǎn)換來改進(jìn)和改進(jìn)數(shù)據(jù)。
沙盒/探索層:這一層可以有選擇地開發(fā),因為它通常是原始層的副本,可以讀取和修改數(shù)據(jù)。從數(shù)據(jù)科學(xué)家的角度來看,這是一個有用的層,因為它可以在不丟失任何信息(不轉(zhuǎn)換)的情況下探索數(shù)據(jù),并且具有很大的靈活性。除了作為可選層,如果有必要,還可以構(gòu)建多個這樣的層。
圖 2.數(shù)據(jù)湖層
創(chuàng)建文件夾結(jié)構(gòu)
另一個好方法是在數(shù)據(jù)湖中創(chuàng)建文件夾結(jié)構(gòu),以便有效瀏覽數(shù)據(jù)。根據(jù)組織的興趣,這個文件夾結(jié)構(gòu)可以通過多種方式實(shí)現(xiàn):
數(shù)據(jù)隔離:數(shù)據(jù)分離是根據(jù)數(shù)據(jù)源、數(shù)據(jù)類型或業(yè)務(wù)單元進(jìn)行的。為了方便數(shù)據(jù)科學(xué)家瀏覽數(shù)據(jù),他們可以搜索與其用例相關(guān)的數(shù)據(jù)。
密鑰管理:若數(shù)據(jù)必須具有不同級別的權(quán)限,則使用密鑰管理,以便組織中并非所有用戶都能訪問所有數(shù)據(jù)。在這種情況下,訪問策略必須定義。
合規(guī)性要求:在不同的文件夾中存儲敏感數(shù)據(jù)可能很有趣,這樣他們就有了更嚴(yán)格的隱私和安全策略。
備份和災(zāi)難恢復(fù):根據(jù)備份頻率,可以有不同類型的文件夾。例如,有一個經(jīng)常備份的文件夾,包括永遠(yuǎn)不會丟失的數(shù)據(jù),或者相反,有一個永遠(yuǎn)不會備份的文件夾,因為它包含了不需要存儲的數(shù)據(jù),因為它可以重新生成。
實(shí)行審計與誠信控制
對任何一個數(shù)據(jù)湖來說,設(shè)計一系列的機(jī)制來保證數(shù)據(jù)在從一層傳輸?shù)搅硪粚訒r不會發(fā)生變化尤為重要。這類機(jī)制是:
數(shù)據(jù)審計:為了保證可追溯性,存儲對數(shù)據(jù)進(jìn)行了全部修改。
完整性檢查:在整個轉(zhuǎn)換過程中,通過一系列自動檢查來檢查數(shù)據(jù)的一致性。例如,如果格式轉(zhuǎn)換已經(jīng)實(shí)施,則必須驗證源中出現(xiàn)的文檔數(shù)量是否與目標(biāo)中出現(xiàn)的文檔數(shù)量相同,如果沒有,則必須重新啟動轉(zhuǎn)換過程。
四 OLAP 和 OLTP
OLAP(在線分析處理)和 OLTP(在線事務(wù)處理)是兩個數(shù)據(jù)處理系統(tǒng),允許與數(shù)據(jù)有效交互。雖然它們都是為滿足特定和互補(bǔ)的需求而設(shè)計的,但我們將在下面看到它們。
一方面,OLAP 它是一個數(shù)據(jù)處理系統(tǒng),致力于快速高效地分析大量數(shù)據(jù)。它是一種旨在對多維數(shù)據(jù)集進(jìn)行復(fù)雜查詢的技術(shù)。這些數(shù)據(jù)可能已經(jīng)從不同的來源合并、/或聚集,并使用優(yōu)化的存儲和處理技術(shù)來確保快速響應(yīng)時間。
它還提供對比分析、預(yù)測、趨勢和分段分析的能力,并提供快速不同粒度探索數(shù)據(jù)的互動工具,從而可以根據(jù)需要進(jìn)行非常深入的分析(數(shù)據(jù)鉆取)或更多的摘要(總結(jié))分析。
因此,OLAP 可以用來提取存儲在數(shù)據(jù)倉庫中的相關(guān)數(shù)據(jù)的有用信息,這些信息可以用來支持戰(zhàn)略決策。
另一方面,OLTP 它是一個用于即時交易管理的數(shù)據(jù)處理系統(tǒng)。它是一種主要用于操作數(shù)據(jù)庫系統(tǒng)的技術(shù),存儲銷售、訂單、支付等各種日常交易。
經(jīng)過改進(jìn),這些系統(tǒng)幾乎可以在沒有延遲的情況下立即支持大量交易。此外,它還保證了這些交易的完整性和并發(fā)性,即確保所有交易都將被執(zhí)行,數(shù)據(jù)庫將始終保持一致,并且可以并行執(zhí)行多個交易。
因此,OLTP 有利于為實(shí)時交易提供可靠的環(huán)境,確保數(shù)據(jù)插入、修改和刪除操作的快速、安全和一致執(zhí)行。
圖 3. OLAP 和 OLTP
下面的例子,我們可以看到 OLAP 和 OLTP 查詢之間的差異。OLAP 查詢通常用于分析目的,例如每月獲得總銷售額, OLTP 查詢側(cè)重于單一記錄和實(shí)時更新,例如銷售后庫存縮水。
# OLAP 查詢:按月分析銷售額
olap_query = """
SELECT month, SUM(total_sale)
FROM sales_table
GROUP BY month;
"""
# OLTP 查詢:庫存更新
oltp_query = """
UPDATE inventory_table
SET amount = amount - 1
WHERE product_id = 'product_to_sell';
"""
五 ETL/ELT
為了從數(shù)據(jù)中獲得價值,必須根據(jù)需要進(jìn)行數(shù)據(jù)處理和優(yōu)化。這通常涉及集成和處理數(shù)據(jù)的強(qiáng)大過程,使組織能夠?qū)⒃紨?shù)據(jù)轉(zhuǎn)換成可操作和有用的信息,從而有助于支持決策。
ETL 和 ELT 所有這些方法都允許我們進(jìn)行數(shù)據(jù)處理,但是,這兩種方法之間的關(guān)鍵區(qū)別在于操作數(shù)據(jù)的執(zhí)行順序。 ETL 按順序執(zhí)行數(shù)據(jù)的方法如下:
1.提取(E):提取階段包括從不同來源獲取數(shù)據(jù),可以是數(shù)據(jù)庫、應(yīng)用程序、文件系統(tǒng)等。在這個階段,信息是原始的,也就是說,它們只存儲在沒有任何類型處理的情況下。
2.轉(zhuǎn)換(T):轉(zhuǎn)換階段是為了獲得高質(zhì)量、連貫的數(shù)據(jù)層,對之前提取的數(shù)據(jù)進(jìn)行所有必要的操作。操作可能包括清理錯誤或重復(fù)的數(shù)據(jù)、格式轉(zhuǎn)換、聚集等。
3.載入 (L):載入階段包括所有載入已轉(zhuǎn)換為數(shù)據(jù)庫表或其他類型數(shù)據(jù)存儲(如數(shù)據(jù)倉庫)的數(shù)據(jù)。在這個階段,數(shù)據(jù)結(jié)構(gòu)化,優(yōu)化分析和后續(xù)查詢。
對于 ELT 就操作順序而言,操作順序是不同的:
1.提取(E):從各種來源提取數(shù)據(jù),例如 ETL。
2.載入(L):直接存儲數(shù)據(jù),無需轉(zhuǎn)換。
3.轉(zhuǎn)換(T):對于存儲的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,將涉及使用數(shù)據(jù)分析工具,復(fù)雜性 SQL 查詢或高級分析過程。
圖 4. ETL 和 ELT 工作流程
正如我們所看到的,ETL 和 ELT 這是一種相似的方法,但是它們在實(shí)施轉(zhuǎn)換的時間和方法上是不同的。咱們來看看它們的一些優(yōu)點(diǎn)和缺點(diǎn):
表 2.ETL 與 ELT
基于這些方法的特點(diǎn),我們可以說 ETL 由于數(shù)據(jù)在載入前進(jìn)行轉(zhuǎn)換,以保持?jǐn)?shù)據(jù)的一致性和完整性,所以用于數(shù)據(jù)倉庫, ELT 在數(shù)據(jù)湖中使用是有意義的,因為數(shù)據(jù)以原始的方式存儲,并且根據(jù)需要進(jìn)行轉(zhuǎn)換。
現(xiàn)在我們知道了這兩種方法,讓我們看一個能說明根本區(qū)別的方法。 Python 示例。
導(dǎo)入pandas為pddas
## ETL
# 步驟 1:提取數(shù)據(jù)
raw_data = pd.read_csv( 'sales_data.csv' )
# 步驟 2:轉(zhuǎn)換數(shù)據(jù)
raw_data[ 'Date' ] = pd.to_datetime(raw_data[ 'Date' ])
perceived_data = raw_data.groupby(raw_data[ 'Date' ].dt.month). sum ()
# 步驟 3:載入數(shù)據(jù)
perceived_data.to_csv( 'sales_per_month.csv' )
import pandas as pd
## ELT
# 步驟 1:提取數(shù)據(jù)
raw_data = pd.read_csv( 'sales_data.csv' )
# 步驟 2:載入數(shù)據(jù)
data_lake = raw_data.copy() # 模擬數(shù)據(jù)湖,存儲原始數(shù)據(jù)
# 步驟 3:轉(zhuǎn)換數(shù)據(jù)(在數(shù)據(jù)庫中)
data_lake[ 'Date' ] = pd.to_datetime(data_lake[ 'Date' ])
perceived_data = data_lake.groupby(data_lake[ 'Date' ].dt.month). sum ()
結(jié)論
本文從結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)的區(qū)別到數(shù)據(jù)倉庫和數(shù)據(jù)湖的技術(shù)及其良好的實(shí)踐,回顧了數(shù)據(jù)管理的基礎(chǔ)知識。此外,我們還強(qiáng)調(diào) OLAP 和 OLTP 它們之間的差異,以及 ETL/ELT 過程的相關(guān)性和代碼示例或應(yīng)用這些知識的用例。
本文來自微信微信官方賬號“數(shù)據(jù)驅(qū)動智能”(ID:Data作者:曉曉,36氪經(jīng)授權(quán)發(fā)布,_0101)。
本文僅代表作者觀點(diǎn),版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請在文中注明來源及作者名字。
免責(zé)聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請及時與我們聯(lián)系進(jìn)行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com