簡體   English   中英

找不到 Redshift COPY 命令定界符

[英]Redshift COPY command delimiter not found

我正在嘗試將一些文本文件加載到 Redshift。 它們以制表符分隔,但在最終行值之后除外。 這導致未找到定界符錯誤。 我只看到在 COPY 語句中設置字段分隔符的方法,而不是設置行分隔符的方法。 任何不涉及處理我的所有文件以在每行末尾添加選項卡的想法?

謝謝

我認為問題不在於行尾缺少<tab> 您確定所有行的字段數都正確嗎?

運行查詢:

select le.starttime, d.query, d.line_number, d.colname, d.value,
le.raw_line, le.err_reason    
from stl_loaderror_detail d, stl_load_errors le
where d.query = le.query
order by le.starttime desc
limit 100

獲取完整的錯誤報告。 它將顯示帶有錯誤的文件名、不正確的行號和錯誤詳細信息。

這將有助於找出問題所在。

如果您的行的列數少於預期,您可能會收到 delimiter not found 錯誤。 如果最后一列為空,一些 CSV 生成器可能只在最后輸出一個單引號。

要解決此問題,您可以在 Redshift 復制選項上使用 FILLRECORD。

根據我的理解,錯誤消息Delimiter not found也可能是由於未正確指定COPY命令引起的,特別是未指定數據格式參數https://docs.aws.amazon.com/redshift/latest/dg/r_COPY。 html

在我的例子中,我試圖用這個表達式加載 Parquet 數據:

COPY my_schema.my_table
FROM 's3://my_bucket/my/folder/'
IAM_ROLE 'arn:aws:iam::my_role:role/my_redshift_role'
REGION 'my-region-1';

在查看系統表stl_load_errors時,我收到了Delimiter not found錯誤消息。 但是指定我正在以這種方式在表達式中處理 Parquet 數據:

COPY my_schema.my_table
FROM 's3://my_bucket/my/folder/'
IAM_ROLE 'arn:aws:iam::my_role:role/my_redshift_role'
FORMAT AS PARQUET;

解決了我的問題,我能夠正確加載數據。

我知道有人回答了這個問題,但我只是處理了同樣的錯誤,我有一個簡單的解決方案,所以我會分享它。

也可以通過說明從 s3 文件復制的表的特定列來解決此錯誤(如果您知道 s3 上的數據中的列是什么)。 在我的情況下,數據的列數少於表中的列數。 Madahava 對“FILLRECORD”選項的回答確實為我解決了這個問題,但后來我注意到一個應該填充默認值的列仍然為空。

COPY <table> (col1, col2, col3) from 's3://somebucket/file' ...

這可能與 OP 的問題沒有直接關系,但我收到了相同的Delimiter not found錯誤,這是由字段之一中的換行符引起的。

對於您認為可能有換行符的任何字段,您可以使用以下命令刪除它們:

replace(my_field, chr(10), '')

當您在 destin 表上發送的字段少於預期時,它也會拋出此錯誤。

我確定有多種情況會返回此錯誤。 我剛剛在調試其他人的代碼時遇到了一個我在其他答案中沒有提到的問題。 COPY 列出了 EXPLICIT_IDS 選項,它嘗試導入的表有一個數據類型為 identity(1,1) 的列,但它嘗試導入 Redshift 的文件沒有 ID 字段。 將身份字段添加到文件中對我來說是有意義的。 但是,我想刪除 EXPLICIT_IDS 選項也可以解決這個問題。

所以最近我在使用復制命令加載數據時在 Redshift SQL 中遇到了這個 Delimiter not found 錯誤。 就我而言,問題出在列號上。 我創建了一個包含 20 列的表,但我正在加載包含 21 列的文件。 我通過在表中創建 21 列來更正它,然后重新加載數據並使其正常工作。

希望對遇到同樣問題的人有所幫助。 多達

有時當您不指定文件類型時會彈出此消息,例如 CSV

參考: https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html

 copy "dev"."my"."table" from 's3://bucket/myfile_upload.csv' credentials 'aws_iam_role=arn:aws:iam::2112277888:role/RedshiftAccessRole' IGNOREHEADER 1 csv;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM