ベスト プラクティスBest Practices

ここでは、Delta Lake のクエリパフォーマンスを向上させるための方法について説明します。This section describes practices to improve query performance in Delta Lake.

データの場所のヒントを指定するProvide data location hints

列がクエリ述語でよく使用され、その列に大きなカーディナリティ (つまり、多数の個別の値) がある場合は、Z-ORDER BY を使用します。If you expect a column to be commonly used in query predicates and if that column has high cardinality (that is, a large number of distinct values), then use Z-ORDER BY. デルタレイクは、列の値に基づいてファイル内のデータを自動的にレイアウトし、クエリの実行中に関連のないデータをスキップするレイアウト情報を使用します。Delta Lake automatically lays out the data in the files based on the column values and use the layout information to skip irrelevant data while querying.

詳細については、「 Z オーダー (多次元クラスタリング)」を参照してください。For details, see Z-Ordering (multi-dimensional clustering).

適切パーティション列を選択しますChoose the right partition column

列を使用してデルタテーブルをパーティション分割できます。You can partition a Delta table by a column. 最も一般的に使用されるパーティション列は date です。The most commonly used partition column is date. パーティション分割する列を決定するには、次の2つの経験則に従います。Follow these two rules of thumb for deciding on what column to partition by:

  • 列のカーディナリティが非常に高い場合は、パーティション分割にその列を使用しないでください。If the cardinality of a column will be very high, do not use that column for partitioning. たとえば、userId 列を使用してパーティション分割する場合、1つの個別のユーザー Id を持つことができる場合、これは不適切なパーティション分割戦略になります。For example, if you partition by a column userId and if there can be 1M distinct user IDs, then that is a bad partitioning strategy.
  • 各パーティションのデータ量: パーティション内のデータが少なくとも 1 GB であることが予想される場合は、列でパーティション分割できます。Amount of data in each partition: You can partition by a column if you expect data in that partition to be at least 1 GB.

ファイルの圧縮Compact files

デルタテーブルにデータを継続的に書き込む場合、特に小規模なバッチでデータを追加する場合は、時間の経過と共に大量のファイルが累積されます。If you continuously write data to a Delta table, it will over time accumulate a large number of files, especially if you add data in small batches. これは、テーブルの読み取り効率に悪影響を及ぼす可能性があり、ファイルシステムのパフォーマンスにも影響を与える可能性があります。This can have an adverse effect on the efficiency of table reads, and it can also affect the performance of your file system. 理想的には、多数の小さなファイルを定期的に少数の大きなファイルに書き直す必要があります。Ideally, a large number of small files should be rewritten into a smaller number of larger files on a regular basis. これは、圧縮と呼ばれます。This is known as compaction.

OPTIMIZEコマンドを使用してテーブルを圧縮することができます。You can compact a table using the OPTIMIZE command.