ETL: Data Fusion JavaScript 轉換資料 Transform
GCP ETL 介紹: Data Fusion JavaScript 轉換資料 Transform
除了用 Wrangler
去做資料的處理,也可以使用 JavaScript 自訂處理的流程
加入 JavaScript Transform
在左側選單點選 Transform
頁籤,並點選 JavaScript
將 Source 資料來源
連結至 JavaScript Transform
,並將 JavaScript Transform
連結至 Sink 目標資料庫
設定 JavaScript Transform
在設定 JavaScript Transform 時可以看到下方有預設的 Scripts
變數名稱 | 簡述 |
---|---|
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);
}
設定完後,在右方手動設定輸出的欄位,樣子會長的像這樣
這樣就完成了使用 JavaScript 做資料的轉換,當自己會寫 JavaScript 語法,可以自己做資料轉換的程式撰寫