外部または外部のDelta LakeテーブルをUnity Catalogマネージドテーブルに変換します
パブリックプレビュー
外部テーブルからマネージドテーブルへの変換は、一般提供されています。
フォーリンテーブルをマネージドテーブルに変換する機能は、パブリック プレビュー段階です。Hive metastore and Glue Federationを使用してフェデレーションされたフォーリンテーブルのみがサポートされます。
Databricks で外部またはフォーリン Delta Lake テーブルを Unity Catalog マネージドテーブルに変換するには、ALTER TABLE ... SET MANAGED コマンドを使用するか、外部テーブルの場合は Catalog Explorer を使用します。この変換により、名前、設定、アクセス許可、ビューを含むテーブル構成が保持され、また、テーブル履歴も保持されます。
外部テーブルの変換の場合、SET MANAGED も適用されます。
- リーダーとライターのダウンタイムを最小限に抑えます。
- 変換中の並列書き込みを処理します。
- 変換されたマネージドテーブルを外部テーブルにロールバックできます。
- 変換後にレガシーコードが機能するように、パスベースの読み取りと書き込みをリダイレクトします。
外部テーブルを変換するためにCREATE TABLE AS SELECT (CTAS) を使用することもできますが、Databricksはこれらの利点のためにSET MANAGEDを推奨しています。
フォーリンテーブルの変換の場合、Databricks は自動的に有効にするのではなく、変換されたテーブルの予測的最適化を INHERIT に設定します。「SQL を使用するフォーリンテーブル」を参照してください。
フォーリンテーブルを外部テーブルに変換するには、フォーリンテーブルを外部 Unity Catalog テーブルに変換するを参照してください。
前提条件
外部テーブル
外部テーブルをマネージドテーブルに変換するには、次の前提条件があります。
-
形式 :テーブルは 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)をキャンセルし、外部テーブルをマネージドテーブルに変換している間はジョブをスケジュールしないでください。
フォーリンテーブル
パブリックプレビュー
フォーリンテーブルをマネージドテーブルに変換する機能は、パブリックプレビューです。
フォーリンテーブルをマネージドテーブルに変換するには、以下の前提条件があります。
- **データ形式**:フォーリンテーブルはDelta Lake形式を使用する必要があります。Parquetの1回限りの変換を実行するには、「Delta Lakeに変換」を参照してください。
- Runtime :Databricks Runtime 17.3以降。
- テーブルの種類 :Hive metastore(HMS)のテーブルの種類は、外部 HMS テーブルである必要があります。テーブルが管理対象の HMS テーブルの場合、コマンドは失敗します。
- 権限 :テーブルに対する
OWNERまたはMANAGE権限、およびEXTERNAL LOCATIONに対するCREATE権限。
ダウンタイムとデータコピー時間
SET MANAGED コマンドは、DEEP CLONE などの代替手法と比べて、ダウンタイムを最小化または解消します。
外部テーブル
外部テーブルの変換プロセスは、2段階のアプローチを使用します:
- 初期データコピー(ダウンタイムなし): コマンドはテーブルデータとDeltaトランザクションログを外部ロケーションからマネージドロケーションへコピーします。外部テーブルへのアクティブなリーダーとライターは、中断することなく実行されます。
- マネージドロケーションへの切り替え (短時間のダウンタイムが発生します): 最初のステップで外部ロケーションに行われたコミットはマネージドロケーションに移動され、テーブルメタデータが更新されて新しいマネージドロケーションが登録されます。このステップの間、外部ロケーションへのすべての書き込みは一時的にブロックされ、ライターのダウンタイムが発生します。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分 |
ダウンタイムは、ファイルサイズ、ファイル数、コミット数といった要因に基づいて異なる場合があります。
フォーリンテーブル
フォーリンテーブルの変換ダウンタイムは、MOVEを使用するかCOPYを使用するかによって異なります:
MOVEの場合、外部テーブルについて説明されているようにダウンタイムが発生する可能性があります。See 外部テーブル.COPYの場合、変換プロセスによってソーステーブルがマネージドストレージの場所にコピーされ、データの2つの別個のコピーが作成されるため、ダウンタイムの管理はお客様の責任となります。外部カタログ内のソーステーブルへの読み取りと書き込みを無効にし、新しいマネージドテーブルを使用するようにワークロードを移行する責任があります。
マネージドテーブルに変換する
Catalog Explorer または SQL を使用して外部テーブルを変換するか、SQL を使用してフォーリンテーブルを変換します。
カタログエクスプローラーを使用した外部テーブル (ベータ版)
ベータ版
カタログエクスプローラーを使用した外部テーブルからマネージドテーブルへの変換はベータ版です。
Catalog Explorer を使用して、スキーマ内の1つまたは複数の外部テーブルを一度に変換できます。
-
Catalog Explorer で変換するテーブルまたはスキーマに移動します。
-
「 このテーブルについて 」(テーブル詳細ページ)または「 このスキーマについて 」(スキーマ詳細ページ)で、「 最適化を探索 」をクリックします。
-
「 Unity Catalog マネージドテーブルに移行する理由 」で、ダイアログで、[ 続行 ] をクリックします。

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

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

