概要
Databricks にて Unity Catalog のマネージドテーブルを Shallow Clone した際に、ソースのテーブルを削除することによりターゲットテーブルが破損する事象が発生します。検証したところ、次のようなエラーが発生しました。その対処方法を共有します。
RuntimeException: Couldn't initialize file system for path abfss://{container_name}@{storage_name}.dfs.core.windows.net/b590278a-5927-4895-af29-08e84348a015/tables/886d6b39-c365-4bed-b4e2-e5720f74f15a/part-00000-cccfcc82-3da2-4c68-bc31-345d4fe8a8af-c000.snappy.parquet
Caused by: KeyProviderException: Failure to initialize configuration for storage account {storage_name}.dfs.core.windows.net: Invalid configuration value detected for fs.azure.account.key
Caused by: InvalidConfigurationValueException: Invalid configuration value detected for fs.azure.account.key
Databricks のドキュメントにて、次のような制限事項が記載されています。検証したところ、ソーステーブルの削除だけでなく、再作成したテーブルを Shallow Clone すると上記のようなエラーが発生しました。エラーの再現方法とその対処方法について記載します。
マネージド テーブルの場合、ソース テーブルを削除すると、シャロー クローンのターゲット テーブルが破損します。
引用元:Unity Catalog テーブルのシャロー クローン - Azure Databricks | Microsoft Learn
エラーの再現方法と対処方法
事前準備
検証に利用するカタログやテーブルを作成します。
%sql
-- カタログとスキーマを作成
CREATE CATALOG IF NOT EXISTS shallow_clone_error;
CREATE SCHEMA IF NOT EXISTS shallow_clone_error.schema;
-- テーブルを作成
CREATE TABLE shallow_clone_error.schema.table_01
SELECT * FROM samples.tpch.nation;
-- Shallow Clone の実施
CREATE OR REPLACE TABLE shallow_clone_error.schema.shallow_cloned_table
SHALLOW CLONE shallow_clone_error.schema.table_01;
データを確認します。
%sql
-- データを確認
SELECT
*
FROM
shallow_clone_error.schema.shallow_cloned_table
エラーの再現方法
Shallow Clone のソーステーブルを削除だけでは、Shallow Clone のターゲットテーブルへのクエリはエラーとなりませんでした。
%sql
-- ソース テーブルを削除
DROP TABLE shallow_clone_error.schema.table_01;
-- エラーにならない想定
SELECT
*
FROM
shallow_clone_error.schema.shallow_cloned_table
%sql
-- 同名のテーブルを再作成してエラーとなることを確認
CREATE TABLE shallow_clone_error.schema.table_01
SELECT * FROM samples.tpch.nation;
CREATE OR REPLACE TABLE shallow_clone_error.schema.shallow_cloned_table
SHALLOW CLONE shallow_clone_error.schema.table_01;
ソーステーブルの再作成と Shallow Clone を再実施後に、ターゲットテーブルにクエリを発行したところエラーとなりました。
%sql
-- エラーになる想定
SELECT
*
FROM
shallow_clone_error.schema.shallow_cloned_table
RuntimeException: Couldn't initialize file system for path abfss://{container_name}@{storage_name}.dfs.core.windows.net/b590278a-5927-4895-af29-08e84348a015/tables/886d6b39-c365-4bed-b4e2-e5720f74f15a/part-00000-cccfcc82-3da2-4c68-bc31-345d4fe8a8af-c000.snappy.parquet
Caused by: KeyProviderException: Failure to initialize configuration for storage account {storage_name}.dfs.core.windows.net: Invalid configuration value detected for fs.azure.account.key
Caused by: InvalidConfigurationValueException: Invalid configuration value detected for fs.azure.account.key
想定外ではありますが、カウントを表示することは可能でした。カウントが可能であることで、本エラーの解明に時間がかかってしまいました。
%sql
-- 想定外であるがカウントできることを確認
SELECT
count(*)
FROM
shallow_clone_error.schema.shallow_cloned_table
エラーの対処方法
Shallow Clone のターゲットテーブルを DROP してから Shallow Clone を実行することで、クエリが正常終了しました。
%sql
-- Shallow Clone したテーブルを削除してから再実行
DROP TABLE IF EXISTS shallow_clone_error.schema.shallow_cloned_table;
CREATE OR REPLACE TABLE shallow_clone_error.schema.shallow_cloned_table
SHALLOW CLONE shallow_clone_error.schema.table_01
%sql
-- エラーにならない想定
SELECT
*
FROM
shallow_clone_error.schema.shallow_cloned_table
事後処理
検証で利用したカタログを削除します。
%sql
-- カタログを削除
DROP CATALOG IF EXISTS shallow_clone_error CASCADE;
まとめ
この記事では、DatabricksのUnity CatalogでマネージドテーブルをShallow Cloneした際に、ソーステーブルを削除するとターゲットテーブルが破損する事象について説明しました。具体的には、ソーステーブルの削除だけでなく、再作成したテーブルをShallow Cloneするとエラーが発生することを確認しました。
その対処方法として、Shallow CloneのターゲットテーブルをDROPしてからShallow Cloneを実行することで、クエリが正常に終了することを確認しました。
この情報が、DatabricksとUnity Catalogを使用する際の参考になれば幸いです。