중요합니다
이 기능은 공개 미리보기 단계에 있습니다.
호환성 모드를 사용하면 Azure Databricks에서 최적의 성능을 유지하면서 외부 시스템에서 Unity 카탈로그 관리 테이블, 구체화된 뷰 및 스트리밍 테이블을 읽을 수 있습니다. 이 기능은 Delta Lake 또는 Iceberg 클라이언트에서 액세스할 수 있는 테이블의 읽기 전용 버전을 자동으로 생성합니다.
개요
관리되는 테이블, 스트리밍 테이블 또는 구체화된 뷰에서 사용하도록 설정하면 호환 모드는 선택한 위치에서 테이블의 읽기 전용 버전을 생성합니다. 이 호환성 버전에는 Delta Lake 및 Iceberg 형식 모두에 대한 v1 메타데이터가 포함되어 있으며 다음 기능을 제공합니다.
- Delta Lake 클라이언트와의 상호 운용성: Amazon Athena, Microsoft Fabric, Snowflake 및 Amazon Redshift와 같은 클라이언트에서 스트리밍 테이블 또는 구체화된 뷰를 비롯한 관리되는 테이블을 스토리지 또는 Unity REST API를 통해 직접 읽습니다.
- Iceberg 클라이언트와의 상호 운용성: Apache Spark, Apache Trino, Snowflake와 같은 Iceberg 클라이언트를 통해, 스트리밍 테이블 또는 구체화된 뷰를 포함한 관리 테이블을 Iceberg REST 카탈로그를 사용하여 읽습니다.
- 자동화 설정 및 잊기: 거의 실시간으로 새로 고침 간격을 구성하는 기능을 사용하여 호환성 버전에 대한 데이터 및 메타데이터 새로 고침 자동화
필수 조건
테이블에서 호환성 모드를 사용하도록 설정하려면 Unity 카탈로그를 사용해야 합니다. Unity 카탈로그 스트리밍 테이블, Unity 카탈로그 구체화된 뷰 및 Unity 카탈로그 관리 테이블만 지원됩니다. Unity 카탈로그 외부 테이블은 지원되지 않습니다.
또한 적절한 설정과 사용 권한이 있는 외부 위치 가 Unity 카탈로그에 등록되어 있는지 확인합니다.
- 대상 위치는 스토리지 계정에 있어야 하고 비어 있어야 합니다.
- 대상 위치 또는 상위 폴더 중 하나를 Unity 카탈로그의 외부 위치로 등록해야 합니다.
- 외부 위치에 대한 권한이 있어야 합니다
CREATE EXTERNAL TABLE. - 대상 위치와 부모 또는 자식 폴더는 지난 7일 이내에 다른 테이블의 호환 모드 위치로 사용되지 않아야 합니다.
테이블에서 호환성 모드 사용
스트리밍 테이블, 구체화된 뷰 및 관리되는 단순 클론의 경우 테이블을 만들 때 다음 테이블 속성을 설정합니다.
CREATE [STREAMING TABLE | MATERIALIZED VIEW | TABLE] my_catalog.my_schema.my_table
TBLPROPERTIES(
'delta.universalFormat.enabledFormats' = 'compatibility',
'delta.universalFormat.compatibility.location' = '<location>'
)
Unity 카탈로그 관리 테이블의 경우 기존 테이블을 변경할 때 호환성 모드를 사용하도록 설정할 수도 있습니다.
-- For existing managed tables
ALTER TABLE my_catalog.my_schema.my_table SET TBLPROPERTIES(
'delta.universalFormat.enabledFormats' = 'compatibility',
'delta.universalFormat.compatibility.location' = '<location>'
)
처음으로 호환성 버전을 생성하는 데 최대 1시간이 걸립니다. 테이블을 즉시 수동으로 새로 고쳐 작동하는지 확인할 수 있습니다.
비고
세 부분으로 구성된 전체 테이블 이름(catalog.schema.table_name)을 지정해야 합니다. 예를 들어 users.john.my_table카탈로그 users이며 john 스키마입니다.
호환 모드를 사용할 수 있는지 확인
테이블에서 호환성 모드가 사용하도록 설정되어 있는지 확인하려면 테이블 속성이 delta.universalFormat.enabledFormats = 'compatibility' 있는지 확인합니다. 테이블의 세부 정보 탭에 있는 카탈로그 탐색기 UI에서 이 속성을 볼 수 있습니다.
Notebook에서 다음 SQL 명령을 실행할 수도 있습니다.
DESC DETAIL my_catalog.my_schema.my_table
DESC EXTENDED my_catalog.my_schema.my_table
출력에서 다음 속성을 찾습니다.
-
delta.universalFormat.enabledFormats: "compatibility"– 호환 모드를 사용하도록 설정됨을 나타냅니다. -
delta.universalFormat.compatibility.location– 호환 모드 버전의 위치를 표시합니다.
새로 고침 간격 구성
Unity 카탈로그 관리 테이블의 경우 새로 고침 간격을 설정하여 호환성 모드 버전을 새로 고치는 빈도를 구성할 수 있습니다.
-- Evaluate whether a refresh is needed after every commit (fastest)
ALTER TABLE my_catalog.my_schema.my_table SET TBLPROPERTIES(
'delta.universalFormat.enabledFormats' = 'compatibility',
'delta.universalFormat.compatibility.location' = '<location>',
'delta.universalFormat.compatibility.targetRefreshInterval' = '0 MINUTES'
)
-- Refresh hourly (default)
ALTER TABLE my_catalog.my_schema.my_table SET TBLPROPERTIES(
'delta.universalFormat.enabledFormats' = 'compatibility',
'delta.universalFormat.compatibility.location' = '<location>',
'delta.universalFormat.compatibility.targetRefreshInterval' = '1 HOUR'
)
기본 새로 고침 간격은 .입니다 1 HOUR. 새로 고침 간격을 1시간 미만으로 설정하는 것은 권장되지 않으며 새로 고침이 더 자주 발생하지 않습니다. 새로 고침 간격을 .로 설정하는 경우는 예외입니다 0 MINUTES. 이 경우 Azure Databricks는 커밋할 때마다 변경 내용을 확인하고 필요한 경우 새로 고침을 트리거합니다.
스트리밍 테이블 및 구체화된 뷰의 경우 새로 고침 간격이 필요하지 않습니다.
0 MINUTES 는 기본값입니다.
비고
새로 고침 시간에 큰 영향을 주는 변경 내용(예: 열 이름 바꾸기 또는 형식 확장 사용)은 대상 새로 고침 간격에 관계없이 매시간 수행됩니다.
수동 새로 고침
호환성 버전의 새로 고침을 수동으로 트리거하려면 다음을 수행합니다.
REFRESH [TABLE | STREAMING TABLE | MATERIALIZED VIEW] my_catalog.my_schema.my_table SYNC UNIFORM
수동 새로 고침은 호환성 모드가 제대로 작동하는지 테스트하거나 호환 버전이 다음 읽기 전에 최신 상태임을 보장하는 데 유용합니다. 그러나 자동 새로 고침을 기다리는 것이 비용 효율적일 수 있습니다.
데이터 및 메타데이터 생성 상태 모니터링
호환 모드는 데이터와 메타데이터를 자동으로 비동기적으로 생성합니다. Unity 카탈로그 관리 테이블의 경우 생성은 기본적으로 매시간 또는 구성된 새로 고침 간격에 따라 발생합니다. 스트리밍 테이블 및 구체화된 뷰의 경우 새 커밋이 있을 때 테이블 업데이트 후에 생성이 발생합니다.
데이터 및 메타데이터가 성공적으로 생성되었는지 확인하려면 다음을 수행합니다.
원본 테이블의 최신 버전을 찾는 데 사용합니다
DESCRIBE HISTORY.DESC HISTORY my_catalog.my_schema.my_table
이 명령은 Delta Lake 버전 및 타임스탬프를 포함하여 새로 고침 기록을 호환 모드로 반환합니다. 맨 위 행에는 최신 버전과 타임스탬프가 포함됩니다.
호환 모드의 해당 버전을 찾는 데 사용합니다
DESCRIBE EXTENDED.DESC EXTENDED my_catalog.my_schema.my_table
균일한 호환성 정보에서 필드를 찾습니다.
- 마지막으로 새로 고친 버전: 호환 모드로 마지막으로 업데이트된 Delta Lake 버전
- 마지막 새로 고침: 마지막 새로 고침의 타임스탬프
테이블 버전이 1단계에서 찾은 버전과 일치하는 경우 호환성 모드는 up-to-date입니다.
호환성 버전 자체에서
DESC HISTORY를 사용합니다.DESC HISTORY delta.\`<compatibility_location>\`
카탈로그 탐색기에서 호환성 버전의 메타데이터 필드를 봅니다. 호환성 모드는 Delta Lake 버전이 3단계에서 찾은 버전과 일치하는 경우 최신 상태입니다.
비용 모니터링
예측 최적화 는 호환성 모드에 대해 자동 새로 고침을 수행하는 컴퓨팅 클러스터를 처리합니다. 관련 비용을 보려면 시스템 청구 테이블을 쿼리합니다.
SELECT
DATE_TRUNC('DAY', start_time) AS day,
SUM(usage_quantity) AS dbus
FROM
system.storage.predictive_optimization_operations_history
WHERE
operation_type = "COMPATIBILITY_MODE_REFRESH"
GROUP BY 1
ORDER BY 1 DESC;
이 쿼리는 자동 새로 고침에 대한 사용량만 보고합니다. 수동 새로 고침에 대한 비용은 컴퓨팅과 연결되며 해당 비용을 별도로 추적하는 직접적인 방법은 없습니다. 일반적으로 수동 트리거 비용은 원래 테이블에 대한 초기 쓰기 작업의 비용에 비례합니다.
사용되지 않는 데이터 파일 제거
테이블의 호환성 버전에서 사용되지 않는 데이터 파일을 제거하려면 다음을 사용합니다 VACUUM.
VACUUM delta.'<compatibility_mode_location_path>';
호환 모드 위치 경로를 찾으려면 호환성 모드가 DESCRIBE EXTENDED사용하도록 설정되어 있는지 확인에서 명령을 사용합니다. 출력에서 값 delta.universalFormat.compatibility.location 은 위치입니다.
외부 클라이언트에서 호환성 버전 읽기
Delta Lake 또는 Iceberg 클라이언트를 사용하여 호환성 버전에서 데이터를 읽을 수 있습니다. Amazon Athena, Snowflake(델타 판독기) 및 패브릭에 대한 예제는 아래를 참조하세요.
Amazon Athena
Athena 쿼리 편집기에서 지정된 위치를 사용하여 외부 테이블을 만듭니다.
CREATE EXTERNAL TABLE <table_name> LOCATION '<compatibility_location>' TBLPROPERTIES ('table_type' = 'DELTA')표를 읽습니다.
SELECT * FROM <table_name>
Snowflake Delta Lake 판독기
스토리지 위치에 액세스하는 스토리지 통합을 만듭니다( Snowflake 설명서 참조).
Delta Lake 형식의 외부 테이블을 만듭니다.
CREATE OR REPLACE EXTERNAL TABLE <table_name> WITH LOCATION = @<my_location> FILE_FORMAT = (TYPE = PARQUET) TABLE_FORMAT = DELTA AUTO_REFRESH = false REFRESH_ON_CREATE = false;테이블을 새로 고칩니다(Snowflake의 Delta Lake 형식에는 자동 새로 고침이 지원되지 않음):
ALTER EXTERNAL TABLE <table_name> REFRESH;표를 읽습니다.
SELECT * FROM <table_name>;
Microsoft Fabric
패브릭 공급량, 작업 공간 및 Synapse 노트북을 만듭니다.
호환성 위치의 데이터를 활용하여 레이크하우스를 만듭니다.
Delta Lake 테이블로 파일을 읽습니다.
spark.read.format("delta").load("Files/<path_to_data>")
Unity REST API에서 호환성 버전 읽기
호환성 모드가 설정된 테이블은 특수 매개 변수가 있는 Unity REST API를 통해 이름으로 읽을 수 있습니다. 스트리밍 테이블의 경우 다음 API 매개 변수를 설정합니다.
GET /api/2.1/unity-catalog/tables/{full_name}?read_streaming_table_as_managed=true
구체화된 뷰의 경우 다음 API 매개 변수를 설정합니다.
GET /api/2.1/unity-catalog/tables/{full_name}?read_materialized_view_as_managed=true
Iceberg REST 카탈로그에서 호환성 버전 읽기
호환성 모드가 설정된 테이블은 Iceberg REST 카탈로그를 사용하여 모든 Iceberg 클라이언트에서 읽을 수 있습니다. 호환 모드는 Delta Lake 및 Iceberg 테이블 형식 모두에 대해 자동으로 작동합니다.
설정 요구 사항
- 메타스토어에서 외부 데이터 액세스를 사용하도록 설정합니다.
- 스키마에
EXTERNAL USE SCHEMA권한을 부여합니다. - Azure Databricks PAT(Personal Access Token)를 만듭니다.
Apache Spark 구성
bin/spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.8.0,org.apache.iceberg:iceberg-azure-bundle:1.8.0 \
--conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
--conf spark.sql.catalog.catalog_name=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.catalog_name.type=rest \
--conf spark.sql.catalog.catalog_name.uri=<workspace-url>/api/2.1/unity-catalog/iceberg-rest \
--conf spark.sql.catalog.catalog_name.token=<PAT> \
--conf spark.sql.catalog.catalog_name.warehouse=<uc-catalog-name>
자세한 내용은 Apache Spark에서 Iceberg 테이블 사용을 참조하세요.
Snowflake 구성
CREATE OR REPLACE CATALOG INTEGRATION my_uc_int
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = '<uc-schema-name>'
REST_CONFIG = (
CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg-rest'
CATALOG_NAME = '<uc-catalog-name>'
ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
)
REST_AUTHENTICATION = (
TYPE = BEARER
BEARER_TOKEN = '<PAT>'
)
ENABLED = TRUE;
CREATE OR REPLACE ICEBERG TABLE my_table
CATALOG = 'my_uc_int'
CATALOG_TABLE_NAME = '<uc-st/mv-name>';
호환 모드 사용 안 함
호환 모드를 사용하지 않도록 설정하려면 해당 테이블 속성을 설정 해제합니다.
-- For UC managed tables
ALTER TABLE my_table UNSET TBLPROPERTIES('delta.universalFormat.enabledFormats')
-- For streaming tables and materialized views
CREATE OR REPLACE [STREAMING TABLE | MATERIALIZED VIEW] my_table
TBLPROPERTIES('delta.universalFormat.enabledFormats' = '')
경고
호환 모드를 설정하지 않으면 데이터 및 메타데이터 생성이 즉시 중지됩니다. 7일이 지나면 연결된 데이터 및 메타데이터가 삭제됩니다. 이 7일 기간 내에 동일한 테이블에서 호환성 모드를 다시 사용하도록 설정하여 데이터 및 메타데이터를 복원할 수 있습니다.
제한점
- 읽기 전용 액세스: 호환성 버전은 읽기 전용입니다. 호환성 버전에는 쓸 수 없습니다.
- RLS/CLS 지원 없음: RLS(Row-Level Security) 또는 CLS(Column-Level Security)가 있는 테이블에서 호환성 모드를 사용하도록 설정할 수 없습니다.
- 파티션 열 이름 바꾸기 없음: 호환성 모드가 설정된 테이블에서는 파티션 열 이름 바꾸기가 지원되지 않습니다. 데이터 열 이름 바꾸기가 지원됩니다.
-
제한된 테이블 기능: 호환성 버전에서는 다음 기능을 사용할 수 없습니다.
- 데이터 정렬 열
- 기본 키
- 시간 이동
- 데이터 피드 변경
- 특수 문자가 포함된 열 이름은 이름이 변경됩니다.