RedshiftでERROR:Delimiter not found

  • 2021-10-28
  • AWS
AWS

Redshift のテーブルに対して S3 に保存した JSON ファイル (NDJSON (Newline Delimited JSON)) を COPY しようとすると、下記のようなエラーが表示されました。

ERROR:Delimiter not found

COPY コマンドに対して明示的に

copy table from 's3://bucket/copy.json' 
credentials ...
delimiter ','

delimiter を付ける必要がある?と思い付けてみると、今度は別のエラーが表示されました。

ERROR:Invalid digit, Value '"', Pos 0, Type: Integer

結局のところ、Redshift 的には「CSV ファイルなのになんで区切り文字が見つからないけど?なんでダブルクォーテーションで値が始まってるの?えっ?JSON ファイルだったの?」ということで、COPY コマンドに JSON ファイルであることを付ければエラーは無くなりました。結果、NDJSON ファイルの内容を Redshit のテーブルに入れることができました。

copy teble from 's3://bucket/copy.json' 
credentials 'aws_access_key_id=XXXXXXXX;aws_secret_access_key=YYYYYYYY'
format as json 'auto'

ちなみに、credentials を設定していないと、下記のようなエラーが表示されました。

ERROR: invalid CREDENTIALS clause Detail: ----------------------------------------------- error: invalid CREDENTIALS clause code: 8001 context: query: 19629 location: aws_credentials_parser.cpp:76 process: padbmaster [pid=17644] -----------------------------------------------