ETL: Data Fusion JavaScript 轉換資料 Transform

GCP ETL 介紹: Data Fusion JavaScript 轉換資料 Transform

除了用 Wrangler 去做資料的處理,也可以使用 JavaScript 自訂處理的流程

加入 JavaScript Transform

在左側選單點選 Transform 頁籤,並點選 JavaScript

ETL JavaScript Transform 轉換資料

Source 資料來源 連結至 JavaScript Transform,並將 JavaScript Transform 連結至 Sink 目標資料庫

ETL JavaScript Transform 轉換資料

設定 JavaScript Transform

在設定 JavaScript Transform 時可以看到下方有預設的 Scripts

ETL JavaScript Transform 轉換資料

變數名稱 簡述
input 來源資料
emitter 處理資料
context Transform 設定
/**
 * @summary Transforms the provided input record into zero or more output records or errors.

 * Input records are available in JavaScript code as JSON objects.

 * @param input an object that contains the input record as a JSON.   e.g. to access a field called 'total' from the input record, use input.total.
 * @param emitter an object that can be used to emit zero or more records (using the emitter.emit() method) or errors (using the emitter.emitError() method)
 * @param context an object that provides access to:
 *            1. CDAP Metrics - context.getMetrics().count('output', 1);
 *            2. CDAP Logs - context.getLogger().debug('Received a record');
 *            3. Lookups - context.getLookup('blacklist').lookup(input.id); or
 *            4. Runtime Arguments - context.getArguments().get('priceThreshold')
 */
function transform(input, emitter, context) {
  emitter.emit(input);
}

使用 JavaScript 撰寫轉換程式

為了產生不重複的主鍵,使用 Math.random().toString(36).substring(2, 15) 產生隨機的編號並存入 id 欄位

指定欄位需要設定固定的資料,可以直接設定 custom_field 的資料皆為 custom-value

並將傳入的資料設定至指定的欄位,最後使用 emitter.emit(transform_input) 將資料輸出

function transform(input, emitter, context) {
  // 產生隨機編號
  var id = 'test-' + Math.random().toString(36).substring(2, 15);

  // 轉換的資料
  var transform_input = {
    'id' : id,
  	'custom_field' : 'custom-value',
    'english_first_name' : input.en_first_name,
    'english_last_name' : input.en_last_name,
    'age' : input.age
  };

  // 輸出轉換資料
  emitter.emit(transform_input);
}

設定完後,在右方手動設定輸出的欄位,樣子會長的像這樣

ETL JavaScript Transform 轉換資料

這樣就完成了使用 JavaScript 做資料的轉換,當自己會寫 JavaScript 語法,可以自己做資料轉換的程式撰寫