概要
Databricks にはテーブルを複製する方法として Delta Clone という機能があり、同一テーブルに対して再度 Delta Clone することで増分連携ができるとも可能なのですが、テーブルへの権限付与等の情報が保持されるかが気になったため検証してみました。下記表に示す項目を検証してみましたが、Unity Catalog に保持される項目については Delta Clone を再度実行しても保持されるようです。〇 が保持されたこと、× が喪失したたことを示しています。本記事では、検証コードと結果を共有します。
# | 項目 | Shallow CLONE の場合 | Deep CLONE の場合 |
---|---|---|---|
1 | テーブルオーナー | 〇 | 〇 |
2 | 権限 | 〇 | 〇 |
3 | テーブルコメント | 〇 | 〇 |
4 | カラムコメント | × | × |
5 | テーブルタグ | 〇 | 〇 |
6 | カラムタグ | 〇 | 〇 |
Shallow CLONE のユースケースとして複製元のテーブルと独立したアクセス制御管理があり、スキーマレベルで権限管理を行いたい場合にデータ提供がとても楽になります。本記事での検証結果から権限が再 Clone したとしても存続することが確認できたため、安心してそのユースケースを実施できることがわかりました。
親テーブルから独立したアクセス制御特権を持つテーブルを作成できます。
引用元:Unity Catalog テーブルのシャロー クローン - Azure Databricks | Microsoft Learn
検証コードと結果
テーブルの準備
%sql
CREATE CATALOG IF NOT EXISTS clone_test_001;
CREATE SCHEMA IF NOT EXISTS clone_test_001.schema_01;
-- Delta Clone 元テーブルの作成
CREATE OR REPLACE TABLE clone_test_001.schema_01.base_table
AS
SELECT
*
FROM
samples.tpch.nation
Shallow Clone の検証
最初の Shallow Clone の実施
%sql
-- テーブルを削除(初期化)してから、Delta Clone
DROP TABLE IF EXISTS clone_test_001.schema_01.shallow_clon_table
;
CREATE OR REPLACE TABLE clone_test_001.schema_01.shallow_clon_table
SHALLOW CLONE clone_test_001.schema_01.base_table
;
存続確認したい項目の設定
%sql
-- テーブルコメント
COMMENT ON TABLE clone_test_001.schema_01.shallow_clon_table
IS 'テーブルコメントですよ';
-- カラムコメント
ALTER TABLE clone_test_001.schema_01.shallow_clon_table
CHANGE n_nationkey n_nationkey bigint
COMMENT 'カラムコメントですよ';
-- テーブルオーナー
ALTER TABLE clone_test_001.schema_01.shallow_clon_table
OWNER TO `account users`;
-- 権限
GRANT SELECT
ON TABLE clone_test_001.schema_01.shallow_clon_table
TO `account users`;
-- テーブルタグ
ALTER TABLE clone_test_001.schema_01.shallow_clon_table
SET
TAGS ('test' = 'テスト');
-- カラムタグ
-- 手動で設定
カラムタグについては、カタログエクスプローラーにて手動でタグを設定。
設定値の確認
Shallow Clone の再実行
%sql
CREATE OR REPLACE TABLE clone_test_001.schema_01.shallow_clon_table
SHALLOW CLONE clone_test_001.schema_01.base_table
設定値の再確認
DEEP Clone の検証
最初の Deep Clone の実施
%sql
DROP TABLE IF EXISTS clone_test_001.schema_01.deep_clone_table
;
CREATE OR REPLACE TABLE clone_test_001.schema_01.deep_clone_table
DEEP CLONE clone_test_001.schema_01.base_table
;
存続確認したい項目の設定
%sql
-- テーブルコメント
COMMENT ON TABLE clone_test_001.schema_01.deep_clone_table
IS 'テーブルコメントですよ';
-- カラムコメント
ALTER TABLE clone_test_001.schema_01.deep_clone_table
CHANGE n_nationkey n_nationkey bigint
COMMENT 'カラムコメントですよ';
-- テーブルオーナー
ALTER TABLE clone_test_001.schema_01.deep_clone_table
OWNER TO `account users`;
-- 権限
GRANT SELECT
ON TABLE clone_test_001.schema_01.deep_clone_table
TO `account users`;
-- テーブルタグ
ALTER TABLE clone_test_001.schema_01.deep_clone_table
SET
TAGS ('test' = 'テスト');
-- カラムタグ
-- 手動で設定
カラムタグについては、カタログエクスプローラーにて手動でタグを設定。
設定値の確認
Deep Clone の再実行
%sql
CREATE OR REPLACE TABLE clone_test_001.schema_01.deep_clone_table
DEEP CLONE clone_test_001.schema_01.base_table
設定値の再確認
リソースの削除
%sql
DROP CATALOG IF EXISTS clone_test_001 CASCADE;