يعرض، لكل (جزء أو عمود أو تدفق فرعي) في جدول MergeTree، عدد الكتل المضغوطة التي تستخدم كل برنامج الترميز. يتيح لك ذلك مراقبة اختيار برنامج الترميز التكيفي (المفعّل عبر الإعداد allow_experimental_adaptive_codec_selection)، الذي يمكنه اختيار برنامج الترميز لكل كتلة في الأعمدة ذات برنامج الترميز الافتراضي.
يؤدي اختيار codec_block_counts إلى قراءة ملفات البيانات .bin، وليس البيانات الوصفية فقط. أما الأعمدة الأخرى فتقتصر على البيانات الوصفية.
لا تُدرج الأجزاء التي لا تسجّل تدفقاتها الفرعية في columns_substreams.txt.
إذا انطبقت سياسة صفوف على الجدول بالنسبة إلى المستخدم الحالي، فإن قراءة codec_block_counts تطرح ACCESS_DENIED، لأن الأعداد ستشمل الصفوف التي تخفيها السياسة. تظل الأعمدة الأخرى قابلة للقراءة، ويعرض system.parts_columns تلك الأعمدة بغض النظر عن سياسات الصفوف.
الصياغة
mergeTreeCodecBlockCounts(database, table)الوسيطات
| الوسيطة | الوصف |
|---|---|
database |
اسم قاعدة البيانات التي يوجد فيها الجدول. |
table |
اسم جدول MergeTree. |
القيمة المُعادة
كائن جدول يحتوي على صف واحد لكل مجموعة من (الجزء النشط والعمود والتدفق الفرعي) في الجدول المصدر:
part_name(String) — جزء البيانات النشط الذي ينتمي إليه العمود.column(String) — اسم العمود.substream(String) — التدفق الفعلي للعمود الذي تتعلق به الأعداد. يطابقsystem.parts_columns.substreams.data_compressed_bytes(Nullable(UInt64)) — حجم البيانات المضغوطة في التدفق الفرعي، بالبايت. تكونNULLلأجزاءCompact.data_uncompressed_bytes(Nullable(UInt64)) — حجم البيانات غير المضغوطة في التدفق الفرعي، بالبايت. تكونNULLلأجزاءCompact.codec_block_counts(Map(String, UInt64)) — عدد الكتل المضغوطة في هذا التدفق الفرعي، مجمّعة حسب برنامج الترميز. تكون فارغة لأجزاءCompact، إذ تشترك أعمدتها في ملف بيانات واحد، ولذلك لا يمكن إسناد برنامج ترميز إلى كل تدفق على حدة.
مثال للاستخدام
CREATE TABLE mt (a UInt64) ENGINE = MergeTree ORDER BY a
SETTINGS min_bytes_for_wide_part = 0;
INSERT INTO mt SELECT number FROM numbers(100000);
SELECT column, substream, codec_block_counts
FROM mergeTreeCodecBlockCounts(currentDatabase(), mt);┌─column─┬─substream─┬─codec_block_counts─┐
│ a │ a │ {'LZ4':13} │
└────────┴───────────┴────────────────────┘إجماليات مستوى العمود هي GROUP BY column مع sumMap:
SELECT column, sumMap(codec_block_counts)
FROM mergeTreeCodecBlockCounts(currentDatabase(), mt)
GROUP BY column;يعرض العمود LowCardinality تدفّقات القاموس والفهارس كلًّا على حدة:
CREATE TABLE mt_lc (s LowCardinality(String)) ENGINE = MergeTree ORDER BY tuple()
SETTINGS min_bytes_for_wide_part = 0;
INSERT INTO mt_lc SELECT toString(number % 1000) FROM numbers(1000000);
SELECT substream, codec_block_counts
FROM mergeTreeCodecBlockCounts(currentDatabase(), mt_lc)
WHERE column = 's'
ORDER BY substream;┌─substream─┬─codec_block_counts─┐
│ s │ {'LZ4':31} │
│ s.dict │ {'LZ4':1} │
└───────────┴────────────────────┘