カタログ の作成と管理

この記事では、Unity Catalog でカタログを作成および管理する方法について説明します。 カタログには スキーマ (データベース) が含まれ、スキーマにはテーブル、ビュー、ボリューム、モデル、および関数が含まれます。

Unity Catalog に対して自動的に有効になった一部のワークスペースでは、 ワークスペース カタログ が既定で作成されました。 このカタログが存在する場合、ワークスペース内のすべてのユーザー (およびワークスペースのみ) がデフォルトによってアクセスできます。 「ステップ 1: ワークスペースで Unity Catalog が有効になっていることを確認する」を参照してください。

外部カタログ(外部データ システムのデータベースをミラーリングする Unity Catalog オブジェクト) を作成する方法については、「 外部カタログの作成」を参照してください。「外部カタログの管理と操作」も参照してください。

要件

カタログを作成するには:

  • Databricks メタストア管理者であるか、メタストアに対する CREATE CATALOG 特権を持っている必要があります。

  • カタログ作成を実行する ワークスペースにリンク された Unity Catalog メタストアが必要です。

  • ノートブックを実行してカタログを作成するために使用するクラスターでは、Unity Catalog 準拠のアクセス モードを使用する必要があります。 アクセス・モードを参照してください。

    SQLウェアハウスは、常に Unity Catalog をサポートしています。

カタログ を作成する

カタログを作成するには、カタログ エクスプローラまたは SQL コマンドを使用できます。

  1. メタストアにリンクされているワークスペースにログインします。

  2. [カタログ アイコン カタログ] をクリックします

  3. [ カタログの作成] ボタンをクリックします。

  4. 作成するカタログの種類を選択します。

    • Standard カタログ: Unity Catalog によって管理されるデータ資産を整理するセキュリティ保護可能なオブジェクト。 レイクハウスフェデレーションを除くすべてのユースケースに対応。

    • 外部 カタログ: レイクハウスフェデレーションを使用して外部データ システム内のデータベースをミラー化する Unity Catalog のセキュリティ保護可能なオブジェクト。 「レイクハウスフェデレーション設定の概要」を参照してください。

  5. (オプションですが、強くお勧めします)管理対象の保管場所を指定します。 ターゲットの外部ロケーションに対する CREATE MANAGED STORAGE 権限が必要です。 「 Unity Catalog で管理対象ストレージの場所を指定する」を参照してください。

    重要

    ワークスペースにメタストア レベルの記憶域の場所がない場合は、カタログの作成時に管理された記憶域の場所を指定する必要があります。

  6. [作成]をクリックします。

  7. (オプション)カタログがバインドされているワークスペースを指定します。

    Default では、カタログは現在のメタストアにアタッチされているすべてのワークスペースと共有されます。 カタログに特定のワークスペースに制限する必要があるデータが含まれる場合は、[ ワークスペース] タブに移動し、それらのワークスペースを追加します。

    詳細については、「 (オプション) 特定のワークスペースにカタログを割り当てる」を参照してください。

  8. カタログにアクセス許可を割り当てます。 Unity Catalog 権限とセキュリティ保護可能なオブジェクトを参照してください。

  1. ノートブックまたは Databricks SQL エディターで次の SQL コマンドを実行します。 括弧内の項目はオプションです。 プレースホルダー値を置き換えます。

    • <catalog-name>: カタログの名前。

    • <location-path>: オプションですが、強くお勧めします。 このカタログ内のマネージド テーブルを、メタストア用に構成された既定のルート ストレージとは異なる場所に格納する場合は、ストレージの場所のパスを指定します。

      重要

      ワークスペースにメタストア レベルの記憶域の場所がない場合は、カタログの作成時に管理された記憶域の場所を指定する必要があります。

      このパスは、外部ロケーション設定で定義する必要があり、外部ロケーション設定に対する CREATE MANAGED STORAGE 権限を持っている必要があります。 外部ロケーション設定またはサブパス(つまり、 's3://depts/finance' または 's3://depts/finance/product')で定義されているパスを使用できます。 Databricks Runtime 11.3 以降が必要です。

    • <comment>: オプションの説明またはその他のコメント。

    外部カタログ (レイクハウスフェデレーションに使用される、外部データ システム内のデータベースをミラーリングする Unity Catalog のセキュリティ保護可能なオブジェクト) を作成する場合は、SQL コマンドが CREATE FOREIGN CATALOG され、オプションが異なります。 「外部カタログの作成」を参照してください。

    CREATE CATALOG [ IF NOT EXISTS ] <catalog-name>
       [ MANAGED LOCATION '<location-path>' ]
       [ COMMENT <comment> ];
    

    たとえば、 exampleという名前のカタログを作成するには、次のようにします。

    CREATE CATALOG IF NOT EXISTS example;
    

    カタログへのアクセスをアカウント内の特定のワークスペースに制限する場合 (ワークスペースとカタログのバインドとも呼ばれます) は、「 カタログを 1 つ以上のワークスペースにバインドする」を参照してください。

    パラメーターの説明については、「 CREATE CATALOG」を参照してください。

  2. カタログに権限を割り当てます。 Unity Catalog 権限とセキュリティ保護可能なオブジェクトを参照してください。

