メインコンテンツまでスキップ

外部または外部のDelta LakeテーブルをUnity Catalogマネージドテーブルに変換します

Unity Catalog マネージドテーブルは、Databricks におけるdefaultかつ推奨のテーブルタイプです。Unity Catalog がストレージ、Layout、メンテナンスを管理するため、ストレージとコンピュートのコストを削減しながら、テーブルを自動的に最適化された状態に保つことができます。マネージドテーブルとその利点の詳細については、Delta Lake および Apache Iceberg 向け Unity Catalog マネージドテーブルを参照してください。

Databricksで外部テーブルまたは外部Delta LakeテーブルをUnity Catalogマネージドテーブルに変換するには、ALTER TABLE ... SET MANAGEDコマンドを使用するか、外部テーブルの場合はCatalog Explorerを使用します。この変換では、名前、設定、アクセス許可、ビューなどのテーブル構成が保持され、テーブル履歴も保持されます。

正確な SET MANAGED 構文は、ソーステーブルが外部テーブルか外部データソーステーブルかによって異なります。ソースタイプに対して誤った構文を使用すると、コマンドは失敗します。変換する前に、ソーステーブルに適したコマンドの選択を参照してください。

外部テーブルの変換の場合、SET MANAGED も適用されます。

  • リーダーとライターのダウンタイムを最小限に抑えます。
  • 変換中の並列書き込みを処理します。
  • 変換されたマネージドテーブルを外部テーブルにロールバックできます。
  • 変換後にレガシーコードが機能するように、パスベースの読み取りと書き込みをリダイレクトします。

CREATE TABLE AS SELECT (CTAS) を使用して外部テーブルをマネージドテーブルに変換することもできますが、前述の利点から Databricks では SET MANAGED を推奨しています。

ソーステーブルに適したコマンドを選択してください​

外部テーブルとフォーリンテーブルでは、異なる SET MANAGED 構文を使用します。変換前にカタログエクスプローラまたは DESCRIBE EXTENDED でソーステーブルのタイプを確認し、次の表で説明されている一致するコマンドを使用してください。

ソーステーブルのタイプ

コマンド

注

外部

ALTER TABLE ... SET MANAGED

MOVEまたはCOPYを追加しないでください。前提条件および変換手順を参照してください。

外部

ALTER TABLE ... SET MANAGED {MOVE | COPY}

MOVE または COPY のいずれかを指定する必要があります。前提条件および変換手順を参照してください。

ソーステーブルのタイプ

コマンド

注

外部

ALTER TABLE ... SET MANAGED

MOVEまたはCOPYを追加しないでください。前提条件および変換手順を参照してください。

外部

ALTER TABLE ... SET MANAGED {MOVE | COPY}

MOVE または COPY のいずれかを指定する必要があります。前提条件および変換手順を参照してください。

MOVE および COPY オプションはフォーリンテーブル専用です。これは、外部カタログがフォーリンテーブルのデータとメタデータを管理しているためです。MOVE および COPY は、変換後にそのソーステーブルがアクセス可能な状態を維持するかどうかを制御します。外部テーブルには保持すべき外部カタログがないため、この選択肢は適用されません。

ソーステーブルのタイプに対して誤ったコマンドを使用すると、Spark は次のエラーを発生させます:

  • 外部テーブルを変換する際に MOVE または COPY オプションを追加すると、コマンドは DELTA_ALTER_TABLE_SET_MANAGED_UNSUPPORTED_COPY_MOVE_SYNTAX で失敗します。解決するには、どちらのオプションも指定せずに ALTER TABLE ... SET MANAGED をランしてください。
  • フォーリンテーブルを変換する際に MOVE と COPY の両方を省略すると、コマンドは DELTA_ALTER_TABLE_SET_MANAGED_COPY_OR_MOVE_REQUIRED で失敗します。解決するには、MOVE または COPY を追加します。

前提条件​

前提条件は、外部テーブルを変換するかフォーリンテーブルを変換するかによって異なります。

外部テーブル​

