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)