Удаление нулевых столбцов с помощью U-SQL

У меня есть много файлов, которые я пытаюсь объединить. Я знаю, что многие столбцы в каждом из этих файлов не содержат ничего, кроме нулевых значений, и я могу обойтись без них. Как я могу написать оператор U-SQL для извлечения данных из файлов, проверки наличия столбцов только с нулями и их исключения?

Спасибо!


person Whit Waldo    schedule 16.09.2016    source источник


Ответы (2)


Наиболее эффективным подходом, вероятно, было бы написать собственный экстрактор, который просто пропускал бы строки, содержащие только нулевые значения.

В противном случае вы могли бы написать что-то вроде этого (обратите внимание на нулевые индикаторы для типов, не являющихся объектами):

@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.

person Michael Rys    schedule 10.10.2016

@data = EXTRACT c1 string, c2 int?, c3 DateTime? // ... more columns
    FROM "/path/file.csv"
    USING Extractors.Csv();

Иногда в приведенном выше коде также отображается ошибка, когда нулевые значения уже заменены другими значениями, такими как «», «\ N», null и т. Д.

ИСПОЛЬЗОВАНИЕ Extractors.Csv (nullEscape: "\ N");

поэтому мы должны использовать параметр nullEscape в экстракторе по умолчанию, чтобы исключить нулевые значения в файле.

person Arron    schedule 26.07.2017