다음을 통해 공유


OneLake에서 빙산 테이블 사용

Microsoft OneLake에서 Apache Iceberg 테이블에 대한 바로 가기를 만들어 다양한 패브릭 워크로드에서 사용할 수 있습니다. 이 기능은 메타데이터 가상화라는 기능을 통해 가능하며, 이를 통해 Iceberg 테이블을 바로 가기의 관점에서 Delta Lake 테이블로 해석할 수 있습니다. Iceberg 테이블 폴더에 대한 바로 가기를 만들면 OneLake는 해당 테이블에 대한 해당 Delta Lake 메타데이터(델타 로그)를 자동으로 생성하여 바로 가기를 통해 Delta Lake 메타데이터에 액세스할 수 있도록 합니다.

Important

이 기능은 프리뷰로 제공됩니다.

Delta Lake 메타데이터 가상화를 보여 주는 다이어그램

이 문서에는 Snowflake에서 OneLake로 Iceberg 테이블을 작성하기 위한 지침이 포함되어 있지만, 이 기능은 Parquet 데이터 파일을 사용하여 모든 Iceberg 테이블로 작업하기 위한 것입니다.

Iceberg 테이블에 대한 테이블 바로 가기 만들기

OneLake 바로 가기에서 지원하는 스토리지 위치에 Iceberg 테이블이 이미 있는 경우 다음 단계에 따라 바로 가기를 만들고 Delta Lake 형식으로 Iceberg 테이블을 표시합니다.

  1. 빙산 테이블을 찾습니다. Azure Data Lake Storage, OneLake, Amazon S3, Google Cloud Storage 또는 S3 호환 스토리지 서비스에 있을 수 있는 Iceberg 테이블이 저장되는 위치를 찾습니다.

    참고 항목

    Snowflake를 사용하고 있으며 Iceberg 테이블이 저장되는 위치를 잘 모르는 경우 다음 문을 실행하여 Iceberg 테이블의 스토리지 위치를 확인할 수 있습니다.

    SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('<table_name>');

    이 문을 실행하면 Iceberg 테이블에 대한 메타데이터 파일의 경로가 반환됩니다. 이 경로는 Iceberg 테이블을 포함하는 스토리지 계정을 알려줍니다. 예를 들어 Azure Data Lake Storage에 저장된 Iceberg 테이블의 경로를 찾는 관련 정보는 다음과 같습니다.

    {"metadataLocation":"azure://<storage_account_path>/<path_within_storage>/<table_name>/metadata/00001-389700a2-977f-47a2-9f5f-7fd80a0d41b2.metadata.json","status":"success"}

    Iceberg 테이블 폴더에는 폴더가 포함되어 metadata 야 합니다. 이 폴더에는 하나 이상의 파일이 포함됩니다 .metadata.json.

  2. 패브릭 레이크하우스에서 스키마를 사용하지 않는 레이크하우스의 테이블 영역에 새 바로 가기를 만듭니다.

    참고 항목

    레이크하우스의 Tables 폴더 아래와 같은 dbo 스키마가 표시되는 경우 lakehouse는 스키마를 사용할 수 있으며 이 기능과 아직 호환되지 않습니다.

    테이블 아래의 바로 가기 만들기 메뉴 항목을 보여 주는 스크린샷

  3. 바로 가기의 대상 경로에 대해 Iceberg 테이블 폴더를 선택합니다. Iceberg 테이블 폴더에는 해당 폴더와 data 폴더가 metadata 포함됩니다.

  4. 바로 가기가 만들어지면 이 테이블이 Lakehouse에 Delta Lake 테이블로 반영되어 패브릭 전체에서 사용할 수 있도록 자동으로 표시됩니다.

    성공적인 Iceberg 테이블 바로 가기 만들기를 보여 주는 스크린샷

    새 Iceberg 테이블 바로 가기가 사용 가능한 테이블로 표시되지 않는 경우 문제 해결 섹션을 확인합니다.

Snowflake를 사용하여 OneLake에 빙산 테이블 작성

