Descrição
Formato especial para leitura de metadados de arquivo Parquet (https://parquet.apache.org/docs/file-format/metadata/). Ele sempre retorna uma linha com a seguinte estrutura/conteúdo:
num_columns- o número de colunas- ``num_rows` - o número total de linhas
num_row_groups- o número total de grupos de linhasformat_version- versão do formato Parquet, sempre 1.0 ou 2.6total_uncompressed_size- tamanho total, em bytes não comprimidos, dos dados, calculado como a soma de total_byte_size de todos os grupos de linhastotal_compressed_size- tamanho total, em bytes comprimidos, dos dados, calculado como a soma de total_compressed_size de todos os grupos de linhascolumns- a lista de metadados das colunas com a seguinte estrutura:name- nome da colunapath- caminho da coluna (difere do nome para coluna aninhada)max_definition_level- nível máximo de definiçãomax_repetition_level- nível máximo de repetiçãophysical_type- tipo físico da colunalogical_type- tipo lógico da colunacompression- compressão usada para esta colunatotal_uncompressed_size- tamanho total, em bytes não comprimidos, da coluna, calculado como a soma de total_uncompressed_size da coluna em todos os grupos de linhastotal_compressed_size- tamanho total, em bytes comprimidos, da coluna, calculado como a soma de total_compressed_size da coluna em todos os grupos de linhasspace_saved- percentual de espaço economizado pela compressão, calculado como (1 - total_compressed_size/total_uncompressed_size).encodings- a lista de codificações usadas para esta coluna
row_groups- a lista de metadados dos grupos de linhas com a seguinte estrutura:num_columns- o número de colunas no grupo de linhasnum_rows- o número de linhas no grupo de linhastotal_uncompressed_size- tamanho total, em bytes não comprimidos, do grupo de linhastotal_compressed_size- tamanho total, em bytes comprimidos, do grupo de linhascolumns- a lista de metadados dos fragmentos de coluna com a seguinte estrutura:name- nome da colunapath- caminho da colunatotal_compressed_size- tamanho total, em bytes comprimidos, da colunatotal_uncompressed_size- tamanho total, em bytes não comprimidos, do grupo de linhashave_statistics- flag booleana que indica se os metadados do fragmento de coluna contêm estatísticas da colunastatistics- estatísticas do fragmento de coluna (todos os campos são NULL se have_statistics = false) com a seguinte estrutura:num_values- o número de valores não nulos no fragmento de colunanull_count- o número de valores NULL no fragmento de colunadistinct_count- o número de valores distintos no fragmento de colunamin- o valor mínimo do fragmento de colunamax- o valor máximo do fragmento de coluna
Exemplo de uso
Exemplo:
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"
}
}
]
},
...
]
}