2014-05-20 16 views
0

我遇到了一致性錯誤,試圖從S3中以臨時表格的形式將單列數據(全部數字)導入到Redshift中。這裏是我的查詢:從S3文件構建臨時表到Redshift

CREATE TEMP TABLE tmp_userid(userid bigint); 
COPY tmp_userid (userid) FROM 's3://name/recent_prem_idsonly.txt' 
CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=XXX'; 

導致:

ERROR: Load into table 'tmp_userid' failed. Check 'stl_load_errors' 
system table for details. SQL state: XX000` 

然後追蹤顯示

Error Code 1207: Invalid digit, Value '8', Pos 7, Type: Long 

我注意到,與userid數據類型把玩將帶動不同的錯誤,所以也許那裏有東西?我已經嘗試將文件另存爲csv和txt。

+1

它是否與'CREATE TEMP TABLE tmp_userid(userid text);'?然後我會在文件中查找無效數據,如錯誤消息所示。 –

+0

它沒有 - 我收到相同的錯誤,其中有一段代碼表示「字符串長度超過DDL長度」。 – itwentviral

回答

0

我意識到這個問題是由csv驅動的,它比Redshift喜歡的列有更多的[空]列。刪除它們會導致臨時表正確創建。

0

臨時表只存在於單個連接中。 Redshift COPY使用無法看到臨時表的「帶外」連接加載數據。只需使用帶有「_tmp」後綴的真實表格,並在完成後放下它。

+0

不幸的是,這個查詢圍繞着同一組錯誤:CREATE TABLE userid_tmp(userid bigint); COPY userid_tmp(userid)FROM's3://name/recent_prem_idsonly.txt' CREDENTIALS'aws_access_key_id = XXX; aws_secret_access_key = XXX'; – itwentviral

+0

現在有什麼錯誤?您可能需要將加載數據的用戶授予對新表的訪問權限。 –

+0

我不認爲這是真的。您可以使用單個連接來運行包含多個SQL命令的腳本,包括創建臨時表並將其複製到該腳本中,我已經完成並且它可以工作。 – FrontierPsycho

0

你有任何機會引用txt/csv文件中的值嗎?如果是,請刪除它們,或者添加'removequotes'來複制命令。 (我在csv文件中收到了與引號相同的錯誤)。

即使使用臨時表,我也一直在執行此操作(將數據加載到臨時表並將其與Redshift中的現有表結合使用,更新/插入到Redshift中的永久表)

+0

不...只是文件中的整數。 – itwentviral

相關問題