カタログを作成すると、 defaultinformation_schemaの 2 つのスキーマ (データベース) が自動的に作成されます。

Databricks Terraform プロバイダーdatabricks_catalogを使用してカタログを作成することもできます。カタログに関する情報は 、databricks_catalogs を使用して取得できます。

(オプション)特定のワークスペース にカタログを割り当てる

ワークスペースを使用してユーザーデータアクセスを分離する場合は、カタログアクセスをアカウント内の特定のワークスペースに制限することができます (ワークスペースカタログバインディングとも呼ばれます)。 既定では、現在のメタストアに接続されているすべてのワークスペースとカタログを共有します。

このデフォルトは例外で、Unity Catalog に対して自動的に有効になっているワークスペースにデフォルトによって作成される ワークスペース カタログ です (「 Unity Catalog の自動有効化」を参照)。 既定では、このワークスペース カタログは、他のワークスペースにアクセス権を付与することを選択しない限り、自分のワークスペースにのみバインドされます。 このカタログのバインドを解除する場合のアクセス許可の割り当てに関する重要な情報については、「 ワークスペースからカタログのバインドを解除する」を参照してください。

ワークスペースからカタログへの読み取りおよび書き込みアクセスを許可するか (デフォルト)、読み取り専用アクセスを指定できます。 読み取り専用を指定すると、そのワークスペースからそのカタログへのすべての書き込み操作がブロックされます。

カタログを特定のワークスペースにバインドする一般的な使用例は次のとおりです。

  • ユーザーが運用ワークスペース環境からのみ運用データにアクセスできるようにします。

  • ユーザーが専用のワークスペースからの機密データのみを処理できるようにします。

  • 開発者ワークスペースから本番運用データへの読み取り専用アクセスをユーザーに付与して、開発とテストを可能にします。

ワークスペースとカタログのバインドの例

本番運用と開発の分離の例を見てみましょう。 実稼働データカタログに実稼働ワークスペースからのみアクセスできるように指定した場合、これはユーザーに発行される個々の許可よりも優先されます。

カタログとワークスペースのバインド図

この図では、 prod_catalog は 2 つの運用ワークスペースにバインドされています。 ユーザーが my_table という prod_catalog のテーブルへのアクセスを許可されているとします (GRANT SELECT ON my_table TO <user>を使用)。ユーザーが Dev ワークスペースの my_table にアクセスしようとすると、エラー メッセージが表示されます。 ユーザーは、Prod ETL ワークスペースと Prod アナリティクス ワークスペースからのみ my_table にアクセスできます。

ワークスペースとカタログのバインドは、プラットフォームのすべての領域で尊重されます。 たとえば、情報スキーマを照会すると、クエリーを発行したワークスペースでアクセス可能なカタログのみが表示されます。 同様に、データリネージと検索 UI には、ワークスペースに割り当てられているカタログのみが表示されます (バインドを使用するか、デフォルトを使用するかに関係なく)。

カタログを 1 つ以上のワークスペースにバインドする

