Apache Iceberg™ 테이블에 데이터 로드하기¶
Snowflake는 Snowflake가 관리하는 Iceberg 테이블에 데이터를 로딩할 때 다음과 같은 선택 사항을 지원합니다.
파일 형식¶
표준 Snowflake 테이블에 로드할 수 있도록 지원되는 형식의 파일에서 Iceberg 테이블로 데이터를 로드할 수 있습니다.
CSV, JSON, Avro 및 ORC 의 경우 Snowflake는 비 Parquet 파일 형식의 데이터를 Iceberg Parquet 파일로 변환하여 Iceberg 테이블의 기본 위치에 데이터를 저장합니다. 유형 변환이 필요한 이러한 파일 형식 로딩 시나리오에는 기본 LOAD_MODE = FULL_INGEST
옵션만 지원됩니다.
Apache Parquet 파일의 경우 Snowflake는 데이터를 테이블 열에 직접 로딩하고 다음 LOAD_MODE
옵션 중에서 선택할 수 있습니다.
FULL_INGEST
: 파일을 스캔하고 Iceberg 테이블의 기본 위치 아래에 Parquet 데이터를 다시 작성합니다.ADD_FILES_COPY
: Binary는 Iceberg 카탈로그에 등록되지 않은 Iceberg 호환 Apache Parquet 파일을 Iceberg 테이블의 기본 위치에 복사한 다음, 파일을 Iceberg 테이블에 등록합니다.
자세한 내용은 COPY INTO <테이블> 섹션을 참조하십시오.
예제: Iceberg 호환 Parquet 파일 로드하기¶
이 예제에서는 Iceberg 테이블을 생성한 다음 외부 스테이지의 Iceberg 호환 Parquet 데이터 파일에서 데이터를 로딩하는 방법을 다룹니다.
데모 목적으로 이 예제에서는 다음 리소스를 사용합니다.
iceberg_ingest_vol
이라는 외부 볼륨. 외부 볼륨을 생성하려면 외부 볼륨 구성 섹션을 참조하십시오.my_parquet_stage
라는 외부 스테이지에 Iceberg와 호환되는 Parquet 파일이 있습니다. 외부 스테이지를 생성하려면 CREATE STAGE 섹션을 참조하십시오.
Iceberg 호환 Parquet 데이터(
TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE
)를 복사하는 데 필요한 구성을 사용하여 스테이징된 Parquet 파일을 설명하는 파일 형식 오브젝트를 만듭니다.CREATE OR REPLACE FILE FORMAT my_parquet_format TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE;
원본 Parquet 파일 데이터 타입과 호환되는 데이터 타입으로 열을 정의하여 Snowflake 관리형 Iceberg 테이블을 만듭니다.
CREATE OR REPLACE ICEBERG TABLE customer_iceberg_ingest ( c_custkey INTEGER, c_name STRING, c_address STRING, c_nationkey INTEGER, c_phone STRING, c_acctbal INTEGER, c_mktsegment STRING, c_comment STRING ) CATALOG = 'SNOWFLAKE' EXTERNAL_VOLUME = 'iceberg_ingest_vol' BASE_LOCATION = 'customer_iceberg_ingest/';
참고
예제 문은 Snowflake 데이터 타입에 매핑되는 Iceberg 데이터 타입을 지정합니다. 자세한 내용은 Apache Iceberg™ 테이블의 데이터 타입 섹션을 참조하십시오.
COPY INTO 문을 사용하여 스테이징된 Parquet 파일(URL 경로 바로 아래에 위치)의 데이터를 Iceberg 테이블로 로드합니다.
COPY INTO customer_iceberg_ingest FROM @my_parquet_stage FILE_FORMAT = 'my_parquet_format' LOAD_MODE = ADD_FILES_COPY PURGE = TRUE MATCH_BY_COLUMN_NAME = CASE_SENSITIVE;
참고
이 예제에서는
LOAD_MODE = ADD_FILES_COPY
를 지정하여 Snowflake가 파일을 외부 볼륨 위치에 복사본으로 복사한 다음 파일을 테이블에 등록하도록 지시합니다.이 선택 사항은 원본 Parquet 파일을 스캔하여 데이터를 새 Parquet 파일로 다시 작성하지 않으므로 파일 요금을 피할 수 있습니다.
출력:
+---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+ | file | status | rows_parsed | rows_loaded | error_limit | errors_seen | first_error | first_error_line | first_error_character | first_error_column_name | |---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------| | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_008.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_006.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_005.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_002.parquet | LOADED | 5 | 5 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_010.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | +---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
테이블을 쿼리합니다.
SELECT c_custkey, c_name, c_mktsegment FROM customer_iceberg_ingest LIMIT 10;
출력:
+-----------+--------------------+--------------+ | C_CUSTKEY | C_NAME | C_MKTSEGMENT | |-----------+--------------------+--------------| | 75001 | Customer#000075001 | FURNITURE | | 75002 | Customer#000075002 | FURNITURE | | 75003 | Customer#000075003 | MACHINERY | | 75004 | Customer#000075004 | AUTOMOBILE | | 75005 | Customer#000075005 | FURNITURE | | 1 | Customer#000000001 | BUILDING | | 2 | Customer#000000002 | AUTOMOBILE | | 3 | Customer#000000003 | AUTOMOBILE | | 4 | Customer#000000004 | MACHINERY | | 5 | Customer#000000005 | HOUSEHOLD | +-----------+--------------------+--------------+