外部クライアントから外部 Delta テーブルを作成する
プレビュー
この機能は パブリック プレビュー段階です。
このページでは、外部クライアントやシステムからのDelta Lakeに支えられた外部テーブルを作成する方法についてUnity Catalog情報を提供します。
Databricks では、Apache Spark を使用して外部テーブルを作成し、列定義が Apache Spark と互換性のある形式であることを確認することをお勧めします。API は、列の指定の正確性を検証しません。仕様が Apache Spark と互換性がない場合、Databricks Runtime はテーブルを読み取れない可能性があります。
必要条件
- 
メタストアの 外部データ アクセスを有効にし ます。「 メタストアで外部データ アクセスを有効にする」を参照してください。
 - 
統合を構成するプリンシパルに次の権限を付与します
EXTERNAL USE SCHEMAオブジェクトを含むスキーマに対する権限。EXTERNAL USE LOCATIONパスを含む外部ロケーションに対する権限。「 プリンシパルに Unity Catalog 特権を付与する」を参照してください。CREATE TABLEテーブルに対する権限、外部ロケーションに対するCREATE EXTERNAL TABLE、親カタログに対するUSE CATALOG、および親スキーマに対するUSE SCHEMA。
「 プリンシパルに Unity Catalog 特権を付与する」を参照してください。
 
Apache Spark、Unity Catalog API、またはその他の外部クライアントを使用して、外部テーブルを作成できます。
Apache Spark を使用して Delta テーブルを作成する
外部Deltaテーブルを作成するようにApache Sparkを構成する設定Unity Catalog例を次に示します。
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.hadoop.fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog",
"spark.sql.catalog.<uc-catalog-name>.token": "<token>",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
次の変数を置き換えます。
<uc-catalog-name>: テーブルを含む Unity Catalog のカタログの名前。<workspace-url>: Databricks ワークスペースの URL。<token>: 統合を構成するプリンシパルの OAuth トークン。
Apache Spark と Delta Lake を Unity Catalog と連携させるには、少なくとも Apache Spark 3.5.3 が必要ですDelta Lake 3.2.1 です。
Apache Spark の起動時に、次の依存関係を含めます。
--packages "org.apache.hadoop:hadoop-aws:3.3.4,\
io.delta:delta-spark_2.12:3.2.1,\
io.unitycatalog:unitycatalog-spark_2.12:0.2.0"
これで、SQLを使用して外部テーブルを作成できるようになりました。
CREATE TABLE <uc-catalog-name>.<schema-name>.<table-name> (id INT, desc STRING)
USING delta
LOCATION <path>;
APIを使用してDeltaテーブルを作成する
Unity Catalog REST API を使用して外部 Delta テーブルを作成するには、次の手順に従います。
ステップ 1: テーブルの作成 API に POST リクエストを行う
次の API 要求を使用して、 Unity Catalogでテーブルメタデータを登録します。
curl --location --request POST 'https://<workspace-url>/api/2.0/unity-catalog/tables/' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
  "name": "<table-name>",
  "catalog_name": "<uc-catalog-name>",
  "schema_name": "<schema-name>",
  "table_type": "EXTERNAL",
  "data_source_format": "DELTA",
  "storage_location": "<path>",
  "columns": [
    {
      "name": "id",
      "type_name": "LONG",
      "type_text": "bigint",
      "type_json": "\"long\"",
      "type_precision": 0,
      "type_scale": 0,
      "position": 0,
      "nullable": true
    },
    {
      "name": "name",
      "type_name": "STRING",
      "type_text": "string",
      "type_json": "\"string\"",
      "type_precision": 0,
      "type_scale": 0,
      "position": 1,
      "nullable": true
    }
  ]
}'
次の変数を置き換えます。
<workspace-url>: Databricks ワークスペースの URL<token>: API 呼び出しを行うプリンシパルのトークン<uc-catalog-name>: 外部テーブルを含む Unity Catalog 内のカタログの名前<schema-name>: テーブルが作成されるカタログ内のスキーマの名前<table-name>: 外部テーブルの名前<path>: テーブルデータへの完全修飾パス
ステップ 2: Delta テーブルの場所を初期化する
上記の API 呼び出しは、 :[UC] のテーブルを登録するが、ストレージの場所に Delta ファイルは作成されない。 テーブルの場所を初期化するには、Spark を使用して空の Delta テーブルを書き込みます。
このステップで使用されるスキーマは、API リクエストで指定された列定義と完全に一致する必要があります。
from pyspark.sql.types import StructType, StructField, StringType, LongType
# Define schema matching your API call
schema = StructType([
    StructField("id", LongType(), True),
    StructField("name", StringType(), True)
])
# Create an empty DataFrame and initialize the Delta table
empty_df = spark.createDataFrame([], schema)
empty_df.write \
    .format("delta") \
    .mode("overwrite") \
    .save("<path>")
外部クライアント用のテーブル作成 API には、次の制限があります。
- 
外部 Delta テーブルのみがサポートされます(
"table_type": "EXTERNAL"および"data_source_format": "DELTA")。 - 
次のフィールドのみが許可されます。
namecatalog_nameschema_nametable_typedata_source_formatcolumnsstorage_locationproperties
 - 
列マスクはサポートされていません。