DatabricksのカタログソリューションであるUnity Catalogでは、背後のストレージにアクセスするために用いる外部ロケーション(External location)とストレージ資格情報(Storage credential)というオブジェクトが存在します。
すごくざっくり言うと、ストレージ資格情報ではS3やADLSにアクセスするのに必要なIAMロールやマネージドIDをカプセル化し、外部ロケーションではS3やADLSのパスとストレージ資格情報をカプセル化します。これらのオブジェクトに対するアクセス制御を行うことで、どのユーザーがどのストレージのどのパスにアクセスできるのかをコントロールすることができます。
そして、最近になって マネージドストレージ(managed storage) の存在に気づきました(遅い)。マネージドストレージロケーションといった記述もあって、外部ロケーションとの関係は?となっていました。
おそらく最初にマニュアルで出現するのはこちらかと。
マネージドストレージを使用したデータの分離
注意
マニュアルでは「管理されたストレージ」といった表記もありますが、マネージドストレージに修正中です。
以前、以下のようなUC有効化の記事を書きましたが、マネージドストレージに関する検討事項が非常に重要であることに気づきました。このままで(自分的に)まずいので、まずは理解を深めてみます。
マネージドストレージとは?
Unity Catalogによって管理される(managed by Unity Catalog) ストレージです。AWSならS3、AzureならADLS、GCPならGCSです。設定する際にストレージのパスを指定することになりますので、これがマネージドストレージのロケーション(managed storage location)となります。
マニュアルはこちら。
何のために使うの?
データの分離のためです。企業においては、特定のデータは特定のバケットやパスに格納しなくてはならないと言う要件が存在する場合があります。かつてのUnity Catalogではメタストアのストレージを使うか、外部ロケーションに外部テーブルとして作成することでしかデータの分離ができませんでした。しかも、予測最適化のようなマネージドテーブル固有の機能を活用するためにはメタストアのストレージしか選択肢がなかったのです。
マネージドストレージを設定することで、メタストアのストレージとは別のストレージロケーションにマネージドテーブルを格納することができますので、マネージドテーブルの恩恵を享受しながらもデータの分離を実現することができます。
以下の表の赤枠で示しているロケーションが、マネージドストレージロケーションです。
どのように設定するの?
メタストア、カタログ、スキーマのマネージドストレージのいずれの場合においても、事前のストレージ資格情報と外部ロケーションの作成が必要です。
メタストアのマネージドストレージ
重要!
まず注意点として、Databricksでの推奨はこのメタストアのマネージドストレージを設定しないと言うことです。メタストアのマネージドストレージを設定すると、いかなるカタログ、スキーマのマネージドテーブルを作成できるようになります。使いやすいと言えばその通りなのですが、逆に上述のデータの分離が行われない(カタログ・スキーマによる論理的分離はされていますが、バケットやパスレベルの分離は行われていません)ことになります。
データの分離と使いやすさのバランスを考慮して、使いやすさを優先するのであれば以下の手順に従ってメタストアのマネージドストレージを設定してください。
なお、メタストアのマネージドストレージを設定した場合でも、カタログ、スキーマのマネージドストレージの設定は可能です。カタログ、スキーマレベルのマネージドストレージの作成を強制したい場合には、メタストアのマネージドストレージは設定しないでください。
メタストア作成時に設定するのですが、今ではデフォルトでメタストアが自動で作成されます。ですので、作成されたメタストアに設定する形になります。
アカウントコンソールにアクセスし、カタログ > メタストアに移動します。以下はAWSの例ですが、S3バケットバスを設定します。このS3バケットの作成手順に関してはこちらをご覧ください。
手順の詳細はこちらです。
カタログのマネージドストレージ
こちらにあるように、SQLでマネージドストレージを指定してカタログを作成する場合には以下を実行します。
CREATE CATALOG <catalog-name>
MANAGED LOCATION 's3://<external-location-bucket-path>/<directory>';
カタログエクスプローラからも作成できます。
スキーマ(データベース)のマネージドストレージ
こちらにあるように、SQLでマネージドストレージを指定してカタログを作成する場合には以下を実行します。
CREATE SCHEMA <catalog>.<schema-name>
MANAGED LOCATION 's3://<external-location-bucket-path>/<directory>';
カタログエクスプローラからも作成できます。
設定の確認
こちらで説明されているように、上述の手順でマネージドストレージロケーションが設定されると、そのロケーションはストレージルートとなります。ストレージルート配下にサブディレクトリが作成され、そこにデータが格納されます。これがストレージロケーションとなります。
マネージドストレージを設定して作成したカタログにアクセスし、詳細タブを開きます。すると、上述のストレージルートとストレージロケーションが表示されます。
以下は、Unity Catalogの自動有効化機能によって、自動で作成されるワークスペース固有のカタログの情報です。上のカタログtest
はこちらのストレージルート配下に作成したものです。
Unity Catalogの自動有効化とマネージドストレージの関係を理解したいと言う目的があったので、まずはマネージドストレージを理解しました。
自動有効化された場合、以下のような構成になります。
- マネージドストレージなしのメタストアが作成される。
- ワークスペース固有のカタログ(マネージドストレージ付き)が作成される。
このため、新規にカタログを作成しようとすると、以下のいずれかを選択しなくてはなりません。
- 別途外部ロケーションを作成してマネージドストレージを設定してカタログを作成する。
- ワークスペース固有のカタログのマネージドストレージを使ってカタログを作成する。
- メタストアのマネージドストレージを作成してそちらを使う。
これで、自動有効化の調査に進めます。続報お待ちください。