Amazon S3からAuroraに大量のデータをインポートする

Web開発

皆さん、こんにちは!

今日はテスト用にAmazon Aurora DBにデータを大量にインポートしなければいけなかったので

そのときのことを書いておこうと思います。

大量のデータをインポートする背景

テスト用のデータとして、ランダムで生成したデータが自分のローカル環境にあったのですが、

それをAurora DBにいれてテストしたかったという背景があります。。

しかし、データ自体の量が大きく、

再度、テストデータ生成スクリプトをAWS上で走らせてデータをDBにインサートするのが

面倒だったので。。。

S3にファイルをアップロードして、下で使用するLOAD DATAコマンドを使用したほうが

早いのではと思い、やってみました。

※結果論でいうと、普通にデータ生成スクリプトを再度動かしたほうが早かったです悲

データインポートを行う手順

まず、データのインポートを行う手順ですが、以下のように進めていきます。

  1. S3にテキストファイル(今回はCSVを使用)をアップロード
  2. S3からAurora DBにデータをインポート

S3にテキストファイルをアップロード

これは私がベトナムに住んでいることもあり。。

結構、苦戦しました。。

いくつかファイルをアップロードしたのですが、結果は以下の通りでした。

  • 10GBのファイル:1.5h-2hでアップロード完了
  • 25GBのファイル:時間がある程度たった後にエラー

※25GBのファイルは時間がかかりすぎるのでエラーとなっている模様。

最終的に、25GBのファイルは複数のファイルに分けてアップロードしました。

S3からAurora DBにデータをインポート

やっとのことで、S3へのファイルのアップロードが完了しました。

次に、以下にしたがって各種セットアップを完了します。

Amazon S3 バケットのテキストファイルから Amazon Aurora MySQL DB クラスターへのデータのロード - Amazon Aurora
Amazon S3 バケットに保存されているテキストファイルから Aurora MySQL DB クラスターにデータをロードします。

注意点としては、以下に書いてある通りに。。

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つのファイルのみを指定しました。複数ファイルを指定したわけではないです。)

ではでは!

タイトルとURLをコピーしました