メインコンテンツまでスキップ

外部テーブルに関する作業

Unity Catalog は、Unity Catalog を経由するすべてのクエリの外部データに対するデータ アクセス許可を制御しますが、データのライフサイクル、最適化、保存場所、またはレイアウトは管理しません。

外部テーブルは、クラウド・テナントのクラウド・オブジェクト・ストレージ内のディレクトリにデータを格納します。外部テーブルを定義するときは、格納場所を指定する必要があります。外部テーブルを削除しても、データファイルは削除されません。

外部テーブルを作成するときは、データファイルの既存のディレクトリをテーブルとして登録するか、テーブルをバックアップするデータファイルを格納する新しいディレクトリを作成するためのパスを指定できます。

Databricks では、次のユース ケースで外部テーブルを使用することをお勧めします。

  • 既存のデータに基づくテーブルのうち、マネージドテーブルと互換性のないテーブル Unity Catalog 登録する必要があります。
  • また、他の外部アクセス パターンをサポートしていない Databricks 以外のクライアントからデータに直接アクセスする必要もあります。「外部システムを使用した Databricks データへのアクセス」を参照してください。

Unity Catalog の特権は、ユーザーが外部システムからデータ ファイルにアクセスする場合には適用されません。

この記事では、Unity Catalog の外部テーブルに焦点を当てます。 レガシー Hive metastore の外部テーブルは、異なる動作をします。 レガシーHive metastoreのデータベースオブジェクトを参照してください。

important

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 の書き込み操作を使用できます。

始める前に

外部テーブルを作成するには、次の権限要件を満たす必要があります。

  • 外部テーブルがアクセスする LOCATION へのアクセスを許可する外部ロケーションに対する CREATE EXTERNAL TABLE 特権。
  • テーブルの親スキーマに対するUSE SCHEMA権限。
  • テーブルの親カタログに対するUSE CATALOG権限。
  • テーブルの親スキーマに対するCREATE TABLE権限。

外部ロケーションの設定について詳しくは、クラウドストレージをDatabricksに接続するための外部ロケーションの作成を参照してください。

注記

外部テーブルへのアクセスを許可する場合は、次の点に注意してください。 Databricks では、 S3 内の外部ロケーションによってバックアップされているテーブルに対する書き込み権限を付与するのは、その外部ロケーションが 1 つのメタストアで定義されている場合のみにすることをお勧めします。 1 つの外部 S3 場所にあるデータを複数のメタストアから安全に読み取ることができますが、複数のメタストアから同じ S3 場所への並列書き込みは、一貫性の問題が発生する可能性があります。

SQL コマンドの例

ノートブックまたはSQLクエリエディタで次のいずれかのコマンド例を使用して、外部テーブルを作成します。

次の例で、プレースホルダーの値を置き換えます。

  • <catalog>:テーブルを格納するカタログの名前。
  • <schema>:テーブルを格納するスキーマの名前。
  • <table-name>:テーブルの名前。
  • <column-specification>:各列の名前とデータ型。
  • <bucket-path>: テーブルが作成されるクラウドストレージバケットへのパス。
  • <table-directory>:テーブルが作成されるディレクトリ。テーブルごとに一意のディレクトリを使用します。
SQL
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-specification>
)
LOCATION 's3://<bucket-path>/<table-directory>';

テーブル作成パラメーターの詳細については、 CREATE TABLEを参照してください。

データフレームの書き込み操作

多くのユーザーは、クエリ結果または DataFrame の書き込み操作から外部テーブルを作成します。 次の記事では、Databricks で外部テーブルを作成するために使用できる多くのパターンの一部を示しています。

外部テーブルの削除

テーブルを削除するには、その所有者であるか、テーブルに対する MANAGE 権限を持っている必要があります。 外部テーブルを削除するには、次の SQL コマンドを実行します。

SQL
DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

Unity Catalog は、外部テーブルをドロップしても、クラウド ストレージ内の基になるデータを削除しません。 テーブルに関連付けられたデータを削除する必要がある場合は、基になるデータ ファイルを直接削除する必要があります。

ノートブックの例: 外部テーブルを作成する

次のノートブックの例を使用して、カタログ、スキーマ、および外部テーブルを作成し、それらに対するアクセス許可を管理できます。

Unity Catalog ノートブックで外部テーブルを作成および管理する

Open notebook in new tab