-
ノートブックで、ベストプラクティスを確認し、すべての前提条件を満たしていることを確認します。
-
**SET MANAGED Queries**セルを実行します。
セルが実行されると、Catalog Explorerでテーブルタイプが**EXTERNAL**ではなく**MANAGED**として表示されます。 ステータスがすぐに更新されない場合は、ページを更新してください。
SQLを使用した外部テーブル
外部テーブルで Apache Iceberg 読み取り (UniForm) が有効になっているかどうかに応じて、以下のいずれかのコマンドを実行します。テーブルで Iceberg 読み取りが有効になっていることを確認するには、Iceberg 読み取りが有効になっていることを確認するを参照してください。
-
Iceberg 読み取りが有効になっていない Unity Catalog 外部テーブルの場合は、次のコマンドを実行してください。
SQLALTER TABLE catalog.schema.my_external_table SET MANAGED;変換後、互換性の懸念なく、マネージドテーブルでIceberg読み取りを有効にできます。
-
Iceberg読み取りがすでに有効になっているUnity Catalog外部テーブルの場合は、次のコマンドを実行してください。
SQLALTER 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以降またはサーバレスコンピュートが必要です)。
VACUUM my_converted_table
予測的最適化が有効になっている場合でも、Unity Catalogの外部ロケーションのデータは14日後に削除されない場合があります。例えば、マネージドテーブルの使用頻度が低い場合や、サイズが小さい場合に発生する可能性があります。以前のデータが残っている場合は、VACUUM を手動で実行して削除してください。
Databricks は、外部ロケーション内のデータのみを削除します。Delta トランザクションログと Unity Catalog のテーブルへの参照は保持されます。
SQLを使用するフォーリンテーブル
パブリックプレビュー
フォーリンテーブルをマネージドテーブルに変換する機能は、パブリックプレビューです。
Unity Catalog フォーリンテーブルを Unity Catalog マネージドに変換するには、次のコマンドを実行します。
ALTER TABLE source_table SET MANAGED {MOVE | COPY}
-
source_table
Unity Catalogでフェデレーションされた既存のフォーリンテーブル。
-
MOVEテーブルをマネージドテーブルに変換し、外部カタログ内のソーステーブルへのアクセスを無効にします。
-
テーブルを変換した後、外部カタログを介したアクセスまたはパスベースのアクセスは失敗します。テーブルのすべてのリーダーとライターは、アクセスに Unity Catalog 名前空間を使用する必要があります。例えば:
SQLSELECT * FROM catalog_name.schema_name.table_name; -
パスベースのアクセスはサポートされておらず、テーブル変換後に失敗します。例えば:
SQLSELECT * FROM delta.`protocol://path/to/table`; -
リーダー/ライターのバージョンおよびクライアント互換性の要件は、前提条件とレガシーリーダーおよびライターで説明されているものと同じです。
-
予測的最適化は、手動で設定した場合を除き、
INHERITに設定されています。予測的最適化が有効になっているかどうかを確認するには、予測的最適化が有効になっているかを確認するを参照してください。
-
-
COPY外部カタログにあるソーステーブルへのアクセスを変更または無効化することなく、テーブルをマネージドに変換します。
- マネージドへの変換中、変換プロセスはソーステーブルからフォーリンテーブルに定義されたマネージドストレージロケーションにデータをコピーし、新しいマネージドテーブルと外部カタログのソーステーブルという2つの別個のコピーを作成します。
- 読み取りと書き込みが失敗する
MOVEとは異なり、COPYを使用する場合、外部カタログのソーステーブルへの読み取りと書き込みを適切に無効にし、ワークロードが新しいカタログに移行されていることを確認する責任があります。
テーブル変換後、フォーリンテーブルを使用しているストリーミングジョブ(読み取りまたは書き込み)をすべて再起動し、リーダーとライターがマネージドテーブルで動作することを確認してください。
変換前に外部カタログのソーステーブルを削除すると、Unity Catalog もフォーリンテーブルを削除します。テーブルをマネージドに変換した後、外部カタログのソーステーブルを削除しても、Unity Catalog マネージドテーブルには影響しません。
データコピー中にコマンドが中断された場合は、再起動してください。コマンドは中断したところから再開されます。
Databricks は、同じテーブルで複数の SET MANAGED コマンドを同時に実行することを避けることを推奨しています。これにより、テーブルの状態が一貫しなくなる可能性があります。
変換を検証する
テーブルがマネージドテーブルに正常に変換されたことを確認するには、テーブル Type が MANAGED であるかを確認してください。以下のいずれかを実行できます:
-
新しいタブを開いて、カタログエクスプローラーに移動してください。 詳細 タブの「 このテーブルについて 」の下に、テーブルの タイプ が マネージド と表示されます。
-
次の SQL コマンドを実行して、テーブル
Typeを確認します。SQLDESCRIBE EXTENDED catalog_name.schema_name.table_name一度に複数のテーブルをチェックするか、チェックをスクリプト化するには、代わりに
information_schema.tablesをクエリしてください:SQLSELECT 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機能をドロップする必要があります。
ALTER TABLE <table_name> DROP FEATURE inCommitTimestamp;
パスベースのリダイレクト
プレビュー
パスベースのリダイレクトは、パブリックプレビューで提供されています。登録するには、このフォームにご記入ください。
Databricks Runtime 18.1 以降では、外部テーブルをUnity Catalog マネージドテーブルに変換した後、以前の外部ロケーションへのパスベースの読み取りと書き込みが、新しいマネージドロケーションに自動的にリダイレクトされます。パスベースの読み取りは、SELECT * FROM delta.`/path/to/my_tableのようなコードです。パスベースのリダイレクトにより、ストレージパスを使用するレガシーコードをリファクタリングせずに動作させ続けることができるため、マネージドテーブルへの移行に必要な時間と労力が削減されます。
フォーリンテーブルの変換では、パスベースのアクセスはリダイレクトされません。
低遅延のユースケースの場合、Databricksはパスベースのアクセスを名前ベースのアクセスに移行することをお勧めします。パスベースのリダイレクトは、パスベースの読み取りまたは書き込みごとに数百ミリ秒のオーバーヘッドを追加し、古いDeltaログがUnity Catalogの外部ロケーションでアクティブなままになることを要求します。名前ベースの読み取りと書き込みには、追加のパフォーマンスオーバーヘッドはありません。「パスベースのコードを名前ベースに移行する」を参照してください。
パスベースのコードを名前ベースに移行する
パスベースのリダイレクトを使用しないと決定した場合、レガシーコードを移行できます。移行するには、パスベースの参照を名前ベースの参照に置き換えます。
次のコード例は、ファイルへのパスベースのテーブル参照を含んでいます:
SELECT * FROM delta.`/path/to/customers_table`;
パスベースの参照を、次のコードに示すような名前ベースの外部テーブル参照に置き換えます。
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 エラーで失敗します。
この問題を解決するには:
- どのファイルが移行できなかったかを特定するため、Sparkドライバーログを確認します。
- これらのファイルがソース外部テーブルのロケーションに存在し、アクセス可能であることを確認してください。
ALTER TABLE ... SET MANAGEDコマンドを再試行します。
問題が続く場合は、Databricksサポートにお問い合わせください。
マネージドテーブル変換のロールバック
ロールバックコマンドを使用するには、サーバレス コンピュートまたは Databricks Runtime 17.3 LTS 以降が必要です。
外部テーブル
外部テーブルをマネージドテーブルに変換した後、UNSET MANAGEDコマンドを使用することで14日以内にロールバックできます。これにより、テーブルメタデータが元の外部ロケーションを指すように更新されます。Databricks は、変換後にマネージドロケーションに対して行われたすべての書き込みを保持します。
外部テーブルにロールバックするには、次のコマンドを実行します。
ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED;
以下の情報に留意してください:
- ロールバックコマンドが中断または失敗した場合は、再実行して再試行してください。
- 変換と同様に、ロールバック後にストリーミングジョブを再起動する必要があります。
- 変換とロールバックの間にマネージドロケーションに対して行われたコミットは、バージョンによるタイムトラベルを可能にしますが、タイムスタンプによるものではありません。
- ロールバックから7日後、Databricksはマネージドの場所にあるデータを自動的に削除します。
フォーリンテーブル: MOVE
マネージドテーブルを削除する前に、UNSET MANAGED を実行する必要があります。最初に UNSET MANAGED を実行せずにテーブルを削除すると、データ損失または整合性のない状態になる可能性があります。
UNSET MANAGED コマンドを使用して、テーブルの移行をロールバックし、外部カタログのソーステーブルへのアクセスを回復できます。ロールバックには2つのステップが必要です。まず、テーブルを外部テーブルにロールバックし、その後、外部テーブルを削除して、テーブルをフォーリンテーブルとして再フェデレートする必要があります。
- 外部テーブルにロールバックするには、次のコマンドを実行します。
ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
- テーブルをフォーリンテーブルに再フェデレートするには、以下のコマンドで外部テーブルを削除します。
DROP TABLE catalog.schema.my_managed_table
次のカタログ同期後にフォーリンテーブルが利用可能になります。
以下の情報に留意してください:
- 変換とロールバックの間で外部ロケーションに行ったコミットについては、バージョンでタイムトラベルできますが、タイムスタンプではできません。
- ロールバックの7日後、Databricksはマネージドロケーションのデータを削除します。
フォーリンテーブル: COPY
テーブルの移行をロールバックするために、外部カタログのソーステーブルは変更されていないため、UNSET MANAGED コマンドを実行する必要はありません。マネージドテーブルを削除すると、次回のカタログ同期後にDatabricksはそれをフォーリンテーブルとして再連携します。
ロールバックの検証
外部テーブルとフォーリンテーブルでロールバックを異なる方法で確認します。
外部テーブル
マネージドテーブルが正常に外部テーブルにロールバックされたことを確認するには、テーブル Type が EXTERNAL かどうかを確認します。以下のいずれかを実行してください。
-
新しいタブを開き、カタログエクスプローラーに移動します。 詳細 タブの このテーブルについて で、テーブルの タイプ は 外部 として表示されます。
-
次の SQL コマンドを実行して、テーブル
Typeを確認します。SQLDESCRIBE EXTENDED catalog_name.schema_name.table_name一度に複数のテーブルをチェックするか、チェックをスクリプト化するには、代わりに
information_schema.tablesをクエリしてください:SQLSELECT 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コマンドを実行して、テーブルタイプを確認します。
SQLSELECT 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 プロジェクトを使用して、スキーマまたはカタログ全体を一度に変換します。
Pythondf = (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 共有は受信者テーブルのマネージド場所を自動的に更新しません。テーブルを再共有するまで、受信者は古い場所から読み取りを続けます。テーブルを再共有するには、次のコマンドを実行します。SQLALTER SHARE <share_name> REMOVE TABLE <table_name>;
ALTER SHARE <share_name> ADD TABLE <table_name> AS <table_share_name> WITH HISTORY; -
Unity Catalog メタストア、カタログ、またはスキーマのデフォルトマネージドロケーションが、ソーステーブルのストレージロケーションとは異なるクラウドリージョンにある場合、クラウドプロバイダーから追加のクロスリージョンデータ転送コストが発生する可能性があります。
スキーマとカタログの場所を確認するには、以下のコマンドを実行します。
SQLDESC SCHEMA EXTENDED <catalog_name>.<schema_name>;
DESC CATALOG EXTENDED <catalog_name>;メタストアの場所を確認するには、次のいずれかのコマンドを実行します。
SQLDESC METASTORE; -- Option 1
SELECT * FROM system.information_schema.metastores; -- Option 2
パスベースのリダイレクトの制限事項:
- 変換後、すべてのストリーミングジョブを再起動する必要があります。ストリーミング動作を参照してください。
- パスベースのリダイレクトは、移行プロセスに対してのみ下位互換性があり、Unity Catalog マネージドテーブルへの新しいパスベースのアクセスを有効にしません。
フォーリンテーブルの制限:
- Hive metastoreとGlue Federationを使用してフェデレーションされたフォーリンテーブルのみが変換にサポートされています。