Azure에서 Snowflake를 사용하는 경우 다음 단계에 따라 OneLake에 Iceberg 테이블을 작성할 수 있습니다.

  1. 패브릭 용량이 Snowflake 인스턴스와 동일한 Azure 위치에 있는지 확인합니다.

    패브릭 레이크하우스와 연결된 패브릭 용량의 위치를 식별합니다. Lakehouse가 포함된 패브릭 작업 영역의 설정을 엽니다.

    패브릭 용량 지역을 보여 주는 스크린샷

    Azure 계정 인터페이스에서 Snowflake의 왼쪽 아래 모서리에서 Snowflake 계정의 Azure 지역을 확인합니다.

    Snowflake 계정 지역을 보여 주는 스크린샷

    이러한 지역이 다른 경우 Snowflake 계정과 동일한 지역에서 다른 패브릭 용량을 사용해야 합니다.

  2. 레이크하우스의 파일 영역에 대한 메뉴를 열고, 속성을 선택하고, 해당 폴더의 URL(HTTPS 경로)을 복사합니다.

    속성 메뉴 항목을 보여 주는 스크린샷

  3. 패브릭 테넌트 ID를 식별합니다. 패브릭 UI의 오른쪽 위 모서리에서 사용자 프로필을 선택하고 테넌트 이름 옆에 있는 정보 거품 위로 마우스를 가져다 줍니다. Tenant ID(테넌트 ID)를 복사합니다.

    테넌트 ID를 보여 주는 스크린샷

  4. Snowflake에서 레이크하우스의 Files 폴더 경로를 사용하여 설정합니다 EXTERNAL VOLUME . Snowflake 외부 볼륨 설정에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

    참고 항목

    Snowflake를 사용하려면 URL 구성표가 azure://필요하므로 변경 https:// 해야 합니다 azure://.

    CREATE OR REPLACE EXTERNAL VOLUME onelake_exvol
    STORAGE_LOCATIONS =
    (
        (
            NAME = 'onelake_exvol'
            STORAGE_PROVIDER = 'AZURE'
            STORAGE_BASE_URL = 'azure://<path_to_Files>/icebergtables'
            AZURE_TENANT_ID = '<Tenant_ID>'
        )
    );
    

    이 샘플에서는 이 외부 볼륨을 사용하여 만든 모든 테이블이 폴더 내의 Fabric Lakehouse에 Files/icebergtables 저장됩니다.

  5. 이제 외부 볼륨이 생성되었으므로 다음 명령을 실행하여 Snowflake가 OneLake에 쓰는 데 사용하는 애플리케이션의 동의 URL 및 이름을 검색합니다. 이 애플리케이션은 Snowflake 계정의 다른 외부 볼륨에서 사용됩니다.

    DESC EXTERNAL VOLUME onelake_exvol;
    

    이 명령의 출력은 및 속성을 반환 AZURE_CONSENT_URL 합니다 AZURE_MULTI_TENANT_APP_NAME . 두 값을 모두 기록해 둡다. Azure 다중 테넌트 앱 이름은 다음과 같지 <name>_<number>만 부분만 캡처 <name> 하면 됩니다.

  6. 새 브라우저 탭에서 이전 단계의 동의 URL을 엽니다. 계속 진행하려면 필요한 애플리케이션 권한에 동의합니다(메시지가 표시되면).

  7. Fabric으로 돌아가서 작업 영역을 열고 액세스 관리를 선택한 다음, 사용자 또는 그룹을 추가합니다. Snowflake 외부 볼륨에서 사용하는 애플리케이션에 작업 영역의 Lakehouse에 데이터를 쓰는 데 필요한 권한을 부여합니다. 기여자 역할을 부여하는 것이 좋습니다.

  8. Snowflake로 돌아가서 새 외부 볼륨을 사용하여 빙산 테이블을 만듭니다.

    CREATE OR REPLACE ICEBERG TABLE MYDATABASE.PUBLIC.Inventory (
        InventoryId int,
        ItemName STRING
    )
    EXTERNAL_VOLUME = 'onelake_exvol'
    CATALOG = 'SNOWFLAKE'
    BASE_LOCATION = 'Inventory/';
    

    이 문을 사용하면 인벤토리라는 새 Iceberg 테이블 폴더가 외부 볼륨에 정의된 폴더 경로 내에 만들어집니다.

  9. Iceberg 테이블에 일부 데이터를 추가합니다.

    INSERT INTO MYDATABASE.PUBLIC.Inventory
    VALUES
    (123456,'Amatriciana');
    
  10. 마지막으로, 동일한 레이크하우스 의 테이블 영역에서 Iceberg 테이블에 대한 OneLake 바로 가기를 만들 수 있습니다. 이 바로 가기를 통해 Iceberg 테이블은 패브릭 워크로드에서 사용할 수 있는 Delta Lake 테이블로 표시됩니다.