外部テーブルをマネージドテーブルに変換するには、次の前提条件があります。

  • 形式 :テーブルは Delta Lake 形式を使用する必要があります。

  • Runtime : SET MANAGED、UNSET MANAGED、またはTRUNCATE UNIFORM HISTORYを使用するには、Databricks Runtime 17.3 LTS以降、またはサーバレスコンピュートを使用する必要があります。

  • 権限: テーブルの所有権。

  • **[リーダーとライター]**: ソース テーブルの Databricks リーダーとライターは、Databricks Runtime 15.4 LTS 以降を使用する必要があります。リーダーまたはライターが 14.3 LTS 以前を使用している場合は、レガシー リーダーとライターを参照してください。

  • 外部クライアント : 外部 (Databricks 以外) のクライアントは、Unity Catalog マネージドテーブルへの読み取りをサポートする必要があります。Delta クライアントを使用したテーブルへのアクセスを参照してください。

    • Access Insights ダッシュボードを使用して、テーブルにアクセスするリーダーとライターがDatabricks Runtimeか外部の非Databricksかを確認します。
  • 機能の互換性 : テーブルに minReaderVersion=2、minWriterVersion=7、tableFeatures={..., columnMapping} がある場合、SET MANAGED コマンドは DELTA_TRUNCATED_TRANSACTION_LOG エラーで失敗します。DESCRIBE DETAIL を使用して、テーブルにこれらのプロパティがあることを確認してください。Delta Lake 機能の互換性とプロトコルを参照してください。

変換後、パスベースの読み取りと書き込みは、わずかなパフォーマンスオーバーヘッドが発生しますが、新しいマネージドロケーションに自動的にリダイレクトされます。Databricks は、パフォーマンスオーバーヘッドを回避するために、すべてのパスベースのアクセスを名前ベースのアクセスに移行することをお勧めします。「パスベースのリダイレクト」を参照してください。

重要

競合を避けるため、外部テーブルで動作している既存のOPTIMIZEコマンドジョブ(リキッドクラスタリング、コンパクション、ZORDER)をキャンセルし、外部テーブルをマネージドテーブルに変換している間はジョブをスケジュールしないでください。

フォーリンテーブル​

フォーリンテーブルをマネージドテーブルに変換する際、Hive metastoreとGlue Federationを使用してフェデレーションされたフォーリンテーブルのみがサポートされています。

フォーリンテーブルをマネージドテーブルに変換するには、以下の前提条件があります。

  • **データ形式**:フォーリンテーブルはDelta Lake形式を使用する必要があります。Parquetの1回限りの変換を実行するには、「Delta Lakeに変換」を参照してください。
  • Runtime :Databricks Runtime 17.3以降。
  • テーブルの種類 :Hive metastore(HMS)のテーブルの種類は、外部 HMS テーブルである必要があります。テーブルが管理対象の HMS テーブルの場合、コマンドは失敗します。
  • 権限 :テーブルに対するOWNERまたはMANAGE権限、およびEXTERNAL LOCATIONに対するCREATE権限。

フォーリンテーブルを外部テーブルに変換するには、フォーリンテーブルを外部 Unity Catalog テーブルに変換するを参照してください。

ダウンタイムとデータコピー時間​

SET MANAGED コマンドは、DEEP CLONE などの代替手法と比べて、ダウンタイムを最小化または解消します。

外部テーブル​

外部テーブルの変換プロセスは、2段階のアプローチを使用します:

  1. 初期データコピー(ダウンタイムなし):コマンドは、外部ロケーションからマネージドロケーションへテーブルデータとDeltaトランザクションログをコピーします。外部テーブルへのアクティブなリーダーとライターは、中断することなく実行されます。
  2. マネージドロケーションに切り替える(一時的なダウンタイム) :外部ロケーションに対して最初のステップ中に実行されたcommitはマネージドロケーションに移動され、テーブルのメタデータは新しいマネージドロケーションを登録するように更新されます。このステップ中、外部ロケーションへのすべての書き込みは一時的にブロックされ、書き込みが停止します。Databricks Runtime 16.4 LTS以降のリーダーはダウンタイムを経験しませんが、Databricks Runtime 15.4 LTS以前のリーダーはダウンタイムを経験する可能性があります。

以下の表は、ソーステーブルのサイズ、および推定スループット率(0.5~2 GB/CPUコア/分)に基づいた推定ダウンタイムを示しています。

テーブルサイズ

推奨クラスターサイズ

推定データコピー時間

推定されるリーダーとライターのダウンタイム

100 GB 以下

