ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

Java16 mapMulti

2021-03-21 21:26:11 | PG(Java)

2021/3/16にJava16が出たので、例によって変更点を見てみました。

皆が注目しているrecordパターンマッチングinstanceofは、まぁいいとして。

きしださんのサイトに載っていた「内部クラスにstaticメンバーが書けるようになった」のって、注目されてないけど意外と大きいと思います。
内部クラスにstaticメソッド、たまに定義したかったんですよねw

Streamに追加されたことで注目されているtoListも確かに便利そうですが。
不変リストなので、可変リスト版も欲しかったところ。今後追加されたら、どういうメソッド名になるのやら^^;

それより、桜庭さんのサイトに載っていたことで初めて知ったのがStreamのmapMultiメソッドです。
桜庭さんのサンプルを見てもいまいちぴんと来なかったんですが、実際に試してみて分かりました。
これは、faltMapと機能は同等で、形式が異なるメソッドなんですね。
・flatMapは、「変換された値を持つStream」を返す形
・mapMultiは、変換された値を「consumerに登録していく」形
Streamを作るのが面倒な場合は、flatMapよりmultiMapの方が便利そうです。
(flatMapでいちいちStreamを作るのが面倒…と批判されていたことに対する答えが、mapMultiなのでしょう)
ただし、flatMapは返す型が引数で分かるので型推論可能ですが、mapMultiのConsumerは型推論できないので型引数を明示しないといけない事があるのが、ちょっと残念な点ですね…。

あと、Integer等のプリミティブ型のラッパークラスのコンストラクターが、Java9から非推奨になっていたらしいんですが、Java16で削除対象(forRemoval=true)になったんですね。
自分はInteger等のコンストラクターは使わないけど、使ってるコードは多そうなので、本当に削除されたらけっこう影響が大きそうですね^^;

コメント

JDBC PreparedStatement

2021-02-10 23:59:59 | PG(Java)

久しぶりに生JDBCのPreparedStatementを書こうと思ったら、細かい部分を忘れていたので、改めてメモ

以前書いていたメモは中途半端にexecuteUpdateとexecuteBatchしか無かったので、executeQueryも追加。
あと最終更新は10年前で^^;try-with-resources構文を使ってなかったので、使うよう修正。

Java8で日付時刻APIが追加になって、既にJava15の時代だというのに、PreparedStatementやResultSetはまだ日付時刻APIに対応していないようだ。
(今の時代に生JDBC使うことはまず無いんだろうけど^^;)
しかしjava.sql.DateにはLocalDateとの変換メソッドが追加されていた。これは知らなかったので、メモした。

コメント

asakusa run

2020-12-24 22:54:23 | PG(分散処理)

Asakusa Framework Advent Calendar 2020の24日目です。

Asakusa CLI(asakusaコマンド)のサブコマンドにrunというものがあります。
これは、バッチを実行するサブコマンドです。

asakusa run バッチID -A 引数=値

run以外のサブコマンドは情報表示用ですが、runはバッチを実行するので、かなり毛色が違いますね。

バッチを実行するには従来からYAESSというシェルがあり、asakusa runという手段が出来ても、本番環境でのバッチの実行はYAESSで行うべきということは変わっていないようです。

ではasakusa runは何に使うかというと、テスト環境でバッチを実行したい場合、特にWindows環境で実行したい場合に使用します。
YAESSはシェルなのでLinux上でしか使えませんが、asakusaコマンドはLinux用のシェルとWindows用のcmdファイルが提供されているので、Windows上でもバッチを実行できるのです。

とは言っても、M3BPSparkはWindows上では動かせないので、ピュアJavaの実行環境であるVanillaで実行することになると思います。

コメント

asakusa generate ddl

2020-12-23 12:18:09 | PG(分散処理)

Asakusa Framework Advent Calendar 2020の23日目です。

Asakusa CLI(asakusaコマンド)のサブコマンドにgenerate ddlというものがあります。
これは、バッチが使用しているデータモデル(Direct I/O HiveのDMDL)からApache HiveのDDLを生成するものらしいです。

asakusa generate ddl hive バッチID

個人的にはHiveはあまり好きでないんですが(なんでもかんでもSQLで扱おうとするな!)、Hiveのメタストアは意外と使われているみたいなんですよね(AWSとか)。

コメント

asakusa generate dot

2020-12-22 17:23:06 | PG(分散処理)

Asakusa Framework Advent Calendar 2020の22日目です。

Asakusa CLI(asakusaコマンド)のサブコマンドにgenerate dotというものがあります。
これは、バッチに含まれる演算子(Operator)が実行される順序の図(グラフ)を生成するものです。

asakusa generate dot operator バッチID -o 出力先ファイル

これでdotファイルが作られるので、Graphvizに渡すと図が表示されます。

コメント

asakusa list plan

2020-12-21 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2020の21日目です。

Asakusa CLI(asakusaコマンド)のサブコマンドにlist planというものがあります。
これは、バッチの実行計画、すなわちバッチ内に含まれる演算子(Operatorのメソッド)が実行される順序の情報を表示するものです。

asakusa list plan バッチID

ここで表示されるvertex IDは、例えばM3BPの実行ログに出力されたりします。

コメント

asakusa list directio

2020-12-20 22:10:12 | PG(分散処理)

Asakusa Framework Advent Calendar 2020の20日目です。

Asakusa CLI(asakusaコマンド)のサブコマンドにlist directioというものがあります。
これは、バッチ内に含まれるDirect I/OのImporter/Exporterのパスを表示するものです。

asakusa list directio input バッチID
asakusa list directio output バッチID

入出力を区別せずに同時に出してくれるオプションがあるといいんですけどね。

また、directioと同様に、WindGateのパス(テーブル名?)を表示するlist windgateサブコマンドもあります。

コメント

asakusa list operator

2020-12-19 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2020の19日目です。

Asakusa CLI(asakusaコマンド)のサブコマンドにlist operatorというものがあります。
これは、バッチ内に含まれる演算子(Operatorのメソッド)の一覧を表示するものです。

asakusa list operator バッチID

ジョブフロー毎に出てくれるといいような気もしますが、指定するのはバッチIDです。

コメント

asakusa list jobflow

2020-12-18 23:36:13 | PG(分散処理)

Asakusa Framework Advent Calendar 2020の18日目です。

Asakusa CLI(asakusaコマンド)のサブコマンドにlist jobflowというものがあります。
これは、Batch内に含まれるJobFlowの一覧を表示するものです。

asakusa list jobflow バッチID

まぁ、たいていの場合は1バッチ1ジョブフローだと思うので、そういう場合はあまり意味が無いかもしれませんが^^;

コメント

asakusa list parameter

2020-12-17 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2020の17日目です。

Asakusa CLI(asakusaコマンド)のサブコマンドにlist parameterというものがあります。
これは、バッチの実行時引数(YAESSの-Aで指定する引数)を表示するものです。

asakusa list parameter バッチID

Importer/Exporterでバッチ引数を指定している場合は、その情報が自動的に収集され、このサブコマンドで表示されます。
しかし、Operatorで使っているBatchContextはさすがに自動収集はされません。Batchアノテーションのparametersに記述してあれば、それが表示されます。
(なので、少々面倒ではありますが、Batchアノテーションのparametersもちゃんと書いておく方が良いと思います)

コメント