什麼是冪等資料管道? - Alaro

banq發表於2022-08-02

牛津詞典中定義的冪等“是集合中的一個元素,當它自身相乘或以其他方式運算時,其值不變。”

1.什麼是冪等資料管道
執行從源獲取資料並將其多次載入到關聯式資料庫中的管道可能會導致資料庫中存在重複值,從而導致錯誤的指標和許多其他錯誤。使管道冪等將防止這種情況發生,並使您成為更好的工程師。
換句話說,使用相同的輸入多次執行資料管道將始終產生相同的輸出。

2. 冪等資料管道的優點
下面列出了冪等資料管道的一些優點

  • 確保在回填的情況下不會對儲存位置產生重複資料
  • 它使管道中的轉換結果可預測
  • 它有助於減少資料儲存費用
  • 它還有助於刪除舊的/不需要的資料


3.如何使資料管道具有冪等性
資料管道中最常見的步驟是

  • 從一個或多個源中提取資料
  • 執行一些轉換
  • 載入到資料倉儲

冪等管道將確保如果列出的步驟中發生任何錯誤,仍會產生預期的結果作為輸出。

如果在載入階段發生錯誤,資料沒有完全載入到資料倉儲中,我們的冪等管道應該從資料倉儲中刪除半載入的資料,並在管道重新執行時將新的資料儲存為完全載入的資料. 僅當資料管道在重新執行時將生成所需的相同資料時才建議這樣做。這種模式被稱為刪除-寫入模式。Spark、Snowflake 等技術提供了其他冪等設計模式,如spark-overwrite

下面提供了一種在 python 中實現delete-write模式的方法:

import pandas as pd
import os
import shutil


def extract(path: str = "s3://my_bucket_name/file0.parquet") -> pd.DataFrame:
  df = pd.read_parquet(path)
  return df


# remove error rows
def transform(df: pd.DataFrame) -> pd.DataFrame:
  df_clean = df[df['customerId'] != 'A']
  return df_clean


def load_dwh(df: pd.DataFrame, output_location: str) -> None:
  if os.path.exists(output_location) == True:
    # removes the entire folder
    shutil.rmtree(output_location)
    os.makedir(output_location)
    df.to_csv(filename.csv)
  else:
    df.to_csv(filename.csv)
    
  return None


在上面的片段中,我實現了一個簡單的ETL管道,從s3桶中獲取parquet檔案,並使用pandas read_parquet來讀取它。然後根據確定的業務邏輯對資料進行轉換,在我的例子中,它刪除了所有customer_id等於A的記錄。
在這裡,load_dwh函式接受兩個引數:資料框架和output_location,檢查output_location是否已經存在,如果在載入資料時發生錯誤,就會出現這種情況,然後刪除output_location中指定的資料夾,用新的資料重新建立它。

4。結論
擁有冪等資料管道可以避免資料工程師的很多麻煩,尤其是當資料管道由於錯誤或業務邏輯更改而需要多次重新執行時。
 

相關文章