0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ADF+SynapseAnalyticsの注意点:テーブルの分散方法について

Posted at

概要(ここだけ読めば全部わかる)

Azureでデータ分析基盤といえば、DataFactory+SynapseAnalyticsの組み合わせかもしれません。
しかし、DataFactoryからSynapseAnalyticsにテーブルを作らせると自動的に分散方法がラウンドロビンになるのでパフォーマンスに注意してください。先にSynapseAnalyticsでテーブルを作っておきましょう。というだけの話です。

SynapseAnalyticsの分散方式

Synapse Analyticsでは、処理の並列化を支えるためにテーブルの分散方式を指定します。
主に以下の3種類があります:

分散方式 説明
HASH 指定した列の値に基づいて分散。結合や集計が高速になることが多い。
ROUND_ROBIN 行を均等に分散。ロードは早いが、結合やフィルターでは遅くなる傾向。

ADF(DataFactory)でテーブルの自動作成をするとラウンドロビンになる。

ADFでデータのコピーアクティビティやデータフローアクティビティを使ってSynapseにデータをコピーする際、「ターゲットに存在しないテーブルは自動で作成」される機能がありますが、これは自動的に分散方式がラウンドロビンに固定されます。

ラウンドロビンのデメリット

  • JOIN性能が悪い(Hash分散テーブル同士なら高速なのに…)
  • クエリのスキャン効率が悪くなる
  • データ量が増えると処理遅延が顕著に

解決策:テーブルは事前に作っておく

最も確実なのは、Synapse側で事前にCREATE TABLEしておくことです。ADFの「テーブルの作成」機能は非常に便利なのですが、パフォーマンスを考慮した場合、ハッシュ分散にしたい!ということがあります。その場合はSynapse側でCREATE TABLEしておき、ADFにはテーブルの作成・再作成は行わせないということが重要です。(データフローのSinkで「テーブルの再作成」をさせるとまたラウンドロビンになってしまいますので注意です。)

まとめ

  • ADFで自動作成されるテーブルは「ROUND_ROBIN分散」
  • JOINやクエリ性能に悪影響を与える可能性あり
  • パフォーマンスを意識するなら、テーブルは事前にSynapseで作成しておくのが良い
  • テーブル設計は「あとからやる」ではなく「最初にちゃんとやる」が吉
    ちょっとした落とし穴ですが、知っているだけで劇的にパフォーマンスを改善出来ます。
    これからADF+Synapseを触る方の参考になればうれしいです。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?