HAWQ のクエリ プランは、独立して実行できる複数のスライスに分割できます。HAWQ はどのようにクエリ プランをスライスに分割しますか?
3 に答える
#slices は #motion ノード +1 に等しいことに注意してください。
データを再配布する必要がある場合は、モーション ノードが計画に追加されます。集約、結合、ソート機能などはすべてモーション ノードを生成します。
たとえば、ソートはセグメントで部分的に実行できますが、異なるセグメントのデータはまだ順序付けされていません。マージソートを行うには、データを再分配して上部スライスの 1 つのセグメントを正確にする必要があります。
モーション ノード (収集/ブロードキャスト/再配布) は、並列実行の目的でクエリ プランを異なるスライスに分割するさまざまなシナリオに追加されます。たとえば、外側の子がテーブル A の SeqScan であり、内側の子がテーブル B の SeqScan であるネスト ループ結合があります。オプティマイザー コードでは、コストに基づいて、モーション ノード (ブロードキャストまたは再配布) をアウター チャイルドまたはインナー チャイルドに挿入することを決定します。
NestLoop
/ \
/ \
SeqScan A ブロードキャスト モーション
|
SeqScan B