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