рд╣рдо рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕* рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рд╣рдо рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕* рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдиреЗ рдХрднреА рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдмреЛрдЭрд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ (рдЕрдХреНрд╕рд░) рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдХреБрдЫ рдХреА рдЖрдкрдХреЛ рдЖрджрдд рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреБрдЫ рдмрд┐рд▓реНрдХреБрд▓ рднрдпрд╛рдирдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ: рд╣рдо рдПрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕реАрдПрд▓рдЖрдИ (рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ. рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЯреЗрд▓, рдЧреНрд░реЗрдк, рдСрдХ рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╣рдЬ рд╣реВрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рд▓рд┐рдП рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЯреЗрд▓ рдФрд░ рдЧреНрд░реЗрдк рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рд╕реЗ рдЖрдП рд▓реЙрдЧ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рдд, рдЙрдиреНрд╣реЗрдВ ClickHouse рд╕реЗ рдкрдврд╝реЗрдВ!

*рд╣рдмрд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдирд┐рдЬреА рд░рд╛рдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрдкрдиреЗ рдзрдорд╛рд▓ рдордЪрд╛рдпрд╛

рд▓реЙрдЧреНрд╕рдХреНрд▓реА рд╕реЗ рдорд┐рд▓реЗрдВ

рдореИрдВ рдЕрдкрдиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд╛рдо рд▓реЗрдХрд░ рдирд╣реАрдВ рдЖрдпрд╛, рдФрд░ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХрд╣реВрдВ рддреЛ рдпрд╣ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рддреБрд░рдВрдд рд╕реНрд░реЛрдд рдХреЛрдб рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ: https://github.com/YuriyNasretdinov/logscli (рдЪрдпрдирд┐рдд рдЧреЛ рдХреЛрдб рдХреА 350 рдкрдВрдХреНрддрд┐рдпрд╛рдБ)ред

рдХреНрд╖рдорддрд╛рдУрдВ

рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдПрдХ рдРрд╕рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдирд╛ рдерд╛ рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░рд┐рдЪрд┐рдд рд▓рдЧреЗ рдЬреЛ рдЯреЗрд▓/рдЧреНрд░реЗрдк рдХреЗ рдЖрджреА рд╣реИрдВ, рдпрд╛рдиреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬрд╝реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  1. рдмрд┐рдирд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рд╕рднреА рд▓реЙрдЧ рджреЗрдЦреЗрдВ.
  2. рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ (рдзреНрд╡рдЬ) рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЫреЛрдбрд╝реЗрдВ -F ╤Г grep).
  3. рдРрд╕реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЫреЛрдбрд╝реЗрдВ рдЬреЛ рд░реЗрдЧреБрд▓рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди (рдзреНрд╡рдЬ) рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реЛрдВ -E ╤Г grep).
  4. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рджреЗрдЦрдирд╛ рд╡рд┐рдкрд░реАрдд рдХрд╛рд▓рд╛рдиреБрдХреНрд░рдорд┐рдХ рдХреНрд░рдо рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рд▓реЙрдЧ рдЖрдорддреМрд░ рдкрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
  5. рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдЖрдЧреЗ рд╕рдВрджрд░реНрдн рджрд┐рдЦрд╛рдПрдБ (рд╡рд┐рдХрд▓реНрдк)ред -A, -B ╨╕ -C ╤Г grep, рдХреНрд░рдорд╢рдГ рдкреНрд░рддреНрдпреЗрдХ рдорд┐рд▓рд╛рди рдкрдВрдХреНрддрд┐ рд╕реЗ рдкрд╣рд▓реЗ, рдмрд╛рдж рдореЗрдВ рдФрд░ рдЙрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрди рд▓рд╛рдЗрдиреЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛)ред
  6. рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдпрд╛ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ (рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ) рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЙрдЧ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рджреЗрдЦреЗрдВ tail -f | grep).
  7. рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП less, head, tail рдФрд░ рдЕрдиреНрдп - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкрд░рд┐рдгрд╛рдо рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдмрд┐рдирд╛ рд▓реМрдЯрд╛рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП; рдЬрдм рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ рддрдм рддрдХ рд▓рд╛рдЗрдиреЗрдВ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд░реВрдк рдореЗрдВ рдореБрджреНрд░рд┐рдд рд╣реЛрддреА рд╣реИрдВ; рд╕рдВрдХреЗрдд 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)

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рддреБрд░рдВрдд рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд▓реЙрдЧ рд╡рд╛рд▓рд╛ рдХреЛрдИ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдкрдХрдбрд╝ рд╕рдХреВрдВ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХреВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ 2015 рд╕реЗ рдкрд╣рд▓реЗ рдЕрдореЗрдЬрд╝рди рдХреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛рдПрдБ. рдмреЗрд╢рдХ, рдЙрдирдХреА рд╕рдВрд░рдЪрдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдЯреЗрдХреНрд╕реНрдЯ рд▓реЙрдЧ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд┐рддреНрд░рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

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

