2016-08-19 6 views
0

にUNLOAD&COPYを防止することで失敗します。データを見る隠し文字私はCOPYを経由して輸出さ赤方偏移インスタンスにUNLOADを使用してデータをインポートする赤方偏移

Delimiter not found 

その理由は明らかです:

"full_url"|"http://www.blahblah.com/about.html?....%2F%2Fetc%2Fpasswd\\|"w4NrxtSqsSJ7B6U3Nv2I8SP9300="|"2016-08-17 16:03:08" 

"passwd \"の後ろに二重引用符がないことに注意してください。

これらの特定の行をdbから照会すると、

> SELECT value, len(value) FROM property WHERE id=1232323 

         value        | len 
----------------------------------------------------------+------- 
http://www.blahblah.com/about.html?....%2F%2Fetc%2Fpasswd | 58 

lenは58ですが、文字列の長さを数えれば実際は57文字です。この文字列の最後には、UNLO​​AD上で文字列を正しくエスケープすることができない、表示不可能な文字があると思います。

私はまた、クエリの一部として手動で引用符を入れようとしましたが、動作しませんでした。文字通り引用符を削除します。

このデータをどのように読み込むことができますか?私は、行を失うか、データを変更するとうまくいく。

UNLOAD:

UNLOAD (' 
SELECT 
    p.name as name, 
    p.value as value, 
    p.event_id as event_id, 
    e.created_server_ts 
FROM 
    property p 
    JOIN event e ON p.event_id=e.id 
') 
TO 's3://bucket/data' 
WITH CREDENTIALS 'aws_access_key_id=<KEY>;aws_secret_access_key=<SECRET>' 
ESCAPE ADDQUOTES GZIP MANIFEST; 

COPY:それは常にあるため、特定の行で失敗し

copy property 
from 's3://bucket/data' credentials 
'aws_access_key_id=<KEY>;aws_secret_access_key=<SECRET>' 
escape removequotes gzip manifest ACCEPTINVCHARS as '^'; 

参考のために、ここで私はアンロードするために使用するコマンドとCOPYは、

答えて

1

違反行を破棄しても問題がなければ、 MAXERRORオペレータを入力します。不正なレコードの数が指定した値を超えない限り、ロードは成功しますMAXERROR

COPY property 
FROM 's3://bucket/data' credentials 
'aws_access_key_id=<KEY>;aws_secret_access_key=<SECRET>' 
ESCAPE REMOVEQUOTES GZIP MANIFEST ACCEPTINVCHARS as '^' MAXERROR 500000; 

しかし、行を廃棄する前に、問題の文字が問題を引き起こしているかを調べるために興味深いものになるだろう。ここでは

は一例です。あなたは問題の文字は、あなたのUNLOADで問題に対処するステートメントをcase文を作成することができます知っていればその後

SELECT p.value, CHAR(RIGHT(p.value,1)) ad ASCII_CODE 
FROM property p 
WHERE p.id=1232323 

:たぶんのようなコマンドを実行しています。

+0

これは完全に機能して、10億のうち118行を失いました。正直なところ私は気にしません:)大部分のデータを持っていればうれしいです。本当にありがとう! – amirpc

+0

あなたは大歓迎です!喜んで助けてください! – BigDataKid

関連する問題