カタログを特定のワークスペースに割り当てるには、カタログ エクスプローラまたは Unity Catalog REST APIを使用できます。

必要な権限: メタストア管理者またはカタログ所有者。

メタストア管理者は、カタログが現在のワークスペースに割り当てられているかどうかに関係なく、カタログ エクスプローラーを使用してメタストア内のすべてのカタログを表示でき、カタログ所有者はメタストアで所有するすべてのカタログを表示できます。 ワークスペースに割り当てられていないカタログはグレー表示され、子オブジェクトは表示またはクエリできません。

  1. メタストアにリンクされているワークスペースにログインします。

  2. [カタログ アイコン カタログ] をクリックします

  3. [ カタログ] ウィンドウの左側で、カタログ名をクリックします。

    [カタログ エクスプローラ] のメイン ペインは、デフォルトで [ カタログ] リストになっています。 そこでカタログを選択することもできます。

  4. [ワークスペース] タブで、[すべてのワークスペースにアクセス権がある] チェック ボックスをオフにします。

    カタログが既に 1 つ以上のワークスペースにバインドされている場合、このチェックボックスは既にオフになっています。

  5. [ ワークスペースに割り当て ] をクリックし、割り当てるワークスペースを入力または検索します。

  6. (オプション)ワークスペースへのアクセスを読み取り専用に制限します。

    [アクセス レベルの管理 ] メニューで、[ アクセスを読み取り専用に変更する] を選択します。

    この選択は、カタログを編集し、[ 読み取り/書き込みへのアクセスの変更] を選択することで、いつでも元に戻すことができます。

アクセスを取り消すには、[ ワークスペース ] タブに移動し、ワークスペースを選択して、[ 取り消し] をクリックします。

カタログをワークスペースに割り当てるには、2 つの APIs と 2 つのステップ が必要です。 次の例では、 <workspace-url> をワークスペース インスタンス名に置き換えます。 ワークスペース インスタンス名とワークスペース ID を取得する方法については、「 ワークスペース オブジェクトの識別子を取得する」を参照してください。 アクセストークンの取得については、「 Databricks 自動化の認証 - 概要」を参照してください。

  1. catalogs API を使用して、カタログの isolation modeISOLATEDに設定します。

    curl -L -X PATCH 'https://<workspace-url>/api/2.1/unity-catalog/catalogs/<my-catalog> \
    -H 'Authorization: Bearer <my-token> \
    -H 'Content-Type: application/json' \
    --data-raw '{
     "isolation_mode": "ISOLATED"
     }'
    

    既定の isolation mode は、メタストアに接続されているすべてのワークスペースに OPEN されます。

  2. bindingsの更新 API を使用して、ワークスペースをカタログに割り当てます。

    curl -L -X PATCH 'https://<workspace-url>/api/2.1/unity-catalog/bindings/catalog/<my-catalog> \
    -H 'Authorization: Bearer <my-token> \
    -H 'Content-Type: application/json' \
    --data-raw '{
      "add": [{"workspace_id": <workspace-id>, "binding_type": <binding-type>}...],
      "remove": [{"workspace_id": <workspace-id>, "binding_type": "<binding-type>}...]
    }'
    

    "add" プロパティと "remove" プロパティを使用して、ワークスペースのバインドを追加または削除します。<binding-type> は、 “BINDING_TYPE_READ_WRITE” (デフォルト)または “BINDING_TYPE_READ_ONLY”のいずれかです。

カタログのすべてのワークスペース割り当てを一覧表示するには、list bindings API を使用します。

   curl -L -X GET 'https://<workspace-url>/api/2.1/unity-catalog/bindings/catalog/<my-catalog> \
   -H 'Authorization: Bearer <my-token> \

ワークスペースからのカタログのバインド解除

カタログへのワークスペースのアクセス権を取り消すには、カタログエクスプローラまたは workspace bindings APIを使用します。

重要

ワークスペースで Unity Catalog が自動的に有効になっていて、ワークスペース カタログがある場合、ワークスペース管理者はそのカタログを所有し、 ワークスペース内のみ でその カタログ に対するすべてのアクセス許可を持ちます。そのカタログのバインドを解除したり、他のカタログにバインドしたりする場合は、ワークスペース管理者グループはワークスペースローカルグループであるため、ワークスペース管理者グループのメンバーに個々のユーザーとして、またはアカウントレベルのグループを使用して、必要なアクセス許可を手動で付与する必要があります。 アカウント グループとワークスペース ローカル グループの詳細については、「 アカウント グループとワークスペース ローカル グループの違い」を参照してください。

必要な権限: カタログ所有者。

  1. メタストアにリンクされているワークスペースにログインします。

  2. [カタログ アイコン カタログ] をクリックします

  3. [ カタログ] ウィンドウの左側で、カタログ名をクリックします。

  4. 「ワークスペース」タブで、 ワークスペース を選択し、「 取り消し」をクリックします。

Unity Catalog メタストアに接続されているすべてのワークスペースからカタログへのアクセス権を付与するには、 [ すべてのワークスペースにアクセス権を持つ] を選択します。

workspace-bindings API を使用してカタログからワークスペースのバインドを解除するには、次のコマンドを実行します。<workspace-url> をワークスペース インスタンス名に置き換えます。ワークスペース インスタンス名とワークスペース ID を取得する方法については、「 ワークスペース オブジェクトの識別子を取得する」を参照してください。 アクセストークンの取得については、「 Databricks 自動化の認証 - 概要」を参照してください。

curl -L -X PATCH 'https://<workspace-url>/api/2.1/unity-catalog/workspace-bindings/catalogs/<my-catalog> \
-H 'Authorization: Bearer <my-token> \
-H 'Content-Type: application/json' \
--data-raw '{
  "unassign_workspaces": [<workspace-id>, <workspace-id2>]
}'