32コア / X-Large SQLウェアハウス

約6分以下

1~2分以内

1 TB

64コア / 2X-Large SQLウェアハウス

約30分

約1~2分

10 TB

256コア / 4X-Large SQLウェアハウス

約 1.5 時間

約1~5分

テーブルサイズ

推奨クラスターサイズ

推定データコピー時間

推定されるリーダーとライターのダウンタイム

100 GB 以下

32コア / X-Large SQLウェアハウス

約6分以下

1~2分以内

1 TB

64コア / 2X-Large SQLウェアハウス

約30分

約1~2分

10 TB

256コア / 4X-Large SQLウェアハウス

約 1.5 時間

約1~5分

注記

ダウンタイムは、ファイルサイズ、ファイル数、コミット数といった要因に基づいて異なる場合があります。

フォーリンテーブル​

フォーリンテーブルの変換ダウンタイムは、MOVEを使用するかCOPYを使用するかによって異なります:

  • MOVEの場合、外部テーブルについて説明されているようにダウンタイムが発生する可能性があります。See 外部テーブル.
  • COPYの場合、変換プロセスによってソーステーブルがマネージドストレージの場所にコピーされ、データの2つの別個のコピーが作成されるため、ダウンタイムの管理はお客様の責任となります。外部カタログ内のソーステーブルへの読み取りと書き込みを無効にし、新しいマネージドテーブルを使用するようにワークロードを移行する責任があります。

マネージドテーブルに変換する​

Catalog Explorer または SQL を使用して外部テーブルを変換するか、SQL を使用してフォーリンテーブルを変換します。

カタログエクスプローラーを使用した外部テーブル (ベータ版)​

備考

ベータ版

カタログエクスプローラーを使用した外部テーブルからマネージドテーブルへの変換はベータ版です。

Catalog Explorer を使用して、スキーマ内の1つまたは複数の外部テーブルを一度に変換できます。

  1. Catalog Explorer で変換するテーブルまたはスキーマに移動します。

  2. 「 このテーブルについて 」(テーブル詳細ページ)または「 このスキーマについて 」(スキーマ詳細ページ)で、「 最適化を探索 」をクリックします。

    カタログエクスプローラーのテーブルの概要ページにある「このテーブルについて」パネル。テーブルプロパティの下に「最適化を探索」ボタンが表示されています

  3. 「 Unity Catalog マネージドテーブルに移行する理由 」で、ダイアログで、[ 続行 ] をクリックします。

    「Unity Catalog マネージドテーブルへの移行理由」ダイアログ(「続行」ボタン付き)

  4. 変換する外部テーブルを選択します。テーブル詳細ページからダイアログを開いた場合、Catalog Explorer はテーブルを事前に選択します。検索バーを使用して、追加のテーブルを見つけます。マネージドテーブルは選択できません。

    事前選択された外部テーブルと使用できないマネージドテーブルを表示するテーブル選択ページ

  5. [変換ノートブックを作成] をクリックします。

  6. 必要に応じて、ノートブックの名前を入力します。デフォルトでは、このノートブックはホームフォルダーに保存されます。別の場所に保存するには、 [参照] をクリックします。

    名前フィールドと参照オプションが表示されている「変換ノートブックの作成」ダイアログ

  7. ノートブックで、ベストプラクティスを確認し、すべての前提条件を満たしていることを確認します。

  8. **SET MANAGED Queries**セルを実行します。

セルが実行されると、Catalog Explorerでテーブルタイプが**EXTERNAL**ではなく**MANAGED**として表示されます。 ステータスがすぐに更新されない場合は、ページを更新してください。

SQLを使用した外部テーブル​

外部テーブルを変換するには、MOVE または COPY オプションを指定せずに SET MANAGED を使用します。これらのオプションは、フォーリンテーブルにのみ適用されます。ソーステーブルに適したコマンドを選択するを参照してください。

