將轉換最佳化

使用下列策略,將 Azure Data Factory 和 Azure Synapse Analytics 管線中對應資料流程的轉換效能優化。

優化聯結、存在和查閱

廣播

在聯結、查閱和存在轉換中,如果一或兩個數據流都足夠小,足以容納到背景工作節點記憶體中,您可以啟用 廣播 來優化效能。 廣播是當您將小型資料框架傳送至叢集中的所有節點時。 這可讓 Spark 引擎執行聯結,而不需重新洗牌大型資料流程中的資料。 根據預設,Spark 引擎會自動決定是否要廣播聯結的一端。 如果您熟悉傳入的資料,並知道其中一個資料流程比另一個資料流程小,您可以選取 [ 固定 廣播]。 已修正廣播強制 Spark 廣播選取的資料流程。

如果廣播的資料大小對 Spark 節點而言太大,您可能會發生記憶體不足錯誤。 若要避免記憶體不足錯誤,請使用 記憶體優化 叢集。 如果您在資料流程執行期間遇到廣播逾時,您可以關閉廣播優化。 不過,這會導致執行資料流程的速度變慢。

使用可能需要較長時間查詢的資料來源時,例如大型資料庫查詢,建議關閉聯結的廣播。 當叢集嘗試廣播至計算節點時,具有較長查詢時間的來源可能會導致 Spark 逾時。 關閉廣播的另一個好選擇是,當您的資料流程中有資料流程,匯總值以供稍後用於查閱轉換時。 此模式可能會混淆 Spark 優化器並造成逾時。

Join Transformation optimize

交叉聯結

如果您在聯結條件中使用常值,或在聯結的兩端有多個相符專案,Spark 會以交叉聯結的形式執行聯結。 交叉聯結是完整的笛卡兒乘積,然後篩選掉聯結的值。 這比其他聯結類型慢。 請確定您在聯結條件的兩端都有資料行參考,以避免對效能造成影響。

聯結之前排序

不同于 SSIS 之類的工具中的合併聯結,聯結轉換不是強制合併聯結作業。 聯結索引鍵不需要在轉換之前進行排序。 不建議在對應資料流程中使用排序轉換。

視窗轉換效能

對應 資料流程 中的 Window 轉換會依您在轉換設定中選取做為 子句一 over() 部分的資料行中的值分割您的資料。 Windows 轉換中公開了許多熱門的匯總和分析函式。 不過,如果您的使用案例是針對排名或資料列編號 rowNumber() 產生整個資料集上的視窗,建議您改用 Rank rank() 轉換 Surrogate 索引鍵轉換 。 這些轉換會使用這些函式再次執行更好的完整資料集作業。

重新分割扭曲的資料

某些轉換,例如聯結和匯總會重新洗牌您的資料分割,有時可能會導致扭曲的資料。 扭曲的資料表示資料不會平均分散到分割區。 嚴重扭曲的資料可能會導致下游轉換和接收寫入速度較慢。 您可以按一下監視顯示中的轉換,檢查資料流程中任何時間點的資料扭曲。

Skewness and kurtosis

監視顯示顯示如何將資料分散到每個分割區,以及兩個計量、扭曲和庫爾特病。 扭曲是測量資料不對稱的方式,而且可以有正數、零、負值或未定義的值。 負偏斜表示左尾比右邊長。 Kurtosis 是資料是重尾或輕尾的量值。 不想要高庫爾特氏值。 理想的扭曲範圍介於 -3 到 3 之間,而庫爾特氏度範圍小於 10。 解譯這些數位的簡單方式是查看分割區圖表,並查看 1 個橫條是否大於其餘資料行。

如果您的資料在轉換之後未平均分割,您可以使用 優化索引標籤 來重新分割。 重新洗牌資料需要一些時間,而且可能無法改善資料流程效能。

提示

如果您重新分割資料,但具有重新洗牌資料的下游轉換,請在做為聯結索引鍵的資料行上使用雜湊分割。

注意

資料流程內的轉換(除了接收轉換之外),不會修改待用資料的檔案和資料夾分割。 每個轉換中的資料分割都會在 ADF 針對每個資料流程執行所管理之暫存無伺服器 Spark 叢集的資料框架內重新分割資料。

請參閱與效能相關的其他資料流程文章: