フォーリンテーブルをマネージドUnity Catalogテーブルに変換する
プレビュー
この機能はパブリック プレビュー段階であり、現時点では参加している顧客のみが利用できます。プレビューに参加するには、このフォームに記入して応募してください。この機能は、 HMSおよびGlue Federationを使用してフェデレーションされたフォーリンテーブルの変換のみをサポートします。
このページでは、 SET MANAGEDを使用してフォーリンテーブルをマネージドテーブルに変換する方法について説明します。
- 外部テーブルからマネージドテーブルへの変換の詳細については、 「外部テーブルをマネージドUnity Catalogテーブルに変換する」を参照してください。
- フォーリンテーブルから外部テーブルへの変換の詳細については、 「フォーリンテーブルを外部Unity Catalogテーブルに変換する」を参照してください。
SET MANAGED概要
SET MANAGED機能を使用して、 DatabricksのフォーリンテーブルをUnity Catalogマネージドテーブルに変換します。 SET MANAGEDは次の利点があります:
- テーブル履歴を保持しています。
- 同じ名前、設定、権限、ビューなど、同じテーブル構成を維持します。
- 予測的最適化の恩恵を受ける。 テーブルを管理対象に変換すると、予測的最適化は
INHERITに設定され、スキーマまたはカタログ レベルから設定が継承されることを意味します。 デフォルトでは、これは現在無効になっています。変換されたテーブルで予測的最適化を有効にするには、ALTER TABLE <table_name> ENABLE PREDICTIVE OPTIMIZATIONを実行します。これにより、テーブルがINHERITではなくENABLEDに設定されます。
前提条件
- データ形式 : フォーリンテーブルのデータ形式はDelta Lakeである必要があります。 Parquet の 1 回限りの変換を実行するには、 「Delta Lake への変換」を参照してください。
- テーブル タイプ : HMS テーブル タイプは外部 HMS テーブルである必要があります。テーブルが管理対象 HMS テーブルの場合、コマンドは失敗します。
- Runtime : Databricks Runtime 17.3 以上
- 権限 : テーブルに対する
OWNERまたはMANAGE権限とCREATEEXTERNAL LOCATION
構文
Unity CatalogフォーリンテーブルをUnity Catalog管理対象に変換するには、次のコマンドを実行します。
ALTER TABLE source_table SET MANAGED {MOVE | COPY}
パラメーター
-
ソーステーブル
Unity Catalog内の既存のフォーリンテーブル。 フォーリンテーブルには、外部カタログによって管理されるデータとメタデータが含まれます。 変換前に、ソース テーブルを外部カタログにドロップすると、フォーリン テーブルもUnity Catalogにドロップされます。 テーブルがマネージドテーブルに変換された後、外部カタログ内のソーステーブルを削除してもUnity Catalogマネージドテーブルには影響しません。
-
MOVEテーブルを管理対象に変換し、外部カタログ内のソース テーブルへのアクセスを無効にします。
-
テーブルが変換されると、外部カタログ経由のアクセスまたはパスベースのアクセスが失敗します。テーブルのすべてのリーダーとライターは、アクセスに Unity Catalog 名前空間を使用する必要があります。
-
すべてのリーダーとライターは名前ベースのアクセスを使用する必要があります。例えば:
SQLSELECT * FROM catalog_name.schema_name.table_name; -
パスベースのアクセスはサポートされておらず、テーブルが変換された後に失敗します。例えば:
SQLSELECT * FROM delta.`protocol://path/to/table`; -
外部 ( Databricks以外) クライアントは、 Unity Catalogマネージドテーブルへの読み取りをサポートする必要があります。 互換Modeを参照してください。
-
アクセス ダッシュボードを使用して、テーブルにアクセスしているリーダーとライターがDatabricks Runtimeであるか、外部の非Databricksクライアントであるかを確認します。
-
Databricks リーダーとライターは、Databricks Runtime 15.4 LTS 以上を使用する必要があります。リーダーまたはライターが Databricks Runtime 14.3 LTS 以下を使用している場合は、 「Databricks Runtime 14.3 LTS 以下のリーダーとライター向けの代替オプション」を参照してください。
-
変換中にリーダーまたはライターがテーブルにアクセスすると、ダウンタイムが発生する可能性があります。詳細については、 「外部テーブルをマネージドUnity Catalogテーブルに変換する」を参照してください。
-
コマンドが中断された場合、管理対象への変換が完了していないため、テーブルは外部テーブルとして残される可能性があります。コマンドを完了するには、外部テーブルで
SET MANAGED再度実行してください。 -
手動で構成しない限り、予測的最適化は
INHERITに設定されます。 予測的最適化が有効かどうかを確認するには、 「予測的最適化が有効かどうかを確認する」を参照してください。 -
ロールバック : テーブルの移行をロールバックし、外部カタログ内のソース テーブルへのアクセスを再度取得するには、
UNSET MANAGEDコマンドを実行します。コマンドを実行すると、テーブルは外部テーブルになります。テーブルをフォーリンテーブルに戻すには、テーブルを削除すると、次回のカタログ同期で外部テーブルとして再フェデレーションされます。SQLALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
-
テーブルを削除する前にUNSET MANAGEDを実行する必要があります。最初にUNSET MANAGEDを実行せずにテーブルを削除すると、システムが不良な状態になり、データの損失や不整合が発生する可能性があります。
-
ロールバックする場合、変換からロールバックまでの間に外部ロケーションに対して行ったコミットは、バージョンによってタイムトラベル可能ですが、タイムスタンプによってはタイムトラベルできません。 ロールバックから 7 日後、管理対象の場所のデータは削除されます。Databricks Runtime 15.4 LTS 以上のリーダーとライターの場合、変換後、ロールバック前に行われたコミットのテーブル履歴は、バージョン別にタイムトラベル可能ですが、タイムスタンプ別にはタイムトラベルできません。
-
テーブル変換後、次の操作を行う必要があります。
- フォーリンテーブルを使用してストリーミング ジョブ (読み取りまたは書き込み) を再開します。
- リーダーとライターがマネージドテーブルを使用できるようにしてください。
-
COPY外部カタログ内のソース テーブルへのアクセスを変更または無効にすることなく、テーブルを管理対象に変換します。
- マネージドへの変換中、ソース テーブルのデータはフォーリン テーブルに定義された管理対象の保存場所にコピーされ、新しいマネージド テーブルと外部カタログ内のソース テーブルという 2 つの別個のコピーが作成されます。
- 読み取りと書き込みが失敗する
MOVEとは異なり、COPYを使用する場合は、外部カタログ内のソース テーブルへの読み取りと書き込みを適切に無効にし、ワークロードが新しいカタログに移行されていることを確認する必要があります。 - ロールバック : テーブルの移行をロールバックする場合、ソース テーブルは外部カタログ内で中断されていないため、
UNSET MANAGEDコマンドを実行する必要はありません。テーブルを削除すると、次のカタログ同期で外部として再フェデレーションされます。
変換を確認する
外部テーブルがマネージドテーブルに変換されたことを確認できます。
DESCRIBE EXTENDED catalog_name.schema_name.table_name
テーブルが変換されている場合、 col_nameの下のTypeはdata_typeの下のMANAGEDとして表示されます。
既知の制限事項
フォーリンテーブルからマネージドテーブルへの変換には次の制限があります。
-
ストリーミング クライアント : 変換後にストリーミング ジョブを再起動する必要があります。
-
複数のクラウド リージョン : Unity Catalogのメタストア、カタログ、またはスキーマの管理されている場所が、変換されるフォーリン テーブルのストレージの場所とは異なるクラウド リージョンにある場合、追加のクロスリージョン データ転送コストが発生する可能性があります。 クラウド プロバイダーは、Databricks の管理外でこれらの料金を課します。スキーマ、カタログ、メタストアの場所を確認するには、次のコマンドを使用します。
SQL-- Check schema location
DESCRIBE SCHEMA EXTENDED catalog_name.schema_name;
-- Check catalog location
DESCRIBE CATALOG EXTENDED catalog_name;
-- Check metastore location
DESCRIBE METASTORE;
よくある質問
フォーリンカタログでテーブルを作成したり、テーブルを変換したりすることはできますか?
はい、フォーリンカタログで外部テーブルまたはマネージドテーブルを作成できます。 動作はスキーマ構成によって異なります。
- Glue または eHMS スキーマの場合 、あるいは Unity Catalog で管理場所が設定されているスキーマの場合 :
CREATE TABLE foreign_catalog.schema.tableを実行すると、Unity Catalog で管理されるテーブルまたは外部テーブルが作成されます。テーブルは外部カタログにプッシュまたは同期されません。 - 内部Hive metastore接続からのスキーマの場合 : 外部スキーマにテーブルを作成しようとすると、引き続きフォーリン テーブルが作成され、
hive_metastoreにもテーブルが作成されます。 - 従来のワークスペースHive metastoreの場合 : 読み取りおよび書き込みフェデレーションであるため、フォーリンカタログにテーブルを作成すると、内部のHive metastoreにもテーブルが作成されます。
私のフォーリンテーブルが DBFS でサポートされている場合はどうなりますか?
DBFS ベースのテーブルを変換する場合、DBFS パスからクラウド パスへの現在のマッピングを外部テーブルのクラウド パスの場所として保存します。
スキーマまたはカタログ レベルで変換できますか?
スキーマ内のテーブルを反復処理して個別に変換することも、discoverx labs プロジェクトを利用してスキーマまたはカタログ全体を一度に変換することもできます。
df = (dx.from_tables("prod.*.*")
.with_sql("ALTER TABLE {full_table_name} SET MANAGED;")
.apply())