メインコンテンツまでスキップ

Databricks でのデータの集計

この記事では、集計の一般的なセマンティクスを紹介し、バッチ クエリ、具体化されたビュー、ストリーミングを使用した結果コンピュートの違いについて説明します。

バッチ集計

バッチ集計は、 SQL でアドホック クエリを実行するとき、または Apache Spark DataFramesを使用してデータを処理するときに観察されるデフォルトの動作です。

テーブルまたはデータソースに対して記述された集計クエリは、データソース内のすべてのレコードの集計統計です。 Databricks 、可能な限り最適化とメタデータを活用してこれらのクエリを最適化し、大規模なデータセットに対して多くの集計を効率的にコンピュートできます。

バッチ集計のレイテンシとコンピュートのコストは、データサイズが大きくなると増加する可能性があり、事前に参照される集計値により、ユーザーの時間とコストを大幅に節約できます。 Databricks では、マテリアライズドビューを使用して集計値を増分更新することをお勧めします。 インクリメンタルな集計をご覧ください。

ステートフルな集計

ストリーミングワークロードで定義されたアグリゲートはステートフルです。 ステートフル集計は、観測されたレコードを経時的に追跡し、新しいデータを処理するときに結果を再計算します。

ステートフルな集計を計算する場合は、ウォーターマークを使用する必要があります。 ステートフルな集計クエリからウォーターマークを省略すると、ステート情報は時間の経過と共に無限に蓄積されます。 これにより、処理が遅くなり、メモリ不足エラーが発生する可能性があります。

ステートフル集計を使用してデータセット全体の統計を計算することはできません。 Databricks では、データセット全体の増分集計計算にマテリアライズドビューを使用することをお勧めします。 インクリメンタル集計をご覧ください。

コンピュート ステートフルで効率的かつ正確に集計するワークロードを構成するには、ソース システムからデータがどのように到着するか、また、 Databricks がウォーターマーク、出力モード、トリガー間隔を使用してクエリの状態と結果の計算を制御する方法を理解する必要があります。

インクリメンタル集計

マテリアライズドビューを使用すると、多くの集計値を増分的にコンピュートできます。 マテリアライズドビューは、データソースの変更を自動的に追跡し、更新時に集計値に適切な更新を適用します。 マテリアライズドビューによって返される結果は、バッチジョブまたはアドホッククエリを使用してソースデータの集計結果を再計算することによって返される結果と同じです。

近似的な集計

Databricks は非常に大規模なデータセットでの計算に優れていますが、集計に近似を使用すると、正確な結果を必要としない場合にクエリ処理を高速化し、コストを削減できます。

LIMITステートメントを使用すると、データのスナップショットをすばやく取得するのに十分な場合がありますが、ランダム性が発生したり、サンプリングがデータセット全体に分散されたりする保証はありません。

Spark SQL には、数値データまたはカテゴリ データの集計を近似するための次のネイティブ メソッドがあります。

また、 TABLESAMPLE でサンプルの割合を指定して、データセットからランダムサンプルを生成し、近似集計を計算することもできます。 TABLESAMPLE 句を参照してください。

集計統計を使用したデータセットの監視

レイクハウスモニタリングは、集計統計とデータ分布を使用して、データ品質を経時的に追跡します。 レポートを生成して傾向を視覚化し、アラートをスケジュールしてデータの予期しない変更にフラグを立てることができます。 Databricks レイクハウスモニタリングの概要を参照してください。