2017-07-25 78 views
0

我創建了一個U-SQL查詢,它從DataLake Store獲取輸入文件並轉換這些值。最終的輸出存儲在DataLake Store中。U-SQL列類型轉換

DECLARE @in string = "system/dbotable{*}.tsv"; 
DECLARE @out string ="system/temp.tsv"; 

@searchlog = 
    EXTRACT 
     Id   int, 
     Address string, 
     number  int 
    FROM @in 
    USING Extractors.Tsv(); 

@transactions = 
    SELECT 
     *, 
     ROW_NUMBER() 
      OVER(PARTITION BY Id ORDER BY Id DESC) AS RowNumber 
    FROM @searchlog; 

@result = 
    SELECT 
     Id , 
     Address, 
     number 
    FROM @transactions 
    WHERE RowNumber == 1; 

OUTPUT @result 
    TO @out 
    USING Outputters.Tsv(); 

而且它顯示以下錯誤,

執行失敗,錯誤 '1_SV1_Extract錯誤:'{ 「diagnosticCode」:195887132 「嚴重性」: 「錯誤」, 「部件」:」 「RUNTIME」,「source」:「User」,「errorId」:「E_RUNTIME_USER_EXTRACT_COLUMN_CONVERSION_INVALID_ERROR」,「message」:「試圖轉換列數據時出現無效字符。」,「description」:「HEX:\」2243616E696E6522 \轉換輸入記錄。\ nPosition:第1行,列索引:1,列名稱:\「Id \」。「,」resolution「:」檢查輸入是否有錯誤或使用\「silent \」開關忽略over(under)輸入中有大小的行。\ n注意忽略\「無效的\」r OWS可能影響工作結果和類型必須是可空的被忽略轉換錯誤「」 HELPLINK。「:」」

+1

輸入文件是否有需要跳過的標題?你能舉一些樣品數據嗎? – wBob

回答

2

這似乎是ID列並不總是整數類型的。

我會首先將字段提取爲字符串,然後在第二步中嘗試使用用戶定義的函數將其轉換爲Int,如下所示:https://msdn.microsoft.com/en-us/library/azure/mt621309.aspx(基於DateTime的示例)。

另一種選擇是在提取器中使用silent:true,因此您會自動忽略轉換失敗的行。