はじめに
Unity Catalogでカタログまたはスキーマレベルで保存するストレージ領域を選択できるカタログIsolation機能がリリースされました。どんな機能でどのように設定するのか見てみたいと思います。
何がうれしいのか?
従来はUnity CatalogのManaged Tableとして利用する場合、DeltaLakeの保存先はUnity Catalogセットアップ時に作成するメタストアのストレージのみでした。そのため複数のワークスペースでUnity Catalogを共有してもストレージは同じになってしまうため、管理や課金を分割出来ないという問題がありました。(従来は外部テーブルしか利用できなかった)
今回の機能によって、カタログやスキーマ単位でストレージロケーションを分けられるため上記のような問題が解消されます。これは管理者からするとかなり嬉しい機能なのです。
設定方法
マニュアルはこちら(AWS, Azureで利用可能です)
1. ストレージロケーションの作成
まずは保存先となるストレージを作成し、外部ロケーションとしてUnity Catalogに登録する必要があります。外部ロケーションの作成&登録方法はこちらをご覧ください。
今回AWS上で作成したもの
・ S3 bucket : db-managed-bucket2
・ IAM Role: uc-managed-catalog2
2. カタログ作成
「データエクスプローラー」画面に移動し、右上の「カタログを作成」ボタンをクリックし、新規にカタログを作成します。その際に、Managed locationというオプション欄に先ほど作成したS3Bucketのパスを登録します。
スキーマ作成時も同様の方法でストレージを選択できます。
確認
まずは詳細タブでカタログ情報を確認してみます。ご覧のとおりストレージロケーションが指定したバケットへのパスになっております。
次にスキーマやテーブルを作成してみます。
テーブル詳細をチェックしてみると、Managed Tableとして別のS3バケット上に保存されておりました。
AWSコンソールからS3バケットをチェックしてみるとちゃんとDeltaLakeができておりました。
コードベースでロケーションするには?
マニュアルにはUIベースでの指定方法のみ記載がありましたが、SQLコマンドでCatalogやスキーマ作成時に、外部ストレージを指定出来るか確認してみました。
今回は、db_catalog というカタログをmetastore上に作成し、新規スキーマを別S3バケット上に指定して作成してみます。
create schema if not exists db_catalog.isolation_test location 's3://db-managed-bucket2'
テーブルも以下のように作成します。
create table if not exists db_catalog.isolation_test.test1 AS
select
*
from
samples.nyctaxi.trips
LIMIT
1000
コードベースでもロケーション指定することが出来ました。
その他
UnityCatalogのセットアップや機能についてはこちらをご覧ください。