From e85f0f13cc25fd3b20238ada583518fb678a1b80 Mon Sep 17 00:00:00 2001
From: Uku Taht <uku.taht@gmail.com>
Date: Mon, 22 Nov 2021 16:06:21 +0200
Subject: [PATCH] Improve Clickhouse DDL

---
 ...00915070607_create_events_and_sessions.exs | 74 ++++++++++---------
 1 file changed, 40 insertions(+), 34 deletions(-)

diff --git a/priv/clickhouse_repo/migrations/20200915070607_create_events_and_sessions.exs b/priv/clickhouse_repo/migrations/20200915070607_create_events_and_sessions.exs
index d846cf4f..55fcb39a 100644
--- a/priv/clickhouse_repo/migrations/20200915070607_create_events_and_sessions.exs
+++ b/priv/clickhouse_repo/migrations/20200915070607_create_events_and_sessions.exs
@@ -7,46 +7,52 @@ defmodule Plausible.ClickhouseRepo.Migrations.CreateEventsAndSessions do
   end
 
   defp create_events() do
-    create_if_not_exists table(:events, engine: "MergeTree() PARTITION BY toYYYYMM(timestamp) ORDER BY (name, domain, user_id, timestamp) SETTINGS index_granularity = 8192") do
-      add :name, :string
-      add :domain, :string
-      add :user_id, :UInt64
-      add :session_id, :UInt64
-      add :hostname, :string
-      add :pathname, :string
-      add :referrer, :string
-      add :referrer_source, :string
-      add :country_code, :"LowCardinality(FixedString(2))"
-      add :screen_size, :"LowCardinality(String)"
-      add :operating_system, :"LowCardinality(String)"
-      add :browser, :"LowCardinality(String)"
+    create_if_not_exists table(:events,
+                           engine:
+                             "MergeTree() PARTITION BY toYYYYMM(timestamp) ORDER BY (domain, toDate(timestamp), user_id) SETTINGS index_granularity = 8192"
+                         ) do
+      add(:name, :string)
+      add(:domain, :string)
+      add(:user_id, :UInt64)
+      add(:session_id, :UInt64)
+      add(:hostname, :string)
+      add(:pathname, :string)
+      add(:referrer, :string)
+      add(:referrer_source, :string)
+      add(:country_code, :"LowCardinality(FixedString(2))")
+      add(:screen_size, :"LowCardinality(String)")
+      add(:operating_system, :"LowCardinality(String)")
+      add(:browser, :"LowCardinality(String)")
 
-      add :timestamp, :naive_datetime
+      add(:timestamp, :naive_datetime)
     end
   end
 
   defp create_sessions() do
-    create_if_not_exists table(:sessions, engine: "CollapsingMergeTree(sign) PARTITION BY toYYYYMM(start) ORDER BY (domain, user_id, session_id, start) SETTINGS index_granularity = 8192") do
-      add :session_id, :UInt64
-      add :sign, :"Int8"
-      add :domain, :string
-      add :user_id, :UInt64
-      add :hostname, :string
-      add :is_bounce, :boolean
-      add :entry_page, :string
-      add :exit_page, :string
-      add :pageviews, :integer
-      add :events, :integer
-      add :duration, :"UInt32"
-      add :referrer, :string
-      add :referrer_source, :string
-      add :country_code, :"LowCardinality(FixedString(2))"
-      add :screen_size, :"LowCardinality(String)"
-      add :operating_system, :"LowCardinality(String)"
-      add :browser, :"LowCardinality(String)"
+    create_if_not_exists table(:sessions,
+                           engine:
+                             "CollapsingMergeTree(sign) PARTITION BY toYYYYMM(start) ORDER BY (domain, toDate(start), user_id, session_id) SETTINGS index_granularity = 8192"
+                         ) do
+      add(:session_id, :UInt64)
+      add(:sign, :Int8)
+      add(:domain, :string)
+      add(:user_id, :UInt64)
+      add(:hostname, :string)
+      add(:is_bounce, :boolean)
+      add(:entry_page, :string)
+      add(:exit_page, :string)
+      add(:pageviews, :integer)
+      add(:events, :integer)
+      add(:duration, :UInt32)
+      add(:referrer, :string)
+      add(:referrer_source, :string)
+      add(:country_code, :"LowCardinality(FixedString(2))")
+      add(:screen_size, :"LowCardinality(String)")
+      add(:operating_system, :"LowCardinality(String)")
+      add(:browser, :"LowCardinality(String)")
 
-      add :start, :naive_datetime
-      add :timestamp, :naive_datetime
+      add(:start, :naive_datetime)
+      add(:timestamp, :naive_datetime)
     end
   end
 end
-- 
GitLab