View a markdown version of this page

HealthOmics 的 WDL 引擎變更日誌 - AWS HealthOmics

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

HealthOmics 的 WDL 引擎變更日誌

此頁面包含適用於 WDL 嚴格模式和 WDL 寬鬆模式的 WDL 引擎變更日誌。每個區段總結了新功能、增強功能和棄用。

新功能和增強功能

下表列出 HealthOmics 上 WDL 引擎的新功能和增強功能。

變更日期 變更名稱 變更描述 建議的動作
2026 年 9 月 22 日 一致的 CRLF 線路結束處理

HealthOmics 會在 read_lines()、 read_tsv()和 之間一致地修剪 Windows 樣式 (\r\n) 行尾read_map(),以符合標準 Linux 工具的行為。

無。無需變更工作流程。
2026 年 9 月 22 日

zip()cross()、 和 read_tsv() 現在可正確處理混合類型輸入。可移除手動類型預測解決方法。

內建函數 zip()、 cross()和 read_tsv() 現在可正確推斷其傳回值的類型。在舊版中,這些函數可能會在合併混合類型 (例如 Array[String]和 zip()通話Array[Int]中) 時產生非預期的類型錯誤,需要在 WDL 程式碼中手動類型預測解決方法。

如果您的工作流程包含新增的明確類型轉換,以解決來自 zip()、 cross()或 的類型錯誤read_tsv(),您可以移除它們。HealthOmics 現在會自動推斷正確的類型。

保留現有的類型轉換不會導致任何錯誤或影響工作流程行為。

2026 年 9 月 22 日

basename(path, "") fix 會傳回檔案名稱,而不是 和空白字串。

basename(path, "") 現在會傳回檔案名稱。

例如, basename("/path/to/file.txt", "") 會傳回 "file.txt",而不是空字串。

搜尋您的工作流程以進行basename(x, "")呼叫。如果有的話,請確認傳回檔案名稱是預期的行為。

2026 年 9 月 22 日

中的浮點數鍵碰撞偵測 collect_by_key()

collect_by_key() 如果之前處理的Float金鑰符合 6 個小數位數,則視為相同。不同的值,例如 0.0000001和 0.0000002合併為一個群組。

從變更日期開始,HealthOmics 會在工作流程建立時間偵測到此衝突,並在 GetWorkflow statusMessage 欄位中以明確的錯誤使工作流程失敗,而不是捨棄結果。

先前在合併不同Float金鑰時成功完成的工作流程現在會失敗,並出現碰撞偵測錯誤,例如 "statusMessage": "(collect_by_key_test.wdl Ln 17 Col 47) No such function: collect_by_key\n Map[Float, Array[String]] collected = collect_by_key(pairs_with_collision)"

您可以使用以下三種方法中的任何一種:

  • 使用String金鑰:Array[Pair[Float, String]]變更為 Array[Pair[String, String]]並引用您的金鑰值。字串索引鍵一律不同,可完全消除碰撞風險。

  • 使用Int金鑰:將金鑰類型變更為浮點數Array[Pair[Int, String]]乘以 10 的倍數,以將所需的精確度保留為整數。

  • 如果Float金鑰無法避免,請先將金鑰四捨五入到一致的精確度,以確保每個金鑰都真正不同,而且不會無提示合併任何資料。在傳遞至 round(value * 1000000.0) / 1000000.0之前,使用 標準化每個金鑰collect_by_key()。

即將推出 (2026 年 9 月 22 日起 60 天通知)

浮點數分割 (/) 會傳回小數,而不是截斷的整數。

目前行為:Float運算元上的/運算子會傳回最接近的整數。例如, 5.0 / 2傳回 2.0,而不是 2.5。如果兩個運算元都是 Int(例如 5 / 2),則結果會傳回 2。

即將進行的變更 (2026 年 11 月 30 日):浮點數運算元上的浮點數分割會以 16 個十進位精確度傳回。在此日期之後, 5.0 / 2.0 將傳回 2.5, 150.0 / 7.0將傳回 21.428...,而不是整數值。

結果的精確度取決於其使用方式:如果結果類型為 Float,則計算值的精確度最多為 16 個小數位;如果結果強制為 String,則會改為格式化為 6 個小數位。

例如, 5.0 / 2.0 將傳回 2.5,而 150.0 / 7.0將傳回21.4285714285714為 Float,但如果 21.428571插入 String。

Int / Int 等 表達5 / 2式不受影響,且會繼續傳回 2。

為了確保無論引擎版本為何的整數結果,請在 floor()或 中包裝浮點數除法ceil():

  • floor(5.0 / 2.0) → 一律傳回 2

  • ceil(5.0 / 2.0) → 一律傳回 3

如果您的工作流程刻意預期來自浮點數分割的十進位結果,則不需要變更。即將從 2026 年 11 月 30 日開始的分割行為也會傳回小數位數。

注意:當/運算子套用至整數時, 5/2仍會傳回 2。