Asakusa Framework Advent Calendar 2019の5日目、SQLをAsakusaFWに変換するポイントについてです。
SQLのUPDATE文はテーブルの(一部の)カラムを更新するので、AsakusaFWのUpdate演算子で実現できます。
別テーブルのデータを用いて更新する場合は、CoGroup演算子等で結合して更新します。
あと、RDBMSのトリガーのような機能はAsakusaFWには無いので、必要であれば別途コーディングする必要があります。
Asakusa Framework Advent Calendar 2019の5日目、SQLをAsakusaFWに変換するポイントについてです。
SQLのUPDATE文はテーブルの(一部の)カラムを更新するので、AsakusaFWのUpdate演算子で実現できます。
別テーブルのデータを用いて更新する場合は、CoGroup演算子等で結合して更新します。
あと、RDBMSのトリガーのような機能はAsakusaFWには無いので、必要であれば別途コーディングする必要があります。
Asakusa Framework Advent Calendar 2019の4日目、SQLをAsakusaFWに変換するポイントについてです。
SQLで最も使われるのはSELECT文だと思います。
SELECT文ではテーブルの結合やWHERE条件・集約など色々なことが出来ますが、それは後日取り上げるとして、今日はSELECT句に絞ります。
SELECT句とは「SELECT col1, col2, …」という部分のことです。
AsakusaFWに変換するときは、SELECTする項目だけを表すデータモデルを作って出力する形になるでしょう。
FROM句(あるいは集約の場合は集約結果)を表すデータモデルから、SELECT句で出力する項目の演算を行って出力します。
これにはAsakusaFWのConvert演算子がぴったりです。
Asakusa Framework Advent Calendar 2019の3日目、SQLをAsakusaFWに変換するポイントについてです。
SQLをAsakusaFWに変換するに当たって、まず必要なのはテーブルですね。
AsakusaFWでテーブルに相当するのはデータモデルです。
元々AsakusaFWはWindGate JDBCでテーブルをデータモデルとして読み書きすることができるので、それに準じます。
RDBの基本的なデータ型はAsakusaFWのDMDLのデータ型に対応するものがありますが、TIMESTAMP(秒より小さい単位、すなわちミリ秒やマイクロ秒)に直接対応するデータ型はAsakusaFWには無いので、必要であればTEXT等で代用することになります。
BLOB等のバイナリーや配列(ARRAY)は使えません。
もし配列を使いたいなら、JSONにでもして、TEXTとして保持するとか…?
また、AsakusaFWに制約(NOT NULLやUNIQUE等)の機構はありません。
必要であれば、そのチェックロジックを自分でコーディングする必要があります。
テーブル(データモデル)の結合にはAsakusaFWを実行する基盤(SparkやM3BP)のシャッフル機能を使うので、テーブルのインデックスは必要ありません(インデックスのような仕組みはありません)。
Asakusa Framework Advent Calendar 2019の2日目です。
Asakusa Frameworkをいきなり採用しようという人は稀(というか居ないのでは?^^;)であり、大抵は「既存の遅い処理をAsakusaFWに置き換えてみよう」というところから始まると思います。
しかし、どんなプログラムでもAsakusaFWに置き換えられるかというと、やはりそんな事は無く。
特に面倒なのは、処理の途中で(条件によって)SQLを実行するようなタイプです。(そういう作りだからこそ、N+1問題を引き起こして実行が遅くなりがちな訳ですが…)
AsakusaFWはまとめて(分散して)処理を行うので、条件によって必要性が変わるデータでも、全て事前に結合しておく方がコーディングが楽です。
なので、結合条件が細かく変わるケースや、結合するデータが複数レコードになるケースでは、AsakusaFW化するのは面倒になります。
ただ、単独のSQL文(SELECTやUPDATE)であれば、ほぼAsakusaFW化することが出来ると思います。
明日以降のアドベントカレンダーで、SQLをAsakusaFW化する際のポイントを説明していきたいと思います。
Asakusa Framework Advent Calendar 2019の1日目です。
アドベントカレンダーの初日ということで、2019年時点のAsakusa Frameworkの紹介を書いておきたいと思います。
Asakusa Frameworkは、分散バッチアプリケーションを開発・実行する為のフレームワークです。
同一のソースをリコンパイルするだけで異なる実行基盤、すなわちHadoop(MapReduce), Spark, M3BP, Vanilla用のバイナリーを生成することが出来ます。
また、分散処理とは別に、ファイル同士を結合して処理するにはとても便利だと思います。
2019年に出た新バージョン0.10.3だけですかね^^;
バグフィックスの他は、Direct I/O JSON(jsonファイルの読み書き)が追加されました。
個人的な注目点は、AsakusaFWが依存しているHadoopのバージョンアップです。
HadoopがJava8までしか対応していないのでAsakusaFWもJava8でしか使えないのですが、Hadoop3.3.0でJava11対応するらしいので、これがリリースされたらAsakusaFWのJavaの対応バージョンも上がると思います。
が、現状ではHadoop2系が対象なので、Hadoop3系になって大丈夫なのかなぁという思いが無くも無いです^^;(少なくとも、現在AsakusaFWを運用しているシステムであれば、動いている環境はHadoop2系のはずなので、バージョンアップは簡単ではないでしょう)
また、Asakusa on Sparkの為にはApache SparkもHadoop3.3.0およびJava11に対応してくれないといけないので、簡単にはいかなさそうな気がします…。