중요합니다
이 기능은 공개 미리보기 단계에 있습니다.
이 페이지에서는 외부 클라이언트 및 시스템에서 Delta Lake에서 지원되는 Unity 카탈로그 외부 테이블을 만드는 방법에 대한 정보를 제공합니다.
비고
Databricks는 Apache Spark를 사용하여 외부 테이블을 만들어 열 정의가 Apache Spark와 호환되는 형식인지 확인하는 것이 좋습니다. API는 열 사양의 정확성을 확인하지 않습니다. 사양이 Apache Spark와 호환되지 않는 경우 Databricks 런타임이 테이블을 읽을 수 없을 수 있습니다.
요구 사항
메타스토어의 외부 데이터 액세스를 활성화하십시오. 메타스토어에서 외부 데이터 액세스 사용 가능으로 설정하십시오을 참조하세요.
보안 주체에게 통합 구성 권한 부여
-
EXTERNAL USE SCHEMA개체를 포함하는 스키마에 대한 권한입니다. -
EXTERNAL USE LOCATION경로를 포함하는 외부 위치에 대한 권한입니다. 보안 주체 Unity 카탈로그 권한 부여를 참조하세요. -
CREATE TABLE테이블, 외부 위치,CREATE EXTERNAL TABLEUSE CATALOG부모 카탈로그 및USE SCHEMA부모 스키마에 대한 사용 권한
-
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"). - 다음 필드만 허용됩니다.
namecatalog_nameschema_nametable_typedata_source_formatcolumnsstorage_locationproperties
- 열 마스크는 지원되지 않습니다.