문제 해결

다음 팁은 Iceberg 테이블이 이 기능과 호환되는지 확인하는 데 도움이 될 수 있습니다.

Iceberg 테이블의 폴더 구조 확인

원하는 스토리지 탐색기 도구에서 Iceberg 폴더를 열고 원래 위치에서 Iceberg 폴더의 디렉터리 목록을 확인합니다. 다음 예제와 같은 폴더 구조가 표시됩니다.

../
|-- MyIcebergTable123/
    |-- data/
        |-- snow_A5WYPKGO_2o_APgwTeNOAxg_0_1_002.parquet
        |-- snow_A5WYPKGO_2o_AAIBON_h9Rc_0_1_003.parquet
    |-- metadata/
        |-- 00000-1bdf7d4c-dc90-488e-9dd9-2e44de30a465.metadata.json
        |-- 00001-08bf3227-b5d2-40e2-a8c7-2934ea97e6da.metadata.json
        |-- 00002-0f6303de-382e-4ebc-b9ed-6195bd0fb0e7.metadata.json
        |-- 1730313479898000000-Kws8nlgCX2QxoDHYHm4uMQ.avro
        |-- 1730313479898000000-OdsKRrRogW_PVK9njHIqAA.avro
        |-- snap-1730313479898000000-9029d7a2-b3cc-46af-96c1-ac92356e93e9.avro
        |-- snap-1730313479898000000-913546ba-bb04-4c8e-81be-342b0cbc5b50.avro

메타데이터 폴더가 표시되지 않거나 이 예제에 표시된 확장명이 있는 파일이 표시되지 않으면 제대로 생성된 Iceberg 테이블이 없을 수 있습니다.

변환 로그 확인

Iceberg 테이블이 Delta Lake 테이블로 가상화되면 바로 가기 폴더 내에서 명명된 _delta_log/ 폴더를 찾을 수 있습니다. 이 폴더에는 성공적으로 변환된 후 Delta Lake 형식의 메타데이터(델타 로그)가 포함됩니다.

이 폴더에는 최근 시도된 변환의 성공 또는 실패 세부 정보가 포함된 파일도 포함되어 latest_conversion_log.txt 있습니다.

바로 가기를 만든 후 이 파일의 내용을 보려면 레이크하우스의 테이블 영역에서 Iceberg 테이블 바로 가기 메뉴를 열고 파일 보기를 선택합니다.

스크린샷 파일 보기 메뉴 항목.

다음 예제와 같은 구조체가 표시됩니다.

Tables/
|-- MyIcebergTable123/
    |-- data/
        |-- <data files>
    |-- metadata/
        |-- <metadata files>
    |-- _delta_log/   <-- Virtual folder. This folder doesn't exist in the original location.
        |-- 00000000000000000000.json
        |-- latest_conversion_log.txt   <-- Conversion log with latest success/failure details.

변환 로그 파일을 열어 최신 변환 시간 또는 실패 세부 정보를 확인합니다. 변환 로그 파일이 표시되지 않으면 변환이 시도되지 않았습니다.

변환을 시도하지 않은 경우

변환 로그 파일이 표시되지 않으면 변환이 시도되지 않았습니다. 다음은 변환을 시도하지 않는 두 가지 일반적인 이유입니다.

  • 바로 가기가 올바른 위치에 만들어지지 않았습니다.

    Iceberg 테이블에 대한 바로 가기를 Delta Lake 형식으로 변환하려면 스키마를 사용하지 않는 레이크하우스의 Tables 폴더 바로 아래에 바로 가기를 배치해야 합니다. 테이블을 Delta Lake 테이블로 자동으로 가상화하려면 파일 섹션이나 다른 폴더 아래에 바로 가기를 배치해서는 안 됩니다.

    테이블 폴더에서 바로 가기의 올바른 배치를 보여 주는 스크린샷

  • 바로 가기의 대상 경로는 Iceberg 폴더 경로가 아닙니다.

    바로 가기를 만들 때 대상 스토리지 위치에서 선택한 폴더 경로는 Iceberg 테이블 폴더여야 합니다. 이 폴더에는 해당 폴더와 data 폴더가 metadata 포함됩니다.

    바로 가기를 만드는 동안 바로 가기 대상 경로의 내용을 보여 주는 스크린샷

