開発中に手持ちのExcelデータをTERADATAに入れたいことは多々あります。
ちょっとした件数(10万件程度)を入れるのに便利なツールの紹介です。
通常TERADATAに入れるやり方は、
1.CSVファイルにして、FASTLOADや、MULTILOADのスクリプトを書いてデータを投入する。
2.ACCESSに、TERADATAのODBCリンクテーブルを作成し、Excelからデータを貼る。
3.作成したいデータのinsert文を作成し、TERADATAへSQLを実行する。
上記のようなものだと思いますが、私は以下のような感想を持っています。
1の方法は、FASTLOADとMULTILOADのスクリプトの作成に手間がかかるのと、ExcelデータをCSVにする作業がある。後、そもそもFASTLOADはサーバにしかインストールしてないなんてこともあります。
2の方法は、MS製品なのでExcelのデータはACCESSに貼り付けできますが、リンクテーブル経由でデータを投入するのにすごい時間がかかります。
3の方法ではinsert文の作成をしないといけなくて、日付型のフォーマットも意識しないといけなくなります。
2の方法が一番便利だけど、数万件登録しようとするといつ終わるかわからないといった状況は避けたい。
そんな時に使えるツールを作りました。自分がプログラマ3年目あたりで作成したものですが、きちんとテストしています。
ダウンロードはこちらから 50MB近くあります。
[ツール詳細]
・Windows用です。
・zipを解凍してから利用します。
・java+jdbcで動きます。javaは7、jdbcはTERADATA13用があらかじめ入っています。
・フォルダ内のdataload.batに設定ファイル(xml)をドラッグして実行します。
<設定ファイルの書き方>
設定ファイルに以下を定義します。
・接続元の情報
・接続元からデータを取得するためのSQL(select)
・接続先の情報
・接続先にデータをロードするためのSQL(insert)
※ただし、設定ファイルをxmlにしたので、SQL(select)など条件に ">" や "<" を利用する場合はxmlのエスケープ が必要です。
サンプル
<?xml version="1.0" encoding="Shift_JIS" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Sample設定ファイル</comment>
<!-- ソース情報 -->
<entry key="SELECT_SQL">
Select
textfield
,datefield
,timestampfield
,decimalfield
From
table1
</entry>
<entry key="SELECT_USR"></entry>
<entry key="SELECT_PWD"></entry>
<entry key="SELECT_URL">jdbc:odbc:Driver=Microsoft Access Driver (*.mdb);DBQ=D:\sampledb\access\sample.mdb</entry>
<entry key="SELECT_JDBCDRIVER">sun.jdbc.odbc.JdbcOdbcDriver</entry>
<entry key="SELECT_FETCHSIZE">1000</entry>
<!-- ターゲット情報 -->
<entry key="INSERT_SQL">
INSERT INTO table1 (
textfield
,datefield
,timestampfield
,decimalfield
) values (
?,?,?,?
)
</entry>
<entry key="INSERT_USR">SAMPLEUSR</entry>
<entry key="INSERT_PWD">SAMPLEPWD</entry>
<entry key="INSERT_URL">jdbc:teradata://samplehost/CHARSET=KANJISJIS_0S,DATABASE=Sample,TMODE=ANSI</entry>
<entry key="INSERT_JDBCDRIVER">com.teradata.jdbc.TeraDriver</entry>
<entry key="INSERT_COMMITSIZE">10000</entry>
</properties>
ほぼ見たままの設定です。
もちろん、以前の記事で書いた通りinsertはexecuteBatchとしています。