ืฉืืื ืจื, ืืื.
ืื ืืืฉืื ืื ืฆื ืืช ืืืขืจืืช
ClickHouse ืคืืชืจ ืืืื ืืช ืืืขืืืช ืืืชืืืจืืช. ืืืืืื, ืืืืจ ืืขืืจืช 2TiB ืฉื ื ืชืื ืื ืืืืืฉื, ืื ืืชืืืืื ื-300GiB. ืื ืืชืขืื ืขื ืืืฉืืืื ืืคืืจืื; ืืฉ ืืจืื ืืืืจืื ืื ืืฉื ืื. ืื ืืกืฃ, ืขื ืืืืจืื ื, ืื ืืื ืืื ืืืฉืื ืขื ืืืกืื ื-ClickHouse ืฉืื ื.
ืืขืืืช ืขื ืฉืื ื ืฆืจื
ืืืื ืจืืฉืื, ืืื ืืืืจ ืืขืืื ืืื ืฉืฆืจืื. ืืื retention
), ืืื ืฆืืจ ืืืื ืืคื ืืืืืฆื ืฉื ืืงืฆื ืืืืืจื ืฉื ืืืจ ืขืืืจ graphite-web:
ืืื ืืืืื ืืืื ืืื, ืืชื ืฆืจืื ืืืขืช ืืื ืคืืขืืื ืชืืกืคืืช ืืืช ืืกืืื ืืืืื ืื ืืกืฃ ืฉื ื ืชืื ืื ืืืืืืืช ืฉื ืื ืืขื ืืฉืคืืช *MergeTree ClickHouse (ืชืจืฉืืืื ืฉื ืืงืื ื
- ืืึผืื ึธืก
ะฑะปะพะบ
ื ืชืื ืื. ืืืงืจื ืฉืื ื, ืืื ืืืืืื ืฉืืืืขื.
- ืื ืืืืง ืืื ืืืืื ืืคื ืืืคืชื ืืคื ื ืืืชืืื ืืืืกืง.
ORDER BY
ืฉืฆืืื ืืขืช โโืืฆืืจืช ืืืืื. - ืืืืจ ืืืื,
ะบััะพะบ
(part
) ืื ืชืื ืื ื ืืชืืื ืืืืกืง.
- ืืฉืจืช ืขืืงื ืืจืงืข ืื ืฉืืื ืืจืื ืืืงืื ืืืื, ืืืฉืืง ืจืงืข
ัะปะธัะฝะธั
(merge
, ืืืื ืืืืื).
- ืืฉืจืช ืืคืกืืง ืืืจืืฅ ืืืืืืื ืืขืฆืื ืืจืืข ืฉืื ืชืื ืื ืืคืกืืงืื ืืืจืื ืืืืคื ืคืขืื ืืชืื ืืฉืจืช
ะฟะฐััะธัะธั
(partition
), ืืื ืืชื ืืืื ืืืชืืื ืืช ืืชืืืื ืืืืคื ืืื ื ืขื ืืคืงืืืOPTIMIZE
. - ืื ื ืืชืจื ืจืง ืืืง ืืื ืืืืืฆื, ืื ืชืืื ืืืจืืฅ ืืช ืืืืืื ืืืืฆืขืืช ืืคืงืืื ืืจืืืื; ืขืืื ืืืฉืชืืฉ
OPTIMIZE ... FINAL
ืื, ืืืืืื ืืจืืฉืื ืื ืืืืขืื. ืืื ืชืืคืกืื ืงืฆืช ืืงืื. ืืืจืืขืื ืืืืื ืขืฉืืืื ืืืฉืชื ืืช ืืืืื ืืกืืืืช ืืืชืื ืืืืจืืื ืจืืื:
- ืืคืชื ืืืืืฆืืช ืืืื ืืืืืช ืงืื ืืืื (ืืื) ืื ืืืื ืืืื (ืืกืคืจ ืืืืฉืื).
- ืชืฆืืจืช ืืฉืืืจื ืขืฉืืื ืืืชืืื ืืืกืคืจ ืกืคื ืฆืืืจืช ื ืชืื ืื ืืฉืืขืืชืืื ืืชืื ืืืืืฆื ืืคืขืืื (ืฉื ื ืจืฉืืื ืืืืื), ืื ืฉืื.
- ืื ืืฉ ืืจืื ื ืชืื ืื, ืื ืื ืชืืื ืืืืงืืืื ืืืืชืจ, ืฉืืฉื ืืืืื ืืจืงืข ืขืฉืืืื ืืืืืช ืืืจ ืขื ืงืืื (ืื ืชืืืจื ืืืคืชื ืืืืฆืืช ืื ืืืคืืืืื), ืื ืืชืืืื ืืขืฆืื ืขื ื ืชืืื ืงืื ืื ืืจืืื.
ืืื ืชืืื ื ืืืจ ืืืชื ืืืจ. ืืฉืื ืฉืชืืคืก ืขื ืืื ืืืืื ื-ClickHouse ืืื ืจืง ืื:
- ืื ืืืื
OPTIMIZE ... FINAL
ืืื ืืช ืื - ืื ืชืื ืืก ื ืชืื ืื ืืื ืืืืืฆืืช ืืืืคื ืฉืืืฃ, ืื ืฉืืืืงืื ืื ืืืืืืจ ืืชืืื ืืืืื ืจืงืข
ื ืจืื ืฉืืฉืืื ืืฉื ืืื ืืื ืืงืื ืืืืชืจ ืืืืฉืื, ืืืื ืืื ืฉืืืื ืื ืืกืชื ืชืืืื.
ืืชืืชื ืกืงืจืืคื ืคืืชืื ืคืฉืื ืืืื ืฉืฉืื ืืืื ืืื ืืื ืืื ื-4 ืืฉื ืื ืืืืจืื ืืช ืืืจืืฅ ืงืจืื ืื ืฉืขื.
ืืืืืื ืฉืื ืืคืขืืื ืฉื ClickHouse DBMS ืืืืกืกืช ืขื ืืขืืืื ืฉืืืขืจืืช ืืื ืชืขืฉื ืืืืงืื ืื ืืืืืืจ ืืช ืื ืขืืืืช ืืจืงืข, ืืื ืื ืืืืข ืืชื, ืื ืืืืืชื ืืืืืช ืืจืืข ืฉืื ืืืืงืื ืืขื ืงืืื ืืืฉื ืื ืืชืขืืืคืื ืืืชืืื ืืืชืืื ืขื ืงืื ืื ืืืฉืื. ืืชืืจืจ ืฉืขืืื ื ืืืคืฉ ืืจื ืืืคืื ืืืคืืืืืืฆืืืช ืืคืืืืช ืืืืืืืืืืช.
ืืืืข ืืืืืืืช ืืขืจืืช ClickHouse
ืืืื ื ืกืชืื ืขื ืืื ื ืืืืื
- ืฉื db (
database
); - ืฉื ืฉืืืื (
table
); - ืฉื ืืืืื ืืืืฆื (
partition
&partition_id
); - ืืืฉืจ ืืืฆืืจื ื ืืฆืจื (
modification_time
); - ืชืืจืื ืืื ืืืื ืืืงืกืืืื ืืืฆืืจื (ืืืืืงื ืืชืืฆืขืช ืืคื ืืื) (
min_date
&max_date
);
ืืฉ ืื ืฉืืืื
- ืฉื db (
Tables.database
); - ืฉื ืฉืืืื (
Tables.table
); - ืืื ืืืจื ืฉืื ืืฉ ืืืืื ืืช ืืฆืืืจื ืืืื (
age
);
ืื:
- ืืฉ ืื ื ืืืื ืฉื ื ืชืืื ืืืืื ืฉื ืืืื ืฆืืืจื.
- ืื ื ืืฉืืืื ืืช ืืฆืืืช ืฉืืื ืืืงืืืื ืืช ืื ืืืืืืืช *GraphiteMergeTree.
- ืื ื ืืืคืฉืื ืืช ืื ืืืืืฆืืช ืืื:
- ืืืชืจ ืืืชืืื ืืืช
- ืื ืฉืืืืข ืืืื ืืืืื ืืช ืืื ืืฆืืืจื ืืื, ื
modification_time
ืืฉื ืืืชืจ ืืืจืืข ืืื.
ะ ะตะฐะปะธะทะฐัะธั
ืืืงืฉื ืืืืช
SELECT
concat(p.database, '.', p.table) AS table,
p.partition_id AS partition_id,
p.partition AS partition,
-- ะกะฐะผะพะต "ััะฐัะพะต" ะฟัะฐะฒะธะปะพ, ะบะพัะพัะพะต ะผะพะถะตั ะฑััั ะฟัะธะผะตะฝะตะฝะพ ะดะปั
-- ะฟะฐััะธัะธะธ, ะฝะพ ะฝะต ะฒ ะฑัะดััะตะผ, ัะผ (*)
max(g.age) AS age,
-- ะะพะปะธัะตััะฒะพ ะบััะบะพะฒ ะฒ ะฟะฐััะธัะธะธ
countDistinct(p.name) AS parts,
-- ะะฐ ัะฐะผัั ััะฐัััั ะผะตััะธะบั ะฒ ะฟะฐััะธัะธะธ ะฟัะธะฝะธะผะฐะตััั 00:00:00 ัะปะตะดัััะตะณะพ ะดะฝั
toDateTime(max(p.max_date + 1)) AS max_time,
-- ะะพะณะดะฐ ะฟะฐััะธัะธั ะดะพะปะถะฝะฐ ะฑััั ะพะฟัะธะผะธะทะธัะพะฒะฐะฝะฝะฐ
max_time + age AS rollup_time,
-- ะะพะณะดะฐ ัะฐะผัะน ััะฐััะน ะบััะพะบ ะฒ ะฟะฐััะธัะธะธ ะฑัะป ะพะฑะฝะพะฒะปัะฝ
min(p.modification_time) AS modified_at
FROM system.parts AS p
INNER JOIN
(
-- ะัะต ะฟัะฐะฒะธะปะฐ ะดะปั ะฒัะตั
ัะฐะฑะปะธั *GraphiteMergeTree
SELECT
Tables.database AS database,
Tables.table AS table,
age
FROM system.graphite_retentions
ARRAY JOIN Tables
GROUP BY
database,
table,
age
) AS g ON
(p.table = g.table)
AND (p.database = g.database)
WHERE
-- ะขะพะปัะบะพ ะฐะบัะธะฒะฝัะต ะบััะบะธ
p.active
-- (*) ะ ัะพะปัะบะพ ัััะพะบะธ, ะณะดะต ะฟัะฐะฒะธะปะฐ ะฐะณะณัะตะณะฐัะธะธ ัะถะต ะดะพะปะถะฝั ะฑััั ะฟัะธะผะตะฝะตะฝั
AND ((toDateTime(p.max_date + 1) + g.age) < now())
GROUP BY
table,
partition
HAVING
-- ะขะพะปัะบะพ ะฟะฐััะธัะธะธ, ะบะพัะพััะต ะผะปะฐะดัะต ะผะพะผะตะฝัะฐ ะพะฟัะธะผะธะทะฐัะธะธ
(modified_at < rollup_time)
-- ะะปะธ ั ะฝะตัะบะพะปัะบะธะผะธ ะบััะบะฐะผะธ
OR (parts > 1)
ORDER BY
table ASC,
partition ASC,
age ASC
ืืืืืจื ืื ืืืช ืืืืืฆืืช ืืืืื *GraphiteMergeTree ืฉืืืืืื ืฉืืื ืืืืจ ืืคื ืืช ืฉืื ืืืกืง. ืืืืจ ืืืืื ืฉื ืืชืจ ืืขืฉืืช ืืื ืืขืืืจ ืขื ืืืื ืขื ืืงืฉื OPTIMIZE ... FINAL
. ืืืืฉืื ืืกืืคื ืืืงื ืืืฉืืื ืื ืืช ืืขืืืื ืฉืืื ืฆืืจื ืืืขืช ืืืืืฆืืช ืขื ืืงืืื ืคืขืืื.
ืื ืืืืืง ืื ืฉืืคืจืืืงื ืขืืฉื
ืื ืชืคืขืื ืืช ืืชืืื ืืช ืขื ืฉืจืช ืขื ClickHouse, ืืื ืคืฉืื ืชืชืืื ืืขืืื ืืืฆื ืืืื. ืืืช ืืฉืขื ืชืืืฆืข ืฉืืืืชื, ืฉืชืืืืง ืืื ืืืคืืขื ืืืืฆืืช ืืืฉืืช ืื ืืช ืืืชืจ ืืฉืืืฉื ืืืื ืฉื ืืชื ืืืฆืข ืืืคืืืืืืฆืื.
ืืชืืื ืืืช ืืืืืืืืช ืฉืื ื ืื ืืกืคืง ืืคืืืช ืืืืืืช ืื, ืืื ืืคืฉืจ ืื ืกื"ื.
ืืืงืื ืืกืงื ื
ืืืืื 9+ ืืืืืฉืื ืืืืจืื ืื ืืืืชื ืืืืจื ืฉืื
ืืื ืืืืจืื ืฉื ืืืจื ืืืื ื ืืืื ืืืฉืงืขื ืืคืืชืื ืืืงืฉื, ืืื ืขื
ืืงืืจ: www.habr.com