1. はじめに

皆さんこんにちは。

今回はAzure DatabricksのDeltaテーブルのチューニングについて説明していきます。

 

2.Deltaテーブルとは

Deltaテーブルは、クラウドオブジェクトストレージ上のファイルのディレクトリとして
データを格納し、カタログとスキーマ内のメタストアにテーブルメタデータを登録します。
Delta Lakeは、Azure Databricksで既定のストレージ形式であり、
特に指定がない限りAzure Databricks上のすべてのテーブルはDeltaテーブルです。

 

3.Deltaテーブルのチューニングとは

Deltaテーブルのチューニングとは、Deltaテーブルのファイルサイズを調整したり、
データを並び替えたりすることでパフォーマンスを向上させることができます。

 

4.今回紹介するコマンド

【OPTIMIZE】

OPTIMIZEは、小さいファイルを大きいファイルに結合し、
Deltaテーブルを使用する時のクエリ速度を向上させる方法です。
OPTIMIZEは毎日実行することを推奨しています。
ただし、リソースがかかるため、コストもかかります。

[詳細]
・通常、DeltaテーブルでINSERT、UPDATE、DELETE等の操作を実行する際は、
データは複数の場所に保存されるため、クエリの速度は低下します。
ですが、DeltaテーブルでOPTIMIZEを実行すると、Delta Lakeがファイルを最適化し、
小さいファイルは大きいファイルに結合し、同じ場所で保存することができます。
・OPTIMIZE を実行した後、Delta Lake はテーブルの新規バージョンを作成するため、
旧ファイルは削除されることはありません。
※後ほどご説明するVACUUMを実行することで不要なファイルは定期的に削除することができます。

【ZORDER】

ZORDERは、実行するとDelta Lakeが指定された列の値でデータを並べ替え、
クエリの実行時に読み取るデータの負荷を軽減します。
ZORDERを利用する場合、リソースがかかるため、
OPTIMIZEと一緒に使用するのが最適です。

[詳細]
・OPTIMIZEとZORDERは、併用することでDelta Lakeが小さいファイルを大きいファイルに結合し、
同じ場所で保存し、指定された列に従いデータを並び替えることができます。
それによりクエリ速度を向上しますが、実行時間及びリソースがOPTIMIZEよりかかります。

【VACUUM】

VACUUMは実行すると、Deltaテーブルの全ての保存期間切れのデータファイルを削除します。

[詳細]
・ストレージ コストを削減するために、全てのテーブルで VACUUMを実行する必要があります。
・UPDATE、INSERT、DELETEコマンドが実行される頻度によって定期実行期間が異なります。

〇今回のブログでは、OptimizeTableというデモ用のテーブルを作成し、
作成したテーブルに対してチューニングコマンドを実行していきます。

5.実行方法

5-1.ノートブックを開く

【既存のノートブックを開く】

こちらの手順でワークスペースにアクセスします。

②Azure Databricksポータル画面で、サイドバーを展開します。

③Workspace > 自分のユーザー名 > 使用するノートブック を選択します。

【新規のノートブックを作成する】

こちらの手順でワークスペースにアクセスします。

②Azure Databricksポータル画面で、サイドバーを展開します。

③+New > Notebook を選択します。

④ノートブック名、言語、使用するクラスターを選択 > Create をクリックします。

⑤作成したノートブックが開かれます。

5-2.テーブル作成コマンドを入力し実行する

【文法】
%sql
create table [テーブル名](
[カラム名] [データ型],
[カラム名] [データ型]
)
PARTITIONED BY ([パーティションキー]);

【例】「OptimizeTable」テーブルが作成され、テーブルの「tAddress」に従って場所が分けられます。

5-3.データ挿入コマンドを入力しRUNを実行する

【文法】
%sql
insert into [テーブル名]
values (1, ‘ [値]’, ‘[値]’),(2, ‘[値]’, ‘[値]’),(3, ‘[値]’, ‘[値]’);
insert into [テーブル名]
values (4, ‘[値]’, ‘[値]’),(5, ‘[値]’, ‘[値]’),(6, ‘[値]’, ‘[値]’);
insert into [テーブル名]
values (7, ‘[値]’, ‘[値]’),(8, ‘[値]’, ‘[値]’),(9, ‘[値]’, ‘[値]’);

【例】作成したテーブルにデータを追加します。

 

【挿入されたデータを確認する】
以下のコマンドからデータを確認することができます。

5-4.OPTIMIZEコマンド、ZORDERコマンドを実行する

・テーブル全体にOPTIMIZEコマンドを入力しRUNを実行する

【文法】
%sql
OPTIMIZE [テーブル名]

【例】OptimizeTableにOPTIMIZEコマンドを実行します。

・パーティションのレコードにOPTIMIZEコマンドを入力しRUNを実行する

【文法】
%sql
OPTIMIZE [テーブル名] WHERE [列名] = ‘[値]’

【例】OptimizeTableのtAddress列のAddress1にOPTIMIZEコマンドを実行します。

・パーティションのレコードにOPTIMIZEコマンドを実行し、
列の値でレコードを並べ替えるためにZORDER を使用する

【文法】
%sql
OPTIMIZE [テーブル名] WHERE [列名1] = ‘[値]’
ZORDER BY ([列名2])

【例】OptimizeTableのtAddress列のAddress1にOPTIMIZEコマンドを実行し、
tNameごとにレコードを並び替えます。

5-5.VACUUMコマンドを入力しRUNを実行する

最後にVACUUMコマンドの実行方法についてご説明いたします。

【文法】
VACUUM [テーブル名] [RETAIN 数 HOURS] DRY RUN

【例】7 日以上経過したデータは削除されます。

6. まとめ

本記事ではAzure DatabricksのDeltaテーブルのチューニングについて説明しました。

ご紹介したコマンドを実行することで、
Deltaテーブルのファイルサイズを調整でき、パフォーマンスを向上させることができます。

今回の記事が少しでも皆さんの新しい知識や業務のご参考になれば幸いです。

 

日商エレクトロニクスでは、Azure Databricksの環境構築パッケージを用意しています。

Azure DatabricksやAzure活用、マイクロソフト製品の活用についてご相談事がありましたらぜひお問い合わせください!

Azure Databricks連載記事のまとめはこちら

お問い合わせはこちら


この記事を読んだ方へのオススメコンテンツはこちら