الوصف
تنسيق خاص لقراءة البيانات الوصفية لملف Parquet (https://parquet.apache.org/docs/file-format/metadata/). ويُخرج دائمًا صفًا واحدًا بالبنية/المحتوى التالي:
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- مسار العمود (يختلف عن الاسم في العمود المتداخل)max_definition_level- الحد الأقصى لمستوى التعريفmax_repetition_level- الحد الأقصى لمستوى التكرارphysical_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- قائمة البيانات الوصفية لأجزاء الأعمدة بالبنية التالية:name- اسم العمودpath- مسار العمودtotal_compressed_size- الحجم الإجمالي المضغوط للعمود بالبايتtotal_uncompressed_size- الحجم الإجمالي غير المضغوط لمجموعة الصفوف بالبايتhave_statistics- قيمة منطقية تشير إلى ما إذا كانت البيانات الوصفية لجزء العمود تحتوي على إحصاءات العمودstatistics- إحصاءات جزء العمود (تكون جميع الحقول NULL إذا كانت have_statistics = false) بالبنية التالية:num_values- عدد القيم غير NULL في جزء العمودnull_count- عدد قيم NULL في جزء العمودdistinct_count- عدد القيم المميزة في جزء العمودmin- القيمة الدنيا لجزء العمودmax- القيمة القصوى لجزء العمود
مثال على الاستخدام
مثال:
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"
}
}
]
},
...
]
}