ááŸááºáááºážáá»á¬ážááá¯ááŒáá·áºááŸá¯ááẠáááºá¡ááºáá¬áá±á·á áºáá»á¬ážááᯠáááºá¡áá¯á¶ážááŒá¯áá°ážáá«áá á ááºážáááºážá¡ááá¯ááºážá á€á¡ááºáá¬áá±á·á áºáá»á¬ážááẠáááºáá²ááŒá®áž (áááŒá¬áá) á¡ááœááºá¡áááºááŒá±ááŒá®áž áá¯á¶á·ááŒááºááŸá¯ááááŸááááºááᯠáááºáááááŒá¯áááá±áááºá áá áºáá»áá¯á·á áááºáá¯á¶ážááá¯á·ááááºá ááá»áá¯á·á áá¯á¶ážáááŒá±á¬ááºá áá¬áá±á¬ááºážáá±ááá·áº ááŒá¿áá¬á¡á¬ážáá¯á¶ážáá²á· á¡ááŒá±á¬ááºážáááºážá ááŸááºáááºážááœá±ááᯠáááŸááºááááºááŒáá·áºááŸá¯áá²á· á¡áá¯ááºáá¬áááºááᯠáá»ááºážáááºáá¬ááŒá±á¬áá·áº CLI (command line interface) ááŸááá²á· áááºá¡ááºáá¬áá±á·á áºááᯠáááºáá®ážááá¯á· ááŒáá¯ážá á¬ážáá«áááºá ááá¯áá±á¬ááºážá¡áá¯ááºáá¯ááºáá«áááºá áá»áœááºá¯ááºááẠáá¯áá¹ááá¯ááºáá±ážá¡á tailá grepá awk ááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºáá¬ááœáẠá¡ááœááºá¡áááºááŒá±áááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºá¡ááœáẠááŸááºáááºážáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºááẠá á¶ááŒá¡ááºáá¬áá±á·á áºááẠtail ááŸáá·áº grep ááŸáá·áº áááºáá°áááºá ááá¯á·áá±á¬áº áááºážááẠáá¬áá¬áá»á¬ážá áœá¬ááŸáá¬áá±á¬ ááŸááºáááºážáá»á¬ážááᯠáááºáááºá¡ááœááºáááºáž á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá á¡á²áá«ááᯠClickHouse ááá± áááºáá¬áá±á¬á· áá±áá»á¬áá«áááºá
* habra á¡áá¯á¶ážááŒá¯áá°áááá¯ááºááá¯ááºá¡ááŒááºá¡á
logscli ááœá±á·áá¯á¶áá«á
áá»áœááºá¯ááºáá¡ááºáá¬áá±á·á
áºá¡ááœáẠá¡áááºáá
áºáá¯áááŒáá²á·áá² ááá¯ážááá¯ážáá¬ážáá¬ážááŒá±á¬ááá»áŸáẠáááºážááẠááŸá±á·ááŒá±ážáá¯á¶á
á¶áá¯á¶á
á¶ááŒáá·áº áááºááŸááá±áá±á¬áºáááºáž á¡áááºážá¡ááŒá
áºáá¯ááºááᯠáááºáá»ááºáá»ááºážááŒáá·áºááá¯áá«áá áááºááẠááŒáá¯ááá¯áá«áááº-
á¡ááœááºá·á¡áááºáž
áá»áœááºá¯ááºááááºááœááºáá»ááºááŸá¬ tail/grep ááá¯á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááŸáá·áº áááºážááŸá®ážáááºáá¯áááºááá±á¬ interface áá áºáá¯ááŒá¯áá¯ááºáááºááŒá áºááŒá®ážá ááá¯ááá¯áááºááŸá¬ á¡á±á¬ááºáá«á¡áá¬áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáááºááŒá áºáááºá
- á á áºáá¯ááºááŒááºážáááŸááá² ááŸááºáááºážá¡á¬ážáá¯á¶ážááᯠááŒáá·áºááŸá¯áá«á
- áá¯á¶áá±á
á¬áááºážááœá²áá»á¬ážáá«ááŸááá±á¬ á
á¬ááŒá±á¬ááºážáá»á¬ážááᯠáá»ááºáá¬ážáá²á·áá« (á¡áá¶
-F
Ñgrep
). - áá¯á¶ááŸááºá¡áá¯á¶ážá¡ááŸá¯ááºážááŸáá·áºááá¯ááºáá®áá±á¬ á
á¬ááŒá±á¬ááºážáá»á¬ážááᯠáá»ááºáá¬ážáá²á·áá« (á¡áá¶
-E
Ñgrep
). - áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá ááŒáá·áºááŸá¯ááŸá¯ááẠá¡áá»áááºááŸáá·áºáááŒá±ážáá® ááŒá±á¬ááºážááŒááºááŒá áºáá±áááºá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº áááºááá±á¬ááŸááºáááºážáá»á¬ážááẠá¡áá»á¬ážá¡á¬ážááŒáá·áº áŠážá áœá¬á áááºáááºá á¬ážáá±á¬ááŒá±á¬áá·áºááŒá áºáááºá
- á
á¬ááŒá±á¬ááºážáá
áºáá¯á
á®ááá±ážááœáẠá¡ááŒá±á¬ááºážá¡áá¬ááá¯ááŒáá« (ááœá±ážáá»ááºá
áá¬áá»á¬áž
-A
,-B
О-C
Ñgrep
á ááŸá±á·á áá±á¬ááºá ááŸáá·áº ááá¯ááºáá®áá±á¬ á á¬ááŒá±á¬ááºážáá áºáá¯á á®ááœáẠN ááá¯ááºážáá»á¬ážááᯠáá¯á¶ááŸáááºááŒááºáž)á - á
á
áºáá¯ááºááŒááºáž ááá¯á·ááá¯áẠá
á
áºáá¯ááºááŒááºážáááŸááá² áááºáá¬áá±á¬ááŸááºáááºážáá»á¬ážááᯠá¡áá»áááºááŸáá·áºáááŒá±ážáá®ááŒáá·áºááŸá¯áá« (á¡áááá¡á¬ážááŒáá·áº
tail -f | grep
). - á¡ááºáá¬áá±á·á
áºááŸáá·áº áááá¬áááŒá
áºááááºá
less
,head
,tail
ááŸáá·áº á¡ááŒá¬ážáá°áá»á¬áž - áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá áááºážááá¯á·á áá¶áá«ááºá¡áá±á«áº ááá·áºáááºáá»ááºáá»á¬ážáááŸááá² ááááºáá»á¬ážááᯠááŒááºáá±ážááá·áºáááºá á¡áá¯á¶ážááŒá¯áá°ááẠáááºážááá¯á·ááá¯áááºáá¶ááẠá áááºáááºá á¬ážáá±áááœá±á· ááá¯ááºážáá»á¬ážááᯠstream áá áºáá¯á¡áá±ááŒáá·áº ááá¯ááºááŸáááºáá¬ážáá«áááºá á¡áá»ááºááŒSIGPIPE
áááºážááá¯á·áá²á·ááá¯á· ááŸááºáááºážááœáŸáá·áºááŒááºážááᯠááááºááááẠááŸá±á¬áá·áºááŸááºááá·áºáááºátail
,grep
ááŸáá·áº á¡ááŒá¬áž UNIX á¡áá¯á¶ážá¡áá±á¬ááºáá»á¬ážá
á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯
áááºááẠClickHouse ááá¯á· ááŸááºáááºážáá»á¬áž áá±ážááá¯á·áááºážááᯠáá
áºáááºážáááºážááŒáá·áº áááá±ááŒá®áᯠáá»áœááºáá±á¬áº áá°ááá«áááºá ááá¯ááºááẠá
ááºážáá¯á¶ážááŒáá·áºááá¯á· á¡ááŒá¶ááŒá¯áá»ááºáá«áááºá
ááááŠážá áœá¬ á¡ááŒá±áá¶á¡á á®á¡á á¥áºááᯠáá¯á¶ážááŒááºááẠááá¯á¡ááºáááºá á¡áá»áááºá¡ááá¯áẠá á®áá¬ážáá±á¬ ááŸááºáááºážáá»á¬ážááᯠá¡áá»á¬ážá¡á¬ážááŒáá·áº áááºáá¶ááá°ááá¯áá±á¬ááŒá±á¬áá·áº áááºážááá¯á·ááᯠááá¯áááºážááŒáá·áº ááááºážáááºážááŒááºážááẠáá¯áá¹ááááŸááá¯á¶ááááºá ááŸááºáááºážá¡áá»áá¯ážá¡á á¬ážáá»á¬ážá áœá¬ááŸáááŒá®áž áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠá¡áá»áá¯ážá¡á á¬ážáá°áá®áá«áá áááºááá®ážáááááá±á¬áºáá¶á¡ááŒá ẠááŸááºáááºážá¡áá»áá¯ážá¡á á¬ážáá áºáá¯ááᯠáááºááŒá¯áá¯ááºááá¯ááºáááº- áááºážááẠááá·áºá¡á¬áž áá»á¬ážá áœá¬á¡á á¬áž ááá¬ážáá áºáá¯áá¬ážááŸáááá¯ááºá á±áááºááŒá áºááŒá®ážá áááºážááẠáá±á«ááºážááá·áºá¡áá«ááœáẠááŒá®ážáá¬ážáááºááŒá áºáááºá ClickHouse ááá¯á·ááá·áºááœááºážááŒááºáž (áá¬á·ááºáááá¯ááºáá»á¬ážáá«ááŸááá±á¬áá¬áá¬áá»á¬ážááœááºá áá áºá áá¹ááá·áºáá»áŸáẠ~ 1 ááŒáááºáááºáááá¯áá²áá±áá¬ááá·áºáááºá¡ááŒá¶ááŒá¯ááẠáá¬áá¬áá áºáá¯áá¯á¶ážá¡ááœááº).
ááá¯ááá¯áááºááŸá¬á áá»áœááºá¯ááºááá¯á·ááẠááá·áºááŸááºážááŒá±á¡á¬ážááŒáá·áº á¡á±á¬ááºáá«ááá¬ážá¡á á®á¡á ááºááᯠááá¯á¡ááºáá«áááºá
CREATE TABLE logs(
category LowCardinality(String), -- каÑегПÑÐžÑ Ð»ÐŸÐ³ÐŸÐ² (ПпÑОПМалÑМП)
time DateTime, -- вÑÐµÐŒÑ ÑПбÑÑОÑ
millis UInt16, -- ЌОллОÑекÑÐœÐŽÑ (ЌПгÑÑ Ð±ÑÑÑ Ðž ЌОкÑПÑекÑМЎÑ, О Ñ.ÐŽ.): ÑекПЌеМЎÑеÑÑÑ Ñ
ÑаМОÑÑ, еÑлО ÑПбÑÑОй ЌМПгП, ÑÑÐŸÐ±Ñ Ð±ÑлП легÑе ÑазлОÑаÑÑ ÑПбÑÑÐžÑ ÐŒÐµÐ¶ÐŽÑ ÑПбПй
..., -- ваÑО ÑПбÑÑвеММÑе пПлÑ, МапÑÐžÐŒÐµÑ ÐžÐŒÑ ÑеÑвеÑа, ÑÑÐŸÐ²ÐµÐœÑ Ð»ÐŸÐ³ÐžÑПваМОÑ, О Ñак Ўалее
message String -- ÑекÑÑ ÑППбÑеМОÑ
) ENGINE=MergeTree()
ORDER BY (category, time, millis)
áá¶ááá±á¬ááºážá
áœá¬ááŒáá·áºá áá»áœááºá¯ááºáááºážáá°á áá±á«ááºážáá¯ááºáá¯ááºááá¯ááºáá±á¬ áááºááœá±á·áá»áá±á¬ ááŸááºáááºážáá»á¬ážáá«ááá·áº áááºááá·áº open source á¡áááºážá¡ááŒá
áºááá¯áááᯠáá»áœááºá¯áẠáá»ááºáá»ááºáž ááŸá¬áááœá±á·áá«á ááá¯á·ááŒá±á¬áá·áº áááºážááᯠááá°áá¬á¡ááŒá
Ạáá°ááá¯ááºáá«áááºá
Amazon áá¯á¶ážáááºáá»ááºáá»á¬ážááᯠClickHouse ááá¯á· á¡ááºáá¯ááºáááºááŒááºážá¡ááœáẠááœáŸááºááŒá¬ážáá»ááºáá»á¬áž
ááá¬ážáá áºáá¯áááºáá®ážááŒáá«á áá¯á·á
CREATE TABLE amazon(
review_date Date,
time DateTime DEFAULT toDateTime(toUInt32(review_date) * 86400 + rand() % 86400),
millis UInt16 DEFAULT rand() % 1000,
marketplace LowCardinality(String),
customer_id Int64,
review_id String,
product_id LowCardinality(String),
product_parent Int64,
product_title String,
product_category LowCardinality(String),
star_rating UInt8,
helpful_votes UInt32,
total_votes UInt32,
vine FixedString(1),
verified_purchase FixedString(1),
review_headline String,
review_body String
)
ENGINE=MergeTree()
ORDER BY (time, millis)
SETTINGS index_granularity=8192
Amazon dataset ááœáẠááŒááºáááºáá¯á¶ážáááºááẠáááºá áœá²áá áºáá¯áá¬ááŸááá±á¬áºáááºáž á¡áá»áááºá¡ááá¡áá»áááŸááá±á¬ááŒá±á¬áá·áº á€áá±áá¬ááᯠrandon ááŒáá·áº ááŒáá·áºááá¯ááºááŒáá«á áá¯á·á
10 GB RAM ááŸáá·áº á¡á¶ááááºáá±á¬ áá±áá¬á¡á á¯á¡áá±ážááŒá®ážááᯠáááŸááááºá¡ááœáẠáááºááẠtsv ááá¯ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒá®áž ááá·áºááá¯ááºááẠááá ~20-16 á¡áá ááá·áºáááºáá¬ážááẠáááá¯á¡ááºáá«á TSV ááá¯ááºáá»á¬ážááᯠá¡ááºáá¯ááºáá¯ááºááẠá¡á±á¬ááºáá« command ááᯠá¡áá¯á¶ážááŒá¯áá²á·áááºá
for i in *.tsv; do
echo $i;
tail -n +2 $i | pv |
clickhouse-client --input_format_allow_errors_ratio 0.5 --query='INSERT INTO amazon(marketplace,customer_id,review_id,product_id,product_parent,product_title,product_category,star_rating,helpful_votes,total_votes,vine,verified_purchase,review_headline,review_body,review_date) FORMAT TabSeparated'
done
1000 GB á¡ááœááºá¡á á¬ážááŸááá±á¬ Google Cloud ááŸá Standard Persistent Disk (HDD) ááœáẠ(á€á¡ááœááºá¡á á¬ážááᯠá¡áááá¡á¬ážááŒáá·áº áá»áœááºá¯ááºáá°áá²á·áááºá ááá¯á·ááŒá±á¬áá·áº ááá¯á¡ááºááá·áºá¡ááœááºá¡á á¬ážá SSD ááẠá á»á±ážáááºáá¬áááºááŒá áºáá±á¬áºáááºážá á€á¡ááœááºá¡á á¬ážááᯠá¡áááá¡á¬ážááŒáá·áº áá»áœááºá¯ááºáá°áá²á·áááº) á¡ááŒááºááŸá¯ááºáž 75 cores ááœáẠááá·áºááŸááºážááŒá± ~ 4 MB/sec ááŸááááºá
- áá»áœááºá¯ááºááẠGoogle ááœááºá¡áá¯ááºáá¯ááºáá±á¬ááŒáá¯áááºá á¬áááºážááœááºážáá¬ážááá«áááºá ááá¯á·áá±á¬áºáá»áœááºá¯ááºáááºááá¯ááºáá±ážááá¯ááºáá¬á¡áá±á¬áá·áºáá áºáá¯ááá¯á¡áá¯á¶ážááŒá¯ááŒá®ážá€áá±á¬ááºážáá«ážáááºáá¯áá¹ááá®ááœááºáá»áœááºá¯ááºáá¡áá¯ááºááŸáá·áºááááºááá¯ááºáá«á
áá»áœááºá¯ááºáááºáá²ááœááºááŸááááºááŒá áºáá±á¬ááŒá±á¬áá·áº á€á¡áá°ážáá±áá¬á¡ááœá²ááŒáá·áº ááá¯ááºáá±á¬áºáá¯á¶áá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá»áœááºá¯ááºáá¯ááºáá«áááºá
áá±áá¬á áááºááºáááºááŒááºážááá¯ážáááºááŸá¯ááá¯ááŒááá«á
ClickHouse ááœáẠáá»áœááºá¯ááºááá¯á·ááẠááŸááºáááºážáá»á¬ážáá«ááŸááá±á¬ ááá¬ážáá
áºáá¯áá±á«áºááœáẠá¡ááŒáá·áºá¡á
á¯á¶á
áááºááºáááºááŒááºážááᯠá¡áá¯á¶ážááŒá¯áááºááŒá
áºááŒá®ážá á€áá¯ááºáá±á¬ááºáá»ááºááẠá¡áá»áááºáá»á¬ážá
áœá¬ááŒá¬ááá¯ááºááŒá®áž ááá¯ááºááá¯ááºááŸá¯á¡áááºážáááºááᯠááœá±á·ááŸááá«á á¡áá»áááºááŒá¬ááŒáá·áºá
áœá¬ ááááºááœááºáá±á«áºááá¯ááºáááºááá¯ááºáá«á ááááºááŸáá·áºá¡áá° ááááááºážáá»á¬ážááᯠáááŸááááºá¡áá áá±ážááœááºážáááá¯ážáááºááŸá¯á áááºážááá¯áá¯ááºáá±á¬ááºááẠHTTP á¡ááºáá¬áá±á·á
áºááœáẠááá·áºá¡á¬áž HTTP áá±á«ááºážá
á®ážáá»á¬ážááœáẠááá¯ážáááºááŸá¯ááᯠáá±ážááá¯á·ááá¯ááºá
á±ááá·áº ááá·áºáááºáá»ááºáá
áºáᯠááŸááá«áááºá send_progress_in_http_headers=1
. áá¶ááá±á¬ááºážá
áœá¬ááŒáá·áºá á
ᶠGo á
á¬ááŒáá·áºááá¯ááºááẠáááºážááá¯á·áááºáá¶áááŸááá¬ážááá·áºá¡ááá¯ááºáž áá±á«ááºážá
á®ážáá»á¬ážááᯠááááºááá¯ááºáá±á¬áºáááºáž HTTP 1.0 á¡ááºáá¬áá±á·á
Ạ(1.1 ááŸáá·áº ááá±á¬ááœá±ážá
á±ááá¯áá«á) ááᯠClickHouse á០áá¶á·ááá¯ážáá±ážáá±á¬ááŒá±á¬áá·áº áááºááẠClickHouse ááá¯á· TCP áá»áááºáááºááŸá¯ááŒááºážááᯠááœáá·áºááŒá®áž áááºážááᯠááá¯áá±áá¬ááá¯á· áá±ážááá¯á·ááá¯ááºáá«áááºá GET /?query=... HTTP/1.0nn
ááœááºáá±á«áẠááá¯á·ááá¯áẠáá¯ááºááŸááºááŒááºážáááŸááá² áá¯á¶á·ááŒááºááŸá¯ áá±á«ááºážá
á®ážáá»á¬ážááŸáá·áº á
á¬ááá¯ááºá¡á¬áž áááºáá¶ááá°áá«á ááá¯á·ááŒá±á¬áá·áº á€ááá
á¹á
ááœáẠáá»áœááºá¯ááºááá¯á·ááẠá
á¶á
á¬ááŒáá·áºááá¯ááºááá¯ááẠá¡áá¯á¶ážááŒá¯ááẠáááá¯á¡ááºáá«á
ClickHouse á០ááœáŸáá·áºáááºáá±á¬ááŸááºáááºážáá»á¬áž
ClickHouse ááœáẠORDER BY ááŒáá·áº áá±ážááŒááºážáá»ááºáá»á¬ážá¡ááœáẠá¡áá»áááºá¡áá±á¬áºááŒá¬á¡á±á¬áẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºáá¬ážáá«ááẠ(2019 áá¯ááŸá áºááááºážá?) ááŒá áºáá±á¬ááŒá±á¬áá·áº áá±ážááŒááºážáá»ááºáá²á·ááá¯á·á
SELECT time, millis, message
FROM logs
WHERE message LIKE '%something%'
ORDER BY time DESC, millis DESC
á áááºááºáááºááŒááºážááᯠááŒá®ážá¡á±á¬ááºáá á±á¬áá·áºáá² áááºážááá¯á·á áááºáá±á·áá»áºááœáẠ"áá áºáá¯áá¯" áá«áá±á¬ á á¬ááŒá±á¬ááºážááœá²áá»á¬ážáá«ááŸáááá·áº ááá¯ááºážáá»á¬ážááᯠáá»ááºáá»ááºážááŒááºá áá«áááºá
ááá¯á·á¡ááŒááºá ClickHouse ááá¯ááºááá¯ááºá áááºážááŸáá·áºáá»áááºáááºááŸá¯ááá¯ááááºáá±á¬á¡áá« áá±á¬ááºážááá¯áá»ááºááᯠáááºáá»ááºáá«á á¡ááœááºá¡áááºááŒá±áááá·áºáááºá ááá¯á·áá±á¬áº áááºážááẠáá¯á¶áá±á¡ááŒá¯á¡áá°ááá¯ááºáá±á ááœá±ážáá»ááºááœáá·áºááᯠá¡áá¯á¶ážááŒá¯á á¡ááá¯á¡áá»á±á¬áẠáá±á¬ááºážááá¯áá»áẠáááºáá»ááºááŒááºážááᯠááœáá·áºááá¯ááºáááºá cancel_http_readonly_queries_on_client_close=1
.
Go ááœáẠSIGPIPE ááᯠááŸááºáááºá áœá¬ ááá¯ááºááœááºááŒááºážá
execute áá¯ááºáá²á·á¡áá« command ááá¯ááŒá±á¬áá«á some_cmd | head -n 10
á¡áááá·áºáá±ážáá¯á¶á¡ááá¡áá» some_cmd
ááœááºáá»ááºááá·áºá¡áá« áááºáááºá head
á
á¬ááŒá±á¬ááºáž 10 ááᯠáá¯ááºááá¬ážá á¡ááŒá±á ááá¯ážááŸááºážáá«áááºá head
á¡áá¯á¶ážááœááºá ááá¯ááºááááºááœá¬ážááŒá®áž some_cmd command á stdout ááẠá¡ááŒá±á¡áá±á¡á âto nowhereâ ááᯠá
áááºááœáŸááºááŒáááºá áááºáá±á¬á·áá² some_cmd
ááááºáá¬ážáá²á· ááá¯ááºááᯠáá±ážááá¯á· ááŒáá¯ážá
á¬ážáááºá
Go ááœáẠáááºážááẠáá¯á¶áá±á¡á¬ážááŒáá·áº ááŒá áºáá±á«áºáá±á¬áºáááºáž SIGPIPE signal handler ááẠá¡áá¯á¶ážááœáẠ"signal: SIGPIPE" ááá¯á·ááá¯áẠá¡áá¬ážáá° áááºáá±á·áá»áºááᯠprint áá¯ááºááŒá®áž á€áááºáá±á·áá»áºááᯠááŸááºážáááºážááẠSIGPIPE ááᯠáá»áœááºá¯ááºááá¯á· á¡ááá¯ááŸáááá·áºá¡ááá¯ááºáž ááááºááááẠááá¯ááºááœááºááẠááá¯á¡ááºáá«áááºá ááœááºáá±á«ááº:
ch := make(chan os.Signal)
signal.Notify(ch, syscall.SIGPIPE)
go func() {
<-ch
os.Exit(0)
}()
áááºáá±á·áá»áºá¡ááŒá±á¬ááºážá¡áá¬ááᯠááŒáá«á
áááŒá¬ááááá¯áááᯠá¡áá»áá¯á·áá±á¬ error áá»á¬áž ááŒá
áºáá±á«áºáá¬ááá·áº áááºá
ááºá¡ááŒá±á¬ááºážá¡áᬠ(á¥ááá¬á áá±á¬ááºážááá¯áá»ááºááẠááááºááá·áºá
á±áá±á¬ ááá¯á·ááá¯áẠáá»ááºá
á®ážááŸá¯áááá¯ááºáá® áááºááá·áºáááºá
ááºááŒá¿áá¬áá»á¬ážááᯠááŒááºááá¯ááºáááº) ááŸáá·áº grep
áááºáá±á·áá»áºááŒá®ážáá±á¬ááºá ááŸá±á·á ááŸáá·áº áá
áºááá¯ááºááœáẠáááºááŸááºáá¬ážáá±á¬ á
á¬ááŒá±á¬ááºážá¡áá±á¡ááœááºááᯠáá±á¬áºááŒááá·áº -Aá -Bá ááŸáá·áº -C ááœá±ážáá»ááºááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºážááᯠáá¯ááºáá±á¬ááºáááºá
áá¶ááá±á¬ááºážá áœá¬ááŒáá·áºá ClickHouse ááœáẠá¡áá¬ážáá°áá¯ááºáá±á¬ááºááẠááœááºáá°áá±á¬áááºážáááºážááᯠáá»áœááºá¯ááºáááœá±á·áá²á·áááŒáá·áº á áá¬ážá ááºáá±á¬áºááŒáááºá á€áá²á·ááá¯á·áá±á¬ áááºáá±á¬ááºážáá±á¬ááºážááá¯áá»ááºáá áºáá¯ááᯠááááºáá á¬ááŒá±á¬ááºážáá áºáá¯á á®ááá¯á· áá±ážááá¯á·ááẠ(á¡áá±ážá áááºá¡áá»ááºáá»á¬ážááẠá¡áá»áá¯ážá¡á á¬ážááœá²ááŒááºážá¡áá±á«áº áá°áááºááŒá®áž á¡ááŒá±á¬ááºážá¡áá¬ááᯠááŸá±á·ááœááºááŒáááŒááºážááŸááááŸáá ááá¯á·ááá¯ááºááŒá®ážáá±á¬ááº):
SELECT time,millis,review_body FROM amazon
WHERE (time = 'ÐÐ ÐÐЯ_СÐÐЫТÐЯ' AND millis < ÐÐÐÐÐСÐÐУÐÐЫ_СÐÐЫТÐЯ) OR (time < 'ÐÐ ÐÐЯ_СÐÐЫТÐЯ')
ORDER BY time DESC, millis DESC
LIMIT ÐÐÐÐЧÐСТÐÐ_СТРÐÐ_ÐÐÐТÐÐСТÐ
SETTINGS max_threads=1
ClickHouse ááẠáááºááá¯ááºáᬠááá¯ááºážááᯠááŒááºáá±ážááŒá®ážáá±á¬áẠáá»ááºáá»ááºážáá®ážáá«áž áá±á¬ááºážááá¯áá»áẠááá¯á·ááá¯ááºáá±á¬ááŒá±á¬áá·áºá áááºážááẠáááºááŸáºááœáẠá¡áá¯á¶ážáááºááŒá®áž áá±áá¯áá»á¡á¬ážááŒáá·áº áá±á¬ááºážááá¯áá»ááºááẠá¡ááœááºáá»ááºááŒááºá áœá¬ áá¯ááºáá±á¬ááºááŒá®áž CPU á¡áááºážáááºááᯠá á¬ážáá¯á¶ážááẠ(áá»á¬ážáá±á¬á¡á¬ážááŒáá·áº áá±á¬ááºážááá¯áá»ááºááẠáá»áœááºá¯ááºá virtual machine ááœáẠ~ 6 ms ááá·áº ááŒá¬áááº)á
áááºáá±á·ááºá»á¡áá áºáá»á¬ážááᯠá¡áá»áááºááŸáá·áºáááŒá±ážáá® ááŒááá«á
(áá®ážáá«áž) á¡áá»áááºááŸáá·áºáááŒá±ážáá® á¡áááºáááºáá±á·áá»áºáá»á¬ážááᯠááŒááááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠááááºá áá»áœááºá¯ááºááá¯á·ááŒá¯á¶ááœá±á·áá²á·áááá·áº áá±á¬ááºáá¯á¶ážá¡áá»áááºáá¶ááááºááᯠáááááᬠá áá¹ááá·áºá¡áááºážáááºááá¯ááºáž áá±á¬ááºážááá¯áá»ááºááᯠááá¯ážááŸááºážá áœá¬ áá¯ááºáá±á¬ááºáá«áááºá
Command á¥ááá¬áá»á¬áž
áá¯á¶ááŸáẠlogscli ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááẠáááºááœá±á·ááœáẠáááºááá¯á·ááŸáááááºážá
áá±á¬ááºážáá«ážá¡á ááœááºáá±á¬áºááŒáá¬ážáá±á¬ Amazon dataset ááᯠáááºáá±á«ááºážáá¯ááºáá¯ááºáá«áá áááºááẠá¡á±á¬ááºáá« command áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºáááº-
# ÐПказаÑÑ ÑÑÑПкО, гЎе вÑÑÑеÑаеÑÑÑ ÑлПвП walmart
$ logscli -F 'walmart' | less
# ÐПказаÑÑ ÑаЌÑе ÑвежОе 10 ÑÑÑПк, гЎе вÑÑÑеÑаеÑÑÑ "terrible"
$ logscli -F terrible -limit 10
# ТП же ÑаЌПе без -limit:
$ logscli -F terrible | head -n 10
# ÐПказаÑÑ Ð²Ñе ÑÑÑПкО, пПЎÑ
ПЎÑÑОе пПЎ /times [0-9]/, МапОÑаММÑе ÐŽÐ»Ñ vine О Ñ ÐºÐŸÑПÑÑÑ
вÑÑПкОй ÑейÑОМг
$ logscli -E 'times [0-9]' -where="vine='Y' AND star_rating>4" | less
# ÐПказаÑÑ Ð²Ñе ÑÑÑПкО ÑП ÑлПвПЌ "panic" О 3 ÑÑÑПкО кПМÑекÑÑа вПкÑÑг
$ logscli -F 'panic' -C 3 | less
# ÐепÑеÑÑвМП пПказÑваÑÑ ÐœÐŸÐ²Ñе ÑÑÑПкО ÑП ÑлПвПЌ "5-star"
$ logscli -F '5-star' -tailf
ááá¯ážáá¬áž
á¡áá¯á¶ážáááºáá¯áẠ(á
á¬ááœááºá
á¬áááºážááá«áá²) ááᯠgithub ááœááºáááá¯ááºáááºá
source: www.habr.com