Merge branch 'master' of github.com:yandex/ClickHouse

This commit is contained in:
Alexey Milovidov 2020-03-13 23:07:07 +03:00
commit 4d637aace5
70 changed files with 1176 additions and 11399 deletions

3
.gitmodules vendored
View File

@ -148,3 +148,6 @@
path = contrib/avro path = contrib/avro
url = https://github.com/ClickHouse-Extras/avro.git url = https://github.com/ClickHouse-Extras/avro.git
ignore = untracked ignore = untracked
[submodule "website/images/feathericons"]
path = website/images/feathericons
url = https://github.com/feathericons/feather

View File

@ -10,6 +10,10 @@
</any_of> </any_of>
</stop_conditions> </stop_conditions>
<settings>
<max_memory_usage>30000000000</max_memory_usage>
</settings>
<substitutions> <substitutions>
<substitution> <substitution>
<name>arg</name> <name>arg</name>
@ -34,45 +38,30 @@
<value>multiply</value> <value>multiply</value>
<value>divide</value> <value>divide</value>
<value>intDivOrZero</value> <value>intDivOrZero</value>
<value>modulo</value>
<value>moduloOrZero</value> <value>moduloOrZero</value>
</values> </values>
</substitution> </substitution>
</substitutions> </substitutions>
<create_query> <create_query>
CREATE TABLE nums CREATE TABLE nums ENGINE Memory AS
( WITH number as x
u8 UInt8, SELECT
u16 UInt16, toUInt8(x) u8,
u32 UInt32, toUInt16(x) u16,
u64 UInt64, toUInt32(x) u32,
i8 Int8, toUInt64(x) u64,
i16 Int16, toInt8(x) i8,
i32 Int32, toInt16(x) i16,
i64 Int64, toInt32(x) i32,
f32 Float32, toInt64(x) i64,
f64 Float64 toFloat32(x) f32,
) ENGINE = Memory; toFloat64(x) f64
FROM numbers_mt(200000000)
SETTINGS max_threads = 4
;
</create_query> </create_query>
<fill_query>
INSERT INTO nums
WITH cityHash64(number) AS x
SELECT
toUInt8(x),
toUInt16(x),
toUInt32(x),
toUInt64(x),
toInt8(x),
toInt16(x),
toInt32(x),
toInt64(x),
toFloat32(x),
toFloat64(x)
FROM numbers(100000000);
</fill_query>
<query>SELECT count() FROM nums WHERE NOT ignore({op}({arg}, {arg}))</query> <query>SELECT count() FROM nums WHERE NOT ignore({op}({arg}, {arg}))</query>
<drop_query>DROP TABLE nums</drop_query> <drop_query>DROP TABLE nums</drop_query>

View File

@ -1,6 +1,4 @@
<test> <test>
<stop_conditions> <stop_conditions>
<all_of> <all_of>
<total_time_ms>30000</total_time_ms> <total_time_ms>30000</total_time_ms>
@ -10,27 +8,33 @@
</any_of> </any_of>
</stop_conditions> </stop_conditions>
<settings>
<max_memory_usage>30000000000</max_memory_usage>
</settings>
<create_query>CREATE TABLE moving_sum_100m(k UInt64, v UInt64) ENGINE = MergeTree ORDER BY k</create_query> <substitutions>
<create_query>CREATE TABLE moving_sum_1000m(k UInt64, v UInt64) ENGINE = MergeTree ORDER BY k</create_query> <substitution>
<name>millions</name>
<values>
<value>50</value>
<value>100</value>
</values>
</substitution>
<substitution>
<name>window</name>
<values>
<value>10</value>
<value>1000</value>
<value>10000</value>
</values>
</substitution>
</substitutions>
<fill_query>INSERT INTO moving_sum_100m SELECT number%100, rand() from numbers(100000000)</fill_query> <create_query>create table moving_sum_{millions}m engine MergeTree order by k as select number % 100 k, rand() v from numbers_mt(1000000 * {millions})</create_query>
<fill_query>INSERT INTO moving_sum_1000m SELECT number%100, rand() from numbers(1000000000)</fill_query> <create_query>optimize table moving_sum_{millions}m final</create_query>
<query tag='MovingSumSize10_1M'>SELECT k,groupArrayMovingSum(10)(v) FROM moving_sum_100m GROUP BY k FORMAT Null</query> <query>select k, groupArrayMovingSum({window})(v) from moving_sum_{millions}m group by k format Null</query>
<query tag='MovingSumSize10WithKey_1M'>SELECT k,groupArrayMovingSum(10)(v) FROM moving_sum_100m WHERE k in (49, 50, 51) GROUP BY k FORMAT Null</query> <query>select k % 10 kk, groupArrayMovingSum({window})(v) from moving_sum_{millions}m group by kk format Null</query>
<query tag='MovingSumSize1000_1M'>SELECT k,groupArrayMovingSum(1000)(v) FROM moving_sum_100m GROUP BY k FORMAT Null</query>
<query tag='MovingSumSize1000WithKey_1M'>SELECT k,groupArrayMovingSum(1000)(v) FROM moving_sum_100m WHERE k in (49, 50, 51) GROUP BY k FORMAT Null</query>
<query tag='MovingSumSize10000_1M'>SELECT k,groupArrayMovingSum(10000)(v) FROM moving_sum_100m GROUP BY k FORMAT Null</query>
<query tag='MovingSumSize10000WithKey_1M'>SELECT k,groupArrayMovingSum(10000)(v) FROM moving_sum_100m WHERE k in (49, 50, 51) GROUP BY k FORMAT Null</query>
<query tag='MovingSumSize10_10M'>SELECT k,groupArrayMovingSum(10)(v) FROM moving_sum_1000m GROUP BY k FORMAT Null</query> <drop_query>drop table if exists moving_sum_{millions}m</drop_query>
<query tag='MovingSumSize10WithKey_10M'>SELECT k,groupArrayMovingSum(10)(v) FROM moving_sum_1000m WHERE k in (49, 50, 51) GROUP BY k FORMAT Null</query>
<query tag='MovingSumSize1000_10M'>SELECT k,groupArrayMovingSum(1000)(v) FROM moving_sum_1000m GROUP BY k FORMAT Null</query>
<query tag='MovingSumSize1000WithKey_10M'>SELECT k,groupArrayMovingSum(1000)(v) FROM moving_sum_1000m WHERE k in (49, 50, 51) GROUP BY k FORMAT Null</query>
<query tag='MovingSumSize10000_10M'>SELECT k,groupArrayMovingSum(10000)(v) FROM moving_sum_1000m GROUP BY k FORMAT Null</query>
<query tag='MovingSumSize10000WithKey_10M'>SELECT k,groupArrayMovingSum(10000)(v) FROM moving_sum_1000m WHERE k in (49, 50, 51) GROUP BY k FORMAT Null</query>
<drop_query>DROP TABLE IF EXISTS moving_sum_1000m</drop_query>
<drop_query>DROP TABLE IF EXISTS moving_sum_100m</drop_query>
</test> </test>

View File

@ -22,6 +22,11 @@
</any_of> </any_of>
</stop_conditions> </stop_conditions>
<preconditions>
<table_exists>file('test_all_expr_matches.values', Values, 'd DateTime, i UInt32, s String, ni Nullable(UInt64), ns Nullable(String), ars Array(String)')</table_exists>
<table_exists>file('test_some_expr_matches.values', Values, 'i Int64, ari Array(Int64), ars Array(String)')</table_exists>
</preconditions>
<query>select * from file('test_all_expr_matches.values', Values, 'd DateTime, i UInt32, s String, ni Nullable(UInt64), ns Nullable(String), ars Array(String)')</query> <query>select * from file('test_all_expr_matches.values', Values, 'd DateTime, i UInt32, s String, ni Nullable(UInt64), ns Nullable(String), ars Array(String)')</query>
<query>select * from file('test_some_expr_matches.values', Values, 'i Int64, ari Array(Int64), ars Array(String)')</query> <query>select * from file('test_some_expr_matches.values', Values, 'i Int64, ari Array(Int64), ars Array(String)')</query>

View File

@ -9,11 +9,11 @@
<create_query>CREATE TABLE ints (i64 Int64, i32 Int32, i16 Int16, i8 Int8) ENGINE = Memory</create_query> <create_query>CREATE TABLE ints (i64 Int64, i32 Int32, i16 Int16, i8 Int8) ENGINE = Memory</create_query>
<fill_query>INSERT INTO ints SELECT number AS i64, i64 AS i32, i64 AS i16, i64 AS i8 FROM numbers(50000)</fill_query> <fill_query>INSERT INTO ints SELECT number AS i64, i64 AS i32, i64 AS i16, i64 AS i8 FROM numbers(10000)</fill_query>
<fill_query>INSERT INTO ints SELECT 10000 + number % 1000 AS i64, i64 AS i32, i64 AS i16, i64 AS i8 FROM numbers(50000)</fill_query> <fill_query>INSERT INTO ints SELECT 10000 + number % 1000 AS i64, i64 AS i32, i64 AS i16, i64 AS i8 FROM numbers(10000)</fill_query>
<fill_query>INSERT INTO ints SELECT 20000 + number % 100 AS i64, i64 AS i32, i64 AS i16, i64 AS i8 FROM numbers(50000)</fill_query> <fill_query>INSERT INTO ints SELECT 20000 + number % 100 AS i64, i64 AS i32, i64 AS i16, i64 AS i8 FROM numbers(10000)</fill_query>
<fill_query>INSERT INTO ints SELECT 30000 + number % 10 AS i64, i64 AS i32, i64 AS i16, i64 AS i8 FROM numbers(50000)</fill_query> <fill_query>INSERT INTO ints SELECT 30000 + number % 10 AS i64, i64 AS i32, i64 AS i16, i64 AS i8 FROM numbers(10000)</fill_query>
<fill_query>INSERT INTO ints SELECT 40000 + number % 1 AS i64, i64 AS i32, i64 AS i16, i64 AS i8 FROM numbers(50000)</fill_query> <fill_query>INSERT INTO ints SELECT 40000 + number % 1 AS i64, i64 AS i32, i64 AS i16, i64 AS i8 FROM numbers(10000)</fill_query>
<query tag='ANY LEFT'>SELECT COUNT() FROM ints l ANY LEFT JOIN ints r USING i64 WHERE i32 = 200042</query> <query tag='ANY LEFT'>SELECT COUNT() FROM ints l ANY LEFT JOIN ints r USING i64 WHERE i32 = 200042</query>
<query tag='ANY LEFT KEY'>SELECT COUNT() FROM ints l ANY LEFT JOIN ints r USING i64,i32,i16,i8 WHERE i32 = 200042</query> <query tag='ANY LEFT KEY'>SELECT COUNT() FROM ints l ANY LEFT JOIN ints r USING i64,i32,i16,i8 WHERE i32 = 200042</query>
@ -40,8 +40,8 @@
<query tag='FULL ON'>SELECT COUNT() FROM ints l FULL JOIN ints r ON l.i64 = r.i64 WHERE i32 = 200042</query> <query tag='FULL ON'>SELECT COUNT() FROM ints l FULL JOIN ints r ON l.i64 = r.i64 WHERE i32 = 200042</query>
<query tag='FULL IN'>SELECT COUNT() FROM ints l FULL JOIN ints r USING i64 WHERE i32 IN(42, 100042, 200042, 300042, 400042)</query> <query tag='FULL IN'>SELECT COUNT() FROM ints l FULL JOIN ints r USING i64 WHERE i32 IN(42, 100042, 200042, 300042, 400042)</query>
<query tag='CROSS'>SELECT COUNT() FROM ints l CROSS JOIN (SELECT number as i64 FROM numbers(4)) WHERE i32 = 42</query> <query tag='CROSS'>SELECT COUNT() FROM ints l CROSS JOIN (SELECT number as i64 FROM numbers(4)) r WHERE i32 = 42</query>
<query tag='CROSS KEY'>SELECT COUNT() FROM ints l CROSS JOIN (SELECT number as i64 FROM numbers(4)) WHERE i32 = 42</query> <query tag='CROSS KEY'>SELECT COUNT() FROM ints l CROSS JOIN (SELECT number as i64 FROM numbers(4)) r WHERE i32 = 42</query>
<drop_query>DROP TABLE IF EXISTS ints</drop_query> <drop_query>DROP TABLE IF EXISTS ints</drop_query>
</test> </test>

View File

@ -1,23 +1,38 @@
<test> <test>
<stop_conditions> <stop_conditions>
<any_of> <any_of>
<iterations>2</iterations> <iterations>2</iterations>
</any_of> </any_of>
</stop_conditions> </stop_conditions>
<main_metric>
<rows_per_second />
</main_metric>
<preconditions> <preconditions>
<table_exists>default.hits_10m_single</table_exists> <table_exists>default.hits_10m_single</table_exists>
</preconditions> </preconditions>
<create_query>CREATE TABLE hits2 AS hits_10m_single</create_query> <create_query>
<fill_query>set max_insert_threads=8</fill_query> CREATE TABLE hits2 ENGINE MergeTree
PARTITION BY toYYYYMM(EventDate)
ORDER BY (CounterID, EventDate, intHash32(UserID))
SAMPLE BY intHash32(UserID)
SETTINGS
parts_to_delay_insert = 5000,
parts_to_throw_insert = 5000
AS
-- don't select all columns to keep the run time down
SELECT CounterID, EventDate, UserID, Title
FROM hits_10m_single
-- do not select anything because we only need column types
LIMIT 0
</create_query>
<fill_query>SET max_insert_threads=8</fill_query>
<fill_query>SYSTEM STOP MERGES</fill_query>
<query>INSERT INTO hits2 SELECT * FROM hits_10m_single</query> <query>
INSERT INTO hits2
SELECT CounterID, EventDate, UserID, Title
FROM hits_10m_single
</query>
<drop_query>SYSTEM START MERGES</drop_query>
<drop_query>DROP TABLE IF EXISTS hits2</drop_query> <drop_query>DROP TABLE IF EXISTS hits2</drop_query>
</test> </test>

View File

@ -6,6 +6,10 @@
</any_of> </any_of>
</stop_conditions> </stop_conditions>
<settings>
<max_memory_usage>30000000000</max_memory_usage>
</settings>
<!-- 9. Генератор случайных чисел. <!-- 9. Генератор случайных чисел.
Функция rand представляет собой linear congruential generator (то есть, целочисленное умножение на константу и сложение с константой), возвращающий 32-битные целые случайные числа. Функция rand представляет собой linear congruential generator (то есть, целочисленное умножение на константу и сложение с константой), возвращающий 32-битные целые случайные числа.

View File

@ -17,7 +17,7 @@
<settings> <settings>
<max_memory_usage>20000000000</max_memory_usage> <max_memory_usage>30000000000</max_memory_usage>
</settings> </settings>
<substitutions> <substitutions>
@ -31,47 +31,47 @@
</substitutions> </substitutions>
<query>SELECT count() FROM {table}</query> <query>SELECT count() FROM {table}</query>
<query>SELECT count() FROM {table} WHERE AdvEngineID != 0</query> <query>SELECT count() FROM hits_10m_single WHERE AdvEngineID != 0</query>
<query>SELECT sum(AdvEngineID), count(), avg(ResolutionWidth) FROM {table}</query> <query>SELECT sum(AdvEngineID), count(), avg(ResolutionWidth) FROM {table}</query>
<query>SELECT sum(UserID) FROM {table}</query> <query>SELECT sum(UserID) FROM {table}</query>
<query>SELECT uniq(UserID) FROM {table}</query> <query>SELECT uniq(UserID) FROM {table} FORMAT Null</query>
<query>SELECT uniq(SearchPhrase) FROM {table}</query> <query>SELECT uniq(SearchPhrase) FROM {table} FORMAT Null</query>
<query>SELECT min(EventDate), max(EventDate) FROM {table}</query> <query>SELECT min(EventDate), max(EventDate) FROM {table}</query>
<query>SELECT AdvEngineID, count() FROM {table} WHERE AdvEngineID != 0 GROUP BY AdvEngineID ORDER BY count() DESC</query> <query>SELECT AdvEngineID, count() FROM hits_10m_single WHERE AdvEngineID != 0 GROUP BY AdvEngineID ORDER BY count() DESC LIMIT 10</query>
<query>SELECT RegionID, uniq(UserID) AS u FROM {table} GROUP BY RegionID ORDER BY u DESC LIMIT 10</query> <query>SELECT RegionID, uniq(UserID) AS u FROM {table} GROUP BY RegionID ORDER BY u DESC LIMIT 10</query>
<query>SELECT RegionID, sum(AdvEngineID), count() AS c, avg(ResolutionWidth), uniq(UserID) FROM {table} GROUP BY RegionID ORDER BY c DESC LIMIT 10</query> <query>SELECT RegionID, sum(AdvEngineID), count() AS c, avg(ResolutionWidth), uniq(UserID) FROM {table} GROUP BY RegionID ORDER BY c DESC LIMIT 10</query>
<query>SELECT MobilePhoneModel, uniq(UserID) AS u FROM {table} WHERE MobilePhoneModel != '' GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10</query> <query>SELECT MobilePhoneModel, uniq(UserID) AS u FROM hits_100m_single WHERE MobilePhoneModel != '' GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10</query>
<query>SELECT MobilePhone, MobilePhoneModel, uniq(UserID) AS u FROM {table} WHERE MobilePhoneModel != '' GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10</query> <query>SELECT MobilePhone, MobilePhoneModel, uniq(UserID) AS u FROM {table} WHERE MobilePhoneModel != '' GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10</query>
<query>SELECT SearchPhrase, count() AS c FROM {table} WHERE SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10</query> <query>SELECT SearchPhrase, count() AS c FROM hits_100m_single WHERE SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10</query>
<query>SELECT SearchPhrase, uniq(UserID) AS u FROM {table} WHERE SearchPhrase != '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10</query> <query>SELECT SearchPhrase, uniq(UserID) AS u FROM {table} WHERE SearchPhrase != '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10</query>
<query>SELECT SearchEngineID, SearchPhrase, count() AS c FROM {table} WHERE SearchPhrase != '' GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10</query> <query>SELECT SearchEngineID, SearchPhrase, count() AS c FROM {table} WHERE SearchPhrase != '' GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10</query>
<query>SELECT UserID, count() FROM {table} GROUP BY UserID ORDER BY count() DESC LIMIT 10</query> <query>SELECT UserID, count() FROM {table} GROUP BY UserID ORDER BY count() DESC LIMIT 10</query>
<query>SELECT UserID, SearchPhrase, count() FROM {table} GROUP BY UserID, SearchPhrase ORDER BY count() DESC LIMIT 10</query> <query>SELECT UserID, SearchPhrase, count() FROM {table} GROUP BY UserID, SearchPhrase ORDER BY count() DESC LIMIT 10</query>
<query>SELECT UserID, SearchPhrase, count() FROM {table} GROUP BY UserID, SearchPhrase LIMIT 10</query> <query>SELECT UserID, SearchPhrase, count() FROM {table} GROUP BY UserID, SearchPhrase LIMIT 10</query>
<query>SELECT UserID, toMinute(EventTime) AS m, SearchPhrase, count() FROM {table} GROUP BY UserID, m, SearchPhrase ORDER BY count() DESC LIMIT 10</query> <query>SELECT UserID, toMinute(EventTime) AS m, SearchPhrase, count() FROM {table} GROUP BY UserID, m, SearchPhrase ORDER BY count() DESC LIMIT 10</query>
<query>SELECT UserID FROM {table} WHERE UserID = 12345678901234567890</query> <query>SELECT count() FROM hits_10m_single WHERE UserID = 12345678901234567890</query>
<query>SELECT count() FROM {table} WHERE URL LIKE '%metrika%'</query> <query>SELECT count() FROM hits_100m_single WHERE URL LIKE '%metrika%'</query>
<query>SELECT SearchPhrase, any(URL), count() AS c FROM {table} WHERE URL LIKE '%metrika%' AND SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10</query> <query>SELECT SearchPhrase, any(URL), count() AS c FROM hits_100m_single WHERE URL LIKE '%metrika%' AND SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10</query>
<query>SELECT SearchPhrase, any(URL), any(Title), count() AS c, uniq(UserID) FROM {table} WHERE Title LIKE '%Яндекс%' AND URL NOT LIKE '%.yandex.%' AND SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10</query> <query>SELECT SearchPhrase, any(URL), any(Title), count() AS c, uniq(UserID) FROM {table} WHERE Title LIKE '%Яндекс%' AND URL NOT LIKE '%.yandex.%' AND SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10</query>
<query>SELECT * FROM {table} WHERE URL LIKE '%metrika%' ORDER BY EventTime LIMIT 10</query> <query>SELECT * FROM {table} WHERE URL LIKE '%metrika%' ORDER BY EventTime LIMIT 10</query>
<query>SELECT SearchPhrase FROM {table} WHERE SearchPhrase != '' ORDER BY EventTime LIMIT 10</query> <query>SELECT SearchPhrase FROM hits_100m_single WHERE SearchPhrase != '' ORDER BY EventTime LIMIT 10</query>
<query>SELECT SearchPhrase FROM {table} WHERE SearchPhrase != '' ORDER BY SearchPhrase LIMIT 10</query> <query>SELECT SearchPhrase FROM hits_100m_single WHERE SearchPhrase != '' ORDER BY SearchPhrase LIMIT 10</query>
<query>SELECT SearchPhrase FROM {table} WHERE SearchPhrase != '' ORDER BY EventTime, SearchPhrase LIMIT 10</query> <query>SELECT SearchPhrase FROM hits_100m_single WHERE SearchPhrase != '' ORDER BY EventTime, SearchPhrase LIMIT 10</query>
<query>SELECT CounterID, avg(length(URL)) AS l, count() AS c FROM {table} WHERE URL != '' GROUP BY CounterID HAVING c > 100000 ORDER BY l DESC LIMIT 25</query> <query>SELECT CounterID, avg(length(URL)) AS l, count() AS c FROM {table} WHERE URL != '' GROUP BY CounterID HAVING c > 100000 ORDER BY l DESC LIMIT 25</query>
<query>SELECT domainWithoutWWW(Referer) AS key, avg(length(Referer)) AS l, count() AS c, any(Referer) FROM {table} WHERE Referer != '' GROUP BY key HAVING c > 100000 ORDER BY l DESC LIMIT 25</query> <query>SELECT domainWithoutWWW(Referer) AS key, avg(length(Referer)) AS l, count() AS c, any(Referer) FROM {table} WHERE Referer != '' GROUP BY key HAVING c > 100000 ORDER BY l DESC LIMIT 25</query>
<query>SELECT sum(ResolutionWidth), sum(ResolutionWidth + 1), sum(ResolutionWidth + 2), sum(ResolutionWidth + 3), sum(ResolutionWidth + 4), sum(ResolutionWidth + 5), sum(ResolutionWidth + 6), sum(ResolutionWidth + 7), sum(ResolutionWidth + 8), sum(ResolutionWidth + 9), sum(ResolutionWidth + 10), sum(ResolutionWidth + 11), sum(ResolutionWidth + 12), sum(ResolutionWidth + 13), sum(ResolutionWidth + 14), sum(ResolutionWidth + 15), sum(ResolutionWidth + 16), sum(ResolutionWidth + 17), sum(ResolutionWidth + 18), sum(ResolutionWidth + 19), sum(ResolutionWidth + 20), sum(ResolutionWidth + 21), sum(ResolutionWidth + 22), sum(ResolutionWidth + 23), sum(ResolutionWidth + 24), sum(ResolutionWidth + 25), sum(ResolutionWidth + 26), sum(ResolutionWidth + 27), sum(ResolutionWidth + 28), sum(ResolutionWidth + 29), sum(ResolutionWidth + 30), sum(ResolutionWidth + 31), sum(ResolutionWidth + 32), sum(ResolutionWidth + 33), sum(ResolutionWidth + 34), sum(ResolutionWidth + 35), sum(ResolutionWidth + 36), sum(ResolutionWidth + 37), sum(ResolutionWidth + 38), sum(ResolutionWidth + 39), sum(ResolutionWidth + 40), sum(ResolutionWidth + 41), sum(ResolutionWidth + 42), sum(ResolutionWidth + 43), sum(ResolutionWidth + 44), sum(ResolutionWidth + 45), sum(ResolutionWidth + 46), sum(ResolutionWidth + 47), sum(ResolutionWidth + 48), sum(ResolutionWidth + 49), sum(ResolutionWidth + 50), sum(ResolutionWidth + 51), sum(ResolutionWidth + 52), sum(ResolutionWidth + 53), sum(ResolutionWidth + 54), sum(ResolutionWidth + 55), sum(ResolutionWidth + 56), sum(ResolutionWidth + 57), sum(ResolutionWidth + 58), sum(ResolutionWidth + 59), sum(ResolutionWidth + 60), sum(ResolutionWidth + 61), sum(ResolutionWidth + 62), sum(ResolutionWidth + 63), sum(ResolutionWidth + 64), sum(ResolutionWidth + 65), sum(ResolutionWidth + 66), sum(ResolutionWidth + 67), sum(ResolutionWidth + 68), sum(ResolutionWidth + 69), sum(ResolutionWidth + 70), sum(ResolutionWidth + 71), sum(ResolutionWidth + 72), sum(ResolutionWidth + 73), sum(ResolutionWidth + 74), sum(ResolutionWidth + 75), sum(ResolutionWidth + 76), sum(ResolutionWidth + 77), sum(ResolutionWidth + 78), sum(ResolutionWidth + 79), sum(ResolutionWidth + 80), sum(ResolutionWidth + 81), sum(ResolutionWidth + 82), sum(ResolutionWidth + 83), sum(ResolutionWidth + 84), sum(ResolutionWidth + 85), sum(ResolutionWidth + 86), sum(ResolutionWidth + 87), sum(ResolutionWidth + 88), sum(ResolutionWidth + 89) FROM {table}</query> <query>SELECT sum(ResolutionWidth), sum(ResolutionWidth + 1), sum(ResolutionWidth + 2), sum(ResolutionWidth + 3), sum(ResolutionWidth + 4), sum(ResolutionWidth + 5), sum(ResolutionWidth + 6), sum(ResolutionWidth + 7), sum(ResolutionWidth + 8), sum(ResolutionWidth + 9), sum(ResolutionWidth + 10), sum(ResolutionWidth + 11), sum(ResolutionWidth + 12), sum(ResolutionWidth + 13), sum(ResolutionWidth + 14), sum(ResolutionWidth + 15), sum(ResolutionWidth + 16), sum(ResolutionWidth + 17), sum(ResolutionWidth + 18), sum(ResolutionWidth + 19), sum(ResolutionWidth + 20), sum(ResolutionWidth + 21), sum(ResolutionWidth + 22), sum(ResolutionWidth + 23), sum(ResolutionWidth + 24), sum(ResolutionWidth + 25), sum(ResolutionWidth + 26), sum(ResolutionWidth + 27), sum(ResolutionWidth + 28), sum(ResolutionWidth + 29), sum(ResolutionWidth + 30), sum(ResolutionWidth + 31), sum(ResolutionWidth + 32), sum(ResolutionWidth + 33), sum(ResolutionWidth + 34), sum(ResolutionWidth + 35), sum(ResolutionWidth + 36), sum(ResolutionWidth + 37), sum(ResolutionWidth + 38), sum(ResolutionWidth + 39), sum(ResolutionWidth + 40), sum(ResolutionWidth + 41), sum(ResolutionWidth + 42), sum(ResolutionWidth + 43), sum(ResolutionWidth + 44), sum(ResolutionWidth + 45), sum(ResolutionWidth + 46), sum(ResolutionWidth + 47), sum(ResolutionWidth + 48), sum(ResolutionWidth + 49), sum(ResolutionWidth + 50), sum(ResolutionWidth + 51), sum(ResolutionWidth + 52), sum(ResolutionWidth + 53), sum(ResolutionWidth + 54), sum(ResolutionWidth + 55), sum(ResolutionWidth + 56), sum(ResolutionWidth + 57), sum(ResolutionWidth + 58), sum(ResolutionWidth + 59), sum(ResolutionWidth + 60), sum(ResolutionWidth + 61), sum(ResolutionWidth + 62), sum(ResolutionWidth + 63), sum(ResolutionWidth + 64), sum(ResolutionWidth + 65), sum(ResolutionWidth + 66), sum(ResolutionWidth + 67), sum(ResolutionWidth + 68), sum(ResolutionWidth + 69), sum(ResolutionWidth + 70), sum(ResolutionWidth + 71), sum(ResolutionWidth + 72), sum(ResolutionWidth + 73), sum(ResolutionWidth + 74), sum(ResolutionWidth + 75), sum(ResolutionWidth + 76), sum(ResolutionWidth + 77), sum(ResolutionWidth + 78), sum(ResolutionWidth + 79), sum(ResolutionWidth + 80), sum(ResolutionWidth + 81), sum(ResolutionWidth + 82), sum(ResolutionWidth + 83), sum(ResolutionWidth + 84), sum(ResolutionWidth + 85), sum(ResolutionWidth + 86), sum(ResolutionWidth + 87), sum(ResolutionWidth + 88), sum(ResolutionWidth + 89) FROM {table}</query>
<query>SELECT SearchEngineID, ClientIP, count() AS c, sum(Refresh), avg(ResolutionWidth) FROM {table} WHERE SearchPhrase != '' GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10</query> <query>SELECT SearchEngineID, ClientIP, count() AS c, sum(Refresh), avg(ResolutionWidth) FROM hits_100m_single WHERE SearchPhrase != '' GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10</query>
<query>SELECT WatchID, ClientIP, count() AS c, sum(Refresh), avg(ResolutionWidth) FROM {table} WHERE SearchPhrase != '' GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10</query> <query>SELECT WatchID, ClientIP, count() AS c, sum(Refresh), avg(ResolutionWidth) FROM {table} WHERE SearchPhrase != '' GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10</query>
<query>SELECT WatchID, ClientIP, count() AS c, sum(Refresh), avg(ResolutionWidth) FROM {table} GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10</query> <query>SELECT WatchID, ClientIP, count() AS c, sum(Refresh), avg(ResolutionWidth) FROM hits_10m_single GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10</query>
<query>SELECT URL, count() AS c FROM {table} GROUP BY URL ORDER BY c DESC LIMIT 10</query> <query>SELECT URL, count() AS c FROM {table} GROUP BY URL ORDER BY c DESC LIMIT 10</query>
<query>SELECT 1, URL, count() AS c FROM {table} GROUP BY 1, URL ORDER BY c DESC LIMIT 10</query> <query>SELECT 1, URL, count() AS c FROM {table} GROUP BY 1, URL ORDER BY c DESC LIMIT 10</query>
<query>SELECT ClientIP AS x, x - 1, x - 2, x - 3, count() AS c FROM {table} GROUP BY x, x - 1, x - 2, x - 3 ORDER BY c DESC LIMIT 10</query> <query>SELECT ClientIP AS x, x - 1, x - 2, x - 3, count() AS c FROM hits_100m_single GROUP BY x, x - 1, x - 2, x - 3 ORDER BY c DESC LIMIT 10</query>
<query>SELECT URL, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-31' AND NOT DontCountHits AND NOT Refresh AND notEmpty(URL) GROUP BY URL ORDER BY PageViews DESC LIMIT 10</query> <query>SELECT URL, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-31' AND NOT DontCountHits AND NOT Refresh AND notEmpty(URL) GROUP BY URL ORDER BY PageViews DESC LIMIT 10</query>
<query>SELECT Title, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-31' AND NOT DontCountHits AND NOT Refresh AND notEmpty(Title) GROUP BY Title ORDER BY PageViews DESC LIMIT 10</query> <query>SELECT Title, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-31' AND NOT DontCountHits AND NOT Refresh AND notEmpty(Title) GROUP BY Title ORDER BY PageViews DESC LIMIT 10</query>
<query>SELECT URL, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-31' AND NOT Refresh AND IsLink AND NOT IsDownload GROUP BY URL ORDER BY PageViews DESC LIMIT 1000</query> <query>SELECT URL, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-31' AND NOT Refresh AND IsLink AND NOT IsDownload GROUP BY URL ORDER BY PageViews DESC LIMIT 1000</query>
<query>SELECT TraficSourceID, SearchEngineID, AdvEngineID, ((SearchEngineID = 0 AND AdvEngineID = 0) ? Referer : '') AS Src, URL AS Dst, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-31' AND NOT Refresh GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000</query> <query>SELECT TraficSourceID, SearchEngineID, AdvEngineID, ((SearchEngineID = 0 AND AdvEngineID = 0) ? Referer : '') AS Src, URL AS Dst, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-31' AND NOT Refresh GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000</query>
<query>SELECT URLHash, EventDate, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-31' AND NOT Refresh AND TraficSourceID IN (-1, 6) AND RefererHash = halfMD5('http://example.ru/') GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100</query> <query>SELECT URLHash, EventDate, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-31' AND NOT Refresh AND TraficSourceID IN (-1, 6) AND RefererHash = halfMD5('http://example.ru/') GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100</query>
<query>SELECT WindowClientWidth, WindowClientHeight, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-31' AND NOT Refresh AND NOT DontCountHits AND URLHash = halfMD5('http://example.ru/') GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000</query> <query>SELECT WindowClientWidth, WindowClientHeight, count() AS PageViews FROM hits_100m_single WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-31' AND NOT Refresh AND NOT DontCountHits AND URLHash = halfMD5('http://example.ru/') GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000 FORMAT Null</query>
<query>SELECT toStartOfMinute(EventTime) AS Minute, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-02' AND NOT Refresh AND NOT DontCountHits GROUP BY Minute ORDER BY Minute</query> <query>SELECT toStartOfMinute(EventTime) AS Minute, count() AS PageViews FROM {table} WHERE CounterID = 34 AND EventDate >= '2013-07-01' AND EventDate &lt;= '2013-07-02' AND NOT Refresh AND NOT DontCountHits GROUP BY Minute ORDER BY Minute FORMAT Null</query>
</test> </test>

