Delta Lake および Apache Iceberg 向けの Unity Catalog マネージドテーブル
Unity Catalog マネージドテーブルは、DatabricksにおけるDelta LakeおよびApache Icebergのデフォルトかつ推奨されるテーブルタイプです。Unity Catalog は、読み取り、書き込み、ストレージ、最適化に関するすべての責任を管理します。外部Delta LakeテーブルをUnity Catalog マネージドテーブルに変換するを参照してください。
マネージドテーブルのデータファイルは、それらを含むスキーマまたはカタログに格納されます。 「Unity Catalog で管理されたストレージの場所を指定する」を参照してください。
Databricksは、 外部 および フォーリンテーブルと比較して以下の利点を活かすためにマネージドテーブルの利用を推奨しています:
- ストレージとコンピュートのコストを削減します。
- すべてのクライアントタイプでクエリパフォーマンスが高速になります。
- 自動テーブルメンテナンスと最適化。
- オープンAPIsを介した外部クライアントへの安全なアクセス。
- Delta LakeおよびApache Icebergフォーマットのサポート。
- 最新のプラットフォーム機能への自動アップグレード。
マネージドテーブルは、 Databricksでサポートされているすべての言語と製品で操作できます。 マネージドテーブルを作成、更新、削除、またはクエリするには、特定の権限が必要です。 Unity Catalog での特権の管理を参照してください。
このページでは、Unity Catalog マネージドテーブルについてのみ説明します。レガシーHive metastoreのマネージドテーブルについては、レガシーHive metastoreのデータベースオブジェクトを参照してください。
Unity Catalogマネージドテーブルの利点
Unity Catalog マネージドテーブルは、ストレージコストとクエリー速度を最適化し、Delta LakeおよびApache Icebergのサードパーティツールとの相互運用を可能にします。データマネジメントとパフォーマンスを簡素化するために、これらのマネージドテーブルは、ファイルサイズの圧縮やインテリジェントな統計情報収集などのAIを活用したテクノロジーを使用しています。
マネージドテーブルは、Delta LakeおよびApache Icebergクライアントからのアクセスを可能にすることで相互運用性をサポートします。外部 システムを用いたDatabricksデータのアクセスを参照してください。
以下の機能はUnity Catalog マネージドテーブルに固有のものであり、外部テーブルやフォーリンテーブルでは利用できません。
機能 | 利点 | 構成 |
|---|---|---|
テーブル間での複数ステートメントトランザクションの利用を可能にし、Unity Catalog から直接メタデータを提供することでクエリ計画を高速化し、強制可能なスキーマおよび制約の変更、および外部エンジンからの安全な書き込みを実現します。 | デフォルトで無効になっています。 有効にするには、 | |
AIを使用してデータレイアウトとコンピュートを自動的に最適化し、手動でのメンテナンス操作は不要です。Databricksは、ストレージとコンピュートのコストを削減するために、すべてのマネージドテーブルで予測的最適化を有効にすることを推奨しています。 自動実行:
| 2024年11月11日以降に作成されたすべての新規アカウントでデフォルトで有効化されています。当座預定に対しては、Databricksが徐々にデフォルトで予測最適化を可能にしています。「 予測的最適化が有効かどうかの検証」を参照してください。 設定については、予測的最適化を有効にするを参照してください。 | |
1つまたは複数のテーブル間で複数のSQLステートメントを1つのアトミックコミットとして実行でき、ACID保証を備えています。すべての変更は同時に成功するか、同時にロールバックされます。ミッションクリティカルなウェアハウス ワークロードで、ストアド プロシージャやSQL スクリプティングに使用します。 管理対象の Delta Lake テーブルに書き込むトランザクションは、パブリック プレビュー段階です。 マネージド Apache Iceberg テーブルへの書き込みトランザクションは、プライベート プレビューの対象です。 | デフォルトで無効になっています。 非対話型トランザクションの場合は | |
予測最適化を持つテーブルでは、リキッドクラスタリングが賢くクラスタリングキーを選択し、クエリパターンの変化に応じて自動的に更新してパフォーマンス向上とコスト削減を実現します。 | デフォルトで無効になっています。 設定については「 Enable リキッドクラスタリング」をご覧ください。 | |
メタデータのキャッシング | トランザクションメタデータのインメモリキャッシュにより、クラウド上に保存されているトランザクションログへのリクエストが最小限に抑えられ、クエリのパフォーマンスが向上します。 | デフォルトで有効になっています。設定変更不可。 |
ベー タ 版で、Databricks Runtime 18.2以上が必要です。 | デフォルトで無効になっています。
| |
マネージドテーブルをDROPすると、Databricks は回復期間 (デフォルトで 7 日間) が経過した後にクラウドストレージ内のデータファイルを削除し、ストレージコストを削減します。外部テーブルの場合、ストレージバケットからファイルを削除する必要があります。 | デフォルトで有効になっています。リカバリ期間はカタログまたはスキーマ レベルで設定できます。マネージドテーブルの削除を参照してください。 |
外部システムを使ってDatabricksのデータにアクセスする
マネージドテーブルは、Delta LakeとApache Icebergのクライアントからのアクセスを許可することで、相互運用性をサポートしています。
オープンAPIsとクレデンシャルベンディングにより、Unity Catalogは、Trino、DuckDB、Apache Spark、Daft、DremioのようなIceberg RESTカタログ統合エンジンなどの外部エンジンがマネージドテーブルにアクセスすることを可能にします。オープンAPIsをサポートしていない外部クライアントの場合は、任意のDelta LakeまたはApache Icebergクライアントを使用してマネージドテーブルを読み取るために、互換 Modeを使用できます。OpenSharing は、オープンソースプロトコルであり、外部パートナーやプラットフォームとのセキュアなガバナンスされたデータ共有を可能にします。
サポートされている外部エンジンの一覧については、 「統合」セクションを参照してください。一覧に含まれていない場合は、お使いのエンジンのドキュメントをご確認ください。
以下のオープンAPIにより、外部システムがUnity Catalogマネージドテーブルにアクセスできるようになります:
- Unity REST API は、Delta LakeクライアントがマネージドDelta Lakeテーブルへの読み取り、書き込み、作成アクセス権を持っています。
- Iceberg REST Catalog (IRC)は、Apache Iceberg クライアントに対し、マネージド Apache Iceberg テーブルへの読み取り、書き込み、および作成アクセスを提供し、Apache Iceberg 読み取りが有効化された (UniForm) Delta Lake テーブルへの読み取り専用アクセスを提供します。
どちらのAPIs資格情報販売をサポートしており、これにより、要求元のDatabricksプリンシパルの権限を継承する一時的なスコープ付き資格情報が提供されるため、ガバナンスとセキュリティ制御が維持されます。
OpenSharing は、外部パートナーやプラットフォームに対して安全かつ管理されたデータアクセスを可能にするオープンソースプロトコルです。OpenSharing を使用して、パートナーに一時的な読み取りアクセス権のみを付与できます。
マネージドテーブルへのすべての読み取りと書き込みには、テーブル名、およびカタログ名とスキーマ名が存在する場合はそれらを使用する必要があります。たとえば、catalog_name.schema_name.table_name。Unity Catalogマネージドテーブルへのパスベースのアクセスは、Unity Catalogのアクセス制御をバイパスするためサポートされていません(Compatibility Modeを除く)。このため、Databricks RuntimeまたはOSSクライアントのバージョンによっては、データの破損や損失につながる可能性があります。
マネージドテーブルを作成する
マネージドテーブルを作成するには、次のものが必要です。
USE SCHEMAテーブルの親スキーマ上。USE CATALOGテーブルの親カタログ。CREATE TABLEテーブルの親スキーマ上。
次の構文を使用して、空のマネージドテーブルを作成します。プレースホルダーの値を置き換えてください:
<catalog-name>:テーブルを格納するカタログの名前。<schema-name>: テーブルを含むスキーマの名前。<table-name>:テーブルの名前。<column-specification>: 各列の名前とデータ型。
- SQL
- Python
-- Create a managed Delta table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
<column-specification>
);
-- Create a managed Iceberg table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
<column-specification>
)
USING iceberg;
マネージド Delta Lake テーブルを saveAsTable() を使用して作成します:
from pyspark.sql.types import StructType, StructField, StringType
schema = StructType([StructField("<column-name>", StringType())])
spark.createDataFrame([], schema).write \
.saveAsTable("<catalog-name>.<schema-name>.<table-name>")
または、生成された列やテーブルプロパティなどのDelta固有のオプションには、DeltaTableBuilder APIを使用します。
from delta.tables import DeltaTable
DeltaTable.create(spark) \
.tableName("<catalog-name>.<schema-name>.<table-name>") \
.addColumn("<column-name>", "<data-type>") \
.property("<key>", "<value>") \
.execute()
マネージド Apache Iceberg テーブルを作成する:
from pyspark.sql.types import StructType, StructField, StringType
schema = StructType([StructField("<column-name>", StringType())])
spark.createDataFrame([], schema).write \
.format("iceberg") \
.saveAsTable("<catalog-name>.<schema-name>.<table-name>")
読み書きのパフォーマンスを維持するために、Databricksは定期的に管理されたApache Icebergテーブルメタデータの最適化操作を実行します。このタスクはサーバーレスコンピュートで行われ、Apache Icebergテーブルに対して MODIFY 権限を持っています。この操作はテーブルのメタデータにのみ書き込み、コンピュートはジョブの間のみテーブルの権限を維持します。
Apache Iceberg テーブルを作成するには、USING icebergを明示的に指定します。そうでない場合は、Databricks はデフォルトで Delta Lake テーブルを作成します。
マネージドテーブルは、クエリ結果から作成することも、 DataFrame 書き込み操作から作成することもできます。 次の記事では、 Databricksでマネージドテーブルを作成するために使用できる多くのパターンの一部を示しています。
既存のマネージドテーブルのコピーを作成するには、クローンを使用します。マネージド Delta Lake テーブルでは、ディープクローンとシャロークローンがサポートされています。マネージド Apache Iceberg テーブルは、ディープクローンのみをサポートします。Databricks でのテーブルのクローン作成とマネージド Iceberg テーブルのクローン作成をご覧ください。
マネージドテーブルをドロップする
マネージドテーブルを削除するには、次のものが必要です。
MANAGEテーブル上に表示されるか、テーブルの所有者である必要があります。USE SCHEMAテーブルの親スキーマ上。USE CATALOGテーブルの親カタログ。
マネージドテーブルを削除するには、次のコマンドを実行します。
- SQL
- Python
DROP TABLE IF EXISTS catalog_name.schema_name.table_name;
spark.sql("DROP TABLE IF EXISTS catalog_name.schema_name.table_name")
または、Databricks Runtime 18.2以降では、spark.catalog.dropTable()を使用します:
spark.catalog.dropTable("catalog_name.schema_name.table_name", ifExists=True)
Unity Catalogは、誤って削除されたマネージドテーブルを復元するために、UNDROP TABLEコマンドをサポートしています。デフォルトでは、テーブルはドロップ後7日間復元可能です。リカバリ期間が終了した後、Databricks はお使いのクラウドテナントから基になるデータファイルを48時間以内に削除します。
復旧期間を構成する
パブリックプレビュー
構成可能な復旧期間は、パブリックプレビューです。
カタログまたはスキーマレベルで、削除されたマネージドテーブルの復元可能期間を構成できます。回復期間が両方のレベルで設定されている場合、そのスキーマ内のテーブルではスキーマレベルの設定が優先されます。
回復期間を設定するには、カタログまたはスキーマに対する MANAGE 権限または所有権が必要です。この設定は、構成後にドロップされたテーブルにのみ適用されます。既に削除されたテーブルには影響しません。
復旧期間は、0時間(復旧を無効にするため)、または7~30日の間で設定できます。より長いリカバリ期間(最大30日間)は、重要な本番運用データの偶発的な削除に対して、保護を強化します。復旧期間を短縮するか、または0に設定すると、削除されたデータがより迅速に削除されます。これは、ETLパイプラインの一部として頻繁にテーブルを作成および削除するワークロードにおいて、コスト削減に役立ちます。復旧期間を0に設定すると、削除されたテーブルはUNDROPで復元することはできません。データファイルは、テーブルが削除されてから48時間以内にクラウドストレージから削除されます。
復旧期間を指定するには、RETAIN DROPPED TO 句とともに ALTER CATALOG または ALTER SCHEMA を使用します。
- SQL
- Python
-- Set a 30-day recovery period on a catalog
ALTER CATALOG my_catalog RETAIN DROPPED TO 30 DAYS;
-- Set a 7-day recovery period on a schema (overrides the catalog setting)
ALTER SCHEMA my_catalog.my_schema RETAIN DROPPED TO 7 DAYS;
spark.sql("ALTER CATALOG my_catalog RETAIN DROPPED TO 30 DAYS")
spark.sql("ALTER SCHEMA my_catalog.my_schema RETAIN DROPPED TO 7 DAYS")
RETAIN DROPPED FOR句を使用してカタログまたはスキーマを作成する際に、リカバリ期間を設定することもできます。
- SQL
- Python
CREATE CATALOG my_catalog RETAIN DROPPED FOR 30 DAYS;
CREATE SCHEMA my_catalog.my_schema RETAIN DROPPED FOR 7 DAYS;
spark.sql("CREATE CATALOG my_catalog RETAIN DROPPED FOR 30 DAYS")
spark.sql("CREATE SCHEMA my_catalog.my_schema RETAIN DROPPED FOR 7 DAYS")
現在の復旧期間を確認するには、DESCRIBE EXTENDEDを実行します。出力にはRecovery Period Hours行が含まれます。
- SQL
- Python
DESCRIBE CATALOG EXTENDED my_catalog;
DESCRIBE SCHEMA EXTENDED my_catalog.my_schema;
spark.sql("DESCRIBE CATALOG EXTENDED my_catalog").show()
spark.sql("DESCRIBE SCHEMA EXTENDED my_catalog.my_schema").show()