defmodule Plausible.ClickhouseRepo.Migrations.CreateEventsAndSessions do use Ecto.Migration def up do create_events() create_sessions() 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)" 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)" add :start, :naive_datetime add :timestamp, :naive_datetime end end end