S3やiCOSに生データ・加工済みデータをアップロードして、必要に応じてDWHにデータをロードして分析をするということは普通によくある。
とはいえ、最初はみんな初心者なのでやり方がわからない。
Db2 Warehouse on CloudはAWSにも当然対応している(宣伝)ので、AWS上にデプロイされたDb2 Warehouse on CloudにS3からデータをロードする方法を簡単に説明する。
用意するもの
- Db2 Warehouse on AWS
- S3
- クライアントPC(ブラウザ/CLI)
これだけ
WebコンソールからS3データをロード
何がなんだかわからなくてもすぐ試せるのがGUIの良いところ。
Db2 Warehouse on Cloudはユーザーが利用可能なクライアントGUIとしてWebコンソールを提供しているので、これを使ってまずはS3からのロードを試してみる。
必要な情報と、その情報で正しくロードが動作することを確認するのに便利。
この画面をみると、[Endpoint], [S3 access ID], [S3 secret access key]の3つの情報が必要であることがわかる。
S3情報は自分の持っている情報を入れるだけで動作する。
エラーが出たときは以下を疑う
- アクセスキー、パスワードの入力ミス
- S3の権限について、特にロードログの書き出しが入るので書き込み権限をつけることを忘れずに
- アクション
- 読み込み
- GetObject
- GetObjectVersion
- 書き込み
- PutObject
- 読み込み
- リソース
- すべてのリソース
- arn:aws:s3:::バケット名/*
- すべてのリソース
- アクション
CLIからデータをロード
GUIからのロードが動作することが確認できたら、今度はCLIでのロードを実行する。
クライアントPCにDb2クライアントSWを導入して、Db2 Warehouse on Cloudに接続ができる状態にしておく必要がある。ここは割愛。
外部表での実行コマンド例は以下
db2 "INSERT INTO ターゲットテーブル SELECT * FROM EXTERNAL 'ソースファイル名' USING (s3('endpoint url', 'authkey1','authkey2', 'endpoint') DELIMITER ',' )"
特に注意することはないが、authkey1がユーザーID、authkey2がパスワードであることに注意するくらい。
ロードコマンドを利用したい場合は、Admin CMDを使って以下のようになる。
CALL SYSPROC.ADMIN_CMD('LOAD FROM "S3::endpoint url::s3-access-key-ID::s3-secret-access-key::s3-bucket-name::path-to-data-file" OF filetype additional-load-options INTO table-name)
何れにせよ、GUIからのロードがうまく行ったならば、あとはそのパラメータをCLIに当てはめるだけで実行可能。
最初からCLIで頑張るのではなく、GUIをうまく使うのがコツ。
唐突にFAQ
Q: データサイズはどれくらいにするのが正解ですか?
A: お客様次第。S3の場合はデフォルトで5GBのファイルサイズ制限があるので、5GBに分割してファイルがアップロードされていることが多い。過去のオンプレSWの仕様上100MBごとのファイルロードをしている人もいる。
Q: すべてのファイルを纏めてオブジェクトストレージにおいて、 一回のロードで終わるようにします!
A: 止めはしませんが、ロード失敗時のリトライ処理や時間、並列処理を用いたロードによるパフォーマンスを考慮したでしょうか?
Q: 外部表を使えばわざわざロードしなくてもそのままS3のデータに対してSQL投げれますよね?
A: はい、できます。ただしやはりS3への直接I/Oは重いです。外部表を利用したロードは非常に高速なので、必要なデータはさっさとデータベースに入れてしまうほうがみんなのストレスが減ります。