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] -----------------------------------------------