View File

@ -292,7 +292,7 @@ create table queries engine Memory as select
-- immediately, so for now we pretend they don't exist. We don't want to -- immediately, so for now we pretend they don't exist. We don't want to
-- remove them altogether because we want to be able to detect regressions, -- remove them altogether because we want to be able to detect regressions,
-- but the right way to do this is not yet clear. -- but the right way to do this is not yet clear.
left + right < 0.01 as short, left + right < 0.02 as short,
not short and abs(diff) < 0.10 and rd[3] > 0.10 as unstable, not short and abs(diff) < 0.10 and rd[3] > 0.10 as unstable,

View File

@ -104,7 +104,7 @@ tables = [e.text for e in root.findall('preconditions/table_exists')]
for t in tables: for t in tables:
for c in connections: for c in connections:
try: try:
res = c.execute("show create table {}".format(t)) res = c.execute("select 1 from {} limit 1".format(t))
except: except:
print('skipped\t' + traceback.format_exception_only(*sys.exc_info()[:2])[-1]) print('skipped\t' + traceback.format_exception_only(*sys.exc_info()[:2])[-1])
traceback.print_exc() traceback.print_exc()

View File

@ -261,20 +261,20 @@ print("""
if slow_average_tests: if slow_average_tests:
#status = 'failure' #status = 'failure'
message_array.append(str(slow_average_tests) + ' too long') message_array.append(str(slow_average_tests) + ' 🕐')
if faster_queries: if faster_queries:
message_array.append(str(faster_queries) + ' faster') message_array.append(str(faster_queries) + ' 🐇')
if slower_queries: if slower_queries:
message_array.append(str(slower_queries) + ' slower') message_array.append(str(slower_queries) + ' 🐌')
if unstable_queries: if unstable_queries:
message_array.append(str(unstable_queries) + ' unstable') message_array.append(str(unstable_queries) + ' ')
error_tests += slow_average_tests error_tests += slow_average_tests
if error_tests: if error_tests:
message_array.append(str(error_tests) + ' errors') message_array.append(str(error_tests) + ' ')
if message_array: if message_array:
message = ', '.join(message_array) message = ', '.join(message_array)

View File

@ -11,6 +11,7 @@ import subprocess
import sys import sys
import time import time
import livereload
import markdown.util import markdown.util
from mkdocs import config from mkdocs import config
@ -118,7 +119,8 @@ def build_for_lang(lang, args):
'version_prefix': args.version_prefix, 'version_prefix': args.version_prefix,
'rev': args.rev, 'rev': args.rev,
'rev_short': args.rev_short, 'rev_short': args.rev_short,
'rev_url': args.rev_url 'rev_url': args.rev_url,
'events': args.events
} }
) )
@ -300,16 +302,18 @@ if __name__ == '__main__':
arg_parser.add_argument('--skip-website', action='store_true') arg_parser.add_argument('--skip-website', action='store_true')
arg_parser.add_argument('--minify', action='store_true') arg_parser.add_argument('--minify', action='store_true')
arg_parser.add_argument('--save-raw-single-page', type=str) arg_parser.add_argument('--save-raw-single-page', type=str)
arg_parser.add_argument('--livereload', type=int, default='0')
arg_parser.add_argument('--verbose', action='store_true') arg_parser.add_argument('--verbose', action='store_true')
args = arg_parser.parse_args() args = arg_parser.parse_args()
args.docs_output_dir = os.path.join(os.path.abspath(args.output_dir), 'docs') args.docs_output_dir = os.path.join(os.path.abspath(args.output_dir), 'docs')
from github import choose_latest_releases from github import choose_latest_releases, get_events
args.stable_releases = choose_latest_releases() if args.enable_stable_releases else [] args.stable_releases = choose_latest_releases() if args.enable_stable_releases else []
args.rev = subprocess.check_output('git rev-parse HEAD', shell=True).strip() args.rev = subprocess.check_output('git rev-parse HEAD', shell=True).strip()
args.rev_short = subprocess.check_output('git rev-parse --short HEAD', shell=True).strip() args.rev_short = subprocess.check_output('git rev-parse --short HEAD', shell=True).strip()
args.rev_url = 'https://github.com/ClickHouse/ClickHouse/commit/%s' % args.rev args.rev_url = 'https://github.com/ClickHouse/ClickHouse/commit/%s' % args.rev
args.events = get_events(args)
logging.basicConfig( logging.basicConfig(
level=logging.DEBUG if args.verbose else logging.INFO, level=logging.DEBUG if args.verbose else logging.INFO,
@ -320,3 +324,16 @@ if __name__ == '__main__':
from build import build from build import build
build(args) build(args)
if args.livereload:
new_args = [arg for arg in sys.argv if not arg.startswith('--livereload')]
new_args = sys.executable + ' ' + ' '.join(new_args)
server = livereload.Server()
server.watch(args.website_dir + '**/*', livereload.shell(new_args, cwd='tools', shell=True))
server.watch(args.docs_dir + '**/*', livereload.shell(new_args, cwd='tools', shell=True))
server.serve(
root=args.output_dir,
port=args.livereload
)
sys.exit(0)

20
docs/tools/deploy-to-test.sh Executable file
View File

@ -0,0 +1,20 @@
#!/usr/bin/env bash
#
# README:
# This script deploys ClickHouse website to your personal test subdomain.
#
# Before first use of this script:
# 1) Create https://github.com/GIT_USER/clickhouse.github.io repo (replace GIT_USER with your GitHub login)
# 2) Send email on address from https://clickhouse.tech/#contacts asking to create GIT_USER-test.clickhouse.tech domain
#
set -ex
BASE_DIR=$(dirname $(readlink -f $0))
GIT_USER=${GIT_USER:-$USER}
GIT_TEST_URI=git@github.com:${GIT_USER}/clickhouse.github.io.git \
TEST_DOMAIN=${GIT_USER}-test.clickhouse.tech \
EXTRA_BUILD_ARGS="${@}" \
CLOUDFLARE_TOKEN="" \
HISTORY_SIZE=3 \
${BASE_DIR}/release.sh

View File

@ -53,8 +53,27 @@ def process_release(args, callback, release):
def build_releases(args, callback): def build_releases(args, callback):
tasks = []
for release in args.stable_releases: for release in args.stable_releases:
process_release(args, callback, release) process_release(args, callback, release)
def get_events(args):
events = []
skip = True
with open(os.path.join(args.docs_dir, '..', 'README.md')) as f:
for line in f:
if skip:
if 'Upcoming Events' in line:
skip = False
else:
if not line:
continue
line = line.strip().split('](')
if len(line) == 2:
tail = line[1].split(') ')
events.append({
'signup_link': tail[0],
'event_name': line[0].replace('* [', ''),
'event_date': tail[1].replace('on ', '').replace('.', '')
})
return events

View File

@ -8,6 +8,7 @@ TEST_DOMAIN="${TEST_DOMAIN:-clickhouse.tech}"
GIT_TEST_URI="${GIT_TEST_URI:-git@github.com:ClickHouse/clickhouse.github.io.git}" GIT_TEST_URI="${GIT_TEST_URI:-git@github.com:ClickHouse/clickhouse.github.io.git}"
GIT_PROD_URI="git@github.com:ClickHouse/clickhouse.github.io.git" GIT_PROD_URI="git@github.com:ClickHouse/clickhouse.github.io.git"
EXTRA_BUILD_ARGS="${EXTRA_BUILD_ARGS:---enable-stable-releases}" EXTRA_BUILD_ARGS="${EXTRA_BUILD_ARGS:---enable-stable-releases}"
HISTORY_SIZE="${HISTORY_SIZE:-25}"
if [[ -z "$1" ]] if [[ -z "$1" ]]
then then
@ -34,7 +35,19 @@ then
git add * git add *
git add ".nojekyll" git add ".nojekyll"
git commit -a -m "add new release at $(date)" git commit -a -m "add new release at $(date)"
git push origin master NEW_ROOT_COMMIT=$(git rev-parse "HEAD~${HISTORY_SIZE}")
git checkout --orphan temp "${NEW_ROOT_COMMIT}"
git commit -m "root commit"
git rebase --onto temp "${NEW_ROOT_COMMIT}" master
git branch -D temp
git push -f origin master
if [[ ! -z "${CLOUDFLARE_TOKEN}" ]]
then
sleep 1m
set +x
curl -X POST "https://api.cloudflare.com/client/v4/zones/4fc6fb1d46e87851605aa7fa69ca6fe0/purge_cache" -H "Authorization: Bearer ${CLOUDFLARE_TOKEN}" -H "Content-Type:application/json" --data '{"purge_everything":true}'
set -x
fi
cd "${BUILD_DIR}" cd "${BUILD_DIR}"
DOCKER_HASH=$(head -c 16 < /dev/urandom | xxd -p) DOCKER_HASH=$(head -c 16 < /dev/urandom | xxd -p)
fi fi

View File

@ -13,6 +13,7 @@ htmlmin==0.1.12
idna==2.9 idna==2.9
imagesize==1.2.0 imagesize==1.2.0
Jinja2==2.11.1 Jinja2==2.11.1
jinja2-highlight==0.6.1
jsmin==2.2.2 jsmin==2.2.2
livereload==2.6.1 livereload==2.6.1
Markdown==2.6.11 Markdown==2.6.11

View File

@ -8,11 +8,28 @@ import jinja2
import jsmin import jsmin
def copy_icons(args):
logging.info('Copying icons')
icons_dir = os.path.join(args.output_dir, 'images', 'icons')
os.makedirs(icons_dir)
for icon in [
'github',
'edit',
'external-link'
]:
icon = '%s.svg' % icon
icon_src = os.path.join(args.website_dir, 'images', 'feathericons', 'icons', icon)
icon_dst = os.path.join(icons_dir, icon)
shutil.copy2(icon_src, icon_dst)
def build_website(args): def build_website(args):
logging.info('Building website') logging.info('Building website')
env = jinja2.Environment( env = jinja2.Environment(
loader=args.output_dir loader=jinja2.FileSystemLoader(args.website_dir),
extensions=['jinja2_highlight.HighlightExtension']
) )
env.extend(jinja2_highlight_cssclass='syntax p-3 my-3')
shutil.copytree( shutil.copytree(
args.website_dir, args.website_dir,
@ -23,14 +40,16 @@ def build_website(args):
'build', 'build',
'docs', 'docs',
'public', 'public',
'node_modules' 'node_modules',
'templates',
'feathericons'
) )
) )
for root, _, filenames in os.walk(args.output_dir): for root, _, filenames in os.walk(args.output_dir):
for filename in filenames: for filename in filenames:
path = os.path.join(root, filename) path = os.path.join(root, filename)
if not filename.endswith('.html'): if not (filename.endswith('.html') or filename.endswith('.css')):
continue continue
logging.info('Processing %s', path) logging.info('Processing %s', path)
with open(path, 'rb') as f: with open(path, 'rb') as f:

117
website/css/base.css Normal file
View File

@ -0,0 +1,117 @@
a:link, a:visited {
color: #f14600;
text-decoration: none;
}
a:hover, a:active {
text-decoration: underline;
}
#logo-icon {
width: 40px;
}
#logo-text {
width: 180px;
margin-left: 12px;
}
.btn-outline-orange {
border-color: #f14600;
color: #f14600;
}
.btn-orange, .btn-outline-orange:hover {
background: #f14600;
color: #fff;
}
a.btn-outline-yellow {
border-color: #fc0;
color: #fc0;
}
.btn-yellow, .btn-outline-yellow:hover {
background: #fc0;
color: #000;
}
.btn-yellow:hover {
background: #ffe100;
}
.btn-yellow:hover, .btn-yellow:link, .btn-yellow:visited {
color: #000;
}
.btn:hover, .btn:active {
text-decoration: none;
}
.stealth-link:link, .stealth-link:visited {
color: #000;
text-decoration: none;
}
.text-light .stealth-link:link, .text-light .stealth-link:visited {
color: #fff;
}
.text-muted .stealth-link:link, .text-muted .stealth-link:visited {
color: #999;
}
.text-red {
color: #ff3939;
}
.text-orange {
color: #f14600;
}
.text-yellow {
color: #fc0;
}
.navbar {
border-bottom: 1px solid #efefef;
}
.navbar-light .navbar-nav .nav-link {
color: #000;
}
.navbar-light .navbar-nav .nav-link:hover, .stealth-link:hover, .stealth-link:active {
color: #f14600;
}
.bg-number {
position: absolute;
font-size: 900%;
font-weight: bold;
color: rgba(241, 70, 0, 0.1);
line-height: 1;
margin-top: -1rem;
}
.dots-lb {
background: #fff url('/images/dots.svg') no-repeat 0 100%;
}
.dots-cb {
background: #fff url('/images/dots.svg') no-repeat 50% 100%;
}
.dots-rb {
background: #fff url('/images/dots.svg') no-repeat 100% 100%;
}
.dots-rhb {
background: #fff url('/images/dots.svg') no-repeat 75% 100%;
}
.dots-cc {
background: #fff url('/images/dots.svg') repeat-y 50% -17.5%;
}
{% include "css/highlight.css" %}

74
website/css/highlight.css Normal file
View File

@ -0,0 +1,74 @@
/*
Name: Base16 Paraiso Light
Author: Jan T. Sott
Pygments template by Jan T. Sott (https://github.com/idleberg)
Created with Base16 Builder by Chris Kempson (https://github.com/chriskempson/base16-builder)
*/
.syntax .hll { background-color: #b9b6b0 }
.syntax { background: #f8f9fa; color: #2f1e2e }
.syntax .c { color: #8d8687 } /* Comment */
.syntax .err { color: #ef6155 } /* Error */
.syntax .k { color: #815ba4 } /* Keyword */
.syntax .l { color: #f99b15 } /* Literal */
.syntax .n { color: #2f1e2e } /* Name */
.syntax .o { color: #5bc4bf } /* Operator */
.syntax .p { color: #2f1e2e } /* Punctuation */
.syntax .cm { color: #8d8687 } /* Comment.Multiline */
.syntax .cp { color: #8d8687 } /* Comment.Preproc */
.syntax .c1 { color: #8d8687 } /* Comment.Single */
.syntax .cs { color: #8d8687 } /* Comment.Special */
.syntax .gd { color: #ef6155 } /* Generic.Deleted */
.syntax .ge { font-style: italic } /* Generic.Emph */
.syntax .gh { color: #2f1e2e; font-weight: bold } /* Generic.Heading */
.syntax .gi { color: #48b685 } /* Generic.Inserted */
.syntax .gp { color: #8d8687; font-weight: bold } /* Generic.Prompt */
.syntax .gs { font-weight: bold } /* Generic.Strong */
.syntax .gu { color: #5bc4bf; font-weight: bold } /* Generic.Subheading */
.syntax .kc { color: #815ba4 } /* Keyword.Constant */
.syntax .kd { color: #815ba4 } /* Keyword.Declaration */
.syntax .kn { color: #5bc4bf } /* Keyword.Namespace */
.syntax .kp { color: #815ba4 } /* Keyword.Pseudo */
.syntax .kr { color: #815ba4 } /* Keyword.Reserved */
.syntax .kt { color: #fec418 } /* Keyword.Type */
.syntax .ld { color: #48b685 } /* Literal.Date */
.syntax .m { color: #f99b15 } /* Literal.Number */
.syntax .s { color: #48b685 } /* Literal.String */
.syntax .na { color: #06b6ef } /* Name.Attribute */
.syntax .nb { color: #2f1e2e } /* Name.Builtin */
.syntax .nc { color: #fec418 } /* Name.Class */
.syntax .no { color: #ef6155 } /* Name.Constant */
.syntax .nd { color: #5bc4bf } /* Name.Decorator */
.syntax .ni { color: #2f1e2e } /* Name.Entity */
.syntax .ne { color: #ef6155 } /* Name.Exception */
.syntax .nf { color: #06b6ef } /* Name.Function */
.syntax .nl { color: #2f1e2e } /* Name.Label */
.syntax .nn { color: #fec418 } /* Name.Namespace */
.syntax .nx { color: #06b6ef } /* Name.Other */
.syntax .py { color: #2f1e2e } /* Name.Property */
.syntax .nt { color: #5bc4bf } /* Name.Tag */
.syntax .nv { color: #ef6155 } /* Name.Variable */
.syntax .ow { color: #5bc4bf } /* Operator.Word */
.syntax .w { color: #2f1e2e } /* Text.Whitespace */
.syntax .mf { color: #f99b15 } /* Literal.Number.Float */
.syntax .mh { color: #f99b15 } /* Literal.Number.Hex */
.syntax .mi { color: #f99b15 } /* Literal.Number.Integer */
.syntax .mo { color: #f99b15 } /* Literal.Number.Oct */
.syntax .sb { color: #48b685 } /* Literal.String.Backtick */
.syntax .sc { color: #2f1e2e } /* Literal.String.Char */
.syntax .sd { color: #8d8687 } /* Literal.String.Doc */
.syntax .s2 { color: #48b685 } /* Literal.String.Double */
.syntax .se { color: #f99b15 } /* Literal.String.Escape */
.syntax .sh { color: #48b685 } /* Literal.String.Heredoc */
.syntax .si { color: #f99b15 } /* Literal.String.Interpol */
.syntax .sx { color: #48b685 } /* Literal.String.Other */
.syntax .sr { color: #48b685 } /* Literal.String.Regex */
.syntax .s1 { color: #48b685 } /* Literal.String.Single */
.syntax .ss { color: #48b685 } /* Literal.String.Symbol */
.syntax .bp { color: #2f1e2e } /* Name.Builtin.Pseudo */
.syntax .vc { color: #ef6155 } /* Name.Variable.Class */
.syntax .vg { color: #ef6155 } /* Name.Variable.Global */
.syntax .vi { color: #ef6155 } /* Name.Variable.Instance */
.syntax .il { color: #f99b15 } /* Literal.Number.Integer.Long */

1
website/images/curl.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="111" height="70" fill="none" viewBox="0 0 111 70"><path fill="#F14600" d="M67.3198 0.959506C67.4924 0.96748 67.6363 0.974118 67.8076 1.01082C70.126 1.37706 71.9328 3.44725 72.682 6.56272C73.2135 8.77555 73.5999 11.0105 73.8424 13.2387C76.7404 14.7835 80.1201 15.8898 83.7252 16.4882C92.1398 17.8271 100.87 16.0996 108.373 11.609C109.054 11.2086 109.938 11.4222 110.339 12.1029C110.74 12.7837 110.526 13.6664 109.844 14.0668C101.777 18.9057 92.3202 20.7723 83.2479 19.3167C79.9854 18.7916 76.858 17.841 74.0631 16.5601C74.3551 23.3112 73.3263 29.9437 70.9901 36.1703C67.7363 44.7731 62.0783 52.3723 54.6303 58.1612C47.1822 63.95 38.4205 67.6051 29.2583 68.708C19.5454 69.8717 9.796 68.0969 1.04043 63.5462C0.337163 63.1682 0.0593615 62.3204 0.437963 61.618C0.816556 60.9157 1.66559 60.6382 2.36886 61.0162C10.5885 65.3117 19.7665 66.9738 28.8999 65.8697C37.5403 64.8291 45.831 61.3826 52.8315 55.9186C59.8607 50.4559 65.1822 43.273 68.2682 35.1808C70.6686 28.8132 71.6204 21.9756 71.05 15.0101C68.3011 13.3571 65.9738 11.3204 64.3202 9.05577C62.775 6.94009 62.4776 4.65169 63.5385 2.91552C64.378 1.60102 65.795 0.889069 67.3198 0.959506ZM70.648 11.2484C70.4504 9.91481 70.1665 8.57721 69.8539 7.23828C69.3966 5.28802 68.4456 4.03478 67.3289 3.86802C66.785 3.78532 66.2852 3.99256 66.035 4.4129C65.5989 5.11258 65.866 6.19028 66.7059 7.35201C67.7364 8.75289 69.0875 10.0822 70.648 11.2484Z"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

1
website/images/dots.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

@ -0,0 +1 @@
Subproject commit dca4f121b86577616e90d46ffcd9771942311f71

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" fill="none" viewBox="0 0 60 60"><circle cx="30" cy="30" r="30" fill="#FAFAFA"/><path fill="#F14600" d="M26.4016 14.4C26.1196 14.4001 25.8466 14.4996 25.6306 14.6809C25.4146 14.8621 25.2693 15.1137 25.2203 15.3914L21.6438 30.8789L21.6461 30.8813C21.617 30.985 21.602 31.0923 21.6016 31.2C21.6016 31.5183 21.728 31.8235 21.953 32.0486C22.1781 32.2736 22.4833 32.4 22.8016 32.4H29.4016L27.625 44.161C27.6092 44.2397 27.6014 44.3198 27.6016 44.4C27.6016 44.7183 27.728 45.0235 27.953 45.2486C28.1781 45.4736 28.4833 45.6 28.8016 45.6C29.0196 45.5997 29.2335 45.5399 29.4201 45.4272C29.6067 45.3145 29.7592 45.153 29.8609 44.9602H29.8633L38.1695 29.5078L38.1578 29.4867C38.2999 29.2896 38.4016 29.0614 38.4016 28.8C38.4016 28.1376 37.864 27.6 37.2016 27.6H30.6016L34.6961 16.0922C34.7657 15.9375 34.8016 15.7697 34.8016 15.6C34.8016 15.2818 34.6751 14.9765 34.4501 14.7515C34.225 14.5265 33.9198 14.4 33.6016 14.4H26.4016Z"/></svg>

After

Width:  |  Height:  |  Size: 989 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 2.4 MiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" fill="none" viewBox="0 0 60 60"><circle cx="30" cy="30" r="30" fill="#FAFAFA"/><path fill="#F14600" d="M36.75 18.5C32.4075 18.5 30 21.635 30 21.635C30 21.635 27.5925 18.5 23.25 18.5C18.693 18.5 15 22.193 15 26.75C15 33.7775 25.884 42.4385 29.109 44.8505C29.64 45.248 30.3585 45.248 30.8895 44.8505C34.116 42.4385 45 33.7775 45 26.75C45 22.193 41.307 18.5 36.75 18.5Z"/></svg>

After

Width:  |  Height:  |  Size: 438 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 49 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" fill="none" viewBox="0 0 60 60"><circle cx="30" cy="30" r="30" fill="#FAFAFA"/><path fill="#F14600" d="M18 18C16.3455 18 15 19.3455 15 21V39C15 40.6545 16.3455 42 18 42C18 42.828 18.672 43.5 19.5 43.5C20.328 43.5 21 42.828 21 42H39C39 42.828 39.672 43.5 40.5 43.5C41.328 43.5 42 42.828 42 42C43.6545 42 45 40.6545 45 39V21C45 19.3455 43.6545 18 42 18H18ZM39.8818 23.1211C40.2658 23.1211 40.6499 23.2651 40.9424 23.5576C41.5289 24.1441 41.5274 25.0937 40.9424 25.6787L39.6504 26.9707C40.1784 27.8647 40.5 28.89 40.5 30C40.5 31.11 40.1784 32.1368 39.6504 33.0293L41.0742 34.4531C41.6592 35.0381 41.6592 35.9892 41.0742 36.5742C40.4892 37.1607 39.5396 37.1592 38.9531 36.5742L37.5293 35.1504C36.6368 35.6769 35.61 36 34.5 36C33.39 36 32.3632 35.6784 31.4707 35.1504L30.1787 36.4424C29.5937 37.0274 28.6426 37.0274 28.0576 36.4424C27.4726 35.8574 27.4726 34.9063 28.0576 34.3213L29.3496 33.0293C28.8216 32.1368 28.5 31.11 28.5 30C28.5 28.89 28.8216 27.8632 29.3496 26.9707L28.1924 25.8105C27.6074 25.2255 27.6074 24.2774 28.1924 23.6924C28.7774 23.1074 29.7255 23.1074 30.3105 23.6924L31.4707 24.8496C32.3632 24.3216 33.39 24 34.5 24C35.61 24 36.6368 24.3216 37.5293 24.8496L38.8213 23.5576C39.1138 23.2651 39.4978 23.1211 39.8818 23.1211ZM21 25.5C21.828 25.5 22.5 26.172 22.5 27V33C22.5 33.828 21.828 34.5 21 34.5C20.172 34.5 19.5 33.828 19.5 33V27C19.5 26.172 20.172 25.5 21 25.5ZM34.5 27C33.7044 27 32.9413 27.3161 32.3787 27.8787C31.8161 28.4413 31.5 29.2044 31.5 30C31.5 30.7956 31.8161 31.5587 32.3787 32.1213C32.9413 32.6839 33.7044 33 34.5 33C35.2956 33 36.0587 32.6839 36.6213 32.1213C37.1839 31.5587 37.5 30.7956 37.5 30C37.5 29.2044 37.1839 28.4413 36.6213 27.8787C36.0587 27.3161 35.2956 27 34.5 27Z"/></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 687 B

View File

@ -1,434 +0,0 @@
body {
background: #fff;
font: 300 14pt/200% -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji,Segoe UI Emoji;
margin: 0;
padding: 0;
}
#navbar {
top: 0;
z-index: 100;
position: fixed;
width: 100%;
background: #fff;
border-bottom: 1px solid #efefef;
padding: 6px 0 0 0;
margin: 0;
}
#navbar-inner {
max-width: 1280px;
height: 50px;
margin: 4px auto;
}
#logo {
color: #000;
text-decoration: none;
font-size: 110%;
}
#logo-text {
width: 200px;
height: 44px;
}
#main-title {
margin: 0;
}
#title-logo {
margin: 1px 8px 0 13px;
}
#github {
bottom: 0;
right: 0;
z-index: 100;
position: fixed;
font-size: 85%;
font-weight: 400;
padding: 0 4em;
margin: 0 -4em 2.5em 0;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
background: #fd0;
border: 2px solid #000;
}
#github_link {
color: #000;
}
#github_link:hover {
color: #000;
}
.page {
max-width: 800px;
margin: auto;
}
h2 {
margin: 47px 0 23px;
font-size: 200%;
}
a:link, a:visited {
color: #f14600;
text-decoration: none;
}
a:hover, a:active {
text-decoration: underline;
}
#top-menu {
margin: 8px 0 0 0;
font-size: 18pt;
float: right;
}
.menu_item:link,
.menu_item:active,
.menu_item:visited {
margin: 0 8px 0 0;
padding: 5px;
color: #000;
}
.menu_item:hover, .index_item:hover {
padding-bottom: 4px;
border-bottom: 2px solid #fc0;
text-decoration: none;
}
.index_item:link,
.index_item:active,
.index_item:visited {
color: #ededed;
}
#short-description {
font-size: 125%;
margin: 0 1em 1.75em 0;
text-align: left;
}
#hero {
background: #555;
padding: 110px 0 40px 0;
color: #ededed;
}
#index_ul {
margin-top: 2px;
padding-left: 20px;
}
#slogan {
}
#placeholder {
width: 66%;
margin: 5% auto 0 auto;
}
.colored-block {
width: 100%;
padding: 20px 0 60px 0;
margin: 60px 0;
}
.colored-block>h2 {
margin-top: 0;
}
#performance, #announcement {
background: #fc0;
}
#announcement {
margin: 0 0 60px 0;
padding: 20px 0;
font-size: 125%;
}
.announcement-link {
color: #000!important;
text-decoration: underline!important;
margin: 1em 0;
}
.announcement-link:hover {
color: #000!important;
}
#call_to_action, #benchmark_learn_more {
text-decoration: none;
padding-left: 18px;
font-size: 120%;
width: 182px;
height: 50px;
line-height: 50px;
display: block;
margin-bottom: 15px;
}
#call_to_action {
background: url('images/yandex-white-button.png') no-repeat;
color: #ededed;
}
#call_to_action:hover {
color: #fc0;
}
#benchmark_learn_more {
background: url('images/yandex-black-button.png') no-repeat;
float: right;
color: #000;
}
#grey-block {
background: #555;
color: #ededed;
}
#footer {
text-align: right;
padding: 8px 0 0 0;
font-size: 10pt;
}
#footer, .grey, .warranty, .warranty a {
color: #888;
}
pre {
font: 13px/18px SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
display: block;
border-left: 5px solid #ffdb4d;
padding: 5px 10px;
background-color: #fff8e8;
overflow: scroll;
}
ul {
margin: 0;
padding-left: 0;
}
ul.dashed {
list-style-type: none;
}
ul.dashed > li {
text-indent: 15px;
margin-top: -5px;
}
ul.dashed > li:before {
content: '— ';
text-indent: 1em;
}
img {
width: 100%;
}
.warranty {
margin-top: 6em;
font-size: 50%;
line-height: 150%;
border-top: 1px solid #888;
padding: 1em 0;
}
.distributive_selected {
color: #000;
font-weight: bold;
}
.distributive_not_selected {
color: #f14600;
cursor: pointer;
border-bottom: 1px solid #f14600;
}
#tutorial_logo {
float: left;
margin-right: -100%;
margin-top: 34px;
margin-left: 3px;
}
#tutorial_title {
font-size: 100px;
margin-top: 25px;
margin-bottom: 0;
text-align: center;
padding-top: 27px;
}
#tutorial_subtitle {
font-size: 50px;
text-align: center;
margin-top: 35px;
margin-bottom: 50px;
}
.spoiler {
margin-bottom: 10px;
}
.spoiler_body {
display: none;
}
.spoiler_title {
color: #f14600;
border-bottom: 1px dotted #f14600;
}
.spoiler_title:hover {
cursor: pointer;
color: #f00;
border-bottom: 1px dotted #f00;
text-decoration: none;
}
.tip {
background-color: #EEE;
border: 1px solid #EEE;
padding: 5px 10px 5px 10px;
}
.tip b {
font-size: 150%;
color: #888;
}
.block-50 {
float: left;
display: block;
width: 50%;
}
.block-30 {
float: left;
display: block;
width: 30%;
}
.block-70 {
float: left;
display: block;
width: 70%;
}
.clear {
clear: both;
}
.orange {
fill: #fc0;
color: #fc0;
}
.red {
fill: #f00;
color: #f00;
}
@media (max-width: 1023px) {
body {
font-size: 18pt;
}
#index_ul {
padding-bottom: 30px;
padding-left: 0;
margin: 0 0 30px -16px;
font-size: 90%;
}
#hero {
padding: 40px 0 0 0;
}
.desktop-only {
display: none;
}
.page {
width: 90%;
margin: 0 auto;
}
#navbar {
position: relative;
text-align: center;
margin: 1.33em 0;
padding: 0;
border: none;
}
#hero ul.dashed > li:before {
content: '';
}
#hero .index_item {
font-size: 110%;
}
#hero .dashed {
margin-bottom: 50px;
}
#call_to_action {
margin: 20px 0 40px 0;
}
#short-description {
margin-bottom: 40px;
}
#github {
position: relative;
padding: 0;
margin: 0;
text-align: center;
font-weight: 300;
font-size: 110%;
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
background: #fc0;
border: 0;
mix-blend-mode: normal;
}
#benchmark_learn_more, #call_to_action {
font-size: 90%;
}
.block-30, .block-50, .block-70 {
width: 100%;
float: none;
}
#tutorial_logo, #tutorial_title, #tutorial_subtitle {
float: none;
text-align: left;
margin: 10px 0;
padding: 0;
}
#tutorial_title {
font-size: 75px;
}
}

View File

@ -1,632 +1,19 @@
<!DOCTYPE html> {% extends "templates/base.html" %}
<html lang="en">
<head> {% block content %}
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/> {% include "templates/index/nav.html" %}
<meta name="viewport" content="width=device-width,initial-scale=1"> {% include "templates/index/hero.html" %}
{% include "templates/index/events.html" %}
<title>ClickHouse — open source distributed column-oriented DBMS</title> {% include "templates/index/performance.html" %}
{% include "templates/index/why.html" %}
<link rel="shortcut icon" href="favicon.ico"/> {% include "templates/index/success.html" %}
{% include "templates/index/efficient.html" %}
<meta property="og:title" content="ClickHouse DBMS"/> {% include "templates/index/rich.html" %}
<meta property="og:description" {% include "templates/index/features.html" %}
content="ClickHouse is an open source column-oriented database management system that allows generating analytical data reports in real time using SQL queries."/> {% include "templates/index/reliable.html" %}
<meta property="og:type" content="website"/> {% include "templates/index/use.html" %}
<meta property="og:url" content="https://clickhouse.tech"/> {% include "templates/index/quickstart.html" %}
<meta property="og:image" content="https://clickhouse.tech/images/logo.png"/> {% include "templates/index/contacts.html" %}
<meta property="twitter:title" content="ClickHouse DBMS"/> {% endblock %}
<meta name="description"
content="ClickHouse is an open source distributed column-oriented database management system that allows generating analytical data reports in real time using SQL queries. Сreated by Yandex ClickHouse manages extremely large volumes of data in a stable and sustainable manner."/>
<meta name="keywords"
content="ClickHouse, DBMS, OLAP, relational, analytics, analytical, big data, open-source, SQL, web-analytics" />
<link href="index.css?{{ rev_short }}" media="all" rel="stylesheet" />
</head>
<body>
<div id="navbar">
<div id="navbar-inner">
<div id="top-menu" class="desktop-only">
<a class="menu_item" href="#quick-start">Quick Start</a>
<a class="menu_item" href="#performance">Performance</a>
<a class="menu_item" href="docs/en/">Documentation</a>
<a class="menu_item" href="https://clickhouse.yandex/blog/en/">Blog</a>
<a class="menu_item" href="#contacts">Contacts</a>
</div>
<a id="logo" href="#">
<h1 id="main-title">
<svg id="title-logo" xmlns="http://www.w3.org/2000/svg" width="48" height="44" viewBox="0 0 9 8">
<path class="red" d="M0,7 h1 v1 h-1 z"></path>
<path class="orange" d="M0,0 h1 v7 h-1 z"></path>
<path class="orange" d="M2,0 h1 v8 h-1 z"></path>
<path class="orange" d="M4,0 h1 v8 h-1 z"></path>
<path class="orange" d="M6,0 h1 v8 h-1 z"></path>
<path class="orange" d="M8,3.25 h1 v1.5 h-1 z"></path>
</svg>
<img id="logo-text" src="images/clickhouse-black.svg?{{ rev_short }}" alt="ClickHouse" />
</h1>
</a>
</div>
</div>
<div id="hero">
<div class="page">
<div class="block-70">
<p id="short-description">ClickHouse is an <a href="https://github.com/ClickHouse/ClickHouse" rel="external nofollow" target="_blank" class="orange">open&nbsp;source</a> column-oriented
database management system
capable of <span class="orange">real&nbsp;time</span> generation of analytical data reports using <span
class="orange">SQL</span>&nbsp;queries.</p>
<a id="call_to_action" href="#quick-start">
Quick Start
</a>
</div>
<div class="block-30">
<ul id="index_ul" class="dashed">
<li>
<a class="index_item" href="#blazing-fast">Blazing Fast</a>
</li>
<li>
<a class="index_item" href="#linearly-scalable">Linearly Scalable</a>
</li>
<li>
<a class="index_item" href="#hardware-efficient">Hardware Efficient</a>
</li>
<li>
<a class="index_item" href="#fault-tolerant">Fault Tolerant</a>
</li>
<li>
<a class="index_item" href="#key-features">Feature Rich</a>
</li>
<li>
<a class="index_item" href="#highly-reliable">Highly Reliable</a>
</li>
<li>
<a class="index_item" href="#simple-and-handy">Simple and Handy</a>
</li>
</ul>
</div>
<div class="clear"></div>
</div>
</div>
<div id="announcement" class="colored-block">
<div class="page">
</div>
</div>
<div class="page">
<h2 id="slogan">ClickHouse. Just makes you think faster.</h2>
<div class="block-70">
<ul class="dashed">
<li>Run more queries in the same amount of time</li>
<li>Test more hypotheses</li>
<li>Slice and dice your data in many more new ways</li>
<li>Look at your data from new angles</li>
<li>Discover new dimensions</li>
</ul>
</div>
<div class="block-30">
<svg id="placeholder" class="desktop-only" viewBox="0 0 76 76" xmlns="http://www.w3.org/2000/svg">
<defs>
<rect id="path-1" x="0" y="16" width="60" height="60" rx="1"></rect>
<mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="60" height="60" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<rect id="path-3" x="16" y="0" width="60" height="60" rx="1"></rect>
<mask id="mask-4" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="60" height="60" fill="white">
<use xlink:href="#path-3"></use>
</mask>
<rect id="path-5" x="0" y="8" width="20" height="20" rx="1"></rect>
<mask id="mask-6" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="20" height="20" fill="white">
<use xlink:href="#path-5"></use>
</mask>
<rect id="path-7" x="8" y="0" width="20" height="20" rx="1"></rect>
<mask id="mask-8" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="20" height="20" fill="white">
<use xlink:href="#path-7"></use>
</mask>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round">
<g id="Clickhouse_2" transform="translate(-558.000000, -1293.000000)">
<g id="Group-11" transform="translate(558.000000, 1293.000000)">
<use stroke="#FFCC00" mask="url(#mask-2)" stroke-width="4" xlink:href="#path-1"></use>
<use stroke="#FFCC00" mask="url(#mask-4)" stroke-width="4" xlink:href="#path-3"></use>
<path d="M0.989013672,17.017334 L16.8210449,1.16748047" stroke="#FFCC00" stroke-width="2"></path>
<path d="M59.0788574,74.9973145 L74.7983398,59.2650146" stroke="#FFCC00" stroke-width="2"></path>
<path d="M59.1091309,17.1687012 L74.9368896,1.10351562" stroke="#FFCC00" stroke-width="2"></path>
<path d="M1.07910156,17.2504883 L26.0395508,33.4033203" stroke="#FFCC00" stroke-width="2"></path>
<path d="M17.2602539,1.18457031 L34.0175781,25.1796875" stroke="#FFCC00" stroke-width="2"></path>
<path d="M51.2958984,25.4736328 L58.8277588,17" stroke="#FFCC00" stroke-width="2"></path>
<path d="M1.01904297,50.942627 L25.9216309,75.064209" stroke="#FFCC00" stroke-width="2" transform="translate(13.470337, 63.003418) scale(-1, 1) translate(-13.470337, -63.003418) "></path>
<path d="M44.1804199,51.300293 L58.9638672,75.010498" stroke="#FFCC00" stroke-width="2"></path>
<path d="M52.0131836,43.1345215 L75.0227051,58.9299316" stroke="#FFCC00" stroke-width="2"></path>
<g id="Group-3" transform="translate(25.000000, 24.000000)" stroke="#444444">
<use mask="url(#mask-6)" stroke-width="4" xlink:href="#path-5"></use>
<use mask="url(#mask-8)" stroke-width="4" xlink:href="#path-7"></use>
<path d="M19.2587891,1.08825684 L26.7729492,8.8046875" stroke-width="2" transform="translate(23.015869, 4.946472) scale(-1, 1) translate(-23.015869, -4.946472) "></path>
<path d="M1.05773926,1.04125977 L8.82080078,8.9654541" stroke-width="2" transform="translate(4.939270, 5.003357) scale(-1, 1) translate(-4.939270, -5.003357) "></path>
<path d="M1.12487793,18.887207 L9.26220703,26.8897705" stroke-width="2" transform="translate(5.193542, 22.888489) scale(-1, 1) translate(-5.193542, -22.888489) "></path>
<path d="M19.038208,19.1968994 L26.9085693,26.9760742" stroke-width="2" transform="translate(22.973389, 23.086487) scale(-1, 1) translate(-22.973389, -23.086487) "></path>
</g>
</g>
</g>
</g>
</svg>
</div>
<div class="clear"></div>
<h2 id="blazing-fast">Blazing Fast</h2>
<p>ClickHouse's performance <a href="benchmark.html">exceeds</a> comparable column-oriented DBMS currently available
on the market. It&nbsp;processes hundreds of millions to more than a billion rows and tens of gigabytes of data
per single server per second.</p>
<p>ClickHouse uses all available hardware to its full potential to process each query as fast as possible. The peak
processing performance for a single query <span class="grey">(after decompression, only used columns)</span>
stands at more than 2&nbsp;terabytes per second.</p>
</div>
<div id="performance" class="colored-block">
<div class="page">
<h2>ClickHouse works 100-1,000x faster than traditional approaches</h2>
<p>In contrast to common data management methods, where vast amounts of raw data in its native format are available as
a "data lake" for any given query,
ClickHouse offers instant results in most cases: the data is processed faster than it&nbsp;takes
to create a query. Follow the link below to see detailed benchmarks by Yandex of ClickHouse in comparison
with other database management systems. Also there are some links on third-party benchmarks in the following section.</p>
<a id="benchmark_learn_more" href="benchmark.html">
Learn more
</a>
<div class="clear"></div>
</div>
</div>
<div class="page">
<h2 id="independent-benchmarks">Independent Benchmarks</h2>
<ul class="dashed">
<li><a href="https://www.percona.com/blog/2017/02/13/clickhouse-new-opensource-columnar-database/"
rel="external nofollow" target="_blank">ClickHouse: New Open Source Columnar Database</a> by Percona</li>
<li><a href="https://www.percona.com/blog/2017/03/17/column-store-database-benchmarks-mariadb-columnstore-vs-clickhouse-vs-apache-spark/"
title="MariaDB ColumnStore vs. Clickhouse vs. Apache Spark"
rel="external nofollow" target="_blank">Column Store Database Benchmarks</a> by Percona</li>
<li><a href="http://tech.marksblogg.com/billion-nyc-taxi-clickhouse.html"
rel="external nofollow" target="_blank">1.1 Billion Taxi Rides on ClickHouse & an Intel Core i5</a> by Mark Litwintschik</li>
<li><a href="https://tech.marksblogg.com/billion-nyc-taxi-rides-clickhouse-cluster.html"
rel="external nofollow" target="_blank">1.1 Billion Taxi Rides: 108-core ClickHouse Cluster</a> by Mark Litwintschik</li>
<li><a href="https://www.altinity.com/blog/2017/6/20/clickhouse-vs-redshift"
rel="external nofollow" target="_blank">ClickHouse vs Amazon RedShift Benchmark</a> by Altinity</li>
<li><a href="https://carto.com/blog/inside/geospatial-processing-with-clickhouse"
rel="external nofollow" target="_blank">Geospatial processing with Clickhouse</a> by Carto</li>
<li><a href="https://translate.yandex.com/translate?url=http%3A%2F%2Fwww.clickhouse.com.cn%2Ftopic%2F5a72e8ab9d28dfde2ddc5ea2F&amp;lang=zh-en"
rel="external nofollow" target="_blank">ClickHouse and Vertica comparison</a> by zhtsh <span class="grey">(machine translation from Chinese)</span></li>
<li><a href="https://translate.yandex.com/translate?url=http%3A%2F%2Fverynull.com%2F2016%2F08%2F22%2Finfinidb%E4%B8%8Eclickhouse%E5%AF%B9%E6%AF%94%2F&amp;lang=zh-en"
rel="external nofollow" target="_blank">ClickHouse and InfiniDB comparison</a> by RamboLau <span class="grey">(machine translation from Chinese)</span></li>
</ul>
<h2 id="linearly-scalable">Linearly Scalable</h2>
<p>ClickHouse allows companies to add servers to their clusters when necessary without investing time or money into
any additional DBMS modification. The system has been successfully serving
<a href="https://metrica.yandex.com/" rel="external nofollow">Yandex.Metrica</a>,
while the count of servers in it's main production cluster have grown from 60 to 394 in two years,
which are by the way located in six geographically distributed datacenters.</p>
<p>ClickHouse scales well both vertically and horizontally. ClickHouse is easily adaptable to perform either on
cluster with hundreds of nodes, or on a single server or even on a tiny virtual machine. Currently there are
installations with more than two trillion rows per single node,
as well as installations with 100Tb of storage per single node.</p>
<h2 id="hardware-efficient">Hardware Efficient</h2>
<p>ClickHouse processes typical analytical queries two to three orders of magnitude faster than traditional
row-oriented systems with the same available I/O throughput. The system's columnar storage format allows fitting
more hot data in RAM, which leads to a shorter response times.</p>
<p>ClickHouse allows to minimize the number of seeks for range queries, which increases efficiency of using rotational
disk drives, as it&nbsp;maintains locality of reference for continually stored data.</p>
<p>ClickHouse is CPU efficient because of it's vectorized query execution involving relevant processor instructions
and runtime code generation.</p>
<p>By minimizing data transfers for most types of queries, ClickHouse enables companies to manage their data and
create reports without using specialized networks that are aimed at high-performance computing.</p>
<h2 id="fault-tolerant">Fault Tolerant</h2>
<p>ClickHouse supports multi-master asynchronous replication and can be deployed across multiple datacenters.
Downtime of a single node or the whole datacenter won't affect the system's availability for both reads and
writes.
Distributed reads are automatically balanced to live replicas to avoid increasing latency. Replicated data
are synchronized automatically or semi-automatically after server downtime.</p>
</div>
</div>
<div id="grey-block" class="colored-block">
<div class="page">
<h2 id="key-features">Key Features</h2>
<div class="block-50">
<ul class="dashed">
<li>True column-oriented storage</li>
<li>Vectorized query execution</li>
<li>Data compression</li>
<li>Parallel and distributed query execution</li>
<li>Real time query processing</li>
<li>Real time data ingestion</li>
<li>On-disk locality of reference</li>
<li>Cross-datacenter replication</li>
<li>High availability</li>
<li>SQL support</li>
</ul>
</div>
<div class="block-50">
<ul class="dashed">
<li>Local and distributed joins</li>
<li>Pluggable external dimension tables</li>
<li>Arrays and nested data types</li>
<li>Approximate query processing</li>
<li>Probabilistic data structures</li>
<li>Full support of IPv6</li>
<li>Features for web analytics</li>
<li>State-of-the-art algorithms</li>
<li>Detailed documentation</li>
<li>Clean documented code</li>
</ul>
</div>
<div class="clear"></div>
</div>
</div>
<div class="page">
<h2 id="feature-rich">Feature Rich</h2>
<p>ClickHouse features a user-friendly SQL query dialect with a number of built-in analytics capabilities.
For example, it includes probabilistic data
structures for fast and memory-efficient calculation of cardinalities and quantiles. There are functions for
working dates, times and time zones, as well as some specialized ones like addressing URLs and IPs
(both IPv4 and IPv6) and many more.</p>
<p>Data organizing options available in ClickHouse, such as arrays, array joins, tuples and nested data structures, are
extremely efficient for managing denormalized data.</p>
<p>Using ClickHouse allows joining both distributed data and co-located data, as the system supports local joins and
distributed joins. It&nbsp;also offers an opportunity to use external dictionaries, dimension tables loaded from
an external source, for seamless joins with simple syntax.</p>
<p>ClickHouse supports approximate query processing you can get results as fast as you want, which is
indispensable when dealing with terabytes and petabytes of data.</p>
<p>The system's conditional aggregate functions, calculation of totals and extremes, allow getting results with a
single query without having to run a number of them.</p>
<h2 id="success-stories">Success Stories</h2>
<ul class="dashed">
<li><a href="docs/en/introduction/ya_metrika_task/">Yandex.Metrica</a></li>
<li><a href="https://blog.cloudflare.com/http-analytics-for-6m-requests-per-second-using-clickhouse/"
rel="external nofollow" target="_blank">HTTP Analytics</a> and <a href="https://blog.cloudflare.com/how-cloudflare-analyzes-1m-dns-queries-per-second/"
rel="external nofollow" target="_blank">DNS Analytics</a> at CloudFlare</li>
<li><a href="https://www.slideshare.net/glebus/using-clickhouse-for-experimentation-104247173"
rel="external nofollow" target="_blank">ClickHouse for Experimentation</a> at Spotify</li>
<li><a href="https://blog.qrator.net/en/clickhouse-ddos-mitigation_37/"
rel="external nofollow" target="_blank">ClickHouse DB in DDoS mitigation</a> at Qrator</li>
<li><a href="https://translate.yandex.com/translate?url=https%3A%2F%2Fhabrahabr.ru%2Fpost%2F322620%2F&amp;lang=ru-en"
rel="external nofollow" target="_blank">Migrating to Yandex ClickHouse</a> by LifeStreet <span class="grey">(machine translation from Russian)</span></li>
<li><a href="https://translate.yandex.com/translate?url=http%3A%2F%2Fsouslecapot.net%2F2018%2F11%2F21%2Fpatrick-chatain-vp-engineering-chez-contentsquare-penser-davantage-amelioration-continue-que-revolution-constante%2F&lang=fr-en"
rel="external nofollow" target="_blank">ClickHouse at ContentSquare</a> <span class="grey">(machine translation from French)</span></li>
<li><a href="https://translate.yandex.com/translate?url=https%3A%2F%2Fhabrahabr.ru%2Fcompany%2Fsmi2%2Fblog%2F314558%2F&amp;lang=ru-en"
rel="external nofollow" target="_blank">How to start ClickHouse up and win the jackpot</a> by SMI2 <span class="grey">(machine translation from Russian)</span></li>
<li><a href="https://translate.yandex.com/translate?url=http%3A%2F%2Fwww.jianshu.com%2Fp%2F4c86a2478cca&amp;lang=zh-en"
rel="external nofollow" target="_blank">First place at Analysys OLAP algorithm contest</a> <span class="grey">(machine translation from Chinese)</span></li>
<li><a href="https://translate.yandex.com/translate?url=https%3A%2F%2Ftech.geniee.co.jp%2Fentry%2F2017%2F07%2F20%2F160100"
rel="external nofollow" target="_blank">Speeding up Report API</a> at Geniee <span class="grey">(machine translation from Japanese)</span></li>
<li><a href="https://www.yandex.com/company/press_center/press_releases/2012/2012-04-10/"
rel="external nofollow" target="_blank">LHCb experiment</a> by CERN</li>
</ul>
<h2>When to use ClickHouse</h2>
<p>For analytics over stream of clean, well structured and immutable events or logs.
It is recommended to put each such stream into a single wide fact table with pre-joined dimensions.
</p>
<p>Some examples of viable applications:</p>
<ul class="dashed">
<li>Web and App analytics</li>
<li>Advertising networks and RTB</li>
<li>Telecommunications</li>
<li>E-commerce and finance</li>
<li>Information security</li>
<li>Monitoring and telemetry</li>
<li>Time series</li>
<li>Business intelligence</li>
<li>Online games</li>
<li>Internet of Things</li>
</ul>
<h2>When <span class="red">NOT</span> to use ClickHouse</h2>
<ul class="dashed">
<li>Transactional workloads (OLTP)</li>
<li>Key-value access with high request rate</li>
<li>Blob or document storage</li>
<li>Over-normalized data</li>
</ul>
<h2 id="highly-reliable">Highly Reliable</h2>
<p>ClickHouse has been managing petabytes of data serving a number of highload mass audience services of
<a href="https://www.yandex.com/company/"
rel="external nofollow">Yandex</a>, Russia's
leading search provider and one of largest European IT companies.
Since 2012, ClickHouse has been providing robust database management for the company's <a
href="https://metrica.yandex.com/" rel="external nofollow">web analytics service</a>, comparison
e-commerce platform, public email service, online advertising platform, business intelligence tools
and infrastructure monitoring.</p>
<p>ClickHouse can be configured as purely distributed system located on independent nodes,
without any single points of failure.</p>
<p>Software and hardware failures or misconfigurations do not result in loss of data. Instead of deleting "broken"
data, ClickHouse saves it&nbsp;or asks you what to do before a startup. All data is checksummed before every
read or write to disk or network. It&nbsp;is virtually impossible to delete data by accident as there are safeguards
even for human errors.</p>
<p>ClickHouse offers flexible limits on query complexity and resource usage, which can be fine-tuned with settings.
It&nbsp;is possible to simultaneously serve both a number of high priority low-latency requests and some
long-running queries with background priority.</p>
<h2 id="simple-and-handy">Simple and Handy</h2>
<p>ClickHouse streamlines all your data processing. It's easy to use: ingest all your structured data into the
system, and it&nbsp;is instantly available for reports. New columns for new properties or dimensions can be
easily added to the system at any time without slowing it&nbsp;down.</p>
<p>ClickHouse is simple and works out-of-the-box. As well as performing on hundreds of node clusters, this system
can be easily installed on a single server or even a virtual machine. No development experience or code-writing
skills are required to install ClickHouse.</p>
<h2 id="quick-start">Quick Start</h2>
<p>System requirements: Linux, x86_64 with SSE 4.2.</p>
<p>Install packages for <span class="distributive_selected" id="repo_deb">Ubuntu/Debian</span>, <span class="distributive_not_selected" id="repo_rpm">CentOS/RedHat</span> or <span class="distributive_not_selected" id="repo_tgz">other Linux</span>:</p>
<code id="packages-install">
<pre id="instruction_deb">
sudo apt-get install dirmngr
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4
echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list
sudo apt-get update
sudo apt-get install -y clickhouse-server clickhouse-client
sudo service clickhouse-server start
clickhouse-client
</pre>
<pre id="instruction_rpm" style="display: none;">
sudo yum install yum-utils
sudo rpm --import https://repo.yandex.ru/clickhouse/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.yandex.ru/clickhouse/rpm/stable/x86_64
sudo yum install clickhouse-server clickhouse-client
sudo /etc/init.d/clickhouse-server start
clickhouse-client
</pre>
<pre id="instruction_tgz" style="display: none;">
export LATEST_VERSION=`curl https://api.github.com/repos/ClickHouse/ClickHouse/tags | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n 1`
curl -O https://repo.yandex.ru/clickhouse/tgz/clickhouse-common-static-$LATEST_VERSION.tgz
curl -O https://repo.yandex.ru/clickhouse/tgz/clickhouse-common-static-dbg-$LATEST_VERSION.tgz
curl -O https://repo.yandex.ru/clickhouse/tgz/clickhouse-server-$LATEST_VERSION.tgz
curl -O https://repo.yandex.ru/clickhouse/tgz/clickhouse-client-$LATEST_VERSION.tgz
tar -xzvf clickhouse-common-static-$LATEST_VERSION.tgz
sudo clickhouse-common-static-$LATEST_VERSION/install/doinst.sh
tar -xzvf clickhouse-common-static-dbg-$LATEST_VERSION.tgz
sudo clickhouse-common-static-dbg-$LATEST_VERSION/install/doinst.sh
tar -xzvf clickhouse-server-$LATEST_VERSION.tgz
sudo clickhouse-server-$LATEST_VERSION/install/doinst.sh
sudo /etc/init.d/clickhouse-server start
tar -xzvf clickhouse-client-$LATEST_VERSION.tgz
sudo clickhouse-client-$LATEST_VERSION/install/doinst.sh
</pre>
</code>
<p>For other operating systems the easiest way to get started is using
<a href="https://hub.docker.com/r/yandex/clickhouse-server/" rel="external nofollow"
target="_blank">
official Docker images of ClickHouse</a>, this is not the only <a href="https://clickhouse.tech/docs/en/getting_started/">option</a> though.
Alternatively, you can easily get a running ClickHouse instance or cluster at
<a href="https://cloud.yandex.com/services/managed-clickhouse?utm_source=referrals&utm_medium=clickhouseofficialsite&utm_campaign=link1" rel="external nofollow" target="_blank">
Yandex Managed Service for ClickHouse</a>.
</p>
<p>After you got connected to your ClickHouse server, you can proceed to <strong><a href="/docs/en/getting_started/tutorial/">tutorial</a></strong> or <strong><a href="docs/en/">full
documentation</a></strong>.</p>
<h2 id="contacts">Contacts</h2>
<ul class="dashed">
<li>Subscribe to the <a href="https://clickhouse.yandex/blog/en" target="_blank">official ClickHouse blog</a>
and its <a href="https://clickhouse.yandex/blog/ru" target="_blank">counterpart in Russian</a>.</li>
<li>Ask any questions on <a href="https://stackoverflow.com/questions/tagged/clickhouse"
rel="external nofollow" target="_blank">Stack Overflow</a> or
<a href="https://groups.google.com/group/clickhouse"
rel="external nofollow" target="_blank">Google Group</a>.
</li>
<li>Join Telegram chat to discuss with real users in <a
href="https://telegram.me/clickhouse_en"
rel="external nofollow" target="_blank">English</a> or in
<a href="https://telegram.me/clickhouse_ru"
rel="external nofollow" target="_blank">Russian</a>.</li>
<li>Watch video content on <a href="https://www.youtube.com/c/ClickHouseDB"
rel="external nofollow" target="_blank">YouTube channel</a>.</li>
<li>Follow official <a
href="https://twitter.com/ClickHouseDB"
rel="external nofollow" target="_blank">Twitter account</a>.</li>
<li>Open <a href="https://github.com/ClickHouse/ClickHouse/issues/new/choose"
rel="external nofollow" target="_blank">GitHub issue</a> if you have a bug report or feature request.</li>
<li>Or email Yandex ClickHouse team directly at
<a id="feedback_email" href="">turn on JavaScript to see email address</a>.
You can also <a href="https://forms.yandex.com/surveys/meet-yandex-clickhouse-team/" target="_blank" rel="external nofollow">fill this form</a> to meet us in person.</li>
</ul>
<p>Friendly reminder: check out the documentation in <a href="docs/en/">English</a>, <a href="docs/ru/">Russian</a>, <a href="docs/zh/">Chinese</a> or <a href="docs/fa/">Farsi</a> first &mdash; maybe your question is already covered.
</p>
<h2>Like ClickHouse?</h2>
<p>Help to spread the word about it via <a rel="external nofollow" target="_blank" href="https://www.facebook.com/sharer.php?u=https://clickhouse.tech">Facebook</a>,
<a rel="external nofollow" target="_blank" href="https://twitter.com/intent/tweet?url=https://clickhouse.tech">Twitter</a> and
<a rel="external nofollow" target="_blank" href="https://www.linkedin.com/shareArticle?url=https://clickhouse.tech">LinkedIn</a>!</p>
<p>Also hosting ClickHouse Meetups is very appreciated, <a href="https://forms.yandex.com/surveys/meet-yandex-clickhouse-team/" target="_blank" rel="external nofollow">fill this form</a>
if you are interested and we'll get in touch.
Short reports about previous meetups are <a href="https://clickhouse.yandex/blog/en?tag=meetup" target="_blank">published in official ClickHouse blog</a>.</p>
<p class="warranty"><a href="https://github.com/ClickHouse/ClickHouse/blob/master/LICENSE"
rel="external nofollow" target="_blank">
ClickHouse source code is published under Apache 2.0 License.</a> Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.</p>
<p id="footer">&copy; 20162020 <a href="https://yandex.com/company/" rel="external nofollow">Yandex LLC</a></p>
</div>
<a id="github_link"
href="https://cloud.yandex.com/services/managed-clickhouse?utm_source=referrals&utm_medium=clickhouseofficialsite&utm_campaign=link2"
rel="external nofollow"
target="_blank"
><div id="github">Try on Yandex.Cloud</div></a>
<script type="text/javascript" src="https://yastatic.net/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$.get('https://raw.githubusercontent.com/ClickHouse/ClickHouse/master/README.md', function(e) {
var skip = true;
var lines = e.split('\n');
var result = [];
$.each(lines, function(idx) {
var line = lines[idx];
if (skip) {
if (line.includes('Upcoming Events')) {
skip = false;
}
} else {
if (!line) { return; };
line = line.split('](');
var tail = line[1].split(') ');
result.push(
'<a class="announcement-link" rel="external nofollow" target="_blank" href="' +
tail[0] + '">' + line[0].replace('* [', '').replace('ClickHouse Meetup in ', '') +
'</a> ' + tail[1].slice(0, -1)
);
}
});
if (result.length) {
if (result.length == 1) {
result = 'Upcoming Meetup: ' + result[0];
} else {
result = 'Upcoming Meetups: ' + result.join(', ');
var offset = result.lastIndexOf(', ');
result = result.slice(0, offset) + result.slice(offset).replace(', ', ' and ');
}
$('#announcement>.page').html(result);
}
});
var name = $('#logo-text').attr('alt').trim().toLowerCase();
var feedback_address = name + '-feedback' + '@yandex-team.com';
var feedback_email = $('#feedback_email');
feedback_email.attr('href', 'mailto:' + feedback_address);
feedback_email.html(feedback_address);
$("a[href^='#']").on('click', function (e) {
e.preventDefault();
var selector = $(e.target).attr('href');
var offset = 0;
if (selector) {
offset = $(selector).offset().top - $('#logo').height() * 1.5;
}
$('html, body').animate({
scrollTop: offset
}, 500);
window.history.replaceState('', document.title, window.location.href.replace(location.hash, '') + this.hash);
});
var hostParts = window.location.host.split('.');
if (hostParts.length > 2 && hostParts[0] != 'test' && hostParts[1] != 'github') {
window.location.host = hostParts[0] + '.' + hostParts[1];
}
var available_distributives = ['deb', 'rpm', 'tgz'];
var selected_distributive = 'deb';
function refresh_distributives() {
available_distributives.forEach(function (name) {
if (name == selected_distributive) {
$('#repo_' + name).attr("class", "distributive_selected");
$('#instruction_' + name).show();
} else {
$('#repo_' + name).attr("class", "distributive_not_selected");
$('#instruction_' + name).hide();
}
});
};
refresh_distributives();
available_distributives.forEach(function (name) {
$('#repo_' + name).on('click', function () {
selected_distributive = name;
refresh_distributives();
});
});
});
</script>
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
(function (d, w, c) {
(w[c] = w[c] || []).push(function() {
try {
w.yaCounter18343495 = new Ya.Metrika2({
id:18343495,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true
});
} catch(e) { }
});
var n = d.getElementsByTagName("script")[0],
s = d.createElement("script"),
f = function () { n.parentNode.insertBefore(s, n); };
s.type = "text/javascript";
s.async = true;
s.src = "https://mc.yandex.ru/metrika/tag.js";
if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else { f(); }
})(document, window, "yandex_metrika_callbacks2");
</script>
<noscript>
<div><img src="https://mc.yandex.ru/watch/18343495" style="position:absolute; left:-9999px;" alt=""/></div>
</noscript>
<!-- /Yandex.Metrika counter -->
</body>
</html>

10220
website/jquery.js vendored

File diff suppressed because it is too large Load Diff

59
website/js/base.js Normal file
View File

@ -0,0 +1,59 @@
$(document).ready(function () {
var name = $('#logo-text').attr('alt').trim().toLowerCase();
var feedback_address = name + '-feedback' + '@yandex-team.com';
var feedback_email = $('#feedback_email');
feedback_email.attr('href', 'mailto:' + feedback_address);
feedback_email.html(feedback_address);
$(document).click(function (event) {
var target = $(event.target);
var target_id = target.attr('id');
var selector = target.attr('href');
var is_tab = target.attr('role') === 'tab';
$('#navbar-toggle').collapse('hide');
if (target_id && target_id.startsWith('logo-')) {
selector = '#';
}
if (selector && selector.startsWith('#') && !is_tab) {
event.preventDefault();
var dst = window.location.href.replace(window.location.hash, '');
var offset = 0;
if (selector !== '#') {
offset = $(selector).offset().top - $('#navbar-toggle').height() * 1.5;
dst += selector;
}
$('html, body').animate({
scrollTop: offset
}, 500);
window.history.replaceState('', document.title, dst);
}
});
(function (d, w, c) {
(w[c] = w[c] || []).push(function() {
try {
w.yaCounter18343495 = new Ya.Metrika2({
id:18343495,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true
});
} catch(e) { }
});
var n = d.getElementsByTagName("script")[0],
s = d.createElement("script"),
f = function () { n.parentNode.insertBefore(s, n); };
s.type = "text/javascript";
s.async = true;
s.src = "https://mc.yandex.ru/metrika/tag.js";
if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else { f(); }
})(document, window, "yandex_metrika_callbacks2");
});

View File

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="en">
<head>
{% include "templates/common_meta.html" %}
{% include "templates/common_css.html" %}
</head>
<body>
{% block content %}
{% endblock %}
{% include "templates/footer.html" %}
{% include "templates/common_js.html" %}
</body>
</html>

View File

@ -0,0 +1,4 @@
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link href="css/base.css?{{ rev_short }}" media="all" rel="stylesheet" />
{% block extracss %}
{% endblock %}

View File

@ -0,0 +1,9 @@
<script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
{% block extrajs %}
{% endblock %}
<script type="text/javascript" src="js/base.js?{{ rev_short }}"></script>
<noscript>
<div><img src="https://mc.yandex.ru/watch/18343495" style="position:absolute; left:-9999px;" alt=""/></div>
</noscript>

View File

@ -0,0 +1,21 @@
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>ClickHouse — open source distributed column-oriented DBMS</title>
<link rel="shortcut icon" href="/favicon.ico"/>
<meta property="og:title" content="ClickHouse DBMS"/>
<meta property="og:description"
content="ClickHouse is an open source column-oriented database management system that allows generating analytical data reports in real time using SQL queries."/>
<meta property="og:type" content="website"/>
<meta property="og:url" content="https://clickhouse.tech"/>
<meta property="og:image" content="https://clickhouse.tech/images/logo.png"/>
<meta property="twitter:title" content="ClickHouse DBMS"/>
<meta name="description"
content="ClickHouse is an open source distributed column-oriented database management system that allows generating analytical data reports in real time using SQL queries. Сreated by Yandex ClickHouse manages extremely large volumes of data in a stable and sustainable manner."/>
<meta name="keywords"
content="ClickHouse, DBMS, OLAP, relational, analytics, analytical, big data, open-source, SQL, web-analytics" />

View File

@ -0,0 +1,15 @@
<div id="footer" class="bg-dark text-muted mt-5">
<div class="container py-3">
<div class="row">
<div class="col-lg-8 text-left">
<a href="https://github.com/ClickHouse/ClickHouse/blob/master/LICENSE"
rel="external nofollow" target="_blank" class="stealth-link">
ClickHouse source code is published under Apache 2.0 License.</a> Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.
</div>
<div class="col-lg-4 text-right">
&copy; 20162020 <a href="https://yandex.com/company/" rel="external nofollow" target="_blank" class="text-muted">Yandex LLC</a>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,44 @@
<div>
<div class="container">
<h2 id="contacts" class="mt-5">Contacts</h2>
<ul class="lead">
<li>Subscribe to the <a href="https://clickhouse.yandex/blog/en" target="_blank">official ClickHouse blog</a>
and its <a href="https://clickhouse.yandex/blog/ru" target="_blank">counterpart in Russian</a>.</li>
<li>Ask any questions on <a href="https://stackoverflow.com/questions/tagged/clickhouse"
rel="external nofollow" target="_blank">Stack Overflow</a>,
<a href="https://join.slack.com/t/clickhousedb/shared_invite/enQtOTUzMjM4ODQwNTc5LWJmMjE3Yjc2YmI1ZDBlZmI4ZTc3OWY3ZTIwYTljYzY4MzBlODM3YzBjZTc1YmYyODRlZTJkYTgzYzBiNTA2Yjk" rel="external nofollow" target="_blank">Slack</a> or
<a href="https://groups.google.com/group/clickhouse"
rel="external nofollow" target="_blank">Google Group</a>.
</li>
<li>Join Telegram chat to discuss with real users in <a
href="https://telegram.me/clickhouse_en"
rel="external nofollow" target="_blank">English</a> or in
<a href="https://telegram.me/clickhouse_ru"
rel="external nofollow" target="_blank">Russian</a>.</li>
<li>Watch video content on <a href="https://www.youtube.com/c/ClickHouseDB"
rel="external nofollow" target="_blank">YouTube channel</a>.</li>
<li>Follow official <a
href="https://twitter.com/ClickHouseDB"
rel="external nofollow" target="_blank">Twitter account</a>.</li>
<li>Open <a href="https://github.com/ClickHouse/ClickHouse/issues/new/choose"
rel="external nofollow" target="_blank">GitHub issue</a> if you have a bug report or feature request.</li>
<li>Or email Yandex ClickHouse team directly at
<a id="feedback_email" href="">turn on JavaScript to see email address</a>.
You can also <a href="https://forms.yandex.com/surveys/meet-yandex-clickhouse-team/" target="_blank" rel="external nofollow">fill this form</a> to meet us in person.</li>
</ul>
<p class="lead">Friendly reminder: check out the documentation in <a href="docs/en/">English</a>, <a href="docs/ru/">Russian</a>, <a href="docs/zh/">Chinese</a>, <a href="docs/ja/">Japanese</a> or <a href="docs/fa/">Farsi</a> first &mdash; maybe your question is already covered.
</p>
<h2 class="mt-5">Like ClickHouse?</h2>
<p class="lead">Help to spread the word about it via <a rel="external nofollow" target="_blank" href="https://www.facebook.com/sharer.php?u=https://clickhouse.tech">Facebook</a>,
<a rel="external nofollow" target="_blank" href="https://twitter.com/intent/tweet?url=https://clickhouse.tech">Twitter</a> and
<a rel="external nofollow" target="_blank" href="https://www.linkedin.com/shareArticle?url=https://clickhouse.tech">LinkedIn</a>!</p>
<p class="lead">Also hosting ClickHouse Meetups is very appreciated, <a href="https://forms.yandex.com/surveys/meet-yandex-clickhouse-team/" target="_blank" rel="external nofollow">fill this form</a>
if you are interested and we'll get in touch.
Short reports about previous meetups are <a href="https://clickhouse.yandex/blog/en?tag=meetup" target="_blank">published in official ClickHouse blog</a>.</p>
</div>
</div>

View File

@ -0,0 +1,41 @@
<div>
<div class="container my-5">
<div class="row mb-5">
<div class="col-lg">
<h2 id="hardware-efficient" class="my-4">Hardware efficient</h2>
<p class="lead">ClickHouse processes typical analytical queries two to three orders of magnitude faster than traditional
row-oriented systems with the same available I/O throughput and CPU capacity. The system's columnar storage format allows fitting
more hot data in RAM, which leads to a shorter typical response times.</p>
</div>
<div class="col-lg-4">
<img src="images/index/hardware-efficient.svg" alt="ClickHouse is hardware efficient" />
</div>
</div>
<div class="row">
<div class="col-lg">
<h3>Strives for CPU efficiency</h3>
<p>Vectorized query execution involves relevant SIMD processor instructions
and runtime code generation. Processing data in columns increases CPU line cache hit rate.</p>
</div>
<div class="col-lg">
<h3>Optimizes disk drive access</h3>
<p>ClickHouse minimizes the number of seeks for range queries, which increases efficiency of using rotational
disk drives, as it maintains locality of reference for continually stored data.</p>
</div>
<div class="col-lg">
<h3>Minimizes data transfers</h3>
<p>ClickHouse enables companies to manage their data and
create reports without using specialized networks that are aimed at high-performance computing.</p>
</div>
</div>
</div>
</div>
<div>
<div class="container text-center">
<img src="images/curl.svg" alt="ClickHouse не тормозит" />
</div>
</div>

View File

@ -0,0 +1,30 @@
{% if events %}
<div id="events" class="bg-light my-0">
<div class="container py-5">
{% if events|length == 1 %}
{% set event = events[0] %}
<h2>Upcoming Event</h2>
<p class="lead">
<a class="text-reset" rel="external nofollow" target="_blank"
href="{{ event.signup_link }}">
<span class="text-orange">{{ event.event_date }}</span>&nbsp;
{{ event.event_name }}
</a>
</p>
{% else %}
<h2>Upcoming Events</h2>
<ul class="lead list-unstyled">
{% for event in events %}
<li>
<a class="text-reset" rel="external nofollow" target="_blank"
href="{{ event.signup_link }}">
<span class="text-orange">{{ event.event_date }}</span>&nbsp;
{{ event.event_name }}
</a>
</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
{% endif %}

View File

@ -0,0 +1,52 @@
<div class="bg-dark text-light">
<div class="container py-5 my-5">
<div class="row text-center">
<div class="col-lg">
<h2 id="key-features">ClickHouse. Just makes you think faster!</h2>
</div>
</div>
<div class="row my-3">
<div class="col-lg">
<ul class="lead list-unstyled mb-0 mb-lg-1">
<li><span class="text-yellow"></span> True column-oriented storage</li>
<li><span class="text-yellow"></span> Vectorized query execution</li>
<li><span class="text-yellow"></span> Parallel and distributed query execution</li>
<li><span class="text-yellow"></span> Real time query processing</li>
<li><span class="text-yellow"></span> Real time data ingestion</li>
<li><span class="text-yellow"></span> On-disk locality of reference</li>
<li><span class="text-yellow"></span> Data compression</li>
</ul>
</div>
<div class="col-lg">
<ul class="lead list-unstyled mb-0 mb-lg-1">
<li><span class="text-yellow"></span> SQL support</li>
<li><span class="text-yellow"></span> Data skipping indices</li>
<li><span class="text-yellow"></span> High availability</li>
<li><span class="text-yellow"></span> Cross-datacenter replication</li>
<li><span class="text-yellow"></span> Local and distributed joins</li>
<li><span class="text-yellow"></span> Pluggable external dimension tables</li>
<li><span class="text-yellow"></span> Arrays and nested data types</li>
</ul>
</div>
<div class="col-lg">
<ul class="lead list-unstyled mb-0 mb-lg-1">
<li><span class="text-yellow"></span> Approximate query processing</li>
<li><span class="text-yellow"></span> Probabilistic data structures</li>
<li><span class="text-yellow"></span> Features for web and mobile analytics</li>
<li><span class="text-yellow"></span> Full support of IPv6</li>
<li><span class="text-yellow"></span> State-of-the-art algorithms</li>
<li><span class="text-yellow"></span> Detailed documentation</li>
<li><span class="text-yellow"></span> Clean documented code</li>
</ul>
</div>
</div>
<div class="row">
<div class="col-lg text-lg-right my-3 my-lg-0">
<a href="#quick-start" class="btn btn-lg btn-yellow w-50" role="button">Quick start</a>
</div>
<div class="col-lg">
<a href="docs/en/" class="btn btn-lg btn-outline-yellow w-50" role="button">Documentation</a>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,47 @@
<div class="container">
<div class="row">
<div class="col-lg-7 py-5">
<h1 class="display-5">ClickHouse is a fast <a href="https://github.com/ClickHouse/ClickHouse" rel="external nofollow" target="_blank">open-source</a> database management system</h1>
<p class="lead">It is column-oriented and allows to generate analytical reports using SQL queries in real-time.</p>
<div class="row lead my-3">
<div class="col-md mb-0 mb-md-1">
<ul class="list-unstyled mb-0 mb-md-1">
<li><a class="stealth-link" href="#blazing-fast">✓ Blazing fast</a></li>
<li><a class="stealth-link" href="#linearly-scalable">✓ Linearly scalable</a></li>
<li><a class="stealth-link" href="#feature-rich">✓ Feature rich</a></li>
</ul>
</div>
<div class="col-md">
<ul class="list-unstyled">
<li><a class="stealth-link" href="#hardware-efficient">✓ Hardware efficient</a></li>
<li><a class="stealth-link" href="#fault-tolerant">✓ Fault tolerant</a></li>
<li><a class="stealth-link" href="#highly-reliable">✓ Highly reliable</a></li>
</ul>
</div>
</div>
<div class="row lead">
<div class="col-lg pb-2">
<a href="#quick-start" class="btn btn-lg btn-yellow w-100 mb-3" role="button">Quick start</a>
{#
<a href="https://play.clickhouse.tech/?file=welcome" class="btn btn-lg btn-yellow w-100" role="button" target="_blank" rel="external nofollow">
<div class="py-2">
<h2>Try online demo</h2>
<div class="lead">Powered by Yandex.Cloud</div>
</div>
</a>
#}
</div>
<div class="col-lg pb-2">
{#
<a href="#quick-start" class="btn btn-lg btn-outline-orange w-100 mb-3" role="button">Quick start</a>
#}
<a href="docs/en/" class="btn btn-lg btn-outline-orange w-100" role="button">Documentation</a>
</div>
</div>
</div>
<div class="col-lg-5 py-5 px-0">
<img src="images/index/intro.svg" alt="ClickHouse is capable of generating analytical data reports in real time" class="my-3" />
</div>
</div>
</div>

View File

@ -0,0 +1,29 @@
<nav class="navbar navbar-expand-lg navbar-light bg-white sticky-top">
<div class="container">
<a class="navbar-brand" href="#">
<img id="logo-icon" src="images/logo.svg" />
<img id="logo-text" src="images/clickhouse-black.svg" alt="ClickHouse" />
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar-toggle" aria-controls="navbar-toggle" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbar-toggle">
<ul class="navbar-nav ml-auto mt-2 mt-lg-0 justify-content-end">
<li class="nav-item">
<a class="nav-link" href="#quick-start">Quick start</a>
</li>
<li class="nav-item">
<a class="nav-link" href="docs/en/">Documentation</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://clickhouse.yandex/blog/en/"
rel="external nofollow">Blog</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#contacts">Contacts</a>
</li>
</ul>
</div>
</div>
</nav>

View File

@ -0,0 +1,45 @@
<div id="blazing-fast" class="bg-dark my-0">
<div class="container text-light py-5">
<div class="row text-center">
<h2 class="display-5 mx-auto mb-3">ClickHouse works 100-1000x faster than traditional approaches</h2>
<p class="lead">ClickHouse's performance <a href="benchmark.html">exceeds</a> comparable column-oriented DBMS currently available
on the market. It processes hundreds of millions to more than a billion rows and tens of gigabytes of data per single server per second.</p>
<a href="benchmark.html" class="btn btn-lg btn-yellow mt-3 mx-auto" role="button">Detailed comparison</a>
</div>
<div class="row mt-5">
<h2 class="mb-3">Independent benchmarks</h2>
</div>
<div class="row">
<div class="col-lg p-0">
<ul class="list-unstyled">
<li class="mb-3"><a href="https://www.percona.com/blog/2017/02/13/clickhouse-new-opensource-columnar-database/"
rel="external nofollow" target="_blank" class="stealth-link">ClickHouse: New Open Source Columnar Database <div class="text-yellow">Percona</div></a></li>
<li class="mb-3"><a href="https://www.percona.com/blog/2017/03/17/column-store-database-benchmarks-mariadb-columnstore-vs-clickhouse-vs-apache-spark/"
title="MariaDB ColumnStore vs. Clickhouse vs. Apache Spark"
rel="external nofollow" target="_blank" class="stealth-link">Column Store Database Benchmarks <div class="text-yellow">Percona</div></a></li>
<li class="mb-3"><a href="http://tech.marksblogg.com/billion-nyc-taxi-clickhouse.html"
rel="external nofollow" target="_blank" class="stealth-link">1.1 Billion Taxi Rides on ClickHouse & an Intel Core i5 <div class="text-yellow">Mark Litwintschik</div></a></li>
<li class="mb-3"><a href="https://tech.marksblogg.com/billion-nyc-taxi-rides-clickhouse-cluster.html"
rel="external nofollow" target="_blank" class="stealth-link">1.1 Billion Taxi Rides: 108-core ClickHouse Cluster <div class="text-yellow">Mark Litwintschik</div></a></li>
</ul>
</div>
<div class="col-lg p-0">
<ul class="list-unstyled">
<li class="mb-3">
<a href="https://www.altinity.com/blog/2017/6/20/clickhouse-vs-redshift"
rel="external nofollow" target="_blank" class="stealth-link">ClickHouse vs Amazon RedShift Benchmark <div class="text-yellow">Altinity</div></a></li>
<li class="mb-3"><a href="https://carto.com/blog/inside/geospatial-processing-with-clickhouse"
rel="external nofollow" target="_blank" class="stealth-link">Geospatial processing with Clickhouse <div class="text-yellow">Carto</div></a></li>
<li class="mb-3"><a href="https://translate.yandex.com/translate?url=http%3A%2F%2Fwww.clickhouse.com.cn%2Ftopic%2F5a72e8ab9d28dfde2ddc5ea2F&amp;lang=zh-en"
rel="external nofollow" target="_blank" class="stealth-link">ClickHouse and Vertica comparison <div><span class="text-yellow">zhtsh</span> <span class="text-muted">(machine translation from Chinese)</span></div></a></li>
<li class="mb-3"><a href="https://translate.yandex.com/translate?url=http%3A%2F%2Fverynull.com%2F2016%2F08%2F22%2Finfinidb%E4%B8%8Eclickhouse%E5%AF%B9%E6%AF%94%2F&amp;lang=zh-en"
rel="external nofollow" target="_blank" class="stealth-link">ClickHouse and InfiniDB comparison<div><span class="text-yellow">RamboLau</span> <span class="text-muted">(machine translation from Chinese)</span></div></a></li>
</ul>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,51 @@
<div>
<div class="container lead">
<h2 id="quick-start" class="mt-5">Quick start</h2>
<p>System requirements for pre-built packages: Linux, x86_64 with SSE 4.2.</p>
<ul class="nav nav-tabs" id="install-tab" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="deb-tab" data-toggle="tab" href="#deb" role="tab" aria-controls="deb" aria-selected="true" title="deb packages">Ubuntu or Debian</a>
</li>
<li class="nav-item">
<a class="nav-link" id="rpm-tab" data-toggle="tab" href="#rpm" role="tab" aria-controls="rpm" aria-selected="false" title="rpm packages">CentOS or RedHat</a>
</li>
<li class="nav-item">
<a class="nav-link" id="tgz-tab" data-toggle="tab" href="#tgz" role="tab" aria-controls="tgz" aria-selected="false" title="tgz packages">Other Linux</a>
</li>
<li class="nav-item">
<a class="nav-link" href="docs/en/commercial/cloud/" role="tab" aria-controls="cloud" aria-selected="false" title="Cloud Service Providers">Cloud</a>
</li>
</ul>
<div class="tab-content" id="install-tab-content">
<div class="tab-pane show active" id="deb" role="tabpanel" aria-labelledby="deb-tab">
{% include "templates/install/deb.html" %}
</div>
<div class="tab-pane" id="rpm" role="tabpanel" aria-labelledby="rpm-tab">
{% include "templates/install/rpm.html" %}
</div>
<div class="tab-pane" id="tgz" role="tabpanel" aria-labelledby="thz-tab">
{% include "templates/install/tgz.html" %}
</div>
</div>
<p>For other operating systems the easiest way to get started is using
<a href="https://hub.docker.com/r/yandex/clickhouse-server/" rel="external nofollow"
target="_blank">
official Docker images of ClickHouse</a>, this is not the only <a href="https://clickhouse.tech/docs/en/getting_started/">option</a> though.
Alternatively, you can easily get a running ClickHouse instance or cluster at
<a href="https://cloud.yandex.com/services/managed-clickhouse?utm_source=referrals&utm_medium=clickhouseofficialsite&utm_campaign=link1" rel="external nofollow" target="_blank">
Yandex Managed Service for ClickHouse</a>.
</p>
<p>After you got connected to your ClickHouse server, you can proceed to:</p>
<p>
<a href="docs/en/getting_started/tutorial/" class="btn btn-lg btn-outline-orange" role="button">
&nbsp;&nbsp;&nbsp;Tutorial&nbsp;&nbsp;&nbsp;
</a>&nbsp;
<a href="docs/en/" class="btn btn-lg btn-outline-orange" role="button">Documentation</a>
</p>
</div>
</div>

View File

@ -0,0 +1,27 @@
<div>
<div class="container">
<h2 id="highly-reliable" class="mt-5">Highly reliable</h2>
<p>ClickHouse has been managing petabytes of data serving a number of highload mass audience services of
<a href="https://www.yandex.com/company/"
rel="external nofollow">Yandex</a>, Russia's
leading search provider and one of largest European IT companies.
Since 2012, ClickHouse has been providing robust database management for the company's <a
href="https://metrica.yandex.com/" rel="external nofollow">web analytics service</a>, comparison
e-commerce platform, public email service, online advertising platform, business intelligence tools
and infrastructure monitoring.</p>
<p>ClickHouse can be configured as purely distributed system located on independent nodes,
without any single points of failure.</p>
<p>Software and hardware failures or misconfigurations do not result in loss of data. Instead of deleting "broken"
data, ClickHouse saves it&nbsp;or asks you what to do before a startup. All data is checksummed before every
read or write to disk or network. It&nbsp;is virtually impossible to delete data by accident as there are safeguards
even for human errors.</p>
<p>ClickHouse offers flexible limits on query complexity and resource usage, which can be fine-tuned with settings.
It&nbsp;is possible to simultaneously serve both a number of high priority low-latency requests and some
long-running queries with background priority.</p>
</div>
</div>

View File

@ -0,0 +1,36 @@
<div>
<div class="container py-5">
<div class="row">
<div class="col-lg">
<h2 id="feature-rich">Feature rich</h2>
</div>
</div>
<div class="row my-5">
<div class="col-lg">
<div class="bg-number">1</div>
<h4>User-friendly SQL dialect</h4>
<p>ClickHouse features a user-friendly SQL query dialect with a number of built-in analytics capabilities. In additional to common functions that could by found in most DBMS, ClickHouse comes with a lot of domain-specific functions and features out of the box.</p>
</div>
<div class="col-lg">
<div class="bg-number">2</div>
<h4>Efficient managing of denormalized data</h4>
<p>Column-oriented nature of ClickHouse allows having hundreds or thousands of columns per table without slowing down SELECT queries. It's possible to pack even more data in by leveraging wide range data organizing options, such as arrays, tuples and nested data structures.</p>
</div>
</div>
<div class="row">
<div class="col-lg">
<div class="bg-number">3</div>
<h4>Join distributed or co-located data</h4>
<p>ClickHouse provides various options for joining tables. Joins could be either cluster local, they can also access data stored in external systems. There's also a external dictionaries support that provide alternative more simple syntax for accessing data from outside source.</p>
</div>
<div class="col-lg">
<div class="bg-number">4</div>
<h4>Approximate query processing</h4>
<p>Users can control trade-off between result accuracy and query execution time, which is handy when dealing with multiple terabytes or petabytes of data. ClickHouse also provides probabilistic data structures for fast and memory-efficient calculation of cardinatilities and quantiles</p>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,72 @@
<div class="bg-light py-5 my-5">
<div class="container text-center">
<h2 id="success-stories">Success stories</h2>
<div class="row">
<div class="col-lg-4 py-3">
<a href="https://blog.cloudflare.com/http-analytics-for-6m-requests-per-second-using-clickhouse/" class="stealth-link" rel="externa nofollow" target="_blank">
<div class="card py-3 dots-lb">
<div class="card-body">
<h4 class="card-title">HTTP and DNS analytics</h4>
<p class="card-text text-muted">by CloudFlare</p>
</div>
</div>
</a>
</div>
<div class="col-lg-4 py-3">
<a href="docs/en/introduction/ya_metrika_task/" class="stealth-link">
<div class="card py-3 dots-cc">
<div class="card-body">
<h4 class="card-title">Yandex Metrica</h4>
<p class="card-text text-muted">The original usecase</p>
</div>
</div>
</a>
</div>
<div class="col-lg-4 py-3">
<a href="https://www.slideshare.net/glebus/using-clickhouse-for-experimentation-104247173" class="stealth-link" rel="external nofollow" target="_blank">
<div class="card py-3 dots-rb">
<div class="card-body">
<h4 class="card-title">Experimentation</h4>
<p class="card-text text-muted">at Spotify</p>
</div>
</div>
</a>
</div>
</div>
<div class="row">
<div class="col-lg-4 py-3">
<a href="https://translate.yandex.com/translate?url=http%3A%2F%2Fwww.jianshu.com%2Fp%2F4c86a2478cca&amp;lang=zh-en" class="stealth-link" rel="external nofollow" target="_blank">
<div class="card py-3 dots-rb">
<div class="card-body">
<h4 class="card-title">OLAP contest victory</h4>
<p class="card-text text-muted">by Analysys</p>
</div>
</div>
</a>
</div>
<div class="col-lg-4 py-3">
<a href="https://translate.yandex.com/translate?url=http%3A%2F%2Fsouslecapot.net%2F2018%2F11%2F21%2Fpatrick-chatain-vp-engineering-chez-contentsquare-penser-davantage-amelioration-continue-que-revolution-constante%2F&lang=fr-en" class="stealth-link" rel="external nofollow" target="_blank">
<div class="card py-3 dots-rhb">
<div class="card-body">
<h4 class="card-title">Digital experience analytics</h4>
<p class="card-text text-muted">by ContentSquare</p>
</div>
</div>
</a>
</div>
<div class="col-lg-4 py-3">
<a href="https://translate.yandex.com/translate?url=https%3A%2F%2Ftech.geniee.co.jp%2Fentry%2F2017%2F07%2F20%2F160100" class="stealth-link" rel="external nofollow" target="_blank">
<div class="card py-3 dots-lb">
<div class="card-body">
<h4 class="card-title">Speeding up Report API</h4>
<p class="card-text text-muted">at Geniee</p>
</div>
</div>
</a>
</div>
</div>
<div class="row">
<a href="docs/en/introduction/adopters/" class="btn btn-lg btn-outline-orange mx-auto mt-3" role="button">Show more</a>
</div>
</div>
</div>

View File

@ -0,0 +1,49 @@
<div class="bg-light py-5 my-5">
<div class="container">
<div class="row mb-5">
<div class="col-lg">
<h2>When to use ClickHouse</h2>
<p>For analytics over stream of clean, well structured and immutable events or logs.
It is recommended to put each such stream into a single wide fact table with pre-joined dimensions.</p>
</div>
<div class="col-lg">
<ul class="lead list-unstyled mb-0 mb-lg-1">
<li>✓ Web and App analytics</li>
<li>✓ Advertising networks and RTB</li>
<li>✓ Telecommunications</li>
<li>✓ E-commerce and finance</li>
<li>✓ Information security</li>
</ul>
</div>
<div class="col-lg">
<ul class="lead list-unstyled">
<li>✓ Monitoring and telemetry</li>
<li>✓ Time series</li>
<li>✓ Business intelligence</li>
<li>✓ Online games</li>
<li>✓ Internet of Things</li>
</ul>
</div>
</div>
<div class="row text-red">
<div class="col-lg">
<h2>When NOT to use ClickHouse</h2>
</div>
<div class="col-lg">
<ul class="lead list-unstyled mb-0 mb-lg-1">
<li>✕ Transactional workloads (OLTP)</li>
<li>✕ Key-value requests with high rate</li>
</ul>
</div>
<div class="col-lg">
<ul class="lead list-unstyled">
<li>✕ Blob or document storage</li>
<li>✕ Over-normalized data</li>
</ul>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,43 @@
<div>
<div class="container my-5 py-3">
<div class="row mb-5">
<div class="col-lg text-center">
<h2>Why ClickHouse might be the right choice for you?</h2>
</div>
</div>
<div class="row mb-5">
<div class="col-lg-1">
<img src="images/index/flash.svg" alt="Blazing fast" />
</div>
<div class="col-lg-5">
<h3>Blazing fast</h3>
<p>ClickHouse uses all available hardware to its full potential to process each query as fast as possible. Peak
processing performance for a single query stands at more than 2&nbsp;terabytes per second <span class="text-muted">(after decompression, only used columns)</span>. In distributed setup reads are automatically balanced among healthy replicas to avoid increasing latency.</p>
</div>
<div class="col-lg-1">
<img src="images/index/safe.svg" alt="Fault tolerant" />
</div>
<div class="col-lg-5">
<h3 id="fault-tolerant">Fault tolerant</h3>
<p>ClickHouse supports multi-master asynchronous replication and can be deployed across multiple datacenters. All nodes are equal, which allows to avoid having single points of failure. Downtime of a single node or the whole datacenter won't affect the system's availability for both reads and writes.</p>
</div>
</div>
<div class="row">
<div class="col-lg-1">
<img src="images/index/scale.svg" alt="Linearly scalable" />
</div>
<div class="col-lg-5">
<h3 id="linearly-scalable">Linearly scalable</h3>
<p>ClickHouse scales well both vertically and horizontally. ClickHouse is easily adaptable to perform either on
cluster with hundreds or thousands of nodes, or on a single server or even on a tiny virtual machine. Currently there are installations with more multiple trillion rows or hundreds of terabytes of data per single node.</p>
</div>
<div class="col-lg-1">
<img src="images/index/heart.svg" alt="Easy to use" />
</div>
<div class="col-lg-5">
<h3>Easy to use</h3>
<p>ClickHouse is simple and works out-of-the-box. It streamlines all your data processing: ingest all your structured data into the system and it becomes instantly available for building reports. SQL dialect allows to express the desired result without involving any custom non-standard API that could be found in some DBMS.</p>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,14 @@
{% highlight "bash" %}
sudo apt-get install dirmngr
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4
echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | sudo tee \
/etc/apt/sources.list.d/clickhouse.list
sudo apt-get update
sudo apt-get install -y clickhouse-server clickhouse-client
sudo service clickhouse-server start
clickhouse-client
{% endhighlight %}

View File

@ -0,0 +1,9 @@
{% highlight "bash" %}
sudo yum install yum-utils
sudo rpm --import https://repo.yandex.ru/clickhouse/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.yandex.ru/clickhouse/rpm/stable/x86_64
sudo yum install clickhouse-server clickhouse-client
sudo /etc/init.d/clickhouse-server start
clickhouse-client
{% endhighlight %}

View File

@ -0,0 +1,21 @@
{% highlight "bash" %}
export LATEST_VERSION=$(curl https://api.github.com/repos/ClickHouse/ClickHouse/tags | \
grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n 1)
curl -O https://repo.yandex.ru/clickhouse/tgz/clickhouse-common-static-$LATEST_VERSION.tgz
curl -O https://repo.yandex.ru/clickhouse/tgz/clickhouse-common-static-dbg-$LATEST_VERSION.tgz
curl -O https://repo.yandex.ru/clickhouse/tgz/clickhouse-server-$LATEST_VERSION.tgz
curl -O https://repo.yandex.ru/clickhouse/tgz/clickhouse-client-$LATEST_VERSION.tgz
tar -xzvf clickhouse-common-static-$LATEST_VERSION.tgz
sudo clickhouse-common-static-$LATEST_VERSION/install/doinst.sh
tar -xzvf clickhouse-common-static-dbg-$LATEST_VERSION.tgz
sudo clickhouse-common-static-dbg-$LATEST_VERSION/install/doinst.sh
tar -xzvf clickhouse-server-$LATEST_VERSION.tgz
sudo clickhouse-server-$LATEST_VERSION/install/doinst.sh
sudo /etc/init.d/clickhouse-server start
tar -xzvf clickhouse-client-$LATEST_VERSION.tgz
sudo clickhouse-client-$LATEST_VERSION/install/doinst.sh
{% endhighlight %}