外部テーブルで Apache Iceberg 読み取りが有効になっているかどうかに応じて、次のいずれかのコマンドをランしてください。テーブルで Iceberg 読み取りが有効になっているかどうかを確認するには、Iceberg 読み取りが有効になっていることを確認するを参照してください。

  • Iceberg 読み取りが有効になっていない Unity Catalog 外部テーブルの場合は、次のコマンドを実行してください。

    SQL
    ALTER TABLE catalog.schema.my_external_table SET MANAGED;

    変換後、互換性の懸念なく、マネージドテーブルでIceberg読み取りを有効にできます。

  • Iceberg読み取りがすでに有効になっているUnity Catalog外部テーブルの場合は、次のコマンドを実行してください。

    SQL
    ALTER TABLE catalog.schema.my_external_table SET MANAGED TRUNCATE UNIFORM HISTORY;

    TRUNCATE UNIFORM HISTORY を含めて、最適なテーブルパフォーマンスと互換性を維持します。TRUNCATE UNIFORM HISTORY は UniForm Iceberg の履歴のみを切り詰め、Delta の履歴は削除しません。このコマンドは、切り詰め後に Iceberg の読み取りと書き込みに短いダウンタイムをもたらします。

テーブル変換後、既存の読み取りおよび書き込みストリームは失敗します。パスベースのリダイレクトを自動的に使用するには、同じ構成でストリームを再起動します。リーダーとライターがマネージドテーブルで動作することを確認します。ストリーミングの動作を参照してください。

予測的最適化は、手動で無効にしない限り、変換後に自動的に有効になります。予測的最適化が有効になっているかどうかを確認するを参照してください。

Databricksは、ロールバックを可能にするために、Unity Catalogの外部ロケーションにデータを14日間保持します。マネージドテーブル変換のロールバックを参照してください。14日後、予測的最適化が有効になっている場合、Databricksはストレージを再利用してコストを削減するために、このデータを自動的に削除します。予測的最適化をオフにした場合、14日後に新しく変換されたマネージドテーブルでVACUUMを実行して、ストレージを自身で再利用します (Databricks Runtime 17.3 LTS以降またはサーバレスコンピュートが必要です)。

SQL
VACUUM my_converted_table
注記

予測的最適化が有効になっている場合でも、Unity Catalogの外部ロケーションのデータは14日後に削除されない場合があります。例えば、マネージドテーブルの使用頻度が低い場合や、サイズが小さい場合に発生する可能性があります。以前のデータが残っている場合は、VACUUM を手動で実行して削除してください。

Databricks は、外部ロケーション内のデータのみを削除します。Delta トランザクションログと Unity Catalog のテーブルへの参照は保持されます。

SQLを使用するフォーリンテーブル​

Unity Catalog フォーリンテーブルを Unity Catalog マネージドに変換するには、次のコマンドを実行します。外部テーブルの変換とは異なり、フォーリンテーブルの変換では MOVE または COPY のいずれかを指定する必要があります。両方を省略した場合、コマンドは DELTA_ALTER_TABLE_SET_MANAGED_COPY_OR_MOVE_REQUIRED で失敗します。

SQL
ALTER TABLE source_table SET MANAGED {MOVE | COPY}
  • source_table

    Unity Catalogでフェデレーションされた既存のフォーリンテーブル。

  • MOVE

    テーブルをマネージドテーブルに変換し、外部カタログ内のソーステーブルへのアクセスを無効にします。

    • テーブルを変換した後、外部カタログを介したアクセスまたはパスベースのアクセスは失敗します。テーブルのすべてのリーダーとライターは、アクセスに Unity Catalog 名前空間を使用する必要があります。例えば:

      SQL
      SELECT * FROM catalog_name.schema_name.table_name;
    • パスベースのアクセスはサポートされておらず、テーブル変換後に失敗します。例えば:

      SQL
      SELECT * FROM delta.`protocol://path/to/table`;
    • リーダー/ライターのバージョンおよびクライアント互換性の要件は、前提条件とレガシーリーダーおよびライターで説明されているものと同じです。

    • 予測的最適化は、手動で設定した場合を除き、INHERITに設定されています。予測的最適化が有効になっているかどうかを確認するには、予測的最適化が有効になっているかを確認するを参照してください。

  • COPY

    外部カタログにあるソーステーブルへのアクセスを変更または無効化することなく、テーブルをマネージドに変換します。

    • マネージドへの変換中、変換プロセスはソーステーブルからフォーリンテーブルに定義されたマネージドストレージロケーションにデータをコピーし、新しいマネージドテーブルと外部カタログのソーステーブルという2つの別個のコピーを作成します。
    • 読み取りと書き込みが失敗するMOVEとは異なり、COPYを使用する場合、外部カタログのソーステーブルへの読み取りと書き込みを適切に無効にし、ワークロードが新しいカタログに移行されていることを確認する責任があります。

