1
0

Databricks にて Unity Catalog のマネージドテーブルを Shallow Clone した際に、ソースのテーブルを削除することによりターゲットテーブルが破損する事象への対応方法

Posted at

概要

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

image.png

Databricks のドキュメントにて、次のような制限事項が記載されています。検証したところ、ソーステーブルの削除だけでなく、再作成したテーブルを Shallow Clone すると上記のようなエラーが発生しました。エラーの再現方法とその対処方法について記載します。

image.png

マネージド テーブルの場合、ソース テーブルを削除すると、シャロー クローンのターゲット テーブルが破損します。

引用元: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;

image.png

データを確認します。

%sql
-- データを確認
SELECT
  *
  FROM
    shallow_clone_error.schema.shallow_cloned_table

image.png

エラーの再現方法

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;

image.png

ソーステーブルの再作成と 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

image.png

想定外ではありますが、カウントを表示することは可能でした。カウントが可能であることで、本エラーの解明に時間がかかってしまいました。

%sql
-- 想定外であるがカウントできることを確認
SELECT
  count(*)
  FROM
    shallow_clone_error.schema.shallow_cloned_table

image.png

エラーの対処方法

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

image.png

事後処理

検証で利用したカタログを削除します。

%sql
-- カタログを削除
DROP CATALOG IF EXISTS shallow_clone_error CASCADE;

image.png

まとめ

この記事では、DatabricksのUnity CatalogでマネージドテーブルをShallow Cloneした際に、ソーステーブルを削除するとターゲットテーブルが破損する事象について説明しました。具体的には、ソーステーブルの削除だけでなく、再作成したテーブルをShallow Cloneするとエラーが発生することを確認しました。

その対処方法として、Shallow CloneのターゲットテーブルをDROPしてからShallow Cloneを実行することで、クエリが正常に終了することを確認しました。

この情報が、DatabricksとUnity Catalogを使用する際の参考になれば幸いです。

1
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
1
0