我有许多文件,我正在尝试将它们连接在一起。我碰巧知道这些文件中的许多列只包含空值,我可以不使用它们。我如何编写一条U-SQL语句来从文件中提取数据,检查只有空值的列并排除它们?
谢谢!
发布于 2016-10-11 02:49:52
性能最好的方法可能是编写一个自定义提取器,它只跳过只包含空值的行。
否则,您可以编写类似这样的代码(注意非对象类型上的空指示符):
@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。
发布于 2017-07-26 13:13:02
@data = EXTRACT c1 string, c2 int?, c3 DateTime? // ... more columns
FROM "/path/file.csv"
USING Extractors.Csv();有时上面的代码也会显示错误,只要空值已经被替换为其他值,如"","\N",null等。
使用Extractors.Csv的
(nullEscape:“\N”);
因此,我们必须在默认提取器中使用nullEscape参数,以便排除文件中的空值。
https://stackoverflow.com/questions/39524842
复制相似问题