Asakusa Framework Advent Calendar 2019の24日目、SQLをAsakusaFWに変換するポイントについてです。
SQLのUNIONには、「UNION」と「UNION ALL」があります。
UNIONは重複データが有る場合はそれを排除して1レコードのみ出力しますが、UNION ALLは重複があっても構わず全て出力します。
UNION ALLはAsakusaFWではcore.confluent演算子がすばりそのものです。
UNIONは重複排除をするので、MasterCheck演算子で(全カラムをキーとして比較し)存在しないものだけ出力すれば良い、ような気がしますが、厳密には違います。
s1 UNION ALL s2 UNION s3の様に、複数のSELECTをUNION ALLでつないで最後だけUNIONになっている場合、それまで重複ありで複数レコード出力されていたものが、最後に重複排除されてしまうのだそうです。
そのため、UNIONはFold演算子で(全カラムを集計キーとして使用し)集計キー毎に1レコードだけ出力するのが良さそうです。