调试u-sql Jobs

时间:2016-03-27 10:52:21

标签: azure-data-lake u-sql

我想知道在数据湖分析工作中是否有任何提示和技巧可以找到错误。大多数情况下,错误消息似乎不是很详细。

尝试从CSV文件中提取时,我经常会遇到这样的错误

  

顶点故障触发了快速作业中止。顶点失败:SV1_Extract [0],带有>错误:顶点用户代码错误。

     

Vertex因失败快速错误而失败

尝试将列转换为指定类型时,似乎会发生这些错误。

我发现的技术是将所有列提取到字符串,然后执行一个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的东西在解析错误的情况下返回null或默认值,而不是整个作业失败?

由于

2 个答案:

答案 0 :(得分:3)

这是一个解决方案,无需使用代码(尽管Codebehind将使您的代码更具可读性):

CREATE OR REPLACE PROCEDURE export_cust(dir VARCHAR2, file_name VARCHAR2, tblname VARCHAR2) 
IS
  TYPE TabCurTyp  IS REF CURSOR;
  cur    TabCurTyp;
  row_value    varchar2(4000);
  file UTL_FILE.FILE_TYPE;
BEGIN  

 file := UTL_FILE.FOPEN(UPPER(dir), file_name, 'w', 32767);
 OPEN cur FOR 'SELECT col1||'',''||col2 as row_value FROM '|| tblname;
 LOOP
    FETCH cur INTO row_value;
    EXIT WHEN cur%NOTFOUND;
    UTL_FILE.PUT_LINE(file, row_value);  
  END LOOP; 

 UTL_FILE.FCLOSE(file);
END;
/

此外,您看到的有关错误消息含糊不清的问题与应该在返回所谓的内部错误消息后很快修复的错误有关。今天的工作是做以下事情:

  1. 在Visual Studio的ADL工具中,打开失败作业的作业视图。
  2. 在左下角,点击作业详细信息区域中的“资源”链接。
  3. 加载作业资源后,单击“个人资料”。
  4. 在该行的开头搜索字符串“jobError”。复制整行文本并粘贴到记事本(或其他文本编辑器)中以读取实际错误。
  5. 这应该会给你确切的错误信息。

答案 1 :(得分:1)

是的,您可以使用U-SQL用户定义的函数来使用TryParse。你可以这样做:

在代码背后:

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