カタログを作成および管理する

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

Note

Unity Catalog に対してワークスペースが自動的に有効になっている場合は、既定で "ワークスペース カタログ" が自動的に作成されます。 既定では、自分のワークスペース内 (自分のワークスペースのみ) のすべてのユーザーがアクセスできます。 「手順 1: ワークスペースが Unity Catalog で有効になっていることを確認する」を参照してください。

Note

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

必要条件

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

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

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

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

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

カタログを作成する

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

カタログ エクスプローラー

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

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

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

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

    • 標準カタログ: Unity Catalog によって管理されるデータ資産を整理するセキュリティ保護可能なオブジェクトです。 Lakehouse フェデレーションを除くすべてのユース ケースが対象です。
    • 外部カタログ: Lakehouse フェデレーションを使用して、外部データ システム内のデータベースをミラーリングする Unity Catalog 内のセキュリティ保護可能なオブジェクトです。 「Lakehouse フェデレーションのセットアップの概要」を参照してください。
  5. (省略可能ですが、強くお勧めします) マネージド ストレージの場所を指定します。 ターゲットの外部の場所に対する CREATE MANAGED STORAGE 特権が必要です。 「Unity Catalog でマネージド ストレージの場所を指定する」を参照してください。

    重要

    ワークスペースにメタストアレベル ストレージの場所がない場合は、カタログの作成時にマネージド ストレージの場所を指定する必要があります。

  6. Create をクリックしてください。

  7. (省略可能) カタログをバインドするワークスペースを指定します。

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

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

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

Sql

  1. ノートブックまたは Databricks SQL エディターで次の SQL コマンドを実行します。 角かっこ内の項目は省略可能です。 プレースホルダー値を次のように置き換えます。

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

    • <location-path>: 省略可能ですが、強くお勧めします。 このカタログ内のマネージド テーブルを、メタストアに対して構成された既定のルート保存場所とは異なる場所に保存する場合は、保存場所のパスを指定します。

      重要

      ワークスペースにメタストアレベル ストレージの場所がない場合は、カタログの作成時にマネージド ストレージの場所を指定する必要があります。

      このパスは外部の場所の構成で定義する必要があり、ユーザーにはその外部の場所の構成に対する CREATE MANAGED STORAGE 特権が必要です。 外部の場所の構成またはサブパス (つまり、'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance' または 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance/product') で定義されているパスを使用できます。 Databricks Runtime 11.3 以降が必要です。

    • <comment>: 省略可能な説明またはその他のコメントです。

    Note

    外部カタログ (Lakehouse フェデレーションに使用される、外部データ システム内のデータベースをミラーリングする 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 の権限とセキュリティ保護可能なオブジェクト」を参照してください。

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

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

(省略可能) 特定のワークスペースにカタログを割り当てる

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

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

カタログを特定のワークスペースにバインドする一般的なユース ケースには次のものがあります。

  • ユーザーが運用ワークスペース環境からのみ運用データにアクセスできるようにする。
  • ユーザーが専用ワークスペースからのみ機密データを処理できるようにする。
  • 開発とテストを可能にするため、開発者ワークスペースから運用環境データへの読み取り専用アクセスをユーザーに与えます。

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

運用環境と開発環境の分離の例を見てみます。 運用データ カタログには運用ワークスペースからのみアクセスできることを指定した場合、この指定が、ユーザーに付与される個別のどの許可よりも優先されます。

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

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

ワークスペースとカタログのバインドは、プラットフォームのすべての領域で順守されます。 たとえば、情報スキーマに対するクエリを実行すると、クエリを発行するワークスペースでアクセスできるカタログのみが表示されます。 同様に、データ系列と検索 UI でも、(バインドを使用するか既定によるかに関係なく) ワークスペースに割り当てられているカタログのみが表示されます。

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

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

必要なアクセス許可: メタストア管理者またはカタログ所有者。

Note

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

カタログ エクスプローラー

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

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

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

    メインのカタログ エクスプローラー ペインには、既定で [カタログ] 一覧が表示されます。 そこでカタログを選択することもできます。

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

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

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

  6. (省略可能) ワークスペース アクセスを読み取り専用に制限します。

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

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

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

Api

カタログをワークスペースに割り当てるには、2 つの API と 2 つの手順が必要です。 次の例では、<workspace-url> をワークスペース インスタンス名に置き換えます。 ワークスペース インスタンス名とワークスペース ID を取得する方法については、「ワークスペース オブジェクトの識別子を取得する」を参照してください。 アクセス トークンの取得の詳細については、「Azure 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. update 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 メタストアにアタッチされているすべてのワークスペースからカタログへのアクセスを許可するには、[All workspaces have access] (すべてのワークスペースにアクセス権を付与する) を選びます。

Api

workspace-bindings API を使ってカタログからワークスペースをバインド解除するには、以下を実行します。 <workspace-url> は実際のワークスペース インスタンス名に置き換えてください。 ワークスペース インスタンス名とワークスペース ID を取得する方法については、「ワークスペース オブジェクトの識別子を取得する」を参照してください。 アクセス トークンの取得の詳細については、「Azure 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. [カタログ] ウィンドウでカタログを見つけ、その名前をクリックします。

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

Sql

ノートブックまたは Databricks SQL エディターで次の SQL コマンドを実行します。 角かっこ内の項目は省略可能です。 プレースホルダー <catalog-name> を置き換えます。

詳細については、「DESCRIBE CATALOG」を参照してください。

DESCRIBE CATALOG <catalog-name>;

完全な詳細を取得するには、CATALOG EXTENDED を使用します。

カタログを削除する

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

カタログ エクスプローラー

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

  1. メタストアにリンクされているワークスペースにログインします。
  2. カタログ アイコンカタログ をクリックします。
  3. [カタログ] ウィンドウの左側で、削除するカタログをクリックします。
  4. 詳細ウィンドウで、[データベースの作成] ボタンの左側にある 3 点メニューをクリックし、[削除] を選択します。
  5. [カタログの削除] ダイアログで、[削除] をクリックします。

Sql

ノートブックまたは 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 メタストアから Unity Catalog に移行する場合、通常、Hive メタストアを参照する既存のコードへの影響を避けるために、既定のカタログとして 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

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

SELECT current_catalog();