csvをDBにロードしたい、というときに複数の方法があるようで、大量データを扱いたい時のパターンもいくつかあるみたい。今回はmoveToCloudというdashDBが提供しているスクリプトを使ってデータロードをしてみた。
このスクリプトでは、大量データを分割してそれぞれをgzipに固めてuploadしてくれるので、自力でえっちらおっちらアップするより高速と思われ。
キャプチャ多めで長い記事になってしまいましたが、10分もかからずできるはずです。
ローカルPCにあるデータを専用スクリプトを使って、softlayerのobjectstorageか、amazonのs3にアップロードして、そのデータをdashから抜き出すことができるものみたい。
(ちょろっとしたデータのロードはこちら→ http://qiita.com/azzeten/items/d10fa47d115093cffef8 )
S3の環境をつくる
①S3の環境を作成します。
・S3の画面にいきます。
・バケットの作成をクリックします。
・バケット名とリージョンを選べと言われるので、適当に選んで、作成。
(アップロードしたいファイル置き場を作る、といったイメージです)
②S3にアクセスするためのユーザを作成し、access key等の認証情報をゲットする。
・IAMをクリックして、「新規ユーザの作成」をクリックします。
・ユーザ名は適当に・・。作成をしたら、以下のような画面が出てくるので、「ユーザーのセキュリティ認証情報を表示」をクリックして、キーをメモります。これ、あとで使うので、大事な情報です!
・S3をいじるようの権限をつけます。
「アクセス許可」タブから「ポリシーのアタッチ」で「AmazonS3FullAccess」を選びます。
(たぶんこれがないと、dashDBからS3の中身を見ようとした時に、エラーではじかれます。)
専用スクリプトで、ローカルのデータをupload
①専用スクリプトをダウンロード&セットアップします。
・dashDBのWEB画面から「Load」をクリックして「Move to cloud」をクリックします。スクリプトをダウンロードできるリンクがあるので、これをクリックしてPCに落とします。
・落としたらunzipします。
・plファイルが本体で、creds.txtというのが認証情報を記載するファイルです。plファイルに実行権限がついていない場合は、権限をつけてあげてください(適当に777で・・・。本当はもっと厳密にやりましょうw)
$ chmod 777 moveToCloud.pl
・creds.txtには、先ほどAWSで作ったユーザの認証キーを入力しておきます。26行目、27行目あたりです。
accesskey=xxxxxxxxx
secretkey=xxxxxxxx
②スクリプトを実行して、ファイルをアップロードします。
・テスト実行
エラー無く帰ってくればOK。
$ ./moveToCloud.pl -test -target s3::ap-northeast-1::dashtest2016::/dashloadtest -creds creds.txt
・アップロード開始!成功〜
$ ./moveToCloud.pl -source /パス/emptest.csv -target s3::ap-northeast-1::dashtest2016::/dashloadtest -creds creds.txt
Successfully uploaded to "dashloadtest.gz"
dashDBに突っ込む
①ロードするデータのあるS3の場所を選択します。
・「Load」から「Load from Cloud」を選択。Amazon S3を選んで、アップロードしたリージョン(endpoint)とaccess key とsecret access keyを入力して「Browse S3 Files」を選びます。
・別窓が開いて、どのファイルをアップロードするか聞かれるので、選んで、Nextをクリック。
②データをロードする対象のスキーマとテーブル名を選択します。
・クリックして選びます。
・「データを追記でinsertする(append)」か「既存データを消して新規でつっこむか」を選択します。今回はappendにしてみました。
③あとは道なりに「Next」で進みまくる。Run Nowを選んでNextをクリックすると、すぐにロードが開始されます。
・「Status and history」をクリックすると、ジョブのOK/NGや進捗状況を確認することができます。100%かつ緑のチェックが出てるので、successということで・・。
・ちなみに、JobIDの下の行をクリックして、青く反転させた状態で、「View log in blowser」をクリックすると詳細なログを確認することができます。NGのときはここでトレースとかをするのかなーといった具合です。たぶん。
④確認。
・「Table」をクリックして、データをロードしたテーブルをクリック。データの中身が見れればOK。(コマンドラインからselect * してもよかったですが・・・)
おまけ
今回はMacでやったのでスムーズにいきましたが、WindowsからだとCygwin入れてやるか、中にlinuxのVM入れてそこからやるとかする必要があるっぽい。