在對應資料流程中建置運算式
適用于: Azure Data Factory Azure Synapse Analytics
提示
試用 Microsoft Fabric 中的 Data Factory,這是適用于企業的單一分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告等所有專案。 瞭解如何 免費啟動新的試用版 !
在對應資料流程中,許多轉換屬性都會輸入為運算式。 這些運算式是由在執行時間評估為 Spark 資料類型的資料行值、參數、函式、運算子和常值所組成。 對應資料流程具有專用的體驗,可協助您建置稱為 Expression Builder 的這些運算式。 利用 IntelliSense 程式碼完成來醒目提示、語法檢查和自動完成,運算式產生器的設計目的是讓建置資料流程變得容易。 本文說明如何使用運算式產生器來有效地建置商務邏輯。
開啟運算式產生器
開啟運算式產生器有多個進入點。 這些全都相依于資料流程轉換的特定內容。 最常見的使用案例是在衍生 資料行和 匯總 等 轉換中,使用者會使用資料流程運算式語言建立或更新資料行。 您可以選取 資料行清單上方的 [開啟運算式產生器] 來開啟運算式產生器 。 您也可以選取資料行內容,並將運算式產生器直接開啟至該運算式。
在某些轉換中 ,按一下藍色運算式文字方塊會開啟運算式產生器。
當您參考相符或分組條件中的資料行時,運算式可以從資料行擷取值。 若要建立運算式,請選取 [計算] 資料行 。
如果運算式或常值是有效的輸入,請選取 [新增動態內容 ] 以建置評估為常值之運算式。
運算式元素
在對應資料流程中,運算式可以由資料行值、參數、函式、區域變數、運算子和常值組成。 這些運算式必須評估為 Spark 資料類型,例如字串、布林值或整數。
函式
對應資料流程具有可用於運算式的內建函式和運算子。 如需可用函式的清單,請參閱 對應資料流程語言參考 。
使用者定義函式 (預覽)
對應資料流程支援建立和使用使用者定義的函式。 若要查看如何建立和使用使用者定義函數,請參閱 使用者定義的函數 。
位址陣列索引
當您處理傳回陣列類型的資料行或函式時,請使用方括弧 ([]) 來存取特定元素。 如果索引不存在,運算式會評估為 Null。
重要
在對應資料流程中,陣列是以單一為基礎,這表示第一個專案是由索引一參考。 例如,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
來參考第一個值。
區域變數
如果您要跨多個資料行共用邏輯,或想要分割邏輯,您可以建立區域變數。 本機是一組邏輯,不會在下游傳播至下列轉換。 您可以在運算式產生器內建立區域變數,方法是移至 [運算式] 元素 ,然後選取 [ 區域變數 ]。 選取 [新建] 以建立新的 。
區域變數可以參考任何運算式專案,包括函式、輸入架構、參數和其他區域變數。 參考其他區域變數時,訂單確實很重要,因為參考的本機必須是目前區域變數的「上方」。
若要在轉換中參考區域,請從 Expression 元素 檢視中選取本機,或以冒號在名稱前面參考它。 例如,本機稱為 local1 的 :local1
會由 參考。 若要編輯本機定義,請將滑鼠停留在運算式元素檢視中,然後選取鉛筆圖示。
預覽運算式結果
如果 偵錯模式 已開啟,您可以以互動方式使用偵錯叢集來預覽運算式評估結果。 選取 [資料預覽] 旁的 [重新 整理],以更新資料預覽的結果。 您可以看到每個資料列的輸出,指定輸入資料行。
字串插補
建立使用運算式元素的長字串時,請使用字串插補,輕鬆地建立複雜的字串邏輯。 當查詢字串中包含參數時,字串插補可避免大量使用字串串連。 使用雙引號將常值字串文字與運算式括在一起。 您可以包含運算式函式、資料行和參數。 若要使用運算式語法,請將它括在大括弧中,
字串插補的一些範例:
"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 */
如果您在運算式頂端放置批註,它會出現在轉換文字方塊中,以記錄轉換運算式。
規則運算式
許多運算式語言函式都使用正則運算式語法。 當您使用正則運算式函式時,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) 作為運算式,並在預覽中查看完整的精確度資料。 處理日期時間做為日期時間,而不是針對所有實際用途的字串。