Как вызвать сбой сценария U-SQL, когда пустые данные генерируются / возвращаются из оператора SELECT? - PullRequest
1 голос
/ 26 марта 2019

У меня есть сценарий U-SQL, который обрабатывает некоторые данные с использованием некоторых UDO, а затем, наконец, выводит файл обратно в озеро данных Azure.

Ожидаемое поведение: если генерируемый файл пуст, сценарий должен завершиться ошибкой, однако я не могу его заставить это сделать.

Я попытался реализовать простой редуктор, который подсчитывает количество строк и выдает исключение, когда счетчик равен нулю. Тем не менее, он не вызывается во время выполнения, так как файл пуст, и сценарий завершается успешно.

Есть идеи, как это сделать?

Функция уменьшения ниже:

public override IEnumerable<IRow> Reduce(...)
{
    long count = 0;

    foreach (var row in input.Rows)
    {                
        count++;
        break;
    }

    if (count == 0)
    {
        throw new Exception("Zero rows found in table");
    }
    else
    {
        output.Set("Count", count);
        yield return output.AsReadOnly();
    }
}

1 Ответ

2 голосов
/ 26 марта 2019

Вы должны объявить функцию c #, чтобы вызвать пользовательскую ошибку, как мы это делали в sql: (Вы можете изменить функцию повышения ошибки в соответствии с вашими потребностями)

DECLARE @RaiseError Func<string, int> = (error) => 
    {
        throw new Exception(error);
        return 0;
    };

а потом что-то вроде ниже

@Query = 
    SELECT @RaiseError(value) AS ErrorCode
    FROM (VALUES ("my custom error description")) AS T(value);

OUTPUT @Query TO "/Output/errors.txt" USING Outputters.Csv(quoting : true);

Надеюсь, это поможет.

...