2016-09-16 26 views
0

我有許多文件正在嘗試連接在一起。我碰巧知道每個這些文件中的許多列都只包含null值,我可以在沒有它們的情況下進行。我如何編寫一個U-SQL語句從文件中提取數據,檢查除NULL之外的任何列並將其排除?使用U-SQL刪除空列

謝謝!

回答

0

性能最佳的方法可能是編寫一個自定義提取器,只是跳過只包含空值的行。

否則,你可以寫這樣的事情(注意在非對象類型的空指標):

@data = EXTRACT c1 string, c2 int?, c3 DateTime? // ... more columns 
     FROM "/path/file.csv" 
     USING Extractors.Csv(); 

@data = SELECT * FROM @data WHERE c1 != null AND c2 != null AND c3 != null; 

(請注意,您將有最有可能投的null到列鍵入比較)。

如果您的模式在不同文件之間不同,您也可以使用可以查看輸入行模式的所謂處理器來執行過濾器。 東西沿着

@data = PROCESS @data PRODUCE c1 string, c2 int?, c3 DateTime? 
     USING new MyAsm.NullFilterProcessor(); 

線在哪裏,你將不得不實施NullFilterProcessor作爲IProcessor

0
@data = EXTRACT c1 string, c2 int?, c3 DateTime? // ... more columns 
    FROM "/path/file.csv" 
    USING Extractors.Csv(); 

有時上述代碼也將顯示錯誤,每當空值已經與像 「」, 「\ n」,NULL等

USING Extractors.Csv一些其它值替換(nullEscape: 「\ n」);

所以我們必須在默認提取器中使用nullEscape參數以排除文件中的空值。