제한 사항 및 고려 사항

이 기능을 사용하는 경우 다음과 같은 일시적인 제한 사항에 유의하세요.

  • 지원되는 데이터 유형

    다음 Iceberg 열 데이터 형식은 이 기능을 사용하여 해당 Delta Lake 형식에 매핑됩니다.

    빙산 열 유형 Delta Lake 열 형식 설명
    int integer
    long long 형식 너비 문제를 참조하세요.
    float float
    double double 형식 너비 문제를 참조하세요.
    decimal(P, S) decimal(P, S) 형식 너비 문제를 참조하세요.
    boolean boolean
    date date
    timestamp timestamp_ntz Iceberg 데이터 형식에는 timestamp 표준 시간대 정보가 포함되어 있지 않습니다. Delta Lake 유형은 timestamp_ntz 패브릭 워크로드에서 완전히 지원되지 않습니다. 표준 시간대가 포함된 타임스탬프를 사용하는 것이 좋습니다.
    timestamptz timestamp Snowflake에서 이 형식을 사용하려면 Iceberg 테이블을 만드는 동안 열 형식으로 지정 timestamp_ltz 합니다. Snowflake에서 지원되는 Iceberg 데이터 형식에 대한 자세한 내용은 여기를 참조하세요.
    string string
    binary binary
  • 형식 너비 문제

    Snowflake를 사용하여 Iceberg 테이블을 작성하고 테이블에 열 형식INT64doubleDecimal 있거나 전체 자릿수>가 10인 경우 결과 가상 Delta Lake 테이블은 모든 패브릭 엔진에서 사용할 수 없습니다. 다음과 같은 오류가 표시 될 수 있습니다.

    Parquet column cannot be converted in file ... Column: [ColumnA], Expected: decimal(18,4), Found: INT32.
    

    이 문제에 대한 수정 작업을 진행 중입니다.

    해결 방법: Lakehouse 테이블 미리 보기 UI를 사용하고 이 문제를 확인하는 경우 SQL 엔드포인트 보기(오른쪽 위 모서리, Lakehouse 보기 선택, SQL 엔드포인트로 전환)로 전환하고 여기에서 테이블을 미리 보고 이 오류를 해결할 수 있습니다. 그런 다음, Lakehouse 보기로 다시 전환하면 테이블 미리 보기가 제대로 표시됩니다.

    Spark Notebook 또는 작업을 실행하고 이 문제가 발생하는 경우 Spark 구성false을 .로 설정 spark.sql.parquet.enableVectorizedReader 하여 이 오류를 해결할 수 있습니다. 다음은 Spark Notebook에서 실행할 PySpark 명령의 예입니다.

    spark.conf.set("spark.sql.parquet.enableVectorizedReader","false")
    
  • Iceberg 테이블 메타데이터 스토리지가 이식 가능하지 않음

    Iceberg 테이블의 메타데이터 파일은 절대 경로 참조를 사용하여 서로를 참조합니다. Iceberg 메타데이터 파일을 다시 작성하지 않고 Iceberg 테이블의 폴더 내용을 다른 위치로 복사하거나 이동하면 이 OneLake 기능을 포함하여 Iceberg 판독기에서 테이블을 읽을 수 없게 됩니다.

    해결 방법:

    이 기능을 사용하기 위해 Iceberg 테이블을 다른 위치로 이동해야 하는 경우 원래 Iceberg 테이블을 작성한 도구를 사용하여 원하는 위치에 새 빙산 테이블을 작성합니다.

  • 빙산 테이블은 루트 수준보다 더 깊어야 합니다.

    스토리지의 Iceberg 테이블 폴더는 버킷 또는 컨테이너 수준보다 더 깊은 디렉터리에 있어야 합니다. 버킷 또는 컨테이너의 루트 디렉터리에 직접 저장된 Iceberg 테이블은 Delta Lake 형식으로 가상화되지 않을 수 있습니다.

    이 요구 사항을 제거하기 위해 개선 작업을 진행하고 있습니다.

    해결 방법:

    모든 Iceberg 테이블이 버킷 또는 컨테이너의 루트 디렉터리보다 더 깊은 디렉터리에 저장되어 있는지 확인합니다.

  • Iceberg 테이블 폴더에는 메타데이터 파일 집합이 하나만 포함되어야 합니다.

    Snowflake에서 Iceberg 테이블을 삭제하고 다시 만들면 메타데이터 파일이 정리되지 않습니다. 이 동작은 Snowflake의 UNDROP 기능을 지원합니다. 그러나 바로 가기는 폴더를 직접 가리키고 해당 폴더에는 여러 메타데이터 파일 집합이 있으므로 이전 테이블의 메타데이터 파일을 제거할 때까지 테이블을 변환할 수 없습니다.

    현재 이 시나리오에서는 변환을 시도하므로 가상화된 Delta Lake 테이블에 이전 테이블 내용과 스키마 정보가 표시될 수 있습니다.

    Iceberg 테이블의 메타데이터 폴더에 둘 이상의 메타데이터 파일 집합이 있는 경우 변환이 실패하는 수정 작업을 진행 중입니다.

    해결 방법:

    변환된 테이블에 올바른 버전의 테이블이 반영되도록 하려면 다음을 수행합니다.

    • 동일한 폴더에 둘 이상의 Iceberg 테이블을 저장하지 않는지 확인합니다.
    • 테이블을 다시 만들기 전에 삭제한 후 Iceberg 테이블 폴더의 내용을 정리합니다.
  • 메타데이터 변경 내용이 즉시 반영되지 않음

    열 추가, 열 삭제, 열 이름 바꾸기 또는 열 형식 변경과 같이 Iceberg 테이블을 메타데이터로 변경하는 경우 데이터 행 추가와 같이 데이터가 변경될 때까지 테이블을 다시 변환할 수 없습니다.

    최신 메타데이터 변경 내용을 포함하는 올바른 최신 메타데이터 파일을 선택하는 수정 작업을 진행 중입니다.

    해결 방법:

    Iceberg 테이블을 스키마를 변경한 후 데이터 행을 추가하거나 다른 변경 내용을 적용합니다. 변경된 후에는 Fabric에서 테이블의 최신 보기를 새로 고치고 볼 수 있습니다.

  • 스키마 사용 작업 영역은 아직 지원되지 않습니다.

    스키마 사용 레이크하우스에서 Iceberg 바로 가기를 만드는 경우 해당 바로 가기에 대한 변환이 발생하지 않습니다.

    이 제한을 제거하기 위해 개선 작업을 진행하고 있습니다.

    해결 방법:

    이 기능을 사용하여 스키마를 사용하지 않는 Lakehouse를 사용합니다. Lakehouse를 만드는 동안 이 설정을 구성할 수 있습니다.

  • 지역 가용성 제한

    이 기능은 아직 다음 지역에서 사용할 수 없습니다.

    • 카타르 중부
    • 노르웨이 서부

    해결 방법:

    다른 지역의 패브릭 용량에 연결된 작업 영역은 이 기능을 사용할 수 있습니다. Microsoft Fabric을 사용할 수 있는 지역의 전체 목록을 참조하세요.

  • 프라이빗 링크가 지원되지 않음

    이 기능은 현재 프라이빗 링크가 사용하도록 설정된 테넌트 또는 작업 영역에서 지원되지 않습니다.

    이 제한을 제거하기 위해 개선 작업을 진행하고 있습니다.

  • 테이블 크기 제한

    이 기능에서 지원하는 Iceberg 테이블의 크기에 대한 일시적인 제한이 있습니다. 지원되는 최대 Parquet 데이터 파일 수는 약 5,000개의 데이터 파일 또는 약 10억 개의 행이며, 이 중 첫 번째 제한이 발생합니다.

    이 제한을 제거하기 위해 개선 작업을 진행하고 있습니다.

  • OneLake 바로 가기는 동일한 지역이어야 합니다.

    OneLake 위치를 가리키는 바로 가기와 함께 이 기능을 사용하는 데 일시적으로 제한이 있습니다. 바로 가기의 대상 위치는 바로 가기 자체와 동일한 지역에 있어야 합니다.

    이 요구 사항을 제거하기 위해 개선 작업을 진행하고 있습니다.

    해결 방법:

    다른 레이크하우스의 빙산 테이블에 대한 OneLake 바로 가기가 있는 경우 다른 레이크하우스가 동일한 지역의 용량과 연결되어 있는지 확인합니다.