カタログにスキーマを追加する

スキーマ (データベース) をカタログに追加する方法を学習する。 スキーマ (データベース) の作成と管理を参照してください。

カタログの詳細を見る

カタログに関する情報を表示するには、カタログ エクスプローラまたは SQL コマンドを使用します。

  1. メタストアにリンクされているワークスペースにログインします。

  2. [カタログ アイコン カタログ] をクリックします

  3. [カタログ] ウィンドウで、カタログを見つけてその名前をクリックします。

    一部の詳細はページの上部に記載されています。 その他は、[ スキーマ]、[ 詳細]、[ アクセス許可]、および [ワークスペース] タブで表示できます。

ノートブックまたは Databricks SQL エディターで次の SQL コマンドを実行します。 括弧内の項目はオプションです。 プレースホルダー <catalog-name>を置き換えます。

詳細については、「 カタログの説明」を参照してください。

DESCRIBE CATALOG <catalog-name>;

CATALOG EXTENDED を使用して完全な詳細を取得します。

カタログ を削除する

カタログを削除 (または削除) するには、カタログ エクスプローラまたは SQL コマンドを使用できます。 カタログを削除するには、その所有者である必要があります。

カタログを削除する前に、 information_schema を除くカタログ内のすべてのスキーマを削除する必要があります。 これには、自動作成された default スキーマが含まれます。

  1. メタストアにリンクされているワークスペースにログインします。

  2. [カタログ アイコン カタログ] をクリックします

  3. [ カタログ] ウィンドウの左側で、削除するカタログをクリックします。

  4. 詳細ペインで、[ データベースの作成 ] ボタンの左側にある 3 つのドットのメニューをクリックし、[ 削除] を選択します。

  5. [ カタログの削除 ] ダイアログで、[ 削除] をクリックします。

ノートブックまたは Databricks SQL エディターで次の SQL コマンドを実行します。 括弧内の項目はオプションです。 プレースホルダー <catalog-name>を置き換えます。

パラメーターの説明については、「 DROP CATALOG」を参照してください。

CASCADE オプションを指定せずに DROP CATALOG を使用する場合は、カタログを削除する前に、 information_schema を除くカタログ内のすべてのスキーマを削除する必要があります。これには、自動作成された default スキーマが含まれます。

DROP CATALOG [ IF EXISTS ] <catalog-name> [ RESTRICT | CASCADE ]