以下を考慮してください。

  • テーブル変換後、フォーリンテーブルを使用しているストリーミングジョブ(読み取りまたは書き込み)をすべて再起動し、リーダーとライターがマネージドテーブルで動作することを確認してください。
  • 変換前に外部カタログのソーステーブルを削除すると、Unity Catalog もフォーリンテーブルを削除します。テーブルをマネージドに変換した後、外部カタログのソーステーブルを削除しても、Unity Catalog マネージドテーブルには影響しません。
  • データコピー中にコマンドが中断された場合は、再起動してください。コマンドは中断したところから再開されます。
  • フォーリンテーブルの変換において、Databricks は変換後のテーブルに対する予測的最適化を自動的に有効にするのではなく、INHERIT に設定します。予測的最適化が有効になっているかどうかを確認するには、予測的最適化が有効になっているかどうかを確認するを参照してください。
警告

Databricks は、同じテーブルで複数の SET MANAGED コマンドを同時に実行することを避けることを推奨しています。これにより、テーブルの状態が一貫しなくなる可能性があります。

ビデオチュートリアル​

このビデオでは、AWS Glue メタストアをフェデレートする方法、およびフォーリンテーブルをマネージドテーブルに変換する方法を説明しています(10分)。フォーリンテーブルからマネージドテーブルへの変換は5時30分に開始します。

変換を検証する​

テーブルがマネージドテーブルに正常に変換されたことを確認するには、テーブル Type が MANAGED であるかを確認してください。以下のいずれかを実行できます:

  • 新しいタブを開いて、カタログエクスプローラーに移動してください。 詳細 タブの「 このテーブルについて 」の下に、テーブルの タイプ が マネージド と表示されます。

  • 次の SQL コマンドを実行して、テーブル Type を確認します。

    SQL
    DESCRIBE EXTENDED catalog_name.schema_name.table_name

    一度に複数のテーブルをチェックするか、チェックをスクリプト化するには、代わりにinformation_schema.tablesをクエリしてください:

    SQL
    SELECT table_type FROM system.information_schema.tables
    WHERE table_catalog = 'catalog_name' AND table_schema = 'schema_name' AND table_name = 'table_name';

レガシーリーダーおよびライター​

Databricks では、テーブル履歴保持を含む SET MANAGED のすべての機能を使用するために、すべてのリーダーとライターを Databricks Runtime 15.4 LTS 以降にアップグレードすることを推奨しています。

Databricks Runtime 15.3 以前でリーダーまたはライターを使用している場合は、引き続き SET MANAGED を使用できます。ただし、マネージドテーブルに変換した後、タイムトラベルで過去のコミットにアクセスできるのはバージョンのみであり、タイムスタンプではアクセスできません。

14日以内に外部テーブルにロールバックすると、変換前に行われた過去のコミットへのタイムトラベルが再度有効になります。タイムスタンプを使用したタイムトラベルは、変換からロールバックまでの間に変換されたマネージドテーブルに対して行われたコミットではサポートされていません。マネージドテーブルの変換をロールバックするを参照してください。

Databricks Runtime 15.3以下で変換した後にテーブルに書き込むには、inCommitTimestamp機能をドロップする必要があります。

SQL
ALTER TABLE <table_name> DROP FEATURE inCommitTimestamp;

パスベースのリダイレクト​

Databricks Runtime 18.1 以降では、外部テーブルをUnity Catalog マネージドテーブルに変換した後、以前の外部ロケーションへのパスベースの読み取りと書き込みが、新しいマネージドロケーションに自動的にリダイレクトされます。パスベースの読み取りは、SELECT * FROM delta.`/path/to/my_table`のようなコードです。パスベースのリダイレクトにより、ストレージパスを使用するレガシーコードをリファクタリングせずに動作させ続けることができるため、マネージドテーブルへの移行に必要な時間と労力が削減されます。

フォーリンテーブルの変換では、パスベースのアクセスはリダイレクトされません。

