0
0
mirror of https://github.com/PostHog/posthog.git synced 2024-11-28 09:16:49 +01:00
posthog/ee/clickhouse/models/group.py
Karl-Aksel Puulmann a39596c092
Groups: Use materialized columns for groups (#6938)
* Migration to use materialized columns for groups

Workaround for https://github.com/PostHog/posthog/issues/6422

* Use groups materialized columns in queries

* Update mat column creation tests

* Simplify aggregation_target_field

* Fix migration

* Update snapshots
2021-11-08 15:49:39 +02:00

42 lines
1.2 KiB
Python

import datetime
import json
from typing import Dict, Optional
from django.utils.timezone import now
from ee.clickhouse.models.property import get_property_string_expr
from ee.clickhouse.sql.groups import INSERT_GROUP_SQL
from ee.kafka_client.client import ClickhouseProducer
from ee.kafka_client.topics import KAFKA_GROUPS
def create_group(
team_id: int,
group_type_index: int,
group_key: str,
properties: Optional[Dict] = {},
timestamp: Optional[datetime.datetime] = None,
):
if not timestamp:
timestamp = now()
data = {
"group_type_index": group_type_index,
"group_key": group_key,
"team_id": team_id,
"group_properties": json.dumps(properties),
"created_at": timestamp.strftime("%Y-%m-%d %H:%M:%S.%f"),
"_timestamp": timestamp.strftime("%Y-%m-%d %H:%M:%S"),
}
p = ClickhouseProducer()
p.produce(topic=KAFKA_GROUPS, sql=INSERT_GROUP_SQL, data=data)
def get_aggregation_target_field(
aggregation_group_type_index: Optional[int], event_table_alias: str, distinct_id_table_alias: str
) -> str:
if aggregation_group_type_index is not None:
return f"$group_{aggregation_group_type_index}"
else:
return f"{distinct_id_table_alias}.person_id"