0
0

Delta LakeのDeep Cloneによるテーブルのバックアップ

Last updated at Posted at 2024-02-28

こちらを参考に実際に動かしてみます。

テーブルの準備

このようなテーブルを対象にバックアップを行います。main.default.clone_sourceというテーブルです。
Screenshot 2024-02-28 at 16.42.08.png

SELECT * FROM main.default.clone_source;

意図的にレコードを削除します。

```sql
DELETE FROM main.default.clone_source WHERE dropoff_zip="10003";

テーブル履歴を確認します。

DESCRIBE HISTORY main.default.clone_source;

DELETEが記録されています。

version	timestamp	userId	userName	operation	operationParameters	job	notebook	clusterId	readVersion	isolationLevel	isBlindAppend	operationMetrics	userMetadata	engineInfo
1	2024-02-28T07:33:46.000+00:00	null	null	DELETE	{"predicate":"[\"(dropoff_zip#9563 = 10003)\"]"}	null	null	null	0	WriteSerializable	false	{"numRemovedFiles":"0","numRemovedBytes":"0","numCopiedRows":"0","numDeletionVectorsAdded":"1","numDeletionVectorsRemoved":"0","numAddedChangeFiles":"0","executionTimeMs":"1625","numDeletionVectorsUpdated":"0","numDeletedRows":"14","scanTimeMs":"1024","numAddedFiles":"0","numAddedBytes":"0","rewriteTimeMs":"575"}	null	Databricks-Runtime/14.1.x-photon-scala2.12
0	2024-02-28T07:24:50.000+00:00	null	null	CREATE OR REPLACE TABLE AS SELECT	{"partitionBy":"[]","description":null,"isManaged":"true","properties":"{\"delta.checkpoint.writeStatsAsStruct\":\"true\",\"delta.checkpoint.writeStatsAsJson\":\"false\",\"delta.enableDeletionVectors\":\"true\"}","statsOnLoad":"false"}	null	null	null		WriteSerializable	false	{"numFiles":"1","numOutputRows":"326","numOutputBytes":"11530"}	null	Databricks-Runtime/14.1.x-photon-scala2.12

メタデータも確認しておきます。

DESCRIBE DETAIL main.default.clone_source;
format	id	name	description	location	createdAt	lastModified	partitionColumns	clusteringColumns	numFiles	sizeInBytes	properties	minReaderVersion	minWriterVersion	tableFeatures	statistics
delta	9232bce9-cf65-40c7-9118-31e09c7b79fa	main.default.clone_source	null	s3://taka-uc-s3-bucket/4c55425f-e291-45f8-a4e7-29a103c19e29/tables/18a826db-8b6b-436f-9a2d-1ad319f7ac7f	2024-02-28T07:24:47.232+00:00	2024-02-28T07:33:46.000+00:00	[]	[]	1	11530	{"delta.checkpoint.writeStatsAsStruct":"true","delta.checkpoint.writeStatsAsJson":"false","delta.enableDeletionVectors":"true"}	3	7	["deletionVectors"]	{"numRowsDeletedByDeletionVectors":"14","numDeletionVectors":"1"}

Deep Cloneによるバックアップ

まずは、Deep Cloneでテーブルをコピーします。Deep Cloneとは:

ディープクローンは、既存のテーブルのメタデータに加えて、ソーステーブルのデータをクローンターゲットにコピーする クローン です。 さらに、ストリーム メタデータも複製されるため、Delta テーブルに書き込むストリームをソース テーブルで停止し、中断したところから複製のターゲットで続行できます。

-- DEEP CLONE
CREATE OR REPLACE TABLE main.default.clone_target DEEP CLONE main.default.clone_source;

履歴を確認します。

DESCRIBE HISTORY main.default.clone_target;

こちらにありますように履歴はコピーされません。

version	timestamp	userId	userName	operation	operationParameters	job	notebook	clusterId	readVersion	isolationLevel	isBlindAppend	operationMetrics	userMetadata	engineInfo
0	2024-02-28T07:34:10.000+00:00	null	null	CLONE	{"source":"main.default.clone_source","sourceVersion":"1","isShallow":"false"}	null	null	null	-1	Serializable	false	{"removedFilesSize":"0","numRemovedFiles":"0","sourceTableSize":"11530","numCopiedFiles":"1","copiedFilesSize":"11530","sourceNumOfFiles":"1"}	null	Databricks-Runtime/14.1.x-photon-scala2.12

メタデータはコピーされています。

DESCRIBE DETAIL main.default.clone_target;
format	id	name	description	location	createdAt	lastModified	partitionColumns	clusteringColumns	numFiles	sizeInBytes	properties	minReaderVersion	minWriterVersion	tableFeatures	statistics
delta	0e3e6dfe-0ac7-44ce-9cc6-df3884dd541a	main.default.clone_target	null	s3://taka-uc-s3-bucket/4c55425f-e291-45f8-a4e7-29a103c19e29/tables/bb8f8b30-506d-4396-b2b6-9da376e87b04	2024-02-28T07:24:47.232+00:00	2024-02-28T07:34:10.000+00:00	[]	[]	1	11530	{"delta.checkpoint.writeStatsAsStruct":"true","delta.checkpoint.writeStatsAsJson":"false","delta.enableDeletionVectors":"true"}	3	7	["deletionVectors"]	{"numRowsDeletedByDeletionVectors":"14","numDeletionVectors":"1"}

次に、別のS3バケットにアーカイブとしてバックアップします。

-- アーカイブとしてバックアップ
CREATE OR REPLACE TABLE delta.`s3://taka-external-location-bucket/archive/clone_target` CLONE main.default.clone_target
source_table_size	source_num_of_files	num_removed_files	num_copied_files	removed_files_size	copied_files_size
11530	1	0	1	0	11530

S3バケットを確認します。

LIST "s3://taka-external-location-bucket/archive/clone_target";

Deltaが書き込まれています。

path	name	size	modification_time
s3://taka-external-location-bucket/archive/clone_target/deletion_vector_ea508a74-96cc-448c-be5e-f344353e67c0.bin	deletion_vector_ea508a74-96cc-448c-be5e-f344353e67c0.bin	69	1709105768000
s3://taka-external-location-bucket/archive/clone_target/part-00000-851f2536-e190-4fe4-a8a7-53da890e8528.c000.snappy.parquet	part-00000-851f2536-e190-4fe4-a8a7-53da890e8528.c000.snappy.parquet	11530	1709105769000
s3://taka-external-location-bucket/archive/clone_target/_delta_log/	_delta_log/	0	1709105775001

Deep Cloneによるリストア

バックアップしたテーブルを削除してみます。

DROP TABLE main.default.clone_target;

バックアップからリストアします。

CREATE OR REPLACE TABLE main.default.clone_target CLONE delta.`s3://taka-external-location-bucket/archive/clone_target`
source_table_size	source_num_of_files	num_removed_files	num_copied_files	removed_files_size	copied_files_size
11530	1	0	1	0	11530

復旧しました。

SELECT * FROM main.default.clone_target;

Screenshot 2024-02-28 at 16.53.19.png

なお、Deep Cloneはインクリメンタルに動作するので、定期実行している場合、以前クローンした後の変更のみがバックアップされます。

既存の Delta テーブルの場合、ソース テーブルの新しいメタデータと新しいデータを含む新しいコミットが作成されます。 この新しいコミットはインクリメンタルであり、最後のクローン以降の新しい変更のみがテーブルにコミットされます。

ここではテーブルレベルでのバックアップ・リストアを説明しましたが、S3レベルでバックアップ・リストアを行いたい場合にはこちらを参考にしてください。

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0