テーブルユーティリティコマンドTable Utility Commands

デルタテーブルでは、多くのユーティリティコマンドがサポートしています。Delta tables support a number of utility commands.

真空 Vacuum

テーブルで vacuum コマンドを実行すると、デルタテーブルによって参照されなくなったファイルを削除したり、リテンション期間のしきい値よりも古いファイルを削除したりできます。You can remove files no longer referenced by a Delta table and are older than the retention threshold by running the vacuum command on the table. vacuum は自動的にはトリガーされません。vacuum is not triggered automatically. ファイルの既定の保有期間のしきい値は7日です。The default retention threshold for the files is 7 days.

重要

保有期間よりも古いバージョンに時間を移動する機能は、vacuum の実行後に失われます。The ability to time travel back to a version older than the retention period is lost after running vacuum.

SQLSQL

VACUUM '/data/events' -- vacuum files not required by versions older than the default retention period

VACUUM delta.`/data/events/`

VACUUM delta.`/data/events/` RETAIN 100 HOURS  -- vacuum files not required by versions more than 100 hours old
VACUUM eventsTable

VACUUM eventsTable DRY RUN           -- do dry run to get the list of files to be deleted

詳細については、「Vacuum a Delta table 」を参照してください。See Vacuum a Delta table for details.

ScalaScala

注意

スケール a API は Databricks Runtime 6.0 以降で使用できます。The Scala API is available in Databricks Runtime 6.0 and above.

import io.delta.tables._

val deltaTable = DeltaTable.forPath(spark, pathToTable)

deltaTable.vacuum()        // vacuum files not required by versions older than the default retention period

deltaTable.vacuum(100)     // vacuum files not required by versions more than 100 hours old

PythonPython

注意

Python API は Databricks Runtime 6.1 以降で使用できます。The Python API is available in Databricks Runtime 6.1 and above.

from delta.tables import *

deltaTable = DeltaTable.forPath(spark, pathToTable)

deltaTable.vacuum()        # vacuum files not required by versions older than the default retention period

deltaTable.vacuum(100)     # vacuum files not required by versions more than 100 hours old

詳細については、「 Delta LAKE API リファレンス」を参照してください。See the Delta Lake API Reference for details.

警告

古いスナップショットやコミットされていないファイルは、テーブルに対する同時実行リーダーまたはライターによって使用されている可能性があるため、保有期間を7日よりも短く設定することはお勧めしません。We do not recommend that you set a retention interval shorter than 7 days, because old snapshots and uncommitted files can still be in use by concurrent readers or writers to the table. VACUUM がアクティブなファイルをクリーンアップする場合、同時実行リーダーが失敗するか、または、まだコミットされていないファイルを VACUUM 削除すると、テーブルが破損する可能性があります。If VACUUM cleans up active files, concurrent readers can fail or, worse, tables can be corrupted when VACUUM deletes files that have not yet been committed.

危険な VACUUM コマンドを実行できないようにするために、Delta Lake には安全性チェックがあります。Delta Lake has a safety check to prevent you from running a dangerous VACUUM command. このテーブルに対して、指定した保有期間よりも長くかかる操作がないことがわかっている場合は、Apache Spark 構成プロパティ spark.databricks.delta.retentionDurationCheck.enabledfalse に設定して、この安全性チェックをオフにすることができます。If you are certain that there are no operations being performed on this table that take longer than the retention interval you plan to specify, you can turn off this safety check by setting the Apache Spark configuration property spark.databricks.delta.retentionDurationCheck.enabled to false. 実行時間が最長の同時実行トランザクションより長く、任意のストリームがテーブルの最新の更新の背後で遅延する最長期間を選択する必要があります。You must choose an interval that is longer than the longest running concurrent transaction and the longest period that any stream can lag behind the most recent update to the table.

履歴 History

history コマンドを実行すると、デルタテーブルへの書き込みごとに、操作、ユーザー、タイムスタンプなどの情報を取得できます。You can retrieve information on the operations, user, timestamp, and so on for each write to a Delta table by running the history command. 操作は、時系列の逆の順序で返されます。The operations are returned in reverse chronological order. 既定では、テーブル履歴は30日間保持されます。By default table history is retained for 30 days.

SQLSQL

DESCRIBE HISTORY '/data/events/'          -- get the full history of the table

DESCRIBE HISTORY delta.`/data/events/`

DESCRIBE HISTORY '/data/events/' LIMIT 1  -- get the last operation only
DESCRIBE HISTORY eventsTable

詳細については、履歴の説明を参照してください。See Describe History for details.

ScalaScala

注意

スケール a API は Databricks Runtime 6.0 以降で使用できます。The Scala API is available in Databricks Runtime 6.0 and above.

import io.delta.tables._

val deltaTable = DeltaTable.forPath(spark, pathToTable)

val fullHistoryDF = deltaTable.history()    // get the full history of the table

