Databricks는 Unity 카탈로그를 사용하여 Lakeflow Spark 선언적 파이프라인을 구성하는 것이 좋습니다. Unity 카탈로그를 사용하는 것은 새로 만든 파이프라인의 기본값입니다.
Unity 카탈로그로 구성된 파이프라인은 정의된 모든 구체화된 뷰 및 스트리밍 테이블을 지정된 카탈로그 및 스키마에 게시합니다. Unity 카탈로그 파이프라인은 다른 Unity 카탈로그 테이블 및 볼륨에서 읽을 수 있습니다.
Unity 카탈로그 파이프라인에서 만든 테이블의 사용 권한을 관리하려면 GRANT와 REVOKE을 사용하십시오.
비고
이 문서에서는 파이프라인의 현재 기본 게시 모드에 대한 기능을 설명합니다. 2025년 2월 5일 이전에 만든 파이프라인은 레거시 게시 모드 및 LIVE 가상 스키마를 사용할 수 있습니다.
LIVE 스키마(레거시)를 참조하세요.
요구 사항
Unity 카탈로그의 대상 스키마에서 스트리밍 테이블 및 구체화된 뷰를 만들려면 스키마 및 부모 카탈로그에 대해 다음 권한이 있어야 합니다.
-
USE CATALOG대상 카탈로그에 대한 권한. - 파이프라인이
CREATE MATERIALIZED VIEW을 생성하는 경우, 대상 스키마에 대한USE SCHEMA및 권한이 필요합니다. - 파이프라인이
CREATE TABLE만드는 경우 대상 스키마에 대한USE SCHEMA및 권한이 필요합니다. - 파이프라인에서 새 스키마를 만드는 경우 대상 카탈로그에 대한
USE CATALOG및CREATE SCHEMA권한이 있어야 합니다.
Unity 카탈로그 사용 파이프라인을 실행하기 위한 컴퓨팅 요구 사항:
- 컴퓨팅 리소스는 표준 액세스 모드로 구성해야 합니다. 전용 컴퓨팅은 지원되지 않습니다. 액세스 모드를 참조하세요.
Unity 카탈로그(스트리밍 테이블 및 구체화된 뷰 포함)를 사용하여 파이프라인에서 만든 테이블을 쿼리하는 데 필요한 컴퓨팅에는 다음이 포함됩니다.
- SQL 데이터 창고
- Databricks Runtime 13.3 LTS 이상에서 표준 액세스 모드 컴퓨팅을 사용할 수 있습니다.
- 전용 액세스 모드 컴퓨팅은 전용 컴퓨팅에서 세분화된 액세스 제어를 사용하도록 설정하는 경우(즉, Databricks Runtime 15.4 이상에서 실행 중이고 작업 영역에 대해 서버리스 컴퓨팅이 사용하도록 설정된 경우) 자세한 내용은 전용 컴퓨팅에 대한 세분화된 액세스 제어를 참조하세요.
- 테이블 소유자가 쿼리를 실행하는 경우에만, 13.3 LTS에서 15.3까지의 전용 접근 모드에서 컴퓨팅이 가능합니다.
추가 컴퓨팅 제한 사항이 적용됩니다. 다음 섹션을 참조하세요.
제한 사항
파이프라인과 함께 Unity 카탈로그를 사용하는 경우의 제한 사항은 다음과 같습니다.
- 기본적으로 파이프라인 소유자 및 작업 영역 관리자만 Unity 카탈로그 사용 파이프라인을 실행하는 컴퓨팅에서 드라이버 로그를 볼 수 있습니다. 다른 사용자가 드라이버 로그에 액세스할 수 있도록 허용하려면 관리자가 아닌 사용자가 Unity 카탈로그 사용 파이프라인에서 드라이버 로그를 볼 수 있도록 허용을 참조하세요.
- Hive 메타스토어를 사용하는 기존 파이프라인은 Unity 카탈로그를 사용하도록 업그레이드할 수 없습니다. Hive 메타스토어에 쓰는 기존 파이프라인을 마이그레이션하려면 새 파이프라인을 만들고 데이터 원본에서 데이터를 다시 수집해야 합니다. Hive 메타스토어 파이프라인복제하여 Unity 카탈로그 파이프라인 만들기
참조하세요.
- Unity 카탈로그 공개 미리 보기 중에 만든 메타스토어에 연결된 작업 영역에서 Unity 카탈로그 사용 파이프라인을 만들 수 없습니다. 권한 상속으로 업그레이드를 참조하세요.
- JAR은 지원되지 않습니다. 타사 Python 라이브러리만 지원됩니다. 파이프라인에 대한 Python 종속성 관리를 참조하세요.
- 스트리밍 테이블의 스키마를 수정하는 DML(데이터 조작 언어) 쿼리는 지원되지 않습니다.
- 파이프라인에서 만든 구체화된 뷰는 해당 파이프라인 외부의 스트리밍 원본(예: 다른 파이프라인 또는 다운스트림 Notebook)으로 사용할 수 없습니다.
- 구체화된 뷰 및 스트리밍 테이블에 대한 데이터는 포함된 스키마의 스토리지 위치에 저장됩니다. 스키마 스토리지 위치를 지정하지 않으면 테이블이 카탈로그 스토리지 위치에 저장됩니다. 스키마 및 카탈로그 스토리지 위치를 지정하지 않으면 테이블은 메타스토어의 루트 스토리지 위치에 저장됩니다.
- 카탈로그 탐색기 기록 탭에는 구체화된 뷰에 대한 기록이 표시되지 않습니다.
- 테이블을 정의할 때는
LOCATION속성이 지원되지 않습니다. - Unity 카탈로그 사용 파이프라인은 Hive 메타스토어에 게시할 수 없습니다.
- Python UDF 지원은공개 미리 보기 중입니다.
비고
구체화된 뷰를 지원하는 기본 파일에는 구체화된 뷰 정의에 표시되지 않는 업스트림 테이블의 데이터(개인 식별 가능한 정보 포함)가 포함될 수 있습니다. 이 데이터는 구체화된 뷰의 증분 새로 고침을 지원하기 위해 기본 스토리지에 자동으로 추가됩니다.
구체화된 뷰의 기본 파일은 구체화된 뷰 스키마의 일부가 아닌 업스트림 테이블의 데이터를 노출할 위험이 있으므로 Databricks는 신뢰할 수 없는 다운스트림 소비자와 기본 스토리지를 공유하지 않는 것이 좋습니다.
예를 들어 구체화된 뷰 정의에 COUNT(DISTINCT field_a) 절이 포함되어 있다고 가정합니다. 구체화된 뷰 정의에 집계 COUNT DISTINCT 절만 포함되더라도 기본 파일에는 field_a실제 값 목록이 포함됩니다.
Hive 메타스토어와 Unity 카탈로그 파이프라인을 함께 사용할 수 있나요?
작업 영역에는 Unity 카탈로그 및 레거시 Hive 메타스토어를 사용하는 파이프라인이 포함될 수 있습니다. 그러나 단일 파이프라인은 Hive 메타스토어 및 Unity 카탈로그에 쓸 수 없습니다. Hive 메타스토어에 쓰는 기존 파이프라인은 Unity 카탈로그를 사용하도록 업그레이드할 수 없습니다. Hive 메타스토어에 쓰는 기존 파이프라인을 마이그레이션하려면 새 파이프라인을 만들고 데이터 원본에서 데이터를 다시 수집해야 합니다. Hive 메타스토어 파이프라인복제하여 Unity 카탈로그 파이프라인 만들기
Unity 카탈로그를 사용하지 않는 기존 파이프라인은 Unity 카탈로그로 구성된 새 파이프라인을 만들어 영향을 받지 않습니다. 이러한 파이프라인은 구성된 스토리지 위치를 사용하여 Hive 메타스토어에 데이터를 계속 유지합니다.
이 문서에서 달리 지정하지 않는 한 모든 기존 데이터 원본 및 파이프라인 기능은 Unity 카탈로그를 사용하는 파이프라인에서 지원됩니다. Python 및 SQL 인터페이스는 모두 Unity 카탈로그를 사용하는 파이프라인에서 지원됩니다.
비활성 테이블
데이터를 Unity 카탈로그에 유지하도록 파이프라인이 구성된 경우 파이프라인은 테이블의 수명 주기 및 사용 권한을 관리합니다.
파이프라인에서 정의가 제거되면 테이블이 비활성 상태가 될 수 있습니다. 다음 파이프라인 업데이트는 해당 구체화된 뷰 또는 스트리밍 테이블 항목을 비활성으로 표시합니다.
파이프라인의 기본 카탈로그 또는 스키마를 변경하고 파이프라인 소스 코드에서 정규화된 테이블 이름을 사용하지 않는 경우 다음 파이프라인 실행은 새 카탈로그 또는 스키마에 구체화된 뷰 또는 스트리밍 테이블을 만들고 이전 위치의 구체화된 뷰 또는 스트리밍 테이블은 비활성으로 표시됩니다.
비활성 테이블을 쿼리할 수 있지만 파이프라인은 더 이상 테이블을 업데이트하지 않습니다. 구체화된 뷰 또는 스트리밍 테이블을 정리하려면 명시적으로 DROP 테이블을 지정합니다. 비활성 테이블은 파이프라인이 삭제될 때 삭제됩니다.
- 명령을 사용하여 7일 이내에 삭제된 테이블을 복구할
UNDROP수 있습니다. - 다음 파이프라인 업데이트에서 Unity 카탈로그에서 구체화된 뷰 또는 스트리밍 테이블 항목이 제거되는 레거시 동작을 유지하려면 파이프라인 구성을
"pipelines.dropInactiveTables": "true"설정합니다. 실제 데이터는 실수로 삭제된 경우 복구할 수 있도록 기간 동안 보존됩니다. 구체화된 뷰 또는 스트리밍 테이블을 파이프라인 정의에 다시 추가하여 7일 이내에 데이터를 복구할 수 있습니다.
파이프라인 원본에서 테이블 정의를 제거하는 대신 파이프라인을 완전히 삭제하면 해당 파이프라인에 정의된 모든 테이블도 삭제됩니다. UI는 파이프라인 삭제를 확인하라는 메시지를 표시합니다.
파이프라인에서 Unity 카탈로그에 테이블 쓰기
Unity 카탈로그에 테이블을 쓰려면 작업 영역을 통해 작업하도록 파이프라인을 구성해야 합니다. 파이프라인을 만들 때 스토리지 옵션에서 Unity 카탈로그를 선택하고 카탈로그 드롭다운 메뉴에서 카탈로그를 선택한 다음 기존 스키마를 선택하거나 대상 스키마 드롭다운 메뉴에서 새 스키마의 이름을 입력합니다. Unity 카탈로그 카탈로그에 대해 알아보려면 Azure Databricks의 카탈로그란?을 참조하세요. Unity 카탈로그의 스키마에 대해 알아보려면 Azure Databricks의 스키마란?을 참조하세요.
Unity 카탈로그 파이프라인에 데이터 적재
Unity 카탈로그를 사용하도록 구성된 파이프라인은 다음에서 데이터를 읽을 수 있습니다.
- Unity 카탈로그가 관리하는 테이블 및 외부 테이블, 뷰, 구체화된 뷰, 스트리밍 테이블.
- Hive 메타스토어 테이블 및 뷰.
-
read_files()함수를 사용하여 Unity 카탈로그 외부 위치에서 읽는 자동 로더입니다. - Apache Kafka 및 Amazon Kinesis.
다음은 Unity 카탈로그 및 Hive 메타스토어 테이블에서 읽는 예제입니다.
Unity 카탈로그 테이블에서 일괄 수집
SQL
CREATE OR REFRESH MATERIALIZED VIEW
table_name
AS SELECT
*
FROM
my_catalog.my_schema.table1;
파이썬
@dp.materialized_view
def table_name():
return spark.read.table("my_catalog.my_schema.table")
Unity 카탈로그 테이블에서 변경 내용 스트리밍
SQL
CREATE OR REFRESH STREAMING TABLE
table_name
AS SELECT
*
FROM
STREAM(my_catalog.my_schema.table1);
파이썬
@dp.table
def table_name():
return spark.readStream.table("my_catalog.my_schema.table")
Hive 메타스토어에서 데이터 수집
Unity 카탈로그를 사용하는 파이프라인은 hive_metastore 카탈로그를 사용하여 Hive 메타스토어 테이블에서 데이터를 읽을 수 있습니다.
SQL
CREATE OR REFRESH MATERIALIZED VIEW
table_name
AS SELECT
*
FROM
hive_metastore.some_schema.table;
파이썬
@dp.materialized_view
def table3():
return spark.read.table("hive_metastore.some_schema.table")
자동 로더에서 데이터 수집
SQL
CREATE OR REFRESH STREAMING TABLE table_name
AS SELECT *
FROM STREAM read_files(
"/path/to/uc/external/location",
format => "json"
)
파이썬
@dp.table(table_properties={"quality": "bronze"})
def table_name():
return (
spark.readStream.format("cloudFiles")
.option("cloudFiles.format", "json")
.load(f"{path_to_uc_external_location}")
)
구체화된 뷰 공유
기본적으로 파이프라인 소유자만 파이프라인에서 만든 데이터 세트를 쿼리할 수 있는 권한이 있습니다. 다른 사용자에게 GRANT 문을 사용하여 테이블을 쿼리할 수 있는 기능을 제공하고 REVOKE 문을 사용하여 쿼리 액세스를 취소할 수 있습니다. Unity 카탈로그의 권한에 대한 자세한 내용은 Unity 카탈로그의 권한 관리를 참조하세요.
테이블에 SELECT 권한 부여
GRANT SELECT ON TABLE
my_catalog.my_schema.table_name
TO
`user@databricks.com`
테이블에 대한 선택 권한 취소
REVOKE SELECT ON TABLE
my_catalog.my_schema.table_name
FROM
`user@databricks.com`
테이블 생성 또는 구체화된 뷰 생성 권한 부여
GRANT CREATE { MATERIALIZED VIEW | TABLE } ON SCHEMA
my_catalog.my_schema
TO
{ principal | user }
파이프라인 흐름 보기
파이프라인에 정의된 테이블의 계보는 카탈로그 탐색기에 표시됩니다. 카탈로그 탐색기 계보 UI는 Unity 카탈로그 사용 파이프라인에서 구체화된 뷰 또는 스트리밍 테이블에 대한 업스트림 및 다운스트림 테이블을 표시합니다. Unity 카탈로그 계보에 대한 자세한 내용은 Unity 카탈로그를 사용하여 데이터 계보 보기를 참조하세요.
Unity 카탈로그 사용 파이프라인의 구체화된 뷰 또는 스트리밍 테이블의 경우 카탈로그 탐색기 계보 UI는 현재 작업 영역에서 파이프라인에 액세스할 수 있는 경우 구체화된 뷰 또는 스트리밍 테이블을 생성한 파이프라인에도 연결됩니다.
스트리밍 테이블에서 데이터 추가, 변경 또는 삭제
삽입, 업데이트, 삭제 및 병합 문을 비롯한 DML( 데이터 조작 언어 ) 문을 사용하여 Unity 카탈로그에 게시된 스트리밍 테이블을 수정할 수 있습니다. 스트리밍 테이블에 대한 DML 쿼리를 지원하면 GDPR(일반 데이터 보호 규정)을 준수하기 위해 테이블 업데이트와 같은 사용 사례를 사용할 수 있습니다.
비고
- 스트리밍 테이블의 테이블 스키마를 수정하는 DML 문은 지원되지 않습니다. DML 문이 테이블 스키마를 변경하려고 하지 않는지 확인하세요.
- 스트리밍 테이블을 업데이트하는 DML 문은 Databricks Runtime 13.3 LTS 이상을 사용하여 공유 Unity 카탈로그 클러스터 또는 SQL 웨어하우스에서만 실행할 수 있습니다.
- 스트리밍에는 추가 전용 데이터 원본이 필요하기 때문에 처리 시 변경 내용이 있는 원본 스트리밍 테이블에서 스트리밍이 필요한 경우(예: DML 문) 원본 스트리밍 테이블을 읽을 때 skipChangeCommits 플래그 를 설정합니다.
skipChangeCommits설정되면 원본 테이블에서 레코드를 삭제하거나 수정하는 트랜잭션은 무시됩니다. 처리에 스트리밍 테이블이 필요하지 않은 경우 구체화된 뷰(추가 전용 제한이 없음)를 대상 테이블로 사용할 수 있습니다.
다음은 스트리밍 테이블의 레코드를 수정하는 DML 문의 예입니다.
특정 ID를 사용하여 레코드를 삭제합니다.
DELETE FROM my_streaming_table WHERE id = 123;
특정 ID로 레코드를 업데이트합니다.
UPDATE my_streaming_table SET name = 'Jane Doe' WHERE id = 123;
행 필터와 열 마스크를 사용하여 테이블 게시하기
행 필터를 사용하면 테이블 검색이 행을 가져올 때마다 필터로 적용되는 함수를 지정할 수 있습니다. 이러한 필터를 통해 후속 쿼리는 필터 조건자가 true로 평가되는 행만 반환합니다.
열 마스크를 사용하면 테이블 검색이 행을 가져올 때마다 열 값을 마스킹할 수 있습니다. 해당 열에 대한 이후 쿼리는 열의 원래 값 대신 평가된 함수의 결과를 반환합니다. 행 필터 및 열 마스크 사용에 대한 자세한 내용은 행 필터 및 열 마스크를 참조하세요.
행 필터 및 열 마스크 관리
구체화된 뷰 및 스트리밍 테이블의 행 필터 및 열 마스크는 CREATE OR REFRESH 문을 통해 추가, 업데이트 또는 삭제해야 합니다.
행 필터 및 열 마스크를 사용하여 테이블을 정의하는 방법에 대한 자세한 구문은 파이프라인 SQL 언어 참조 및 Lakeflow Spark 선언적 파이프라인 Python 언어 참조를 참조하세요.
행동
다음은 파이프라인에서 행 필터 또는 열 마스크를 사용할 때 중요한 세부 정보입니다.
-
소유자로 새로 고침: 파이프라인 업데이트가 구체화된 뷰 또는 스트리밍 테이블을 새로 고치면 행 필터 및 열 마스크 함수가 파이프라인 소유자의 권한으로 실행됩니다. 즉, 테이블 새로 고침은 파이프라인을 만든 사용자의 보안 컨텍스트를 사용합니다.
CURRENT_USER및IS_MEMBER와 같은 사용자 컨텍스트를 확인하는 함수는 파이프라인 소유자의 사용자 컨텍스트를 사용하여 평가됩니다. -
쿼리: 구체화된 뷰 또는 스트리밍 테이블을 쿼리할 때 사용자 컨텍스트(예:
CURRENT_USER및IS_MEMBER)를 확인하는 함수는 호출자의 사용자 컨텍스트를 사용하여 평가됩니다. 이 방법은 현재 사용자의 컨텍스트에 따라 사용자별 데이터 보안 및 액세스 제어를 적용합니다. - 행 필터 및 열 마스크가 포함된 원본 테이블에 대해 구체화된 뷰를 만들 때 구체화된 뷰의 새로 고침은 항상 전체 새로 고침입니다. 전체 새로 고침은 원본에서 사용할 수 있는 모든 데이터를 최신 정의로 다시 처리합니다. 이 프로세스는 원본 테이블의 보안 정책이 가장 up-to-date 데이터 및 정의와 함께 평가되고 적용되는지 확인합니다.
Observability
DESCRIBE EXTENDED, INFORMATION_SCHEMA또는 카탈로그 탐색기를 사용하여 지정된 구체화된 뷰 또는 스트리밍 테이블에 적용되는 기존 행 필터 및 열 마스크를 검사합니다. 이 기능을 사용하면 사용자가 구체화된 뷰 및 스트리밍 테이블에 대한 데이터 액세스 및 보호 조치를 감사하고 검토할 수 있습니다.