データ統合パイプラインの最適化とビルドデータセットプロジェクション高度な詳細

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

高度な詳細

このページでは、データセットの投影が実際にどのように動作するかについての高度な詳細を説明し、データセットへのより最適化されたクエリを可能にします。投影の概要については、このページを参照してください。

内部的には、投影はあるアクセスパターンに最適化されたデータセットのコピーです。Foundry はデータセットの投影を子データセットとして保存します。これらは「投影」データセットと呼ばれます。親データセットは「標準」または「投影された」データセットと呼ばれます。

  • 投影には、いくつかの列のセットが含まれます。
    • 投影は、それらの列(またはそのサブセット)に対する読み取りのみを満たすことができます。

ビルドは、投影をメインデータセットの最新のデータと同期させるために使用されます。投影が最新でない場合でも使用されますが、あまり効果はありません。

投影されたデータセットが新しい SNAPSHOT トランザクションを受け取ると、下流の投影はすべて古くなり、プロジェクトが再構築されるまで利益がありません。投影されたデータセットが APPEND トランザクションを受け取ると、下流の投影は新しいトランザクションに対して部分的に古くなります。Foundry のクエリは、新しいデータを反映した結果を生成しながら、投影から利益を得られるように書き換えられます。

  • 投影のビルドは、ブランチごとに設定されます。投影は定期的に コンパクト化 され、小さなパーティションを大きなパーティションに組み合わせます。
  • 投影を追加しても、データセットの読み取り結果は変わりません。

低レベルでは、投影は以下のいずれかです。

  • おおよそグローバルにソートされたデータセット。
  • ハッシュバケット化およびローカルにソートされたデータセット(バケット化およびソート列が異なることに注意)。

投影データセット

投影データセットは、Foundry データセットとして保存されます。このデータセットはリソースとしては表示されませんが、Projections タブ内のリンクを介してアクセスできます。

  • 投影ビルドがアクティブな各ブランチには、投影データセット内に対応するブランチがあります。
  • データセットを削除すると、そのデータセットのすべての投影が削除されます。
  • Noho サービスは、投影の管理に使用され、投影を設定する際にデータセットスキーマに参照されます。

投影ビルド

投影を最新の状態に保つため、通常の Foundry ビルド システムを通じて非同期的にビルドされます。これにより、ユーザーはビルドの直後に投影されたデータセットを一貫してすぐに読み取ることができますが、投影データセットは定期的にビルドされる必要があります。

コンピューティングリソースの割り当てとコスト管理の柔軟性を確保するため、Foundry はこれらのビルドを自動的に作成しません。これらを設定するには、Projections タブのスケジューラウィジェットを使用します。

適切なビルドの頻度に関する普遍的なルールはありません。主な決定要因は、クエリがデータセットの 投影されていない 部分でパフォーマンスターゲット内で実行できる必要があることです。たとえば、パイプラインが1時間あたり10 GBを書き込み、フィルター処理された読み取りがパフォーマンスターゲットを達成するために100 GB以上スキャンしてはならないと判断した場合、投影が少なくとも10時間ごとにビルドされるようにする必要があります。

Spark プロファイル

投影では、オートスケーリングメカニズムを使用して、投影を構築するための適切なエグゼキュータ数を見つけます。投影ビルドが失敗するか時間がかかりすぎる場合を除いて、Spark プロファイルを手動で調整する必要はありません。

コスト

Foundry は、投影に関連するコスト(たとえば、ストレージやコンピューティング)をメインデータセットのプロジェクトに帰属させます。

投影のコンパクション

コンパクションは、投影に対して実行される主なメンテナンス操作です。これは、小さなソート済みファイルの大規模なコレクションを、大きなソート済みファイルに結合するプロセスを指します。コンパクションは、投影ビルドプロセスの一部として投影に自動的に発生します。

コンパクションにより、メインデータセットの入力トランザクションの数に関係なく、読み取りパフォーマンスが独立します。これにより、投影は頻繁にインクリメンタルに書き込まれたりストリーミングデータセットの読み取りを高速化できます。投影ビルドは、たまに平均よりも長く実行されることがあります。これは通常、コンパクションが原因です。

投影クエリプランニング

投影がクエリを満たすために利用可能な場合、それはメインデータセットよりも 常に 優先されます。たとえメインデータセットが、特定のクエリをサポートするために最適化された方法で書き込まれていたとしても、クエリプランニングの意味論は大幅に簡略化されます。

投影の選択

以下のクエリについて、クエリプランニング中にさまざまな投影に割り当てられる優先度は以下のとおりです。

  • 列に対するフィルター: 最も多くの列でソートされた投影が優先され、グローバルにソートされた投影がローカルにソートされたものよりも優先されます。たとえば、フィルターが x = 1 AND y = 2 の場合、投影は以下の優先順位で選択されます。
    • グローバルに列 x および y でソートされた投影
    • ローカルに列 x および y でソートされた投影(任意の列セットでバケット化されている)
    • グローバルに列 x でソートされた投影
    • ローカルに列 x でソートされた投影(任意の列セットでバケット化されている)
  • 列に対する結合: 結合列の正確なセットでバケット化された投影が優先されます。
  • 結合とフィルター: たとえば、クエリが列 F でフィルタリングし、列 J で結合する場合、投影は以下の優先度で選好されます。
    • J でバケット化され、列 F でローカルにソートされた投影
    • F でグローバルにソートされた投影
    • F でローカルにソートされた投影(列 J 以外の任意の列でバケット化されている)
    • J でバケット化された投影(列 F 以外のものでローカルにソートされている)

これらの優先度は、フィルターが通常十分に選択的であり、結合よりもフィルターを最適化する方が良いという見解を反映していますが、必ずしもそうではありません。