val lastOperationDF = deltaTable.history(1) // get the last operation

PythonPython

注意

Python API は Databricks Runtime 6.1 以降で使用できます。The Python API is available in Databricks Runtime 6.1 and above.

from delta.tables import *

deltaTable = DeltaTable.forPath(spark, pathToTable)

fullHistoryDF = deltaTable.history()    # get the full history of the table

lastOperationDF = deltaTable.history(1) # get the last operation

詳細については、「 Delta LAKE API リファレンス」を参照してください。See the Delta Lake API Reference for details.

返されるデータの構造は次のとおりです。The returned data has the following structure.

+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+--------------+-------------+
|version|          timestamp|userId|userName|operation| operationParameters| job|notebook|clusterId|readVersion|isolationLevel|isBlindAppend|
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+--------------+-------------+
|      5|2019-07-29 14:07:47|  null|    null|   DELETE|[predicate -> ["(...|null|    null|     null|          4|          null|        false|
|      4|2019-07-29 14:07:41|  null|    null|   UPDATE|[predicate -> (id...|null|    null|     null|          3|          null|        false|
|      3|2019-07-29 14:07:29|  null|    null|   DELETE|[predicate -> ["(...|null|    null|     null|          2|          null|        false|
|      2|2019-07-29 14:06:56|  null|    null|   UPDATE|[predicate -> (id...|null|    null|     null|          1|          null|        false|
|      1|2019-07-29 14:04:31|  null|    null|   DELETE|[predicate -> ["(...|null|    null|     null|          0|          null|        false|
|      0|2019-07-29 14:01:40|  null|    null|    WRITE|[mode -> ErrorIfE...|null|    null|     null|       null|          null|         true|
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+--------------+-------------+

注意

この情報は、次の方法を使用してデルタテーブルに書き込む場合は使用できません。This information is not available if you write into a Delta table using the following methods:

デルタへの変換 Convert to Delta

既存の Parquet テーブルをその場でデルタテーブルに変換します。Convert an existing Parquet table to a Delta table in-place. このコマンドは、ディレクトリ内のすべてのファイルを一覧表示し、これらのファイルを追跡するデルタ Lake transaction ログを作成し、すべての Parquet ファイルのフッターを読み取ってデータスキーマを自動的に推測します。This command lists all the files in the directory, creates a Delta Lake transaction log that tracks these files, and automatically infers the data schema by reading the footers of all Parquet files. データがパーティション分割されている場合は、パーティション列のスキーマを指定する必要があります。If your data is partitioned, you must specify the schema of the partition columns.

SQLSQL

-- Convert unpartitioned parquet table at path 'path/to/table'
CONVERT TO DELTA parquet.`path/to/table`

-- Convert partitioned parquet table at path 'path/to/table' and partitioned by integer column named 'part'
CONVERT TO DELTA parquet.`path/to/table` PARTITIONED BY (part int)

詳細については、「デルタへの変換 (Delta Lake on Azure Databricks)コマンド」を参照してください。See the Convert To Delta (Delta Lake on Azure Databricks) command for details.

ScalaScala

注意

スケール a API は Databricks Runtime 6.0 以降で使用できます。The Scala API is available in Databricks Runtime 6.0 and above.

import io.delta.tables._

// Convert unpartitioned parquet table at path '/path/to/table'
val deltaTable = DeltaTable.convertToDelta(spark, "parquet.`/path/to/table`")

// Convert partitioned parquet table at path '/path/to/table' and partitioned by integer column named 'part'
val partitionedDeltaTable = DeltaTable.convertToDelta(spark, "parquet.`/path/to/table`", "part int")

詳細については、「 Delta LAKE API リファレンス」を参照してください。See the Delta Lake API Reference for more details.

注意

Delta Lake によって追跡されていないファイルは表示されず、vacuumの実行時に削除される可能性があります。Any file not tracked by Delta Lake is invisible and can be deleted when you run vacuum. 変換処理中は、データファイルの更新または追加を避ける必要があります。You should avoid updating or appending data files during the conversion process. テーブルが変換されたら、すべての書き込みがデルタレイクを経由するようにします。After the table is converted, make sure all writes go through Delta Lake.

デルタテーブルを Parquet テーブルに変換するConvert Delta table to a Parquet table

次の手順により、デルタテーブルを Parquet テーブルに簡単に変換できます。You can easily convert a Delta table back to a Parquet table by the following steps:

  1. データファイルを変更できるデルタレイク操作 (削除やマージなど) を実行した場合は、最初にリテンション期間0時間でvacuumを実行し、最新バージョンのテーブルに属していないすべてのデータファイルを削除します。If you have performed Delta Lake operations that can change the data files (for example, Delete or Merge), then first run vacuum with retention of 0 hours to delete all data files that do not belong to the latest version of the table.
  2. テーブルディレクトリ内の _delta_log ディレクトリを削除します。Delete the _delta_log directory in the table directory.