在對應資料流程中建置運算式

適用于: Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用于企業的單一分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告等所有專案。 瞭解如何 免費啟動新的試用版

在對應資料流程中,許多轉換屬性都會輸入為運算式。 這些運算式是由在執行時間評估為 Spark 資料類型的資料行值、參數、函式、運算子和常值所組成。 對應資料流程具有專用的體驗,可協助您建置稱為 Expression Builder 的這些運算式。 利用 IntelliSense 程式碼完成來醒目提示、語法檢查和自動完成,運算式產生器的設計目的是讓建置資料流程變得容易。 本文說明如何使用運算式產生器來有效地建置商務邏輯。

Expression Builder

開啟運算式產生器

開啟運算式產生器有多個進入點。 這些全都相依于資料流程轉換的特定內容。 最常見的使用案例是在衍生 資料行和 匯總 等 轉換中,使用者會使用資料流程運算式語言建立或更新資料行。 您可以選取 資料行清單上方的 [開啟運算式產生器] 來開啟運算式產生器 。 您也可以選取資料行內容,並將運算式產生器直接開啟至該運算式。

Open Expression Builder derive

在某些轉換中 ,按一下藍色運算式文字方塊會開啟運算式產生器。

Blue expression box

當您參考相符或分組條件中的資料行時,運算式可以從資料行擷取值。 若要建立運算式,請選取 [計算] 資料行

Computed column option

如果運算式或常值是有效的輸入,請選取 [新增動態內容 ] 以建置評估為常值之運算式。

Add dynamic content option

運算式元素

在對應資料流程中,運算式可以由資料行值、參數、函式、區域變數、運算子和常值組成。 這些運算式必須評估為 Spark 資料類型,例如字串、布林值或整數。

Expression elements

函式

對應資料流程具有可用於運算式的內建函式和運算子。 如需可用函式的清單,請參閱 對應資料流程語言參考

使用者定義函式 (預覽)

對應資料流程支援建立和使用使用者定義的函式。 若要查看如何建立和使用使用者定義函數,請參閱 使用者定義的函數

位址陣列索引

當您處理傳回陣列類型的資料行或函式時,請使用方括弧 ([]) 來存取特定元素。 如果索引不存在,運算式會評估為 Null。

Expression Builder array

重要

在對應資料流程中,陣列是以單一為基礎,這表示第一個專案是由索引一參考。 例如,myArray[1] 會存取名為 'myArray' 之陣列的第一個專案。

輸入結構描述

如果您的資料流程在任何來源中使用已定義的架構,您可以在許多運算式中依名稱參考資料行。 如果您使用架構漂移,則可以使用 byName()byNames() 函式明確參考資料行,或使用資料行模式比對資料行。

具有特殊字元的資料行名稱

當您有包含特殊字元或空格的資料行名稱時,請用大括弧括住名稱,以在運算式中參考它們。

{[dbo].this_is my complex name$$$}

參數

參數是從管線在執行時間傳入資料流程的值。 若要參考參數,請從 [運算式元素 ] 檢視中選取參數,或以貨幣符號在名稱前面參考參數。 例如,由 參考 $parameter1 名為 parameter1 的參數。 若要深入瞭解,請參閱 將對應資料流程 參數化。

快取查閱

快取查閱可讓您對快取接收的輸出執行內嵌查閱。 每個接收 lookup()outputs() 和 上都有兩個函式可供使用。 參考這些函式的語法為 cacheSinkName#functionName() 。 如需詳細資訊,請參閱 快取接收

lookup() 會將目前轉換中的比對資料行當做參數,並傳回與快取接收中索引鍵資料行相符的資料列相等的複雜資料行。 傳回的複雜資料行包含快取接收中對應之每個資料行的子欄。 例如,如果您有錯誤碼快取接收 errorCodeCache ,其索引鍵資料行符合程式碼和名為 Message 的資料行。 呼叫 errorCodeCache#lookup(errorCode).Message 會傳回與傳入之程式碼對應的訊息。

outputs() 不接受任何參數,並將整個快取接收當做複雜資料行的陣列傳回。 如果在接收中指定索引鍵資料行,而且只有在快取接收中有幾個資料列時,才應該使用這個值。 常見的使用案例是附加遞增索引鍵的最大值。 如果快取的單一匯總資料列 CacheMaxKey 包含資料 MaxKey 行,您可以呼叫 CacheMaxKey#outputs()[1].MaxKey 來參考第一個值。

Cached lookup

區域變數

