Отладка заданий u-sql

Я хотел бы знать, есть ли какие-либо советы и рекомендации по поиску ошибок в заданиях аналитики озера данных. Сообщение об ошибке в большинстве случаев кажется не очень подробным.

При попытке извлечь из файла CSV я часто получаю такую ​​​​ошибку

Сбой вершины вызвал быстрое прерывание задания. Ошибка вершины: SV1_Extract[0] с ошибкой >: ошибка кода пользователя вершины.

Ошибка вершины с отказоустойчивой ошибкой

Кажется, что эта ошибка возникает при попытке преобразовать столбцы в указанные типы.

Метод, который я нашел, состоит в том, чтобы извлечь все столбцы в строку, а затем выполнить SELECT, который попытается преобразовать столбцы в ожидаемый тип. Выполнение этих столбцов по столбцам может помочь найти конкретный столбец по ошибке.

@data =
    EXTRACT ClientID string,
            SendID string,
            FromName string,           
    FROM "wasb://..."
    USING Extractors.Csv();

//convert some columns to INT, condition to skip header
@clean =
    SELECT Int32.Parse(ClientID) AS ClientID,
           Int32.Parse(SendID) AS SendID,
           FromName,           
    FROM @data
    WHERE !ClientID.StartsWith("ClientID");

Можно ли также использовать что-то вроде TryParse для возврата нулевых значений или значений по умолчанию в случае ошибки синтаксического анализа вместо сбоя всего задания?

Спасибо


person Olivier    schedule 27.03.2016    source источник


Ответы (2)


Вот решение без использования кода (хотя Codebehind сделает ваш код более читабельным):

SELECT ((Func<string, Int32?>)(v => { Int32 res; return Int32.TryParse(v, out res)? (Int32?) res : (Int32?) null; }))(ClientID) AS ClientID

Кроме того, проблема, связанная с загадочностью сообщений об ошибках, связана с ошибкой, которая должна быть исправлена ​​в ближайшее время при возвращении так называемых внутренних сообщений об ошибках. Работа вокруг сегодня состоит в том, чтобы сделать следующее:

  1. В инструментах ADL для VisualStudio откройте представление невыполненного задания.
  2. В левом нижнем углу нажмите ссылку «ресурсы» в области сведений о вакансии.
  3. После загрузки ресурсов задания нажмите «Профиль».
  4. Найдите строку «jobError» в начале строки. Скопируйте всю строку текста и вставьте в блокнот (или другой текстовый редактор), чтобы прочитать реальную ошибку.

Это должно дать вам точное сообщение об ошибке.

person Michael Rys    schedule 28.03.2016
comment
Спасибо за подсказку по поводу подробной ошибки. Я подозревал, что проблема была в специальных символах в файлах. Это подтвердило. мои файлы имеют кодировку AINSI, а не UTF-8. Есть ли способ справиться с этим, кроме преобразования файлов? - person Olivier; 29.03.2016
comment
Прямо сейчас единственным обходным путем было бы написать свой собственный экстрактор или извлечь поля как byte[], а затем самостоятельно выполнить преобразование кодовой страницы. Если вы знаете, какая кодировка ANSI вам нужна, проголосуйте здесь: feedback.azure.com/forums/327234-data-lake/suggestions/ - person Michael Rys; 30.03.2016

Да, вы можете использовать TryParse, используя пользовательские функции U-SQL. Вы можете сделать это так:

В коде позади:

namespace TestNS
{
    public class TestClass
    {
        public static int TryConvertToInt(string s)
        {
            int i = 0;
            if (Int32.TryParse(s, out i))
                return i;
            return 0;
        }
    }
}

В сценарии U-SQL:

TestNS.TestClass.TryConvertToInt(ClientID) AS clientID

Похоже, у вас есть какие-то другие проблемы, так как я всегда получаю соответствующую ошибку в случае проблемы с преобразованием, например:

"E_RUNTIME_USER_EXTRACT_COLUMN_CONVERSION_INVALID_ERROR","message":"Invalid character when attempting to convert column data."
person Jamil    schedule 28.03.2016