たとえば、 vaccine という名前のカタログとそのスキーマを削除するには、次のようにします。

DROP CATALOG vaccine CASCADE

デフォルト カタログを管理する

既定のカタログは、Unity Catalog に対して有効になっているワークスペースごとに構成されます。 デフォルト カタログを使用すると、カタログを指定せずにデータ操作を実行できます。 データ操作を実行するときに最上位のカタログ名を省略すると、デフォルト カタログが想定されます。

ワークスペース管理者は、管理者設定UIを使用してデフォルトのカタログを表示または切り替えることができます。 また、Spark 構成を使用してクラスターのデフォルト カタログを設定することもできます。

カタログを指定しないコマンド ( GRANT CREATE TABLE ON SCHEMA myschema TO mygroupなど) は、次の順序でカタログに対して評価されます。

  1. セッションのカタログは、 USE CATALOG ステートメントまたは JDBC 設定を使用して設定されていますか?

  2. Spark 構成 spark.databricks.sql.initial.catalog.namespace クラスターに設定されていますか?

  3. クラスターのワークスペース デフォルト カタログ セットはありますか?

Unity Catalog が有効な場合の既定のカタログ構成

ワークスペース用に最初に構成された既定のカタログは、ワークスペースが Unity Catalog に対してどのように有効になったかによって異なります。

  • Unity Catalog に対して自動的に有効になった一部のワークスペースでは、ワークスペース カタログが既定の カタログ として設定されていました。 「 Unity Catalog の自動有効化」を参照してください。

  • 他のすべてのワークスペースでは、 hive_metastore カタログがデフォルト カタログとして設定されました。

既存のワークスペース内で Hive metastore から Unity Catalog に移行する場合は、通常、 Hive metastoreを参照する既存のコードに影響を与えないように、既定のカタログとして hive_metastore を使用するのが理にかなっています。

デフォルト カタログを変更する

ワークスペース管理者は、ワークスペースの既定のカタログを変更できます。 クラスターを作成または編集するアクセス許可を持つユーザーは、クラスターに別のデフォルト カタログを設定できます。

警告

デフォルトのカタログを変更すると、それに依存する既存のデータ操作が中断される可能性があります。

ワークスペースに別のデフォルト・カタログを構成するには、次のようにします。

  1. ワークスペース管理者としてワークスペースにログインします。

  2. ワークスペースの上部バーにあるユーザー名をクリックし、ドロップダウンから「設定」を選択します。

  3. 詳細設定 」タブをクリックします。

  4. ワークスペース行 のデフォルト カタログで、カタログ名を入力し、「 保存」をクリックします。

変更を有効にするために、SQLウェアハウスとクラスターを再起動します。 新規および再起動されたすべての SQLウェアハウスおよびクラスターは、このカタログをワークスペースのデフォルトとして使用します。

また、クラスターで次の Spark 構成を設定することで、特定のクラスターのデフォルト カタログをオーバーライドすることもできます。 このアプローチは、SQLウェアハウスでは使用できません。

spark.databricks.sql.initial.catalog.name

手順については、「 Spark の構成」を参照してください。

現在のデフォルトカタログを表示する

ワークスペースの現在のデフォルト カタログを取得するには、ノートブックまたは SQL エディターのクエリーで SQL ステートメントを使用できます。 ワークスペース管理者は、管理者設定UIを使用してデフォルトのカタログを取得できます。

  1. ワークスペース管理者としてワークスペースにログインします。

  2. ワークスペースの上部バーにあるユーザー名をクリックし、ドロップダウンから「設定」を選択します。

  3. 詳細設定 」タブをクリックします。

  4. ワークスペース行 のデフォルト カタログで、カタログ名を表示します。

SQLウェアハウスまたは Unity Catalog 準拠のクラスターで実行されているノートブックまたは SQL エディターのクエリーで、次のコマンドを実行します。 ワークスペースのデフォルト・カタログは、セッションに USE CATALOG ・ステートメントまたはJDBC設定が設定されていないか、およびクラスターに spark.databricks.sql.initial.catalog.namespace 構成が設定されていないかぎり、返されます。

SELECT current_catalog();