テーブルとビューを Unity Catalog にアップグレードする

この記事では、既存の Hive メタストアに登録されているテーブルとビューを Unity Catalog にアップグレードする方法について説明します。

重要

この記事で説明する手動の手順の代替として、Databricks Labs では UCX プロジェクトも提供しています。これはワークフローとユーティリティのセットであり、Hive メタストアのテーブルを Unity Catalog メタストアのテーブルにアップグレードすることを計画し、実行する目的で使用できます。 UCX は、ワークスペース グループをアカウントレベルのグループにアップグレードしたり、ストレージの場所にアクセスするための資格情報を移行したりするのにも役立ちます。 詳細については、「UCX ユーティリティを使用してワークスペースを Unity Catalog にアップグレードする」を参照してください。

テーブルが現在 Unity Catalog に登録されているかどうかを確認するには、カタログ名を調べます。 カタログ hive_metastore 内のテーブルは、Hive メタストアに登録されています。 リストにある他のカタログはすべて、Unity Catalog によって管理されています。

注意

Unity Catalog では、Hive とは異なる方法でパーティションが管理されます。 パーティションを直接操作する Hive コマンドは、Unity Catalog によって管理されるテーブルではサポートされません。

スキーマまたは複数のテーブルを Unity カタログにアップグレードする

Catalog Explorer アップグレード ウィザードを使用すると、既定の Hive メタストアから Unity カタログ メタストアに、完全なスキーマ (データベース) と複数の外部テーブルをコピーできます。

要件

開始する前に、以下が必要になります。

  • テーブルの場所のパスへのアクセスを許可されているサービス プリンシパルに関する情報を含むストレージ資格情報
  • 先ほど作成したストレージ資格情報とクラウド テナント上のデータへのパスを参照する外部の場所
  • CREATE EXTERNAL TABLEアップグレードするテーブルの外部の場所に対するアクセス許可。

アップグレード プロセス

  1. Catalog Explorer を開くには、サイド バーで カタログ アイコンカタログ をクリックします。

  2. カタログとして hive_metastore を選択し、アップグレードするスキーマ (データベース) を選択します。

    データベースの選択

  3. スキーマ詳細ビューの右上にある [アップグレード] をクリックします。

  4. アップグレードするすべてのテーブルを選択し、[次へ] をクリックします。

    アップグレード ウィザードを使用してアップグレードできるのは、Unity カタログでサポートされている形式外部テーブルのみです。

  5. 各テーブルの宛先カタログ、スキーマ (データベース)、所有者を設定します。

    ユーザーは、新しく作成されたテーブルに、そのカタログとスキーマに対する特権のコンテキストでアクセスできます。

    テーブルの所有者には、SELECTMODIFY を含め、テーブルに対するすべての特権があります。 所有者を選択しない場合は、ユーザーを所有者としてマネージド テーブルが作成されます。 Databricks では通常、テーブルの所有権をグループに付与することをお勧めします。 Unity Catalog でのオブジェクトの所有権の詳細については、「Unity Catalog オブジェクトの所有権を管理する」を参照してください。

    同じカタログとスキーマを複数のテーブルに割り当てるには、テーブルを選択し、[Set destination] (宛先の設定) ボタンをクリックします。

    同じ所有者を複数のテーブルに割り当てるには、テーブルを選択し、[所有者の設定] ボタンをクリックします。

  6. テーブル構成をレビューします。 それらを変更するには、[前へ] ボタンをクリックします。

  7. [Create Query for Upgrade](アップグレードのクエリの作成) をクリックします。

    生成された SQL ステートメントを含むクエリ エディターが表示されます。

  8. クエリを実行します。

    クエリが完了すると、各テーブルのメタデータが Hive メタストアから Unity カタログにコピーされます。 これらのテーブルは、アップグレード ウィザードでアップグレード済みとしてマークされます。

  9. 新しい各テーブルの [アクセス許可] タブを使用して、きめ細かなアクセス制御を定義します。

  10. 新しいテーブルを使用するようにワークロードを変更します。

単一の外部テーブルを Unity Catalog にアップグレードする

Catalog Explorer を使用して、既定の Hive メタストアから Unity カタログ メタストアに外部テーブルをコピーできます。

要件

