如今,正確有效的數(shù)據(jù)管理至關重要,因為數(shù)據(jù)中蘊含著寶貴的信息。在本文中,我們將討論數(shù)據(jù)管理的一些基礎知識,從結構化數(shù)據(jù)和非結構化數(shù)據(jù)之間的差異到 OLAP 和OLTP之間的差異。此外,我們還將討論 ETL/ELT、數(shù)據(jù)湖和數(shù)據(jù)倉庫等關鍵概念。
一 結構化數(shù)據(jù)與非結構化數(shù)據(jù)
在數(shù)據(jù)上下文中,了解結構化數(shù)據(jù)和非結構化數(shù)據(jù)之間的區(qū)別至關重要。前者是指具有特定和定義格式的數(shù)據(jù)類型,例如數(shù)據(jù)庫表,其中表中的每個字段都包含特定類型的數(shù)據(jù)(字符串、整數(shù)等)。
另一方面,非結構化數(shù)據(jù)是一種不遵循先前定義的模式的數(shù)據(jù)類型,但它很靈活,因此難以在表或數(shù)據(jù)庫內(nèi)組織,例如電子郵件、音頻或視頻文件等。
圖 1. 結構化數(shù)據(jù)與非結構化數(shù)據(jù)的示例
如今,這兩種類型的數(shù)據(jù)都發(fā)揮著非常重要的作用,并且各有優(yōu)缺點。 其中一些是:
表 1.結構化和非結構化數(shù)據(jù)的比較
此示例說明了結構化數(shù)據(jù)和非結構化數(shù)據(jù)之間的區(qū)別。結構化數(shù)據(jù)按定義的字段組織,而非結構化數(shù)據(jù)則是純文本,可能需要進行額外分析才能提取相關信息。
導入csv
# 從 CSV 文件加載結構化數(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)
# 輸出結構化數(shù)據(jù):
# First name: John
# Last name: Doe
# Age: 35
# Email: john.doe@example.com
# …
# 從 txt 文件加載非結構化數(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} :" )
# 非結構化數(shù)據(jù)輸出:
# 意見 1:今天我在你的商店度過了一段美妙的時光。工作人員非常友好和樂于助人。
# …
二、 數(shù)據(jù)倉庫
數(shù)據(jù)倉庫是一種以結構化和集中化的方式存儲大量數(shù)據(jù)的系統(tǒng)。它們允許將來自不同來源的數(shù)據(jù)轉換并集成到一個單一、連貫的地方,以便進行后續(xù)分析,從而獲得見解并支持決策。
數(shù)據(jù)始終保持最新且可訪問非常重要,為了提高數(shù)據(jù)質(zhì)量,數(shù)據(jù)倉庫通常需要清理和驗證流程來提高質(zhì)量和完整性。但不利的一面是,數(shù)據(jù)倉庫的維護成本往往較高,因為它們必須滿足上述幾點。
除了數(shù)據(jù)倉庫之外,數(shù)據(jù)架構中還有其他重要組件:
數(shù)據(jù)集市:這些是數(shù)據(jù)倉庫的子集,旨在滿足組織特定職能領域(例如銷售或財務(部門))的分析需求,或者可以根據(jù)地理區(qū)域或產(chǎn)品線(分布式)創(chuàng)建。
Data Vault:
它是一個數(shù)據(jù)倉庫設計模型,由三個組件組成:
中心:代表關鍵概念,例如客戶,通常在具有唯一標識符(主鍵)的單個表中建模。
鏈接:表示中心之間的鏈接或關系,通常作為單獨的表和外鍵。
衛(wèi)星:表示中心或鏈接的描述屬性,通常作為單獨的表和外鍵。
這種設計有助于數(shù)據(jù)審計、數(shù)據(jù)沿襲和新數(shù)據(jù)集成,提供更大的靈活性和可擴展性。
三 、數(shù)據(jù)湖
數(shù)據(jù)湖是一個集中式數(shù)據(jù)存儲庫,允許以原始格式(即未經(jīng)事先處理的數(shù)據(jù))存儲、管理和共享大量數(shù)據(jù)。這就是為什么數(shù)據(jù)湖不需要預定義的模式,而是可以以不同的格式(結構化、半結構化和非結構化數(shù)據(jù))存儲數(shù)據(jù),甚至不知道它們將來會如何使用,而數(shù)據(jù)倉庫則需要事先轉換數(shù)據(jù),以使其符合定義的模式。
數(shù)據(jù)湖的靈活性使其成為希望執(zhí)行高級分析并發(fā)現(xiàn)傳統(tǒng)系統(tǒng)預處理中可能被消除的有價值信息的組織的理想系統(tǒng)。此外,由于不強加僵化的結構,數(shù)據(jù)探索和分析是敏捷的,沒有限制。
最后,集成來自不同來源和格式的數(shù)據(jù)的選項使數(shù)據(jù)湖成為一個集中且高度可擴展的地方,用于存儲來自整個組織的原始數(shù)據(jù),即,它們充當組織內(nèi)不同團隊和領域之間協(xié)作的交匯點,提高部門之間的協(xié)同作用以及基于可靠和全面數(shù)據(jù)的決策。
實施數(shù)據(jù)湖的最佳實踐
數(shù)據(jù)湖的實施對于企業(yè)環(huán)境中數(shù)據(jù)管理和分析的成功至關重要。以下是一些有效和高效實施數(shù)據(jù)湖的最佳實踐。
將數(shù)據(jù)湖劃分為多個層(或區(qū)域)
為了改善數(shù)據(jù)湖中數(shù)據(jù)的組織和可訪問性,建議將其分為多個層,每個層包含特定類型的數(shù)據(jù)并用于不同的目的。最常見的層是:
原始/青銅/貼源層:顧名思義,此層包含原始形式的數(shù)據(jù),即從不同數(shù)據(jù)源接收的數(shù)據(jù)。此層包含未執(zhí)行任何轉換的數(shù)據(jù),因此它充當數(shù)據(jù)提取的入口點。此外,此層中的數(shù)據(jù)永久存儲(不可變)并作為歷史記錄。
一致/標準化層:通常,原始數(shù)據(jù)以不同的格式(例如 CSV、JSON 等)輸入。此層將所有這些格式轉換為標準格式,通常是 Parquet,這是一種針對處理大量數(shù)據(jù)進行優(yōu)化的存儲類型,以便我們獲得一致且優(yōu)化的數(shù)據(jù)以供進一步分析。
清潔/銀/處理層:此層充當過濾器,因為在這里對數(shù)據(jù)進行轉換(清潔、集成和合并),以獲得模式和格式統(tǒng)一的層。此外,可以規(guī)范化數(shù)據(jù)并添加元數(shù)據(jù)以方便可追溯性和高效搜索。
表示層/黃金層/應用層:使用來自上一層的已清理數(shù)據(jù),將業(yè)務規(guī)則應用于數(shù)據(jù),以便最終用戶(例如數(shù)據(jù)科學家或分析應用程序)可以使用這些數(shù)據(jù)。還可以應用轉換來增強和豐富數(shù)據(jù),例如通過應用聚合或摘要。
沙盒/探索層:此層可以選擇性開發(fā),因為它通常是原始層的副本,可以在其中讀取和修改數(shù)據(jù)。從數(shù)據(jù)科學家的角度來看,這是一個有用的層,因為他們可以在不丟失任何信息(無轉換)的情況下探索數(shù)據(jù),并且具有很大的靈活性。除了作為可選層之外,如果需要,還可以構建多個此類層。
圖 2.數(shù)據(jù)湖層
創(chuàng)建文件夾結構
另一個好的做法是在數(shù)據(jù)湖中創(chuàng)建文件夾結構,以便可以有效地訪問數(shù)據(jù)。根據(jù)組織的興趣,可以通過多種方式實現(xiàn)此文件夾結構:
數(shù)據(jù)隔離:根據(jù)數(shù)據(jù)的來源、數(shù)據(jù)類型或業(yè)務單元對數(shù)據(jù)進行分離。它方便數(shù)據(jù)科學家訪問數(shù)據(jù),以便他們能夠檢索與其用例相關的數(shù)據(jù)。
訪問控制:如果數(shù)據(jù)必須具有不同級別的權限,則使用訪問控制,以便組織中并非所有用戶都可以訪問所有數(shù)據(jù)。在這種情況下,必須定義訪問策略。
合規(guī)性要求:將敏感數(shù)據(jù)存儲在不同的文件夾中可能很有趣,這樣它們就有更嚴格的隱私和安全策略。
備份和災難恢復:根據(jù)備份頻率,可以有不同類型的文件夾。例如,有一個經(jīng)常備份的文件夾,其中包含永遠不會丟失的數(shù)據(jù),或者相反,有一個從不備份的文件夾,因為它包含不需要存儲的數(shù)據(jù),因為這些數(shù)據(jù)可以重新生成。
實施審計和誠信控制
對于任何數(shù)據(jù)湖來說,設計一系列機制來保證數(shù)據(jù)在從一層傳遞到另一層時不會遭受更改至關重要。這些機制是:
數(shù)據(jù)審計:存儲對數(shù)據(jù)所做的所有修改,以保證可追溯性。
完整性檢查:通過一系列自動檢查來驗證整個轉換過程中數(shù)據(jù)的一致性。例如,如果執(zhí)行了格式轉換,則必須驗證源中存在的文件數(shù)量與目標中存在的文件數(shù)量是否相同,如果不是,則必須重新啟動轉換過程。
四 、OLAP 和 OLTP
OLAP(聯(lián)機分析處理)和 OLTP(聯(lián)機事務處理)都是允許與數(shù)據(jù)進行有效交互的兩種數(shù)據(jù)處理系統(tǒng),盡管它們都是為了滿足特定且互補的需求而設計的,我們將在下面看到。
一方面,OLAP 是一種專注于快速高效分析大量數(shù)據(jù)的數(shù)據(jù)處理系統(tǒng)。它是一種旨在對多維數(shù)據(jù)集執(zhí)行復雜查詢的技術,這些數(shù)據(jù)集可能已從不同來源合并和/或聚合,并使用優(yōu)化的存儲和處理技術來確??焖夙憫獣r間。
它還提供進行比較分析、預測、趨勢和分段分析的能力,并提供交互式工具來快速、不同粒度地探索數(shù)據(jù),從而能夠根據(jù)需要執(zhí)行非常深入的分析(數(shù)據(jù)鉆取)或更多的摘要(匯總)形式的分析。
因此,OLAP 可用于提取有關存儲在數(shù)據(jù)倉庫中的數(shù)據(jù)的有價值的信息,這些信息可用于支持戰(zhàn)略決策。
另一方面,OLTP 是用于實時事務處理的數(shù)據(jù)處理系統(tǒng)。它是一種主要用于操作數(shù)據(jù)庫系統(tǒng)的技術,其中存儲各種日常交易,例如銷售、訂單、付款等。
這些系統(tǒng)經(jīng)過優(yōu)化,幾乎可以無延遲地實時支持大量交易,此外還保證這些交易的完整性和并發(fā)性,即保證所有交易都將被執(zhí)行,數(shù)據(jù)庫始終保持一致并且可以并行執(zhí)行多個交易。
因此,OLTP 有助于為實時交易提供可靠的環(huán)境,確??焖?、安全和一致地執(zhí)行數(shù)據(jù)插入、修改和刪除操作。
圖 3. OLAP 和 OLTP
在以下示例中,我們可以看到 OLAP 和 OLTP 查詢之間的區(qū)別。OLAP 查詢通常用于分析目的,例如獲取每月銷售總額,而 OLTP 查詢則側重于單個記錄和實時更新,例如銷售后的庫存縮水。
# 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ù)需要對數(shù)據(jù)進行處理和調(diào)整。這通常涉及實施強大的流程來集成和處理數(shù)據(jù),以便組織能夠將原始數(shù)據(jù)轉換為可操作且有價值的信息,從而有助于支持決策。
ETL 和 ELT 都是允許我們對數(shù)據(jù)進行處理的方法,但是,這兩種方法之間的關鍵區(qū)別在于操作數(shù)據(jù)的操作的執(zhí)行順序。 ETL 方法按順序對數(shù)據(jù)執(zhí)行以下操作:
1提?。‥).:提取階段包括從不同來源獲取數(shù)據(jù),這些來源可以是數(shù)據(jù)庫、應用程序、文件系統(tǒng)等。在此階段,數(shù)據(jù)是原始的,即它們沒有經(jīng)過任何類型的處理,它們只是被存儲了。
2轉換(T).:轉換階段是對先前提取的數(shù)據(jù)執(zhí)行所有必要的操作,以獲得高質(zhì)量且連貫的數(shù)據(jù)層。操作可能包括清理錯誤或重復的數(shù)據(jù)、格式轉換、聚合等。
3.加載 (L):加載階段包括加載已轉換為數(shù)據(jù)庫表或其他類型數(shù)據(jù)存儲(如數(shù)據(jù)倉庫)的所有數(shù)據(jù)。在此階段進行數(shù)據(jù)結構化,并針對分析和后續(xù)查詢進行優(yōu)化。
對于 ELT 來說,操作順序有所不同:
1.提?。‥):從各種來源提取數(shù)據(jù),如 ETL。
2加載(L).:數(shù)據(jù)不經(jīng)轉換直接存儲。
3.轉換(T):對存儲的數(shù)據(jù)執(zhí)行轉換,可能涉及使用數(shù)據(jù)分析工具、復雜的 SQL 查詢或高級分析過程。
圖 4. ETL 和 ELT 工作流程
正如我們所見,ETL 和 ELT 是類似的方法,但它們在執(zhí)行轉換的時間和方式上有所不同。讓我們看看它們的一些優(yōu)點和缺點:
表 2.ETL 與 ELT
根據(jù)這些方法的性質(zhì),我們可以說 ETL 用于數(shù)據(jù)倉庫,因為數(shù)據(jù)在加載之前進行轉換以保持一致性和完整性,而 ELT 用于數(shù)據(jù)湖是有意義的,因為數(shù)據(jù)以原始形式存儲并根據(jù)需要進行轉換。
現(xiàn)在我們了解了這兩種方法,讓我們看一個可以說明根本區(qū)別的 Python 示例。
將pandas導入為pd
## ETL
# 步驟 1:提取數(shù)據(jù)
raw_data = pd.read_csv( 'sales_data.csv' )
# 步驟 2:轉換數(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:轉換數(shù)據(jù)(在數(shù)據(jù)倉庫中)
data_lake[ 'Date' ] = pd.to_datetime(data_lake[ 'Date' ])
perceived_data = data_lake.groupby(data_lake[ 'Date' ].dt.month). sum ()
結論
在本文中,我們回顧了數(shù)據(jù)管理的基礎知識,從結構化數(shù)據(jù)和非結構化數(shù)據(jù)的區(qū)別到數(shù)據(jù)倉庫和數(shù)據(jù)湖等技術及其最佳實踐。此外,我們還強調(diào)了 OLAP 和 OLTP 之間的區(qū)別,以及 ETL/ELT 流程的相關性和代碼示例或應用這些知識的用例。
分享到微信 ×
打開微信,點擊底部的“發(fā)現(xiàn)”,
使用“掃一掃”即可將網(wǎng)頁分享至朋友圈。