рдЕрдореЗрдЬрд╝реЕрди рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рддрд╛рд░реАрдЦ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕рдЯреАрдХ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдЗрдП рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд░реИрдВрдбрди рд╕реЗ рднрд░реЗрдВред

рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЯреАрдПрд╕рд╡реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЦреБрдж рдХреЛ рдкрд╣рд▓реЗ ~ 10-20 рддрдХ рд╕реАрдорд┐рдд рд░рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдЬреЛ 16 рдЬреАрдмреА рд░реИрдо рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЯреАрдПрд╕рд╡реА рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:

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 рдЬреАрдмреА рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде Google рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдПрдХ рдорд╛рдирдХ рдкрд░реНрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдбрд┐рд╕реНрдХ (рдЬреЛ рдПрдХ рдПрдЪрдбреАрдбреА рд╣реИ) рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ (рдореИрдВрдиреЗ рдпрд╣ рдЖрдХрд╛рд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕рд▓рд┐рдП рд▓рд┐рдпрд╛ рддрд╛рдХрд┐ рдЧрддрд┐ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рд╣реЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдХрд╛ рдПрд╕рдПрд╕рдбреА рд╕рд╕реНрддрд╛ рд╣реЛрддрд╛) 75 рдХреЛрд░ рдкрд░ рдЧрддрд┐ рд▓рдЧрднрдЧ ~ 4 рдПрдордмреА/рд╕реЗрдХрдВрдб рдереАред

  • рдореБрдЭреЗ рдЖрд░рдХреНрд╖рдг рджреЗрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ Google рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдХрдВрдкрдиреА рдореЗрдВ рдореЗрд░реЗ рдХрд╛рдо рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ

рдореИрдВ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╕рднреА рдЪрд┐рддреНрд░ рддреИрдпрд╛рд░ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣реА рд╕рдм рдХреБрдЫ рдерд╛ред

рдбреЗрдЯрд╛ рд╕реНрдХреИрдирд┐рдВрдЧ рдкреНрд░рдЧрддрд┐ рджрд┐рдЦрд╛рдПрдВ

рдЪреВрдБрдХрд┐ ClickHouse рдореЗрдВ рд╣рдо рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреЗрдмрд▓ рдкрд░ рдкреВрд░реНрдг рд╕реНрдХреИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдХреБрдЫ рдорд┐рд▓рд╛рди рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рд▓реА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рдХреНрд╡реЗрд░реА рдХреА рдкреНрд░рдЧрддрд┐ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, HTTP рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ HTTP рд╣реЗрдбрд░ рдореЗрдВ рдкреНрд░рдЧрддрд┐ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: send_progress_in_http_headers=1. рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдорд╛рдирдХ рдЧреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЗрдбрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реА рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди HTTP 1.0 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (1.1 рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рди рд╣реЛрдВ!) ClickHouse рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк ClickHouse рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдЪреНрдЪрд╛ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ GET /?query=... HTTP/1.0nn рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдПрд╕реНрдХреЗрдкрд┐рдВрдЧ рдпрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрдбрд░ рдФрд░ рдмреЙрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

ClickHouse рд╕реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд▓реЙрдЧ

