皆さん、こんにちは!
今日はテスト用にAmazon Aurora DBにデータを大量にインポートしなければいけなかったので
そのときのことを書いておこうと思います。
大量のデータをインポートする背景
テスト用のデータとして、ランダムで生成したデータが自分のローカル環境にあったのですが、
それをAurora DBにいれてテストしたかったという背景があります。。
しかし、データ自体の量が大きく、
再度、テストデータ生成スクリプトをAWS上で走らせてデータをDBにインサートするのが
面倒だったので。。。
S3にファイルをアップロードして、下で使用するLOAD DATAコマンドを使用したほうが
早いのではと思い、やってみました。
※結果論でいうと、普通にデータ生成スクリプトを再度動かしたほうが早かったです悲
データインポートを行う手順
まず、データのインポートを行う手順ですが、以下のように進めていきます。
- S3にテキストファイル(今回はCSVを使用)をアップロード
- S3からAurora DBにデータをインポート
S3にテキストファイルをアップロード
これは私がベトナムに住んでいることもあり。。
結構、苦戦しました。。
いくつかファイルをアップロードしたのですが、結果は以下の通りでした。
- 10GBのファイル:1.5h-2hでアップロード完了
- 25GBのファイル:時間がある程度たった後にエラー
※25GBのファイルは時間がかかりすぎるのでエラーとなっている模様。
最終的に、25GBのファイルは複数のファイルに分けてアップロードしました。
S3からAurora DBにデータをインポート
やっとのことで、S3へのファイルのアップロードが完了しました。
次に、以下にしたがって各種セットアップを完了します。
注意点としては、以下に書いてある通りに。。
AuroraのServerlessでは、「LOAD DATA FROM S3」コマンドが使用できない点です。
この機能は現在、Aurora Serverless クラスターでは使用できません。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.LoadFromS3.html
これを見過ごしていたので、、
自分は2-3時間無駄にしました悲
ServerlessのAurora DBに対して「LOAD DATA FROM S3」コマンドを実行すると、認証エラーではじかれます。
すべて設定が完了した後に、ついに以下SQLコマンドを実行します。
※file name -> ここではCSVのテキストファイルです。
> LOAD DATA FROM S3 's3://<backet name>/<file name>'
INTO TABLE <table name>
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(value01, value02, ...)
SET
col_name01 = value01,
col_name02 = value02,
...
;
結論としては、そんなに早くなかったです。
1つのファイルを完了するまでに1.5-3hくらいかかったので、普通にblk insertと同じくらいに感じました。
おそらくやり方が少し違うのかもしれません。。
(今回は、LOAD DATA FROM S3に渡すのは、1つのファイルのみを指定しました。複数ファイルを指定したわけではないです。)
ではでは!