tl;dr
- GoogleはDataflowのテンプレートを提供しているよ
- コードはGitHubで見られるよ
- いくつかのテンプレートはJavaScriptで変換の処理を書けるよ
- JavaScriptの処理はNashornを使っているよ
Google提供のDataflowテンプレートとは
名前の通り、Googleが提供していてるDataflowのテンプレートです。
これを使うことで、コードを(あまり)書かずに一定の処理が行えます。
提供されているテンプレートは、GCPのストレージ(GCS・Pub/Sub・Datastore・BigQuery・Spanner)間の移動を行うものが多く、例えば、
- Pub/SubからBigQuery(ストリーミング)
- GCSからBigQuery(バッチ・ストリーミング両方)
などがあります。
ちなみに、GCPのストレージ間移動以外のテンプレートとしては、Datastoreのデータ削除、GCS上のファイルの解凍・圧縮などがあります
また、ソースコードがGithubで公開されているので、実装を調べたりすることが出来ます。
Google提供のDataflowテンプレートのJavaScriptとは
いくつかのテンプレートでは、入力(ソース)から出力(シンク)との間に、JavaScriptでの処理(UDF)を挟むことが出来ます。
例えば、GCSからBigQueryでは、入力と出力の間に、
- 各行を引数として受け取る
- 処理結果をJSONとして返す
JavaScript関数を経由させることが出来ます(使わないことも出来ます)。
全部のテンプレートでJavaScriptが使えるのではなく、これが出来るテンプレートは、例えば、
などがあります(実際にはもう少しあります)。
どうやって処理しているの
DataflowやApache Beamの機能としてJavaScriptを扱えるわけではなく、テンプレートはJavaで書いており、JavaScriptの部分はJava組み込みのJavaScriptランタイム(Nashorn)で処理しています。
JavaScriptでパイプライン自体を書けるわけではないので、注意してください(2019年時点では)。
細かいのが気なる人向け
例えば、GCSからBigQueryのテンプレートでは、ここらへんで、GCSからの各行をJavaScriptの処理に渡しています。
JavaScript系の処理はJavascriptTextTransformerクラスにまとめられており、
-
ここらへんでJavaScriptのコードを取得し
-
ここらへんでScriptEngineManagerに渡して、JavaScriptランタイム(Nashorn)で処理する準備をしています