0

我有很多文件要尝试合并。我碰巧知道每个文件中的许多列都只包含空值,我可以不用它们。如何编写 U-SQL 语句来从文件中提取数据,检查除了空值之外什么都没有的列并排除它们?

谢谢!

4

2 回答 2

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.

于 2016-10-10T18:49:52.153 回答
0
@data = EXTRACT c1 string, c2 int?, c3 DateTime? // ... more columns
    FROM "/path/file.csv"
    USING Extractors.Csv();

有时上面的代码也会显示错误,只要空值已经被一些其他值替换,如“”、“\N”、空等。

使用 Extractors.Csv(nullEscape:"\N");

所以我们必须在默认的 Extractor 中使用 nullEscape 参数来排除文件中的空值。

于 2017-07-26T05:13:01.693 回答