mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-19 14:11:58 +00:00
Merge branch 'master' of github.com:ClickHouse/ClickHouse
This commit is contained in:
commit
adc8cf5f54
1
.gitignore
vendored
1
.gitignore
vendored
@ -15,6 +15,7 @@
|
||||
/docs/build
|
||||
/docs/publish
|
||||
/docs/edit
|
||||
/docs/website
|
||||
/docs/tools/venv/
|
||||
/docs/en/single.md
|
||||
/docs/ru/single.md
|
||||
|
10
README.md
10
README.md
@ -1,15 +1,15 @@
|
||||
[![ClickHouse — open source distributed column-oriented DBMS](https://github.com/ClickHouse/ClickHouse/raw/master/website/images/logo-400x240.png)](https://clickhouse.yandex)
|
||||
[![ClickHouse — open source distributed column-oriented DBMS](https://github.com/ClickHouse/ClickHouse/raw/master/website/images/logo-400x240.png)](https://clickhouse.tech)
|
||||
|
||||
ClickHouse is an open-source column-oriented database management system that allows generating analytical data reports in real time.
|
||||
|
||||
## Useful Links
|
||||
|
||||
* [Official website](https://clickhouse.yandex/) has quick high-level overview of ClickHouse on main page.
|
||||
* [Tutorial](https://clickhouse.yandex/tutorial.html) shows how to set up and query small ClickHouse cluster.
|
||||
* [Documentation](https://clickhouse.yandex/docs/en/) provides more in-depth information.
|
||||
* [Official website](https://clickhouse.tech/) has quick high-level overview of ClickHouse on main page.
|
||||
* [Tutorial](https://clickhouse.tech/docs/en/getting_started/tutorial/) shows how to set up and query small ClickHouse cluster.
|
||||
* [Documentation](https://clickhouse.tech/docs/en/) provides more in-depth information.
|
||||
* [YouTube channel](https://www.youtube.com/c/ClickHouseDB) has a lot of content about ClickHouse in video format.
|
||||
* [Blog](https://clickhouse.yandex/blog/en/) contains various ClickHouse-related articles, as well as announces and reports about events.
|
||||
* [Contacts](https://clickhouse.yandex/#contacts) can help to get your questions answered if there are any.
|
||||
* [Contacts](https://clickhouse.tech/#contacts) can help to get your questions answered if there are any.
|
||||
* You can also [fill this form](https://forms.yandex.com/surveys/meet-yandex-clickhouse-team/) to meet Yandex ClickHouse team in person.
|
||||
|
||||
## Upcoming Events
|
||||
|
65
dbms/tests/performance/mingroupby-orderbylimit1.xml
Normal file
65
dbms/tests/performance/mingroupby-orderbylimit1.xml
Normal file
@ -0,0 +1,65 @@
|
||||
<test>
|
||||
<type>once</type>
|
||||
|
||||
<stop_conditions>
|
||||
<all_of>
|
||||
<total_time_ms>30000</total_time_ms>
|
||||
</all_of>
|
||||
</stop_conditions>
|
||||
|
||||
<settings>
|
||||
<max_threads>1</max_threads>
|
||||
</settings>
|
||||
|
||||
<substitutions>
|
||||
<substitution>
|
||||
<name>aggregationscale</name>
|
||||
<values>
|
||||
<value>11111111</value>
|
||||
<value>11111</value>
|
||||
</values>
|
||||
</substitution>
|
||||
</substitutions>
|
||||
|
||||
<create_query>
|
||||
create table mingroupby_orderbylimit1_{aggregationscale}_tuple
|
||||
Engine=MergeTree order by tuple() AS
|
||||
select toUInt64( number % {aggregationscale} ) key, toUInt64(1) value
|
||||
from numbers(10000000);
|
||||
</create_query>
|
||||
|
||||
<create_query>
|
||||
create table mingroupby_orderbylimit1_{aggregationscale}_key_value
|
||||
Engine=MergeTree order by (key,value) AS
|
||||
select toUInt64( number % {aggregationscale} ) key, toUInt64(1) value
|
||||
from numbers(10000000);
|
||||
</create_query>
|
||||
|
||||
<query tag='UsingGroupbyMinTuple'>
|
||||
SELECT key, min(value)
|
||||
FROM mingroupby_orderbylimit1_{aggregationscale}_tuple
|
||||
group by key format Null;
|
||||
</query>
|
||||
|
||||
<query tag='UsingGroupbyMinKV'>
|
||||
SELECT key, min(value)
|
||||
FROM mingroupby_orderbylimit1_{aggregationscale}_key_value
|
||||
group by key format Null;
|
||||
</query>
|
||||
|
||||
<query tag='UsingOrderbyLimit1Tuple'>
|
||||
SELECT key, value
|
||||
FROM mingroupby_orderbylimit1_{aggregationscale}_tuple
|
||||
order by key, value limit 1 by key format Null;
|
||||
</query>
|
||||
|
||||
<query tag='UsingOrderbyLimit1KV'>
|
||||
SELECT key, value
|
||||
FROM mingroupby_orderbylimit1_{aggregationscale}_key_value
|
||||
order by key, value limit 1 by key format Null;
|
||||
</query>
|
||||
|
||||
<drop_query> DROP TABLE IF EXISTS mingroupby_orderbylimit1_{aggregationscale}_tuple </drop_query>
|
||||
<drop_query> DROP TABLE IF EXISTS mingroupby_orderbylimit1_{aggregationscale}_key_value </drop_query>
|
||||
|
||||
</test>
|
@ -18,6 +18,7 @@ RUN apt-get update \
|
||||
python3 \
|
||||
python3-dev \
|
||||
python3-pip \
|
||||
rsync \
|
||||
tree \
|
||||
tzdata \
|
||||
vim \
|
||||
|
@ -45,7 +45,10 @@ function configure
|
||||
sed -i 's/<tcp_port>9000/<tcp_port>9001/g' left/config/config.xml
|
||||
sed -i 's/<tcp_port>9000/<tcp_port>9002/g' right/config/config.xml
|
||||
|
||||
cat > right/config/config.d/zz-perf-test-tweaks.xml <<EOF
|
||||
mkdir right/config/users.d ||:
|
||||
mkdir left/config/users.d ||:
|
||||
|
||||
cat > right/config/config.d/zz-perf-test-tweaks-config.xml <<EOF
|
||||
<yandex>
|
||||
<logger>
|
||||
<console>true</console>
|
||||
@ -59,7 +62,20 @@ function configure
|
||||
</yandex>
|
||||
EOF
|
||||
|
||||
cp right/config/config.d/zz-perf-test-tweaks.xml left/config/config.d/zz-perf-test-tweaks.xml
|
||||
cat > right/config/users.d/zz-perf-test-tweaks-users.xml <<EOF
|
||||
<yandex>
|
||||
<profiles>
|
||||
<default>
|
||||
<query_profiler_real_time_period_ns>10000000</query_profiler_real_time_period_ns>
|
||||
<query_profiler_cpu_time_period_ns>0</query_profiler_cpu_time_period_ns>
|
||||
<allow_introspection_functions>1</allow_introspection_functions>
|
||||
</default>
|
||||
</profiles>
|
||||
</yandex>
|
||||
EOF
|
||||
|
||||
cp right/config/config.d/zz-perf-test-tweaks-config.xml left/config/config.d/zz-perf-test-tweaks-config.xml
|
||||
cp right/config/users.d/zz-perf-test-tweaks-users.xml left/config/users.d/zz-perf-test-tweaks-users.xml
|
||||
|
||||
rm left/config/config.d/metric_log.xml ||:
|
||||
rm left/config/config.d/text_log.xml ||:
|
||||
@ -81,6 +97,13 @@ EOF
|
||||
|
||||
left/clickhouse client --port 9001 --query "create database test" ||:
|
||||
left/clickhouse client --port 9001 --query "rename table datasets.hits_v1 to test.hits" ||:
|
||||
|
||||
while killall clickhouse ; do echo . ; sleep 1 ; done
|
||||
echo all killed
|
||||
|
||||
# Remove logs etc, because they will be updated, and sharing them between
|
||||
# servers with hardlink might cause unpredictable behavior.
|
||||
rm db0/data/system/* -rf ||:
|
||||
}
|
||||
|
||||
function restart
|
||||
@ -125,11 +148,36 @@ function run_tests
|
||||
|
||||
rm -v test-times.tsv ||:
|
||||
|
||||
# Why the ugly cut:
|
||||
# 1) can't make --out-format='%n' work for deleted files, it outputs things
|
||||
# like "deleted 1.xml";
|
||||
# 2) the output is not tab separated, but at least it's fixed width, so I
|
||||
# cut by characters.
|
||||
changed_files=$(rsync --dry-run --dirs --checksum --delete --itemize-changes left/performance/ right/performance/ | cut -c13-)
|
||||
|
||||
# FIXME remove some broken long tests
|
||||
rm right/performance/{IPv4,IPv6,modulo,parse_engine_file,number_formatting_formats,select_format}.xml ||:
|
||||
|
||||
test_files=$(ls right/performance/*)
|
||||
|
||||
# FIXME a quick crutch to bring the run time down for the flappy tests --
|
||||
# run only those that have changed. Only on my prs for now.
|
||||
if grep Kuzmenkov right-commit.txt
|
||||
then
|
||||
if [ "PR_TO_TEST" != "0" ]
|
||||
then
|
||||
test_files=$(cd right/performance && readlink -e $changed_files)
|
||||
fi
|
||||
fi
|
||||
|
||||
# Run only explicitly specified tests, if any
|
||||
if [ -v CHPC_TEST_GLOB ]
|
||||
then
|
||||
test_files=$(ls right/performance/${CHPC_TEST_GLOB}.xml)
|
||||
fi
|
||||
|
||||
# Run the tests
|
||||
for test in right/performance/${CHPC_TEST_GLOB:-*}.xml
|
||||
for test in $test_files
|
||||
do
|
||||
test_name=$(basename $test ".xml")
|
||||
echo test $test_name
|
||||
@ -138,8 +186,19 @@ function run_tests
|
||||
{ time "$script_dir/perf.py" "$test" > "$test_name-raw.tsv" 2> "$test_name-err.log" ; } 2>&1 >/dev/null | grep -v ^+ >> "wall-clock-times.tsv" || continue
|
||||
grep ^query "$test_name-raw.tsv" | cut -f2- > "$test_name-queries.tsv"
|
||||
grep ^client-time "$test_name-raw.tsv" | cut -f2- > "$test_name-client-time.tsv"
|
||||
right/clickhouse local --file "$test_name-queries.tsv" --structure 'query text, run int, version UInt32, time float' --query "$(cat $script_dir/eqmed.sql)" > "$test_name-report.tsv"
|
||||
# this may be slow, run it in background
|
||||
right/clickhouse local --file "$test_name-queries.tsv" --structure 'query text, run int, version UInt32, time float' --query "$(cat $script_dir/eqmed.sql)" > "$test_name-report.tsv" &
|
||||
done
|
||||
|
||||
wait
|
||||
|
||||
# Collect the profiles
|
||||
left/clickhouse client --port 9001 --query "select * from system.trace_log format TSVWithNamesAndTypes" > left-trace-log.tsv ||: &
|
||||
left/clickhouse client --port 9001 --query "select arrayJoin(trace) addr, concat(splitByChar('/', addressToLine(addr))[-1], '#', demangle(addressToSymbol(addr)) ) name from system.trace_log group by addr format TSVWithNamesAndTypes" > left-addresses.tsv ||: &
|
||||
right/clickhouse client --port 9002 --query "select * from system.trace_log format TSVWithNamesAndTypes" > right-trace-log.tsv ||: &
|
||||
right/clickhouse client --port 9002 --query "select arrayJoin(trace) addr, concat(splitByChar('/', addressToLine(addr))[-1], '#', demangle(addressToSymbol(addr)) ) name from system.trace_log group by addr format TSVWithNamesAndTypes" > right-addresses.tsv ||: &
|
||||
|
||||
wait
|
||||
}
|
||||
|
||||
# Analyze results
|
||||
@ -156,7 +215,7 @@ create table queries engine Memory as select
|
||||
-- remove them altogether because we want to be able to detect regressions,
|
||||
-- but the right way to do this is not yet clear.
|
||||
not short and abs(diff) < 0.05 and rd[3] > 0.05 as unstable,
|
||||
not short and abs(diff) > 0.05 and abs(diff) > rd[3] as changed,
|
||||
not short and abs(diff) > 0.10 and abs(diff) > rd[3] as changed,
|
||||
*
|
||||
from file('*-report.tsv', TSV, 'left float, right float, diff float, rd Array(float), query text');
|
||||
|
||||
@ -201,7 +260,7 @@ create table test_times_tsv engine File(TSV, 'test-times.tsv') as
|
||||
floor(real / queries, 3) avg_real_per_query,
|
||||
floor(query_min, 3)
|
||||
from test_time join wall_clock using test
|
||||
order by query_max / query_min desc;
|
||||
order by avg_real_per_query desc;
|
||||
|
||||
create table all_queries_tsv engine File(TSV, 'all-queries.tsv') as
|
||||
select left, right, diff, rd, test, query
|
||||
|
@ -8,7 +8,7 @@ select
|
||||
query
|
||||
from
|
||||
(
|
||||
select query, quantiles(0.05, 0.5, 0.95)(abs(time_by_label[1] - time_by_label[2])) rd_quantiles -- quantiles of randomization distribution
|
||||
select query, quantiles(0.05, 0.5, 0.95, 0.99)(abs(time_by_label[1] - time_by_label[2])) rd_quantiles -- quantiles of randomization distribution
|
||||
from
|
||||
(
|
||||
select query, virtual_run, groupArrayInsertAt(median_time, random_label) time_by_label -- make array 'random label' -> 'median time'
|
||||
|
@ -10,6 +10,15 @@ import pprint
|
||||
import time
|
||||
import traceback
|
||||
|
||||
stage_start_seconds = time.perf_counter()
|
||||
|
||||
def report_stage_end(stage_name):
|
||||
global stage_start_seconds
|
||||
print('{}\t{}'.format(stage_name, time.perf_counter() - stage_start_seconds))
|
||||
stage_start_seconds = time.perf_counter()
|
||||
|
||||
report_stage_end('start')
|
||||
|
||||
parser = argparse.ArgumentParser(description='Run performance test.')
|
||||
# Explicitly decode files as UTF-8 because sometimes we have Russian characters in queries, and LANG=C is set.
|
||||
parser.add_argument('file', metavar='FILE', type=argparse.FileType('r', encoding='utf-8'), nargs=1, help='test description file')
|
||||
@ -35,6 +44,8 @@ if infinite_sign is not None:
|
||||
servers = [{'host': host, 'port': port} for (host, port) in zip(args.host, args.port)]
|
||||
connections = [clickhouse_driver.Client(**server) for server in servers]
|
||||
|
||||
report_stage_end('connect')
|
||||
|
||||
# Check tables that should exist
|
||||
tables = [e.text for e in root.findall('preconditions/table_exists')]
|
||||
for t in tables:
|
||||
@ -47,6 +58,8 @@ for c in connections:
|
||||
for s in settings:
|
||||
c.execute("set {} = '{}'".format(s.tag, s.text))
|
||||
|
||||
report_stage_end('preconditions')
|
||||
|
||||
# Process substitutions
|
||||
subst_elems = root.findall('substitutions/substitution')
|
||||
|
||||
@ -61,6 +74,8 @@ parameter_combinations = [dict(zip(parameter_keys, parameter_combination)) for p
|
||||
def substitute_parameters(query_templates, parameter_combinations):
|
||||
return list(set([template.format(**parameters) for template, parameters in itertools.product(query_templates, parameter_combinations)]))
|
||||
|
||||
report_stage_end('substitute')
|
||||
|
||||
# Run drop queries, ignoring errors
|
||||
drop_query_templates = [q.text for q in root.findall('drop_query')]
|
||||
drop_queries = substitute_parameters(drop_query_templates, parameter_combinations)
|
||||
@ -86,6 +101,8 @@ for c in connections:
|
||||
for q in fill_queries:
|
||||
c.execute(q)
|
||||
|
||||
report_stage_end('fill')
|
||||
|
||||
# Run test queries
|
||||
def tsv_escape(s):
|
||||
return s.replace('\\', '\\\\').replace('\t', '\\t').replace('\n', '\\n').replace('\r','')
|
||||
@ -93,6 +110,8 @@ def tsv_escape(s):
|
||||
test_query_templates = [q.text for q in root.findall('query')]
|
||||
test_queries = substitute_parameters(test_query_templates, parameter_combinations)
|
||||
|
||||
report_stage_end('substitute2')
|
||||
|
||||
for q in test_queries:
|
||||
# Prewarm: run once on both servers. Helps to bring the data into memory,
|
||||
# precompile the queries, etc.
|
||||
@ -115,9 +134,13 @@ for q in test_queries:
|
||||
client_seconds = time.perf_counter() - start_seconds
|
||||
print('client-time\t{}\t{}\t{}'.format(tsv_escape(q), client_seconds, server_seconds))
|
||||
|
||||
report_stage_end('benchmark')
|
||||
|
||||
# Run drop queries
|
||||
drop_query_templates = [q.text for q in root.findall('drop_query')]
|
||||
drop_queries = substitute_parameters(drop_query_templates, parameter_combinations)
|
||||
for c in connections:
|
||||
for q in drop_queries:
|
||||
c.execute(q)
|
||||
|
||||
report_stage_end('drop')
|
||||
|
@ -294,6 +294,7 @@ if __name__ == '__main__':
|
||||
arg_parser.add_argument('--skip-single-page', action='store_true')
|
||||
arg_parser.add_argument('--skip-pdf', action='store_true')
|
||||
arg_parser.add_argument('--skip-website', 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('--verbose', action='store_true')
|
||||
|
||||
|
@ -1,78 +1,9 @@
|
||||
@font-face {
|
||||
font-family: 'Yandex Sans Text Web';
|
||||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot);
|
||||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot?#iefix) format('embedded-opentype'),
|
||||
url(https://yastatic.net/adv-www/_/CYblzLEXzCqQIvrYs7QKQe2omRk.woff2) format('woff2'),
|
||||
url(https://yastatic.net/adv-www/_/pUcnOdRwl83MvPPzrNomhyletnA.woff) format('woff'),
|
||||
url(https://yastatic.net/adv-www/_/vNFEmXOcGYKJ4AAidUprHWoXrLU.ttf) format('truetype'),
|
||||
url(https://yastatic.net/adv-www/_/0w7OcWZM_QLP8x-LQUXFOgXO6dE.svg#YandexSansTextWeb-Bold) format('svg');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-stretch: normal
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Yandex Sans Text Web';
|
||||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot);
|
||||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot?#iefix) format('embedded-opentype'),
|
||||
url(https://yastatic.net/adv-www/_/z3MYElcut0R2MF_Iw1RDNrstgYs.woff2) format('woff2'),
|
||||
url(https://yastatic.net/adv-www/_/1jvKJ_-hCXl3s7gmFl-y_-UHTaI.woff) format('woff'),
|
||||
url(https://yastatic.net/adv-www/_/9nzjfpCR2QHvK1EzHpDEIoVFGuY.ttf) format('truetype'),
|
||||
url(https://yastatic.net/adv-www/_/gwyBTpxSwkFCF1looxqs6JokKls.svg#YandexSansTextWeb-Regular) format('svg');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-stretch: normal
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Yandex Sans Text Web';
|
||||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot);
|
||||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot?#iefix) format('embedded-opentype'),
|
||||
url(https://yastatic.net/adv-www/_/lGQcYklLVV0hyvz1HFmFsUTj8_0.woff2) format('woff2'),
|
||||
url(https://yastatic.net/adv-www/_/f0AAJ9GJ4iiwEmhG-7PWMHk6vUY.woff) format('woff'),
|
||||
url(https://yastatic.net/adv-www/_/4UDe4nlVvgEJ-VmLWNVq3SxCsA.ttf) format('truetype'),
|
||||
url(https://yastatic.net/adv-www/_/EKLr1STNokPqxLAQa_RyN82pL98.svg#YandexSansTextWeb-Light) format('svg');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-stretch: normal
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Yandex Sans Display Web';
|
||||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot);
|
||||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot?#iefix) format('embedded-opentype'),
|
||||
url(https://yastatic.net/adv-www/_/sUYVCPUAQE7ExrvMS7FoISoO83s.woff2) format('woff2'),
|
||||
url(https://yastatic.net/adv-www/_/v2Sve_obH3rKm6rKrtSQpf-eB7U.woff) format('woff'),
|
||||
url(https://yastatic.net/adv-www/_/PzD8hWLMunow5i3RfJ6WQJAL7aI.ttf) format('truetype'),
|
||||
url(https://yastatic.net/adv-www/_/lF_KG5g4tpQNlYIgA0e77fBSZ5s.svg#YandexSansDisplayWeb-Regular) format('svg');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-stretch: normal
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Yandex Sans Display Web';
|
||||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot);
|
||||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot?#iefix) format('embedded-opentype'),
|
||||
url(https://yastatic.net/adv-www/_/LGiRvlfqQHlWR9YKLhsw5e7KGNA.woff2) format('woff2'),
|
||||
url(https://yastatic.net/adv-www/_/40vXwNl4eYYMgteIVgLP49dwmfc.woff) format('woff'),
|
||||
url(https://yastatic.net/adv-www/_/X6zG5x_wO8-AtwJ-vDLJcKC5228.ttf) format('truetype'),
|
||||
url(https://yastatic.net/adv-www/_/ZKhaR0m08c8CRRL77GtFKoHcLYA.svg#YandexSansDisplayWeb-Light) format('svg');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-stretch: normal
|
||||
}
|
||||
|
||||
body {
|
||||
font: 300 14pt/200% 'Yandex Sans Text Web', Arial, sans-serif;
|
||||
}
|
||||
|
||||
body.md-lang-zh {
|
||||
font: 400 14pt/200% 'Yandex Sans Text Web', -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||
font: 300 14pt/200% -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji,Segoe UI Emoji;
|
||||
}
|
||||
|
||||
a:link, a:visited {
|
||||
color: #08f;
|
||||
color: #f14600;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@ -84,26 +15,23 @@ a:link, a:visited {
|
||||
color: #888 !important;
|
||||
}
|
||||
|
||||
|
||||
.md-nav__link:hover, .md-nav__link:active {
|
||||
color: #08f !important;
|
||||
color: #f14600 !important;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover, a:active {
|
||||
color: #f00;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.md-typeset pre {
|
||||
font: 13px/18px monospace, "Courier New";
|
||||
font: 13px/18px SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
|
||||
display: block;
|
||||
padding: 1rem 3rem 1rem 1rem;
|
||||
overflow: scroll;
|
||||
}
|
||||
|
||||
h1, h2, h3, .md-logo {
|
||||
font-family: 'Yandex Sans Display Web', Arial, sans-serif;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
@ -117,12 +45,11 @@ h1, h2, h3, .md-logo {
|
||||
|
||||
.md-header-nav__title {
|
||||
font-size: 3rem;
|
||||
font-family: 'Yandex Sans Display Web', Arial, sans-serif;
|
||||
}
|
||||
|
||||
.md-content__icon:hover {
|
||||
text-decoration: none !important;
|
||||
color: #08f !important;
|
||||
color: #f14600 !important;
|
||||
}
|
||||
|
||||
.md-search-result__link {
|
||||
@ -229,3 +156,7 @@ h1, h2, h3, .md-logo {
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.md-typeset a:active, .md-typeset a:hover {
|
||||
color: #f14600 !important;
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ set -ex
|
||||
BASE_DIR=$(dirname $(readlink -f $0))
|
||||
BUILD_DIR="${BASE_DIR}/../build"
|
||||
PUBLISH_DIR="${BASE_DIR}/../publish"
|
||||
IMAGE="clickhouse/website"
|
||||
GIT_TEST_URI="git@github.com:ClickHouse/clickhouse-test.github.io.git"
|
||||
GIT_PROD_URI="git@github.com:ClickHouse/clickhouse.github.io.git"
|
||||
|
||||
@ -14,8 +13,6 @@ then
|
||||
else
|
||||
TAG="$1"
|
||||
fi
|
||||
FULL_NAME="${IMAGE}:${TAG}"
|
||||
REMOTE_NAME="registry.yandex.net/${FULL_NAME}"
|
||||
DOCKER_HASH="$2"
|
||||
if [[ -z "$1" ]]
|
||||
then
|
||||
@ -37,10 +34,7 @@ then
|
||||
git commit -a -m "add new release at $(date)"
|
||||
git push origin master
|
||||
cd "${BUILD_DIR}"
|
||||
docker build -t "${FULL_NAME}" "${BUILD_DIR}"
|
||||
docker tag "${FULL_NAME}" "${REMOTE_NAME}"
|
||||
DOCKER_HASH=$(docker push "${REMOTE_NAME}" | tail -1 | awk '{print $3;}')
|
||||
docker rmi "${FULL_NAME}"
|
||||
DOCKER_HASH=$(head -c 16 < /dev/urandom | xxd -p)
|
||||
else
|
||||
rm -rf "${BUILD_DIR}" || true
|
||||
rm -rf "${PUBLISH_DIR}" || true
|
||||
@ -67,8 +61,4 @@ then
|
||||
else
|
||||
QLOUD_ENV="${QLOUD_PROJECT}.prod"
|
||||
fi
|
||||
QLOUD_COMPONENT="${QLOUD_ENV}.nginx"
|
||||
QLOUD_VERSION=$(curl -v -H "Authorization: OAuth ${QLOUD_TOKEN}" "${QLOUD_ENDPOINT}/environment/status/${QLOUD_ENV}" | python -c "import json; import sys; print json.loads(sys.stdin.read()).get('version')")
|
||||
curl -v -H "Authorization: OAuth ${QLOUD_TOKEN}" -H "Content-Type: application/json" --data "{\"repository\": \"${REMOTE_NAME}\", \"hash\": \"${DOCKER_HASH}\"}" "${QLOUD_ENDPOINT}/component/${QLOUD_COMPONENT}/${QLOUD_VERSION}/deploy" > /dev/null
|
||||
|
||||
echo ">>> Successfully deployed ${TAG} ${DOCKER_HASH} to ${QLOUD_ENV} <<<"
|
||||
|
@ -21,25 +21,27 @@ def build_website(args):
|
||||
)
|
||||
)
|
||||
|
||||
def minify_website(args):
|
||||
for root, _, filenames in os.walk(args.output_dir):
|
||||
for filename in filenames:
|
||||
path = os.path.join(root, filename)
|
||||
if not (
|
||||
filename.endswith('.html') or
|
||||
filename.endswith('.css') or
|
||||
filename.endswith('.js')
|
||||
):
|
||||
continue
|
||||
|
||||
logging.info('Minifying %s', path)
|
||||
with open(path, 'rb') as f:
|
||||
content = f.read().decode('utf-8')
|
||||
if filename.endswith('.html'):
|
||||
content = htmlmin.minify(content, remove_empty_space=False)
|
||||
elif filename.endswith('.css'):
|
||||
content = cssmin.cssmin(content)
|
||||
elif filename.endswith('.js'):
|
||||
content = jsmin.jsmin(content)
|
||||
with open(path, 'wb') as f:
|
||||
f.write(content.encode('utf-8'))
|
||||
def minify_website(args):
|
||||
if args.minify:
|
||||
for root, _, filenames in os.walk(args.output_dir):
|
||||
for filename in filenames:
|
||||
path = os.path.join(root, filename)
|
||||
if not (
|
||||
filename.endswith('.html') or
|
||||
filename.endswith('.css') or
|
||||
filename.endswith('.js')
|
||||
):
|
||||
continue
|
||||
|
||||
logging.info('Minifying %s', path)
|
||||
with open(path, 'rb') as f:
|
||||
content = f.read().decode('utf-8')
|
||||
if filename.endswith('.html'):
|
||||
content = htmlmin.minify(content, remove_empty_space=False)
|
||||
elif filename.endswith('.css'):
|
||||
content = cssmin.cssmin(content)
|
||||
elif filename.endswith('.js'):
|
||||
content = jsmin.jsmin(content)
|
||||
with open(path, 'wb') as f:
|
||||
f.write(content.encode('utf-8'))
|
||||
|
@ -1 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# REMOVE ME
|
||||
|
1
website/images/clickhouse-black.svg
Normal file
1
website/images/clickhouse-black.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 66.12 10.29"><defs><style>.a{fill:#231f20;}</style></defs><title>ClickHouse</title><path class="a" d="M58.54,74.8a5,5,0,0,1-1.88-.34,4.26,4.26,0,0,1-1.48-1,4.46,4.46,0,0,1-1-1.55,6.32,6.32,0,0,1,0-4.21,4.39,4.39,0,0,1,2.58-2.57,5.36,5.36,0,0,1,1.93-.34,5.84,5.84,0,0,1,1.56.18,6.38,6.38,0,0,1,1.2.46l-0.36,1.13A5.17,5.17,0,0,0,60,66a4.23,4.23,0,0,0-1.43-.22,3.07,3.07,0,0,0-2.35,1.06,3.81,3.81,0,0,0-.72,1.27,5.17,5.17,0,0,0-.27,1.73,5.35,5.35,0,0,0,.25,1.69,3.61,3.61,0,0,0,.69,1.25,2.88,2.88,0,0,0,1.06.77,3.49,3.49,0,0,0,1.38.27,4,4,0,0,0,1.27-.2A5.71,5.71,0,0,0,61,73.09l0.35,0.85a3.86,3.86,0,0,1-1.12.59A5,5,0,0,1,58.54,74.8Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M64.07,64.51V74.66H62.88V64.51h1.19Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M66.64,66.55a0.71,0.71,0,0,1-.76-0.74,0.78,0.78,0,0,1,.2-0.55,0.79,0.79,0,0,1,1.1,0,0.77,0.77,0,0,1,.21.55,0.72,0.72,0,0,1-.21.53A0.74,0.74,0,0,1,66.64,66.55Zm0.6,1.06v7H66.06v-7h1.19Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M72.29,74.8a3.78,3.78,0,0,1-1.37-.25,3.08,3.08,0,0,1-1.11-.72,3.45,3.45,0,0,1-.74-1.15,4.48,4.48,0,0,1,0-3.08,3.35,3.35,0,0,1,.76-1.15A3.19,3.19,0,0,1,71,67.72a4,4,0,0,1,1.41-.25,4.68,4.68,0,0,1,1.13.13,2.68,2.68,0,0,1,.84.35L74,69a4,4,0,0,0-.79-0.47,2.32,2.32,0,0,0-.92-0.16,2.28,2.28,0,0,0-.88.17,2,2,0,0,0-.73.52,2.52,2.52,0,0,0-.49.85A3.5,3.5,0,0,0,70,71.11a2.8,2.8,0,0,0,.66,2,2.4,2.4,0,0,0,1.79.67,3,3,0,0,0,1.62-.52l0.27,0.88a2.89,2.89,0,0,1-.89.45A3.88,3.88,0,0,1,72.29,74.8Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M77,64.51V74.66H75.79V64.51H77ZM80.1,74.66L77.16,70.9l2.9-3.28H81.3l-2.87,3.14,3.07,3.9H80.1Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M89.17,70.34h-5v4.31H82.88V64.93h1.29v4.44h5V64.93h1.29v9.73H89.17V70.34Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M95.55,74.8a3.49,3.49,0,0,1-1.3-.25,3.11,3.11,0,0,1-1.08-.71,3.44,3.44,0,0,1-.73-1.15,4.6,4.6,0,0,1,0-3.12,3.36,3.36,0,0,1,.73-1.14,3.16,3.16,0,0,1,1.08-.71,3.49,3.49,0,0,1,1.3-.25,3.55,3.55,0,0,1,1.31.25,3.22,3.22,0,0,1,1.09.71,3.39,3.39,0,0,1,.75,1.14,4.49,4.49,0,0,1,0,3.12A3.47,3.47,0,0,1,98,73.84a3.16,3.16,0,0,1-1.09.71A3.55,3.55,0,0,1,95.55,74.8Zm0-.91a2.37,2.37,0,0,0,.82-0.15,1.79,1.79,0,0,0,.71-0.48,2.48,2.48,0,0,0,.5-0.86,3.79,3.79,0,0,0,.19-1.27,3.73,3.73,0,0,0-.19-1.27,2.48,2.48,0,0,0-.5-0.85,1.79,1.79,0,0,0-.71-0.48,2.37,2.37,0,0,0-.82-0.15,2.25,2.25,0,0,0-.8.15,1.82,1.82,0,0,0-.69.48,2.4,2.4,0,0,0-.49.85,3.86,3.86,0,0,0-.18,1.27,3.92,3.92,0,0,0,.18,1.27,2.4,2.4,0,0,0,.49.86,1.81,1.81,0,0,0,.69.48A2.25,2.25,0,0,0,95.55,73.89Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M104.21,74.39a2.69,2.69,0,0,1-1.55.41,2.15,2.15,0,0,1-1.58-.6,2.49,2.49,0,0,1-.6-1.84V67.61h1.2v4.75a2.14,2.14,0,0,0,.1.7,1.08,1.08,0,0,0,.28.45,1,1,0,0,0,.42.24,1.82,1.82,0,0,0,.52.07,2,2,0,0,0,1.27-.38,3,3,0,0,0,.82-1V67.61h1.19v7h-1.05l-0.11-1.26h0A2.5,2.5,0,0,1,104.21,74.39Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M110.11,74.8a7.07,7.07,0,0,1-.9,0,5.45,5.45,0,0,1-.67-0.13,3.23,3.23,0,0,1-.51-0.17,3.55,3.55,0,0,1-.4-0.21l0.39-1a1.88,1.88,0,0,0,.28.19,3.34,3.34,0,0,0,.45.21,3.64,3.64,0,0,0,.61.18,3.74,3.74,0,0,0,.75.07,1.87,1.87,0,0,0,1.15-.3,1,1,0,0,0,.39-0.83,0.87,0.87,0,0,0-.32-0.71,3.35,3.35,0,0,0-1.11-.5l-0.86-.29a3,3,0,0,1-.73-0.38,1.8,1.8,0,0,1-.52-0.58,1.76,1.76,0,0,1-.2-0.88A1.68,1.68,0,0,1,108.6,68a3.23,3.23,0,0,1,1.89-.48,5.65,5.65,0,0,1,1.25.12,4.16,4.16,0,0,1,.84.27l-0.28,1a6.73,6.73,0,0,0-.7-0.3,3.05,3.05,0,0,0-1.06-.16,2.36,2.36,0,0,0-1.09.21,0.79,0.79,0,0,0-.41.77,0.73,0.73,0,0,0,.13.43,1.11,1.11,0,0,0,.34.31,2.48,2.48,0,0,0,.5.23l0.6,0.18,0.81,0.27a2.74,2.74,0,0,1,.72.39,1.74,1.74,0,0,1,.71,1.5,1.91,1.91,0,0,1-.23,1,2,2,0,0,1-.61.66,2.6,2.6,0,0,1-.87.38A4.33,4.33,0,0,1,110.11,74.8Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M119.76,74.05a3,3,0,0,1-1,.53,4.15,4.15,0,0,1-1.37.21,3.35,3.35,0,0,1-2.58-1,3.82,3.82,0,0,1-.9-2.71,4.38,4.38,0,0,1,.25-1.53,3.42,3.42,0,0,1,.69-1.15,2.91,2.91,0,0,1,1-.72,3.34,3.34,0,0,1,1.28-.25,3.2,3.2,0,0,1,1.28.25,2.31,2.31,0,0,1,.94.73,2.75,2.75,0,0,1,.5,1.2,5,5,0,0,1,0,1.66h-4.76q0.08,2.51,2.37,2.51a3.11,3.11,0,0,0,1.08-.17,4.26,4.26,0,0,0,.88-0.44Zm-2.59-5.74a1.77,1.77,0,0,0-1.29.54,2.71,2.71,0,0,0-.68,1.62h3.57a2.18,2.18,0,0,0-.37-1.63A1.53,1.53,0,0,0,117.17,68.31Z" transform="translate(-53.86 -64.51)"/></svg>
|
After Width: | Height: | Size: 4.3 KiB |
1
website/images/clickhouse-white.svg
Normal file
1
website/images/clickhouse-white.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 66.12 10.29"><defs><style>.a{fill:#fff;}</style></defs><title>ClickHouse white</title><path class="a" d="M58.54,74.8a5,5,0,0,1-1.88-.34,4.26,4.26,0,0,1-1.48-1,4.46,4.46,0,0,1-1-1.55,6.32,6.32,0,0,1,0-4.21,4.39,4.39,0,0,1,2.58-2.57,5.36,5.36,0,0,1,1.93-.34,5.84,5.84,0,0,1,1.56.18,6.38,6.38,0,0,1,1.2.46l-0.36,1.13A5.17,5.17,0,0,0,60,66a4.23,4.23,0,0,0-1.43-.22,3.07,3.07,0,0,0-2.35,1.06,3.81,3.81,0,0,0-.72,1.27,5.17,5.17,0,0,0-.27,1.73,5.35,5.35,0,0,0,.25,1.69,3.61,3.61,0,0,0,.69,1.25,2.88,2.88,0,0,0,1.06.77,3.49,3.49,0,0,0,1.38.27,4,4,0,0,0,1.27-.2A5.71,5.71,0,0,0,61,73.09l0.35,0.85a3.86,3.86,0,0,1-1.12.59A5,5,0,0,1,58.54,74.8Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M64.07,64.51V74.66H62.88V64.51h1.19Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M66.64,66.55a0.71,0.71,0,0,1-.76-0.74,0.78,0.78,0,0,1,.2-0.55,0.79,0.79,0,0,1,1.1,0,0.77,0.77,0,0,1,.21.55,0.72,0.72,0,0,1-.21.53A0.74,0.74,0,0,1,66.64,66.55Zm0.6,1.06v7H66.06v-7h1.19Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M72.29,74.8a3.78,3.78,0,0,1-1.37-.25,3.08,3.08,0,0,1-1.11-.72,3.45,3.45,0,0,1-.74-1.15,4.48,4.48,0,0,1,0-3.08,3.35,3.35,0,0,1,.76-1.15A3.19,3.19,0,0,1,71,67.72a4,4,0,0,1,1.41-.25,4.68,4.68,0,0,1,1.13.13,2.68,2.68,0,0,1,.84.35L74,69a4,4,0,0,0-.79-0.47,2.32,2.32,0,0,0-.92-0.16,2.28,2.28,0,0,0-.88.17,2,2,0,0,0-.73.52,2.52,2.52,0,0,0-.49.85A3.5,3.5,0,0,0,70,71.11a2.8,2.8,0,0,0,.66,2,2.4,2.4,0,0,0,1.79.67,3,3,0,0,0,1.62-.52l0.27,0.88a2.89,2.89,0,0,1-.89.45A3.88,3.88,0,0,1,72.29,74.8Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M77,64.51V74.66H75.79V64.51H77ZM80.1,74.66L77.16,70.9l2.9-3.28H81.3l-2.87,3.14,3.07,3.9H80.1Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M89.17,70.34h-5v4.31H82.88V64.93h1.29v4.44h5V64.93h1.29v9.73H89.17V70.34Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M95.55,74.8a3.49,3.49,0,0,1-1.3-.25,3.11,3.11,0,0,1-1.08-.71,3.44,3.44,0,0,1-.73-1.15,4.6,4.6,0,0,1,0-3.12,3.36,3.36,0,0,1,.73-1.14,3.16,3.16,0,0,1,1.08-.71,3.49,3.49,0,0,1,1.3-.25,3.55,3.55,0,0,1,1.31.25,3.22,3.22,0,0,1,1.09.71,3.39,3.39,0,0,1,.75,1.14,4.49,4.49,0,0,1,0,3.12A3.47,3.47,0,0,1,98,73.84a3.16,3.16,0,0,1-1.09.71A3.55,3.55,0,0,1,95.55,74.8Zm0-.91a2.37,2.37,0,0,0,.82-0.15,1.79,1.79,0,0,0,.71-0.48,2.48,2.48,0,0,0,.5-0.86,3.79,3.79,0,0,0,.19-1.27,3.73,3.73,0,0,0-.19-1.27,2.48,2.48,0,0,0-.5-0.85,1.79,1.79,0,0,0-.71-0.48,2.37,2.37,0,0,0-.82-0.15,2.25,2.25,0,0,0-.8.15,1.82,1.82,0,0,0-.69.48,2.4,2.4,0,0,0-.49.85,3.86,3.86,0,0,0-.18,1.27,3.92,3.92,0,0,0,.18,1.27,2.4,2.4,0,0,0,.49.86,1.81,1.81,0,0,0,.69.48A2.25,2.25,0,0,0,95.55,73.89Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M104.21,74.39a2.69,2.69,0,0,1-1.55.41,2.15,2.15,0,0,1-1.58-.6,2.49,2.49,0,0,1-.6-1.84V67.61h1.2v4.75a2.14,2.14,0,0,0,.1.7,1.08,1.08,0,0,0,.28.45,1,1,0,0,0,.42.24,1.82,1.82,0,0,0,.52.07,2,2,0,0,0,1.27-.38,3,3,0,0,0,.82-1V67.61h1.19v7h-1.05l-0.11-1.26h0A2.5,2.5,0,0,1,104.21,74.39Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M110.11,74.8a7.07,7.07,0,0,1-.9,0,5.45,5.45,0,0,1-.67-0.13,3.23,3.23,0,0,1-.51-0.17,3.55,3.55,0,0,1-.4-0.21l0.39-1a1.88,1.88,0,0,0,.28.19,3.34,3.34,0,0,0,.45.21,3.64,3.64,0,0,0,.61.18,3.74,3.74,0,0,0,.75.07,1.87,1.87,0,0,0,1.15-.3,1,1,0,0,0,.39-0.83,0.87,0.87,0,0,0-.32-0.71,3.35,3.35,0,0,0-1.11-.5l-0.86-.29a3,3,0,0,1-.73-0.38,1.8,1.8,0,0,1-.52-0.58,1.76,1.76,0,0,1-.2-0.88A1.68,1.68,0,0,1,108.6,68a3.23,3.23,0,0,1,1.89-.48,5.65,5.65,0,0,1,1.25.12,4.16,4.16,0,0,1,.84.27l-0.28,1a6.73,6.73,0,0,0-.7-0.3,3.05,3.05,0,0,0-1.06-.16,2.36,2.36,0,0,0-1.09.21,0.79,0.79,0,0,0-.41.77,0.73,0.73,0,0,0,.13.43,1.11,1.11,0,0,0,.34.31,2.48,2.48,0,0,0,.5.23l0.6,0.18,0.81,0.27a2.74,2.74,0,0,1,.72.39,1.74,1.74,0,0,1,.71,1.5,1.91,1.91,0,0,1-.23,1,2,2,0,0,1-.61.66,2.6,2.6,0,0,1-.87.38A4.33,4.33,0,0,1,110.11,74.8Z" transform="translate(-53.86 -64.51)"/><path class="a" d="M119.76,74.05a3,3,0,0,1-1,.53,4.15,4.15,0,0,1-1.37.21,3.35,3.35,0,0,1-2.58-1,3.82,3.82,0,0,1-.9-2.71,4.38,4.38,0,0,1,.25-1.53,3.42,3.42,0,0,1,.69-1.15,2.91,2.91,0,0,1,1-.72,3.34,3.34,0,0,1,1.28-.25,3.2,3.2,0,0,1,1.28.25,2.31,2.31,0,0,1,.94.73,2.75,2.75,0,0,1,.5,1.2,5,5,0,0,1,0,1.66h-4.76q0.08,2.51,2.37,2.51a3.11,3.11,0,0,0,1.08-.17,4.26,4.26,0,0,0,.88-0.44Zm-2.59-5.74a1.77,1.77,0,0,0-1.29.54,2.71,2.71,0,0,0-.68,1.62h3.57a2.18,2.18,0,0,0-.37-1.63A1.53,1.53,0,0,0,117.17,68.31Z" transform="translate(-53.86 -64.51)"/></svg>
|
After Width: | Height: | Size: 4.3 KiB |
@ -1,71 +1,6 @@
|
||||
@font-face {
|
||||
font-family: 'Yandex Sans Text Web';
|
||||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot);
|
||||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot?#iefix) format('embedded-opentype'),
|
||||
url(https://yastatic.net/adv-www/_/CYblzLEXzCqQIvrYs7QKQe2omRk.woff2) format('woff2'),
|
||||
url(https://yastatic.net/adv-www/_/pUcnOdRwl83MvPPzrNomhyletnA.woff) format('woff'),
|
||||
url(https://yastatic.net/adv-www/_/vNFEmXOcGYKJ4AAidUprHWoXrLU.ttf) format('truetype'),
|
||||
url(https://yastatic.net/adv-www/_/0w7OcWZM_QLP8x-LQUXFOgXO6dE.svg#YandexSansTextWeb-Bold) format('svg');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-stretch: normal
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Yandex Sans Text Web';
|
||||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot);
|
||||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot?#iefix) format('embedded-opentype'),
|
||||
url(https://yastatic.net/adv-www/_/z3MYElcut0R2MF_Iw1RDNrstgYs.woff2) format('woff2'),
|
||||
url(https://yastatic.net/adv-www/_/1jvKJ_-hCXl3s7gmFl-y_-UHTaI.woff) format('woff'),
|
||||
url(https://yastatic.net/adv-www/_/9nzjfpCR2QHvK1EzHpDEIoVFGuY.ttf) format('truetype'),
|
||||
url(https://yastatic.net/adv-www/_/gwyBTpxSwkFCF1looxqs6JokKls.svg#YandexSansTextWeb-Regular) format('svg');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-stretch: normal
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Yandex Sans Text Web';
|
||||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot);
|
||||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot?#iefix) format('embedded-opentype'),
|
||||
url(https://yastatic.net/adv-www/_/lGQcYklLVV0hyvz1HFmFsUTj8_0.woff2) format('woff2'),
|
||||
url(https://yastatic.net/adv-www/_/f0AAJ9GJ4iiwEmhG-7PWMHk6vUY.woff) format('woff'),
|
||||
url(https://yastatic.net/adv-www/_/4UDe4nlVvgEJ-VmLWNVq3SxCsA.ttf) format('truetype'),
|
||||
url(https://yastatic.net/adv-www/_/EKLr1STNokPqxLAQa_RyN82pL98.svg#YandexSansTextWeb-Light) format('svg');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-stretch: normal
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Yandex Sans Display Web';
|
||||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot);
|
||||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot?#iefix) format('embedded-opentype'),
|
||||
url(https://yastatic.net/adv-www/_/sUYVCPUAQE7ExrvMS7FoISoO83s.woff2) format('woff2'),
|
||||
url(https://yastatic.net/adv-www/_/v2Sve_obH3rKm6rKrtSQpf-eB7U.woff) format('woff'),
|
||||
url(https://yastatic.net/adv-www/_/PzD8hWLMunow5i3RfJ6WQJAL7aI.ttf) format('truetype'),
|
||||
url(https://yastatic.net/adv-www/_/lF_KG5g4tpQNlYIgA0e77fBSZ5s.svg#YandexSansDisplayWeb-Regular) format('svg');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-stretch: normal
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Yandex Sans Display Web';
|
||||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot);
|
||||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot?#iefix) format('embedded-opentype'),
|
||||
url(https://yastatic.net/adv-www/_/LGiRvlfqQHlWR9YKLhsw5e7KGNA.woff2) format('woff2'),
|
||||
url(https://yastatic.net/adv-www/_/40vXwNl4eYYMgteIVgLP49dwmfc.woff) format('woff'),
|
||||
url(https://yastatic.net/adv-www/_/X6zG5x_wO8-AtwJ-vDLJcKC5228.ttf) format('truetype'),
|
||||
url(https://yastatic.net/adv-www/_/ZKhaR0m08c8CRRL77GtFKoHcLYA.svg#YandexSansDisplayWeb-Light) format('svg');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-stretch: normal
|
||||
}
|
||||
|
||||
body {
|
||||
background: #fff;
|
||||
font: 300 14pt/200% 'Yandex Sans Text Web', Arial, sans-serif;
|
||||
font: 300 14pt/200% -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji,Segoe UI Emoji;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
@ -93,8 +28,12 @@ body {
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
#logo-text {
|
||||
width: 200px;
|
||||
height: 44px;
|
||||
}
|
||||
|
||||
#main-title {
|
||||
font: 400 42pt/90% 'Yandex Sans Display Web', Arial, sans-serif;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@ -134,22 +73,21 @@ body {
|
||||
|
||||
h2 {
|
||||
margin: 47px 0 23px;
|
||||
font: 400 200%/133% 'Yandex Sans Display Web', Arial, sans-serif;
|
||||
font-size: 200%;
|
||||
}
|
||||
|
||||
a:link, a:visited {
|
||||
color: #08f;
|
||||
color: #f14600;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover, a:active {
|
||||
color: #f00;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#top-menu {
|
||||
margin: 12px 0 0 0;
|
||||
font: 400 18pt 'Yandex Sans Display Web', Arial, sans-serif;
|
||||
margin: 8px 0 0 0;
|
||||
font-size: 18pt;
|
||||
float: right;
|
||||
}
|
||||
|
||||
@ -171,11 +109,10 @@ a:hover, a:active {
|
||||
.index_item:active,
|
||||
.index_item:visited {
|
||||
color: #ededed;
|
||||
font: 300 100% 'Yandex Sans Display Web', Arial, sans-serif;
|
||||
}
|
||||
|
||||
#short-description {
|
||||
font: 300 125%/150% 'Yandex Sans Display Web', Arial, sans-serif;
|
||||
font-size: 125%;
|
||||
margin: 0 1em 1.75em 0;
|
||||
text-align: left;
|
||||
}
|
||||
@ -215,7 +152,7 @@ a:hover, a:active {
|
||||
#announcement {
|
||||
margin: 0 0 60px 0;
|
||||
padding: 20px 0;
|
||||
font: 400 125%/133% 'Yandex Sans Display Web',Arial,sans-serif;
|
||||
font-size: 125%;
|
||||
}
|
||||
.announcement-link {
|
||||
color: #000!important;
|
||||
@ -268,7 +205,7 @@ a:hover, a:active {
|
||||
}
|
||||
|
||||
pre {
|
||||
font: 13px/18px monospace, "Courier New";
|
||||
font: 13px/18px SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
|
||||
display: block;
|
||||
border-left: 5px solid #ffdb4d;
|
||||
padding: 5px 10px;
|
||||
@ -313,9 +250,9 @@ img {
|
||||
}
|
||||
|
||||
.distributive_not_selected {
|
||||
color: #08f;
|
||||
color: #f14600;
|
||||
cursor: pointer;
|
||||
border-bottom: 1px solid #08f;
|
||||
border-bottom: 1px solid #f14600;
|
||||
}
|
||||
|
||||
#tutorial_logo {
|
||||
@ -326,7 +263,7 @@ img {
|
||||
}
|
||||
|
||||
#tutorial_title {
|
||||
font: normal 100px 'Yandex Sans Display Web', Arial, sans-serif;
|
||||
font-size: 100px;
|
||||
margin-top: 25px;
|
||||
margin-bottom: 0;
|
||||
text-align: center;
|
||||
@ -349,8 +286,8 @@ img {
|
||||
}
|
||||
|
||||
.spoiler_title {
|
||||
color: #08f;
|
||||
border-bottom: 1px dotted #08f;
|
||||
color: #f14600;
|
||||
border-bottom: 1px dotted #f14600;
|
||||
}
|
||||
|
||||
.spoiler_title:hover {
|
||||
|
@ -47,7 +47,7 @@
|
||||
<path class="orange" d="M8,3.25 h1 v1.5 h-1 z"></path>
|
||||
</svg>
|
||||
|
||||
ClickHouse
|
||||
<img id="logo-text" src="images/clickhouse-black.svg" alt="ClickHouse" />
|
||||
</h1>
|
||||
</a>
|
||||
</div>
|
||||
@ -450,7 +450,7 @@ sudo clickhouse-client-$LATEST_VERSION/install/doinst.sh
|
||||
<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
|
||||
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>
|
||||
@ -529,15 +529,15 @@ sudo clickhouse-client-$LATEST_VERSION/install/doinst.sh
|
||||
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 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];
|
||||
result = 'Upcoming Meetup: ' + result[0];
|
||||
} else {
|
||||
result = 'Upcoming Meetups: ' + result.join(', ');
|
||||
var offset = result.lastIndexOf(', ');
|
||||
|
Loading…
Reference in New Issue
Block a user