テーブル履歴のスキーマとオペレーションメトリクス
DESCRIBE HISTORY コマンドは、Apache Iceberg テーブルおよび Delta Lake テーブルに対して、テーブル操作の履歴を記述する14列を返します。各列を解釈するには、このリファレンスを使用してください。
テーブル履歴の取得、以前のテーブルバージョンのクエリ、およびテーブルの復元に関するガイダンスについては、テーブル履歴の操作を参照してください。
履歴スキーマ
historyオペレーションの出力には、次の列があります。
列 | Type | 説明 |
|---|---|---|
version |
| オペレーションによって生成されたテーブルのバージョン。 |
timestamp |
| このバージョンがコミットされたとき。 |
userId |
| 操作を実行したユーザーのID。 |
userName |
| オペレーションを実行したユーザーの名前。 |
operation |
| オペレーションの名前。 |
operationParameters |
| オペレーションのパラメーター(述語など)。 |
ジョブ |
| オペレーションを実行したLakeflow Jobの詳細。Lakeflow Jobから書き込まれたcommitに対してのみ入力されます。それ以外の場合は、 |
notebook |
| オペレーションが実行されたDatabricksノートブックの詳細。Databricksノートブックから書き込まれたcommitに対してのみ入力されます。それ以外の場合は、 |
clusterId |
| オペレーションが実行されたクラスターの ID。 |
readVersion |
| 書き込みオペレーションを行うために読み込まれたテーブルのバージョン。 |
isolationLevel |
| このオペレーションに使用される隔離レベル。 |
isBlindAppend |
| このオペレーションでデータが追加されたかどうか。 |
operationMetrics |
| オペレーションのメトリクス(たとえば、行数や変更されたファイル数など)。 |
userMetadata |
| 指定されている場合のユーザー定義のcommitメタデータ。 |
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
|version| timestamp|userId|userName|operation| operationParameters| job|notebook|clusterId|readVersion| isolationLevel|isBlindAppend| operationMetrics|
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
| 5|2019-07-29 14:07:47| ###| ###| DELETE|[predicate -> ["(...|null| ###| ###| 4|WriteSerializable| false|[numTotalRows -> ...|
| 4|2019-07-29 14:07:41| ###| ###| UPDATE|[predicate -> (id...|null| ###| ###| 3|WriteSerializable| false|[numTotalRows -> ...|
| 3|2019-07-29 14:07:29| ###| ###| DELETE|[predicate -> ["(...|null| ###| ###| 2|WriteSerializable| false|[numTotalRows -> ...|
| 2|2019-07-29 14:06:56| ###| ###| UPDATE|[predicate -> (id...|null| ###| ###| 1|WriteSerializable| false|[numTotalRows -> ...|
| 1|2019-07-29 14:04:31| ###| ###| DELETE|[predicate -> ["(...|null| ###| ###| 0|WriteSerializable| false|[numTotalRows -> ...|
| 0|2019-07-29 14:01:40| ###| ###| WRITE|[mode -> ErrorIfE...|null| ###| ###| null|WriteSerializable| true|[numFiles -> 2, n...|
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
-
次の方法を使用してテーブルに書き込む場合、一部の列は使用できません:
-
今後追加される列は、常に最後の列の後に追加されます。
オペレーションパラメーターにおけるpartitionByの理解
テーブル履歴の partitionBy フィールドは、テーブルのパーティションスキーマを定義または変更するCREATEおよびOVERWRITEオペレーションに対してのみ意味を持ちます。
既存のテーブルへの追加オペレーション(APPEND、INSERT、UPDATE、DELETE、MERGE)の場合、使用される書き込みメソッド(.save()対.saveAsTable())に応じて、このフィールドには空の配列[]またはパーティション列が表示されることがあります。
この不整合は予期された動作であり、パーティションへのデータの書き込み方法には影響しません。追加オペレーションの検証には使用しないでください。
例
date 列でパーティション分割されたテーブルを検討します。テーブルを作成すると、partitionBy にデータが投入されます:
df.write.format("delta") \
.partitionBy("date") \
.saveAsTable("sales_data")
履歴内のCREATEオペレーションは以下を示します:
operationParameters: {
"mode": "ErrorIfExists",
"partitionBy": "[\"date\"]"
}
このテーブルにデータを追加すると、partitionBy は空の配列を表示します:
new_df.write.format("delta") \
.mode("append") \
.saveAsTable("sales_data")
APPENDオペレーションは以下を表示します:
operationParameters: {
"mode": "Append",
"partitionBy": "[]"
}
空の partitionBy 値が予期されています。データは、テーブルの既存のパーティションスキーマに基づいて、引き続き正しいパーティションに書き込まれます。パスへの .save() ではこのフィールドにパーティション列が表示される場合がありますが、この違いは実装の詳細であり、書き込み動作には影響しません。
運用メトリクス
history オペレーションは、operationMetrics 列マップ内のオペレーションメトリクスのコレクションを返します。
以下のテーブルは、オペレーション別のマップキー定義の一覧です。
WRITE、CREATE TABLE AS SELECT、REPLACE TABLE AS SELECT、 COPY INTO
これらのオペレーションでは、以下のメトリクスを利用できます:
メトリクス名 | 説明 |
|---|---|
| 書き込まれたファイルの数。 |
| 書き込まれた内容のサイズ(バイト単位)。 |
| 書き込まれた行数。 |
STREAMING UPDATE
このオペレーションでは、次のメトリクスを利用できます:
メトリクス名 | 説明 |
|---|---|
| 追加されたファイルの数。 |
| 削除されたファイルの数。 |
| 書き込まれた行数。 |
| 書き込みサイズ(バイト単位)。 |
DELETE
このオペレーションでは、次のメトリクスを利用できます:
メトリクス名 | 説明 |
|---|---|
| 追加されたファイルの数。テーブルのパーティションが削除された場合は提供されません。 |
| 削除されたファイルの数。 |
| 削除された行の数。テーブルのパーティションが削除された場合は提供されません。 |
| ファイルの削除処理中にコピーされた行数。 |
| オペレーション全体の実行にかかった時間。 |
| ファイルの一致をスキャンするのにかかった時間。 |
| 一致したファイルの書き換えにかかった時間。 |
TRUNCATE
このオペレーションでは、次のメトリクスを利用できます:
メトリクス名 | 説明 |
|---|---|
| 削除されたファイルの数。 |
| オペレーション全体の実行にかかった時間。 |
MERGE
このオペレーションでは、次のメトリクスを利用できます:
メトリクス名 | 説明 |
|---|---|
| ソースDataFrameの行数。 |
| ターゲットテーブルに挿入された行数。 |
| ターゲットテーブルで更新された行数。 |
| ターゲットテーブルで削除された行数。 |
| コピーされたターゲット行の数。 |
| 書き出された行の合計数。 |
| シンク(ターゲット)に追加されたファイルの数。 |
| シンク(ターゲット)から削除されたファイルの数。 |
| オペレーション全体の実行にかかった時間。 |
| ファイルの一致をスキャンするのにかかった時間。 |
| 一致したファイルの書き換えにかかった時間。 |
UPDATE
このオペレーションでは、次のメトリクスを利用できます:
メトリクス名 | 説明 |
|---|---|
| 追加されたファイルの数。 |
| 削除されたファイルの数。 |
| 更新された行数。 |
| ファイルの更新プロセスでコピーされた行数。 |
| オペレーション全体の実行にかかった時間。 |
| ファイルの一致をスキャンするのにかかった時間。 |
| 一致したファイルの書き換えにかかった時間。 |
FSCK
このオペレーションでは、次のメトリクスを利用できます:
メトリクス名 | 説明 |
|---|---|
| 削除されたファイルの数。 |
CONVERT
このオペレーションでは、次のメトリクスを利用できます:
メトリクス名 | 説明 |
|---|---|
| 変換された Parquet ファイルの数。 |
OPTIMIZE
このオペレーションでは、次のメトリクスを利用できます:
メトリクス名 | 説明 |
|---|---|
| 追加されたファイルの数。 |
| 最適化されたファイルの数。 |
| テーブルが最適化された後に追加されたバイト数。 |
| 削除されたバイト数。 |
| テーブルが最適化された後の最小ファイルのサイズ。 |
| テーブルが最適化された後の25パーセンタイルファイルのサイズ。 |
| テーブルが最適化された後のファイルサイズの中央値。 |
| テーブルが最適化された後の75パーセンタイルファイルのサイズ。 |
| テーブルが最適化された後の最大ファイルのサイズ。 |
CLONE
このオペレーションでは、次のメトリクスを利用できます:
メトリクス名 | 説明 |
|---|---|
| クローン作成されたバージョンでのソーステーブルのサイズ(バイト単位)。 |
| クローン作成されたバージョンでのソーステーブル内のファイル数。 |
| 以前のテーブルが置き換えられた場合にターゲットテーブルから削除されたファイルの数。 |
| 以前のテーブルが置き換えられた場合にターゲットテーブルから削除されたファイルの合計サイズ(バイト単位)。 |
| 新しい場所にコピーされたファイルの数。シャロークローンの場合は0。 |
| 新しい場所にコピーされたファイルの合計サイズ(バイト単位)。シャロークローンの場合は0。 |
RESTORE
このオペレーションでは、次のメトリクスを利用できます:
メトリクス名 | 説明 |
|---|---|
| 復元後のテーブルサイズ(バイト単位)。 |
| 復元後のテーブル内のファイルの数。 |
| 復元オペレーションによって削除されたファイルの数。 |
| 復元の結果として追加されたファイルの数。 |
| リストアによって削除されたファイルのサイズ(バイト単位)。 |
| リストアによって追加されたファイルのサイズ(バイト単位)。 |
VACUUM
このオペレーションでは、次のメトリクスを利用できます:
メトリクス名 | 説明 |
|---|---|
| 削除されたファイルの数。 |
| vacuum処理されたディレクトリの数。 |
| 削除するファイルの数。 |