2017-08-28 102 views
1

我正在動態讀取表模式來生成我的usql腳本。我現有的數據湖存儲中存在tsv文件,我需要將新數據追加到那些現存的tsv文件中。 但是,當我生成的usql腳本,表架構可能會得到改變和表可能有額外的列添加。具有默認值的列 - usql

據我所知,我們需要在tsv文件中的usql腳本中具有相同數量的列。 是否有可能使這些新添加的列具有一些默認值?例如對於例如

@Result = EXTRACT id string,    
firstname string,    
lastname string,    
department string = "", 

emp_id int = 0 
    FROM @inputfile 
    USING Extractors.Tsv(); 

正如你可以看到,部門和EMP_ID列新增,我想將其插入到輸出文件中一些默認值。 如果列已經存在於tsv中,請選取列值,否則爲它們插入一些默認值。

謝謝。

回答

1

您當前不能將默認列指定爲提取語句模式的一部分。目前推薦的模式是:

  1. 提取您的TSV版本的右列(確保你讓他們組織,使您輕鬆知道哪些列存在),然後使用UNION ALL BY NAME工會的行集。這會將空/默認值列添加到缺少列的行集。

  2. 編寫一個以SqlMap作爲參數的自定義提取器,用指定的默認值填充缺少的列。

+0

它的工作原理。有沒有辦法處理刪除列方案? 現有的tsv文件有5列,新的tsv有4列。現在,當我將數據附加到現有的tsv文件時,我的結果文件應該只有4列。 – Lokesh

+0

你可以問這是一個新的問題嗎?這可以讓以後更容易找到。 –

+1

我得到了解決方法。將兩個文件的結果集放在單獨的變量中,將OUTER UNION放在它們中。只輸出最終結果變量中所需的列。 – Lokesh