使用U-SQL删除空列

时间:2016-09-16 06:15:13

标签: azure-data-lake u-sql

我有很多文件正在尝试加入。我碰巧知道每个文件中的许多列只包含空值,我可以不用它们。如何编写U-SQL语句以从文件中提取数据,检查除空值以外的列并将其排除?

谢谢!

2 个答案:

答案 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参数,以便排除文件中的空值。