我有許多文件正在嘗試連接在一起。我碰巧知道每個這些文件中的許多列都只包含null值,我可以在沒有它們的情況下進行。我如何編寫一個U-SQL語句從文件中提取數據,檢查除NULL之外的任何列並將其排除?使用U-SQL刪除空列
謝謝!
我有許多文件正在嘗試連接在一起。我碰巧知道每個這些文件中的許多列都只包含null值,我可以在沒有它們的情況下進行。我如何編寫一個U-SQL語句從文件中提取數據,檢查除NULL之外的任何列並將其排除?使用U-SQL刪除空列
謝謝!
性能最佳的方法可能是編寫一個自定義提取器,只是跳過只包含空值的行。
否則,你可以寫這樣的事情(注意在非對象類型的空指標):
@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
。
@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參數以排除文件中的空值。