低遅延のユースケースの場合、Databricksはパスベースのアクセスを名前ベースのアクセスに移行することをお勧めします。パスベースのリダイレクトは、パスベースの読み取りまたは書き込みごとに数百ミリ秒のオーバーヘッドを追加し、古いDeltaログがUnity Catalogの外部ロケーションでアクティブなままになることを要求します。名前ベースの読み取りと書き込みには、追加のパフォーマンスオーバーヘッドはありません。「パスベースのコードを名前ベースに移行する」を参照してください。

パスベースのコードを名前ベースに移行する​

パスベースのリダイレクトを使用しないと決定した場合、レガシーコードを移行できます。移行するには、パスベースの参照を名前ベースの参照に置き換えます。

次のコード例は、ファイルへのパスベースのテーブル参照を含んでいます:

SQL
SELECT * FROM delta.`/path/to/customers_table`;

パスベースの参照を、次のコードに示すような名前ベースの外部テーブル参照に置き換えます。

SQL
SELECT * FROM catalog_name.schema_name.customers_table;

ストリーミング動作​

パスベースのリダイレクトによるストリーミングは、次のDatabricks Runtimeバージョンでの読み書きをサポートしています:

  • 読み取りはDatabricks Runtime 18.1以上でサポートされています。
  • 書き込みは Databricks Runtime 18.2 以降でサポートされています。

変換後、以前のテーブルの場所からの読み取りまたは書き込みを避けるため、すべてのストリーミングジョブを再起動する必要があります。

パスベースのストリーミングの読み取りと書き込みは、次のチェックポイントでマイグレーションメッセージとともに失敗し停止します:

  • 読み取りの場合、ストリームはエラーを発生させます:DELTA_STREAMING_INTERRUPTED_BY_MANAGED_TABLE_CONVERSION: The table at <path> has been converted to a Unity Catalog managed table. The stream has been stopped to ensure data consistency. Restart the stream and it will automatically resume from the last committed offset using the converted table。
  • 書き込みの場合、変換後の最初のマイクロバッチでエラーが発生します:Operation not allowed: STREAMING WRITE cannot be performed on a table with redirect feature. The no redirect rules are not satisfied []。

エラーを解決するには、同じ構成でストリームを再起動してください。パスベースのアクセスは、マネージドテーブルに自動的にリダイレクトされます。

パスベースのリダイレクトに関する制限事項については、制限事項を参照してください。

変換の失敗のトラブルシューティング​

このセクションでは、SET MANAGED を使用して外部テーブルを Unity Catalog マネージドテーブルに変換する際の一般的な問題の解決方法について説明します。

VERSIONED_CLONE_INTERNAL_ERROR.EXISTING_FILE_VALIDATION_FAILED​

変換が失敗した場合、常に同じDatabricks Runtimeバージョンを使用して再試行してください。メタデータはバージョン間で異なる方法でシリアル化される場合があり、異なるDatabricks Runtimeバージョンで変換を再試行すると、VERSIONED_CLONE_INTERNAL_ERROR.EXISTING_FILE_VALIDATION_FAILED エラーが発生します。

変換中のクラスターのシャットダウン​

変換中にクラスターがシャットダウンした場合、コマンドはDELTA_ALTER_TABLE_SET_MANAGED_INTERNAL_ERRORで失敗する可能性があります。変換を再開するには、コマンドを再試行してください。

破損した外部テーブル​

外部テーブルが既に破損している (たとえば、無効なテーブル状態) 場合、変換は DELTA_TRUNCATED_TRANSACTION_LOG、DELTA_TXN_LOG_FAILED_INTEGRITY、または DELTA_STATE_RECOVER_ERRORS のようなエラーで失敗する可能性があります。変換を試みる前に、DESCRIBE DETAIL のような外部テーブルに対する基本的な操作を実行できることを確認してください。

ファイル検証エラー​

SET MANAGED コマンドは、テーブルの最新のスナップショット内のすべてのファイルが新しいマネージドテーブルの場所にコピーされたことを検証します。ファイルが見つからない場合、コマンドは DELTA_ALTER_TABLE_SET_MANAGED_FAILED.FILE_VALIDATION_FAILED エラーで失敗します。

この問題を解決するには:

  1. どのファイルが移行できなかったかを特定するため、Sparkドライバーログを確認します。
  2. これらのファイルがソース外部テーブルのロケーションに存在し、アクセス可能であることを確認してください。
  3. ALTER TABLE ... SET MANAGED コマンドを再試行します。

