Db2 Warehouse as a Service(旧名: Db2 Warehouse on Cloud)では、S3からのCSVデータロード方法は4つあります。
-
外部表によるデータのロード(INSERT INTO xxx SELECT * FROM EXTERNAL...)
- Db2 CLIを使用
- 大量データの場合は高速
- TIMESTAMP列がある場合は一旦VARCHAR列にする必要がある
- こちらを参照:Db2 Warehouse as a Service: 外部表によるS3からのCSVファイルのロード(INSERT INTO xxx SELECT * FROM EXTERNAL...)
-
LOADコマンド
- Db2 CLIを使用
- TIMESTAMP列もそのままLOAD可能
- この記事で説明します
-
Web GUIからのロード
- 上記1、2の方法が両方可能
- 外部表によるデータのロードの場合、TIMESTAMP列はエラーになる
- こちらを参照: Db2 Warehouse as a Service (Db2 Warehouse on Cloud): Webコンソールを使ったS3からのCSVファイルのロード
-
RESTAPIを使用したロード
- 以下を参考にしてください。ただしS3からのロードは
load_source
はS3
に指定し、server_source
の代わりにcloud_source
をパラメータに指定し、アクセス情報をセットする必要があります。API詳細
- 以下を参考にしてください。ただしS3からのロードは
当記事では2の「LOADコマンドによるS3からのCSVファイルのロード」について説明します。
参考: Loading data from Amazon S3
1. 実行方法
サーバー上でLOADコマンドを実行させるため、CALL SYSPROC.ADMIN_CMD
を使用してLOADを実行します。
以下のテーブル定義のテーブルにロードするとします:
TEST_TIMESTAMP
"COL1" INTEGER ,
"COL2" TIMESTAMP ,
"TEXT" VARCHAR(30 OCTETS)
以下のCSVファイルをロードするとします(文字コードはUTF-8):
CSVサンプル - test_timestamp.csv
371,"2024-09-05-09.35.17.753000","コメント"
372,"2024-09-05-10.35.17.753000","コメント"
この場合のコマンドサンプルは以下になります:
CALL SYSPROC.ADMIN_CMD(
'load from
"S3::<S3エンドポイント>::
<アクセスキー>::
<シークレットアクセスキー>::
<バケット名>::
<S3のCSVファイルのS3のパス>" of DEL
modified by codepage=1208
timestampFormat="YYYY-MM-DD-HH.MM.SS.UUUUUU"
MESSAGES ON SERVER INSERT into <テーブル名> ');
-
timestampFormat
はCSVの中身のフォーマットに合わせて設定しています。 -
codepage
1208はUTF-8です。 -
LOADのオプションはこちらを参考にしてください: https://www.ibm.com/docs/ja/db2/12.1.0?topic=commands-load#r0008305__title__10
以下の場合のコマンド例:
- S3エンドポイント: s3.ap-northeast-1.amazonaws.com
- S3バケット名: woc-test-202504
- csvファイル: data/test_timestamp.csv
- ロード先テーブル: TEST_TIMESTAMP
- アクセスキー: xxxxxxxxxxxxxx
- シークレットアクセスキー: yyyyyyyyyyyyyyyyyyyyyyyyyyyy
CALL SYSPROC.ADMIN_CMD(
'load from
"S3::s3.ap-northeast-1.amazonaws.com::
xxxxxxxxxxxxxx::
yyyyyyyyyyyyyyyyyyyyyyyyyyyy::
woc-test-202504::
data/test_timestamp.csv" of DEL
modified by codepage=1208
timestampFormat="YYYY-MM-DD-HH.MM.SS.UUUUUU"
MESSAGES ON SERVER INSERT into TEST_TIMESTAMP ');
以上です。