如果您要跨多個資料行共用邏輯,或想要分割邏輯,您可以建立區域變數。 本機是一組邏輯,不會在下游傳播至下列轉換。 您可以在運算式產生器內建立區域變數,方法是移至 [運算式] 元素 ,然後選取 [ 區域變數 ]。 選取 [新建] 以建立新的

Create local

區域變數可以參考任何運算式專案,包括函式、輸入架構、參數和其他區域變數。 參考其他區域變數時,訂單確實很重要,因為參考的本機必須是目前區域變數的「上方」。

Create local 2

若要在轉換中參考區域,請從 Expression 元素 檢視中選取本機,或以冒號在名稱前面參考它。 例如,本機稱為 local1 的 :local1 會由 參考。 若要編輯本機定義,請將滑鼠停留在運算式元素檢視中,然後選取鉛筆圖示。

Using locals

預覽運算式結果

如果 偵錯模式 已開啟,您可以以互動方式使用偵錯叢集來預覽運算式評估結果。 選取 [資料預覽] 旁的 [重新 整理],以更新資料預覽的結果。 您可以看到每個資料列的輸出,指定輸入資料行。

In-progress preview

字串插補

建立使用運算式元素的長字串時,請使用字串插補,輕鬆地建立複雜的字串邏輯。 當查詢字串中包含參數時,字串插補可避免大量使用字串串連。 使用雙引號將常值字串文字與運算式括在一起。 您可以包含運算式函式、資料行和參數。 若要使用運算式語法,請將它括在大括弧中,

字串插補的一些範例:

  • "My favorite movie is {iif(instr(title,', The')>0,"The {split(title,', The')[1]}",title)}"

  • "select * from {$tablename} where orderyear > {$year}"

  • "Total cost with sales tax is {round(totalcost * 1.08,2)}"

  • "{:playerName} is a {:playerRating} player"

注意

在 SQL 來源查詢中使用字串插補語法時,查詢字串必須位於單一行上,不含 '/n'。

批註運算式

使用單行和多行批註語法,將批註新增至運算式。

下列範例是有效的批註:

  • /* This is my comment */

  • /* This is a

  • multi-line comment */

如果您在運算式頂端放置批註,它會出現在轉換文字方塊中,以記錄轉換運算式。

Comment in the transformation text box

規則運算式

許多運算式語言函式都使用正則運算式語法。 當您使用正則運算式函式時,Expression Builder 會嘗試將反斜線 (\) 解譯為逸出字元序列。 當您在正則運算式中使用反斜線時,請將整個 RegEx 括在反引號 (') 中,或使用雙反斜線。

使用反引號的範例:

regex_replace('100 and 200', `(\d+)`, 'digits')

使用雙斜線的範例:

regex_replace('100 and 200', '(\\d+)', 'digits')

鍵盤快速鍵

以下是運算式產生器中可用的快捷方式清單。 建立運算式時,大部分的 Intellisense 快捷方式都可以使用。

  • Ctrl+K Ctrl+C:批註整行。
  • Ctrl+K Ctrl+U:取消批註。
  • F1:提供編輯器說明命令。
  • Alt+向下鍵:向下移動目前的行。
  • Alt+向上鍵:上移目前行。
  • Ctrl+空格鍵:顯示內容說明。

常用的運算式

轉換成日期或時間戳記

若要在時間戳記輸出中包含字串常值,請將轉換包裝在 中 toString()

toString(toTimestamp('12/31/2016T00:12:00', 'MM/dd/yyyy\'T\'HH:mm:ss'), 'MM/dd /yyyy\'T\'HH:mm:ss')

若要將毫秒從 epoch 轉換為日期或時間戳記,請使用 toTimestamp(<number of milliseconds>) 。 如果時間以秒為單位,乘以 1,000。

toTimestamp(1574127407*1000l)

前一個運算式結尾的結尾 「l」 表示轉換成長型別做為內嵌語法。

從 epoch 或 Unix Time 尋找時間

toLong(currentTimestamp() - toTimestamp('1970-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS') * 1000l

資料流程時間評估

資料流程會處理到毫秒。 針對 2018-07-31T20:00:00.2170000 ,您會看到 輸出中的 2018-07-31T20:00:00.217 。 在服務的入口網站中,時間戳記會顯示在目前的瀏覽器設定 ,這可以消除 217,但當您將執行資料流程端對端時,也會處理 217 (毫秒部分也會處理)。 您可以使用 toString(myDateTimeColumn) 作為運算式,並在預覽中查看完整的精確度資料。 處理日期時間做為日期時間,而不是針對所有實際用途的字串。

開始建置資料轉換運算式。