Photonとは?
Photon 、 SQLワークロード、 DataFrame API呼び出し、 ETLパイプライン、ステートレス ストリーミング ワークロードを高速化するDatabricksネイティブのベクトル化クエリ エンジンです。 Photonはデータを列方向のバッチで処理するため、従来の行ベースの実行に比べて大幅なパフォーマンス向上を実現します。PhotonはApache Spark APIsとも互換性があるため、既存のコードを変更することなく使用できます。
Photonの仕組み
サポートされている操作の場合、PhotonはJVMベースのSpark SQL実行エンジンをネイティブC++ランタイムに置き換えます。Apache Sparkのクエリ最適化ツール(Catalyst)は引き続きクエリの計画を行いますが、実行レイヤーではPhotonが引き継ぎ、データを行単位ではなく列単位のバッチで処理します。Photonクエリ実行中にサポートされていない操作に遭遇した場合、透過的にSparkにフォールバックします その操作の残りの部分については。
Photonはデータを一度に数千行ずつバッチ処理するため、最新のCPUは1サイクルあたり複数の値を評価するSIMD命令を使用できる。JVMではなくネイティブ C++ で実行することにより、 Photonガベージ コレクションの停止、JIT ウォームアップ遅延、メモリ オーバーヘッドを排除します。 列形式のバッチ処理により、キャッシュに適したシーケンシャル読み取りが可能になり、メモリ帯域幅と CPU パイプラインの効率が最大化されます。
Photonのアーキテクチャは、いくつかの点でパフォーマンスを向上させています。
- クエリの高速化 : 業界標準の TPC-DS ベンチマークで測定した場合、 Photon他のクラウド データウェアハウスと比較して、データとアナリティクス ワークロードに対して最大 5 倍優れた価格/パフォーマンスを提供します。
- 最適化された結合とシャッフル :ソートマージ結合を高性能ハッシュ結合に置き換え、再設計された列指向シャッフルを使用して、大規模な結合のスループットを向上させます。
- 書き込みパフォーマンス : Photon ネイティブ Parquet ライターは、Delta Lake、Apache Iceberg、および Parquet の書き込みを高速化します。これには、
UPDATE、DELETE、MERGE INTO、INSERT、およびCREATE TABLE AS SELECT操作が含まれます。数千列にも及ぶ幅の広い表では、特に顕著な改善が見られます。 - スキャン効率 :フィルタプッシュダウン、辞書プルーニング、行グループスキップを実装することで、多数の小さなファイルを処理する場合でも、ストレージから読み込むデータ量を削減します。
- ディスク キャッシュと同時実行性 : ディスク キャッシュを介した高速な繰り返しアクセスを提供し、対話型BIワークロードでの並列クエリのスループットを改善します。
- SQLおよびデータフレームAPIとの統合 : Python 、R、 Scala 、 JavaにおけるSQLおよびDataFrame APIsをサポートし、コードの変更は不要です。
Photonは、大規模なデータセットを処理する長時間実行クエリにおいて最大のメリットを発揮します。通常2秒以内に完了するクエリでは、実行時間がデータ処理ではなく計画とスケジューリングのオーバーヘッドによって占められているため、目立った改善は見られません。
Databricksプラットフォームとの統合
Photonは、Databricksプラットフォーム全体のワークロードを高速化します。Photonを活用するために、コードやクエリを変更する必要はありません。
- SQLアナリティクスとBI : PhotonはすべてのSQLウェアハウスのエンジンであり、ダッシュボード、アドホック クエリ、およびスケジュールされたレポートを強化します。
- ETLとデータエンジニアリング :SQLまたはDataFrame APIを使用して構築されたバッチジョブは、スキャン、結合、集計、書き込みの速度が向上します。ネイティブのParquetライターは、 Delta Lake 、 Apache Iceberg 、またはParquetテーブルへの取り込みに特に効果的です。
- LakeFlow Spark宣言型パイプライン : パイプライン構成でPhoton有効にすると、 LakeFlow Spark宣言型パイプラインの実行が高速化されます。
- ストリーミング : Photon 、 DeltaまたはParquetシンクへの書き込み時にステートレス ストリーミングをサポートします。 サポートされているデータソースには、Delta、Parquet、CSV、JSON、Kafka、Kinesisが含まれます。ステートフルストリーミングはサポートされていません。
- AIと機械学習 :Photonは、Spark SQL、DataFrames、特徴量エンジニアリング、およびGraphFramesの操作におけるパフォーマンスを向上させます。
Photonの有効化
Photon 、サーバレス コンピュート、 SQLウェアハウス、およびサーバレスLakeFlow Spark宣言型パイプライン パイプラインでは常に有効になっています。
クラシック汎用コンピュート、ジョブ コンピュート、およびクラシックLakeFlow Spark宣言型パイプライン パイプラインの場合、 Photon安全に有効になっており、コンピュートの作成または編集時に [パフォーマンス ] の下にある Photon Acceleration を使用 ] チェックボックスで切り替えることができます。 Photon加速の使用」を参照してください。 クラスターAPIまたはジョブAPIを使用してこれらのリソースを作成する場合は、 runtime_engineをPHOTONに設定してPhoton明示的に有効にする必要があります。 パイプラインAPI使用する場合は、 photonをtrueに設定します。
Photonの有効化が必要な機能
以下の機能を使用するには、Photonを有効にする必要があります。
- 読み取りと書き込みの予測I/O。 「予測 I/O とは」を参照してください。
MERGE、UPDATE、およびDELETEステートメントでの動的ファイルプルーニング。「動的ファイルプルーニング」を参照してください。
サポートされているインスタンスタイプ
Photonは、ドライバーノードとワーカーノード上で、Gravitonベースのインスタンスを含む、多数のインスタンスタイプをサポートしています。Photonインスタンスタイプは、同じインスタンスタイプを非Photonで実行する場合とは異なる速度でDBUを消費します。 。 PhotonインスタンスとDBU消費の詳細については、 Databricks価格ページを参照してください。
サポートされている演算子、式、およびデータ型
Photonは、以下の演算子、式、およびデータ型をカバーしています。クエリがサポートされていない操作を使用する場合、Photon はその実行部分について、透過的に Spark ランタイムにフォールバックします。
演算子
- スキャン(Parquet、Delta、CSV、JSON)、フィルター、プロジェクト
- ハッシュ集約/結合/シャッフル
- ネストループ結合
- NULL 対応アンチジョイン
- 空間結合(
ST_Intersects、ST_Contains、ST_Covers、ST_Equals、ST_Touches、ST_Within、ST_DWithinをサポートするブロードキャストおよびシャッフルバリアント) - ユニオン、拡張、スカラーサブクエリ
- Delta/Parquet 書き込みシンク
- ソート、トップK、制限
- ウィンドウ機能
式
これらの分類は代表的なものであり、網羅的なものではありません。各カテゴリー内の個々の機能には制限がある場合があります。
- 比較 / ロジック
- 算数/数学
- 条件付き(IF、CASEなど)
- String
- キャスト
- ネストされた型に対する Min/Max/MinBy/MaxBy を含む集計値
- 日付/タイムスタンプ/日付形式
データの種類
- バイト/ショート/int/ロング
- ブール値
- 文字列/バイナリ
- DECIMALタイプ
- フロート/ダブル
- 日付/タイムスタンプ
- TimestampNTZ
- 構造体
- array
- Map
- バリアント
- 空値
- ジオメトリ
- 地理
- 連結された文字列
Photonの使用状況を監視する
以下のツールを使用すると、クエリの実行状況のうち、Photon上で実行されている部分を監視できます。
- Spark UI (クラシックな汎用およびジョブ コンピュート): の SQL /DataFrame タブでは、クエリSpark UI PhotonDAG 視覚化で オペレーターがオレンジ色で表示されます。標準のSpark演算子は青色で表示されます。これにより、クエリのどの部分がPhotonの恩恵を受け、どの部分がSparkにフォールバックするかを特定できます。 。
- クエリ プロファイル ( SQLウェアハウスおよびサーバレス コンピュート): [実行の詳細] ビューには、 Photonで費やされたタスク時間の割合が表示されます。 クエリプランでは、Photon演算子(紫色)と標準演算子(灰色)が区別されています。
クエリが想定どおりにPhoton使用していないことに気づいた場合は、クエリがサポートされていない操作、UDF、またはSparkへのフォールバックを引き起こすデータ形式を使用しているかどうかを確認してください。 。
制限
-
ワークロードがサポートされていない操作に遭遇した場合、コンピュート リソースは、その操作の残りの部分について透過的にSparkランタイムに切り替えます。 あなたのクエリは依然として正しい結果を出力します。
-
Photon 、UDF (ユーザー定義関数)、 RDD APIs 、またはデータセットAPIsをサポートしていません。
-
ステートフルストリーミングはサポートされていません。Photonはステートレスストリーミングのみをサポートしています。
-
Photonは、通常2秒未満で実行されるクエリのパフォーマンスを向上させるものではありません。
-
Photonを使用するGravitonベースのインスタンスは、 LakeFlow Spark宣言型パイプライン、 Databricks Container Services 、またはDatabricks SQLウェアハウスをサポートしません。