説明
Parquet ファイルのメタデータ (https://parquet.apache.org/docs/file-format/metadata/) を読み取るための特別なフォーマットです。常に、次の構造/内容を持つ 1 行を出力します。
num_columns- カラム数- ``num_rows` - 行の総数
num_row_groups- 行グループの総数format_version- Parquet フォーマットのバージョン。常に 1.0 または 2.6total_uncompressed_size- データの非圧縮バイトサイズの合計。すべての行グループの total_byte_size の合計として計算されますtotal_compressed_size- データの圧縮バイトサイズの合計。すべての行グループの total_compressed_size の合計として計算されますcolumns- 次の構造を持つカラムのメタデータ一覧:name- カラム名path- カラムパス (ネストされたカラムでは name と異なります)max_definition_level- 最大 definition levelmax_repetition_level- 最大 repetition levelphysical_type- カラムの物理型logical_type- カラムの論理型compression- このカラムで使用される圧縮total_uncompressed_size- カラムの非圧縮バイトサイズの合計。すべての行グループにおけるこのカラムの total_uncompressed_size の合計として計算されますtotal_compressed_size- カラムの圧縮バイトサイズの合計。すべての行グループにおけるこのカラムの total_compressed_size の合計として計算されますspace_saved- 圧縮によって削減された容量の割合。(1 - total_compressed_size/total_uncompressed_size) として計算されます。encodings- このカラムで使用されるエンコーディングの一覧
row_groups- 次の構造を持つ行グループのメタデータ一覧:num_columns- 行グループ内のカラム数num_rows- 行グループ内の行数total_uncompressed_size- 行グループの非圧縮バイトサイズの合計total_compressed_size- 行グループの圧縮バイトサイズの合計columns- 次の構造を持つカラム chunk のメタデータ一覧:name- カラム名path- カラムパスtotal_compressed_size- カラムの圧縮バイトサイズの合計total_uncompressed_size- 行グループの非圧縮バイトサイズの合計have_statistics- カラム chunk のメタデータにカラム STATISTICS が含まれているかどうかを示すブール値フラグstatistics- カラム chunk の統計情報 (have_statistics = falseの場合、すべてのフィールドは NULL) で、構造は次のとおりです:num_values- カラム chunk 内の非 NULL 値の数null_count- カラム chunk 内の NULL 値の数distinct_count- カラム chunk 内の一意な値の数min- カラム chunk の最小値max- カラム chunk の最大値
使用例
例:
SELECT *
FROM file(data.parquet, ParquetMetadata)
FORMAT PrettyJSONEachRow{
"num_columns": "2",
"num_rows": "100000",
"num_row_groups": "2",
"format_version": "2.6",
"metadata_size": "577",
"total_uncompressed_size": "282436",
"total_compressed_size": "26633",
"columns": [
{
"name": "number",
"path": "number",
"max_definition_level": "0",
"max_repetition_level": "0",
"physical_type": "INT32",
"logical_type": "Int(bitWidth=16, isSigned=false)",
"compression": "LZ4",
"total_uncompressed_size": "133321",
"total_compressed_size": "13293",
"space_saved": "90.03%",
"encodings": [
"RLE_DICTIONARY",
"PLAIN",
"RLE"
]
},
{
"name": "concat('Hello', toString(modulo(number, 1000)))",
"path": "concat('Hello', toString(modulo(number, 1000)))",
"max_definition_level": "0",
"max_repetition_level": "0",
"physical_type": "BYTE_ARRAY",
"logical_type": "None",
"compression": "LZ4",
"total_uncompressed_size": "149115",
"total_compressed_size": "13340",
"space_saved": "91.05%",
"encodings": [
"RLE_DICTIONARY",
"PLAIN",
"RLE"
]
}
],
"row_groups": [
{
"num_columns": "2",
"num_rows": "65409",
"total_uncompressed_size": "179809",
"total_compressed_size": "14163",
"columns": [
{
"name": "number",
"path": "number",
"total_compressed_size": "7070",
"total_uncompressed_size": "85956",
"have_statistics": true,
"statistics": {
"num_values": "65409",
"null_count": "0",
"distinct_count": null,
"min": "0",
"max": "999"
}
},
{
"name": "concat('Hello', toString(modulo(number, 1000)))",
"path": "concat('Hello', toString(modulo(number, 1000)))",
"total_compressed_size": "7093",
"total_uncompressed_size": "93853",
"have_statistics": true,
"statistics": {
"num_values": "65409",
"null_count": "0",
"distinct_count": null,
"min": "Hello0",
"max": "Hello999"
}
}
]
},
...
]
}