Apache Iceberg™ 고정[L] 열에 삽입 시 정확한 길이 적용(미리 보기)

주의

이 동작 변경 사항은 2026_02 번들에 포함되어 있습니다.

번들의 현재 상태는 번들 기록 섹션을 참조하십시오.

Snowflake는 Iceberg fixed[L] 열 유형에 정확한 길이 삽입을 적용합니다.

변경 전:

Iceberg fixed[L] 데이터 타입을 사용하는 열은 정의된 길이 ‘L’(바이트)까지의 이진 값을 허용합니다. L보다 짧은 값이 허용됩니다.

값이 L보다 길면 쿼리가 실패합니다.

변경 후:

Iceberg fixed[L] 데이터 타입을 사용하는 열은 정의된 길이 ‘L’(바이트)과 정확히 일치하는 이진 값을 허용합니다. L보다 짧은 이진 값을 삽입하려고 시도하는 INSERT 문은 오류를 발생시킵니다.

이러한 변경으로 Snowflake는 Iceberg 사양 및 기타 Iceberg 호환 엔진(예: Apache Spark™)에 맞춰 조정됩니다.

다음 목록에는 이러한 변경 사항이 활성화된 후의 동작이 요약되어 있습니다.

  • 이러한 변경 사항은 신규 및 기존 Iceberg 테이블 모두에 적용됩니다.

  • 이러한 변경 사항은 Snowflake 관리 Iceberg 테이블과 외부 관리 Iceberg 테이블 모두에 적용됩니다.

  • 읽기와 관련하여 이러한 변경 사항은 이전 스냅샷이나 Time Travel에는 영향을 주지 않습니다. Snowflake는 DML 작업 중 Iceberg fixed[L] 데이터 타입의 길이만 확인하므로 기존 스냅샷은 계속 읽을 수 있습니다.

  • 쓰기와 관련하여 이러한 변경 사항을 활성화하는 경우 Snowflake는 Time Travel을 포함하여 쓰기 작업 중 항상 올바른 Iceberg fixed[L] 데이터 타입의 길이를 적용합니다. 정의된 길이 ‘L’(바이트)과 정확히 일치하지 않는 이진 값을 삽입하려고 시도하는 쓰기 작업은 항상 실패합니다. 값이 L보다 길면 쿼리가 계속 실패합니다.

서비스 중단을 방지하기 위해 수행해야 할 작업은 :ref:`label-bcr_2246_identify_impacted_columns`입니다.

영향을 받는 열 식별 및 해결

이 섹션에서는 열이 BCR의 영향을 받는지 여부를 식별하고 영향을 받는 열을 해결하는 방법을 보여줍니다.

1단계: 영향을 받는 열 식별

영향을 받는 열이 있는지 확인하려면 다음 단계를 따릅니다.

  1. DESCRIBE ICEBERG TABLE 명령을 실행합니다.

    출력에서 소스 Iceberg 유형이 :code:`fixed[L]`인 열을 찾습니다. Iceberg 유형이 :code:`fixed[L]`인 열을 찾은 경우 다음 단계로 진행합니다.

  2. 다음 쿼리를 실행합니다.

    SELECT BOOLOR_AGG(OCTET_LENGTH(<column_name>) != L) from <table_name>
    
    Copy

    쿼리가 true를 반환하면 열에 잘못된 길이의 값이 포함되어 열이 영향을 받습니다.

2단계: 영향을 받는 열 해결

영향을 받는 열을 해결하려면 다음 중 하나를 수행합니다.

영향을 받는 열에 최대 길이까지 임의 크기의 이진 값 삽입 허용

영향을 받는 열을 해결하기 위해 영향을 받는 열에 최대 길이까지 임의 크기의 이진 값을 삽입하도록 허용할 수 있습니다.

이러한 해결 방법을 통해 테이블의 메타데이터와 물리적 파일이 Iceberg 사양에 맞춰 조정되면 외부 엔진과 호환될 수 있습니다.

영향을 받는 열에 최대 길이까지 임의 크기의 이진 값을 삽입할 수 있도록 허용하려면 다음 지침을 따릅니다.

  • Spark와 같은 외부 엔진에서 테이블에 액세스하는 경우 BINARY 열 유형을 사용하여 테이블을 다시 생성해야 합니다.

    BINARY 열 유형을 사용하여 테이블을 다시 생성하려면 다음 단계를 따릅니다.

    1. 영향을 받는 열이 있는 테이블을 기반으로 새 테이블을 생성하고 채우려면 CREATE ICEBERG TABLE … AS SELECT(CTAS라고도 함) 명령을 실행하고 영향을 받는 열의 데이터 타입으로 이진을 지정합니다.

      다음 예제에서는 새 테이블의 b 열에 대한 데이터 타입이 이진으로 지정된 CTAS 문을 보여줍니다.

      CREATE ICEBERG TABLE my_table (..., b binary) AS SELECT * FROM my_old_table
      
      Copy
    2. DROP ICEBERG TABLE 명령을 사용하여 영향을 받는 열이 있는 테이블을 제거합니다.

  • 또는 ALTER ICEBERG TABLE 열을 실행하여 열의 데이터 타입을 BINARY로 설정해 테이블 스키마를 진화시킬 수 있습니다.

    중요

    ALTER ICEBERG TABLE 문을 실행하여 열 데이터 타입을 BINARY로 변경하려면 먼저 `Snowflake 지원`_에 문의하여 계정에서 이 기능을 활성화해야 합니다.

    예를 들어, 다음 문은 열 ``c``의 데이터 타입을 ``BINARY``로 변경하여 테이블 ``t``의 스키마를 진화시킵니다.

    ALTER ICEBERG TABLE t ALTER COLUMN c SET DATA TYPE BINARY;
    
    Copy

    이러한 접근 방식은 BCR 기간 동안 영향을 받는 고객을 위해 임시로 지원되는 솔루션입니다. 이러한 접근 방식의 장점은 전체 테이블을 다시 생성하는 대신 테이블 스키마만 업데이트하면 된다는 점입니다.

    중요

    이러한 접근 방식은 유효한 Iceberg 유형 승격이 아니므로 외부 엔진이 유효하지 않은 유형 승격을 감지하고 테이블을 새로 고치지 못할 수 있습니다. 따라서 외부 엔진에서 읽거나 외부 엔진에서 쓰지 않는 Snowflake 관리 Iceberg 테이블에만 이러한 접근 방식을 사용해야 합니다.

길이가 정확히 L인 고정 길이 이진 값을 영향을 받는 열에 삽입하도록 허용

길이가 정확히 L인 고정 길이 이진 값을 영향을 받는 열에 삽입할 수 있도록 허용하려면 트리밍 또는 패딩을 사용하는 등 워크플로를 조정하여 입력한 값의 크기가 대상 크기와 일치하는지 확인합니다. 또한 Iceberg 열 유형 :code:`fixed(L)`로 Iceberg 테이블을 다시 생성하여 이전에 테이블에 삽입한 값의 크기가 정의된 길이 L과 정확히 일치하는지 확인하는 것이 좋습니다.

Ref: 2246