對應資料流中的結構描述漂移

適用於: Azure Data Factory Azure Synapse Analytics

提示

Data Factory in Microsoft Fabric 是下一代的 Azure Data Factory,擁有更簡單的架構、內建 AI 及新功能。 如果你是資料整合新手,建議先從 Fabric Data Factory 開始。 現有的 ADF 工作負載可升級至 Fabric,以存取資料科學、即時分析與報告等新能力。

結構描述漂移是您的來源經常變更中繼資料的情況。 欄位、資料行和類型都可以即時新增、移除或變更。 若不處理結構描述漂移,您的資料流程會變得容易受上游資料來源變更所影響。 當傳入的資料行和欄位變更時,典型的 ETL 模式會失敗,因為典型的 ETL 模式通常會繫結至這些來源名稱。

為了防止結構漂移,重要的是資料流程工具中具備相關功能,讓你作為 資料工程師 能夠:

  • 定義具有可變動欄位名稱、資料類型、值和大小的來源
  • 定義可搭配資料模式 (而不是硬式編碼的欄位和值) 運作的轉換參數
  • 定義能識別模式的運算式,以比對傳入欄位,而不需使用命名欄位。

Azure Data Factory 原生支援彈性架構,執行階段會變換,讓你能建立通用的資料轉換邏輯,無需重新編譯資料流程。

您需要在資料流程中做出架構層面的決策,以便接受流程中的結構變動。 當您這樣做時,您可以抵抗來自來源的結構描述變更。 不過,您會在整個資料流程中失去對資料行和類型的早期繫結。 Azure Data Factory 將 schema 漂移流程視為延遲綁定流程,因此當你建立轉換時,漂移的欄位名稱不會在整個流程的結構檢視中顯示。

本影片介紹了一些複雜解決方案,您可以在 Azure Data Factory 或 Synapse Analytics 的管線中輕鬆建立,並利用資料流的 schema drift 功能。 在此範例中,我們會根據彈性的資料庫結構描述,建置可重複使用的模式:

來源中的結構異變

從您的來源定義傳入資料流程的資料行,若未出現在來源投影中時,會定義為「漂移的」。 您可以從來源轉換中的投影索引標籤檢視來源投影。 當您選取來源的資料集時,服務會自動採用資料集的結構描述,並從該資料集結構描述定義建立投影。

在來源轉換中,結構描述漂移是定義為讀取在資料集結構描述中未定義的資料行。 若要啟用結構描述漂移,請勾選來源轉換中的 [允許結構描述漂移]。

結構描述漂移來源

啟用結構描述漂移時,所有傳入的欄位都會在執行期間從來源讀取,然後經過整個流程傳遞至傳遞到接收器。 依預設,所有新偵測到的資料行 (稱為漂移資料行) 會以字串資料類型送達。 如果您想要讓資料流程自動推斷漂移資料行的資料類型,請勾選來源設定中的 [推斷漂移資料行類型]。

接收器中的結構描述漂移

在接收器轉換中,結構描述漂移是指您在接受器資料結構描述中所定義的內容外,寫入額外資料行的情況。 若要啟用結構描述漂移,請在您的資料匯集轉換中勾選「允許結構描述漂移」。

結構描述漂移接收器

如果已啟用結構描述漂移,請確定已開啟對應索引標籤中的自動對應 滑桿。 開啟此滑桿之後,所有傳入的資料行都會寫入到您的目標地。 否則,您必須使用規則型對應來寫入漂移的資料行。

接收器自動對應

轉換漂移的資料行

當您的資料流具有漂移的資料行時,您可以使用下列方法來在轉換中加以存取:

  • 使用 byPosition 和 byName 運算式,以明確指定欄位名稱或欄位位置編號。
  • 在衍生的資料行或彙總轉換中新增資料行模式,以符合任何名稱、串流、位置、來源或類型的組合
  • 在選取或 接收器轉換中新增規則型對應,以透過模式將漂移的資料行對應到資料行別名

如需有關如何實作欄位模式的詳細資訊,請參閱映射資料流中的欄位模式。

對應漂移的資料行的快速動作

若要明確參考漂移的資料行,您可以透過資料預覽快速動作,快速產生這些資料行的對應。 開啟偵錯模式之後,請移至 [資料預覽] 索引標籤,然後按一下 [重新整理] 以擷取資料預覽。 如果資料處理站偵測到有漂移的資料行存在,您可以點擊對應漂移的並產生衍生的資料行,以便在下游的結構描述檢視中參考所有漂移的資料行。

顯示已凸顯對應漂移的之資料預覽索引標籤的螢幕截圖。

在產生的衍生資料行轉換中,每個漂移的資料行都會對應至其偵測到的名稱和資料類型。 在上述資料預覽中,已偵測到資料行 'movieId' 為整數。 點擊對應漂移的後,會在衍生的資料行中將 movieId 定義為toInteger(byName('movieId')),並將其納入下游轉換的結構描述檢視中。

螢幕快照顯示「衍生數據行設定」標籤。

在 Data Flow 表達式語言中,你會找到更多欄位模式與結構漂移的功能,包括「byName」和「byPosition」。