Edited at

mysqldump で出力した tsvを Redshift に import

More than 1 year has passed since last update.

mysqldump で出力したTSVには下記のような特徴があって扱いがめんどくさいですが、Redshiftのオプション指定することで 無加工で Redshift に取り込めます。


  • nullは \N になる

  • フィールド内のタブ(\t) は、 \\t になる (\でエスケープされる)

  • フィールド内の改行(\n) は、 \\n になる (\でエスケープされる)


mysqldump で tsv として dumpする

mysql> select * from users into outfile '/var/lib/mysql-files/users.txt';


s3 に上げる

$ aws s3 cp /var/lib/mysql-files/users.txt s3://bucket_name/


Redshift にロード

$ psql -U $user $db_name --host=$host --port=5439

# copy table_name from 's3://bucket_name/users.txt'
iam_role 'arn:aws:iam::000000:role/HogeRole'
blanksasnull
emptyasnull
delimiter '\t'
escape
;


オプション


  • delimiter は タブ文字 \t を指定する

  • escape オプションつけることで、エスケープされた改行とタブをそのまま取り込める

  • csv オプションは指定しない

  • emptyasnull blanksasnull はなくても大丈夫と思う