{"id":349965,"date":"2023-07-08T09:00:45","date_gmt":"2023-07-08T09:00:45","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=349965"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=349965","title":{"rendered":"<span>Data Consistency: \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0441\u0451 \u043e\u043a<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u042f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c \u0432 \u042f\u043d\u0434\u0435\u043a\u0441.\u041c\u0435\u0442\u0440\u0438\u043a\u0435 &#8212; \u0441\u0438\u0441\u0442\u0435\u043c\u0435 web \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438. \u0422\u0430\u043a\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0441\u0430\u0439\u0442\u0430\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445.<\/p>\n<p>\u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445 \u043a\u0430\u043a \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0434\u0430\u043d\u043d\u044b\u0435 &#8212; \u044d\u0442\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043c\u043e\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u043a\u0430\u043a \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0431\u044b\u043b\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0441\u0451 \u043e\u043a.<\/p>\n<p><strong>\u0415\u0441\u0442\u044c 2 \u0430\u0441\u043f\u0435\u043a\u0442\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0441\u0442\u043e\u0438\u0442 \u0441\u043b\u0435\u0434\u0438\u0442\u044c:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0412 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0442 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043e\u0432 \u0438 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432<\/strong> -> \u0447\u0438\u0441\u043b\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u0441\u0435\u0441\u0441\u0438\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b<\/strong> -> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0435\u043b\u0438\u0437 \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u043b \u0432\u0441\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432 \u0442\u0440\u0435\u043a\u0430\u0442\u044c \u043f\u043e\u043a\u0443\u043f\u043a\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445 \u0441\u043e\u0432\u0441\u0435\u043c \u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u0432 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c Safari \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u0441\u0435\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0431\u043e\u043d\u0443\u0441\u043e\u043c \u043f\u043e\u043a\u0430\u0436\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f array functions \u0432 ClickHouse. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/eae\/c48\/4db\/eaec484db0e64b9636fb38e47c38a395.jpeg\" alt=\"Photo by\u00a0Luke Chesser\u00a0on\u00a0Unsplash\" title=\"Photo by\u00a0Luke Chesser\u00a0on\u00a0Unsplash\" width=\"1400\" height=\"933\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eae\/c48\/4db\/eaec484db0e64b9636fb38e47c38a395.jpeg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>Photo by\u00a0<a href=\"https:\/\/unsplash.com\/@lukechesser?utm_source=medium&amp;utm_medium=referral\" rel=\"noopener noreferrer nofollow\"><u>Luke Chesser<\/u><\/a>\u00a0on\u00a0<a href=\"https:\/\/unsplash.com\/?utm_source=medium&amp;utm_medium=referral\" rel=\"noopener noreferrer nofollow\"><u>Unsplash<\/u><\/a><\/figcaption><\/div>\n<\/figure>\n<h2>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 web \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430?<\/h2>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u044b web \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u043b\u043e\u0433\u0438\u0440\u0443\u044e\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b, \u043a\u0430\u043a\u0438\u0435 URLs \u043e\u043d \u043f\u043e\u0441\u0435\u0442\u0438\u043b, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u043d \u043f\u0440\u043e\u0432\u0435\u043b \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0438 \u0434\u0430\u0436\u0435 \u043a\u0430\u043a\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0443 \u0438 \u0437\u0430\u0442\u0435\u043c \u043a\u0443\u043f\u0438\u043b. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0442\u0435\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 (<em>\u0443\u0437\u043d\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u0441\u0435\u0442\u0438\u043b\u043e \u0441\u0430\u0439\u0442<\/em>) \u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 (<em>\u043f\u043e\u043d\u044f\u0442\u044c, \u0432 \u0447\u0435\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e customer journey<\/em>). \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b web \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u043d\u0430 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Web_analytics\" rel=\"noopener noreferrer nofollow\"><u>Wikipedia<\/u><\/a>.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 web \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 ClickHouse. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0432\u0441\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432 <a href=\"https:\/\/clickhouse.com\/docs\/en\/getting-started\/example-datasets\/metrica\" rel=\"noopener noreferrer nofollow\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a>.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435.<code>VisitID<\/code>\u00a0&#8212; \u044d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0435\u0441\u0441\u0438\u0438, \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u0445 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438. \u0412 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u0445\u00a0<code>UserAgent<\/code>\u00a0\u0438\u00a0<code>OS<\/code>\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0446\u0438\u0444\u0440\u044b, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044d\u0442\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 &#8212; \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0425\u0440\u0430\u043d\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u0440\u043e\u043a \u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 application \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435. \u0422\u0430\u043a\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0430\u0436\u043d\u044b \u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u0430\u043c \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u044b \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e CPU, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 big data. <\/p>\n<pre><code class=\"sql\">SELECT     VisitID,     StartDate,     UTCStartTime,     Duration,     PageViews,     StartURLDomain,     IsMobile,     UserAgent,     OS FROM datasets.visits_v1 FINAL LIMIT 10  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500VisitID\u2500\u252c\u2500\u2500StartDate\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500UTCStartTime\u2500\u252c\u2500Duration\u2500\u252c\u2500PageViews\u2500\u252c\u2500StartURLDomain\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500IsMobile\u2500\u252c\u2500UserAgent\u2500\u252c\u2500\u2500OS\u2500\u2510 \u2502 6949594573706600954 \u2502 2014-03-17 \u2502 2014-03-17 11:38:42 \u2502        0 \u2502         1 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         7 \u2502   2 \u2502 \u2502 7763399689682887827 \u2502 2014-03-17 \u2502 2014-03-17 18:22:20 \u2502       24 \u2502         3 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         2 \u2502   2 \u2502 \u2502 9153706821504089082 \u2502 2014-03-17 \u2502 2014-03-17 09:41:09 \u2502      415 \u2502         9 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         7 \u2502  35 \u2502 \u2502 5747643029332244007 \u2502 2014-03-17 \u2502 2014-03-17 04:46:08 \u2502       19 \u2502         1 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         2 \u2502 238 \u2502 \u2502 5868920473837897470 \u2502 2014-03-17 \u2502 2014-03-17 10:10:31 \u2502       11 \u2502         1 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         3 \u2502  35 \u2502 \u2502 6587050697748196290 \u2502 2014-03-17 \u2502 2014-03-17 09:06:47 \u2502       18 \u2502         2 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502       120 \u2502  35 \u2502 \u2502 8872348705743297525 \u2502 2014-03-17 \u2502 2014-03-17 06:40:43 \u2502      190 \u2502         6 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         5 \u2502 238 \u2502 \u2502 8890846394730359529 \u2502 2014-03-17 \u2502 2014-03-17 02:27:19 \u2502        0 \u2502         1 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502        57 \u2502  35 \u2502 \u2502 7429587367586011403 \u2502 2014-03-17 \u2502 2014-03-17 01:13:14 \u2502        0 \u2502         1 \u2502 gruzomoy.sumtel.com.ua \u2502        1 \u2502         1 \u2502  12 \u2502 \u2502 5195928066127503662 \u2502 2014-03-17 \u2502 2014-03-17 01:43:02 \u2502     1926 \u2502         3 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         2 \u2502  35 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\u044e<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430<code>final<\/code>\u00a0modifier \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0432\u044b\u0448\u0435 \u0438 \u044d\u0442\u043e \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e. \u042f \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u044d\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0439, \u0447\u0442\u043e \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u043c\u0435\u0440\u0436\u0435\u043d\u044b \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044f \u043f\u043e\u043b\u0443\u0447\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438.<\/p>\n<p>\u0412 ClickHouse \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0438\u0436\u043e\u043a<code>CollapsingMergeTree<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c inserts \u0432\u043c\u0435\u0441\u0442\u043e updates (<em>\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 CH \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0431\u044b\u043b\u043e<\/em>). \u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439  \u043f\u0440\u043e \u044d\u0442\u043e \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0432 <a href=\"https:\/\/clickhouse.com\/docs\/en\/engines\/table-engines\/mergetree-family\/collapsingmergetree\/#table_engine-collapsingmergetree-collapsing\" rel=\"noopener noreferrer nofollow\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a>. <\/p>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a, \u043d\u043e \u043f\u043e\u0442\u043e\u043c eventually \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0441\u0435 \u043f\u043e\u043c\u0435\u0440\u0436\u0438\u0442 \u0432 background \u0438 \u0443\u0434\u0430\u043b\u0438\u0442\/\u043a\u043e\u043b\u043b\u0430\u043f\u0441\u0438\u0440\u0443\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>final<\/code>\u00a0modifier, \u043c\u044b &#171;\u043d\u0430\u0441\u0438\u043b\u044c\u043d\u043e&#187; \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043c\u0435\u0440\u0436\u0438 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4e5\/009\/ab7\/4e5009ab79ceeb9c0dca2ceb10a93493.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 update \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 incremental log\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 update \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 incremental log\" width=\"1572\" height=\"514\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e5\/009\/ab7\/4e5009ab79ceeb9c0dca2ceb10a93493.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 update \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 incremental log<\/figcaption><\/div>\n<\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0443, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 2 \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"sql\">SELECT     uniqExact(VisitID) AS unique_sessions,     sum(Sign) AS number_sessions,      -- number of sessions after collapsing     count() AS rows FROM datasets.visits_v1  \u250c\u2500unique_sessions\u2500\u252c\u2500number_sessions\u2500\u252c\u2500\u2500\u2500\u2500rows\u2500\u2510 \u2502         1676685 \u2502         1676581 \u2502 1680609 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  SELECT     uniqExact(VisitID) AS unique_sessions,     sum(Sign) AS number_sessions,     count() AS rows FROM datasets.visits_v1 FINAL  \u250c\u2500unique_sessions\u2500\u252c\u2500number_sessions\u2500\u252c\u2500\u2500\u2500\u2500rows\u2500\u2510 \u2502         1676685 \u2502         1676721 \u2502 1676721 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><\/pre>\n<p><strong><em>Disclaimer<\/em><\/strong>: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u00a0<code>final<\/code>\u00a0modifier \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430 performance \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (<a href=\"https:\/\/clickhouse.com\/docs\/en\/sql-reference\/statements\/select\/from\/#final-modifier\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438<\/a>). \u041a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u0446\u0435\u043d\u0443.<\/p>\n<h2>\u041a\u0430\u043a \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445?<\/h2>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043e\u0432 \u0438\u043b\u0438 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u0430. \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 time-series anomaly detection \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u043d\u0430\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0438\u0441\u043b\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u043d\u0430 20%) \u0434\u043e Machine Learning \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0430\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043a\u0430\u043a\u00a0<a href=\"https:\/\/facebook.github.io\/prophet\/\" rel=\"noopener noreferrer nofollow\"><u>Prophet<\/u><\/a>\u00a0\u0438\u043b\u0438\u00a0<a href=\"https:\/\/pycaret.gitbook.io\/docs\/learn-pycaret\/official-blog\/time-series-anomaly-detection-with-pycaret\" rel=\"noopener noreferrer nofollow\"><u>PyCaret<\/u><\/a>.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 data consistency \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f. \u041a\u0430\u043a \u043c\u044b \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435, \u0441\u0438\u0441\u0442\u0435\u043c\u044b web \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442 \u0441\u043e\u0442\u043d\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e (\u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435). <\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c\u0438 (<em>\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u0438 \u0438\u043b\u0438 \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446<\/em>) \u0438\u043b\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 (<em>\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430<\/em>). \u0421 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e: \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Kolmogorov%E2%80%93Smirnov_test\" rel=\"noopener noreferrer nofollow\"><u>the Kolmogorov-Smirnov test<\/u><\/a>.<\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0433\u0443\u0433\u043b\u0435\u043d\u0438\u044f best practices, \u0443 \u043c\u0435\u043d\u044f \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441: &#171;\u0430 \u043a\u0430\u043a \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432?&#187;. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043d\u0435\u043c\u0443.<\/p>\n<h3>\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b. \u0412\u0441\u0435\u0433\u043e \u0432 \u043d\u0430\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 62 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0438 12 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432, \u0434\u043e\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 1%.<\/p>\n<pre><code class=\"sql\">SELECT uniqExact(UserAgent) AS unique_browsers FROM datasets.visits_v1  \u250c\u2500unique_browsers\u2500\u2510 \u2502              62 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  SELECT     UserAgent,     count() AS sessions,     round((100. * sessions) \/ (         SELECT count()         FROM datasets.visits_v1         FINAL     ), 2) AS sessions_share FROM datasets.visits_v1 FINAL GROUP BY 1 HAVING sessions_share >= 1 ORDER BY sessions_share DESC  \u250c\u2500UserAgent\u2500\u252c\u2500sessions\u2500\u252c\u2500sessions_share\u2500\u2510 \u2502         7 \u2502   493225 \u2502          29.42 \u2502 \u2502         2 \u2502   236929 \u2502          14.13 \u2502 \u2502         3 \u2502   235439 \u2502          14.04 \u2502 \u2502         4 \u2502   196628 \u2502          11.73 \u2502 \u2502       120 \u2502   154012 \u2502           9.19 \u2502 \u2502        50 \u2502    86381 \u2502           5.15 \u2502 \u2502        79 \u2502    63082 \u2502           3.76 \u2502 \u2502       121 \u2502    50245 \u2502              3 \u2502 \u2502         1 \u2502    48688 \u2502            2.9 \u2502 \u2502        42 \u2502    21040 \u2502           1.25 \u2502 \u2502         5 \u2502    20399 \u2502           1.22 \u2502 \u2502        71 \u2502    19893 \u2502           1.19 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><\/pre>\n<p>\u041c\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u0435\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0434\u043e\u043b\u044e \u0441\u0435\u0441\u0441\u0438\u0439 \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u0422\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0432\u0441\u0435 \u0431\u0443\u0434\u0443\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439. \u041d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441: \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 12 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0442\u0440\u0438\u043a (\u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432) \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f <code>UserAgent<\/code><em>. <\/em><\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0442\u044c \u0440\u0430\u0437 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b alerts, \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d \u0442\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0448\u044c &#8212; \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u0435\u0441\u0442\u044c \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f (false positives) \u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u044f\u0434\u043e\u0432, \u0442\u043e \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430.<\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e, \u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0443\u043c\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u0432\u0435\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u043a \u043e\u0434\u043d\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 (\u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <code>T2<\/code>) \u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e (\u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <code>T1<\/code>). <\/p>\n<p>\u0412\u044b\u0431\u043e\u0440 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0433\u0440\u0430\u043d\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438:<\/p>\n<ul>\n<li>\n<p><em>\u0434\u043b\u044f \u043c\u0438\u043d\u0443\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/em> \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0442\u043e\u0447\u043a\u0443,<\/p>\n<\/li>\n<li>\n<p><em>\u0434\u043b\u044f \u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/em> \u2014 \u0441\u0442\u043e\u0438\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043d\u0435\u0434\u0435\u043b\u044e \u043d\u0430\u0437\u0430\u0434, \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0435\u0441\u0442\u044c \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0437\u043e\u043d\u043d\u043e\u0441\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043b\u044e\u0434\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 desktop \u0438 \u0434\u043e\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0448\u0435 \u0447\u0435\u043c \u043f\u043e \u0431\u0443\u0434\u043d\u044f\u043c &#8212; \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u043c \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f\u043c),<\/p>\n<\/li>\n<li>\n<p><em>\u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043d\u0435\u0434\u0435\u043b\u044f\u043c \u0438 \u043c\u0435\u0441\u044f\u0446\u0430\u043c<\/em> \u2014 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u0432\u0430\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0433\u043e\u0434\u043e\u0432\u0430\u044f \u0441\u0435\u0437\u043e\u043d\u043d\u043e\u0441\u0442\u044c, \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0431\u0440\u0430\u0442\u044c \u043b\u0438\u0431\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043b\u0438\u0431\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435  \u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u0434\u0435\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0430 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f \u043d\u0430 L1 \u043d\u043e\u0440\u043c\u0443 \u0432 machine learning (<a href=\"https:\/\/medium.com\/swlh\/different-types-of-distances-used-in-machine-learning-ec7087616442\" rel=\"noopener noreferrer nofollow\"><u>\u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0442\u0430\u043b\u0435\u0439<\/u><\/a>).<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/de0\/46e\/cbc\/de046ecbc221573b37c390763f8b98fa.png\" width=\"265\" height=\"55\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/de0\/46e\/cbc\/de046ecbc221573b37c390763f8b98fa.png\"\/><\/figure>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0435\u0435 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2d6\/741\/57e\/2d674157e8f807f73123afd07daacb16.png\" width=\"1312\" height=\"260\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2d6\/741\/57e\/2d674157e8f807f73123afd07daacb16.png\"\/><\/figure>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 L1 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e 10%. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0437\u0430 \u044d\u0442\u0438\u043c \u0441\u0442\u043e\u0438\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b: \u043e\u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043e\u043b\u044e \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u0440\u043e\u0448\u043b\u044b\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u043c.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/73b\/f1e\/b9d\/73bf1eb9d9b53ee6ca5b53d03153f9ad.png\" width=\"491\" height=\"44\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/73b\/f1e\/b9d\/73bf1eb9d9b53ee6ca5b53d03153f9ad.png\"\/><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u044f \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0430 \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u043e\u0439 c \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0432 data science. \u0418 \u043e\u043d \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b \u043c\u043d\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 Kullback-Leibler \u0438 Jensen-Shannon divergences, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u044b\u043c\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438.<em> <\/em><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043e\u0431 \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u0445, \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u0439\u0442\u0435\u0441\u044c &#8212; \u044f \u0442\u043e\u0436\u0435 \u0431\u044b\u043b\u0430 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u043c\u0435\u0441\u0442\u0435. \u0422\u0430\u043a \u0447\u0442\u043e, \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0433\u0443\u0433\u043b\u0438\u043b\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u044b (<a href=\"https:\/\/medium.com\/geekculture\/techniques-to-measure-probability-distribution-similarity-9145678d68a6\" rel=\"noopener noreferrer nofollow\"><u>\u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f<\/u><\/a> \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0442\u0435\u043e\u0440\u0438\u044e) \u0438 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b\u0430 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430. <\/p>\n<pre><code class=\"python\">import numpy as np   prev = np.array([0.7, 0.2, 0.1]) curr = np.array([0.6, 0.27, 0.13])  def get_kl_divergence(prev, curr):     kl = prev * np.log(prev \/ curr)     return np.sum(kl)  def get_js_divergence(prev, curr):      mean = (prev + curr)\/2     return 0.5*(get_kl_divergence(prev, mean) + get_kl_divergence(curr, mean))  kl = get_kl_divergence(prev, curr) js = get_js_divergence(prev, curr) print('KL divergence = %.4f, JS divergence = %.4f' % (kl, js))  # KL divergence = 0.0216, JS divergence = 0.0055<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c, \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f. \u0422\u043e \u0435\u0441\u0442\u044c, \u043c\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u043a (<em>\u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c<\/em>) \u0442\u0440\u0435\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432. <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043d\u0430\u043c \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h2>And the winner is\u2026<\/h2>\n<p>\u041b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b &#8212; \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u0431\u043b\u0438\u0437\u043a\u0438\u0445 \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0438\u0445 \u043c\u0430\u0433\u043d\u0438\u0442\u0443\u0434\u044b.  <\/p>\n<p>\u0411\u0443\u0434\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<ul>\n<li>\n<p><strong>\u041f\u043e\u0442\u0435\u0440\u044f \u0434\u0430\u043d\u043d\u044b\u0445:<\/strong>\u00a0\u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u0438 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u0434\u043e\u043b\u0435\u0439 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435:<\/strong> \u044d\u0442\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0430\u0444\u0444\u0438\u043a \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0432\u0434\u0440\u0443\u0433 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0434\u0440\u0443\u0433\u043e\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 10% \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438\u0437 Safari \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043a\u0430\u043a undefined.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u043e\u0437\u044c\u043c\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0434\u043e\u043b\u044f\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u0438 \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b, \u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b\u0430 \u0432\u0441\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0441 \u0434\u043e\u043b\u0435\u0439 \u043c\u0435\u043d\u044c\u0448\u0435 5% \u0432 \u043e\u0434\u043d\u0443 \u0433\u0440\u0443\u043f\u043f\u0443\u00a0<code>browser = 0<\/code>.<\/p>\n<pre><code class=\"sql\">WITH browsers AS     (         SELECT             UserAgent,             count() AS raw_sessions,             (100. * count()) \/ (                 SELECT count()                 FROM datasets.visits_v1                 FINAL             ) AS raw_sessions_share         FROM datasets.visits_v1         FINAL         GROUP BY 1     ) SELECT     if(raw_sessions_share >= 5, UserAgent, 0) AS browser,     sum(raw_sessions) AS sessions,     round(sum(raw_sessions_share), 2) AS sessions_share FROM browsers GROUP BY browser ORDER BY sessions DESC  \u250c\u2500browser\u2500\u252c\u2500sessions\u2500\u252c\u2500sessions_share\u2500\u2510 \u2502       7 \u2502   493225 \u2502          29.42 \u2502 \u2502       0 \u2502   274107 \u2502          16.35 \u2502 \u2502       2 \u2502   236929 \u2502          14.13 \u2502 \u2502       3 \u2502   235439 \u2502          14.04 \u2502 \u2502       4 \u2502   196628 \u2502          11.73 \u2502 \u2502     120 \u2502   154012 \u2502           9.19 \u2502 \u2502      50 \u2502    86381 \u2502           5.15 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><\/pre>\n<p>\u041f\u0440\u0438\u0448\u043b\u0430 \u0432\u0440\u0435\u043c\u044f \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 2 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043d\u0430\u00a0<a href=\"https:\/\/github.com\/miptgirl\/miptgirl_medium\/blob\/main\/clickhouse\/web_analytics_monitoring\/monitoring_simulation.ipynb\" rel=\"noopener noreferrer nofollow\"><u>GitHub<\/u><\/a>. \u0421\u0430\u043c\u044b\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u0434\u043b\u044f \u043d\u0430\u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212; \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 (\u0434\u043e\u043b\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u043c\u0435\u0442\u043a\u0438 \u0438\u043b\u0438 \u0431\u044b\u043b\u0438 \u0443\u0442\u0435\u0440\u044f\u043d\u044b). \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0431\u044b\u043b\u0430 \u0431\u043b\u0438\u0437\u043a\u0430 \u043a \u044d\u0442\u043e\u043c\u0443 \u044d\u0444\u0444\u0435\u043a\u0442\u0443.<\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0439 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 2 \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c\u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041a\u0430\u0436\u0434\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 &#8212; \u044d\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c5b\/30f\/5c5\/c5b30f5c5cc635009ac8e3e67d3c044c.png\" width=\"1166\" height=\"872\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c5b\/30f\/5c5\/c5b30f5c5cc635009ac8e3e67d3c044c.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/06e\/da2\/81c\/06eda281c7888ab17ce3ea7e0221f4a5.png\" width=\"1198\" height=\"872\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/06e\/da2\/81c\/06eda281c7888ab17ce3ea7e0221f4a5.png\"\/><\/figure>\n<p>\u041f\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e L1 \u043d\u043e\u0440\u043c\u0430 &#8212; \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u044b\u0431\u043e\u0440 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0431\u043b\u0438\u0437\u043a\u0430 \u043a \u043b\u0438\u043d\u0438\u0438<code>distance = share of affected events<\/code>. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f Kullback-Leibler \u0438 Jensen-Shannon divergences \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 use case, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0440\u0430\u0444\u0438\u043a \u043a\u0430\u043a\u043e\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a13\/ac8\/39d\/a13ac839dd25c50d133d6f1c18bdd03a.png\" width=\"1182\" height=\"870\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a13\/ac8\/39d\/a13ac839dd25c50d133d6f1c18bdd03a.png\"\/><\/figure>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e divergences \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0443\u0442 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c threshold. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0440\u0438\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0435\u0439. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u043b\u043e\u0436\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a L1 \u043d\u043e\u0440\u043c\u0430 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0438\u043b\u0443 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438.<\/p>\n<h2>\u0420\u0430\u0441\u0447\u0435\u0442 L1 \u043d\u043e\u0440\u043c\u044b<\/h2>\n<p>\u041c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u043c \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 (L1 \u043d\u043e\u0440\u043c\u0430) \u0438  \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u0440\u0430\u0441\u0447\u0451\u0442 \u0432 ClickHouse (\u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445).<\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c L1 \u043d\u043e\u0440\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 window functions.<\/p>\n<pre><code class=\"sql\">with browsers as (     select         UserAgent as param,         multiIf(             toStartOfHour(UTCStartTime) = '2014-03-18 12:00:00', 'previous',             toStartOfHour(UTCStartTime) = '2014-03-18 13:00:00', 'current',             'other'         ) as event_time,         sum(Sign) as events     from datasets.visits_v1     where (StartDate = '2014-03-18')     -- filter by partition key is a good practice         and (event_time != 'other')     group by param, event_time) select     sum(abs_diff)\/2 as l1_norm from     (select         param,         sumIf(share, event_time = 'current') as curr_share,         sumIf(share, event_time = 'previous') as prev_share,         abs(curr_share - prev_share) as abs_diff     from         (select             param,             event_time,             events,             sum(events) over (partition by event_time) as total_events,             events\/total_events as share         from browsers)     group by param)  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500l1_norm\u2500\u2510 \u2502 0.01515028932687386 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u0432 ClickHouse \u0435\u0441\u0442\u044c <a href=\"https:\/\/clickhouse.com\/docs\/en\/sql-reference\/functions\/array-functions\" rel=\"noopener noreferrer nofollow\"><u>array functions<\/u><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043d\u0430\u043c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0443 &#171;in a ClickHouse way&#187;. <\/p>\n<p><em>\u0412 CH \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 window functions \u0438 \u043c\u044b \u043e\u0431\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438.<\/em> <\/p>\n<pre><code class=\"sql\">with browsers as (     select         UserAgent as param,         multiIf(             toStartOfHour(UTCStartTime) = '2014-03-18 12:00:00', 'previous',             toStartOfHour(UTCStartTime) = '2014-03-18 13:00:00', 'current',             'other'         ) as event_time,         sum(Sign) as events     from datasets.visits_v1     where StartDate = '2014-03-18' -- filter by partition key is a good practice         and event_time != 'other'     group by param, event_time     order by event_time, param) select l1_norm  from     (select         -- aggregating all param values into arrays         groupArrayIf(param, event_time = 'current') as curr_params,         groupArrayIf(param, event_time = 'previous') as prev_params,                  -- calculating params that are present in both time periods or only in one of them         arrayIntersect(curr_params, prev_params) as both_params,         arrayFilter(x -> not has(prev_params, x), curr_params) as only_curr_params,         arrayFilter(x -> not has(curr_params, x), prev_params) as only_prev_params,                  -- aggregating all events into arrays         groupArrayIf(events, event_time = 'current') as curr_events,         groupArrayIf(events, event_time = 'previous') as prev_events,                  -- calculating events shares         arrayMap(x -> x \/ arraySum(curr_events), curr_events) as curr_events_shares,         arrayMap(x -> x \/ arraySum(prev_events), prev_events) as prev_events_shares,                  -- filtering shares for browsers that are present in both periods         arrayFilter(x, y -> has(both_params, y), curr_events_shares, curr_params) as both_curr_events_shares,         arrayFilter(x, y -> has(both_params, y), prev_events_shares, prev_params) as both_prev_events_shares,                  -- filtering shares for browsers that are present only in one of periods         arrayFilter(x, y -> has(only_curr_params, y), curr_events_shares, curr_params) as only_curr_events_shares,         arrayFilter(x, y -> has(only_prev_params, y), prev_events_shares, prev_params) as only_prev_events_shares,                  -- calculating the abs differences and l1 norm         arraySum(arrayMap(x, y -> abs(x - y), both_curr_events_shares, both_prev_events_shares)) as both_abs_diff,         1\/2*(both_abs_diff + arraySum(only_curr_events_shares) + arraySum(only_prev_events_shares)) as l1_norm     from browsers)  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500l1_norm\u2500\u2510 \u2502 0.01515028932687386 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><\/pre>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u0435\u043d \u0438 \u043f\u043e\u043d\u044f\u0442\u0435\u043d \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u0441 pythonic mindset. \u0412 \u0446\u0435\u043b\u043e\u043c, \u044f \u0443\u0432\u0435\u0440\u0435\u043d\u0430, \u0447\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u043e\u043b\u0438 \u0443\u043f\u043e\u0440\u0441\u0442\u0432\u0430 \u0438 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 array functions \u043b\u043e\u0433\u0438\u043a\u0443 \u043b\u044e\u0431\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h2>Alerting &amp; Monitoring<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0444\u043b\u0443\u043a\u0442\u0443\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u0432 \u043d\u0430\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043c\u044b \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u0443 \u0446\u0435\u043b\u0438 &#8212; \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e.<\/p>\n<p>\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c alerting \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u043e thresholds \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f. \u042f \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u044e \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u0440\u043e\u0448\u043b\u044b\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438 \u0438 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u044e threshold \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043c\u044b \u0431\u044b \u0443\u0437\u043d\u0430\u043b\u0438 \u043e \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u044f\u0445, \u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b &#8212; \u043d\u0430\u043c \u0431\u044b \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u0438 alert&#8217;\u044b \u043a\u0430\u0436\u0434\u044b\u0435 5 \u043c\u0438\u043d\u0443\u0442. \u041e\u0431\u044b\u0447\u043d\u043e tuning thresholds &#8212; \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u0434\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u043b\u0438\u043c\u0438\u0442\u044b \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041f\u0440\u0438 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u043e\u0432 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0430\u0441\u044c \u0441 \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442\u044c \u0432 \u0434\u0432\u0443\u0445 \u0441\u043b\u043e\u0432\u0430\u0445:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>UserID<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>StartDate<\/code>, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0439\u0442\u0435 \u0441 \u0443\u043c\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>StartURL<\/code> \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u043c\u0435\u0435\u0442 600\u041a \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0420\u0430\u0441\u0447\u0435\u0442 L1 \u043d\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043c\u043e\u0436\u0435\u0442 \u0441\u044a\u0435\u0434\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0422\u0430\u043a \u0447\u0442\u043e, \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043a\u0440\u0443\u0433\u043b\u0438\u0442\u044c URL \u0434\u043e domain \u0438\u043b\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u043f-N \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 <code>other<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438 \u0434\u043b\u044f \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0440\u0430\u0437\u0431\u0438\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0431\u0430\u043a\u0435\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u0432\u0430\u044e\u0442 \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u0445 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c alert&#8217;\u044b \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c update. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \ud83d\ude42<\/p>\n<\/li>\n<\/ul>\n<blockquote>\n<p>\u042f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u0434\u043b\u044f \u0432\u0430\u0441 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 \u043a\u0430\u043a \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 array functions \u0432 ClickHouse.<em> <\/em>Stay tuned!<\/p>\n<\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/743794\/\"> https:\/\/habr.com\/ru\/articles\/743794\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u042f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c \u0432 \u042f\u043d\u0434\u0435\u043a\u0441.\u041c\u0435\u0442\u0440\u0438\u043a\u0435 &#8212; \u0441\u0438\u0441\u0442\u0435\u043c\u0435 web \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438. \u0422\u0430\u043a\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0441\u0430\u0439\u0442\u0430\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445.<\/p>\n<p>\u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445 \u043a\u0430\u043a \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0434\u0430\u043d\u043d\u044b\u0435 &#8212; \u044d\u0442\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043c\u043e\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u043a\u0430\u043a \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0431\u044b\u043b\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0441\u0451 \u043e\u043a.<\/p>\n<p><strong>\u0415\u0441\u0442\u044c 2 \u0430\u0441\u043f\u0435\u043a\u0442\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0441\u0442\u043e\u0438\u0442 \u0441\u043b\u0435\u0434\u0438\u0442\u044c:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0412 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0442 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043e\u0432 \u0438 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432<\/strong> -> \u0447\u0438\u0441\u043b\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u0441\u0435\u0441\u0441\u0438\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b<\/strong> -> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0435\u043b\u0438\u0437 \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u043b \u0432\u0441\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432 \u0442\u0440\u0435\u043a\u0430\u0442\u044c \u043f\u043e\u043a\u0443\u043f\u043a\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445 \u0441\u043e\u0432\u0441\u0435\u043c \u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u0432 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c Safari \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u0441\u0435\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0431\u043e\u043d\u0443\u0441\u043e\u043c \u043f\u043e\u043a\u0430\u0436\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f array functions \u0432 ClickHouse. <\/p>\n<figure class=\"full-width\">\n<div><figcaption>Photo by\u00a0<a href=\"https:\/\/unsplash.com\/@lukechesser?utm_source=medium&amp;utm_medium=referral\" rel=\"noopener noreferrer nofollow\"><u>Luke Chesser<\/u><\/a>\u00a0on\u00a0<a href=\"https:\/\/unsplash.com\/?utm_source=medium&amp;utm_medium=referral\" rel=\"noopener noreferrer nofollow\"><u>Unsplash<\/u><\/a><\/figcaption><\/div>\n<\/figure>\n<h2>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 web \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430?<\/h2>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u044b web \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u043b\u043e\u0433\u0438\u0440\u0443\u044e\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b, \u043a\u0430\u043a\u0438\u0435 URLs \u043e\u043d \u043f\u043e\u0441\u0435\u0442\u0438\u043b, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u043d \u043f\u0440\u043e\u0432\u0435\u043b \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0438 \u0434\u0430\u0436\u0435 \u043a\u0430\u043a\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u043a\u043e\u0440\u0437\u0438\u043d\u0443 \u0438 \u0437\u0430\u0442\u0435\u043c \u043a\u0443\u043f\u0438\u043b. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0442\u0435\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438 (<em>\u0443\u0437\u043d\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u0441\u0435\u0442\u0438\u043b\u043e \u0441\u0430\u0439\u0442<\/em>) \u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 (<em>\u043f\u043e\u043d\u044f\u0442\u044c, \u0432 \u0447\u0435\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e customer journey<\/em>). \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b web \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u043d\u0430 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Web_analytics\" rel=\"noopener noreferrer nofollow\"><u>Wikipedia<\/u><\/a>.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 web \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 ClickHouse. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0432\u0441\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432 <a href=\"https:\/\/clickhouse.com\/docs\/en\/getting-started\/example-datasets\/metrica\" rel=\"noopener noreferrer nofollow\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a>.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435.<code>VisitID<\/code>\u00a0&#8212; \u044d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0435\u0441\u0441\u0438\u0438, \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u0445 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438. \u0412 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u0445\u00a0<code>UserAgent<\/code>\u00a0\u0438\u00a0<code>OS<\/code>\u00a0\u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0446\u0438\u0444\u0440\u044b, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044d\u0442\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 &#8212; \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0425\u0440\u0430\u043d\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u0440\u043e\u043a \u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 application \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435. \u0422\u0430\u043a\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0430\u0436\u043d\u044b \u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u0430\u043c \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u044b \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e CPU, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 big data. <\/p>\n<pre><code class=\"sql\">SELECT     VisitID,     StartDate,     UTCStartTime,     Duration,     PageViews,     StartURLDomain,     IsMobile,     UserAgent,     OS FROM datasets.visits_v1 FINAL LIMIT 10  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500VisitID\u2500\u252c\u2500\u2500StartDate\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500UTCStartTime\u2500\u252c\u2500Duration\u2500\u252c\u2500PageViews\u2500\u252c\u2500StartURLDomain\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500IsMobile\u2500\u252c\u2500UserAgent\u2500\u252c\u2500\u2500OS\u2500\u2510 \u2502 6949594573706600954 \u2502 2014-03-17 \u2502 2014-03-17 11:38:42 \u2502        0 \u2502         1 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         7 \u2502   2 \u2502 \u2502 7763399689682887827 \u2502 2014-03-17 \u2502 2014-03-17 18:22:20 \u2502       24 \u2502         3 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         2 \u2502   2 \u2502 \u2502 9153706821504089082 \u2502 2014-03-17 \u2502 2014-03-17 09:41:09 \u2502      415 \u2502         9 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         7 \u2502  35 \u2502 \u2502 5747643029332244007 \u2502 2014-03-17 \u2502 2014-03-17 04:46:08 \u2502       19 \u2502         1 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         2 \u2502 238 \u2502 \u2502 5868920473837897470 \u2502 2014-03-17 \u2502 2014-03-17 10:10:31 \u2502       11 \u2502         1 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         3 \u2502  35 \u2502 \u2502 6587050697748196290 \u2502 2014-03-17 \u2502 2014-03-17 09:06:47 \u2502       18 \u2502         2 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502       120 \u2502  35 \u2502 \u2502 8872348705743297525 \u2502 2014-03-17 \u2502 2014-03-17 06:40:43 \u2502      190 \u2502         6 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         5 \u2502 238 \u2502 \u2502 8890846394730359529 \u2502 2014-03-17 \u2502 2014-03-17 02:27:19 \u2502        0 \u2502         1 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502        57 \u2502  35 \u2502 \u2502 7429587367586011403 \u2502 2014-03-17 \u2502 2014-03-17 01:13:14 \u2502        0 \u2502         1 \u2502 gruzomoy.sumtel.com.ua \u2502        1 \u2502         1 \u2502  12 \u2502 \u2502 5195928066127503662 \u2502 2014-03-17 \u2502 2014-03-17 01:43:02 \u2502     1926 \u2502         3 \u2502 gruzomoy.sumtel.com.ua \u2502        0 \u2502         2 \u2502  35 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\u044e<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430<code>final<\/code>\u00a0modifier \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0432\u044b\u0448\u0435 \u0438 \u044d\u0442\u043e \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e. \u042f \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u044d\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0439, \u0447\u0442\u043e \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u043c\u0435\u0440\u0436\u0435\u043d\u044b \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044f \u043f\u043e\u043b\u0443\u0447\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438.<\/p>\n<p>\u0412 ClickHouse \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0438\u0436\u043e\u043a<code>CollapsingMergeTree<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c inserts \u0432\u043c\u0435\u0441\u0442\u043e updates (<em>\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 CH \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0431\u044b\u043b\u043e<\/em>). \u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439  \u043f\u0440\u043e \u044d\u0442\u043e \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0432 <a href=\"https:\/\/clickhouse.com\/docs\/en\/engines\/table-engines\/mergetree-family\/collapsingmergetree\/#table_engine-collapsingmergetree-collapsing\" rel=\"noopener noreferrer nofollow\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a>. <\/p>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a, \u043d\u043e \u043f\u043e\u0442\u043e\u043c eventually \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0441\u0435 \u043f\u043e\u043c\u0435\u0440\u0436\u0438\u0442 \u0432 background \u0438 \u0443\u0434\u0430\u043b\u0438\u0442\/\u043a\u043e\u043b\u043b\u0430\u043f\u0441\u0438\u0440\u0443\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>final<\/code>\u00a0modifier, \u043c\u044b &#171;\u043d\u0430\u0441\u0438\u043b\u044c\u043d\u043e&#187; \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043c\u0435\u0440\u0436\u0438 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 update \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 incremental log<\/figcaption><\/div>\n<\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0443, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 2 \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<\/p>\n<pre><code class=\"sql\">SELECT     uniqExact(VisitID) AS unique_sessions,     sum(Sign) AS number_sessions,      -- number of sessions after collapsing     count() AS rows FROM datasets.visits_v1  \u250c\u2500unique_sessions\u2500\u252c\u2500number_sessions\u2500\u252c\u2500\u2500\u2500\u2500rows\u2500\u2510 \u2502         1676685 \u2502         1676581 \u2502 1680609 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  SELECT     uniqExact(VisitID) AS unique_sessions,     sum(Sign) AS number_sessions,     count() AS rows FROM datasets.visits_v1 FINAL  \u250c\u2500unique_sessions\u2500\u252c\u2500number_sessions\u2500\u252c\u2500\u2500\u2500\u2500rows\u2500\u2510 \u2502         1676685 \u2502         1676721 \u2502 1676721 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><\/pre>\n<p><strong><em>Disclaimer<\/em><\/strong>: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u00a0<code>final<\/code>\u00a0modifier \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430 performance \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (<a href=\"https:\/\/clickhouse.com\/docs\/en\/sql-reference\/statements\/select\/from\/#final-modifier\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438<\/a>). \u041a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u0446\u0435\u043d\u0443.<\/p>\n<h2>\u041a\u0430\u043a \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445?<\/h2>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043e\u0432 \u0438\u043b\u0438 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u0430. \u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 time-series anomaly detection \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u043d\u0430\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0438\u0441\u043b\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u043d\u0430 20%) \u0434\u043e Machine Learning \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0430\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043a\u0430\u043a\u00a0<a href=\"https:\/\/facebook.github.io\/prophet\/\" rel=\"noopener noreferrer nofollow\"><u>Prophet<\/u><\/a>\u00a0\u0438\u043b\u0438\u00a0<a href=\"https:\/\/pycaret.gitbook.io\/docs\/learn-pycaret\/official-blog\/time-series-anomaly-detection-with-pycaret\" rel=\"noopener noreferrer nofollow\"><u>PyCaret<\/u><\/a>.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 data consistency \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f. \u041a\u0430\u043a \u043c\u044b \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435, \u0441\u0438\u0441\u0442\u0435\u043c\u044b web \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442 \u0441\u043e\u0442\u043d\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e (\u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435). <\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c\u0438 (<em>\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u0438 \u0438\u043b\u0438 \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446<\/em>) \u0438\u043b\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 (<em>\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430<\/em>). \u0421 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e: \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Kolmogorov%E2%80%93Smirnov_test\" rel=\"noopener noreferrer nofollow\"><u>the Kolmogorov-Smirnov test<\/u><\/a>.<\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0433\u0443\u0433\u043b\u0435\u043d\u0438\u044f best practices, \u0443 \u043c\u0435\u043d\u044f \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441: &#171;\u0430 \u043a\u0430\u043a \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432?&#187;. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043d\u0435\u043c\u0443.<\/p>\n<h3>\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b. \u0412\u0441\u0435\u0433\u043e \u0432 \u043d\u0430\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 62 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0438 12 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432, \u0434\u043e\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 1%.<\/p>\n<pre><code class=\"sql\">SELECT uniqExact(UserAgent) AS unique_browsers FROM datasets.visits_v1  \u250c\u2500unique_browsers\u2500\u2510 \u2502              62 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  SELECT     UserAgent,     count() AS sessions,     round((100. * sessions) \/ (         SELECT count()         FROM datasets.visits_v1         FINAL     ), 2) AS sessions_share FROM datasets.visits_v1 FINAL GROUP BY 1 HAVING sessions_share >= 1 ORDER BY sessions_share DESC  \u250c\u2500UserAgent\u2500\u252c\u2500sessions\u2500\u252c\u2500sessions_share\u2500\u2510 \u2502         7 \u2502   493225 \u2502          29.42 \u2502 \u2502         2 \u2502   236929 \u2502          14.13 \u2502 \u2502         3 \u2502   235439 \u2502          14.04 \u2502 \u2502         4 \u2502   196628 \u2502          11.73 \u2502 \u2502       120 \u2502   154012 \u2502           9.19 \u2502 \u2502        50 \u2502    86381 \u2502           5.15 \u2502 \u2502        79 \u2502    63082 \u2502           3.76 \u2502 \u2502       121 \u2502    50245 \u2502              3 \u2502 \u2502         1 \u2502    48688 \u2502            2.9 \u2502 \u2502        42 \u2502    21040 \u2502           1.25 \u2502 \u2502         5 \u2502    20399 \u2502           1.22 \u2502 \u2502        71 \u2502    19893 \u2502           1.19 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><\/pre>\n<p>\u041c\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u0435\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0434\u043e\u043b\u044e \u0441\u0435\u0441\u0441\u0438\u0439 \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u0422\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0432\u0441\u0435 \u0431\u0443\u0434\u0443\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439. \u041d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441: \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 12 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0442\u0440\u0438\u043a (\u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432) \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f <code>UserAgent<\/code><em>. <\/em><\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0442\u044c \u0440\u0430\u0437 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b alerts, \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d \u0442\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0448\u044c &#8212; \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u0435\u0441\u0442\u044c \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f (false positives) \u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u044f\u0434\u043e\u0432, \u0442\u043e \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430.<\/p>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e, \u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0443\u043c\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u0432\u0435\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u043a \u043e\u0434\u043d\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 (\u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <code>T2<\/code>) \u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e (\u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <code>T1<\/code>). <\/p>\n<p>\u0412\u044b\u0431\u043e\u0440 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0433\u0440\u0430\u043d\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438:<\/p>\n<ul>\n<li>\n<p><em>\u0434\u043b\u044f \u043c\u0438\u043d\u0443\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/em> \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0442\u043e\u0447\u043a\u0443,<\/p>\n<\/li>\n<li>\n<p><em>\u0434\u043b\u044f \u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/em> \u2014 \u0441\u0442\u043e\u0438\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043d\u0435\u0434\u0435\u043b\u044e \u043d\u0430\u0437\u0430\u0434, \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0435\u0441\u0442\u044c \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0437\u043e\u043d\u043d\u043e\u0441\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u043b\u044e\u0434\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 desktop \u0438 \u0434\u043e\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0448\u0435 \u0447\u0435\u043c \u043f\u043e \u0431\u0443\u0434\u043d\u044f\u043c &#8212; \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u043c \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f\u043c),<\/p>\n<\/li>\n<li>\n<p><em>\u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043d\u0435\u0434\u0435\u043b\u044f\u043c \u0438 \u043c\u0435\u0441\u044f\u0446\u0430\u043c<\/em> \u2014 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u0432\u0430\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0433\u043e\u0434\u043e\u0432\u0430\u044f \u0441\u0435\u0437\u043e\u043d\u043d\u043e\u0441\u0442\u044c, \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0431\u0440\u0430\u0442\u044c \u043b\u0438\u0431\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043b\u0438\u0431\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435  \u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u0434\u0435\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0430 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f \u043d\u0430 L1 \u043d\u043e\u0440\u043c\u0443 \u0432 machine learning (<a href=\"https:\/\/medium.com\/swlh\/different-types-of-distances-used-in-machine-learning-ec7087616442\" rel=\"noopener noreferrer nofollow\"><u>\u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0442\u0430\u043b\u0435\u0439<\/u><\/a>).<\/p>\n<figure class=\"\"><\/figure>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0435\u0435 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 L1 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e 10%. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0437\u0430 \u044d\u0442\u0438\u043c \u0441\u0442\u043e\u0438\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b: \u043e\u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043e\u043b\u044e \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u0440\u043e\u0448\u043b\u044b\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u043e\u043c.<\/p>\n<figure class=\"\"><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u044f \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0430 \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u043e\u0439 c \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0432 data science. \u0418 \u043e\u043d \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b \u043c\u043d\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 Kullback-Leibler \u0438 Jensen-Shannon divergences, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u044b\u043c\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438.<em> <\/em><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043e\u0431 \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u0445, \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u0439\u0442\u0435\u0441\u044c &#8212; \u044f \u0442\u043e\u0436\u0435 \u0431\u044b\u043b\u0430 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u043c\u0435\u0441\u0442\u0435. \u0422\u0430\u043a \u0447\u0442\u043e, \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0433\u0443\u0433\u043b\u0438\u043b\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u044b (<a href=\"https:\/\/medium.com\/geekculture\/techniques-to-measure-probability-distribution-similarity-9145678d68a6\" rel=\"noopener noreferrer nofollow\"><u>\u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f<\/u><\/a> \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0442\u0435\u043e\u0440\u0438\u044e) \u0438 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b\u0430 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430. <\/p>\n<pre><code class=\"python\">import numpy as np   prev = np.array([0.7, 0.2, 0.1]) curr = np.array([0.6,<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-349965","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/349965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=349965"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/349965\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=349965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=349965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=349965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}