ClickHouse рдиреЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд▓рдВрдмреЗ рд╕рдордп (2019 рд╕реЗ?) рдХреЗ рд▓рд┐рдП ORDER BY рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдкреНрд░рд╢реНрди

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.

рдЧреЛ рдореЗрдВ SIGPIPE рдХрд╛ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди

рдЬрдм рдЖрдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд╣реЗрдВ, рдЖрджреЗрд╢ some_cmd | head -n 10, рдмрд┐рд▓реНрдХреБрд▓ рдХреИрд╕реЗ рдЖрджреЗрд╢ some_cmd рдЬрдм рдирд┐рд╖реНрдкрд╛рджрди рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ head 10 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдШрдЯрд╛рдИрдВ? рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рдХрдм head рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдкрд╛рдЗрдк рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ some_cmd рдХрдорд╛рдВрдб рдХрд╛ рд╕реНрдЯрдбрдЖрдЙрдЯ, рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ, "рдХрд╣реАрдВ рдирд╣реАрдВ" рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рдХрдм some_cmd рдПрдХ рдмрдВрдж рдкрд╛рдЗрдк рдкрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ SIGPIPE рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪреБрдкрдЪрд╛рдк рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИ.

рдЧреЛ рдореЗрдВ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рднреА рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди SIGPIPE рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд░ рдЕрдВрдд рдореЗрдВ "рд╕рд┐рдЧреНрдирд▓: SIGPIPE" рдпрд╛ рдПрдХ рд╕рдорд╛рди рд╕рдВрджреЗрд╢ рднреА рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдмрд╕ SIGPIPE рдХреЛ рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛рдиреА рдмрд╕ рдЪреБрдкрдЪрд╛рдк рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛:

ch := make(chan os.Signal)
signal.Notify(ch, syscall.SIGPIPE)
go func() {
    <-ch
    os.Exit(0)
}()

рд╕рдВрджреЗрд╢ рд╕рдВрджрд░реНрдн рджрд┐рдЦрд╛рдПрдБ

рдЕрдХреНрд╕рд░ рдЖрдк рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рддреНрд░реБрдЯрд┐ рд╣реБрдИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рдХрд╛рд░рдг рдШрдмрд░рд╛рд╣рдЯ рд╣реБрдИ, рдпрд╛ рдХреНрд░реИрд╢ рд╕реЗ рдкрд╣рд▓реЗ рдХреМрди рд╕реА рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рдереАрдВ), рдФрд░ grep рдпрд╣ -рдП, -рдмреА, рдФрд░ -рд╕реА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреНрд░рдорд╢рдГ рд╕рдВрджреЗрд╢ рдХреЗ рдмрд╛рдж, рдкрд╣рд▓реЗ рдФрд░ рдЙрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ 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 рдЦрдкрдд рдХрд░рддрд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░ рдЕрдиреБрд░реЛрдз рдореЗрд░реА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рд▓рдЧрднрдЧ ~ 6 рдПрдордПрд╕ рд▓реЗрддрд╛ рд╣реИ)ред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдирдП рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдПрдВ

рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ (рд▓рдЧрднрдЧ) рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рд╣рд░ рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдкрд┐рдЫрд▓реЗ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛ рдерд╛ред

рдХрдорд╛рди рдХреЗ рдЙрджрд╛рд╣рд░рдг

рд╕рд╛рдорд╛рдиреНрдп рд▓реЙрдЧреНрд╕рдХреНрд▓реА рдХрдорд╛рдВрдб рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВ?

рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдореЗрдЬрд╝реЕрди рдбреЗрдЯрд╛рд╕реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

# ╨Я╨╛╨║╨░╨╖╨░╤В╤М ╤Б╤В╤А╨╛╨║╨╕, ╨│╨┤╨╡ ╨▓╤Б╤В╤А╨╡╤З╨░╨╡╤В╤Б╤П ╤Б╨╗╨╛╨▓╨╛ 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

рд╕рдВрджрд░реНрднреЛрдВ

рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛрдб (рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛) рдЬреАрдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ https://github.com/YuriyNasretdinov/logscli. ClickHouse рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдкрд░ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реБрдирдХрд░ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреАред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