ひしだまの変更履歴

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

SQL to AsakusaFW:UNION

2019-12-24 00:00:00 | PG(分散処理)

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レコードだけ出力するのが良さそうです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする