共用方式為


在對應資料流中組建運算式

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用

在對應資料流中,許多轉換屬性會作為運算式輸入。 這些運算式由在執行階段評估為 Spark 資料類型的資料行值、參數、函式、運算子,及常值所組成。 對應資料流的專用體驗,旨在協助您組建名為運算式產生器的這類運算式。 運算式產生器使用 IntelliSense 程式碼完成功能來提供醒目提示、語法檢查和自動完成,其設計目的是讓組建資料流程更加簡單。 本文說明如何使用運算式產生器有效組建商務邏輯。

運算式產生器

開啟運算式產生器

有多個進入點可以用來開啟運算式產生器有。 這些全都取決於資料流程轉換的具體環境。 最常見的使用案例是在衍生的資料行彙總等轉換中,使用者使用資料流程運算式語言建立或更新資料行。 您可以選取資料行清單上方的 [開啟運算式產生器],開啟運算式產生器。 您也可以選取資料行內容,直接在該運算式開啟運算式產生器。

Open Expression Builder 衍生

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

藍色表達式方塊

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

計算數據行選項

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

新增動態內容選項

運算式元素

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

運算式元素

函式

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

使用者定義函式 (預覽)

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

位址陣列索引

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

表達式產生器陣列

重要

在對應資料流中,陣列是以一為基礎,所以索引一參考會參考第一個元素。 例如,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 參考第一個值。

快取的查閱

區域變數

如果要跨多個資料行共用邏輯,或將邏輯區隔開來,您可以建立本地變數。 本地變數是一組邏輯,不會傳播到下游的轉換中。 若要在運算式產生器中建立本地變數,您可以移至 [運算式元素],然後選取 [區域]。 選取 [新建] 建立新的本地變數。

建立本機

本地變數可以參考任何運算式元素,包括函式、輸入結構描述、參數和其他區域。 參考其他本地變數時,順序很重要,因為參考的本地變數必須在目前區域「之上」。

建立本機 2

若要在轉換中參考本地變數,請選取 [運算式元素] 檢視的本地變數,或在本地變數名稱前面使用冒號來加以參考。 例如,: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 */

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

轉換文字框中的批注

規則運算式

許多運算式語言函式都使用規則運算式語法。 使用規則運算式函式時,運算式產生器會嘗試將反斜線 (\) 解譯為逸出字元序列。 在規則運算式中使用反斜線時,請以反引號 (`) 或雙反斜線括住整個 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) 作為運算式,並在預覽中查看精確的完整位數資料。 針對所有實際用途,請以日期時間來處理日期時間,而非使用字串。

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