Databricks-to-Databricks Delta Sharing을 사용하여 공유된 데이터 읽기(수신자용)
이 문서에서는 Databricks에서 데이터 공유를 위한 보안 연결을 관리하는 Databricks-to-Databricks Delta Sharing 프로토콜을 사용하여 사용자와 공유된 데이터를 읽는 방법을 설명합니다. Delta Sharing 개방형 공유 프로토콜과 달리 Databricks-to-Databricks 프로토콜은 자격 증명 파일(토큰 기반 보안)이 필요하지 않습니다.
Databricks-Databricks 공유를 사용하려면 수신자로서 Unity 카탈로그가 활성된 Databricks 작업 영역에 액세스할 수 있어야 합니다.
Unity 카탈로그가 활성화된 Databricks 작업 영역이 없는 경우, Delta Sharing 개방형 공유 프로토콜을 사용하여 데이터를 공유해야 하며, 이 문서는 적용되지 않습니다. Delta Sharing 오픈 공유를 사용하여 공유된 데이터 읽기(수신자의 경우)를 참조하세요.
팀에 공유 데이터를 제공하려면 어떻게 해야 할까요?
Databricks-to-Databricks 프로토콜을 사용하여 공유된 데이터와 Notebook을 읽으려면 Unity 카탈로그에 대해 사용하도록 설정된 Databricks 작업 영역의 사용자여야 합니다. 팀원이 Unity 카탈로그 메타스토어에 대한 고유 식별자를 데이터 공급자에게 제공하면, 데이터 공급자는 해당 식별자를 사용하여 사용자 조직의 보안 공유 연결을 만듭니다. 그러면 공유 데이터를 작업 영역에서 읽기 액세스에 사용할 수 있게 되며, 데이터 공급자가 공유 테이블, 뷰, 볼륨 및 파티션에 대해 하는 모든 업데이트는 사용자의 작업 영역에 거의 실시간으로 반영됩니다.
참고 항목
공유 데이터 테이블, 뷰, 볼륨 업데이트는 작업 영역에 거의 실시간으로 표시됩니다. 그러나 열 변경(추가, 이름 바꾸기, 삭제)은 최대 1분 동안 카탈로그 탐색기에 표시되지 않을 수 있습니다. 마찬가지로 새 공유 및 공유 업데이트(예: 공유에 새 테이블 추가)는 1분 동안 캐시된 후에 보기 및 쿼리가 가능합니다.
사용자와 공유된 데이터를 읽으려면
- 팀의 사용자는 공유된 테이블, 뷰, 볼륨 및 Notebook을 담고 있는 컨테이너인 공유를 찾고, 해당 공유를 사용해 Databricks Unity 카탈로그의 모든 데이터를 담을 수 있는 최상위 컨테이너인 카탈로그를 만듭니다.
- 팀의 사용자는 카탈로그 및 카탈로그 내의 개체(스키마, 테이블, 뷰 및 볼륨)에 대한 액세스를 팀의 다른 구성원에게 부여하거나 거부합니다.
- 읽기 전용(
SELECT
또는READ VOLUME
) 액세스 권한이 있는 Databricks의 다른 데이터 자산과 마찬가지로, 액세스 권한이 부여된 테이블, 뷰, 볼륨의 데이터를 읽습니다. - 카탈로그에 대한
USE CATALOG
권한이 있는 한, 공유에서 Notebook을 미리 확인하고 복제할 수 있습니다.
필수 사용 권한
모든 공급자 및 공급자 공유에 대한 세부 정보를 나열하고 보려면 메타스토어 관리자이거나 USE PROVIDER
권한이 있어야 합니다. 다른 사용자는 자신이 소유한 공급자 및 공유에만 액세스할 수 있습니다.
공급자 공유에서 카탈로그를 만들려면 메타스토어 관리자이거나 Unity 카탈로그 메타스토어에 대한 CREATE_CATALOG
권한과 USE PROVIDER
권한이 모두 있는 사용자이거나, 또는 공급자 개체의 CREATE_CATALOG
권한과 소유권을 모두 가진 사용자여야 합니다.
공유에서 만든 카탈로그의 스키마(데이터베이스), 테이블, 뷰 및 볼륨에 대해 읽기 전용 액세스 권한을 부여하는 기능은 일반적인 Unity 카탈로그 권한 계층 구조를 따릅니다. 공유에서 만든 카탈로그에서 Notebook을 보는 기능을 사용하려면 카탈로그에 대한 USE CATALOG
권한이 필요합니다. Delta Sharing 카탈로그에서 스키마, 테이블, 볼륨에 대한 권한 관리를 참조하세요.
공급자 및 공유 보기
데이터 공급자가 공유한 데이터를 읽으려면 공급자의 이름을 알고 공급자가 데이터를 공유한 후 Unity 카탈로그 메타스토어에 저장된 개체를 공유해야 합니다.
공급자 개체는 데이터를 공유한 조직의 Unity 카탈로그 메타스토어, 클라우드 플랫폼 및 지역을 나타냅니다.
공유 개체는 공급자가 공유한 테이블, 볼륨, 뷰를 나타냅니다.
사용자와 데이터를 공유한 모든 공급자 보기
이용 가능한 데이터 공급자 목록을 보려면 Data Explorer, Databricks Unity 카탈로그 CLI를 사용하거나 Azure Databricks Notebook 또는 Databricks SQL 쿼리 편집기에서 SHOW PROVIDERS
SQL 명령을 사용하면 됩니다.
필요한 권한: 메타스토어 관리자이거나 USE PROVIDER
권한이 있어야 합니다. 다른 사용자는 자신이 소유한 공급자 및 공급자 공유에만 액세스할 수 있습니다.
자세한 내용은 공급자 보기를 참조하세요.
공급자 세부 정보 보기
공급자의 상세 정보를 보려면 카탈로그 탐색기, Databricks Unity 카탈로그 CLI를 사용하거나 Azure Databricks Notebook 또는 Databricks SQL 쿼리 편집기에서 DESCRIBE PROVIDER
SQL 명령을 사용할 수 있습니다.
필요한 권한: 메타스토어 관리자이거나 USE PROVIDER
권한이 있거나 공급자 개체의 소유자여야 합니다.
자세한 내용은 자 세부 정보 보기를 참조하세요.
공유 보기
공급자가 공유한 공유를 보려면 카탈로그 탐색기, Databricks Unity 카탈로그 CLI를 사용하거나 Azure Databricks Notebook 또는 Databricks SQL 쿼리 편집기에서 SHOW SHARES IN PROVIDER
SQL 명령을 사용하면 됩니다.
필요한 권한: 메타스토어 관리자이거나 USE PROVIDER
권한이 있거나 공급자 개체의 소유자여야 합니다.
자세한 내용은 공급자가 공유한 공유 보기를 참조하세요.
공유 테이블 또는 볼륨의 데이터에 액세스
공유 테이블의 데이터 또는 볼륨을 읽으려면
- 권한 있는 사용자가 테이블 또는 볼륨을 포함하는 공유에서 카탈로그를 만들어야 합니다. 이는 메타스토어 관리자이거나 Unity 카탈로그 메타스토어에 대해
CREATE_CATALOG
권한과USE PROVIDER
권한을 모두 가진 사용자 이거나, 공급자 개체에 대한CREATE_CATALOG
권한과 소유권을 모두 가진 사용자일 수 있습니다. - 해당 사용자 또는 동일한 권한을 가진 사용자가 공유 테이블 또는 볼륨에 대한 액세스 권한을 부여해야 합니다.
- Unity 카탈로그 메타스토어에 등록된 다른 데이터 자산과 마찬가지로 테이블 또는 볼륨에 액세스할 수 있습니다.
공유에서 카탈로그 만들기
공유 내의 데이터에 팀이 액세스할 수 있으려면 공유에서 카탈로그를 만들어야 합니다. 공유에서 테이블을 만들려면 카탈로그 탐색기, Databricks Unity 카탈로그 CLI를 사용하거나 Azure Databricks Notebook 또는 Databricks SQL 쿼리 편집기에서 SQL 명령을 사용하면 됩니다.
필요한 권한: 메타스토어 관리자이거나 Unity 카탈로그 메타스토어에 대한 CREATE_CATALOG
권한과 USE PROVIDER
권한을 모두 가진 사용자 이거나, 또는 공급자 개체에 대한 CREATE_CATALOG
권한과 소유권을 모두 가진 사용자.
참고 항목
공유에 뷰가 포함된 경우 공급자의 메타스토어에 있는 뷰가 포함된 카탈로그 이름과 다른 카탈로그 이름을 사용해야 합니다.
카탈로그 탐색기
Azure Databricks 작업 영역에서 카탈로그를 클릭하여 카탈로그 탐색기를 엽니다.
카탈로그 창 위쪽에서 기어 아이콘을 클릭하고 델타 공유를 선택합니다.
또는 즐겨찾기 페이지에서 델타 공유> 버튼을 클릭합니다.
공유한 항목 탭에서 공급자를 찾아 선택합니다.
공유 탭에서 공유를 찾고 공유 행에서 카탈로그 만들기를 클릭합니다.
카탈로그의 이름 및 선택적 주석을 입력합니다.
만들기를 클릭합니다.
또는 카탈로그 탐색기를 열 때 오른쪽 상단에 있는 카탈로그 만들기를 클릭하여 공유 카탈로그를 만들 수 있습니다. 카탈로그 만들기를 참조하세요.
SQL
Notebook 또는 Databricks SQL 쿼리 편집기에서 다음 명령을 실행합니다.
CREATE CATALOG [IF NOT EXISTS] <catalog-name>
USING SHARE <provider-name>.<share-name>;
CLI
databricks catalogs create <catalog-name> /
--provider-name <provider-name> /
--share-name <share-name>
공유에서 만든 카탈로그에는 Delta Sharing의 카탈로그 유형이 있습니다. 카탈로그 탐색기의 카탈로그 세부 정보 페이지에서 확인하거나, Notebook 또는 Databricks SQL 쿼리에서 DESCRIBE CATALOG SQL 명령을 실행하여 형식을 볼 수 있습니다. 모든 공유 카탈로그는 카탈로그 탐색기의 왼쪽 창의 카탈로그 > 공유 아래에 나열됩니다.
델타 공유 카탈로그는 Unity 카탈로그 메타스토어의 일반 카탈로그와 동일한 방식으로 관리할 수 있습니다. 카탈로그 탐색기, Databricks CLI를 사용하거나, SHOW CATALOGS
, DESCRIBE CATALOG
, ALTER CATALOG
, 및 DROP CATALOG
SQL 명령을 사용하여 Delta Sharing 카탈로그를 보고, 업데이트하고, 삭제할 수 있습니다.
공유에서 만든 델타 공유 카탈로그 아래의 세 수준 네임스페이스 구조는 Unity 카탈로그의 일반 카탈로그 아래의 구조와 동일합니다: catalog.schema.table
또는 catalog.schema.volume
.
공유 카탈로그 아래의 테이블 및 볼륨 데이터는 읽기 전용이며, 이는 다음과 같은 읽기 작업을 수행할 수 있습니다.
DESCRIBE
,SHOW
,SELECT
(테이블의 경우)DESCRIBE VOLUME
,LIST <volume-path>
,SELECT * FROM <format>.'<volume_path>'
,COPY INTO
(볼륨의 경우)
공유 카탈로그의 Notebook은 카탈로그에 대한 USE CATALOG
가 있는 모든 사용자가 미리 보기 및 복제할 수 있습니다.
공유 카탈로그에 있는 모델은 다음 권한을 가진 사용자가 읽고 추론을 위해 로드할 수 있습니다: 등록된 모델에 대한 EXECUTE
권한, 그리고 모델이 포함된 스키마와 카탈로그에 대한 USE SCHEMA
및 USE CATALOG
권한.
Delta Sharing 카탈로그에서 스키마, 테이블, 볼륨의 권한 관리
기본적으로 카탈로그 작성자는 Delta Sharing 카탈로그에 있는 모든 데이터 개체의 소유자이며, 해당 개체에 대한 사용 권한을 관리할 수 있습니다.
일부 작업 영역은 상속을 제공하지 않는 레거시 보안 모델에 있을 수 있지만 권한은 아래로 상속됩니다. 상속 모델을 참조하세요. 카탈로그에서 SELECT
권한을 부여받은 사용자는 권한이 취소되지 않는 한 카탈로그의 모든 스키마 및 테이블에 대해 SELECT
권한을 갖습니다. 마찬가지로, 카탈로그에 대해 READ VOLUME
권한을 부여받은 사용자는 해당 권한이 취소되지 않는 한 카탈로그 내 모든 볼륨에 대해 READ VOLUME
권한을 갖습니다. Delta Sharing 카탈로그 또는 Delta Sharing 카탈로그의 개체에 대한 쓰기 또는 업데이트 액세스 권한을 부여하는 권한은 부여할 수 없습니다.
카탈로그 소유자는 데이터 개체의 소유권을 다른 사용자 또는 그룹에 위임하여 해당 사용자에게 개체 사용 권한 및 수명 주기를 관리할 수 있는 권한을 부여할 수 있습니다.
Unity 카탈로그를 사용하여 데이터 개체에 대한 권한을 관리하는 방법은 Unity 카탈로그에서 권한 관리를 참조하세요.
공유 테이블의 데이터 읽기
Azure Databricks 사용자로 사용할 수 있는 도구(예: 카탈로그 탐색기, Notebooks, SQL 쿼리, Databricks CLI 및 Databricks REST API)를 사용하여 공유 테이블에서 데이터를 읽을 수 있습니다. 이때, 테이블에 대한 SELECT
권한이 있어야 합니다.
공유 볼륨에서 데이터 읽기
Azure Databricks 사용자로서 사용할 수 있는 도구(예: 카탈로그 탐색기, Notebooks, SQL 쿼리, Databricks CLI 및 Databricks REST API)를 사용하여 공유 볼륨에서 데이터를 읽을 수 있습니다. 이때, 볼륨에 대한 READ VOLUME
권한이 있어야 합니다.
추론을 위한 공유 모델 로드
공유 모델을 로드하고 일괄 처리 추론에 사용하는 방법에 대한 자세한 내용은 유추 워크로드에 대한 별칭별 모델 버전 로드를 참조 하세요.
테이블의 기록 데이터 쿼리
기록이 테이블과 함께 공유되는 경우 버전 또는 타임스탬프를 기준으로 테이블 데이터를 쿼리할 수 있습니다. Databricks Runtime 12.2 LTS 이상이 필요합니다.
예시:
SELECT * FROM vaccine.vaccine_us.vaccine_us_distribution VERSION AS OF 3;
SELECT * FROM vaccine.vaccine_us.vaccine_us_distribution TIMESTAMP AS OF "2023-01-01 00:00:00";
또한 CDF(변경 데이터 피드)가 테이블과 함께 사용하도록 설정된 경우 CDF를 쿼리할 수 있습니다. 버전과 타임스탬프 모두 지원됩니다.
SELECT * FROM table_changes('vaccine.vaccine_us.vaccine_us_distribution', 0, 3);
SELECT * FROM table_changes('vaccine.vaccine_us.vaccine_us_distribution', "2023-01-01 00:00:00", "2022-02-01 00:00:00");
변경 데이터 피드에 대한 자세한 내용은 Azure Databricks에서 Delta Lake 변경 데이터 피드 사용을 참조하세요.
Apache Spark 구조적 스트리밍을 사용하여 테이블 쿼리
테이블이 기록과 공유되는 경우 Spark 구조적 스트리밍의 원본으로 사용할 수 있습니다. Databricks Runtime 12.2 LTS 이상이 필요합니다.
지원되는 옵션:
ignoreDeletes
: 데이터를 삭제하는 트랜잭션을 무시합니다.ignoreChanges
:UPDATE
,MERGE INTO
,DELETE
(파티션 내) 또는OVERWRITE
와 같은 데이터 변경 작업으로 인해 원본 테이블에서 파일이 다시 작성된 경우 업데이트를 다시 처리합니다. 변경되지 않은 행은 계속 내보낼 수 있습니다. 따라서 다운스트림 소비자는 중복을 처리할 수 있어야 합니다. 삭제는 다운스트림으로 전파되지 않습니다.ignoreChanges
는ignoreDeletes
를 포함합니다. 따라서ignoreChanges
을 사용하면 원본 테이블을 삭제하거나 업데이트해도 스트림이 중단되지 않습니다.startingVersion
: 시작할 공유 테이블 버전입니다. 이 버전(포함)부터 시작하는 모든 테이블 변경 내용은 스트리밍 원본에서 읽습니다.startingTimestamp
: 시작할 타임스탬프입니다. 타임스탬프(포함) 또는 그 이후에 커밋된 모든 테이블 변경 내용은 스트리밍 원본에서 읽습니다. 예:"2023-01-01 00:00:00.0"
maxFilesPerTrigger
: 모든 마이크로 배치에서 고려할 새 파일의 수입니다.maxBytesPerTrigger
: 각 마이크로 배치에서 처리되는 데이터의 양입니다. 이 옵션은 "소프트 최대치"를 설정합니다. 배치는 대략 이 양의 데이터를 처리하며, 가장 작은 입력 단위가 이 한도를 초과하는 경우 스트리밍 쿼리를 진행하기 위해 제한을 초과하여 더 많은 데이터를 처리할 수 있습니다.readChangeFeed
: Stream에서 공유 테이블의 변경 데이터 피드를 읽습니다.
지원되지 않는 옵션:
Trigger.availableNow
구조적 스트림 쿼리 샘플
Scala
spark.readStream.format("deltaSharing")
.option("startingVersion", 0)
.option("ignoreChanges", true)
.option("maxFilesPerTrigger", 10)
.table("vaccine.vaccine_us.vaccine_us_distribution")
Python
spark.readStream.format("deltaSharing")\
.option("startingVersion", 0)\
.option("ignoreDeletes", true)\
.option("maxBytesPerTrigger", 10000)\
.table("vaccine.vaccine_us.vaccine_us_distribution")
테이블에서 CDF(변경 데이터 피드)를 사용하도록 설정한 경우 CDF를 스트리밍으로 읽을 수 있습니다.
spark.readStream.format("deltaSharing")
.option("readChangeFeed", "true")
.table("vaccine.vaccine_us.vaccine_us_distribution")
삭제 벡터 또는 열 매핑이 활성화된 테이블 읽기
Important
이 기능은 공개 미리 보기 상태입니다.
삭제 벡터는 공유된 델타 테이블에서 공급자가 활성화할 수 있는 스토리지 최적화 기능입니다. 삭제 벡터란?을 참조하세요.
Azure Databricks는 델타 테이블에 대한 열 매핑도 지원합니다. Delta Lake 열 매핑을 사용하여 열 이름 바꾸기 및 삭제를 참조하세요.
공급자가 삭제 벡터 또는 열 매핑을 사용하도록 설정된 테이블을 공유한 경우 SQL 웨어하우스 또는 Databricks Runtime 14.1 이상을 실행하는 클러스터를 사용하여 테이블에서 일괄 읽기를 수행할 수 있습니다. CDF 및 스트리밍 쿼리에는 Databricks Runtime 14.2 이상이 필요합니다.
일괄 처리 쿼리는 공유 테이블의 테이블 기능을 기반으로 responseFormat
을 자동으로 해결할 수 있으므로, 기본 설정 그대로 실행할 수 있습니다.
CDF(변경 데이터 피드)를 읽거나 삭제 벡터 또는 열 매핑을 사용하도록 설정된 공유 테이블에서 스트리밍 쿼리를 수행하려면 추가로 responseFormat=delta
옵션을 설정해야 합니다.
다음은 일괄 처리, CDF 및 스트리밍 쿼리에 대한 예제입니다.
import org.apache.spark.sql.SparkSession
// Batch query
spark.read.format("deltaSharing").table(<tableName>)
// CDF query
spark.read.format("deltaSharing")
.option("readChangeFeed", "true")
.option("responseFormat", "delta")
.option("startingVersion", 1)
.table(<tableName>)
// Streaming query
spark.readStream.format("deltaSharing").option("responseFormat", "delta").table(<tableName>)
공유 보기 읽기
Important
이 기능은 공개 미리 보기 상태입니다.
참고 항목
보기 공유는 Databricks-to-Databricks 공유에서만 지원됩니다.
공유 보기를 읽는 것은 공유 테이블 읽기와 동일하지만 다음과 같은 예외가 있습니다.
컴퓨팅 요구 사항:
- Azure Databricks 계정이 공급자의 계정과 다를 경우, 서버리스 SQL 웨어하우스를 사용하여 공유 보기를 쿼리해야 합니다.
- 공급자가 동일한 Azure Databricks 계정에 있는 경우 SQL 웨어하우스를 사용하거나 공유 액세스 모드를 사용하는 클러스터를 사용할 수 있습니다.
보기에 대한 제한 사항:
공유 보기를 참조하는 보기는 만들 수 없습니다.
보기 공유 제한 사항:
공유 테이블 또는 공유 보기를 참조하는 보기를 공유할 수 없습니다.
이름 지정 요구 사항:
공유 카탈로그에서 보기를 포함하는 카탈로그 이름은, 그 보기가 참조하는 테이블이 속한 공급자의 카탈로그 이름과 동일할 수 없습니다. 예를 들어, 공유 보기가 test
카탈로그에 포함되어 있으며, 그 보기가 참조하는 공급자의 테이블 중 하나가 공급자의 test
카탈로그에 포함된 경우, 쿼리를 실행할 때 네임스페이스 충돌 오류가 발생할 수 있습니다. 공유에서 카탈로그 만들기를 참조하세요.
기록 및 스트리밍:
기록을 쿼리하거나 보기를 스트리밍 원본으로 사용할 수 없습니다.
JDBC/ODBC:
이 문서에서는 Azure Databricks 사용자 인터페이스, 특히 Unity 카탈로그 구문과 인터페이스를 사용하여 공유된 데이터를 읽는 방법에 중점을 두고 있습니다. Apache Spark, Python 또는 Tableau, Power BI와 같은 BI 도구에서 Databricks JDBC/ODBC 드라이버를 통해 공유 보기를 쿼리할 수도 있습니다. Databricks JDBC/ODBC 드라이버에 연결하는 방법에 대한 자세한 내용은 Databricks ODBC 및 JDBC 드라이버를 참조하세요.
공유 Notebooks 읽기
공유 Notebooks 파일을 미리 보기 및 복제하려면 카탈로그 탐색기를 사용할 수 있습니다.
필요한 권한: 공유에서 만든 카탈로그에 USE CATALOG
권한을 가진 카탈로그 소유자 또는 사용자.
Azure Databricks 작업 영역에서 카탈로그를 클릭합니다.
왼쪽 창에서 카탈로그 메뉴를 확장하고 공유에서 만든 카탈로그를 찾아 선택합니다.
기타 자산 탭에서 공유된 Notebook 파일을 확인할 수 있습니다.
공유 Notebook 파일의 이름을 클릭하여 미리 봅니다.
(선택 사항) 복제 버튼을 클릭하여 공유 notebook 파일을 작업 영역으로 가져옵니다.
- 복제하기 대화 상자에서, 필요에 따라 새 이름을 입력한 후 복제할 Notebook 파일의 작업 영역 폴더를 선택합니다.
- 복제를 클릭합니다.
- Notebook이 복제되면 성공적으로 복제되었음을 알리는 대화 상자가 나타납니다. 대화 상자의 Notebook 편집기에서 표시를 클릭하여 편집기에서 복제된 파일을 확인하세요.
Databricks Notebooks 소개를 참조하세요.