Asakusa FrameworkのWindGate JDBCのメモ。
|
|
WindGate JDBCは、AsakusaFWでRDBと連携するコンポーネント。
WindGate | (AsakusaFW) Hadoop |
WindGate | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
RDB テーブル |
→ | 転送・変換 | → | HDFS SequenceFile |
→ | バッチ処理 | → | HDFS SequenceFile |
→ | 転送・変換 | → | RDB テーブル |
WindGate自体はその転送(と変換)を行うだけだが、DMDL上に“WindGateを使用する”という印を付けることにより、WindGateを使用する為のクラスが自動生成される。
その生成されたクラスをジョブフローのImporter/Exporterとして記述することでWindGateと連動する。
WindGateを片側だけ使うことも出来る。
すなわち、テーブルから読み込んで(Direct I/Oで)HDFS上にファイルを出力したり、(Direct
I/Oで)HDFSからファイルを読み込んでテーブルに出力したり、といった使い方が出来る。
WindGate JDBC用のImporter/Exporterクラスを作成する場合、DMDLの属性を利用するのが便利。
データモデル定義(dmdlファイル)に@windgate.jdbcの属性を付けておくと、DMDLのコンパイル時にImporter/Exporterの雛形クラスが生成される。
このクラスを継承して具体的なImporter/Exporterクラスを作成する。
"サンプル" @windgate.jdbc.table(name = "EXAMPLE") example = { "カラム" @windgate.jdbc.column(name = "VALUE") value : TEXT; };※Direct I/O CSVの場合、@directio.csv.field属性を付けなくても入出力対象になるが、WindGate JDBCでは@windgate.jdbc.column属性を付けないプロパティーは入出力対象にならない。
Importerの例 | Exporterの例 |
---|---|
public class ExampleFromTable extends AbstractExampleJdbcImporterDescription { |
public class ExampleToTable extends
AbstractExampleJdbcExporterDescription { |
プロファイル名には、使用する設定ファイルを指定する。
プロファイル名が「asakusa
」のとき、「ASAKUSA_HOME/windgate/profile/asakusa.properties
」が使われる。
メソッド名 | 内容 | 例 |
---|---|---|
String getTableName() |
テーブル名。 デフォルトは、@windgate.jdbc.tableで指定した名前。 |
@Override |
List<String> getColumnNames() |
SELECTで読み込むカラム一覧。 デフォルトでは、@windgate.jdbc.columnが付けられたものだけになる。 |
@Override |
String getCondition() |
読み込む際のSELECT文のWHERE条件。 デフォルトは条件無し。 |
@Override |
Collection<? extends JdbcAttribute> getOptions() (AsakusaFW 0.9.0以降) |
インポート処理のオプションを指定する。[2016-12-10] | AsakusaFW 0.9.0時点では、指定できるオプションは無い。 |
メソッド名 | 内容 | 例 |
---|---|---|
String getTableName() |
テーブル名。 デフォルトは、@windgate.jdbc.tableで指定した名前。 |
@Override |
List<String> getColumnNames() |
INSERTするカラム一覧。 デフォルトでは、@windgate.jdbc.columnが付けられたものだけになる。 |
@Override |
String getCustomTruncate() (AsakusaFW 0.7.3以降) |
INSERT前にテーブルを削除する為のSQL文。 デフォルトでは、TRUNCATE TABLEで全データが削除される。 ${} でバッチ引数を指定できる。 |
@Override |
Collection<? extends JdbcAttribute> getOptions() (AsakusaFW 0.9.0以降) |
エクスポート処理のオプションを指定する。[2016-12-10] | @Override |
実際にWindGate JDBCでDBアクセスする際には、JDBCドライバーのライブラリー(jarファイル)が必要となる。[2017-06-03]
これは、実行環境のASAKUSA_HOME/windgate/plugin/の下に置く。
WindGate JDBCを使っているImporter/Exporterを持つジョブフローをJobFlowTesterでテストする場合、テスト環境にDBが必要となる。
この場合、テスト環境のASAKUSA_HOME/windgate/plugin/の下に置く。
(ShafuのAsakusa
Frameworkのインストールを実行するとテスト環境が作られるので、そこに置く)
※M3BPのWindGate JDBCダイレクトモードの場合は、ASAKUSA_HOME/m3bp/lib/に置く。
AsakusaFW 0.9.0で、Oracle11gのダイレクト・パス・インサートを使ってテーブルにデータを入れる機能が新設された。[2016-12-10]
ExporterクラスのgetOptionsメソッドでORACLE_DIRPATHを返すと、使用されるINSERT文にAPPEND_VALUESヒントが追加される。
public class ExampleToTable extends AbstractExampleJdbcExporterDescription {
@Override
public String getProfileName() {
return "asakusa";
}
〜
@Override
public Collection<Option> getOptions() {
return Arrays.asList(Option.ORACLE_DIRPATH);
}
}
なお、OptionはJdbcExporterDescription内で定義されている列挙型である。
この機能を使う為には、使用するプロファイルにORACLE_DIRPATHを指定する必要がある。
〜 resource.jdbc.optimizations = ORACLE_DIRPATH 〜
M3BPのWindGate JDBCダイレクトモードの場合は、以下のように書く。[2017-06-03]
〜
com.asakusafw.dag.jdbc.asakusa.optimizations=ORACLE_DIRPATH
〜