次の方法で共有


外部テーブルの操作

Unity カタログでは、外部テーブルは、そのデータ ファイルをクラウド テナント内のクラウド オブジェクト ストレージに格納します。 Unity Catalog は引き続きテーブルのメタデータを管理し、すべてのクエリで完全なデータ ガバナンスを確保します。 ただし、データのライフサイクル、最適化、保存場所、レイアウトは管理されません。

Unity カタログの外部テーブルを定義するときは、ストレージの場所を指定する必要があります。 この場所は、Unity カタログに登録されている 外部の場所 です。 外部テーブルを削除すると、Unity Catalog はテーブル メタデータを削除しますが、基になるデータ ファイルは削除しません。

この記事では、Unity カタログの外部テーブルを中心に説明します。 レガシHive メタストアの外部テーブルはビヘイビアーが異なります。 「レガシ Hive メタストア内のデータベース オブジェクト」を参照してください。

外部テーブルを使用する場合

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

  • Unity カタログのマネージド テーブルと互換性のない既存のデータに基づくテーブルを登録する必要があります。
  • また、他の外部アクセス パターンをサポートしていない Databricks 以外のクライアントからのデータへの直接アクセスも必要です。 ユーザーが外部システムからデータ ファイルにアクセスする場合、Unity カタログ権限は適用されません。 外部システム を使用して Databricks データにアクセスするを参照してください。

ほとんどの場合、Databricks では、 Unity カタログのマネージド テーブル を使用して、テーブルの自動最適化、クエリパフォーマンスの高速化、コストの削減を活用することをお勧めします。 外部テーブルをマネージド テーブルに移行するには、「 外部テーブルをマネージド Unity カタログ テーブルに変換する」を参照してください。

Von Bedeutung

Databricks 以外のクライアントを使用するか、Databricks 内からパスベースのアクセスを使用して外部テーブルメタデータを更新した場合、そのメタデータは Unity カタログと状態を自動的に同期しません。 Databricks ではこのようなメタデータ更新に対して推奨されますが、実行する場合は、MSCK REPAIR TABLE <table-name> SYNC METADATA を実行して Unity カタログのスキーマを最新の状態に保つ必要があります。 REPAIR TABLEを参照してください。

外部テーブルのファイル形式

外部テーブルでは次のファイル形式を使用できます。

  • デルタ
  • CSV
  • JSON
  • AVRO
  • 寄木細工
  • オーク
  • [TEXT]

外部テーブルを作成する

SQL コマンドまたは DataFrame 書き込み操作を使用して、外部テーブルを作成できます。

始める前に

外部テーブルを作成する前に、まずクラウド ストレージへのアクセスを許可する外部の場所を構成する必要があります。

外部の場所の構成の詳細については、「 クラウド ストレージを Azure Databricks に接続する外部の場所を作成する」を参照してください。

外部テーブルを作成するには、次のアクセス許可要件を満たす必要があります:

  • 外部テーブルによってアクセスされる、CREATE EXTERNAL TABLE へのアクセスを許可する外部の場所に対する LOCATION 権限。
  • テーブルの親カタログに対する USE CATALOG 権限。
  • テーブルの親スキーマに対する USE SCHEMA 権限。
  • テーブルの親スキーマに対する CREATE TABLE 権限。

S3 外部の場所が複数のメタストアに関連付けられている場合は、同じ外部テーブルへの異なるメタストアからの書き込みが一貫性の問題を引き起こす可能性があるため、その S3 の場所を使用するテーブルへの書き込みアクセスを許可しないようにします。 ただし、複数のメタストア間で同じ S3 外部の場所から読み取る方が安全です。

SQL コマンドの例

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

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

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

ADLS

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';

S3

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 では基になるデータは削除されません。 テーブルに関連付けられているデータを削除する必要がある場合は、基になるデータ ファイルを直接削除する必要があります。

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

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

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

ノートブックを入手