組織でデータを管理している場合、部門間でデータを連携したいという場合があると思います。
例えば、データエンジニアリング部門が用意したデータをユーザ部門がBI開発のために利用する、といったケースです。
このような場合に、必要とするデータを発見→利用申請→利用承認→利用開始というステップを踏むことになりますが、そのデータ利用フローはDatabricksの純正機能だけで(外部のカタログツールを使わずに)実現可能です。
本記事では、Databricksの基本的なデータカタログ機能に加え、上記のデータ利用フローを実現する方法について具体的な例とともにご紹介します。
事前準備
ユーザ作成&追加
共有の確認用に以下のGoogleアカウントを作成しておきます。
- 名前:ReQ Taro
- メールアドレス:reqtaro2025@gmail.com
Databricksワークスペースに上記アカウントを追加します。
リネージの取得・参照
サンプルのスキーマ、テーブル、ビューを作成します。
-- スキーマ作成
CREATE SCHEMA IF NOT EXISTS SALES;
USE SCHEMA SALES;
-- テーブル作成
CREATE TABLE products (
id INT,
name STRING,
unit_price FLOAT
);
CREATE TABLE daily_sales (
id INT,
product_id INT,
quantity INT,
sales_at TIMESTAMP
);
-- データ挿入
INSERT INTO products VALUES
(1, 'Desktop', 800),
(2, 'Laptop', 400),
(3, 'Monitor', 100);
INSERT INTO daily_sales VALUES
(1, 2, 2, '2024-01-14 09:00:00'),
(2, 3, 3, '2024-01-15 10:00:00'),
(3, 1, 1, '2024-01-16 15:00:00'),
(4, 3, 1, '2024-02-01 11:00:00'),
(5, 1, 2, '2024-02-01 11:00:00');
-- ビュー作成
CREATE VIEW sales_summary_view AS
WITH daily_sales_view AS (
SELECT
d.id AS id,
p.id AS product_id,
p.name AS product_name,
d.quantity * p.unit_price AS sales,
d.sales_at AS sales_at
FROM daily_sales d
LEFT JOIN products p
ON d.product_id = p.id
)
SELECT
product_id,
product_name,
SUM(sales) AS total_sales
FROM daily_sales_view
GROUP BY 1, 2
ORDER BY 1, 2;
作成したテーブルとビューは以下の通りです。
- テーブル
- products:製品データを格納したテーブル
- daily_sales:売上データを格納したテーブル
- ビュー
- salesview:productsとdailysalesから作成した売上確認用ビュー
テーブルやビューを作成すると、それらの関係が自動的に取得され、「依存関係」タブから参照できるようになります。
ビジネスメタデータの登録・編集
「データ」→「データベース」から個別のテーブルやビューを確認し、テーブルや列のメタデータを登録、編集することができます。
※説明はAIに生成してもらうことも可能です。
画面上部の検索欄から、テーブルやビューのデータを検索できます。
データ共有と権限制御
通常の場合
オブジェクトへのアクセス権設定
上記で作成したサンプルデータについて、以下のようにアクセス権を設定します。
-- アカウント内の全ユーザに対し、カタログworkspace_01内のオブジェクトに対するメタデータ参照権限を与える
GRANT BROWSE ON CATALOG workspace_01 TO `account users`;
この場合、全員がworkspace_01
カタログ内のテーブルとビューの情報を参照できます。
データの検索・利用
ReQ Taroはテーブルやビューのメタデータを参照できますが、SELECT権限が与えられていないため実際のデータのプレビューや参照はできません。ReQ Taroから見たとき、sales
スキーマは画像のようにグレーアウトされています。
sales
スキーマの所有者がスキーマのメニューで「アクセス権リクエストの宛先を管理」を開き、宛先を設定することで権限のリクエストが可能になります。
上記設定後、ReQ Taroから権限をリクエストすることが可能になります。
リクエストを送信すると宛先のアカウントにメール通知されます。
メール内のリンクを開いて内容を確認し、権限の付与を行います。
権限が付与されると、ReQ Taroからもsales
スキーマのデータが参照できるようになります。
プライベートエクスチェンジを利用する場合
プライベートエクスチェンジは、マーケットプレイスで特定のコンシューマーに対してのみデータ製品を展開することができる機能です。
メニューの「Marketplace」を開き、「プロバイダーコンソール」をクリックします。
プロファイル作成
次の画面で「プライベートプロバイダーの利用規約に同意」をクリックし、マーケットプレイスプライベートエクスチェンジプロバイダーを有効化します。
利用規約に同意後、「マーケットプレイスの管理者を割り当て」をクリックします。開いたアカウントコンソールの画面で、「マーケットプレイスのアドミン」を有効化します。
マーケットプレイス管理者の割り当てが完了したら、次の画面で「プロバイダーのプロファイルを作成」をクリックします。開いた画面でプロファイルを作成し、必要事項を記入して送信します。
作成が完了すると、以下のように表示されます。
※プロファイルは複数作成可能
取引所作成
リスティング作成時に必要となる取引所を作成します。
「取引所」タブを開き、「取引所を作成」をクリックします。
適当な名前を入力し、取引所を作成します。
取引所の作成後、「メンバー」タブから共有対象アカウントを設定することができます。
リスティング作成・公開
「リスティング」タブを開き、「リスティングを作成する」をクリックします。
リスティングの基本情報やアクセス、データアセットなどを設定し、「公開」をクリックします。
今回の設定内容は以下の通りです。
- 一般
- リスティング名:リスティングの名前
- 説明:リスティングの説明
- プロバイダープロファイル:上記で作成したプロファイル
- アクセス
- 公開先:プライベート取引所(上記で作成した取引所)
- データアセット
- コンシューマーのアクセス:リストへのアクセスリクエストが必要
- 共有対象アセット:テーブル
- 属性
- カテゴリー:小売
- アクセス:無料
- 詳細
- 説明:データの説明
データの検索・利用
公開すると、同ワークスペース内および共有対象アカウントからデータ製品を検索できるようになります。
「アクセス権をリクエスト」をクリックし、必要事項を記入してリクエストを送信します。
リクエストを送信すると連絡先のアカウントにメール通知されます。
メール内のリンクを開いて内容を確認し、承認(と共有の設定)を行います。
共有は「カタログ」の歯車アイコンから「Delta Sharing」→「自分が共有」→「データを共有」で作成可能です。
共有対象のアカウントと、共有対象のアセット(スキーマやテーブル)を設定します。
承認すると、ReQ Taro側のデータ製品ページの内容が更新されます。
「即時アクセス権を取得」ボタンをクリックすると、カタログのDelta共有にデータが追加され、利用可能になります。
補足:共有方法の使い分けについて
通常の共有とプライベートエクスチェンジには以下の違いがあります。
通常 | プライベートエクスチェンジ | |
---|---|---|
共有対象 | 組織内 | グローバル |
権限付与 | 簡単 | 簡単 |
オブジェクト共有先 | カタログ | Delta共有 |
データ探索 | 〇 | △(※1) |
※1:自分で詳細情報を入力しないと、期待する形で検索に表示されない。含まれるテーブルやビューのメタデータが一切表示されない
組織内でデータを連携したい場合、通常の方法が最もシンプルかつスムーズなのでおすすめです。