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

外部クライアントから外部 Delta テーブルを作成する

備考

プレビュー

この機能は パブリック プレビュー段階です。

このページでは、外部クライアントやシステムからのDelta Lakeに支えられた外部テーブルを作成する方法についてUnity Catalog情報を提供します。

注記

Databricks では、Apache Spark を使用して外部テーブルを作成し、列定義が Apache Spark と互換性のある形式であることを確認することをお勧めします。API は、列の指定の正確性を検証しません。仕様が Apache Spark と互換性がない場合、Databricks Runtime はテーブルを読み取れない可能性があります。

必要条件

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を使用して外部テーブルを作成できるようになりました。

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でテーブルメタデータを登録します。

Bash
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 リクエストで指定された列定義と完全に一致する必要があります。

Python

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")。

  • 次のフィールドのみが許可されます。

    • name
    • catalog_name
    • schema_name
    • table_type
    • data_source_format
    • columns
    • storage_location
    • properties
  • 列マスクはサポートされていません。