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

レイクハウスフェデレーションのパフォーマンスに関する推奨事項

この記事では、レイクハウスフェデレーション クエリのパフォーマンスを向上させるためのガイダンスを提供します。

AND演算子を使用して複数の述部を結合する

Databricks Runtime は、述語をリモート データベース エンジンにプッシュダウンして、ネットワーク経由でフェッチされるレコードの数を減らそうとします。述部をプッシュダウンできない場合、リモート・データベース・エンジンで実行されるクエリは、その述部 ( そのため、フィルタリングはDatabricks Runtimeを使用して行う必要があります。ただし、フィルターの特定の部分を押し下げることができない場合でも、フィルターの別の部分が AND 演算子で結合されていれば、押し下げることができます。

例1:

Databricks クエリ

SQL
SELECT * FROM foreign_catalog.schema.table WHERE name ILIKE 'john'

適切な変換がないため、 ILIKE 式をリモートデータベース (MySQL など) にプッシュダウンできません。フィルタリングは、Databricks Runtime を使用して行う必要があります。

リモート・データベースに送信されるクエリは、すべてのレコードを返します。

SQL
SELECT * FROM catalog.schema.table

例2:

Databricks クエリ

SQL
SELECT * FROM foreign_catalog.schema.table WHERE name ILIKE 'john' AND date > '2025-05-01'

適切な変換がないため、 ILIKE 式をリモート・データベース (MySQL など) にプッシュ・ダウンすることはできませんが、日付の比較は可能です。名前のフィルタリングは、引き続きDatabricks Runtimeを使用して行う必要がありますが、日付の比較により、フェッチされるレコードの数を減らす必要があります。

リモート・データベースに送信されるクエリは、レコードのサブセットを返します。

SQL
SELECT * FROM catalog.schema.table WHERE date > '2025-05-01'

リモート・データベースで実行するクエリを確認します

EXPLAIN FORMATTED コマンドを使用して、どのクエリがリモート・データベースに送信されるかを確認できます。

備考

実際のクエリは、 アダプティブ クエリの実行により、explain コマンド出力のクエリと異なる場合があります。

リモート・データベースからフェッチされるバッチのサイズを設定します

JDBC 転送プロトコルを使用するコネクターは、リモート・システムからデータをフェッチする方法を制御するように構成できます。

  • Databricks
  • Microsoft SQL Server
  • Microsoft Azure Synapse
  • MySQL
  • Oracle
  • PostgreSQL
  • Redshift
  • Salesforce データクラウド
  • テラデータ

JDBC フェッチ・サイズは、ラウンド・トリップごとにフェッチするロー数を決定します。デフォルトでは、ほとんどの JDBC コネクターはデータをアトミックにフェッチします。これにより、データ量が使用可能なメモリを超える可能性があります。

メモリ不足エラーを回避するには、 fetchSize パラメーターを設定します。 fetchSize が 0 以外の値に設定されている場合、コネクタはデータをバッチで読み取ります。バッチあたりの最大行数は、 fetchSizeの値と等しくなります。Databricks では、バッチ内の行数が少なすぎるとクエリ全体の実行時間が長くなる可能性があるため、大きな fetchSize 値 ( 100,000など) を指定することをお勧めします。

このパラメーターを使用すると、ワーカー ノードはデータをバッチで読み取ることができますが、並列で読み取ることはできません。

コンピュートの要件:

  • コンピュートは Databricks Runtime 16.1以上で使用する必要があります。 SQLウェアハウスは Pro または サーバレスで、2024.50 を使用する必要があります。
SQL
SELECT * FROM mySqlCatalog.schema.table WITH ('fetchSize' 100000)

パーティション サイズ パラメーター (Snowflake) を設定します

Snowflakeでは、複数のパーティションでデータをフェッチできるため、複数のエグゼキューターのエンゲージメントと並列処理が可能になります。partition_size_in_mb パラメーターを設定して、適切なパーティション サイズを選択することが重要です。このパラメーターは、各パーティションの推奨非圧縮サイズを指定します。 パーティションの数を減らすには、より大きな値を指定します。デフォルト値は 100 (MB) です。

partition_size_in_mb パラメーターは、推奨されるサイズを設定します。パーティションの実際のサイズは異なる場合があります。

コンピュートの要件:

  • コンピュートは Databricks Runtime 16.1以上で使用する必要があります。 SQLウェアハウスは Pro または サーバレスで、2024.50 を使用する必要があります。
SQL
SELECT * FROM snowflakeCatalog.schema.table WITH ('partition_size_in_mb' 1000)