MySQL
redshift

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 はなくても大丈夫と思う