Azure Databricksでは、3 つのプライマリ テーブルの種類 (マネージド、外部、および外部) と 2 つのオープン ストレージ形式 (Delta Lake と Apache Iceberg) がサポートされています。 適切な組み合わせを選択すると、データの格納方法、管理方法、最適化方法が決まります。
Azure Databricks テーブルはスキーマ内にあり、データの行が含まれています。 Azure Databricks で作成される既定のテーブルの種類は、Unity カタログのマネージド テーブルです。
ストレージ形式
ストレージ形式は、オブジェクト ストレージでのデータの物理的な構造化と追跡方法を定義します。
Azure Databricks では、次の 2 つのプライマリオープン テーブル ストレージ形式がサポートされています。
- Delta Lake は、Azure Databricks のマネージド テーブルと外部テーブルの既定のストレージ形式です。 Delta は外部テーブルでもサポートされています。
- Apache Iceberg は、Azure Databricksのマネージド テーブルと外部テーブルでサポートされています。 この形式は、Iceberg エコシステムと統合する場合に便利です。
どちらの形式でも、メタデータを追跡し、アトミック性、整合性、分離性、持続性 (ACID) コンプライアンス、時間移動、およびその他の機能をサポートするトランザクション ストレージ レイヤーが追加されます。
テーブルの種類
Azure Databricks のテーブルの種類は、データの所有方法とアクセス方法を定義します。
Azure Databricksでは、3 つのプライマリ テーブルの種類がサポートされています。 テーブルの種類は、次の表に示すように、基になるデータ ファイルを所有および管理するカタログによって決まります。
| テーブルの種類 | カタログの管理 | 読み取り/書き込みのサポート | パフォーマンスの最適化 | ストレージ コストの最適化 |
|---|---|---|---|---|
| 管理 | Unity カタログ | イエス | イエス | イエス |
| 一時 | なし (セッションスコープのマネージド テーブル) | イエス | イエス | イエス |
| エクスターナル | なし (ファイルのみ) | イエス | 手動のみ | 手動のみ |
| 外部由来 | 外部システムまたはカタログ サービス | 読み取り専用 | いいえ | いいえ |
ユース ケースに適したテーブルの種類を選択する方法については、「テーブルの 種類を選択する」を参照してください。
マネージド テーブル
マネージド テーブルの場合、Unity Catalog はデータ ファイルとテーブル メタデータの両方を管理します。 データ ファイルは、クラウド ストレージ内の Unity カタログのマネージド ストレージの場所に格納されます。 Azure Databricks でテーブルを作成する場合、Unity カタログのマネージド テーブルが既定です。
Databricks では、新しいテーブルを作成するたびにマネージド テーブルを使用することをお勧めします。 マネージド テーブルでは、パフォーマンスの向上が自動的に実装され、ストレージとコンピューティングのコストが削減され、Trino などの外部システムへのアクセスが可能になります。 「管理テーブル」を参照してください。
次の例は、5 人の従業員に関するデータを含む prod.people_ops_employees という名前のマネージド テーブルを示しています。
外部テーブル
外部テーブル ( アンマネージド テーブルとも呼ばれます) は、クラウド オブジェクト ストレージなどの外部ストレージ システムに格納されている参照データです。 Azure Databricksはテーブル メタデータを登録しますが、基になるデータ ファイルは管理しません。 Unity カタログでは、Delta Lake を含む複数の形式の外部テーブルがサポートされています。これにより、外部システムで読み取ることができます。 外部テーブルを参照してください。
外部テーブル
外部テーブルは、Lakehouse フェデレーションを通じて Azure Databricks に接続された外部システムに格納されているデータを表します。 外部テーブルは、Azure Databricks では読み取り専用です。 外部テーブルを参照してください。
一時テーブル
一時テーブルは、Azure Databricks セッションの期間中にデータを格納するセッション スコープのテーブルです。 これらは、カタログに永続的なテーブルを作成せずに中間結果を具体化する場合に役立ちます。 セッションが終了すると、Azure Databricks によって一時テーブルが自動的に削除されます。また、一時テーブルを作成するためにカタログ権限やスキーマ特権は必要ありません。 Databricks SQL と Databricks ランタイムの一時テーブルを参照してください。
テーブルの種類を選択する
ほとんどの新しい テーブルにはマネージド テーブル を使用します。 Azure Databricksは、最適化、ストレージ ライフサイクル管理、外部アクセスを自動化します。
外部テーブルは次の場合に使用します。
- 既存のデータを移動せずにクラウド ストレージに登録する必要があります。
- Azure Databricks以外のクライアントからのパスベースの直接アクセスが必要です。
- CSV や JSON など、マネージド テーブルではサポートされていないファイル形式を使用しています。
- テーブルを削除すると、基になるデータ ファイルは削除されません。
外部 テーブル は、Hive メタストアや AWS Glue カタログなど、Lakehouse Federation 経由で接続されている外部システム内のデータへの読み取り専用アクセスが必要な場合に使用します。
ストレージ形式の場合、Delta Lake が既定であり、ほとんどのワークロードに推奨されます。 Iceberg 形式を必要とする外部システムと統合する場合は、Apache Iceberg を使用します。
Unity カタログのテーブル
Unity カタログでは、次の図に示すように、テーブルは 3 レベル名前空間 (catalog.schema.table) の 3 番目のレベルに存在します。
基本的なテーブルのアクセス許可
ほとんどのテーブル操作には、テーブルを含むカタログとスキーマに対する USE CATALOG と USE SCHEMA のアクセス許可が必要です。
次の表は、Unity カタログの一般的なテーブル操作に必要な追加のアクセス許可をまとめたものです。
| Operation | Permissions |
|---|---|
| テーブルの作成 | 包含元のスキーマに対する CREATE TABLE |
| テーブルのクエリを実行する | テーブルの SELECT |
| テーブルにデータを更新、削除、マージ、または挿入する |
SELECT および MODIFY はテーブルの上にあります。 あるいは、 INSERT、 UPDATE、 DELETE 権限(ベータ版)でより細かい書き込みアクセスを付与する方法もあります。
きめ細かな DML 権限を参照してください。 |
| テーブルを削除する | テーブルの MANAGE |
| テーブルを置き換える | テーブルの MANAGE、包含元のスキーマに対する CREATE TABLE |
これらの操作の SQL 構文リファレンスについては、次を参照してください。
Unity カタログのアクセス許可の詳細については、「 Unity カタログでの権限の管理」を参照してください。