Microsoft OneLake는 Snowflake와 함께 Apache Iceberg 테이블의 저장 및 액세스에 사용할 수 있습니다.
이 가이드에 따라 Azure에서 Snowflake를 사용하여 다음을 수행합니다.
- OneLake에 직접 Iceberg 테이블 쓰기
- Delta Lake 형식에서 변환된 가상 Iceberg 테이블 읽기
Important
이 기능은 프리뷰 상태입니다.
시작하기 전에 아래 표시된 필수 구성 요소 단계를 수행합니다.
Prerequisite
Azure에서 Snowflake를 사용하여 OneLake로 Iceberg 테이블을 작성하거나 읽으려면 Entra ID의 Snowflake 계정 ID가 Fabric과 통신할 수 있어야 합니다. 서비스 주체가 패브릭 API와 OneLake API를 호출할 수 있도록 패브릭 테넌트 수준 설정을 활성화합니다.
Azure에서 Snowflake를 사용하여 OneLake에 Iceberg 테이블 작성
Azure에서 Snowflake를 사용하는 경우 다음 단계에 따라 OneLake에 Iceberg 테이블을 작성할 수 있습니다.
패브릭 용량이 Snowflake 인스턴스와 동일한 Azure 위치에 있는지 확인합니다.
패브릭 레이크하우스와 연결된 패브릭 용량의 위치를 식별합니다. Lakehouse가 포함된 패브릭 작업 영역의 설정을 엽니다.
Azure 계정 인터페이스에서 Snowflake의 왼쪽 아래 모서리에서 Snowflake 계정의 Azure 지역을 확인합니다.
이러한 지역이 다른 경우 Snowflake 계정과 동일한 지역에서 다른 패브릭 용량을 사용해야 합니다.
레이크하우스의 파일 영역에 대한 메뉴를 열고, 속성을 선택하고, 해당 폴더의 URL(HTTPS 경로)을 복사합니다.
패브릭 테넌트 ID를 식별합니다. 패브릭 UI의 오른쪽 위 모서리에서 사용자 프로필을 선택하고 테넌트 이름 옆에 있는 정보 거품 위로 마우스를 가져다 줍니다. Tenant ID(테넌트 ID)를 복사합니다.
Snowflake에서 레이크하우스의
EXTERNAL VOLUME폴더 경로를 사용하여Files을/를 설정하십시오. Snowflake 외부 볼륨 설정에 대한 자세한 내용은 여기에서 확인할 수 있습니다.Note
Snowflake를 사용하려면 URL 구성표가
azure://이어야 하므로, 경로를https://에서azure://로 변경해야 합니다.CREATE OR REPLACE EXTERNAL VOLUME onelake_write_exvol STORAGE_LOCATIONS = ( ( NAME = 'onelake_write_exvol' STORAGE_PROVIDER = 'AZURE' STORAGE_BASE_URL = 'azure://<path_to_lakehouse>/Files/icebergtables' AZURE_TENANT_ID = '<Tenant_ID>' ) );이 샘플에서는 이 외부 볼륨을 사용하여 만든 모든 테이블이 폴더 내의 Fabric Lakehouse에
Files/icebergtables저장됩니다.이제 외부 볼륨이 생성되었으므로 다음 명령을 실행하여 Snowflake가 OneLake에 쓰는 데 사용하는 애플리케이션의 동의 URL 및 이름을 검색합니다. 이 애플리케이션은 Snowflake 계정의 다른 외부 볼륨에서 사용됩니다.
DESC EXTERNAL VOLUME onelake_write_exvol;이 명령의 출력은 및 속성을 반환
AZURE_CONSENT_URL합니다AZURE_MULTI_TENANT_APP_NAME. 두 값을 모두 기록해 둡다. Azure 다중 테넌트 앱 이름은 다음과 같지<name>_<number>만 부분만 캡처<name>하면 됩니다.이전에 이 작업을 수행하지 않은 경우 새 브라우저 탭에서 이전 단계의 동의 URL을 엽니다. 계속 진행하려면 필요한 애플리케이션 권한에 동의합니다(메시지가 표시되면). 주 Snowflake 웹 사이트로 리디렉션될 수 있습니다.
Fabric으로 돌아가서 작업 영역을 열고 액세스 관리를 선택한 다음, 사용자 또는 그룹을 추가합니다. Snowflake 외부 볼륨에서 사용하는 애플리케이션에 작업 영역의 Lakehouse에 데이터를 쓰는 데 필요한 권한을 부여합니다. 기여자 역할을 부여하는 것이 좋습니다.
Snowflake로 돌아가서 새 외부 볼륨을 사용하여 빙산 테이블을 만듭니다.
CREATE OR REPLACE ICEBERG TABLE MYDATABASE.PUBLIC.Inventory ( InventoryId int, ItemName STRING ) EXTERNAL_VOLUME = 'onelake_write_exvol' CATALOG = 'SNOWFLAKE' BASE_LOCATION = 'Inventory/';이 문을 실행한 후 인벤토리라는 새 Iceberg 테이블 폴더가 외부 볼륨에 정의된 폴더 경로 내에 생성되었습니다.
Iceberg 테이블에 일부 데이터를 추가합니다.
INSERT INTO MYDATABASE.PUBLIC.Inventory VALUES (123456,'Amatriciana');마지막으로, 동일한 레이크하우스 의 테이블 영역에서 Iceberg 테이블에 대한 OneLake 바로 가기를 만들 수 있습니다. 이 바로 가기를 통해 Iceberg 테이블은 패브릭 워크로드에서 사용할 수 있는 Delta Lake 테이블로 표시됩니다.
Azure에서 Snowflake를 사용하여 OneLake의 가상 Iceberg 테이블을 읽기
Azure에서 Snowflake를 사용하여 Fabric의 Delta Lake 테이블을 기반으로 하는 가상 Iceberg 테이블을 읽으려면 다음 단계를 수행합니다.
가이드에 따라 Delta Lake 테이블이 Iceberg로 성공적으로 변환되었는지 확인하고 테이블이 포함된 데이터 항목의 경로와 테이블의 최신
*.metadata.json파일을 기록해 둡니다.패브릭 테넌트 ID를 식별합니다. 패브릭 UI의 오른쪽 위 모서리에서 사용자 프로필을 선택하고 테넌트 이름 옆에 있는 정보 거품 위로 마우스를 가져다 줍니다. Tenant ID(테넌트 ID)를 복사합니다.
Snowflake에서 테이블을 포함하는 데이터 항목의 폴더에 대한 경로를
EXTERNAL VOLUME사용하여 설정합니다Tables. Snowflake 외부 볼륨 설정에 대한 자세한 내용은 여기에서 확인할 수 있습니다.CREATE OR REPLACE EXTERNAL VOLUME onelake_read_exvol STORAGE_LOCATIONS = ( ( NAME = 'onelake_read_exvol' STORAGE_PROVIDER = 'AZURE' STORAGE_BASE_URL = 'azure://<path_to_data_item>/Tables/' AZURE_TENANT_ID = '<Tenant_ID>' ) ) ALLOW_WRITES = false;Note
Snowflake를 사용하려면 URL 구성표가
azure://필요하므로 변경https://해야 합니다azure://.<path_to_data_item>를https://onelake.dfs.fabric.microsoft.com/83896315-c5ba-4777-8d1c-e4ab3a7016bc/a95f62fa-2826-49f8-b561-a163ba537828와 같은 데이터 항목의 경로로 바꾸세요.이제 외부 볼륨이 생성되었으므로 다음 명령을 실행하여 Snowflake가 OneLake에 쓰는 데 사용하는 애플리케이션의 동의 URL 및 이름을 검색합니다. 이 애플리케이션은 Snowflake 계정의 다른 외부 볼륨에서 사용됩니다.
DESC EXTERNAL VOLUME onelake_read_exvol;이 명령의 출력은 및 속성을 반환
AZURE_CONSENT_URL합니다AZURE_MULTI_TENANT_APP_NAME. 두 값을 모두 기록해 둡다. Azure 다중 테넌트 앱 이름은 다음과 같지<name>_<number>만 부분만 캡처<name>하면 됩니다.이전에 이 작업을 수행하지 않은 경우 새 브라우저 탭에서 이전 단계의 동의 URL을 엽니다. 계속 진행하려면 필요한 애플리케이션 권한에 동의합니다(메시지가 표시되면). 주 Snowflake 웹 사이트로 리디렉션될 수 있습니다.
Fabric으로 돌아가서 작업 영역을 열고 액세스 관리를 선택한 다음, 사용자 또는 그룹을 추가합니다. Snowflake 외부 볼륨에서 사용하는 애플리케이션에 작업 영역의 데이터 항목에서 데이터를 읽는 데 필요한 권한을 부여합니다.
Tip
원하는 경우 데이터 항목 수준에서 사용 권한을 부여하도록 선택할 수 있습니다. OneLake 데이터 액세스에 대해 자세히 알아봅니다.
CATALOG INTEGRATION이전에 이 작업을 수행하지 않은 경우 Snowflake에서 개체를 만듭니다. 이는 Snowflake가 스토리지의 기존 빙산 테이블을 참조하는 데 필요합니다.CREATE CATALOG INTEGRATION onelake_catalog_integration CATALOG_SOURCE = OBJECT_STORE TABLE_FORMAT = ICEBERG ENABLED = TRUE;Snowflake로 돌아가서 OneLake의 가상화된 Iceberg 테이블에 대한 최신 메타데이터 파일을 참조하는 Iceberg 테이블을 만듭니다.
CREATE OR REPLACE ICEBERG TABLE MYDATABASE.PUBLIC.<TABLE_NAME> EXTERNAL_VOLUME = 'onelake_read_exvol' CATALOG = onelake_catalog_integration METADATA_FILE_PATH = '<metadata_file_path>';Note
<TABLE_NAME>을 테이블 이름으로,<metadata_file_path>을 Iceberg 테이블의 메타데이터 파일 경로(예:dbo/MyTable/metadata/321.metadata.json)로 바꾸십시오.이 문을 실행한 후 이제 Snowflake를 사용하여 쿼리할 수 있는 가상화된 Iceberg 테이블에 대한 참조가 있습니다.
다음 문을 실행하여 가상화된 Iceberg 테이블을 쿼리합니다.
SELECT TOP 10 * FROM MYDATABASE.PUBLIC.<TABLE_NAME>;
Troubleshooting
Delta Lake와 Apache Iceberg 테이블 형식 간의 OneLake 테이블 형식 가상화 및 변환 설명서의 문제 해결 및 제한 사항 및 고려 사항 섹션을 참조하세요.