開始する前に、以下が必要になります。

  • テーブルの場所のパスへのアクセスを許可されているサービス プリンシパルまたはマネージド ID に関する情報を含むストレージ資格情報
  • 先ほど作成したストレージ資格情報とクラウド テナント上のデータへのパスを参照する外部の場所
  • CREATE EXTERNAL TABLEアップグレードするテーブルの外部の場所に対するアクセス許可。

アップグレード プロセス

外部テーブルをアップグレードするには:

  1. Catalog Explorer を開くには、サイド バーで カタログ アイコンカタログ をクリックします。

  2. アップグレードするデータベース、テーブルの順に選択します。

  3. テーブルの詳細ビューの右上隅にある [アップグレード アクション] をクリックします。

  4. 宛先カタログ、スキーマ (データベース)、所有者を選択します。

    ユーザーは、新しく作成されたテーブルに、そのカタログとスキーマに対する特権のコンテキストでアクセスできます。

    テーブルの所有者には、SELECTMODIFY を含め、テーブルに対するすべての特権があります。 所有者を選択しない場合は、ユーザーを所有者としてマネージド テーブルが作成されます。 Databricks では通常、テーブルの所有権をグループに付与することをお勧めします。 Unity Catalog でのオブジェクトの所有権の詳細については、「Unity Catalog オブジェクトの所有権を管理する」を参照してください。

  5. [アップグレード] をクリックします。

    ここで、テーブル メタデータが Unity Catalog にコピーされ、新しいテーブルが作成されます。 これで、[アクセス許可] タブを使用して、きめ細かいアクセス制御を定義できるようになりました。

  6. 新しいテーブルを使用するように既存のワークロードを変更します。

    注意

    以前のテーブルが不要になった場合は、Hive メタストアから削除できます。 外部テーブルを削除しても、クラウド テナントのデータ ファイルは変更されません。

ビューを Unity カタログにアップグレードする

ビューのすべての参照元テーブルを同じ Unity カタログ メタストアにアップグレードした後、新しいテーブルを参照する新しいビューを作成できます。

テーブルを Unity Catalog マネージド テーブルにアップグレードする

テーブルをマネージド テーブルとして Unity カタログにアップグレードするには:

  1. 既存のテーブルに対してクエリを実行して、新しい Unity カタログテーブルを作成します。 プレースホルダー値を次のように置き換えます。

    • <catalog>: 新しいテーブルの Unity カタログのカタログ。
    • <new-schema>: 新しいテーブルの Unity カタログ スキーマ。
    • <new-table>: Unity カタログ テーブルの名前。
    • <old-schema>: 使用していないテーブル (default など) のスキーマ。
    • <old-table>: 使用していないテーブルの名前。

    SQL

    CREATE TABLE <catalog>.<new-schema>.<new-table>
    AS SELECT * FROM hive_metastore.<old-schema>.<old-table>;
    

    Python

    df = spark.table("hive_metastore.<old-schema>.<old-table>")
    
    df.write.saveAsTable(
      name = "<catalog>.<new-schema>.<new-table>"
    )
    

    R

    %r
    library(SparkR)
    
    df = tableToDF("hive_metastore.<old-schema>.<old-table>")
    
    saveAsTable(
      df = df,
      tableName = "<catalog>.<new-schema>.<new-table>"
    )
    

    Scala

    val df = spark.table("hive_metastore.<old-schema>.<old-table>")
    
    df.write.saveAsTable(
      tableName = "<catalog>.<new-schema>.<new-table>"
    )
    

    一部の列または行のみを移行する場合は、SELECT ステートメントを変更します。

    注意

    このコマンドは、メタストアの設定時に指定されたストレージの場所にデータがコピーされる、マネージド テーブルを作成します。 クラウド ストレージ内のデータを移動せずに、Unity Catalog にテーブルが登録されている外部テーブルを作成する方法については、単一の外部テーブルを Unity Catalog にアップグレードする方法に関する記事を参照してください。

  2. アカウントレベルのユーザーまたはグループに新しいテーブルへのアクセスを許可します。 「Unity Catalog の特権の管理」を参照してください。

  3. テーブルを移行した後、新しいテーブルを使用するには、ユーザーが既存のクエリとワークロードを更新する必要があります。

  4. 使用していないテーブルを削除する前に、そのテーブルへのアクセスを取り消し、関連するクエリとワークロードを再実行して、依存関係をテストします。