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

[Upgrade tables and views to Unity Catalog \| Databricks on AWS](https://docs.databricks.com/data-governance/unity-catalog/migrate.html) [2022/3/16時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

:::note info
**プレビュー**
Unity Catalogは[パブリックプレビュー](https://docs.databricks.com/release-notes/release-types.html)です。Unity Catalog向けのアカウントコンソールUIは[プライベートプレビュー](https://docs.databricks.com/release-notes/release-types.html)です。プレビューに参加するには、Databricks担当者にお問合せください。
:::

Unity Catalogのアクセスコントロールと監査のメカニズムを活用し、複数のワークスペースでデータを共有するために、テーブルとビューをUnity Catalogにアップグレードすることができます。

# 要件

- Databricksのアカウント管理者である必要があります。
- Databricksアカウントでは[プレミアムプラン](https://databricks.com/jp/product/aws-pricing)である必要があります。
- 必要であれば、[メタストアを作成](https://docs.databricks.com/data-governance/unity-catalog/create-metastore.html)します。
- 必要であれば、メタストアに[カタログとスキーマを作成](https://docs.databricks.com/data-governance/unity-catalog/create-catalogs-and-schemas.html)します。カタログとスキーマに新規テーブルとビューが格納されます。

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

1. 必要であればメタストアを作成します。[メタストアの作成](https://docs.databricks.com/data-governance/unity-catalog/create-metastore.html)をご覧ください。
1. テーブルを保持しているワークスペースにメタストアを割り当てます。
1. 既存のテーブルにクエリーを行うことで新規のUnity Catalogを作成します。プレースホルダーの値を置き換えます。
    - `<catalog>`: 新規テーブルに対するUnity Catalogのカタログです。
    - `<new_schema>`: 新規テーブルに対するUnity Catalogのスキーマです。 
    - `<new_table>`: Unity Catalogテーブルの名前です。
    - `<old_schema>`: `default`のような元のテーブルのスキーマです。
    - `<old_table>`: 元のテーブルの名前です。
    ```sql:SQL
    CREATE TABLE <catalog>.<new_schema>.<new_table>
    AS SELECT * FROM hive_metastore.<old_schema>.<old_table>;
    ```
    特定のカラム、行のみを移行する場合には、`SELECT`文を修正します。

    > **注意**
このコマンドは、メタストアをセットアップした際に指定したストレージ格納場所にデータがコピーされる[マネージドテーブル](https://docs.databricks.com/data-governance/unity-catalog/create-tables.html#create-a-managed-table)を作成します。データをクラウドストレージに移動することなしにテーブルをUnity Catalogに登録する[外部テーブル](https://docs.databricks.com/data-governance/unity-catalog/create-tables.html#create-an-external-table)を作成するには、[外部テーブルをUnity Catalogにアップグレードする](#外部テーブルをunity-catalogにアップグレードする)をご覧ください。

1. 新規テーブルにアクセスできるアカウントレベルのユーザー、グループにアクセスを許可します。[Manage access to data \| Databricks on AWS](https://docs.databricks.com/data-governance/unity-catalog/manage-access-to-data.html)をご覧ください。
1. テーブルを移行した後は、ユーザーは既存のクエリーとワークロードが新しいテーブルを使用するように更新する必要があります。
1. 本のテーブルを削除する前にアクセス権を剥奪し、関連するクエリー、ワークロードを再度実行することで依存関係をテストします。

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

このサンプルでは、クラウドストレージにある背後のデータをコピーすることなしに、Hiveメタストアの[外部テーブル](https://docs.databricks.com/data-governance/unity-catalog/create-tables.html#create-an-external-table)をUnity Catalogにアップグレードする方法を説明します。

1. 元のテーブルの`CREATE TABLE`文と`LOCATION`を取得します。プレースホルダーの値を置き換えます。

    - `<old_schema>`: 元のテーブルのスキーマ
    - `<old_table>`: 元のテーブル名

    ```sql:SQL
    SHOW CREATE TABLE <old_catalog>.<old_schema>.<old_table>;
    ```

    この手順の後半で外部格納場所(external location)を作成するために`LOCATION`を使用し、Unity Cataloに新規テーブルを作成するために`CREATE TABLE`文を使用します。
1. 元のテーブルのデータ格納場所からUnity Catalogが読み取りを行い、新規テーブルのためにその場所に書き込みを継続できるように認証を行うIAMロールを含む[ストレージクレディンシャル](https://docs.databricks.com/data-governance/unity-catalog/manage-external-locations-and-credentials.html#create-a-storage-credential)を作成します。
1. 作成したストレージクレディンシャルと、クラウドテナント上のデータへのパスを参照する[外部格納場所](https://docs.databricks.com/data-governance/unity-catalog/manage-external-locations-and-credentials.html#create-an-external-location)を作成します。
1. 元のテーブルの`CREATE`文をノートブックかDatabricks SQLのエディタに貼り付けます。
    - 元のスキーマ、テーブル名を新たなカタログ、スキーマ、テーブル名に置き換えます。
    - 元のテーブルと同じデータフォーマットを`USING`句に追加します。
    - 元のテーブルに対するクラウドストレージパスを`LOCATION`句に追加します。

    ```sql:SQL
    CREATE TABLE <new_catalog>.<new_schema>.<new_table>
    (<column definitions from old table>)
    USING <format_from_old_table>
    LOCATION 's3://<bucket_path>';
    ```

    コマンドを実行します。テーブルはUnity Catalogに登録されますが、データファイルは移動されません。全く同じデータをUnity Catalogと元のテーブルで利用することができます。

1. 新しいテーブルを使用するようにワークロードを変更し、元のテーブルを削除します。
    外部テーブルの削除は、クラウドテナント上のデータファイルを変更しないので、ワークロードをアップロードした際に元のテーブルを削除しても安全です。

# ビューはUnity Catalogにアップグレードする

ビューに参照される全てのテーブルを同じUnity Catalogメタストアにアップグレードした後は、新たなテーブルを参照する[新たなビューを作成](https://docs.databricks.com/data-governance/unity-catalog/create-views.html)することができます。

:::note info
**注意**
お使いのビューが他のビューを参照している場合には、先にそれらのビューをアップグレードしてください。
:::

ビューをアップグレードした後は、ビューに対する[アクセスをアカウントレベルのユーザー、グループに許可](https://docs.databricks.com/data-governance/unity-catalog/manage-access-to-data.html)してください。

元のビューを削除する前にアクセス権を剥奪し、関連するクエリー、ワークロードを再度実行することで依存関係をテストします。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)