다음을 통해 공유


외부 클라이언트에서 외부 델타 테이블 만들기

중요합니다

이 기능은 공개 미리보기 단계에 있습니다.

이 페이지에서는 외부 클라이언트 및 시스템에서 Delta Lake에서 지원되는 Unity 카탈로그 외부 테이블을 만드는 방법에 대한 정보를 제공합니다.

비고

Databricks는 Apache Spark를 사용하여 외부 테이블을 만들어 열 정의가 Apache Spark와 호환되는 형식인지 확인하는 것이 좋습니다. API는 열 사양의 정확성을 확인하지 않습니다. 사양이 Apache Spark와 호환되지 않는 경우 Databricks 런타임이 테이블을 읽을 수 없을 수 있습니다.

요구 사항

Apache Spark, Unity 카탈로그 API 또는 기타 외부 클라이언트를 사용하여 외부 테이블을 만들 수 있습니다.

Apache Spark를 사용하여 델타 테이블 만들기

다음은 Unity 카탈로그 외부 델타 테이블을 만들도록 Apache Spark를 구성하는 설정의 예입니다.

"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 카탈로그의 이름입니다.
  • <workspace-url>: Azure Databricks 작업 영역의 URL입니다.
  • <token>: 통합을 구성하는 보안 주체에 대한 OAuth 토큰입니다.

Apache Spark 및 Delta Lake가 Unity 카탈로그와 함께 작동하려면 적어도 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를 사용하여 델타 테이블 만들기

Unity 카탈로그 REST API를 사용하여 외부 델타 테이블을 만들려면 다음 단계를 수행합니다.

1단계: 테이블 만들기 API에 대한 POST 요청 만들기

다음 API 요청을 사용하여 Unity 카탈로그에 테이블 메타데이터를 등록합니다.

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>: Azure Databricks 작업 영역의 URL
  • <token>: API 호출을 만드는 보안 주체에 대한 토큰
  • <uc-catalog-name>: 외부 테이블을 포함할 Unity 카탈로그의 카탈로그 이름
  • <schema-name>: 테이블을 만들 카탈로그 내의 스키마 이름
  • <table-name>: 외부 테이블의 이름
  • <path>: 테이블 데이터에 대한 정규화된 경로

2단계: 델타 테이블 위치 초기화

위의 API 호출은 :[UC]에 테이블을 등록하지만 스토리지 위치에 델타 파일을 만들지는 않습니다. 테이블 위치를 초기화하려면 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에는 다음과 같은 제한 사항이 있습니다.

  • 외부 델타 테이블만 지원됩니다("table_type": "EXTERNAL""data_source_format": "DELTA").
  • 다음 필드만 허용됩니다.
    • name
    • catalog_name
    • schema_name
    • table_type
    • data_source_format
    • columns
    • storage_location
    • properties
  • 열 마스크는 지원되지 않습니다.