Parquet 메타데이터 조회
Parquet 메타데이터 조회 (Querying Parquet Metadata)
parquet_metadata 함수를 쓰면 Parquet 파일 안에 담긴 메타데이터를 조회할 수 있어요. 여기에는 각 컬럼의 통계 같은 Parquet 파일의 내부 세부 정보가 담겨 있어서, 어떤 종류의 스킵(skipping)이 가능한지 파악하거나 각 컬럼이 어떤 내용을 담고 있는지 빠르게 훑어보는 데 유용합니다. 이 함수는 glob 패턴을 지원해 여러 파일의 메타데이터를 병렬로 조회할 수 있어요.
출처: 공식문서
Parquet 메타데이터 (Parquet Metadata)
SELECT *
FROM parquet_metadata('test.parquet');
SELECT *
FROM parquet_metadata('data/*.parquet');
아래는 parquet_metadata가 반환하는 컬럼 표입니다.
| 필드 | 타입 |
|---|---|
| file_name | VARCHAR |
| row_group_id | BIGINT |
| row_group_num_rows | BIGINT |
| row_group_num_columns | BIGINT |
| row_group_bytes | BIGINT |
| column_id | BIGINT |
| file_offset | BIGINT |
| num_values | BIGINT |
| path_in_schema | VARCHAR |
| type | VARCHAR |
| stats_min | VARCHAR |
| stats_max | VARCHAR |
| stats_null_count | BIGINT |
| stats_distinct_count | BIGINT |
| stats_min_value | VARCHAR |
| stats_max_value | VARCHAR |
| compression | VARCHAR |
| encodings | VARCHAR |
| index_page_offset | BIGINT |
| dictionary_page_offset | BIGINT |
| data_page_offset | BIGINT |
| total_compressed_size | BIGINT |
| total_uncompressed_size | BIGINT |
| key_value_metadata | MAP(BLOB, BLOB) |
| bloom_filter_offset | BIGINT |
| bloom_filter_length | BIGINT |
| min_is_exact | BOOLEAN |
| max_is_exact | BOOLEAN |
| row_group_compressed_bytes | BIGINT |
Parquet 스키마 (Parquet Schema)
parquet_schema 함수로 Parquet 파일에 담긴 내부 스키마를 조회할 수 있습니다. 이건 Parquet 파일의 메타데이터에 들어 있는 스키마라는 점에 유의하세요. 컬럼 이름과 타입만 알고 싶다면 DESCRIBE를 쓰는 편이 더 쉽습니다.
컬럼 이름과 타입을 가져오려면:
DESCRIBE SELECT * FROM 'test.parquet';
Parquet 파일의 내부 스키마를 가져오려면:
SELECT *
FROM parquet_schema('test.parquet');
아래는 parquet_schema가 반환하는 컬럼 표입니다.
| 필드 | 타입 |
|---|---|
| file_name | VARCHAR |
| name | VARCHAR |
| type | VARCHAR |
| type_length | VARCHAR |
| repetition_type | VARCHAR |
| num_children | BIGINT |
| converted_type | VARCHAR |
| scale | BIGINT |
| precision | BIGINT |
| field_id | BIGINT |
| logical_type | VARCHAR |
Parquet 파일 메타데이터 (Parquet File Metadata)
parquet_file_metadata 함수로 포맷 버전이나 암호화 알고리즘 같은 파일 수준 메타데이터를 조회할 수 있어요:
SELECT *
FROM parquet_file_metadata('test.parquet');
아래는 parquet_file_metadata가 반환하는 컬럼 표입니다.
| 필드 | 타입 |
|---|---|
| file_name | VARCHAR |
| created_by | VARCHAR |
| num_rows | BIGINT |
| num_row_groups | BIGINT |
| format_version | BIGINT |
| encryption_algorithm | VARCHAR |
| footer_signing_key_metadata | VARCHAR |
| file_size_bytes | UBIGINT |
| footer_size | UBIGINT |
| column_orders | VARCHAR[] |
Parquet 키-값 메타데이터 (Parquet Key-Value Metadata)
parquet_kv_metadata 함수로 키-값 쌍으로 정의된 커스텀 메타데이터를 조회할 수 있습니다:
SELECT *
FROM parquet_kv_metadata('test.parquet');
아래는 parquet_kv_metadata가 반환하는 컬럼 표입니다.
| 필드 | 타입 |
|---|---|
| file_name | VARCHAR |
| key | BLOB |
| value | BLOB |
전체 메타데이터 (Full Metadata)
parquet_full_metadata 함수는 Parquet 파일의 모든 메타데이터를 한 행에 반환합니다. parquet_file_metadata, parquet_metadata, parquet_schema, parquet_kv_metadata의 결과를 중첩 STRUCT 배열로 합친 거예요:
SELECT *
FROM parquet_full_metadata('test.parquet');
| 필드 | 타입 |
|---|---|
| parquet_file_metadata | STRUCT(…)[] |
| parquet_metadata | STRUCT(…)[] |
| parquet_schema | STRUCT(…)[] |
| parquet_kv_metadata | STRUCT(…)[] |
각 STRUCT 배열은 대응하는 단독 함수가 반환하는 것과 같은 컬럼을 담고 있습니다.
블룸 필터 (Bloom Filters)
DuckDB는 선택성이 높은 쿼리를 처리하기 위해 읽어야 할 row group을 가지치기(pruning)할 때 블룸 필터를 지원합니다. 현재 다음 타입에 대해 블룸 필터를 지원해요.
- 정수 타입: TINYINT, UTINYINT, SMALLINT, USMALLINT, INTEGER, UINTEGER, BIGINT, UBIGINT
- 부동소수점 타입: FLOAT, DOUBLE
- VARCHAR
- BLOB
parquet_bloom_probe(filename, column_name, value) 함수는 주어진 컬럼의 주어진 값으로 필터링할 때 블룸 필터를 이용해 어떤 row group을 제외할 수 있는지 보여줍니다. 예를 들면:
FROM parquet_bloom_probe('my_file.parquet', 'my_col', 500);
| file_name | row_group_id | bloom_filter_excludes |
|---|---|---|
| my_file.parquet | 0 | true |
| … | … | … |
| my_file.parquet | 9 | false |
더 알아보기 (Learn more)
- DuckDB 공식 문서: Querying Parquet Metadata
- Parquet 개요: Parquet Overview
- Parquet 팁: Parquet Tips
- Parquet 암호화: Parquet Encryption