問題が続く場合は、Databricksサポートにお問い合わせください。

マネージドテーブル変換のロールバック​

重要

ロールバックコマンドを使用するには、サーバレス コンピュートまたは Databricks Runtime 17.3 LTS 以降が必要です。

外部テーブル​

外部テーブルをマネージドテーブルに変換した後、UNSET MANAGEDコマンドを使用することで14日以内にロールバックできます。これにより、テーブルメタデータが元の外部ロケーションを指すように更新されます。Databricks は、変換後にマネージドロケーションに対して行われたすべての書き込みを保持します。

外部テーブルにロールバックするには、次のコマンドを実行します。

SQL
ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED;

以下の情報に留意してください:

  • ロールバックコマンドが中断または失敗した場合は、再実行して再試行してください。
  • 変換と同様に、ロールバック後にストリーミングジョブを再起動する必要があります。
  • 変換とロールバックの間にマネージドロケーションに対して行われたコミットは、バージョンによるタイムトラベルを可能にしますが、タイムスタンプによるものではありません。
  • ロールバックから7日後、Databricksはマネージドの場所にあるデータを自動的に削除します。

フォーリンテーブル: MOVE​

警告

マネージドテーブルを削除する前に、UNSET MANAGED を実行する必要があります。最初に UNSET MANAGED を実行せずにテーブルを削除すると、データ損失または整合性のない状態になる可能性があります。

UNSET MANAGED コマンドを使用して、テーブルの移行をロールバックし、外部カタログのソーステーブルへのアクセスを回復できます。ロールバックには2つのステップが必要です。まず、テーブルを外部テーブルにロールバックし、その後、外部テーブルを削除して、テーブルをフォーリンテーブルとして再フェデレートする必要があります。

  1. 外部テーブルにロールバックするには、次のコマンドを実行します。
SQL
ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
  1. テーブルをフォーリンテーブルに再フェデレートするには、以下のコマンドで外部テーブルを削除します。
SQL
DROP TABLE catalog.schema.my_managed_table

次のカタログ同期後にフォーリンテーブルが利用可能になります。

以下の情報に留意してください:

  • 変換とロールバックの間で外部ロケーションに行ったコミットについては、バージョンでタイムトラベルできますが、タイムスタンプではできません。
  • ロールバックの7日後、Databricksはマネージドロケーションのデータを削除します。

フォーリンテーブル: COPY​

テーブルの移行をロールバックするために、外部カタログのソーステーブルは変更されていないため、UNSET MANAGED コマンドを実行する必要はありません。マネージドテーブルを削除すると、次回のカタログ同期後にDatabricksはそれをフォーリンテーブルとして再連携します。

ロールバックの検証​

外部テーブルとフォーリンテーブルでロールバックを異なる方法で確認します。

外部テーブル​

マネージドテーブルが正常に外部テーブルにロールバックされたことを確認するには、テーブル Type が EXTERNAL かどうかを確認します。以下のいずれかを実行してください。

  • 新しいタブを開き、カタログエクスプローラーに移動します。 詳細 タブの このテーブルについて で、テーブルの タイプ は 外部 として表示されます。

  • 次の SQL コマンドを実行して、テーブル Type を確認します。

    SQL
    DESCRIBE EXTENDED catalog_name.schema_name.table_name

    一度に複数のテーブルをチェックするか、チェックをスクリプト化するには、代わりにinformation_schema.tablesをクエリしてください:

    SQL
    SELECT table_type FROM system.information_schema.tables
    WHERE table_catalog = 'catalog_name' AND table_schema = 'schema_name' AND table_name = 'table_name';

フォーリンテーブル​

マネージドテーブルがフォーリンテーブルに正常にロールバックされたことを確認するには、テーブル Type が FOREIGN であることを確認してください。以下のいずれかを実行してください。

  • 新しいタブを開き、カタログエクスプローラーに移動します。**詳細**タブの**このテーブルについて**の下に、テーブルの**種類**が**外部**と表示されます。

  • 次のSQLコマンドを実行して、テーブルタイプを確認します。

    SQL
    SELECT table_type FROM system.information_schema.tables
    WHERE table_catalog = 'catalog_name' AND table_schema = 'schema_name' AND table_name = 'table_name';

    table_type 列は FOREIGN として表示されます。

