project 是 Pipeline 的起始節點,用於從未經處理資料中選取需要的欄位並重新命名,聲明 Pipeline 的輸入 Schema。
欄位選取與重新命名
project 節點從未經處理資料中選取指定欄位,並重新命名為 Pipeline 內部統一的欄位名稱。通過 project 節點,可以顯式聲明 Pipeline 使用哪些欄位、每個欄位對應未經處理資料中的哪一列。後續所有節點均基於 project 定義的欄位名進行操作,與未經處理資料的列名解耦。
適用情境:
從原始日誌或資料表中提取需要的列,並重新命名為 Pipeline 標準欄位名。
丟棄不需要的列,減少資料轉送量。
統一不同資料來源的欄位命名差異。
節點配置
project 節點的配置格式如下:
{
"id": "node_1",
"type": "project",
"parameters": {
"<新欄位名>": "<原始欄位名>",
"<新欄位名>": "<原始欄位名>"
}
}參數說明
參數 | 類型 | 是否必填 | 預設值 | 說明 |
| String | 是 | 無 | 鍵為映射後的欄位名,值為未經處理資料中的欄位名。至少包含一組映射。 |
parameters 是一個動態 key-value 映射,每個鍵是 Pipeline 中使用的欄位名,對應的值是未經處理資料中的欄位名。
輸入和輸出
輸入要求
未經處理資料源(LogStore 或其他資料來源)。
值所引用的原始欄位必須存在於資料來源中。
輸出說明
列名 | 類型 | 來源 | 說明 |
| 與原始欄位類型一致 | 映射 | 從原始欄位投影並重新命名。 |
行數變化:M → N(M = N)。project 節點不改變行數,僅做列選擇與重新命名。
使用樣本
樣本 1:簡單欄位選擇
以下樣本中,未經處理資料中的 question 和 answer 欄位保持原名透傳。
{
"id": "n1",
"type": "project",
"parameters": {
"question": "question",
"answer": "answer"
}
}樣本 2:欄位重新命名
以下樣本將未經處理資料的 user_query 列映射為 question,bot_response 映射為 answer,model_name 映射為 model。
{
"id": "n1",
"type": "project",
"parameters": {
"question": "user_query",
"answer": "bot_response",
"model": "model_name"
}
}樣本 3:與其他節點群組合使用
以下樣本展示 project 節點與其他節點的組合使用。先通過 project 映射欄位,後續節點基於映射後的欄位名進行操作。
{
"nodes": [
{
"id": "n1",
"type": "project",
"parameters": {
"question": "a",
"input": "b",
"output": "c"
}
},
{
"id": "n2",
"type": "dedup-exact",
"parameters": {
"field": "question"
}
}
]
}在此樣本中,project 節點將原始欄位 a 映射為 question,後續 dedup-exact 節點基於映射後的 question 欄位進行去重。
使用建議
建議在 Pipeline 開頭使用 project 明確輸入 Schema,提高 Pipeline 的可讀性和可維護性。
僅選擇下遊實際需要的列,減少後續節點的資料掃描量。
欄位重新命名通過
"新名": "原名"的索引值對實現,便於統一列名格式。後續可接extend(欄位擴充)節點做欄位派生計算,再接where(篩選過濾)節點做條件過濾。
邊界情況說明:
情境 | 行為 |
| 校正失敗,至少需要一組欄位選取。 |
值引用的原始欄位不存在 | 運行時報錯,提示欄位不存在。 |
多個鍵映射到同一原始欄位 | 允許,產生內容相同的多個列。 |