巨集和巨集函式

巨集是 Cloud Data Fusion 外掛程式屬性設定中的預留位置。這些變數會以 ${ } 內的變數表示,例如 ${input_file_path}。如要為元素 (例如檔案路徑和表格名稱) 啟用動態設定,系統會在執行階段將預留位置替換為實際值。

查看外掛程式屬性時,您可以在任何屬性欄位 (旁邊有 M 字樣) 中新增巨集。如要新增巨集,請按一下 M

詳情請參閱「管理巨集、偏好設定和執行階段引數」。

巨集函式

除了巨集之外,您還可以使用下列預先定義的巨集函式:

  • logicalStartTime()
  • secure()

邏輯開始時間函式

logicalStartTime() 巨集函式會以字串值傳回管道執行作業的邏輯開始時間。

如果未提供參數,則會以毫秒為單位傳回開始時間。所有參數皆為選用。這個函式會將時間格式、偏移量和時區做為引數,並使用管道的邏輯開始時間執行替換作業:

${logicalStartTime([timeFormat[,offset [,timezone])}

以下清單列出 logicalStartTime() 的選用參數:

參數 說明
timeFormat 時間格式模式,格式為 Java SimpleDateFormat
offset
邏輯開始時間前的時間偏移。
timezone
邏輯開始時間使用的時區。

示例

在本例中,管道執行的邏輯開始時間為 2020-01-01T00:00:00,您提供以下巨集:

${logicalStartTime(yyyy-MM-dd'T'HH-mm-ss,1d-4h+30m)}

格式為 yyyy-MM-dd'T'HH-mm-ss,偏移量為邏輯開始時間前的 1d-4h+30m。在執行階段,系統會將巨集值替換為 2019-12-31T03:30:00,因為偏移值會轉換為 20.5 小時。整個巨集會在 2020 年 1 月 1 日午夜前 20.5 小時執行。

在檔案型外掛程式中使用 logicalStartTime()

使用這個函式的最常見方式,是在檔案型外掛程式的 Path 欄位中。

在檔案名稱中加入管道開始時間 (以毫秒為單位)

如要在檔案名稱中以毫秒為單位擷取實際的開始時間,請在巨集函式中省略參數。

示例

在本例中,您會在 Amazon S3 檔案名稱中加入管道開始時間 (以毫秒為單位):

sales_012345671011.csv

在 Amazon S3 匯出端屬性中,在「Path」欄位中輸入下列值:

s3a://sales-data/sales_${logicalStartTime()}.csv

在檔案名稱中加入今天的日期

您可以在檔案名稱中使用 logicalStartTime() 巨集函式,擷取目前的日期。

示例

在本例中,您會在下列 S3 檔案名稱中擷取今天的日期:

s3a://sales-data/sales_20210204.csv

在 Amazon S3 匯出端屬性中,在「Path」欄位中輸入下列值:

s3a://sales-data/sales_${logicalStartTime(yyyyMMdd)}.csv

使用 logicalStartTime 在結構化記錄中新增 Timestamp 欄位

您可以使用「新增欄位」轉換和 logicalStartTime(),在結構化記錄中新增時間戳記。

  1. 從 Cloud Data Fusion Hub 取得 Field Adder Transform 外掛程式。部署外掛程式後,「轉換」清單中會顯示「新增欄位」
  2. 設定外掛程式屬性時,請將時間戳記新增至結構化記錄,例如,輸入欄位名稱時輸入新欄位的名稱,輸入欄位值時輸入 logicalStartTime() 巨集函式。

安全功能

secure() 巨集函式會將單一鍵做為引數,並從安全儲存庫中查詢鍵的相關字串值。如要執行替換作業,您必須先在安全儲存庫中提供做為引數的金鑰。這對於用於敏感資料的替換作業相當實用。

示例

在這個範例中,如果外掛程式連線至 MySQL 資料庫,您可以使用下列值設定密碼屬性欄位:

${secure(password)}

這個巨集會在執行階段從安全儲存庫中提取密碼。

遞迴巨集

巨集最多可遞迴參照其他巨集十個層級。系統會由最內層到最外層的引數依序評估巨集引數。

示例

在這個範例中,您有一個伺服器,可參照主機名稱和通訊埠。您必須提供下列執行階段引數,其中最後一個引數是參照其他巨集的巨集:

  • 主機名稱examplepetstore.com
  • port9991
  • server-address${hostname}:${port}

在管道設定中,請使用下列運算式:

server-address: ${server-address}

在執行階段,系統會將其替換為下列值:

examplepetstore.com:9991

後續步驟