このトピックでは、Delta Lakeに関するよくある質問への回答を提供します。
- テーブルを作成できないのはなぜですか?
- ストリーミングデータをDelta Lakeに書き込むと、複数の小さなファイルが生成されます。どうすればよいですか?
- OPTIMIZEコマンドの実行に時間がかかるのはなぜですか?
- OPTIMIZEコマンドを実行できません。どうすればよいですか?
- OPTIMIZEコマンドを実行した後も、多くの小さなファイルが残っているのはなぜですか?
- VACUUMコマンドを実行した後も、多くの小さなファイルが残っているのはなぜですか?
- 最近生成およびマージされた小さなファイルを削除するにはどうすればよいですか?
- VACUUMコマンドを実行した後も、多くのDeltaログファイルが残っているのはなぜですか?
- Delta Lakeは、OPTIMIZEコマンドまたはVACUUMコマンドの自動実行をサポートしていますか?
テーブルを作成できないのはなぜですか?
Delta Lakeでテーブルを作成する場合、LOCATIONパラメーターを使用して、テーブルを格納するために使用するディレクトリを指定する必要があります。テーブルは、Sparkの外部テーブルです。テーブルを作成するときにディレクトリが存在しない場合は、新しいスキーマを持つテーブルが作成されます。ほとんどの場合、これは発生しません。LOCATIONパラメーターで指定されたディレクトリが存在する場合、テーブルの作成に使用されるスキーマは、ディレクトリ内のDeltaログファイルで定義されているスキーマと同じである必要があります。そうでない場合、テーブルを作成できません。
ストリーミングデータをDelta Lakeに書き込むと、複数の小さなファイルが生成されます。どうすればよいですか?
- リアルタイムの応答が不要な場合は、各ミニバッチのサイズを大きくすることをお勧めします。
- 定期的にOPTIMIZEコマンドを実行して、テーブルの小さなファイルをマージします。
OPTIMIZEコマンドの実行に時間がかかるのはなぜですか?
OPTIMIZEコマンドが長時間実行されていない場合、Delta Lakeに非常に多くの小さなファイルが生成される可能性があります。この場合、OPTIMIZEコマンドの実行に時間がかかる場合があります。定期的にOPTIMIZEコマンドを実行するようにスケジュールタスクを構成することをお勧めします。
OPTIMIZEコマンドを実行できません。どうすればよいですか?
履歴データを削除して新しいデータを書き込む場合は、OPTIMIZEコマンドを実行できます。Delta Lakeは、オプティミスティックロックメカニズムを使用します。その結果、複数の書き込みトランザクションがコミットされると、書き込みトランザクションの1つが失敗します。ストリーミングジョブがDelta Lakeのデータを継続的に更新している場合、特にChange Data Capture(CDC)の場合、OPTIMIZEコマンドは失敗する可能性が高くなります。ストリーミングジョブがデータを追加するだけで、データを削除または更新しない場合、OPTIMIZEコマンドは失敗しません。テーブルを時間でパーティション分割し、データがパーティションに書き込まれた後に各パーティションでOPTIMIZEコマンドを実行することをお勧めします。
OPTIMIZEコマンドを実行した後も、多くの小さなファイルが残っているのはなぜですか?
OPTIMIZEコマンドは、小さなファイルをマージするために実行されます。ただし、マージされた小さなファイルはすぐに削除されません。Delta Lakeは履歴データを保持します。テーブルのスナップショットにアクセスするときに、これらの小さなファイルが必要になります。小さなファイルを削除するには、VACUUMコマンドを実行します。
VACUUMコマンドを実行した後も、多くの小さなファイルが残っているのはなぜですか?
VACUUMコマンドは、マージされ、保存期間を超えた小さなファイルを削除するために実行されます。デフォルトの保存期間は7日間です。小さなファイルがマージされていない場合、またはマージされた後も保存期間内にある場合、VACUUMコマンドではファイルを削除できません。
最近生成およびマージされた小さなファイルを削除するにはどうすればよいですか?
spark.databricks.delta.retentionDurationCheck.enabledをfalseに設定し、Sparkジョブの開始時にパラメーターとして渡します。- グローバル保存期間を小さい値に変更します。たとえば、
spark-defaults.confファイルで、spark.databricks.delta.properties.defaults.deletedFileRetentionDurationをinterval 1 hourに設定します。
VACUUMコマンドを実行した後も、多くのDeltaログファイルが残っているのはなぜですか?
VACUUMコマンドは、Deltaログファイルではなく、データファイルをマージするために実行されます。Delta Lakeは、ログファイルを自動的にマージして削除します。Delta Lakeは、10コミットごとにログファイルをマージします。ログファイルがマージされると、Delta Lakeは期限切れのログファイルをチェックして削除します。Deltaログファイルのデフォルトの保存期間は30日間です。
Delta Lakeは、OPTIMIZEコマンドまたはVACUUMコマンドの自動実行をサポートしていますか?
いいえ、Delta LakeはOPTIMIZEコマンドまたはVACUUMコマンドの自動実行をサポートしていません。Delta Lakeはライブラリにすぎず、ランタイムではありません。OPTIMIZEコマンドまたはVACUUMコマンドを自動的に実行するメカニズムは提供していません。ただし、OPTIMIZEコマンドまたはVACUUMコマンドを定期的に実行するようにスケジュールタスクを構成できます。