يُحدَّد التقسيم للجدول عند تعريفه أول مرة عبر العبارة PARTITION BY. ويمكن أن تتضمن هذه العبارة تعبير SQL على أي أعمدة، وتُحدِّد نتائج هذا التعبير القسم الذي سيُرسَل إليه الصف.
ترتبط أجزاء البيانات منطقيًا بكل قسم على القرص، ويمكن الاستعلام عنها كلٌّ على حدة. في المثال أدناه، نقسّم جدول posts حسب السنة باستخدام التعبير toYear(CreationDate). وعند إدراج الصفوف في ClickHouse، سيُقيَّم هذا التعبير على كل صف ويُوجَّه إلى القسم الناتج إذا كان موجودًا (وإذا كان هذا الصف هو الأول لسنة معيّنة، فسيُنشأ القسم).
CREATE TABLE posts
(
`Id` Int32 CODEC(Delta(4), ZSTD(1)),
`PostTypeId` Enum8('Question' = 1, 'Answer' = 2, 'Wiki' = 3, 'TagWikiExcerpt' = 4, 'TagWiki' = 5, 'ModeratorNomination' = 6, 'WikiPlaceholder' = 7, 'PrivilegeWiki' = 8),
`AcceptedAnswerId` UInt32,
`CreationDate` DateTime64(3, 'UTC'),
...
`ClosedDate` DateTime64(3, 'UTC')
)
ENGINE = MergeTree
ORDER BY (PostTypeId, toDate(CreationDate), CreationDate)
PARTITION BY toYear(CreationDate)
اطّلع على تعيين تعبير التقسيم في قسم كيفية تعيين تعبير التقسيم.
في ClickHouse، ينبغي للمستخدمين اعتبار التقسيم في المقام الأول ميزةً لإدارة البيانات، لا أسلوبًا لتحسين الاستعلامات. فمن خلال فصل البيانات منطقيًا استنادًا إلى مفتاح، يمكن التعامل مع كل قسم على نحو مستقل، مثل حذفه. ويتيح ذلك للمستخدمين نقل الأقسام، وبالتالي المجموعات الفرعية، بين مستويات التخزين بكفاءة وفقًا للوقت، أو إتلاف البيانات/حذفها بكفاءة من العنقود.
يوفّر ALTER TABLE ... DROP PARTITION طريقة موفّرة من حيث التكلفة لحذف قسم كامل.
ALTER TABLE table_name [ON CLUSTER cluster] DROP PARTITION|PART partition_expr
يُعلِّم هذا الاستعلام القسم على أنه غير نشط، ويحذف البيانات نهائيًا خلال نحو 10 دقائق. ويجري تكرار هذا الاستعلام، لذا يحذف البيانات من جميع النسخ المتماثلة.
في المثال أدناه، نحذف منشورات عام 2008 من الجدول السابق بحذف القسم المرتبط.
SELECT DISTINCT partition
FROM system.parts
WHERE `table` = 'posts'
┌─partition─┐
│ 2008 │
│ 2009 │
│ 2010 │
│ 2011 │
│ 2012 │
│ 2013 │
│ 2014 │
│ 2015 │
│ 2016 │
│ 2017 │
│ 2018 │
│ 2019 │
│ 2020 │
│ 2021 │
│ 2022 │
│ 2023 │
│ 2024 │
└───────────┘
17 rows in set. Elapsed: 0.002 sec.
ALTER TABLE posts
(DROP PARTITION '2008')
0 rows in set. Elapsed: 0.103 sec.
آخر تعديل في ٢٩ يونيو ٢٠٢٦