外部テーブルに関する作業
Unity Catalog は、Unity Catalog を経由するすべてのクエリの外部データに対するデータ アクセス許可を制御しますが、データのライフサイクル、最適化、保存場所、またはレイアウトは管理しません。
外部テーブルは、クラウド・テナントのクラウド・オブジェクト・ストレージ内のディレクトリにデータを格納します。外部テーブルを定義するときは、格納場所を指定する必要があります。外部テーブルを削除しても、データファイルは削除されません。
外部テーブルを作成するときは、データファイルの既存のディレクトリをテーブルとして登録するか、テーブルをバックアップするデータファイルを格納する新しいディレクトリを作成するためのパスを指定できます。
Databricks では、次のユース ケースで外部テーブルを使用することをお勧めします。
- 既存のデータに基づくテーブルのうち、マネージドテーブルと互換性のないテーブル Unity Catalog 登録する必要があります。
- また、他の外部アクセス パターンをサポートしていない Databricks 以外のクライアントからデータに直接アクセスする必要もあります。「外部システムを使用した Databricks データへのアクセス」を参照してください。
Unity Catalog の特権は、ユーザーが外部システムからデータ ファイルにアクセスする場合には適用されません。
この記事では、Unity Catalog の外部テーブルに焦点を当てます。 レガシー Hive metastore の外部テーブルは、異なる動作をします。 レガシーHive metastoreのデータベースオブジェクトを参照してください。
Databricks 以外のクライアントを使用して、または Databricks 内からのパスベースのアクセスを使用して外部テーブルのメタデータを更新した場合、そのメタデータは Unity Catalog と状態を自動的に同期しません。 Databricks では、このようなメタデータの更新はお勧めしませんが、更新する場合は、Unity Catalog のスキーマを最新の状態にするために MSCK REPAIR TABLE <table-name> SYNC METADATA
を実行する必要があります。 REPAIR TABLEを参照してください。
外部テーブルのファイル形式
外部テーブルでは、次のファイル形式を使用できます。
- DELTA
- CSV
- JSON
- AVRO
- PARQUET
- ORC
- TEXT
外部テーブルの作成
外部テーブルを作成するには、SQL コマンドまたは データフレーム の書き込み操作を使用できます。
始める前に
外部テーブルを作成するには、次の権限要件を満たす必要があります。
- 外部テーブルがアクセスする
LOCATION
へのアクセスを許可する外部ロケーションに対するCREATE EXTERNAL TABLE
特権。 - テーブルの親スキーマに対する
USE SCHEMA
権限。 - テーブルの親カタログに対する
USE CATALOG
権限。 - テーブルの親スキーマに対する
CREATE TABLE
権限。
外部ロケーションの設定について詳しくは、クラウドストレージをDatabricksに接続するための外部ロケーションの作成を参照してください。
SQL コマンドの例
ノートブックまたはSQLクエリエディタで次のいずれかのコマンド例を使用して、外部テーブルを作成します。
次の例で、プレースホルダーの値を置き換えます。
<catalog>
:テーブルを格納するカタログの名前。<schema>
:テーブルを格納するスキーマの名前。<table-name>
:テーブルの名前。<column-specification>
:各列の名前とデータ型。<bucket-path>
: テーブルが作成されるクラウドストレージバケットへのパス。<table-directory>
:テーブルが作成されるディレクトリ。テーブルごとに一意のディレクトリを使用します。
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-specification>
)
LOCATION 'gs://<bucket-path>/<table-directory>';
テーブル作成パラメーターの詳細については、 CREATE TABLEを参照してください。
データフレームの書き込み操作
多くのユーザーは、クエリ結果または データフレーム の書き込み操作から外部テーブルを作成します。 次の記事では、Databricks で外部テーブルを作成するために使用できる多くのパターンの一部を示しています。
外部テーブルの削除
テーブルを削除するには、その所有者であるか、テーブルに対する MANAGE
権限を持っている必要があります。 外部テーブルを削除するには、次の SQL コマンドを実行します。
DROP TABLE IF EXISTS catalog_name.schema_name.table_name;
Unity Catalog は、外部テーブルをドロップしても、クラウド ストレージ内の基になるデータを削除しません。 テーブルに関連付けられたデータを削除する必要がある場合は、基になるデータ ファイルを直接削除する必要があります。
ノートブックの例: 外部テーブルを作成する
次のノートブックの例を使用して、カタログ、スキーマ、および外部テーブルを作成し、それらに対するアクセス許可を管理できます。