注記

DESCRIBE EXTENDED を使用してフォーリンテーブル変換またはロールバックを検証しないでください。フェデレーションはこのコマンドにhive_metastoreカタログの動作を使用するため、テーブルの実際の状態に関係なく、テーブルTypeをEXTERNALとして表示します。

高度なトピック​

このセクションでは、フォーリンテーブルと外部テーブルをマネージドテーブルに変換するための高度なトピックについて説明します。

スキーマまたはカタログレベルで変換する​

スキーマまたはカタログレベルでテーブルの変換を自動化するには、次の2つのオプションがあります:

  • スキーマ内のテーブルを順に処理して、各テーブルを個別に変換します。

  • discoverx labs プロジェクトを使用して、スキーマまたはカタログ全体を一度に変換します。

    Python
    df = (dx.from_tables("prod.*.*")
    .with_sql("ALTER TABLE {full_table_name} SET MANAGED;")
    .apply())

Databricks Labs と discoverx を参照してください。

フォーリンカタログにテーブルを作成します​

フォーリンカタログに外部テーブルまたはマネージドテーブルを作成できます。動作はスキーマ構成によって異なります:

  • GlueまたはeHMSスキーマの場合 、または Unity Catalogでマネージドロケーションが設定されているスキーマの場合 : CREATE TABLE foreign_catalog.schema.tableを実行すると、Unity Catalogのマネージドテーブルまたは外部テーブルが作成されます。Databricksは、テーブルを外部カタログにプッシュまたは同期しません。
  • **内部Hive metastore接続からのスキーマの場合**: 外部スキーマでテーブルを作成しようとすると、フォーリンテーブルが作成され、hive_metastore にもテーブルが作成されます。
  • レガシーワークスペースHive metastoreの場合 : これは読み取りおよび書き込みフェデレーションを持つため、フォーリンカタログにテーブルを作成すると、内部Hive metastoreにもテーブルが作成されます。

DBFS-backed フォーリンテーブル​

DBFSでサポートされているテーブルを変換する場合、Databricks はDBFSパスの現在のマッピングを外部テーブルのクラウドパスロケーションとして格納します。

制限事項​

外部テーブルまたはフォーリンテーブルをマネージドテーブルに変換すると、以下の制限があります:

  • 変換後からロールバック前までに行われたコミットのテーブル履歴では、バージョンによるタイムトラベルは可能ですが、タイムスタンプによるタイムトラベルはできません。

  • OpenSharing は SET MANAGED コマンドと完全に互換性がありません。Open OpenSharing はサポートされていますが、Databricks-to-Databricks 共有は受信者テーブルのマネージド場所を自動的に更新しません。テーブルを再共有するまで、受信者は古い場所から読み取りを続けます。テーブルを再共有するには、次のコマンドを実行します。

    SQL
    ALTER SHARE <share_name> REMOVE TABLE <table_name>;
    ALTER SHARE <share_name> ADD TABLE <table_name> AS <table_share_name> WITH HISTORY;
  • Unity Catalog メタストア、カタログ、またはスキーマのデフォルトマネージドロケーションが、ソーステーブルのストレージロケーションとは異なるクラウドリージョンにある場合、クラウドプロバイダーから追加のクロスリージョンデータ転送コストが発生する可能性があります。

    スキーマとカタログの場所を確認するには、以下のコマンドを実行します。

    SQL
    DESC SCHEMA EXTENDED <catalog_name>.<schema_name>;

    DESC CATALOG EXTENDED <catalog_name>;

    メタストアの場所を確認するには、次のいずれかのコマンドを実行します。

    SQL
    DESC METASTORE; -- Option 1
    SELECT * FROM system.information_schema.metastores; -- Option 2

パスベースのリダイレクトの制限事項:

  • 変換後、すべてのストリーミングジョブを再起動する必要があります。ストリーミング動作を参照してください。
  • パスベースのリダイレクトは、移行プロセスに対してのみ下位互換性があり、Unity Catalog マネージドテーブルへの新しいパスベースのアクセスを有効にしません。

フォーリンテーブルの制限:

  • Hive metastoreとGlue Federationを使用してフェデレーションされたフォーリンテーブルのみが変換にサポートされています。