我想知道在数据湖分析工作中是否有任何提示和技巧可以找到错误。大多数情况下,错误消息似乎不是很详细。
尝试从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或默认值,而不是整个作业失败?
由于
答案 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 :(得分: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."