2017-06-07 56 views
0

有沒有方法在加載數據時指定Redshift複製命令的多個分隔符?爲Redshift複製命令指定多個分隔符

我有具有以下格式的數據文件: -

1 | ab | cd | ef

2 | gh | ij | KL

我使用這樣的命令: -

COPY MY_TBL 
    FROM 's3://s3-file-path' 
    iam_role 'arn:aws:iam::ddfjhgkjdfk' 
    manifest 
    IGNOREHEADER 1 
gzip delimiter '|'; 

字段之間用|並使用換行符分隔記錄。我如何將這些數據複製到Redshift中。因爲我上面的查詢給我一個未發現的分隔符錯誤

回答

0

不,分隔符是單個字符。

Data Format Parameters

指定用於在輸入文件中的單獨字段,諸如管道字符的單個ASCII字符(|),逗號(,),或製表符(\噸)。

您可以使用管道分隔符導入它,然後執行UPDATE命令以將STRIP()從空格中刪除。

0

上面的錯誤表明數據中的某些內容導致COPY命令失敗。這可能是許多事情,從文件編碼到那裏的一些時髦數據。最近我遇到了「未找到分隔符」錯誤,結果證明ESCAPE參數與我的數據中的反斜槓結合在一起,導致我的分隔符(\ t)無法被拾取。

幸運的是,你可以採取來幫助你縮小問題的幾個步驟:

stl_load_errors - 該系統表包含在複製操作過程中紅移記錄的任何錯誤的詳細信息。這應該能夠識別導致問題的數據文件中的行號。

NOLOAD - 將允許您運行復制命令,而無需實際加載任何數據到Redshift。這將執行COPY ANALYZE操作,並將突出顯示stl_load_errors表中的任何錯誤。

FILLRECORD - 這可以讓Redshift「填充」輸入數據中缺失的任何列。這本質上是爲了處理任何不正確的數據文件,但可以幫助診斷可能導致「未發現分隔符」錯誤的問題。這將使您可以將數據加載到Redshift,然後在數據庫中查詢,以查看列的開始位置。

從您發佈的樣本中,您的設置看起來不錯,但顯然這不是整個圖片。上述選項應該可以幫助您縮小違規行以幫助解決問題。