2016-03-27 10 views
1

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

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

Vertex failure triggered quick job abort. Vertex failed: SV1_Extract[0] with >error: Vertex user code error.

Vertex failed with a fail-fast error

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

Метод, который я нашел, состоит в том, чтобы извлечь все столбцы в строку и затем выполнить 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 возвращать нуль или значения по умолчанию, в случае ошибки синтаксического анализа, а не всю работу неисправного?

Благодаря

ответ

1

Да, вы можете использовать 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 Script:

TestNS.TestClass.TryConvertToInt(ClientID) AS clientID 

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

"E_RUNTIME_USER_EXTRACT_COLUMN_CONVERSION_INVALID_ERROR","message":"Invalid character when attempting to convert column data." 
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» в начале строки. Скопируйте всю строку текста и вставьте в блокнот (или другой текстовый редактор), чтобы прочитать фактическую ошибку.

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

+0

Спасибо за отзыв о подробной ошибке. Я подозревал, что проблема связана со специальными символами в файлах. Это подтвердило это. мои файлы кодируются AINSI, а не UTF-8. Есть ли способ справиться с этим, кроме преобразования файлов? – Olivier

+0

В настоящее время единственным обходным решением является создание собственного пользовательского экстрактора или извлечение полей в виде байта [], а затем преобразование кодовой страницы. Если вам нужна кодировка ANSI, пожалуйста, проголосуйте здесь: https://feedback.azure.com/forums/327234-data-lake/suggestions/13077555-add-ansi-code-page-support-for-built-in -extractors –