Skip to content
Snippets Groups Projects

ClickHouse data collector

Merged charlie ablett requested to merge 414610-cablett-clickhouse-data-collector into master
All threads resolved!
Compare and Show latest version
1 file
+ 22
20
Compare changes
  • Side-by-side
  • Inline
@@ -15,25 +15,25 @@ def initialize(group:, from:, to:)
end
def totals_by_author_target_type_action
clickhouse_query = <<~CLICKHOUSE
SELECT count(*) AS count,
"contribution_analytics_events"."author_id" AS author_id,
"contribution_analytics_events"."target_type" AS target_type,
"contribution_analytics_events"."action" AS action
FROM (
SELECT
id,
argMax(author_id, contribution_analytics_events.updated_at) AS author_id,
argMax(target_type, contribution_analytics_events.updated_at) AS target_type,
argMax(action, contribution_analytics_events.updated_at) AS action
FROM contribution_analytics_events
WHERE startsWith(path, '#{group_path}/')
AND "contribution_analytics_events"."created_at" >= '#{format_date(from)}'
AND "contribution_analytics_events"."created_at" <= '#{format_date(to)}'
GROUP BY id
) contribution_analytics_events
GROUP BY "contribution_analytics_events"."action","contribution_analytics_events"."target_type","contribution_analytics_events"."author_id"
CLICKHOUSE
clickhouse_query = <<~CH
SELECT count(*) AS count,
"contribution_analytics_events"."author_id" AS author_id,
"contribution_analytics_events"."target_type" AS target_type,
"contribution_analytics_events"."action" AS action
FROM (
SELECT
id,
argMax(author_id, contribution_analytics_events.updated_at) AS author_id,
argMax(target_type, contribution_analytics_events.updated_at) AS target_type,
argMax(action, contribution_analytics_events.updated_at) AS action
FROM contribution_analytics_events
WHERE startsWith(path, #{group_path})
AND "contribution_analytics_events"."created_at" >= #{format_date(from)}
AND "contribution_analytics_events"."created_at" <= #{format_date(to)}
GROUP BY id
) contribution_analytics_events
GROUP BY "contribution_analytics_events"."action","contribution_analytics_events"."target_type","contribution_analytics_events"."author_id"
CH
ClickHouse::Client.select(clickhouse_query, :main).each_with_object({}) do |row, hash|
hash[[row['author_id'], row['target_type'], row['action']]] = row['count']
@@ -43,7 +43,9 @@ def totals_by_author_target_type_action
private
def group_path
@group_path ||= group.traversal_ids.join('/')
# trailing slash required to denote end of path because we use startWith
# to get self and descendants
@group_path ||= quote("#{group.traversal_ids.join('/')}/")
end
def format_date(date)
Loading