我有很多文件正在尝试加入。我碰巧知道每个文件中的许多列只包含空值,我可以不用它们。如何编写U-SQL语句以从文件中提取数据,检查除空值以外的列并将其排除?
谢谢!
答案 0 :(得分: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
。
答案 1 :(得分:0)
@data = EXTRACT c1 string, c2 int?, c3 DateTime? // ... more columns
FROM "/path/file.csv"
USING Extractors.Csv();
有时上述代码也会显示错误,只要空值已经替换为其他值,如“”,“\ N”,null等等。
使用Extractors.Csv(nullEscape:“\ N”);
所以我们必须在默认的Extractor中使用nullEscape参数,以便排除文件中的空值。