From 22c538defeeb3ae688af213e8df1001512e92fe8 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Thu, 20 Jun 2024 14:38:29 -0700 Subject: [PATCH 01/77] group pdi --- .../components/CommandBar/commandBarLogic.ts | 2 +- posthog/api/test/test_cohort.py | 4 +- .../database/schema/person_distinct_ids.py | 4 +- posthog/hogql/database/schema/persons_pdi.py | 4 +- .../test/test_insight_actors_query_runner.py | 71 +++++++++++++++---- posthog/test/base.py | 9 ++- 6 files changed, 71 insertions(+), 23 deletions(-) diff --git a/frontend/src/lib/components/CommandBar/commandBarLogic.ts b/frontend/src/lib/components/CommandBar/commandBarLogic.ts index 8f99b98842be7..4726ef38d60ce 100644 --- a/frontend/src/lib/components/CommandBar/commandBarLogic.ts +++ b/frontend/src/lib/components/CommandBar/commandBarLogic.ts @@ -54,7 +54,7 @@ export const commandBarLogic = kea([ if (shouldIgnoreInput(event)) { return } - if ((event.ctrlKey || event.metaKey) && event.key === 'k') { + if ((event.ctrlKey || event.metaKey) && (event.key === 'k' || event.key === 'K')) { event.preventDefault() if (event.shiftKey) { // cmd+shift+k opens actions diff --git a/posthog/api/test/test_cohort.py b/posthog/api/test/test_cohort.py index 14b6b60b51484..eaf2c4a3c6f41 100644 --- a/posthog/api/test/test_cohort.py +++ b/posthog/api/test/test_cohort.py @@ -33,7 +33,7 @@ class TestCohort(TestExportMixin, ClickhouseTestMixin, APIBaseTest, QueryMatchingTest): # select all queries for snapshots def capture_select_queries(self): - return self.capture_queries(("INSERT INTO cohortpeople", "SELECT", "ALTER", "select", "DELETE")) + return self.capture_queries_startswith(("INSERT INTO cohortpeople", "SELECT", "ALTER", "select", "DELETE")) def _get_cohort_activity( self, @@ -101,7 +101,7 @@ def test_creating_update_and_calculating(self, patch_sync_execute, patch_calcula }, ) - with self.capture_queries("INSERT INTO cohortpeople") as insert_statements: + with self.capture_queries_startswith("INSERT INTO cohortpeople") as insert_statements: response = self.client.patch( f"/api/projects/{self.team.id}/cohorts/{response.json()['id']}", data={ diff --git a/posthog/hogql/database/schema/person_distinct_ids.py b/posthog/hogql/database/schema/person_distinct_ids.py index 7d6e8ae56e8b3..5b90973771c86 100644 --- a/posthog/hogql/database/schema/person_distinct_ids.py +++ b/posthog/hogql/database/schema/person_distinct_ids.py @@ -32,13 +32,15 @@ def select_from_person_distinct_ids_table(requested_fields: dict[str, list[str | # Always include "person_id", as it's the key we use to make further joins, and it'd be great if it's available if "person_id" not in requested_fields: requested_fields = {**requested_fields, "person_id": ["person_id"]} - return argmax_select( + select = argmax_select( table_name="raw_person_distinct_ids", select_fields=requested_fields, group_fields=["distinct_id"], argmax_field="version", deleted_field="is_deleted", ) + select.optimize_aggregation_in_order = True + return select def join_with_person_distinct_ids_table( diff --git a/posthog/hogql/database/schema/persons_pdi.py b/posthog/hogql/database/schema/persons_pdi.py index 4213c7ef32726..394b76fda7ff8 100644 --- a/posthog/hogql/database/schema/persons_pdi.py +++ b/posthog/hogql/database/schema/persons_pdi.py @@ -21,13 +21,15 @@ def persons_pdi_select(requested_fields: dict[str, list[str | int]]): # Always include "person_id", as it's the key we use to make further joins, and it'd be great if it's available if "person_id" not in requested_fields: requested_fields = {**requested_fields, "person_id": ["person_id"]} - return argmax_select( + select = argmax_select( table_name="raw_person_distinct_ids", select_fields=requested_fields, group_fields=["distinct_id"], argmax_field="version", deleted_field="is_deleted", ) + select.optimize_aggregation_in_order = True + return select # :NOTE: We already have person_distinct_ids.py, which most tables link to. This persons_pdi.py is a hack to diff --git a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py index 0a41138197228..e3560a19ceac5 100644 --- a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py +++ b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py @@ -1,4 +1,5 @@ from typing import Any, Optional +import re from freezegun import freeze_time @@ -7,11 +8,13 @@ from posthog.models.group.util import create_group from posthog.models.group_type_mapping import GroupTypeMapping from posthog.models.team import WeekStartDay +from posthog.schema import HogQLQueryModifiers, PersonsArgMaxVersion from posthog.test.base import ( APIBaseTest, ClickhouseTestMixin, _create_event, _create_person, + snapshot_clickhouse_queries, ) @@ -69,15 +72,17 @@ def _create_test_events(self): ] ) - def select(self, query: str, placeholders: Optional[dict[str, Any]] = None): + def select(self, query: str, placeholders: Optional[dict[str, Any]] = None, modifiers: Optional[dict] = None): if placeholders is None: placeholders = {} return execute_hogql_query( query=query, team=self.team, placeholders=placeholders, + modifiers=HogQLQueryModifiers(**modifiers) if modifiers else None, ) + @snapshot_clickhouse_queries def test_insight_persons_lifecycle_query(self): self._create_test_events() self.team.timezone = "US/Pacific" @@ -160,6 +165,7 @@ def test_insight_persons_lifecycle_query_week_sunday(self): self.assertEqual([("p1",), ("p2",)], response.results) + @snapshot_clickhouse_queries def test_insight_persons_stickiness_query(self): self._create_test_events() self.team.timezone = "US/Pacific" @@ -182,6 +188,7 @@ def test_insight_persons_stickiness_query(self): self.assertEqual([("p2",)], response.results) + @snapshot_clickhouse_queries def test_insight_persons_stickiness_groups_query(self): self._create_test_groups() self._create_test_events() @@ -205,28 +212,61 @@ def test_insight_persons_stickiness_groups_query(self): self.assertEqual([("org1",)], response.results) - def test_insight_persons_trends_query(self): + @snapshot_clickhouse_queries + def test_insight_persons_trends_query_with_argmaxV2(self): self._create_test_events() self.team.timezone = "US/Pacific" self.team.save() - response = self.select( - """ - select * from ( - - - } - series={[]} - /> - - + with self.capture_queries(lambda query: re.match(r"^SELECT\s+name\s+AS\s+name", query)) as queries: + response = self.select( + """ + select * from ( + + + } + series={[]} + /> + + + ) + """, + modifiers={"personsArgMaxVersion": PersonsArgMaxVersion.V2}, + ) + + self.assertEqual([("p2",)], response.results) + assert "in(distinct_id" in queries[0] + assert "in(person.id" in queries[0] + + @snapshot_clickhouse_queries + def test_insight_persons_trends_query_with_argmaxV1(self): + self._create_test_events() + self.team.timezone = "US/Pacific" + self.team.save() + + with self.capture_queries(lambda query: re.match(r"^SELECT\s+name\s+AS\s+name", query)) as queries: + response = self.select( + """ + select * from ( + + + } + series={[]} + /> + + + ) + """, + modifiers={"personsArgMaxVersion": PersonsArgMaxVersion.V1}, ) - """ - ) self.assertEqual([("p2",)], response.results) + assert "in(distinct_id" in queries[0] + assert "in(person.id" in queries[0] + @snapshot_clickhouse_queries def test_insight_persons_trends_groups_query(self): self._create_test_groups() self._create_test_events() @@ -250,6 +290,7 @@ def test_insight_persons_trends_groups_query(self): self.assertEqual([("org1",)], response.results) + @snapshot_clickhouse_queries def test_insight_persons_funnels_query(self): self._create_test_events() self.team.timezone = "US/Pacific" diff --git a/posthog/test/base.py b/posthog/test/base.py index 6258bd34ee6b5..6e9922910a683 100644 --- a/posthog/test/base.py +++ b/posthog/test/base.py @@ -885,10 +885,13 @@ class ClickhouseTestMixin(QueryMatchingTest): snapshot: Any def capture_select_queries(self): - return self.capture_queries(("SELECT", "WITH", "select", "with")) + return self.capture_queries_startswith(("SELECT", "WITH", "select", "with")) + + def capture_queries_startswith(self, query_prefixes: Union[str, tuple[str, ...]]): + return self.capture_queries(lambda x: x.startswith(query_prefixes)) @contextmanager - def capture_queries(self, query_prefixes: Union[str, tuple[str, ...]]): + def capture_queries(self, query_filter: Callable[[str], bool]): queries = [] original_get_client = ch_pool.get_client @@ -901,7 +904,7 @@ def get_client(): original_client_execute = client.execute def execute_wrapper(query, *args, **kwargs): - if sqlparse.format(query, strip_comments=True).strip().startswith(query_prefixes): + if query_filter(sqlparse.format(query, strip_comments=True).strip()): queries.append(query) return original_client_execute(query, *args, **kwargs) From 07ac16aeeac20dfb9bbddca58cc6ca7e7449f873 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Thu, 20 Jun 2024 15:50:04 -0700 Subject: [PATCH 02/77] fixes --- posthog/hogql/constants.py | 2 + posthog/hogql/database/schema/persons.py | 18 +++++ posthog/hogql_queries/actors_query_runner.py | 69 +++++++++++++++---- .../test/test_insight_actors_query_runner.py | 12 ++-- 4 files changed, 80 insertions(+), 21 deletions(-) diff --git a/posthog/hogql/constants.py b/posthog/hogql/constants.py index 769d4a250e65e..400b1385499e3 100644 --- a/posthog/hogql/constants.py +++ b/posthog/hogql/constants.py @@ -92,6 +92,8 @@ def get_breakdown_limit_for_context(limit_context: LimitContext) -> int: class HogQLQuerySettings(BaseModel): model_config = ConfigDict(extra="forbid") optimize_aggregation_in_order: Optional[bool] = None + use_query_cache: Optional[bool] = None + query_cache_ttl: Optional[int] = None # Settings applied on top of all HogQL queries. diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 54cf36645f506..15741c40f103d 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -1,6 +1,7 @@ from typing import cast import posthoganalytics +from hogql_parser import parse_expr from posthog.hogql.ast import SelectQuery, And from posthog.hogql.constants import HogQLQuerySettings from posthog.hogql.context import HogQLContext @@ -56,6 +57,17 @@ def select_from_persons_table(join_or_table: LazyJoinToAdd | LazyTableToAdd, con ast.SelectQuery, parse_select( """ + SELECT id FROM raw_persons WHERE (id, version) IN ( + SELECT id, max(version) as version + FROM raw_persons + WHERE raw_persons.id in (select person_id from person_ids) + GROUP BY id + HAVING equals(argMax(raw_persons.is_deleted, raw_persons.version), 0) + AND argMax(raw_persons.created_at, raw_persons.version) < now() + interval 1 day + ) + """ + if "person_ids" in node.type.ctes + else """ SELECT id FROM raw_persons WHERE (id, version) IN ( SELECT id, max(version) as version FROM raw_persons @@ -88,6 +100,12 @@ def select_from_persons_table(join_or_table: LazyJoinToAdd | LazyTableToAdd, con timestamp_field_to_clamp="created_at", ) select.settings = HogQLQuerySettings(optimize_aggregation_in_order=True) + if "person_ids" in node.type.ctes: + expr = parse_expr("raw_persons.id in (select person_id from person_ids)") + if select.where: + select.where = And(exprs=[select.where, expr]) + else: + select.where = expr if context.modifiers.optimizeJoinedFilters: extractor = WhereClauseExtractor(context) diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index 422fa5a82d75f..ac876fab34a3f 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -2,13 +2,15 @@ from typing import Optional from collections.abc import Sequence, Iterator from posthog.hogql import ast -from posthog.hogql.parser import parse_expr, parse_order_expr +from posthog.hogql.constants import HogQLQuerySettings +from posthog.hogql.parser import parse_expr, parse_order_expr, parse_select from posthog.hogql.property import has_aggregation from posthog.hogql_queries.actor_strategies import ActorStrategy, PersonStrategy, GroupStrategy from posthog.hogql_queries.insights.insight_actors_query_runner import InsightActorsQueryRunner from posthog.hogql_queries.insights.paginators import HogQLHasMorePaginator from posthog.hogql_queries.query_runner import QueryRunner, get_query_runner -from posthog.schema import ActorsQuery, ActorsQueryResponse, CachedActorsQueryResponse, DashboardFilter +from posthog.schema import ActorsQuery, ActorsQueryResponse, CachedActorsQueryResponse, DashboardFilter, TrendsQuery +from posthog.settings import HOGQL_INCREASED_MAX_EXECUTION_TIME class ActorsQueryRunner(QueryRunner): @@ -230,21 +232,58 @@ def to_query(self) -> ast.SelectQuery: order_by = [] with self.timings.measure("select"): - if self.query.source: - join_expr = self.source_table_join() - else: + if not self.query.source: join_expr = ast.JoinExpr(table=ast.Field(chain=[self.strategy.origin])) + else: + assert self.source_query_runner is not None # For type checking + source_query = self.source_query_runner.to_actors_query() + + # SelectUnionQuery (used by Stickiness) doesn't have settings + if hasattr(source_query, "settings"): + if source_query.settings is None: + source_query.settings = HogQLQuerySettings() + source_query.settings.use_query_cache = True + source_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME + + source_id_chain = self.source_id_column(source_query) + source_alias = "source" + + join_expr = ast.JoinExpr( + table=ast.Field(chain=[source_alias]), + next_join=ast.JoinExpr( + table=ast.Field(chain=[self.strategy.origin]), + join_type="INNER JOIN", + constraint=ast.JoinConstraint( + expr=ast.CompareOperation( + op=ast.CompareOperationOp.Eq, + left=ast.Field(chain=[self.strategy.origin, self.strategy.origin_id]), + right=ast.Field(chain=[source_alias, *source_id_chain]), + ), + constraint_type="ON", + ), + ), + ) - stmt = ast.SelectQuery( - select=columns, - select_from=join_expr, - where=where, - having=having, - group_by=group_by if has_any_aggregation else None, - order_by=order_by, - ) - - return stmt + ctes = { + source_alias: ast.CTE(name=source_alias, expr=source_query, cte_type="subquery"), + } + # For now, only use this CTE optimization in Trends, until we test it with other queries + if isinstance(self.strategy, PersonStrategy) and any( + isinstance(x, C) for x in [self.query.source.source] for C in (TrendsQuery,) + ): + s = parse_select("SELECT distinct actor_id as person_id FROM source") + # This feels like it adds one extra level of SELECT which is unnecessary + ctes["person_ids"] = ast.CTE(name="person_ids", expr=s, cte_type="subquery") + + return ast.SelectQuery( + ctes=ctes, + select=columns, + select_from=join_expr, + where=where, + having=having, + group_by=group_by if has_any_aggregation else None, + order_by=order_by, + ) def to_actors_query(self) -> ast.SelectQuery: return self.to_query() diff --git a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py index e3560a19ceac5..14123b232397a 100644 --- a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py +++ b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py @@ -213,7 +213,7 @@ def test_insight_persons_stickiness_groups_query(self): self.assertEqual([("org1",)], response.results) @snapshot_clickhouse_queries - def test_insight_persons_trends_query_with_argmaxV2(self): + def test_insight_persons_trends_query_with_argmaxV1(self): self._create_test_events() self.team.timezone = "US/Pacific" self.team.save() @@ -227,20 +227,20 @@ def test_insight_persons_trends_query_with_argmaxV2(self): } series={[]} + properties={[]} /> ) """, - modifiers={"personsArgMaxVersion": PersonsArgMaxVersion.V2}, + modifiers={"personsArgMaxVersion": PersonsArgMaxVersion.V1}, ) self.assertEqual([("p2",)], response.results) - assert "in(distinct_id" in queries[0] assert "in(person.id" in queries[0] @snapshot_clickhouse_queries - def test_insight_persons_trends_query_with_argmaxV1(self): + def test_insight_persons_trends_query_with_argmaxV2(self): self._create_test_events() self.team.timezone = "US/Pacific" self.team.save() @@ -254,16 +254,16 @@ def test_insight_persons_trends_query_with_argmaxV1(self): } series={[]} + properties={[]} /> ) """, - modifiers={"personsArgMaxVersion": PersonsArgMaxVersion.V1}, + modifiers={"personsArgMaxVersion": PersonsArgMaxVersion.V2}, ) self.assertEqual([("p2",)], response.results) - assert "in(distinct_id" in queries[0] assert "in(person.id" in queries[0] @snapshot_clickhouse_queries From bf33493a78e17db3906ea099f39a25a30661dba6 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 23:00:20 +0000 Subject: [PATCH 03/77] Update query snapshots --- .../test/__snapshots__/test_funnel_trends_persons.ambr | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr index 07d851cf6d324..e24701e0ec0a0 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr @@ -139,7 +139,8 @@ GROUP BY aggregation_target, entrance_period_start) WHERE ifNull(greaterOrEquals(steps_completed, 2), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -313,7 +314,8 @@ GROUP BY aggregation_target, entrance_period_start) WHERE and(ifNull(greaterOrEquals(steps_completed, 1), 0), ifNull(less(steps_completed, 3), 0)) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -487,7 +489,8 @@ GROUP BY aggregation_target, entrance_period_start) WHERE ifNull(greaterOrEquals(steps_completed, 3), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person From 160b1c55357dec915541f704e57178d6980065df Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 23:06:40 +0000 Subject: [PATCH 04/77] Update UI snapshots for `chromium` (2) --- ...es-app-insights--user-paths-edit--dark.png | Bin 197495 -> 190881 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--user-paths-edit--dark.png b/frontend/__snapshots__/scenes-app-insights--user-paths-edit--dark.png index cf85b453c77d7855cfa5f65155af127063ea40f8..c4c116c32006f03bc58dac33c69952bafd22e578 100644 GIT binary patch delta 107051 zcmce-Wl$Vj)HaF)_u#<-BuH@A;O>MV!QI_0ba00N!QI{69YU}W+}+(BZgXeQFbnjk!?X@1+eI0Fbk?4t*!BGJUm}c>7rSM}1O# zfJVA%Y4rSng~!NbM9Rb2d5LTLSukeb`LDsz^IntvnHD{4`NuORW)_w^P3^I25l{M_Q$b~A>&9D? zk}tP_<#Lm^s*fZ7`*cGIR2uQ6 zGh97Xij(NB^&n_^Jj&j9@*OpNMQFdhWN18D8=ODf-Ydqb&|9aFOJQTF8`^a|*`s;x z{S|A`u#z=cId8RKcdxI)TOUU9u+#sQzM8WN4AtFQtILy^ogGH+dLD%#z_DaYbm?^2 za(2)0x~hG3XRo+ScU2jwVS5RHyL|{{xVc?Rz8y7c-|$#&NB>std8lz%*Y2@vwXwbJ zG$X#H_Y{IFU2{1Nup@`g+0Qhjf6g~NS9V#)m+ z&2pxqaJ(sPWVik65k~@@F@4(xVsuQ*%_IZh-M_w>8?OViQUt@l>T?bN9nt9wxn*T( zfh0}wl*ArE>5C0Fc&$97J-VO1zuEXvNi1gK$CNx*&f<6?j)m1>%~oK=UR^&D;7qth zx)TnGghLh5MV+5A^kX0f;zoboS*1)fTo14E@?1V`@L;xDt=)^9Mzs{bAnWRv8-Igs zMku3UDz6QFEF9XWIu{+_pV<(06MetAiLF(pisj#*euG`C;g!Mntiw>b)@W2v6jCN0 zlen?HY2SIvzf#tGyq$|1*RQSdSxrLBom-yw7Hbnb7J^pi6lyU2(W!YF&E@0dVNTAw zk-L#ZLnC9`g1k83;an>zDXD2uhl~%`w=xCAId8(4C}Wy5RknnSwc&6#-Tuod)H;H0zsx#WhGOJ-46R|iE%4@I+zF!Ps*j{` zV-4w@+V8A<_teD1PE~oH*o72Ap;bm6=Yx&xNY%b67sryl+KJ}QQA2iz;Y*Gzi#N+R zebaNLJb$=a3xI;}yW{z%B+ESMr8<_-EAj1`eLge{+u#(5Dq@x0?PBwug;L&J2a-VB z9$s=V={+7Ly_@60p!wDfVwZdf+PN^Gc^no;q1z zk&j7B!_m;GvY@ePxq5xQ=s>CCSr>7=bW1QUpYW?Z-95!By?px^_!?7b5b9Ceew5T0 zcQE(Mu-*@Oloh1^JQFE~p7x&a57-o&;CLo8qdT;$2l8T-lJj;~xCibbvJ;`wo6pVF!=y}_<7Q6La zSe_H{z3Z40(ye{J+>*!hv;JUH@w~r(wq0XN$#Ml#o#o?QxQulp;}L^!q4o9W@=?D1 z`JCLmv+`>`-SaKFp#(c9B_Lns$QdBocaq;uaUB^X+Haj`&dkioshOWj5a-V4Asjn; zMI1?4_f^RO)1VJ4lL`?A=GM^I7(Lju<}3AkLu4DtoMpx^0Gd%}&5#q`EBx;J z27^Q)o7D02xCxFvI6RrX8UVOrC}e|5%L@xvFFBsDrrXM%c4IZ&dW|gS9`KJ_&WTOD z_L1Y3DsvXu!K|jFql=9#o>I`%>>(&`m7&7giis^wWHo~V2T6VO`0;5&i5GlT@?a;k z*SEjjHQfrs2f}{-T1!7}6IWCuMdP!TUjXtWyzFn^)3%;(v$C^QdiEkUELwX#POPU~ z#VYB~%OrCrZfqE)X*_va&MG5$bw&4bC~9kW?%O;>VdlwhqLn|R26m5a+LblBLvk$I ze#DNAeR#U$XSP`)jN`8_QQh1bUiJh#O-_D(@6pXQFnNcP40a{DNZz|w($+e^Qexyb zR^ghTJkq~T)i*x;32l7N6gL=@`{=}{lrOVYJN^9I%%gpIG>gD`^N%$BTD5F?mGf|* zOd@aa`+BFg3Yi~F1|bcXaRh3vm$4~Nm*sUDE^EOoUmPEWaJ1ULC$i+%Yq<1rwDolr zmm8jz0vyhWXBYKpdsl5=?{9Y2V-Mz91FNc9b8?-Zq1&2Ad;Lz=so#7I0hfit9yO%{ z*oWpykBd+*E)rX<2Iz+P-RSqHY;-RQqQZzj7O5WJOE_)KvTwRR4CJ5OKD5r&n;w_( z03&hX770uS+#Jj99{HE#;y5Rd=TE*m&s(#=OcnX0RsB4SfUvNE(gA{Z)T!xvGwbFVJ?+ z@ZrM;YWfdr3(uT^)I>+7tN=T^-TE+pzj^K1CN4ptjj8T{m2~B- zW`H>PgEWW`NWS3JAI0$Wkr-`So1~SIZ*#*6Rki%7W)vV$KjLkBjC9dIACMe) zSc`&Fz{=Hfm^n^!z>(*@Vys`ZQ$2_X=+)n9Yd&7tH5x@n^yfL8*JnDPAxAq|6;D6u z3T^LRb+n&fOKt?N%Xk|0l0?OokB(e<1CPHs(<(8dhkZnIQNuN@E;~Fo$jonAbobV+ zRj2;&!4OEc;@LZL(8J?KDsRS6R-S3Fey{U9XLdN{q73JLH{|tbk&l7sujbfY3Sp_< z{yK*G39~Q2V$v&W!}ek1XEsJnZj%jyY0_HVq)A$c^IhT`y(H( zKlT7ei|-*CG|T7#%y&}rD$1&d8}muy%^ZQA$H-hT1YLF=iLIZ8h;^goNihvG*c zyvZK-O+9;kP?-aLc3@}UQL;6Mz8{k2v-i?a-q zk$eFv%Lz~8KbY!vi3|T86f@Jgw#5C8pduI7n2OOi77T0Oyapjqr zq*n{;r;Pd{D(TA>+Sc@wf#wCJ#n3C~rDI<1w{DGyWkRpWAxJq|?J8@6b$ zMK7v-i{sq8isx}&J9SOua^Q}A=7jG65itmoue>}MgezZqGSIyW4?LagBrxjnRvXLZ zmsr{~LkJg_f%WZ@GVR=6^->$z3T(t0w8oy=B>BKO?WgD%E;Z%hVGg>rK_VW=nPwM~ zq`XYWpPFU+>g}%(O$(>%Y1@2L4lq*ft*qu+{NYIMU{)pk=rs6j>W|WoACPRMTg%G$ zCK!w`*Ia)9hSO9d$kFky#T2n+iUbACgIHDX9lY~|tC#)8iwu}LM?Uam1|cKjMS@6w zf`j#YR2p&e=ue6Kwqa2x8{XR<@&+yXt@Jw-pU$@$>_l43J!x0*F)_n`c;YHNTo6Wi z>(>e*HXXU)1H1jYqZ+noKG0DA93=;#Pg9e7o=h45FW`0?#Zc9%O+p_ZlWfx(u0Z9N zMO9D~OhiXH8PQ)@Qu2<0As&SDNy*8L7yY+LH?)FKGO%_ zn|N{5mB+}X^kzpcj5cm-b(Af7RLokka&S02)~cTGS=i{-&o(|(h0fMmxU_H4&a~$H zEqX{bY1X$Tx5WqO^{BfNT6~>ppN?d*!Yk@V^5 z>1(yJG`{M~OB6#RqculvMr3Z3LZHx0y`;Qkz;KV%(Do8;<% zT2J2PvMCgUMExtTz_ul609n1Pfxg@~jDgZ^z~9irPZ6JVh)5rzP1jK{T6kTcHP$^H z8Fq#M`f7Tv?JJzlE%3|JcqAcW){=~$KQfYEdouqk*8%E+HOI8}xe|qZn#8+5PW%HR zhsR@q$CT96!IAu5dVOfJg^w<4gV*PQd!%OPW{rsdKD ze*D7?+10@;X7kRj1y>WZ)gD%Kbo6Uxzo~V3zVJos?fOB$H>;=x?0>E&nL0gF{1ed( zYg+`kcIV-N&8RY|Ua$Gm)1#yR%v4>(8LD|mNvS812R2-s6*rt;^|svRPs59om8jPS z^hzJ`?%4w*^6o|R%bbrEVFVljCBPY6qWfI!>LNyM$QUd4adr!=28rNpwQD^QELf`^961)J?a3%9Vcy=l z(KbE3c{)$r3|jKon;!k1k}_14pVnbqUF8l8&pFel8c*0j)#0YR83>}&X3(4%qa?aGU|ch{`3+u4i30)MZU_ZSL0f(M}?&M!bvP(5KN2Xz~UXzzhy!8uhyZFNwJ zM^8%~^I{5Q4D41*K7)t)BPp{GmJ2nx{UY9rjpt?eFR^|}fU}D#6MX)ooq*n5GeGC# z;b+r9w~OI)8s51e^$wNHd8MNJP{UPD4o*+mU1KsvZFly z>#sB_B;<8KfQl^xL+o5O7tjb zc3)I_+}(H6-dp@Vrrdh4o1(2=7k|#sQZxV6y_L_)%j5YyDUJ{!0mY=QrOJ0Ea&-r9 z5onkqeMSnJpuwd!|8j;Lbojy?F18QJw4XVy<*U|~07U;z5=8_*tOvbV1rb3GELLb_ zB1bI8)E#Cb){l35^}xv^BuzE5{e@rlUPCM>+{s$eRgcWiZQgw)`5K!vH5T#1rxH!?;WLr#PXN z%l**-aY`0)VK1A|^-p@n-%rV*5@Zk0BWGmX9dn=^?xknvj9E~VBZ}~TOwGU(uP?kx z`zBPqEaIThOQM3{r~II2Bp{~obLi)aE^g_AyD+y^5Tr}5j|FTKygqvLs6To?N#V2* zJn350Rv4o}4oTo-Q0+U@%{ntI6BxyL+9}5Z;4)#rRA-rfmQyKf+1yLEIgpSisHGs!e${Gf3^a1 zR;4A~%qauwX?MMbXmA+dj{)!$K?Y@v52lg?bhW5>1bUJ(c=&F&TtJux5Iukmg2WKmP(-UcabHHVoOZ_&!)-4_f6U@!`RR86KuB>&B5QD!jtL0P4?~f{=&1GTjm>_s>ffPO(8c@Asy3r&)K3!8 ze(AlV{tSoo87?GC7f+0k0ErY9T2!%P$NeS=uW()nnJXkKW8eLnK%x~#|7Y-i3SAF` z0=Dm$Y|k)>DR)Bc4zo$Tcx+1!^-TVp6_mn;(o-13qGVZ5;EUO@6TNR|nfde}wDW-% z8csrLHdAsjh!-EfQjv=IBn%sWj?gs8wMJsP0N;~E9mOPmN%8+w?vJNGWXyt?*-(G| zxn17jRww92ijkEBT;7lBd`vB|ZdsA856uTVktQzUB*IZ;7JlS!I(5G(?3}nYc<#qQ ztK@+fdk1Vk!vjkA;g_3#FZYg%b_V+x18|pE#L?f8v{yTM1+`cvPtQrB^YSgY2(v~% z^sn2_YPJR9d?xipbMCllNtZXg$|7VKW}@$U-eyrD8du|oPWtp(cJ7~}I7aPUM-Uzz zut@w$3LIZOI2J}AeciF^_gQ%}# zlAcjO@KLEoJJzNw6eK9Dh((KoG$1KwuS6C$S`fbP^r_w-Z{hA!eRckVy!jHa`x40< z^?j!h9`*A6Ud8fcw5OOn;o{SKxF@+>^ehvvb`nv@Vk6yta!zCM(ZnmNvan}yrCXif zKG+%ek&~JJ=pPk+S0r|AG$rA!UR~|gzFeT?PQBhC@1qaP`Z25O0}P!4{iS-4pvZfl zNi2%##h>u1p199xA@wI7!2VsUrBF~0f`9kSp|j8`XAIwkufdxliC;W{IV}$Q=LE}1 zzh=jiB8)Kn&>u6b7RzRyXeFK6^*x;*2I4>+T;6_Z_T6?WQF3HjH33|Wj8IS;!u=I7 zQ)3~z{z!XGyt!gQDM@X2p0JC-y#L8nW^~y^$)=R z`>H|N?8Y)opk-$dYB7X6SwVu9YksFMva#psEH}H2TCY;OXV}nCnB4rAQXDB~t6WfF zPLUJ0bhEc-evw|1IZD>fhb>;LB#?QWN!7r!iWj0aEqo!Z;Kv1ZJnLd;L&PWM-3&;`9X&dZ5g zs*pcs%_NT}yw)wN+;WNh$3W0M4+vX6pb_U-9=CbXUar`#kCwe?^29s($XufS{)RdE z=RGmN7z^^~i%8iQ1K{@3~Q zF@y6P?lZRYCMUE6K9K8%>HYJA_ibrY6vxg`#5$s-vwZfZ4L4!hFN2E>m~ zXY=G=s0S8y#L?vwWZUJijRNSPl(#&1(!Q-)2^qXO@daKqzT5ug<+bMR6zusngJM76 z#a01l9IE1f<$jeve?G0>-NRE+(`DC{MGVrn;>8b2f~e*NY)+MFM3(JW9v=O#l`+m& z)_4S3E2BW~*7i{1a0F5FTr1z0-2E@=l*?3>d8a^#7xDmtx!W!Ld;|96`BI1G#g~8G z{sIcm?@KiwW&g_(WMNQo*L{AnpR$?h>61;KZEsJJjG^e6(kNAt`)I^hyuPEtXt(z2 z&-nP9mB;WTQp0Y*eqlk$#&!8~l-v1MMT@Y*xsMN2Uj+5mBG4+nx}(T@(ebg;NtNyf zK^kXS1mxZ2?Wf{$3GA^i8YMu8D!yH zFQ{6y`Ain`htoBm_>jCt6~7t4Ml!o{<+RO6IbH8tv*$W>{|W)P@)DP|KIO%&rw)Nq zyMB55S;!zngTZdAX%swhd8CH5de6hHgWK~X&|eFD>nHyD{o;a^zV#u0Vqyx)b~YCm zGgzcy?Uw~8&KXSZu|2F_F5A7tVXU7f@pw{-`0e z)?)fvBk^NecPRmP95o(%Us@nf2~y3M>8o1>vQDVK*dl0-or8=k&FIGhy18Mi4HHqDJysX>LiJz{^f#YdrRb^#|{WYGSBLl{pza|f-tQKk#;Yhr~Bsjaa=+bL7 zu1A`WSI=)>CbVd8&x_6gc)`~Hz~XL&ufovyyStUQVPTGY8uUw{p`oCe=`ix-Z235p zIBsTcZG66Ug)0h#WHFkI1h+hny3Es+{~yGzN@tg+=Jm@v+s2dy&wVRDAyO<+L1o#4 znaXO_`{mYVKhTGL(WAdyC2vC%6qMw=<&OljWN&W|6a>g1HaEv~1M|$@QBn#^f6pn- zd=xp3jaU7>urPEv4QLM+m$!N^8gHKs(i=~gE$%dpOfl5i^(8KcTLFK9t6eXm?zyg8 zkY;K<&>(Pi9Qn|e01kNuj{wjSib+q$op%9dUlg&$nu;&&UIy`lDBU}ivA=XFxsd*@ z61;#qo8``*iZDYdOsO%(qc1|w;k*mPNiXjF%{q|26!sAUm5|D0dqgYsisi4|!i|!6 z)6d@;JZrhNi5u^5{b#>r0J4K+RFq{^2UK$s8NGO?wH>g*DfXF|_|b5! z1M<=1#}%lnWB!h;eH{C)n!?|I5J~UmuooP=FL^Hq`ypH}YdIipK*to^*m84t1}vZK z9j8Suu3Aq{Oo(`S5r>ww=ivf&V_kSY3Q6t6wRhJ>q7 z=R(4=RE6~id&c z8{ZG$9x8@{HH4xYp+gsa6%^XMG7^<)@8J>y7J?btz;qK8Y0@;=fdv(O3rEYDF z%<$M0qIGh_V4eZXzW8ODKgj!5rT!aTZKw`PlQB9ImXBU+5Gn@U+#v)s7G^CZ6gf`m`qTiPB7)dAfoWMHnIiA` zJW*&I6%2idAV*E@JPVGl7LGDD!`U zY>iiH2lXS)jYXIFb4tP3CO6&;0$g;#1e??ax(1nE7hU~65e`wHC}nS9)KS>?y@`r1 zSf2fVAG4qD>Mc4YMY)Uo1H*k zj=913Vg-sdNs|xff^w0By(k#|{*QkJA2Rv?p%NoOc_kLcKbHDAt1F*FeGjA1(*quF zx<5QsNTrU-P_vsNyv^Yv2j#U-sTk2j+;Rk*R%1MOO~wlAEST^`83I+pGZ%yXFXPmS&Y8mL-jzT9O6TDy#hJ4V&2C`#A`gU51 z@W3HeMR$csgsjwc2jz5UQ?uSLUGo6@ukleMya36bs=t!e>-S%X-`%Qob^rvk2_vAO7xITY`*{>$Q1UqN#ka$=8dUCg*b^UHR z{nHeI(6E73rsx$~Plx3H=mW4#R6;?VU+7ezyjQ-({Y$=rLal2OKYUGhp+?+Rk5R+C zs+Nr;w0n4^9v}`ZsM;9lw4%WHBD?ruNR9=L8-I_->10GkWlJU14CU{hcPkX^&A6< zCw9-=Y^6?X`+Y0yr$YEz!p}5&{s7{>&zA_^0xVGyBKCOjOhHs3KC_m6=9T)oE9bYc zK$FCO(-y|JMa%ieGi`S08k@rgCK-XIwcXVQIpOx;TjC)_s!t80KR#&+yRY3WDeJH< z(25PH85yd>*DrSDe84gapq4>XTr$;jsYTJDV#=oKDP~(1lnh4+m87JRBR0nYKz28oi1w{;q&tQA> z)#2m$E&94uR|Q3mXus1;T1K~WEWe_uCwxB7VNXq-mejIT+{nV;SE=9qrkx=McH>?V znfJf77>tUwBgP8hEfitCh7}qfyP7S(H8HobY&40-K_;PXo{%-fn1rJb4pnQCT`U)r zj1horDn#;e@{L^f>f$-ET~dv93L#!*f9~?crnsI6)KEEVDYYgVcv5w|A?h;rcB1x4qPNGyrxbQxRfEhT?3a`Styw9gjfF{9t_;pO(-2j>@fE62*_{Rr5r(* z@(HF@3dLrgg_OnxR5m|*wxH#lNkU*z0DGk@L0?5PFqBCj>HCb}e#-n|Dn!I|5DJq* zJ2lGn^_7kD`>|>Ymbv$A>{8~IYO>t30~q$v1}#E z&&jJuD?Z;NznX4gmZZ&rca{Ik@-yGe#Su=~F>Z-gmiLOOd= z1T3`}k(-OHQrO!Ptzv-)NK3Q#u+aZg=A}w<1+wz+5Z$Fa1o}I2sD|n&@_2;A(=vj? z@3r13TZE0GeorMtd1LAxlnQrf${jX}pwA|pB)wf@mj*d(@|#Fjm2<{0xYp~Zqj>WN zLrQU5HA6Kq(g+Sv%*HZ#Prtgj^@zInb!@N$feW(43MhkbFR)ekf&UI&rSQ!wx{{ub z|B_!H54ON6&ppsgXR3aohB=6jgAvc5s)CR3-RY`N!B$2v%DraJ47m)+ZogHaq?=&U z1LFP__ke5!g~aDcQ$F8?AI5cYJO!pTS4zPVauyK*3?JT3Vvth47qXVZ%U6bi6GC=M z1dbTT&mO;L@I3IKsTW#?c*TP%o~;Cw>DU{DEgG zz(>S$PcEF(n~T4!al;!6L>ywe2KZKogo){JIW+_zOUTT=8M4%m-szlQP^;ml-X1`1|zr zzP^)akAy0x0zIRGf_g?a{y9q5gCO+VLOu3lmx}TcU3YJiWElHTtbbC50ZXoxj6Rl| zEfhJnZfR6V-e6+7V8v#g}om{bMl1(w_^LBrb=ff5cx z)?YuX8;B~u<=`5+*P)=?NYLMjiTlTv2@2KwRwfR|{`>OPa6SFLzE_z00sT+kq+bDF z>G|mFR?xh=&28-~<7Hd`zsR{7=87-6a#88jZeE{_Z0ng#2f?n}JU7zcyy$si^m?A= zko9I`Boo~?syBzF{%7cW!Fs2Ukp4~{T9rRbituDccv2=9vAk22o%3*RK77qF_jMmtg}Nz<%KLX%jcAbv>`hef4f?diF^=G!tL4mwSB8ekU;}FY@rOh-!wepNewL-`t8DkM$*8FQ;Eub5 z`&q(n#}jb!WN9ipSw-atOv-lINM-lE?bQ~`zgGRw_k;^y{9|%XO>1qf^-$7s_Bf+z zOh_%Jz#AQUHD^rwQ%dmd(zv5We6V$Nm`$QJE#Tuj8T;tS_E5gToh40Dog4h8*ohb@^1+9W&*NZcM7p{nkc zn$uy!h6t-Pe}hf}W<_-a1KGk*z)ISMt>4`mF)nRoBUBFdXpE%P+X!zildC z1*Hd5)z?aA4`CzlEME=3o!!BM)jMnuk&&J!Xf}tj{%8Nl2aV>_p-4&$tySG@f8X#i zia~1Ua1g-BxcE872S^feXN$ly{kD(pmSH%dq*WC#YE2|kPHp!P%Z0ITo6`%Utglu5$D+^~t9JO1sMo86e*Q!~!%7u1Ph7 zA{Zj%|LxByKTx?~?trBn4e+oq9j_G;q&VK43yH)Y4|azCejz`OGe+vbmU{}%I)gU7OUK> zHAJ{cPAO`j9TiWviK=q!%w$m$d0+^#Wuczh+|)oO0_(1%U!4@OzOrMUaK@8whp|b! zbEA&_NZ9?9Kw7&oX4?hJxUS@H<%B$ZPxUp530YMiYM{}(yA&7Mw-g)IKDtY77}m(? zPmus&;(tJ@+Y}(R$;cpF72>zshvR_u55L!x!Nbs%aSp;KhvuZ^Cb()!NLbJ3qzM~_ zI`4N?YoDGpz$d?#gIAShzP^8E`xZg8Be zTCqKAJ7T!OtoAyYSG3Bf&R{mkNk`x!Euru|gd+lXs4AU9gWSad{PDtZPSNH_ld1d* z2itOn#D;-(kzRQ_0OZy3PJ=8*GL0$#Ip(D)!R6BlLMn9Yj`LAof@k06Mvc7zTebhL zpb&{$5WIS| z*zHWqsGyOOk2M4FHZoQcbY9%6;6Mi3&%JL4%77?C3o~!sX^EGyAfI=cZv*~>E7?T_}#Ot$JygepY&KyQa$ zI4pXW5_Iz`%pN8q#{A#XA>?-H&3}Y(uBKelZ8~!B!faSRXE78gs2do0I)CSm3>ItG zgbKO&Nh$i0rgmc*_V9RC^c#`A4+;}2EYX|(+=uK88=X&@`Aj9~^Ab!nh#>A!KoH5nE z?&L^}BE(#_*NmJh$XG3;m`m2tU1M)#OvgWDt^+NvFh%6CkhgH$FyByd zP8jO1Yj0x^XwD9Ci{fXh6_O2YQJQR1$s=^pxNoa2t~BtRX^Rd6Htbp|2deBUPL0vg3mf zOU2cV$^x*)n5prFrTfUVd8Voeb`N`z0)k+veAK4=C|U%zL^QNmcu%hm@4=#|_}5#$ zM3M+Jk$A-amg|NZ?FIs?G@{2AAMXfn#GP+*W?lv70Wu|X>&DuZfsXYflKy;Caa`Gu zzD&e~DtPgjP~X3GqGOCn;f1hAn+gO{LHu(FNZZ`>K{cnNxIa#XIs$%{IxtYGq<~|bkd?`!CO%r2y=(6GGaq(; z+`ok*z7F>$IN1gTeus|VuQ`e24%}a*?6Hu-JSA)#-FF~FvOlO1GyZK+-*2blUiCB)I;Qb!gZRTjO4F~4kxbIS*gG;K z4{RSu0M(sKVl;`NA)s!W5&FSz=Y34ljesDh&;<{91P-KIA!+nH^01n^#rvE>nSsmd z>R&i0G6-YR{iFD5FG>F>Wn+f&{b%9QA0Ln<2^`u#xvn84swwS}W#Mn+i6&^TkmnSF zvk<~&mL7LZ$sh^^3yN1NF(cFlya*^*rb(T9uT?b>5R`#lU3=@d?BMPuXXSZt3zY%W zU=U5#@qhD+FBXUc)wenV^HqJ>8S9m>4NG}lB7d8!55?4vhTp8d4>j=PXP%WRaH|qE zRl+UkS<76s-1%XbD|M9gX1QeqB{U9BJP#(~2Gu@l^N#e(UyQ`Zu_?Ch zW&uTNHwBSp$&tTub?@7`Qgs^^`mWX6wo;Bc)Z~Ji)am&l5+Di6n2*kZsr>ig&oKC; zRTGU|U$BwM;jecZeoA2b)!)=AXU-evO<%^@S3*J5+}mM3#YCfPj<48h$Xr2{Q5ROG zYyL%b)>JUmpq;ET+VahLNUPdwS5d$S50>BsS@hN`6-$C`1aHu773sr|Np<{K9FcLX z56LCLG%0w_{{>{nis2yB%EKFV0Li0%$+Vj2FhH7@4;rTQji>R{p_Bcm%*d`GM)1jm z0a6|dDXk%zGks=iP&zm_3l=I>^{OJ0w=^aSRPHw$tJH8x!N~@U-e_5W@|ey7A6m?6 zT$Z9~ie3$2^l+?6qX^ThaBKG!ZiPpe8$rpayKS*7uF3wu$j9?@>oIylfslyn{GT>0 zC)JGfWWe#!Yto(0a_QJ`ii!l34_*m5%7jut~5}$<8=CR%QYtcwSHfLK-aUX#^B*+_P*uUZwKGVe!zG2kjmWa9;xQvtvQZG^ zuLvTa_gakE4;}3FGf85K!1_2y*}Qnu9c^vSs03j9vIdHUfTAx3X>Xz4v15!Yo@YU% z!MfNhP_s#xdCt~5aclH_ylmZPW~^N~Q3%F^)u16%li@ZHdj;N6YQtHup7eiy0C98O zvF-Nq&TpuU`u+L3x2Cd|znc~~+ca=$K9p9j*6h7tTCiTkdMtcq)3`bK)(IfMK++l~ zXlxj5663CN1}I|oNBrenlw2}NO2WHFxKK>21tFb7ihNZuwSI7j>?F1dW51gP1hu7t zYS^BI0GzaBODLN}$O$vc-N13L4* zMrc!#er8OVFfI_0Ww|-aAZq?%VyGSznWOA2f&O1pAaa1e_+ju?aX&B;#UnL^cS^cQ z*v3q9#n`0wMWg5cC=@cT>zoya%xlA+* zpXcoWy^2OOZz%NuDa(8Og%@H=BQtUiZer{uiB^FjW6B{){s%DY*MuqA-sm~9$R6CS z_6X={6=LeZM-#$Ui{C@cd^*}taJYbaOCxEZ-e&Vnnw$6CEGyVpZnriljB$ZGYKeG( zPFwH^4E-lOn>A>drp~^vBYZH3C3IW}>bJgN*AJ)QkwFDZVBAbsh~B?DHG)F<1R_@{ zN(xJ8oG`|anPXV*DRA_?{BuNw~#k&K6MX>=(Ra%J=okBt8okQUB z&uy|U9G#;Pg5q5hGcIN1DHAt~jDvuYPHVWlv=-P{e7g~2?4ewt%**=>aTgub*~Ib# zsU(mLqI7tLCML*2I;aL^qbWAMk)G{9c9ai-ePygoCN&+_sFa zng92HRg4%W@E(hnOpMRHcp#L{ph0)Tk2SW|h@N#3LR1f2=L61G8KK;M_#5y16P0#0 zE!IC`8A)d7at_L)*v;K+c_Co=kyn^UHjjEkeKWgF4U~G75WR1rT8knZkHbh-2^O_~ z_MbNFR+_Pj1pIqS*S0bEMSvjfu zq!pKfrRBP%X)bz*?2)X+eBQ*QnOO5P7Nu#Nm`Q1jzwO};PG}+I1u6hS@QN}1m|llX zuz@sOUXSrI3&yF$AuMr|l`@=7ERki@ePjI5vJTZM(mjOl{8VK`%Pi{Adz$S_#kjQMFdQa$Y zsVW!U0YM|oY4{N=%$T|C^|?Z*&bT(G z63OyP3)@kPToG5;W>OO01q3v}X94c34lJ+t>K+VT`&Mp4C827o`XdupeMTrnRkML1 zv1zRPre7&#hIsIbXn%QZkChtlZqaocl{+^j{d+;`E0V#r8h3Bu8zZ(?;qwt}}f4^i+K-R&2 zi!GBN-Un9M_0CinLW}cM*<%T}ht{uO>S`w$S~V?chY`}nuQmYJ`KeD@^ZIeE1?!zB zLwl*a{JiDLS%}!>DDN^pb?ds$>E}7#FJk)@`2R(=ikP`?KfhT;sk`K+FS|b5eC2Qd z`Q+qe%2bF+iJ8lZD@jJJZ)@+nE&=KPL)KSDW!1IaA_zz$4HBYsw=@WXNJvRYcX#)e z?k?$)?(XjH?(XhB8-3pM=ljPPjB)Q(SIs%EwZ2wiI+PTPh?kWK>EiZ5ah-FQ)$?07 zG`W}OdJK*0%WlYz;8_Bt1g5$X=kS(l_|=q7oFSNHg`I^q{HW(;Ta705i*0zBSJT~ys17zDznBI(i&g?_5DbkV?r#A75 zw4YLMz4%LJ!|G3VaF|E+Q4JKZ-0CS3Q+!PlL^NW+RMIF%zd!LW81B|#M0 z+Mj*B>_U?Vk|v4MxDHQ;9)HfsBoxzmDpF{|E=ej*Ai1a)Y>K>N~>25UufZ7{(L0SS)Q zBWbL-BZ+Tn0cZDZ`m8(xH1NE(v#p*~eegc#9M24X%uexH(~$H}I!tc(#8zANM^fE6 zZs@`U>oe36im0XKz}7{WZ1r|R;b*3MmtxgmPC}b39(?MJwj3Qyzpn6-DDaB_u@PD& z^ADuu0Ob)DwLQs|+mU$qS@oa$+|7a>MaJAS3N37GM{zg5anE{=R7j=XvwcMBoWhFj zzS40tP;eg-A1NuqE<#an{=IS`)nMlCVMGF+SVXC(tMpykKB5{rl65NjpBC6o`L6DAj9Vtwf zn*iN$Z6CAkJ+Hj1@tD4GxtM*VuOZ7*BUcP7yDe!`o)987v#ne%JsRK&d`@++rl2ya zDV!ul%oroJ!+C0DcL;&4%B_AJAtiVYEI#3%! zQ3}vmZRlh&tO=Ji=l2{9anUEVpkOcydG4lv9!f$$UO4h%xhSu3vzzR$m5;D%nZgQP z(u;Ml4Oy7s2i&*YcZsu!BQKy9GojtXKKbG|@P7rJX}xG-9a`}{j+f$pTAZBTg$~!t zs&d!2Z3!kqheM&96=aZ{On)8cMJ-0ErQQrNI?9d+>_x?mcyyl%zVfnhis{D1Aranpa*l zVjxkTs9|~g=ytSA5lOupv{_IWD(KhwKev#xAAmAcCvDj_7vdZJxL>_ym)H=oQrh@) z%(8Q_kyNc2D=D1YlCpLFdP9UG05osC0GRdL%iC-XtTF>4m3%ENdsyAwGW`5;6aRn~jDqa$7;-5(LfqX6l4h zA>hd}0o)pa$r?)&bINi26og>4B$hZzq2|c@dNGxR(w^w)>EoOk?*A6 zc21zl>`JgPvb`y-wS%$yt~F&q(dXG|$5Ou5kM#&RKwXz77Xr66oi|ZYsQ>L#5n4Uh zVr3EwohLjd7{$_dDc*m4<-t*x)zbmRRQk(?n`Hg>`r<$P3}p zpfD(&%)Q}O6pU=xjC7w|#g-Vd&}V0|#Sun0#+3hsj?RXx{`^W+B5QB1vCLkaL&FrH zDC-xjJ%+=b$po}!o`%(4Kzrl7D2Z0Uebu&O8c;Z%2xcYpBa0XXr|d@ScNV$}TWd9q zyHKyQiu{y`;kbf4puY2S5{4<3k*(a_dDA;v*s*tQ_EzRDTjuCXOSiY?;JD<<_}$u;w`c}F|%09M90%ta<|JKuBB-1W9*|T8>2iNRh4%^ zdOSXQ>20RjzH5JyeqGs!sMmMfjDjQ8zOU&H3e&DXC(+)&>68yx#f=QqW+a2Bz8{}u z6VS?PW5VzO)Z)OA%F6D*;82Kbn|Y}5WXU!*rVUCQ=wAVy?@0z=;7Eo64O^Xlm~3DCqrKog?2V!9Jm~T7D&NmS z8adXg)=pwR+(r!9{584UZK z>4#gc>@6Q#eu8J9p=hYpyQI4~Uc%Pv0(6u$$u?gj{cu1{#2f{5ieZt1%KA=9Std_A=_f4^MAzVsQuckae=Scblvkp4G zvC>~lWU)VJNc7~$p7bzYTf_jYDat9!`$;r!Fcrv6z*9=$WK2W?A;R@J(@+1;PFq}B zPEJ}H_0?q*hb3jH&qoZckpGOSzJw{a*rc}AZnk^dUSfjE9a@L7&4|;MqgC6v95kSI z<-o)SGzpQjqSlxAc0{9*fCnbI)(v6RFq7EE&~gsdw~1D?UkLKS|DCN#lVJDBr6m@r5{@l%B*4~^M%cM8 zTU+`O@|Uc_dWW`SJUa1xovNNF%*WYih4&^BH~5GB(|noglo8)Wy5M@)Us>LFjgk#d z*RW_Rc#vq#*E{2fro`9%$S%!Vb#A z}Bh8Lo~Mx>#W%osfhonf&g$UKOOScXMJ5refhd)qRAD;*>u6;!AiTvP$H%7kHHR zhhiA#=*B#V#2rjE$zKP4Hr6p#YoEI+!Gk5k+SP=Twnk-jy4hW~c90&Djo>=yBy3F0 z&Uhj!*_rX7-lKvkfp1M(u^B;Aib*k8uXOzn+fG}~UaXnlUO-Hi{E zeK=3pFT9OOw|f7igd+H+6tU@8J1*j{^4brH-w10V?z`G|DaCZRS1q^FzOA`Cp_Aa! zHYQ~%^QsLXa#T?dAL}EE5ECB7ZzmD!52>uUVI}6pY;7`K6@|Fe-O2fhg;91sXGN6JuIyd-L!^Q#wQaOD4E< z%eJ_;zP%nK!|=o%qW|eOSf%3y((sxvgRRf3Jkk*?-yO|2l?S9wC2+fYOGuLp`6M#ewPfvF4fAvpZPG?%4 zN&7n!h5H(VL@A+5gf^+sIJg~SdU|%=@K27LM)<$H2%r%`a0J9mrg>say-W=4YMsTR zgi7Ks-(dAe+b-eTokY`cf%`W3KdUo&LVIOaQrK-d%064xnjihE#l2|E_7bj0Vm|Sm zKRo`Ck^QanJ#cOf8=c;JI=iU0CS~p)QV}Y>-ONUQ4zn$cAN6-x<$68nz>_U7K~lgX zXmBCVvQ%l9a0QoASjdZVKygx8PT8PgHuXGJB4{4j-#DM1=bJ{g4vkm%ji}xoP(_wZ zKpdi3j045&9ew}X_$Cspj>sSR{B7wGdM}d`ZE5*gpyaJ|v^ngnZ5%czJ$o1!y zUF}R(8>0YAD(xY9HJ+5N0A*3oe2`c-6tPzh^?$BGSV?!UNDipODClZ}$?1!EcMw=9 zb7l)#6huk(xURasI}s<_Q1~Hf{2DQQa2hTG-)p4ckP2Vj2}X@nj94-)Gz!IRyW^!! z@ABgFWP9LP2}Q^RqRP~A^R zwZc&J!u(H6&;+^c(xO{uu;y$1Ig#HGQ6k}j&3PwYSfNYXVvg*M0>?-O#^X9;R>0Zz zzSHGNX$A!M^80AkP(b#kne^q2yh=&@FPk9ue@J-+*m+lNX{H_Cp zB_q36Dk}3{LBU}Z@Jft3T#WkG?vH$iXgcjOOm@BEm`G6j5E%_XnveD)ph(W#b{cm`i6WE17M#jX{wX|F4ZEILYASNb zg7feD5d5tU|5(Sul4k!e!8lUCevkZZUiRK%)Waq8t zlP+WWQ}X9il$laj<;xmVW$vd^pz}2Q*+=0!@9^>Ck-nj+X)a;2#g%Q-g@XFZwcB-h zqU$*(LDw%l|e@tNCQ6OD7}$2VT{}H5lzQ86e6k92`@f z4#MiqOdrZ~y_*phQFq48+(jJzor>{IIo#4?pD+X1*bUN?z<}@nbwp;ai~B)zl+TQr z*4?9y-NAxSp$PG0%s;ZhtLE@@Tmzm|-aG411@m)opf3jIa<}{hL-cqXYJJgqe>*|`Y`fT1?`%&* z^fa5Y_IP|R-L!k$Y~5OVf6UkB%X|eh z44>R;fW;}xTg6dLvT7F~rxq6#Av@LbHm=qV=s422CXHzU59;djh4Cnp%|*qPtZh@;B)#6Dg0k*f*P!+(X_7*tZYI&!c${_+Qo)V|vNm zPO)ze%%ACs_Guj-rg`N1GgEw)YPFXh>xPx}EJ|Rv3SD%5Y@<-O=y}Lsb3=GfcJW^aiY8jJ5~77m zTtBx+>iN3-Zmz$hz`Iyrh}AC|!;t(B^ExAgE_$B#HEj)yHo##Z2|J?~rO8k+@T+yC zqSIkXsnwpsh!L>L+_!d52??<~s@aixfdvl#{^FXKrV^BAN|Ep1hMv!-Jc?K9wc5LGS2HtM z1V?74XHqsDPm_u;7&|z4p#U4$J9|fKv-&B@76+S=**6>6Zb-}L9G89h2q8R|)6WS4 zX)WOXA%+G`n7Uk&{F7}>e35&~W|1;7Gt2#54XFFBYuO5Y_F&?gUwj7x_dbs!%rfRk zm@)a&OG%wOn)H*?`u#SZfun&KOo#YR-wop6Z`Q^VZ4S>gTsVx0`Hcw-)55~Z$EqrM zvh1u>8Fc<}mZp8K=0c~3p78boo$^G^N(-4khIn5?mxj?LpDsQ2VPRo+4-bixzDEw~ z0k^H!PY}LGoGryJd(%DJ2rgTncqORfHo~g`=1r?Oh3`u>4(T<_4Nt+J9Hy(E+V`G3 zua~=53Hs%vw*zLthhc41DE# z7eEf=?Dg@Qu!{w$%48S3{~Ll2_ zp*7P{6=~`5ak(Abv4+d3*?q$8=Org(^t!NF@0ifR9qY`_<>D9q6diP^ZJzHRYI*sir9XY z8jI4pWhF`}$EP-E6=1s4R@Ln!<&mA}9t`mc&xgaOE-CBXDcc{39u+Tno1fx_*VvJP zliTNCS^F;rd9zXcuov&bXV3YPNXdiUKZ6cxylP&G2)l~>R9L9hm{~;(h~7o+X=b*OqrGf*H-&UzK{au;h=+**}P zf2F0Zk|MwpCKM`^P$-_<12^65A??mfkB#`84!^L~T>L|y*XZR!frC@YlhTyuH_PXt z%?ZO#SHSj6wY|B-`qK^l6BFNav0F@v!*l5A^3z!{4lZtE@UdC}EPWDtZ&9N?ea+G2 zwAwb$@#E^drR*P6LdQwne51eKnwgzVH=t@wVsa;WkPpgx;luW5I zG?YBszI;h)D!*-t(ETMlUCdyS4w^|ZqX??>0kB7*J#q8)2!=C*BXY=wUzWS$9LlQ5 za`7-LfGiE(Kmw+tz`(y`?GkMA#l_c-w`=qS2^S- z@TQdMA12BcmQ^FE(3M@^n@`MMQa9mY3pKak5=VI!>qW6DnWU4 zt?~0KGt(=-`F>}0Ocl>vk95knV=-57dMp8AuY>eOVFE;vpb(s>gir)CS7GqBzb4J^ z{eC~S6#6g&JLU97z>o7EFI)-?ap?7gu*HIeL`|dJx>Py3iyrx1e(7)`Y zzA+k&WaRpIa*^rajaH-(djEyU%t&|$JfTzTYbv)Ys(Xkn7A$St0x#EtQ!9ip-zaG2W9;C0i7o;b)Z_`~LlYU9P_Ca0 z-5sc7aLdXERY%!{%Rxk@evDW%Hzwdm9Z3$i4T&p_Z2QQ2mAYL}j^W4p&zouyFxtNG zQ3R%Ry?acamyF743rkY0>k^HT+ICWa~&T&bHx&!gXXeyH9>D{C9 zibld|i~zSb$lGh}Nl&#@#(CSq>23B4lS=)06V| ztEdOlDmgN@{m?qIwq~368nz+%-oxa1h!UgIYI+LYeIBpN?JDZnr}k(r{WwV!FLbzR zWHYD_nQc7f{bRedH~KhTP3fxAW~SxV+5p8MmD@W=fBT4Z1XA^v1cIAjdiqVYaB2&` zW?aB;T&;vrGqqiC%7WW}sP-u*7tSXLLd5$(z0xN8@5koCM ze*9Wr$muG&VyZ)S=ImF&tBy5ktyzLjOW)XyQVEVI{uMd%8U`}ShUPskg8w`* z9Q7ZLx2V+uXm*ObN|wy$8IW@k*xsmGl_m|6S}#}(a+>iA@l#b@Yp|b6)>`N_Ne5$G zve;oGQCdEztMC=q8S@#i3XCJ3SCW^{UJ>qd9}>yT)Ebk%=_`hT=u7VE9IeIjuPtj; zZbz=??4R+``kEj%fQTFav)w596Qk@z4;E5c(f29?sWY2^#K2G6SBRW z=W7VO0M&e{>=ixuqE?;HqY-Zm1AJ@T_^V7T+*pKbc35d|In9wcKqbK2YK%n*UPf6< z!#1_ZX?5>_hWtocTpcmaTC0k|`cKLq(hRI1mC#-dMi+P39!h-LcK-RMl<{93Z9vi4 zRAkV2>jdmrl;G!;ec>Pfk!hgH5?*{Xy?djl{Xb`IEF#v-Gq0qgmHz`AQC1*X%u%=% z#vx_sQz_078ZG9l2dVW!P2Z*~CS3AAq`0W%>21DGXhLWT-ZB_GNhXGL3=FbNJ<*r( zOU`v!JEG1upKfjR8s?3Dg1uh*(O|&S>lc@;=gH9`l~u-Lf>jkJnJoKZ!dlvBd>rQLJt|Ss|NL{cB8yHjL&Z| zxm1E(53%m;>uhK=B)`TT=@rY=r@I}$?MIxQRZ8K6{$y>|(KW(~X4eBA>}_GKPZGP$ zoQASA`zEHgj7Tr`cLvl9>R8?abujK)>8Q}KT~=GBw#p^JVMjqA9nq#olRjA2`qozc-`R_%t4fQd#C%m6X|T4H?km1}FF!R9az z*RWJH^HcC#vuq`qi=BPUuE_8cqvEoEwvU!%(mn=F<^f=+f@2LaGyU^}8TFM-6bBbt z#>%3@8m}4yr30rcL3Eq%AziOY&m`r33}3#9w01=V4@3AT>f_u^W3jsf6YBA}(``)R z#rLl~91A+Wi(BIipHDe~E!cQ*S^nGi##}zEu6BQI(f+s!vT-o~IkfTnFYFy0A4rMr zkrqWQ0Br|)#dif3PYqSViVQZnu5cSMf1E__5zxLmrb#jkY`$$SUK=(2N9o;%$aeyE$|4ANyK1-M~+z#+0|56=DUdV9Qj*>;(TpXuYl2l zUNEs&9BR;1^-|i2*HSL;53!4lV!l70n*okH2Bwa)8ODb%HYO_x15ne2t8`_lqNi;T z|Amje7B)e`8EM5yxU?(*8&%Dn6&M(w&$ejjR6<36m{nQgXmG?gk*q$6oHyOH`I;Z! zVq@y4aJ%MRKMCvY1b}J;uDJzK*r2XHcIi8pj7!OxsBMV_!Awgtc6gkb7%jm3tADjH ze&16t`Ss@4&w@S za5WV!OjYj8yxiJAn05d4@k)?HTES@iSsbNu6gL$82+m+3jnqio)y(MDSom4m5bMV& znQ7H#FL<7yReg%+vYRG)RzxqwuPhSnED|RD!f6y3@WwnO;1LGzUqj9BEfoOu7vUue zPl`T8BD1`iE$^kQe?rO%CH1ef36A#{Z_w>Y3W9MG^xH|XKg)!RBV`VZ=rcaChy1W& zE&9H66WfBqIuz0|vn-c~#lX$AwzBlTT_Y>U(zH)cgUK86XkIOq6|*d}Gn+Pgb7J!~ zy7%Ve&-u73_7Om}PCEu~BK?JuEff-DOnptxwwLWN;h!w+mMt#n3p#8hBCHFQgKw(XS+8$yDNl7!$!a znHu@UKIk|ne082%-`MPk=qHjX{ROp1$_X$V&j*Myl$}Zc)#;7jQiT& zpTSPcchl334hkVQDwa0-$=LLyIQ^3`dDfORT|Gg);fK&nmLQ8%UP&5={VS7_MNqxE zc+x4=;0FG+Ja}*4PC&hLpo!tn-$LuK0kL$XaXrhxUHh$+WO!A@@Tqk!X5}Kr+V_ut zkk{P1kfPX z4lqO&(rSd+BPDYrfaz6#X%jaW*Fw%%jG=tsc8-t`tBR>WV%U)*dsWJA!$-7_>~UU zJ-PR|BTX48Kd)TLnkzUwpd~^imFIwLp55{IHzU(Ii>rsCbFWl!i&ynW@4K}fSSKhc zqFCvI=0NFgtcg927v6A^q!nl=VpJPV;Mh?(SYbby$d1Nc^*Y0#J4S{?g_=^?Rn>3w z^D2-X)WNK=<7hU1KiHMr2UOv ziXMN_Q@?o&9cN87U|%2!HIB{#f*&>EBkg@{(i724Z)hJZVnm)s)BP z6{y1iceUxtsy&bD$x za&W74X9$j^C!d}EsU;cPKZTW26TRN~v_C&PE8GJf^f{STTV|dYJ29%+yc7rPgp7_#$^;K%1{Twkv&{}4F3(0{3Lz@2 z2!Gf=iD5zLVIk1=KP)twLZZITpuu8nNj|T4AwY} z^8po^0!vNg-P81B`TC*N)ls0N2#B8!*D?fajNQ+^S5cCZ<-TcxU+1zvZZiL5z)3D; zyF7cHxm7jSpagljRP1f~<+Dd2En$2S?M*`>%}!!NqN2QB%hC`Um=}bkNYd6@`=TZU z|Jw&VP)B!dLc27zu{43~Jc=MVCO?Rn>w82O~B#oK%3Z zES7n2M~tfWdp#fg`Dk+WsoT5GePgvZ#Ag4blpVAOdlaK_YHpte34l(J(Doc>6OzmZ z29&1VJq|`9b-I&dK?LL7mr_NNI1vqHvZCsS0*}kjqw^c38Izf$to1Qkt2%BvT`Pmc z+f^}0Ah!l;7+}a~zoT?27!C-S5dKSD%|5KZ2B8A_`-y}s$}5`~+(D&{J{Scunk5{S zWuRcI$kks9aMLRECH7K;nLf9`hn=2h7vjLD)&Y&fw2<%$N$=zO&!lldWaiBIgd$M9 z3sz|-T^fnhk=16ipxz?+-${GNz|!f;1#i%Qs9cNz3gbbvjtqfJfm}lEo#L`PBt)?V z-14%YKDqZygUfO^Q=~CZ5U9K?B1<`>r2_~IpYQ1KqT9SZ$FZ=xwW#<0yr3BB3jXM^ zXhEB1+K<0cA^)A5g_*Ra4{*-6osUilJOUa9U3w04E0ffxwxwh@F>UD>%otjp(xPem z`{iW-6V^!b1z7)8WI-0}F<`sB-x9?GBT$j}?CaG-Kry~<%~Tnof&?-IND(WnvCT$J zNcuMyQgD`4m2}TE&SGuk=qT*W2QRMc)=I0F*#NvBE!!WL_;8nkeI(|>(k$YU$R{Ap zFt9(84gEG+@|zMGFQ`=n3tor20vm2rE!O|){th+)WOHh|dp9^P4YBh6I89%Vd{A=( zSxGDd5B9&L+f}`duoD0iB2XB%`DI=a3HMn@VSUVNa1zc~j_d+208ErX5F@c^%fgYV zYONbX;LE=ip|Nsswp6P#F%{?e13tJ0N)aQnPuDvCB+jAC|q^Ff^8o>S~1w3D3~P1&v+kGKOU{0B(nfZjup zCsTL1xO(>E4+bV}OScX^66(onZ&Z8sObQ3Q+KA6Z1t7k$A<8*h_Bm(olVx>q*nJhY z-#oGUu_TjR*lrN&<%ed~mnK*++K!dQ68+J71*Qz3Y?kbdQ{N}a2}u$Z>2{%DxTU`J z!c)sxy~CT00KONQ{HVS}gr~_emKK{!GNp?pHyOI@#=CnEFcJP|N57{249CQ5+VU~5 zb`D)J#dc|dg=Q>0=^h&|$anivN3xaXVu%{1V!#)U3CKZVnb~6CvM^DM6!W>|7YeLW z_T+|zGw@H&Q0jqQ9!*1Nk&cns!h-G%L zmP%M^Dq^y{-vTP=rs7UZBs#qr1D_ZJM-wL~Q3XuI$Ej3)yqB7EtOz-$P1O4^lv7Zpwx!^l8xp^RB8Lz=&KANcgIogB@#w) zLJRm+Zeqgr2B#=pxk6;MB}gppe^stPOyk)E&&gQ)$u3dgsmBB;6+2bi7R(!vYqM`tTm3D;E> zD1iODfu)9(q&%GCtz}2!;irtOot1_!2|cuZ+#&jF0ELJPzU6$lxnxT4?Y^SDJvJ27 zw8OA7P~)VUCZ$-pu4T$0FQTpt`a?R7>6HV6AY<97va$v*)XV=?CsJmiF|(qeUQrlS za&>!;;(!enPp68DKGn$v@m(3AyaTGf$dD(&pT3`if(kjREJ0`IcgHT>^Sir8U6%m& zP@-dCG0&sP<&72!k+WZG8u1;ys@cvpFhkr_-85)*?(AzgRpoPi_=xX_O$pW!A~ zIi&IR{`j0lB2e)4ECIyQv}EUIk0OF-i*r^%Fn!mfRs7p_G<8C@#9FvBiuH1MJ3ikN zw`PvR{X9`t7(Gax7`R^8yLDG<0&!&OkIT>C)d7eod=IGT=#dRqcb{Th8hk@|Tb5l9 zcVPf*t&H8Hy+65>?aw!B*fUM0@6?^|em-52yLrdO#mRA~p&UCLNXz7s0QdHivJ?Zh zilwH3_D$=I5KqU;ARn1xJRUDf>e#Iv$`m6k$&sJ5LZX5unJNjV${qaz9$3nMl zYcjuVf`0*5TvZbfUQ9vJr;R0}-=}EgGN(Vsr)?y?16NgcM`_bZB2A8NKe|62#%a@j z`!4G|XqCX9vd3wTL zTW|J3fRqkgO9;U{2jE}=`8x8X!jpCO7=n%Xk^7512#gaZI&VpYS?kRVCrvFx3_ARP&{ z#(1y=rAG#;l+KU>Uu;#8I0RGc-RQFD?(N4NCW^%bFQmV`9){ zmSth*0?IgIhz9HuJiol`Xa)4e2m37N$E%xjgpefeOZb$BX!Xu>S2f4YO6cxnm%aQA1n43)0u3FV3bS=( zf`BN32rB_l=KT`NUz2DP7Zo$cvx2Qunk@RF{eq(wmefx4WZJ~JiWoQ|odWn=z-wqy z$!tY9$SBpMxbz{5sXySHc_d;wY5v_^$rcR;{|ns;IO~D1s~;`O?Tkg@@#5H@midw* zWo0WWtK_fe=ak|S_<Gz{_(@F7K*wQul)6q~x=B!_NL}W)&?{A24g4K{zZ#u@8pOCEpLGmjp`h;V8!k6GB z&xtiM-f*FG_ilD+k10Gf052KWW{<7v^59~Znfq$yBYy2QLzZEQt{A-}ACH3HVUZy0 zw`^JN#{o+xr@B`-gm_IymPfVsbYr^}72+7Ix0k~%SlyO4p2N?uEUMf7#oV3bz@~!2 z;Z0JO={8^1^$H+Kx6eEM9SEt48!l-s7f1ELHhN9`I!!p0#iMU-|GigS#89On6jGjX zu69fto2yc!btofx&I<(X|ulLzPmCSZwP^v=D_MfNx7jchUEXD!y%rRV^da? zpIfU>Xpis60y;kc_tomkWg_#Xp!tGk!%7h?>hhNb@8*+^T?al`nf7h9h*OinmvdgK z)g6k2wod z2rM?4SQw26f=B?H!&~9cVGM~}gcOBLArw96J|;EatOpPc17IhM#knCgvUC_^8E}T< zR0yYg>p7Q#p9q!|m(P6uA#n);Vr|*X1QRazv+013ATt&Svpg}@7p*HFgT(p`(tI5z zyin5x-_tZL(fX?P*IJ9!H5kQM+Kw&8pA2zjTf-FuKUYKE@ayV49D4E)(v?|AAEqxY$+t699k=Vhs1 zApxp#^V`ubNjfwIOY-Bbm#h);IE&w*1ff(Fz`mHl(=dh~lNxO{qafue75!dN3eFBB zXvd|bH8Ri)C~l+osb2Zbws`Fu?>LeE`b^57)`F4|@T^(Gp!_lC^;fCUdJQ%aG-g4j z=y>d12mUTNI1F)YB)x#qvY1_uQbW)4ec&HjU;+>892+Y)l63k;FnAO<(p<%wO;@^o z^6Desm3t+j2dWkvw4C#MOsr))+->K(oU7A&@5j0XE*||FUlRM8-80?^Ghot{e+*gCM&gI@oRecqVGVLKNGZG zEE-8tmA{VrLBib287s23TU%b&3Ae62IV!N z{sb*<@6gCXZ>IITnfeqp$_lVWPk+xV_V?icKQ6Ve;B#hb_i;3`D7zx}APfCM7U~t& zg@BdAluT2I5K-({zOuM4;XB4=jdj16Pp?}KI0NqZGIFVvBHb>c;YB(Ge9Ewvaaej| zZ1e(Hbr5rIf8zbvSC{JD^JC(qs*YfYF+3(X&Dn#y8$|d>}!Np8VAo@>;a;)Ilxj%R4e_AyeUJ21>&6pF!*T z1_Ry>x<>Six~$Ry)7_#e%3!8YX8_j+_nS^D>)l3 z*OOi@jWZu6Cof((Xj;Bu6SIQ)J^15_c~ol3Y46M@O~-TEw3egwyo+6kupI(7>%(gMeJ0W(&5x*U?3np6tU2#{)-*? zsphk8$wkSbmbylS{|a0OfgSHZ@5)iNx^bKjwZX#VF`!8py0hVkYcE?td7${(oN5uv zws!*a5H7aL>#OtF$E0ao$+!k~98y3vY^6o*zu`@-UiHO8Ub55;YzIjEF8VGi4?Yz~ z4kzVKavj)5D!^;{E%eGujOl>6RD&^`$ow_?GaW#0-lPCy7mWMOH1wn6X6)&H7rL~kblc7;@BI-IDZr610P^* z2F2p>Yt1!pW|QqrK)Ee}diy1-%g;oADo&Zz*Iq@!zOzBC0`l8kQ977lrahy|8A+## z)QRR9SJ2ww(L0%Mc~%s);6M2iv!rclEki#N4EZ!wt$6Gkv#U}1tr)U5eIFVX!A2Z| zR^99AtV7cTQmVe(GRNS3AbhKAsXe#W_r;I@aI__w5bR-^z#3M;7BET7GJM@im_$iF zH5p^EYi6-)WD}>zfE!otsL4>b=u2w%=7kF16YcQ`%QQ>qX^7aSmVx#Z|4jcl{61;= z8&{o;6dDA6VTr0(k61g zGrhfv@xugRr#@avQ6HDKn6)k&zkYPh2}0gD(W861GK5dRQwZjc1m6lo^;Vgj-S$EL z(Ygi<1DwQgUn6jMhC2qHe|-DU7*9!__d;;_sS1v>tZ52yAB+wb=F=3Rod5Lnc42g2 zNMP;#=DJj5n_BrRD;ltxnA|Cm>Z8JmuQYNpxulzVy6hlNX`vkmAIz%0w*X}peqTON zV6N0f{4BvHZR6z$Mpi|l<51AI8CvrfvjkLXMLy)cVBdbK!%V5Ht6=|?yOxt}RVrf~ zQ=E8$c;;ZEaz;}>C}0B0W$olYb8n!RVt(ot$dvX!lb&y~aBLcGf&#dAO&^TDzf6!va-21O z{nenQuXYkLGOOr^G&-xm3SyFm<7biizV(pW_?f@amE&g%ecvBw< zMmOyf&8IBWUG0x{h=SC5{g-T9U|BQxG7X&w_ZdzrEE+G=YPg>x(@F!J6g3P@Qi%BC z*+@C5SZXGPN5ZjE(7bOB)t#Buot>wEhRc$U&XN|VDVPxs;hWG#J(>&Z z@iU<@Fqkqk5VRp|)YAC+dW?Ahx3psO(TB^~2^}m+*h!E(mq2AT$JVKoI?VV?({$iI zHWYNF!(fw{x)0!H9?+0&?fAh98zUt$=Wu*^Pvf1@Bt)mc_w6ll-Q$czsNuyKm6mok z5dXEqm|5OP-JKiLhIZGoSz7C=7#JFdjqIs(yxffA*Yg?p|O1)}ceD4_Z+$(b=_O9gtpY^{7(tnvxo!Io;TbVjHtH z41#h7Zc=3(H+CF|8yHY@2*Q0sVwdm)cX*2v1LeD9@uhz#qouc1d!|#Mm=#R!1SMCV zRgYpW;4ryD={dZ0L(A+S@p;I^p%cJYhccdn zX_J8V_8F*NzKex4*~_>A^V0SoY z4mP?o!}FAHYB9Oze=-?4FWxVcS8j(?Adu~A0U8}!x)zX=@|x+0XBC(4(H;NU>6GIo zsp1bNL|gu_(kFlgjRdS9l1xaIv z&0%c5Q-vohwE9{jGU8M8jtthsYOhP{UC1(`G&;Btxv0@J(Fc$fZGWBoIuEG2y1mn_>XU?JfWo{_r%X$^%<(H)eir0+v!Sr&^)Ny>&+2D)Ayfm?UPKbc~FCJ=;jb3|vGU)(m`kIrRc)z6-vRq|V7+_ywvjWvBTaS%@?cVG8I zU1#0aP1It{Q^Ux#u6xNYiTR*?RkpV(+~k*@?eM}`mh{7siq>xO9n-LpuY@PGoQPoo zs=#*~>1+wE$~FY3?nIw+0{k8^L9|QbU?w^qd7t(BDp22E2GG}tFIfcF6I#c6z0u$K zS4vs>e9XsWH)XOldOx)K=Yz-(+FculmwS8q*VNbfu0}?9E+aM(hRy~@#Q+dz3wjr| z+>t&!h6SGKDyqi@7n_majw7hzMNZTKB`$SLV)p#Hj79cd6hpNsDJDQ=XpM9z)=FR| zPx4>dDL|=}ACsms&wJg}ou#h9W4}x0+s@Wn&~K~IhFN@Po_U3~GmbqeQYRQ!7$mYT z?2tLz?>cE>N3JE(W4cP~Wa+u;cWUVi?}%O13>fp+xarz`!)?`y4NJp0he?Yc8Sb=$ zqejI%@!mU5oP1|2x;PA1pU!3SEB5Y1H4F;C%m(Z!ccerg+YU@jKbJf|$Zk2n8jBJT zTh%SDR()0NZ!`bhJj~AyZ;T0ARpaXqF1Le%<5>INL(erb>a*Oz(l*=0w-~Et2q^xjB!ZF zMT6Cg{HhKn_6jj_RO5Z0-# zPJrR&jQy%hwDQnHm zo~O&ACU57f&yyiacGRW7U4dGX2Uho8<0JgRw!$k`cs$bWyT0Axv6ac%b$B0YB_n-C zeh(ISensAx8Rg?OIo}8ImkI>&C37Yi1W;ICpLv=~=?7o_u8&R=tf>8S$0s+(V`c0- zdAnl!(Y<1^Q5$7HY`i6SU)%FxImRwHdHv6Lnmlw9{vj9iXM>gwfDlgu1*E1Hi-)gLtVGbct%F{8~w zfAUxiv-*U8++qi#Z)pP)@wsb0Q=`7jhR2tkJD+^R$DoFoFqf3wp=f(YZQ_t$zrcrX z@UK_vNNd;*{lr6wO{k3*A)kLf-I}_8&Awj^s7ngJC$u#fFgEQeDXO|i?bApKD688o zdAc^fN0qcn-$-@kRVx@Tg|o*?EmbK<)H9gcSZkq=Lx90qck zU@s4yFTCm8A3bZNn#yw-U(U{seJDJ!c_~FMyP_w+$_|am`>$oWYw{eSRI#Fn{Ki7~ zCe)l{+t~=efGp#;RM;TniS968bIrde*0$W$Oo2wU$`E9qb*_mO2ua2$6*PTMhTJW{rvWX^c*+{UKTH+V89 z2(el2aV1@y%FfR}#s&B|G8@Oc*$1?CsgpK{*%I{)#LSXvT+?W=5UIziCypwtRDL|+ zZ|S&jI(DyJ^FIxL*(-GOghlMxMj2TSvwpsfSr>OsdsdC_DU%zSq<%vuMBoPCYsqNY zc@C7A^jn%eO#YI*`|T{`SLTmg8e|j)t=MBYF*UzG-cgyV4xQK*pCvJEc$3y95{6^@rw@Fc zE1zVy;z`*hLc>w=CfzH`GmQYu6&*4HQ%hA>Hu9tV>@@GT>AEKo+u=T|+H*jU9_^biV~ZA3Axhly6ej^IyqwSG_JoZZ1q?GNwT?vSZ0* zBGAi29?OB5ja?$oY%F-hQzYoXXV4ECVPskiQ=IEolf34NC!seDc6|dmWawZ$a`>q0WA&zrN&p0aiV-4%V@#?< z|Ie5JCb}FZ)SmojVc24kb8gA5rR|=jty#EhE${vbL_HM0J-N0&GHG{k2|xH50W;YK zWSNEENOW==9y(z13L`O1S&U!VywO;>ZE7F>t6!#nH`gQa4yk(?x!OFRT094}dTYa$arCWgqU)PO8O>o7m`R z^L`VAH%vp_*-y$~By&J4zy{!ndrdPNji+z&KWt-^toE8mxXPHwsZ8 zeTxJW#*~0OG?#)GWObuwg|Gm>D}xRFhJl5|YVWDhe!2I8C)K1>ifd_z$r6U&i+lLM z?c95P!sRxiH)V7$r5O)2MD*a+x>!*fq4^?|aryOOt{r)1{cDb*CV-E2)ZapzC0O01 z_2qbwh1KGs8)+h5IOzL742?WFInj6@|7I84GoYKzI&F$bV&vd67BUEM9Vn4G$c__U zn9{+Zt*W3-FhLIUn?Mkj-GvoxoNy3q{JI za|H8QYB*!~&+uuR*`gNJ__(@WdoKM=r}p5VnKTXfixoIwV327l`pF2E`$vCZKD&2p zxtOHYr<5NMSSL2n#-T`r=7@zWqz5(g2i0Ccy@|m-DMgmT{k!SmgwlP0X5`Y@j$BiK zn^u_sG+99kCeMISqVzId%a;h}?OFcX9yRGEGYlzu*GU9wE^-&x*Ibd`#%cQ0wbbkkSKyRZk;t z+XttBxP;z*Paeq~h8EHfaH5v~+=)4|;E5&>&!Q~V+0a3TfYDEK?V zg8_s65F`V=ZIDSWET#wGb-yGAbWCBzq2_*FtZ|g6V=t%BhZEm_p~+7g=c%MUshlN| zxd6*$dT8wLuw2IUkE=6K9{TO8TbX?!67@!JQjUkM_aEXqFR)DD-t$kT)5!8uCrRU_ z;6+IW=)2=JtUC(u(2Jc7Ra5gg-@MWCpJTl8RDJI^*IpR^wd@h#EI8oT4|JJl03g2x zgUE{kZ&&ypItE=vYqhXV^bdst{8jvY^GnmPTpoM!hK-3IV#e}+w3yh$GI+Ktqb9%h z9XRUj06KDUx%s0O25TV=-w%@BVnJ6)4LedAhMGvv*d=d zL&PoA;KqBk_w@CU!KJ>H9doT6x*jV>;|CihxVtT0hW*vWbnJbyiC{)h0`auw#1y2- z%>T5E{`N!Xo0*?P=X72uOip3O+G(E8UEJ18Masrt1S0(R%pCSCXrjUnhkAlAG|mFV z%(MwZSX+LWb2SoZRk2p`(UX&6Bi0ETv8nfNyfvs9eLX;q+#U6e^cC!wEPSNcjJe0X zVuIi+d_>wLM7xJ<#;177g7xVry0%20;pyE45FmQO(*~%2ScxuA*9lrhGihO|NZT0< zYy%T6xIir3jps1Tw|CV{>G<$NPr|SvBDv2(nH41a|#?wPP$j>6usDAnX zWasAMVwq#+4(@$r2{+IIT;rEznm!Y+SX@dq2&i9j@i}nT4NBG@AqQlh>FPvSL=%JS z>MR~C@!I^&5DkIom{R0(i+M>T5{9#+{|)Pxnfbjs zy)x=pL4|}5+MJ3EUGK?Yo65RWbv`5#Q^58R}N^+@ePY_Z6r3dfdu>!+L_*S)tAY>T2zvJ1@8e>sc{utH|Z#vKz@u zrkKn_;9hfK<*b2W%Kf3i*rf9F1%9=MXs$k~2{XTjjuCbo#woDfNwa-USyFoD*o%Fw zywSQOO4EHslN<`7337jf0zHn8hU@^Fv>9=hWL-*-hp%C-pN}bKj}1Q0*;HCv9cOEa zPr?iooy0Z7%v;zxWf5?rn$hDy`VWNWgO#QITmH!k*yrcGm{~Lb$^?{Zm$w=V3))MY zzfLNy)_j4il%k6X`53x)f>L~l4jhLm86sT)y^+6Ny+{X?8(OgEAeKZL)4abDlbHF(?9 z4RW6sJh?>=@m_gOmNeDv`}2*SshRC|o$IkyeT?di8@Nr(xLfCSqhQER(yzARRz(RY zIr|92T^Q(D%S_8I0|nyas}qx}=M7I^-^Z=bPmNeW z09;wB=cj zrBdBsUn?AA|KfmU3jff=j$05q1Oy!ioc|CC{^(uM>Cj{7V$D~9hzTNvX|VCvzeDv* z9X=2VZ+s(y(H-D;9)L^4dxra7ztjwYp`WKHz19HQ$h-{}50cC>bY6Slz&Lj;6B-1u z`snx%$-+TLq+r8NTsD8=rSy=s?7RCFWT^Sx!3i?Oq9+h<&5S-JmvrL-4CwP4O{^T+ z{?0BV$Dg}mcNITE2Jg>nR#lzu9MlqO26yegx%pBvQVI4)`z(i3XJnkDtq#D65L(fUF>2;}Xd8&-dPF@axng%fXKTs$VHkF+|HBjS?mx|nTaVD(Q_Rug8*2k1-t?ngX z5X*5~(gKZofSLzp&f>=QwdFK^aM@XFq1h_^=E65qLB&UK_n}YhU&sTi%Bdyc;yzw= zKtpWY3^xqsYC+wW)8f1*OX z$4GY&p*k^_VN4)6NUMhxQ@aEk5o7DRr5K^yb3mMldHehw`Iav|ZT^XF9J>C89L$E6 zN+I_zM|5$5Pn~z*bw31MAMan8r+;qZ4Z~F;6M&ai>AKWH z&v14xpe;Mgy%bNyLTqcMZ^3(C`+;Akxe4n0643J@QUp6}Zx{Jbkhl0hOHcqIpj59d#Ww73*u^_H4t#K0zf zGZHFV)OmiEf6~rx6&sm$-F8cP8b$>-46YGlRBh)PYM{&9&f)MbESyeUX^}4te1A}+ zWceGtDrqJ34&%1W8mNaPLS!)w;ATf)Oi`EDpdu<>C=Yai56&iX{iaX+a{Eo+J$WCI z>{xol+7G=tGXwJ-^-`hHg8AR4q9dInr>7^qY5|lxP6OK>W3VaH!1dXn%BvEYm%wA$ zmb$ZY)`E*hWR{j*B5QP&RNwQ&59H^SkJ4| z{B~nKL2LGEJ$&4|7cCDVxf;Q|imIuCjUMcsp`RrVCWTpLy=foAx^dhAuPp2W!`d|R zWi8KfQ1-7f(x4CrfQy&ki((kWl1si=%ep3`>u+q*OTjA;K-m{;w<+xn_+o>& z&-gQYo;%n9-LeRCQ_t0B)oLA$1mED@0=&!MI3^oj^hNg1BSAtkahT1DAoMKC7{ywA z9P~w&3n1gN^teT*oz@J_=y2r@6GYhG%jC)&pA63!U5G7>x%?IytY2g1G7(GmYN|o} zjQ$HFJ$cfJr6}W&^yfEx4Kqt!%N#3MFd%-f0KLkL_Wwb^Ao9yn5g`)>hUr&kRhHzG z`5uHuRWn~$9(`I}%&JcdefUpaORs!0V6nDTm>u(Uer_9kObg2pi=tBy;=(nXo3$Jn zMKAK>zS8l{^ySGs~u$){f)ymyhaF<^j{xzzPK20Ql$B24YDu8(z3vL&UWA| zW${E<-@Sd=@Ydxs{X8u2f**2?c#p*{>9K7OTY@%u5JQ^Kux=<9$3;960|f&R*ynSM zwmHD-^tdCCbtO5-p7nH^eJ>e7`Z4~xU|p22>}iE}-A0K4v<#cI=I+iDE>`p%Y_r)e zUY@YX4fq1Db#11amq#%ITIJ%~H<J4pA2Iqi0LN$zudaKPiWvtLd&D+^KWABOKo?K1>7cv;?2WBW;g!c5csw zywcJigGnSbuC;5eLUo?DbT)G;-tuxy2mABD}VOY!9w1~^X zmpA`L7J*k_L-eoF7twh*TC(IdINRKM6M1QKOzT?AE(uL66tfK^9$7)F0abcFbKN`kc&2H)y@OxSH)L8N zG$H?Y9Tnme(A&<=*u?m5D(|I=Hj+y9hWurFi66LzA@*3k40!-fvRlK=534@ZHj{D{jYL+X zljs+Bk3}d8o}j%1?SI?KTI)LmN}ZO^Rz zNw7PF%he-H%Xw_x=WvT3VmraQX^UOqd`_)r|Cvn{IDimDf#n%2a z5Ml2ABKOQaTcQ=OD}r+6;Cwc6aG&^(>>(b{(w})&UYbv0z(2_EMmnrKzgd4! z{*SMO^$E`xJjqiNP-#X!-qp1>Td$ma`+Fl4y!eUb< zU}7%UUBVzV4{>X{``Ca_^jM2b;%! zbgP__(niQr`qQA$Mt19k9%JkEL`bjO4cZfgoX6gY%h7b@<4Nli{mMPSV52iXySUhu zCv*k(`rD5?I`?;c5gYSc_8w~&KxNgF|L6I~9n?5`#L zGEg6I=_6DRt!V$;oiyM#Rgkb@pO14SjN*k2m-7Dw1Q+9W%75UAZlOr2tLc39X~#q2 ziV}*3xLLFhYj4*Z;eUZL(Q)|+z65;;=O&(8Z*|hwl+vG-O0*kCZg1Z}q_y7LyFcEt zBqb-i+}FJIGmwh>o>3ZalFrw;VdEhnbWkgbX+fzm*I2RFS(kY71F>l6`suxdj|)_yF1V0B(7XSS1mWJ zth@txFPo#ThvibYb5cT3Z6}O;5ij=ytrDEcMZ4wQ_r$;>%A)fL!t<@%^I?Q%Jd=)| zxmyz2OP0t4Rh5~AJJKNjwEtIj+1`F6VS~+MT3xvE5-syLH zH)m-icX}<)2g?=uD?iZEwyBmMh`rXEPu4E?l<2NKH@KQ&Zyx*5E_~8mUlf_msdi-= zK>TM53FqyQ;fJqZgO)xn{{_q0Z-P0xMbY zm;LgB0jor1?cR$}gAWDY|F&o4CIl*$ffdouP<#S>Tzq`(`LwjO+{T0DoFhxlK%+$P zBLHu_cSc+KK!-~;&p+K>FmggqLm>~bh%Td%tt48r+z*Rtw+*!|uHDZLyu)aZtF7%f zHnA&@ZH+BBqZhZCB+m-DCdRkG{-n;v=<_CUS^|33wmcf1u@LsIQ7zxFK{VNJ)8R_q zh10e^q^|fJxIM0-H3us54v&p7OGOe=VuzmZ2|cqtUobuKgCS?ffaK*z1&LBjZ-tE4 z9?ml~$#dVyDz~%Om%5T(xt15`$Lm1g$4e<^G0>7_TSY!`k(ULf;BvN<;0@Ak#waW9z}+@d$nvzSZE*!T%x*UHPNbV`~rVVWj2sed}XUYs8LQ)9u6{ zxQCyClU8BQWFu44gtOq_BqE(^aLAh;r$wK-IN9|-6MJ(*BP!qGhNU7xot+}J4G`^| z_$v>Dqb)=W+R)2N+di&~R+4{xo^B4>GQbc00FNytJ&DT6_STN$i2;=>cfS&+%PA=} zIXkD`)vPfmC-HB6ea_Ltu|WIbA$=!#HXtKAdfG6%B<1WpOVkbp`Y&((gu7c@d3qvR z$u2IA{Yc@Pi}m8}cmo0%4F?*dveLe)y83Onq6?c3b<^DmSS-_D<6ev5Fpd z{iRcvb%pJ$P{cyNwij*v`jwl39FT@){;!#vq|P&9TYj~AWPn=K3NR^|g4p}UKU&4e zYbo&-qkAK8lHZwJvQSr9*>_ByRsAj=t6vSEVsl6c_zDl8soJk~NGxCGa@pQL zD<$NL$jNcZ3EoZTJl&+#1&Y5PiI($>Eh+f|(bL;=;*t`511x=h|5M%3Fv~2-1lmv3J7Uv8Zso_8ZdClQ|af~oFCPHy8p zHalB=jFL>}2f~788MW7!-`$+LlRQ|hpUq87A4mYtLNCA4pW5Wk`h^~GnObgHS6)0{ zO-9w?p$IJhV7JF}FVJ zc=@;99lUgJZc>okZ|Q6VGYM5+a=aXId4-x%bWlC7W@93vf?lH}@t@!crUXyPJa6t8wD zv+lD+bM9F>h!nL47b;#>b2m|&RTsH|hSfpc2K?uJVh|~wYag^-&SsQ-TkjS|&tzW? zt(uMqTGKQcdxf4R$3ZjD>+FWDYzR~}CrdawFl z&HyuHtsS`KtLDdD_vPVmpX8>KJTIp`+N08!+Lw{%CjtKJU2>1>(q|$3WPBdim11oq zlH0#8eZ7MB7}_s$*&g?iFPM{6F1ziMpC5#tAApbCgxifPcSI?5JKUp!&H-r89f5Jz zz$wl%+spIH6T8rLn)8JaXhxctknm@<7NDiI+rGo$cG+yfy3uN7X><0xX*|B?h}bx9 z*SQ@F*^yB$Y0VLqn%E*4p{jk5_e0l^Sy*wlR5F=OO(l|%mAhzbyCcZ_)t-o*5hA3ojip| zwy$RK8Ofl?@J>blCLIfbtfpU84iK4326qE%GKcHFbcz(3Ves75Rijzhy||^s6e?~) z&FrDTSlp>;#JvnGFH-$E-{1HmvUQ)HG@8wRhHz zKU@^W+~`3gryvtul)fU|8*n<|-w7lKfdc)==)qS{yPsz8R~<;~X)SLz+Mnr##a&PX@h$aEAAVpCLUWLggDl@dTk`e8kNJ9{71nVZy&t^U1 zzUd1FE)dN}GbX_*@R1&v{w_>W8JpZ?<}|_Rvyg-@?@c}I*Wc^gRVV8r`d2Aq^wZ~? z7|;Nr;O9JjDt=1+K<<2!2+~D9`Y}mHrTib6AoL+SE~~WO+uD0$Z%BnjU6%k71*7#( zc{n)CCRt!29n6*A?f9FPK$n($u~)Qws_&fc>A(m|*}j!}R;Fi@PHkf|mEk@>`X_QJ zF}-QT9YqJ-;5+?H?>ZuMG*^0Hvj~TN*X%o9QZ#6}qHp7VP>!iaC5Aja&;?D_wg2y5 z{i!jDpln9gdT&*I6Ds{1306)kxH789Gvfm>DzoZc(In=D8p?b1fUMO$aj}pVW4LC- zQ5*VAgWVASl&V7v(L-5~Q*=ay-M{d$7rI%$2Nw3KigIJoG>W*S=x4#4vxZk6Lg_b`j1Lkf zuZ?aO={|igp@;TEw}_TQ05NZBVGPT=;<*IjX|JmFqjukbAUOkvtBN-Z%G_zFrkjMG zdo2b;uJiAX1ArF5eu{i&ca#5a(pk+7Q#L*$8J#cqRdTcR&`xhI*RVL5xKltE%)rA) z)-^(9BJPN0w_V&Txe=AFf@CtP%8<Uova>WfdZK;Pf@zG)03_<^CbvKZgL{R7-lJ zv&(ASql*!D!&Wc&i0=N|Ld7=L)RX9i7J??{ zQ(N4L9oxRl4Y@&qA%GFQ)!7vrq@|L=DLYh7pZfuDVo0%?RzfKIbDG2*T$ZvJl9=MB zWwi0RClrde!|HMVxu4L#1i67an>Ztk&>m3UZOK`?-^y3b^m%5wo|}02+yGPb5LGeZ z6++iF`=ck{kTYbZa{sag>3v=+;kc!lnpe{0`ddg$$4Q#{2@sIY_f+$$G#YHO1*73*zL`~L(usybotWHo6dw=QXNg6XXm zlI@*vtjMG4VMCuYl;O+m{yomQqtNE78m@DWw-oswgvMO%zlA-3<8G~Kfl{fq@8K9A zQz}rQXVTC#gmeskYUu&%&j(^e5Jxp(H)3J2nV6*h3PTWk=miG~a_FtnpAJ1!rivL# zXce0_c|jT#h3K)3Q(Y}xptfX85zqGc(ylHepYlqe4_>mrhf$t}PwDM`wR*P>)tfc~ zv^-ZU`YwlW(xsr@oE!lBUo*vg?DN*ml9iAJ{qx`wQ=uFvSfJh$P0LRG0;7}1J)zLX zI^b??`FZWOd&fDOt&M}Ifk5+`1GA4CHqo~{vlqkpJf2}Qmi9|t-BV4&14j~j_#MMD z4+mymoUefe9AbwmNF@+suVTG0Cd;$8=k-(5Qi1JX_?a9 zMT3T;TgAaM_La#XBL$>Yp5P=q8nMdcX4snpu4)>QwL8J{TX1$@PhNwW+NC=zV0hQ` zG@)PE#@+`M-W0HlSf(_hcz(7ThTv3%s>A@X;k6dz;J*1%4J{=QrLCe=HD2IO>j8Ta z9g@Dv(!kleuHRmmCI)uwxV%TF08LsGVcu%LNh*34XdMmms)99Kp+lRIs#t5k?rYi} zq)FFGFoZMC8J6txPo#Hi8^}&3I_z3%Hm5nMNbBK4YL|f(*G7k`H;E}Gf9iIEoPC!G zzY%NNue0Ffwd~^*8ST1pym>{Iy8u4P=IK)K{_SVWe<9w@eCiEEaDhS|8l-k`DX z^cjo?DZSF+_4!embjwboP{573qVG1yxqNlv%rXwyx%uY5u!wCu*H@EY?cdZN&(!OB z*|x8yOF&MXib9Oh_(<0gS77_JK0Oy6M@kQ(UPHg*pMobt6G0=v$TOJG{+Qrj(ZGI4 zy)@Q}waA%O9*um?QMV$vcZ_Rf=#&M^Wzam3dDtj^aaJIl+$?j)w#UW$afE~*w zS;Nj00z?*yCk}CcP}fo1tMs_^KWtL#Rlx#2K(FtukA^_?yO%3$=)ngbh#` z2D^N_l_h;)W2ud?W0p-q@$fl72_U2>{U*3CB6>dB&K6ZzvBXEf;#|}W_&R8t7>>L@ zur3jNT$B$=u4FA2Q>L_pX*#n_YJIg9%aZ)>+2+6i>U#s3HTv#f+uM#Fa4MtXuY{Va zi({*GEJ2wEzYzMyM~yUcaP|}tYR#4i9V`m1ULxdP_s`&D7eB|8p| z_XbU9K~?atb3ey==Qo=(h)}9#z_7k|2)PvuYBi4PNoywNuw8n|?@*%>{va6<6U*iI zD*hn;4Av?H7?qyHf(dJ(IKTd(yIQY4X+cTqw0twF*A(i`jaAjS!ubvwmXU+edfVS& zSDwa@Rn49-i!MDxFp0oxKq3|&!s_Hg3WPJJev0pp=@uV|NrSbpoj#Yi zSbA>6ekcN4>^w`!ABbD*X+yy&4ey8nkPY%sLn<;dj+Ub{`IUe&W>nU(E1 zpmrsiB~dzgGbj6&NYnZXZ*E}0yc^O{*6t6v98mPbN#k024jeRF#|}t%RxPC6`)VM+ z9oi~%o~Q7ED#t*qI-NHhkHTWJn7NtE z?BIxo0-VNNz$Tz}zRP#P#-h9xF)54q=4AA3`B&A>-=;ygRUi1**ZA1Ym8p~BO ztzb>_3z?3oW2qe|Kqf44LDL9$PhvD#x6zl;{@|hW)BY-lH9QLB3~A!|1%C_qQ~5_L zL)F9DA>;&QQhrk_{I4=#XT*QLAIRlEpQe}t!#~IuHs!HU*UXrK4AzX`M>>|oVMkej zHx0RCml6=2NlnMrhESr3E~u(5zzA~QcnD#GX31syzW;&t9VjC;b-bN-e4Uq86ZhEt z7OaJfi~KZP>1t-cj!0H!Y^$@9lKA1eCy$g#SEcD^7r*20fXV{n6`efwIl&OUX~?Zg zF_lg@)cTsY3%9P2HI1z_)) zkrzfTd)0i?Gu2na@><=t8Y>6WApUs;g($8?bt>-*_=8|m`I@64!MOYpq|L2VuNk*b zC#aVt6zBo)1{|ytFDL#S{+`)u~sb}!=3`s3zSeuw#|91xdgZ|4GcJgN3G%Wpd z^Lxi5ItrI|@Q)|*bU8I>KYw(gS7k8$yu`p>K|n78o-7p`VKoetUu)imz?_e9A2)A7 z)0aZsD25muh_8JXzt4GDG{z^DAD?Jo_L?L|Cd-i}*fGK84NDp*$^NQw`s3(L$dfGU z&CT}Q?C!6i+XUyY(GMc!IPI1*6wMN9x09~nrCOnDw_x~+H4AUNtmOt_tD4t4(p=}i z^IE=ub6&lSU2SX%gn-&Z=OgMw_3Q$@8ix^7&j!WJbl)=^%^yM5F zvgC@;W1=I$IIN36&`43Ga(%?QRD|x;Xsxw`L`;+9{}Y!a!mC~GBxnc&@;!}^dz2`V z7Vyvu$XOQh1lGR)VH;h$hU&Mqot@Rs&=s@*W$a+9aT*{fmJdj*8nK5iXE?ATbBdfv z=mq7BCZJ!a-<YF=7B{;s+`)QUV=UblMhi*GIEY<2?*w~aoYTXhhgvWV2tp` zUE0tB??dBr{Oe-HBMuMdEc>E#21Zy!l zGULNGD9G-p4yM*_B9Iy}Unl(-ULbmphZnG7LTc^uQIa3b1zjjO3<@|5EI0}V2PgFh zS%idrn9AJM)|`0W2hvTf_`Nccr6zBoiO{X=;7lSh&pObdVZ^5hap_63>4*{ILjHyY_`-BSrHRW)X&Ht*7>F%rf(be<5R_z(E=DTW(6p+ymZ^tZ>+_I-(xwBzr7fHYo7sF-DBfe`dBJR zv@1rjVI|0(UzvnL=`_dxanF|J#rAhb= z!yk#dJ-Bp7r?8q%RH8Z+MICdGxtJKF(5_kKg~f+~z;>wjh~3r;m=(=> z_Pk3f;tQxqGs^Vp3?ec&%<0p5JWvsNZD-yVN(zLZ7Ir`J-N+|ia>&V&K7G2czC|h`9}uA!Wwf&rq`{^@$n%ixLt?N#aI&r( zSv^Ru`EHz_0=bkBARWU*m{ic^flAB@ssE!okR+ef!jo}HQSwESrKt>%*2}N|oyEv_ zjdgZt1&bJzf5)sYEG~W%8&bzTspTrO?zRWg{Ae=a5!Cd>Xng$IHbZ>;n*!QVk?gX+ zd%q`gERV8TjxUoDfe_7L*dqbj-{Pi4k`}siyH^EiOe!P*BkeM3vnqh7f2K5b2lQ_U zzjRkpzw{+tK1Ab6-k!KOhS2WFhZ5sZ+W22|>*tz;0;d)gF>ugscFwjI3M5GoF%%>` z{K>P%ZjE4yDiKv{xpZcngr?)(QxNl|{iu_>YcEu07e?@9)Z_Jv(#@%J9Jk~}wEiMB zj^RAEU~H8Dl%bFF_f0q^MZ7Vtq@7Se!&v%p02w{VyIsM1zaW#3Si`_Ghei)4kA(p9 zHe@{>of--~#E%go6Y(R$T#4|qBI#DUM>0!I{@T7c@|S26LHUai0!Ct@zKzgYTx!y+ zZAWIE?%@2jnE}Mj+#}l?B`d8%22yPa4ey}scKMK7Bm!!WCr@2Fue5 zd;YE0wkYquehvZw!F+^{vF-0^pZAZF9?r(^(V@73-`;y+0sf1eY*aT0tr(fqj!2Lx z(*tm5%#dx?mly$qRX%Ex>$0iSqQj$O{QQozfulN~x$fnIf{sH=oy0Li2EIb9=_npK zP*`5p0(>f3Tv!M*rQkDBXEg0o8+UH|3Dt>&F=VWjvdfGy{=v9%7>m9S^G!&N?=t7h z-M674+(fQ1d}q6=>7Jv#kCSo?84po!$&p}7WF?YYBB40ABtCjf)*}nr=j4nBii%f} z!y*MyvoDxH`?-H|&!c&3LrAUc`9%7J_=cis0!ZAG$-IYgSXL}gn3YdaMjtoIkO^RB z*i_yv6jz(~f5Tk<8}zy`$XI#hKOxz#_l6w{7xRl z@)@r9;YnwM*u?+KbYK~`O2~7g9yzTsT9@Z7#t|JdHo5}!Z%w{QronJ{=jD=Xw*{-o zW!%ERP)~p1ulNO~WnM51+wB7ueF@STy?fF;bpn-kY0cy?lGx-411{XZYQ~8HXE8Zu zI|1GLjErn{Y`bb9@Cf@a^MfY@k9saohM-R1UHd6$XZoQqu{LF7J!g&k9Q%iycvb6b z7$Cz)#y*+023K1d35|$OSm_7DuZf@gpV8k?@Q>7bMR8-&B9b)KCrAr#5L8KW33F(jy6{L~QM~6s> zQYsBn(%mT*0wU5a-QCQ0$KU^3%jH_kf_d-Vd+s@V?-LKK+avgQGOciglw2j#Gat@3 z57?i@%Bzyl{aE!1s&VqidyvYKW}37Hyr!yzT->7rYNwFp(9lesn9o06M#emq)!K_} zmx91p_HiyK%groi0glmNn@ez@H6SgP)-%(DqwGXB+}_t=j-aR>aOw1(oZa3&djQ=f z813nswOq!AB@!8hl8oG;I^>p$Dbal)s>EW|*m$41cyUsupZu1EkU(2*-u??b#>a<;fzP5D%3S+i1Q&!F z6H%!1IiwkL!SUjk_cx3PUWbHU%d4vMuQ$rj^Vv3%jDmVwI4||@7jj9_kX?s0DylMn z*TCNNf7nIuglisD$xT_>jww${_NdrGo?Q-C!T(p+K=DQm9`}BJr=vl?qk*!}Vy^Id zwrIV(Frxn$1712fh&Wfz>1FN5YZM_<C_UP&a#>4JTQIc%NE`>udxV!B_ zMXD|QFOXMz-m(sa__=U2k{ZWNrbnGvORyC`-SD=}Rdga5o|c+c7O?WatmnkOZO`mb z@+E^?gn2m0V<^eP($1uVsK1nslO(Zm$fUDiSOWT+F|FEVQ5$!6otHdk=(x^U<$-Cd zB$dli4hiWfW*8hnfk&KM8*X9pWw*7h{f(vf6vdCeS@a__sGTg|x~rNrHzVr&J<%A( zOZ~!N?|ix++trv>9Pt!sKi9xNyO`!Rl?l5Tzr=$5XfFOk-{jU819P*?3NuPc5T-0{z2?tQ#$xZx17!rKpq+2IRM&vj3-fT{W z@>4q|8VoY1Fx$ov)JRf6go=tye_GCcxtxm!epGg%aDv+=7{P+8l<3_b%WApijsT1K zS?HrtWQhjc?E`9pAgHJu6%6UP7QZ*>#>r5y~jw3pZCg zyK>*;1_Q|kA4U_*r_8lL0la~MM>14+-UDKfK^+-t8U(^eU;$xi~5`9W^c8Y&{#1VifzgKF-LeoZVP%!#JZh% zr0nwO(^{JGpL@f>G&?2?KNejqY_fx+iP%vGo~`98!MNIkt_`v6{5va_l|7TXu6O7y z@z7y*8Bt{g-TT40HHYYTDL)0;^n6g~D_&D+iMG4By_p(y&HmJ_r*GYvJgey!I!r49 z;ot4@YCOpmq`4$WnGxkYf>7$n6+tK^p_m#$(Zkm55XyiZ`|9B+c?1Ow>e3Ws)vX>D z+nkk|<6a%S5D}$w!(mYKU9SDlHWAWyopqD4^Qf--OY1GTVp?q6O z2iBC_Rc+>Q&W}B|qovtvWynlClC)qJuQUX8TA#d;O>SYo^8zXiEeL&C(E1Ymza09l zjM-k&!do(odY65iF)W%$&la*sSQVWzC(Rux@s#+K* z#`$?lg@!{gu#skTq6@>C)KG!t#n#;;`mQgKtSylI*u)aV#-bf&XO&(;Vz(Ye$77vS z$o`koY65jRz(h5YjY6AfGi?nM?CZqMhA5|R}Qh*Y>fY1%+hqs(o1I7D#$ zNi35VufZ*SnY+>y&eQkpk~M=7l8ClvU};7mlB4Z|f|+yG5T3*t#&f~lF$H2U2H4Y8 zwFNXk%CV`HUvJ4`UEKz%wUrd`w2S;q_J53R;i2uQgwxojtVe!5;1`}0j)ePe9e4s-6qTN&Zocxmy$%Q!~y zp#`nTs`WFA)$P^Un$rH3=TrKorJutwF?I2a1c5O|T^yc8(XMlsYal!-QQ*WQxUP@> zsQ#X4ONU;kC7SAE_WD@*!PgCaX1ss9&GOYW7f;kFsG-ZN$jFLUy;_ymOZIX1)>ImO zb{_Hmwi%C&Uda(&&gNN9c+NYH2gudV&j)|dG4+okjM9Ui87AzC9*21avNn{9mZ~st_JYp6GLC)LwXcyVfFv_xje8(p!RmGCc&qprfdLTHT~y2pmgC z?WrMX_-eRIDzk0o$@9-Txjft1!VB3v%X0c`D=%mY4Mj}TqhDmew4>YCO|dK*XP-di z(a{^x|8`pu9_L-(k7$k5XkpF3=Ifl)qa-uuYJ)x|#YAq%8!pEe;Q0&I4V3X?z2*tu@rSa^~eabtl09a5rnzfE{Ip|=#TnPhlY+Knald!9qOG6E4r z3Z4alt<~-7Ry|Vo9M5|w2u?bnID10faG&qRR5Cx+;X)f*x|l#!(NdB;bktdpBtbU_ zIZG}Q>1b0Ma?n}?k%*fne!Uj{|5}3g8$!d$Uaq!cp@SB-7sA?Y(!aByet?1^NRaHL zq}$k6JSqqem~=oHOnd3#Ap06`S|_`EzhvETe*UMrPaL5IZS3L#nyi+9P=$*Trj(yl z!d+9%h?DVAyO?_*ez8yhsYlT~Bo%m&Tj_UD<$^kHUV z9+Y3EI_tjL`OYZ@`kKCbl~O~n@k#jkl3psVK3e26)-+?>23rhLr;3KY&>U6M=b^l; zEV<8s;gLpIdoGxpcgB9psyM#sdGy~2Jtu!HAcgr*57LSVH#EMo9k|3s180eh@- z6$vd38R@6R7IGH6{$}AD&o-&Q{B(Q@x(-ML3gF<0jE1f2O;j)~L{?j#O2zOj2}*fM z5z9gIv+qL+j+e19d;?BYul>>AZ}aEgcUtf<4e zu(`esJzn;z8*7<6Vg3VR>C{U2i@C2Vok8$fMdS6Ibq{RzaB)orz zm*D*63!xoxSjMIXyhidi{<2#`vWRKGbvi^~iW_k5^)duKmwlhmw&rY61CTjVr_VpY zZea`KZ>W-z5g)JiG`Xm-v9xT4RE}`=o`i=@sBdo`QCH)Iqu0I>VllrR^R{1tot58s ziO4*w$inO(eTOB!cHHMV8^eZ=3Jcy!aq{B;Ckdka`I%e@#N}8JaY){sg@0d*AJbge;2ExU&D6DAtrp(^Dube+U z-ob*w>(x^59jf*L+iDgSP(zru9;;))_I`W<8Z|=WFX6TCD_&<_O%|41(W^}r#De8B z`I&qcexOX{NTU@SRgz&cKWTyp7J>!{r(Q3Jh_wol_M~Ul9fX;TII!MMDC7eGFt%yW z;^vVjR*7zERQs?Y4AEN+px*``e6%4tcbfWTtC8VAkuA40NhRtNH$m0%d2a za{&-6?1iMC(>e))VMg6Z6FEd}mS7EF2MbPkuxOoiSbj(OTgsEX?$xjzS;t3S=_-hx z*w>s2EYG%fZrls2ok&mws74R$w*uk3ub=c!;K;9diF9m#yI$-*Q z;vZNjD>3C&Ej^vPuP-QTKb!Kd*f(Tn4ssfOv6q-w78h+5CYK+6?0<#d)<@VCX1u8~ z>EpPt9XdSkgMTZcwRXyZcn31Z+I8lb^%hb0&!4LDI(Yx(oLQhKLzNJ{UmuDj6suv^lU;R!J@ z1=EI}GpUGC<;BtW7q`0&fXE&z`i;9$kUoL}wLxvg#S0UeEY1Un9e3iE!?S(5mnorD zN_i`%8i=~XKQ;FP&c*y=NJzJ-P|HQrv;(!(6IXXZUgUi8v_v~PdZ*b~K@odlx8Q0a z)9miqd<)jaSh^%Bhv=s(tP*3oz=u-sTH2ZEDk`bGUlVc2^t+0@kz!BvoPJjkND>-t zzxv5m=ul8dPlu;JS$@d^a>2+SWo}f?8oqOj-1pC=4bU>@+!*oPh#;} zA?ZJ{Dw>N2Ms&D6O3*t(SmQnVnW5i%j+&(6A022p!Icp|^#p#tLeDKc`BEk2JcvkK z{)@qqD~-Z>3RUNhP#ZsS34Ytn?IS55M6N@MyY;RYUgR|lO?0TEjHKYIJXt%j3) zNk?Cbb)aVyRkF^W>7Hqt{BSKhYXvFjv%SkF6>ZWrQ~JvXPySA@0g%8ylcK>Qu+I}- zn71p{?N@%Ig7rRpzTE$yrth2W;Ut+qG1Xtb`OoT@05N7#$!5EG3gMM)F1Z%A)IWwR zk5El6@`Gkk;UIv5Q5uZs&L64L=;*b||HKa3BV;ydqEC^m1vJ*Lev2WLU9hZt6hEcN z=-CjBdu7_3zv|xdummgwJXcX~-}}&sAI1hD<$h}pH4cAtv!xdR3GL>|+bVqY`-gRN zEH<#F=V^g>(b4u10A=K|pL7nh6?A>duQE z0%r*V2%+yZ)64o`V^#Jq25W{);RwkU>!!*}GR&zE3oNEP47{R#@68RWs>}a&X-U&P zuM(`TJhcodRFMjljJiAfcU(00+3D|MUUQllsAuXK9zIxdB4CyXjg5sHsqmuRcNS>3 zC2Bek|HKQLFxO;@?(8&SE*!^jnrdcO3_M_AVJ_%BE{^m3YU{5){k~Y^(}Bt0lf9-= zkfaf9!B@slGx}Yn7q(K2K-8i@Bn93H@A$i=5A4Q^$HIyI48%1EPa9cBGv|HUSq`J(A#Rk=E~EIxc-FIJ>X({I3KXs%UnBA zQ7BnAVoe~xCH@%;9u~gW-CRG3F*C<6HXkwK)kT~_(spcF{_?zG0s)HBGijnQwd;|o z;o?EjT&iW|h{6w;spjHmsL**8B+DFL>$_H$M!yXOIS}){x|kwufMLVvsmy6@54Blx z{}GDcPZ(qjf=k3!%De#kRKgxoa|>2Q3;820Cf0h7JYt<&E4+7|pB(1u&5!>5vH$tY zbp}at{?F8>Df&PzA4>L;@QSlz^w~_O%WNBn1fJ6hY$=2~L%dL1!)a;WbNmm*mbRx3 zN+F1894g+#O`4a>FHJ0TCasB5ye7s4bV(ZTuYRN^_A(L>>2$jj`Aoc!E^CKt@$>K5 zk;E*iq#k^4aEYRcwq*~h!Rf_aZc^>>|FVB6aG!VIFuP}G2lbQ|tu1W65yO}$@fq@s z2q7v72Fqqz3mpoT-aH1OKC>rODly+}g8Zsj*dD#D#@qSvKeC-)Oboh;%UMzmxK~bw!jq!A#mAky z_c1@87`*_yJo?Yw)StgcKALK28n_wcSyPc%b8)BfBlxOP`6KjwF;njOpnts%uEKQJ zFMg`|LPFDbN0(SQWluqZRd~Lf$DbtemR*CZOVDXoXnlBC`5WDuq*w$*5&x$#Y}SAl zM7@6knqnA=C-fPo2M1$oAD=io*97^?>V)_9T%SiWgcYhFj%Q@UnlzG0!V^JSwrtB9 zuX{9xvsFjSGJ8fr51URi<&wHga`>t9xv7@shaXE3%wi8&?Vr6&^jSm@4IX;GjV>zx zw<%wKb&Qh8L3OCdx!As5yGmloCHz^UfkFbAJRzZV`^)*F^(|aD_>bYqJU7YAOl~Fq zqNSEL73eUDiRV^!&ZnBwgPXHyVp)Z1|gddr>7_=)*R{tJ`7ue zrXk;~H4!j|vodk@JCnAsf6<(aUD}*d3K?(~gec5OQ7w-=AxDc*ju)-JvecKHXA1|r z@a)Y6rK2DDU8ba$enwnaCed@5G1+z%?Ys})Z|v9LMN$(Oy$ePEx8oCLxC)Top=;|% zFW(6llf8Y|Hanf6rF9G;VN5hl2x=da#@|?>@+!`{>oO-%*zpvk4xy)=fZyVu*@HdB z{o=e~I7CBi9-7#2W!Y77BSyQgW6(8Jm@Q}f>p_=6Vx5fFpiTUu%y0&^I|483NvwTx&pZBDiTL#9C})Fe@vHm>{2`|I~|^$ z8;U4yT3AVnadM+pYXWLL@Nbj9n`hB<7CoM$cc0~&GnaNwdm41HV)&ZUSe*kb+%g22 zbdHBIaL%hB06{@T^v^os$ACsX@(>NW=qf4Nktdw2=%ifEk9KrhiZfZ{PeFgfWSSN2 zjDth>+$}Ns3s~;YSmBWyIjrlJ*7tn!qJSIAhFWx zX{Nu%G#(gDiHkI}DE0QBatz-NFmj*0ef1Bp)d@aBl8}o22YTo}G>-PQqg!iub@Ni< zQt^JFqGZdxIW(<>w|dHF{ArAhaP)i(*HJZPm}vBIiG%Lj#a%8FDpINvV%_JRo>Hou z2gD5k&#-B1v^%*y8+;#Yd``qr84#Iwh zLt$y`f&N(3z zd96)-y7I0}CN?@6hFUbWTO3i_Dp*tZ~y$y+K$^r?;aIxCY8m17$vy8ub7@w)&abjC_i5okD{QAS(w>q)Ob z!@FRBp(GQP=L=z;uZ3DW2Ti)DqV0m7useKe3jhT^2PxGy?$z&vwbM*g(b*n(fF1W< zeZ@ETBg6~8=djCPUxSW66|iz;;8i z@fo)G7B|>xKwuu;Cn7K86ZmS$K&m}rgF4pC3t4O_p0mza9FiIyA4B;*Z}L%AHdz%y zMQ_wdOk)UbF-;bUQg+8GCN*%m!~dU16Q%JMpgQ8#y1})d#@(Wr~hI z5|gE*A|)*>?~_=$hMNK|ND%yIPCYE<&hEFnZyq?r-uIbTsTz)Qvv`>pP1BWG_NqAL zBgfyD4tMF@dLov&U0b(VMNd}X+Ps5Q=G%de%WK@&s@oiKTf?nOd9U?>;T_lq!ncjD( z_&xw7dhF3tl13<^|2n+HQK<-;in|J(^N_+0WPH+rvRWf_!N9G;q;8=53kLJ%ex*j|*x-6st^yq}wRQf*&tf6CEcWlQ@ z@oIxqngAJ-(cb(pOZlT}qKu*mP#F~coa~hQ4Gk%&w)?;RUO?M>a($OJ2UL~GMa`sP z6Mq?MCDbJ>sj@CnxfLV^fWSBH^!l_g=&jRFissDT<>7C!-Wo}34u}1B3^w$K=AK!- zco3yzom{v?_xqe*F0n76Qdv-oXJG z0Jo>1kKu@cm37_6tr92Nw=>15WW00O-MMV2IrF(phOVH zjAq77ERlcWgY^V(UwjV>(QME9G_ZYrjgfT^G#ARSOHJ$02%|mvG zM#D^|eFho;msa#VdeR_$;5;nOc3uLJOa6~+UUs~L7YN*LEKzGR-vcz2!k$t+(WrZ` zAFQ(nD<}&E)0^@++fSP&zW7U6JC$Z!ep9fn?oHZIh&tTq1hwy6 zO+#Xq15dDDM@NfUHl~6dS9&ggcca0KBY}7&>E(7pBzXUXbu+f;yv6lf5WTsKv}%=n ztL5$ACB-PZClTgRir=4IIOV=&A~Nr1(qREAgFbU(l5#&!xE!HanXvj$^c?sc;1o@* zdH_iY{09r7Fqu?ipEGZ^&{u<$$eKF5?Aiq#NH0?B;v(vARH+SW@H|Ep5y_n6v|;GJ zy3qXRqZ822(!(d~qF7^sf!@YPRhUxh;^O$-+SB|J%1bkxpeOzlQ1&rytKV4okEqh zxI`6mI4xZzSr;XcQlZ^$1db~^MU4c;)G%4WgrdG~RkBhaZO&yha4DJH%4UeEUj1+x zkO8!XOq<$WUyNI7O1JmZ?PruEqOm||DEq7b<7vYq2@nUN>lhT6QZ7Evo?dy;a^2Eq z<_oDzE)mW8@FpA>1qZT|?xQpMeb!6je9AhW8N3Ww9ztr-X-!S578K>3S~Q+ETr81k z(54wr(2%UT)CkmTnHk6{PlsSucH-h7G;&yXvW3^@*)e>8REGDD4L1cbCurbbUT&pM znL-_t*H$XZ9|FZ$+-g9^gN~R}Qq`ACp}dj5)KV9>d%4P|X@9{B>;82akPY&zi@U45 zS~fmM+Qw5faWdPJp_92tCiNKZR0I4uEZ;LC1f;lubeLybSw5k2pu5Fid6@@BvPE}|yR?2ETSj;RHE&2ER*!YrUVy2pwN#rEa zH02yltX7S;%*TUFA#OltT>h)1!ff@F#wwXGC#3W7A1{Z?Y9%U`H7Cz#+@;4i2(_F< zkEdAv5&CMmL$4O(5Z_X5kjK(ID_!%G8M2apLqq%XNxeDJs3mTg+n@6Nrl6a9BtCiW z17Q(j>PtKy-|%H@@MyPDj}|{5jk!_RrVO+mlShzk(yPe(kyV-C_4BOc8kC7-4|_Uh zHvWcr{OHq>k9dkvVW=Ghg8^m)vuw0BKm*yT?zQfp@=+iOQdayXj1uu%0?^Ebb5w;a zDZNL)m=YoSLXY-p+IMT+w&Cy zw1fqvlJ4bq7F6AOPY?qVVl0z`X^#Q*f4t4bw2*Z^=i1bBGm12EZWy^S+fbkMxd?{i0l9%N1vt@X z^3@*qwehHG`>vB>!1}E~C7iOb;4YNA{;j(FIT9#44@x-YRg_FY{5x#I7?KOMW88G8 zVS<-1xT}JwK>N=+fZ7az#;=>1HK!_|NceJM^J)c~y;A>?j+alN@Jd;y)}|k{p@J zoaVeNzG}W+n=^N&UM4E9xPC~M*e&~Z?UR~v%Cb^e(cbx|(51+|_}TYWmgX4wbPJKlS8 z6UtzuIy4pC4IurhRKlFI~MjenTG}Y`phK*6W z=6B2?jXFKGn<-qSz{hl;?^9{i1*(rZ;Re;%pq?|o@AL4RxcE01`bo=vP?O{%&6J=N zHQAB+(rimEIZuux9+Olwravy9G%8CE+`PD$)<3XL>HN# zdrjnq0(5Bjz{aRJx1qBn#H#~yVOH!h98^GjruOFNLDd?G0h~&+F${&!m8?{?&vN7FJ{?)_@18hWFTYyr%LeIjsc`QrR<@ia5(f6I=elJmwSY@F7q9{8Lq3NOq zmuaHkQ&aNq=7RVgpkft}xbvvE__+!KIw^f(X0K5}aPS+6U)D=+KUBl>d-sX(vzmXA zt!*;pPTt-U(5|FV|5RyYkc3)WgddxpM1U2adgD|>arz~{4rpZE#MGweG*1WSX9w0~)1 z2ReymwhSBqRlX;>D>P8W5KY=LyUPPM!UrdNUndv3j$?E(*$;om6*<74>)SYP*xAIY z1f1AkK1wLomy#!<4Jr99-r}WY3%ajbh|SNu$^f3BK#3Kp$^p&QN3vCQ;~i!=a=L7w ztQk}@GK}9~ZsLA9K!n+UqPPz3G&`s&YOt+77y5A=iJO&x1|nh&Dnh-~{hG?t(w#{cWax ziYm|iNiRD5p|;BOcV*g$tG8n-kK_Lr6O=dCYKLG}4Bd8Fn1QccC0j1n@ zVl+fs{hJ5!e>}3A1p@hB4Y;p~{IJe9Lizy=BXl5nHc$1Ae5_tmZAvr!fPU!CRA39np-!GLi>rXOBnNd~c$#G&-l;<0-n;nC5zc(d8xzCv~E z1aA+|GsA@KH z)>bUq>X_uqF6y>J-hvWg7*~~!9y8N|1UmjbLQp*luG%VLI`ai#c07~}ozT(}4I19C zgNo5xQ#qK-^qz@=l)TI52M9eE5ZD(ZayI(&$$)eG>}^x)(&rIl6kPK$LZ|2RD3ii4 zsjF&8_^9@qcpgjt8_(|DDkitwk?tvmFJ*9Cb}{~HDK5df{G}5|%!y-Lo7)_mKva3Q zy za#>5}StW%?vaoP3@SxMv(1ziU@)hznh^P*cyPCZz#KvhX58gh%{H6;xIBh{Mr%3!Y zx9c0!fu)J(Q!rT9PakkSLBM~MaqF>w>r>st&SSRE)P&QSaoNxp1|ky>@_<@(F;%80 zx{z%wFN|;Sl3Pl1arSjcy8(43Pm+MCI&14%3&V(zq)6P~xy{svRfYZor;F{ZFq=m~X%e-X*|q!w&!w9SsRafInWM zXZQO>v?4_FA_d(nDHvS^=6;(J_*p5gp`<-8NA%nE??$kMw&$W|4|fSYT4Efa@ZwEK zuV%?EMiOXec@3kXh1ECK9P%HTe8?JQNc(!LL!vJ53hr?PVGP*Q^T2OE+Zl0$Y8pnn z-+ny`++Fqg7;$&@3AR_RpWlHV(cs*|E64Qe4L#vWGuPRlL{RW)W2=^jawp%fi?;O8F=Q?D5md=xJyck z%2zT++cALRmNh5OY`iAscb)rJ=J245(=O9n-o5l51x`iiS`@hYung`T9Jvv;Uy&v< zv2DX$0WuqR=y462g+!>k&Z?0$6Qth3I*+?w$VccdizIf%>)7--q4-F<0c}OR%UrDh zrCSd7YY5!K2EtHU%BME??sOycoP?B=-Z{Ybfu7BWhqP^Rd?X|>7P2rsxq82J%fa_)(Duuz znU%icpY*%C7uLrK4@VEBsOy)yMPe&?Z**SoLdClG0^Wk+&1gGplGGEbe0~z-Ig7ABo;=x%>X#rfJudcAELQ8U4BvYd){swE zql{r6cXI9Yx9qr=uLL57NFuv8y|5w1KyPr%3>UMJ>L9%KI%5ko8)7bpMM9 zUbT{}0O;QXnQTRdy`MK;LAT7*$$45-s4h0{@sLhhcW0o*})=#n8?Yb z0ltHarCjYO|2hWyo?6HfS{^>AGK=~<_Kl}9oq1S>wIDpVvTDXkXvn$S3zIz+6;Go> z@3EEAiXgSmLg^+rzRZ z+Z|lqiIv_{aC`w9&uR8pVe4m+%?OdR}pzZ~+57K?e#@W}IWfS^SO_RdLU{K`SQ{-8~jX?WpRv>sE zhQ&2Y&^-2Bocrp}MH|Lzm6>+2+!>!eJ2V@7Ng>{3R+d~6frbpCHu4Ybi=@OblveH7 z)fw<;*{9cxOktkS#TSp7L5djG_~Mu*Gw{S$g$oT%~6r7-GBVoj&Je^nd!jKHeAwukJ<3^`c;=?;?FKt_o&b}5bU_)Sbv_Kbq} zul}o_!djIkE&+e7q%J;3?f+7{yVOT*(VgcKa0`66aB$<@zO=n3MGfY3uaYG6?>X%T zTn6s$#)!+dGndNYgb-iFp3a}&MM{^qpNL+qLszG_=p+ngU2aLr9N{DJ2Bo1xU(=vv zc)%htM7+K2^v_iK!T8mzC35J@ztQtr2sYnjD?<#E@IAncbZ(2Uum6)F!=Xp3sOY^v zS`qYVu|3Og7kj^06KUpqIp7jRC+<8Qy6S6EetC0x!&W}m7&91ngD=PBGc+-Q*6+4& z2%WF`ocG!8yUSk6x1K?Dsft(j!4=S^$=*-z)kbMkj=e!3CJ_(m)aby0tIQzcq z_Nc$>&DFhE@$pLzciYfmx9I3P&ktAk4tP>wFjiL9Th0Cu@yLkq+U{=8IrdK{e+yzM zS0dCh)bzpjbY=JR&en-ri7QN-Um z3l7>{&R1M|!KCvj)RX7kVz^DXd{)#X4F$0zto{ok3Lwu(uc|%MV;Kd90aAy92AYWo z1`sd-txD=oe0;ZPY45rW4i4s>u0YP()?0n_SH4sHs*yZ5-$%<)DyzamMzY4oaY$OVQgf$SAW1UQHXwltHJlQrs<$R<*CcKE!9As z%~Wkgqx0NF!up;M1X?fs-Lde*k`-g3IZX+uhH~<_KscZT*iJXZW4iB4Yy5p-QXc|} z-@O-oZ*v_36-zns+PCRlqO8_@R=y89`^##|o?|{x?iY{|e0(#V#HuVHd_PuQ3?Ftj zB74~(KE2X)NIah^b5!AW@%!O)i#WR3Savb(J7{2FAQc0Gd$F?qa%W#6N?+#Bf9mj znn9TktGVwLrrj0S7s?CcMEqt!o;~e@0VnRj0Kv}nAN^40?0+z@Y19HAB;P6qfWQ+J zxYBb&=wuu%8fyi0HUJs_ejN$gpN;qjfBo)W{6!`?IrV*to_^cN)R@}^pLs7~_U6;t zw)9Kng&`DIQ1I!)wqeETinwfK$Mun|ctFsL7i4X1%1NpPiC>@WDI%{f_va(9_mV7- zoG+TBf>v!hLY}aMeC*hHXO+Ru-*KQ2ZNVoB#WJ4VK#>-gqZZw}U=aHLD0N3d0+ zp1WPrxa%-=q?V|&s5a=xXqgwr^Sn`F)@m{Rzv^;QdNNb`;T)lHE9UY`TfF-%=$JfUzv)9BrVfb^BFCUJHZc4fVqm=J%j)lOX^b}ICx%5U*{HB5`wVJc z-@3VGM55947jHBg8W;?Xjm1Kz9lIY-j*fM0P-BD%m@$J^!gl+Gk$V#d$kCM$42=H0 z4|Dt5XJ?E7xr^J-IdmyH-Q-T4b=AAOA`x4}9=E z1C~6TUOP;4symomfQ!R=2u2$Cg(YlR`Y!)^%Jv$!^?V=!0|uD~Een}9c{H^myWvp& zqD_KKXg@u z)i=}EDQ#&M-KZ}cw#33v6d<@;nHA?NAeDe&!}P-rmcV#rcPohG%KB_3(iVonz(-ho zYM@rKQ@&FI{V4fXHr=?Zw&i`lpZHYhmb_51TRNM~0uoywOk8Z1Z3)Y_{gMwk07X=^ zo$}x8?8<)bxDiLz2VQo7_)Ci1NI+s=r6T*FNaQh?3Ep~`-LUVCyqLSvJX?a!@9xbZ zy^#dSG2}JU(%*ko2MIL?F(MZY8!zX>$~PamKw0&zt)bqtmlqB$6=Sq#sn8XNVSNI^ za6PX;Qs(i)?o{5l0C2oxU7==d*Oy=U{hQ6}^kgp%c~vu>aJ}4tgh59Oo2#YdW^eOv z&wt>;Mi0(GOZFw!6nB!Esm~ezIB%+1&#R|~L>Jz@K6H1n0E7H3yc^r<{1V5Nnn20Ed z!WCJ5m5>)1$?;Aspid5sl$4OOU=P~9@A(hBx&YLdWT5KL30?pLf6lX|yXSE~q_7`V zrz+Ce?%omK;hVB^>I^grJ`gD4c-2zVc>G{6=HM59`b(wpO_a;p!Hsqu?|6`JDznFD zTm>p25Z6E{jbme`*m-q-C|5PCsw`oE72~e=w!jOJ=o1NMuV#RF%_2G~qNAfPKvx^h z!x}jCL*Xsm#Hu@Q(A$kx$GKQoXiQW1_q!a)J05Es`x}Da1UEXIta)+kdw3uo;`i^p zeLr-{C{*#aoonD~5TUI9=YKbS3-v(Oc4YWZ8``8ZkE^O(te1wiHiH1iZ~Hp7N_+M~ zI3%SXk{tklD6l6^7Wd}94gXQmFD56oGo6K+IyMTUAaIvq&x^M@kKtnRWkI`uhiHTR zlZeo_+r-aJ>KppOI@i6Aq}_WO#8=CP`A&(9kdhfQpWvd6_BV6Zk)ZD0o)7B;Y6n?1 zy7ejIFm+SY_KZ%=*@nry3a-d(eZDD`XDTe6veZ`v*3$b;?hw&6bE3AS+ioYW<)qxY8r$)HdU6^X`l5 zSBi|FjLhPP%CO+$K_tb*H4;wDK7-FF?wG;9 zXWjp~G;njW-z{Z?A?Vb(wevg2cib}Nys;qvax|`x^B3bkb~qqS-J;s&xdY^$75pK- zPnC`N_|g(BzGoSuF<1$+G0kPE9~7onFVYDoqy6?j-6y=-;=!r|N$@>T{G#}ENYC(G zo}JlEYitVtPHyRMSIo@qaieuJ;p9t_b8>zR zWXtPWUcTw;AAs~^I`5_q2#*a?n(?0Q`LLh|*|vw+PKg=Im^=Ui#XOJ&B7d0R;_}?9@$mQ!h(TS4N0QFBe#D=ixpvEQl)E9u!nZ5J;pBbu=o_)4E;CLr zbxRD?zC%qYJBa-!LA{J2O~U@<^phL+GXu0Y8()I7(tcc6kuYV>PDhgd&HwDlv7=_##Oo-{!KTdUM|KJeCf*xovC8NFol{<5{aWeYd@JLUhXV@U zL}kegoOov0`EV6i>IzpjyI7UloBEG*L*{*a^5Yeo+dneWL!;_g$(KFS0?Ac8+0Ux< zh%lTTqNwuy4v|goPb#ZjKCF)>R$;6u#Msy+ zGuoe$lYzhECZgt{7}VD7nQV^%-)k;l6!#gAi_z=HM$|w&S;$0a6m<*LER^mM?0!K> zp(~@~b<1_L0Mn{|&8orc#IVn?%LW&H7%ubPVg9^4ZW0dO8xD2}=#wHME8m^Rng$%Z z`!zF#J|+8&90b>4ke6apZD3qQU3&08!$t2tz(o*Z$8s@t6n#w86oKJvWf`vxDnFH~ zOIhRMv6S2e4z8vE>--56tZ85rDt9D_e+OF!uS~EAe8VC2GS`~(vs30f^>znPIa!v zxD@X%mah&=f-XxVK(1<1fnA9HMs7^aaGUS=5k!>5?NN5|v>>5FQ@hvnTbqkougvNW z&4GmgnGX^^l4)zcNy=%ol5K%*-lT-3)1=gkP+~7k#Sdn-=xIM^%5qH?K-}72zJKQt zZ+P_3VTQlZ<&HsvL@bbz?Dav6z~phj=CBJr_3qFSaiq3OtsUJ!!Xp}rbEd{LeFP^U zdX$i&;hfX{(j&ok5qt$};){?J7WPkDs@fAL%gHtKPa&*roZy*B%GH z#e;gHD7P>=dgQ8T5^#7=n;4vAeJ)7s+?tKzl#ICd3i)_(g-Vo`?)3BPlp+5a5%F@Y z_ReC7L}ua)VIxlq8l;)aXZg73Xa!90ja7VgAbO-yQ#Xzm^BxnQXWyHfF>2QIoAj5& z5UpUHV69-%<*=4MMXo0_5FZf9qG)!+8@-%}iL0Q@MX$5iy}*_SF@l?q7Rz5zTW zCY+fc@MI2M(Oqbzed-rzR-q5!ul5+%Ek=^Qr3 zrc5jx_n30m;~|j~j%I79JT>~=)IoC8ZX z^&tqpN<)N$VrU_!9`O8iCpwjmQtNgs%70gg@BLZDb1wbYpW*s`XB-M2=Jq;gu}yak z3gy|P0JO*rZ-?NtB30dBw{YHRTRo9yI*aDL9h9AYtVPvU?Sc+*v6$$TFHmveeKs=k zU7Psl3r5}CP3$#KYU^Xnh)-m^rj%lIbf*;~!?y!OuKSOf((d@`+vs9w&RO<{B!uQY z04VP>z+oY8YcYS2eQthgAH3=?Q||HRUVz^nnfi^fDF|zCoBilNVfMor{hlzI%8mT&7HZO`+t5Y?(39fJoJWQIEkbfilwO6&hGdI?{ z)h7Zp_k9O37}JJ#>qpR_FlInaC%;Z7hibsS@wr)$5pKwX&aPMa@x}%n&fq11c@@Kp z`Ln=F0Kp!~%jhs7@P8^ZPJKW$<#7IZyL@I_PN~53Q|13GV#e8U0yDXmq_O%cE9r+q zjQ#z^qE**SI{=x$i91*^3lij0c3^sRY<i}( zC`GQ3JOpyh$ecFv=SyDQ56o@)e?AUFz3#1{d4*UOCnH;6bnp}*`j7PZP2k_YR3vgd z@7KGrb&YNS6o4HX+~JucRxEu#c#ToJz=4?IjJXXVfm~V0ByJ0pq{W}!Y{F5C*E4lb zfAU(~MP!Bm6pw7UWjGTi3~SZ#2@K_x%c_f=wrfqCxZE<#@Zj>{`v;!TfWkkUI}2?f z*mly%eZTp{Ok)#y-Sx+3E&K`@lE{q(75J}r9d7aEp#D1jw?~eZr_-3#7SP`L^}4?! zXs6yxM)00{SO~=rg(bUn3*rJz@&srQ%q3OJv?>p#fV_Z=evPV3@hZjtlDvUNy{xnZG4fU&1aGSk`P9uW!20wV#X#*!L^ zu|0#6q+HTWIi2b;y&n>J?~khKz-hIMG~L)K0-SZ(E_}$lx(f z_kI)L`AR zLcHd3el_Dz*47j0*?1M!C=_sc4`D{=3iaPOuWV3rOEZG9TDrjjpTG|D^7JpzJjgG? z(W~M~=%}YItNR@BVXm{ep;XcCs^BwY=6)tOdfXd!$C0zbNT5Q85V!{PV!cy39_HiQ zRUw__SS*z3-8?xLwDyMuD}(HhsDXLd$f^FiBmd1k$g%w+UPS4OSr@cIry7)zYU$Qg z`uM3?_wGZrPCknN2H&qB@S9*WWsxs`i>(sYiu&QcD##5&DCg|ibJ%peiZHE0x*3OR zJTM7GTV@y_JXLrS=%q2hg!d&CdHFgjJ(~%t-yh>YPA;T8#+WHPAQ;-%*yA5DQD!c? zJXIaE4Y|@%{;kww9L8ifXT1Z#^2-{AJmVgcQ4pqz{>){T??iYzHQQ`h@9;IQd&-S| z35|MU`+I~(NA)6^)7Q89&CXdF$O$I^E_)s)hzgjQDw~&Eanr|!PM^?=1U?t4vy1#l ze#=D{Lo^g|{E%v(;2w5d8r|Ns=itLx(cwCODLT>jVn(5_Rj>{cM8=`cVEYN0)DFd$ zsLRXe`AavQloLLkhtoo_30k7TPt&a_IAF4{G>JIh+-2fKJWqB0`k~!w;$YgH2QN}J zlKXqpLPtDDhgkJFzWCNaq}&|&0UM+9nkqO1CT;j5LY&Ji0_(r-B;RS!Us^v@sv8EG zZADR?ngi@FIQR(Ac(_Kgf&x{Gz?~?sVl=waa440tmoexucE5RhFhb}hFgV**CyVW`fXnnr#}5w;yyMTNMv4@ zu}b$HxmP=Pd?z1)p~O{4h4D0HoU-+MBp$bd#vk85X?hK5fzdvQmo{}*zbg+p^wH1Z zU#zL6fk~!v`2icQ707F98M!MPy3a)>yB<$&e3`}p+x02vHd&wsFkr1gyTZf_9c_U4 zPuWvVpgv|m#w9+5kM)HE%{D&(sxwMi<1-p$pCtSQ-{WTa>}H?2$AICAZl7Y7joUkE zRfsnr%9Oib_=M1tj5n>5Bwj1XSeHSa#jwT07x=8%PA|Yu-r5Oeq~bnby7rbs?adx^ zKfCOSyraq4*6|<~)mtSQPF(Q|mdF_7lezz^W#*9)h9JhoV>Pf-bCSqMpCYh&Rf3;q|fsNZ_Wg8!Lxr;9>$O>dTB0UGs|MHJ` zMF;wuVHIk&6t6y~@ycjujC7l0-Hx&l=sc#SgSYukg_S)@Hl&6)p4Zad zjraqSLSFTfOQDkB*7b7ZlgoogwM&gMAbnSW^zCG~NxG&w;$<>EuJP1ykc-*^3BQ-B z?WUcSN8IV}d=bI?i(HB;(2dhX`qn@&H_?4{xp^7>iA9-ErRDIwy2WnPJz<)ztp zGLAt=+w&zBMe?2*SLv0Vv5t}7PD$u&=*x!jt5YeXXAgMaxI`>vI-%F%B9z~S@ZYcn zpv9)_Nk;-lenSO2-Tt*$1XeAiEZ z&JGr@peIa%-V1-JuB-LGw3X9NL1&US8#-MBnRp0(+zlopcEO{_*xnaEF8@CL(y1}< zHFv`5ePQuT1vjY4%f&1{rX(J)R?=`Y7j|^7^N6taL4`Y4m0ek15JIp)kR!mOGA=8q zn(Yqg1m=&$zkjMc9Zi#cMP7zuP}Qgu4nL&Qz`LL$(wn92Y~)w30z7E6Ju{=cu4v)f=Au%OK5e#e!Z~ zpDtdp$BK>?3|y0GfEAUPuL{%BU#v5yBmE-p=0Y|y`(Zkh_vmooyk=SeK}5%ZA*ROh z$|g{lKJU#hv163@Ql)#>zlBKx)r$#F9$&`3DJz4pC%M+n6F2B$-cz9+ZB404C7#Sb zeLGDNyGgop!5!!BP(PP+^*Kgx#;3Rizou2rtY4!?jRV0y@p*O6Ql3cXt}pA5MX52Q z5rhLq)8r(Eh(5=~zHxGyoi^m!CjrP6sU*Al^q3BC>z-6{Al{3K9?R*Da{~ z^rX+kKd+%mgmX9NW3^APEoKpd;m)UO^ujAV2Y}X4Q`~ku64v`Q*SFP&4BKn_x{E*k!u)G`e*)wJ~0L*F(%C7LUw}4o- zbH0xaXSlif49f6RWUt|g&%OWyC_K1|VWZaJlbEM>vPZM=A^?Z5+^b&ozvJ@;NM|N7 z&)9>Dd_a0eXXkW|QE;sfzPL^M(5J^3muFEY@_it_7T!FA$53gduwX>gJ3?n|i(E^~ zM%q?q^9HmMUeF%MiNg2=n6s{tITVsm>DS26G4*|5SCq4@^#;-t#8|Lj8vyq8L(WV0wjn1vQ>iRiZ(UjjQmgX{tT3wiJ`e$k;dX_VB54Jzar5zz;f>ma5pbX^Fjfv34H0|a^lJBW%# zG{b-R#0*K#NoR`b`tm|Ov_EZni#A8M?(L=tXL!7ce*U3lk#wds1)!mG#|vlO5cV7G zq3=6s+T=lhofYp3AUSwDVSg0uR{(sX{)5{PpNydDUVI(;4}9RlE}nq}+=&+4DbGP8 zxzF2>K#{D! zWYiVmeG@q&Kh!Bd)N8lh|Bv__?E|$U@55>G9*>}DuQWyWo@b2022#p(g?8;>F}gdw zP4iVSTybjG<^HKz!7V6{pDL2q95+T;ARuk=Q`Z1?GLN6W*p4LS`U?|`W2a}(ZFGLm5}*LR6o z5t{BAX%v9rb2)BOU%3ivJvr=g;Sm{zgXS{r-G+*k?fOuUTwb0>6Fn*~obyl&z?mI` z|AAmnr-O2Z7vDfZc(0%e$^FXiYQ|0~CUUm3|GXKgOT=@oh0chf%yh{p{n8?}*CrU8 zh>xX74+=-XHTsgNB=yaZUNAJ{{RFFYY7i>jsVKcnv{Oe0Z`J5-z z9HD zdqgfC2@Wzo?%sb=;coq5&B5312)Zl@^l1aW>uWw@| zM=SgHFpMkclpAGsW)wKni?T zJ{VO0=~-aP?3)wj4?WCA{3^s9oVd4pSDi;Y@6pkX5&z!(f;~l~x})>kAFx4%Spc|Z zvX;VrTc1VO1AaW>V|-+BxAMFEx#j#`wnZJhjthZrGf@0&(N-ZNIOrMQxX$_fhQ7%$ zOeV(lJBvL1xXhx9^yXw>jDOsFSg-G0;nxS)$0#D(RFT4MeW?|vL~xg-`i|VpLCU7G zU4TLsCi(mEaDQQcQcs$;;a<&2P6S|K?i~*ur~~IHF!zeuzWesb-Qvkf=ve*63NydA zr3Y2e9M7ck)SHBa0QDr}Q%o?MtRNQS;~EVgA#SF0R3S+2qu*|hbb=aI-^>F3#}hgH zFY>Va#P+`fXhsdVwnTi#lcqPDReo{Jlskwx($-6jcD&oIA|q}QCX-zM+7gjiV8OjA zGu_#Jr7&pTuDZC*1#-g!Zkg;HH`gWz!GZ4P{fDT+LW{*4Mh1&a5dc>3sCQ!BW*$K( za8?1efFXqh@_cVM--``eMG(g1R&+xkCR`{9A zJUmu@n=k)ecg8AAgx2jP8%}M`!P)!muAP#ydhgtz$Ly^Gq;AP{TmG01tVm;KflcQ{>a=s z=f}ze>S35jpKPv*a=)kl z$XmG=RGrz?8AA!Re6PIq#AhkkC*QE*8($b&-! zzv~n&GfHTuaUO9~DWj;XIS)15TWfG}v@L8#>4M{(O7#o#-y8Xc)S2R}#*Dypt5?)QJBR#YzyP%F16XzYS-tV_YRi-<2-kW(36w66g|nJeH+ zO51%(TD#9k0=4Dl&5Do9Yh{zBXv{Xxi5Wgz@>)ylz4Se`iat|>VD{%27}Jo@;duGy z|E<{;25<$wDoV#`UVXp($h^_EO_-H5|CP{Cti8UPjRg7lz0+0GUC4-o9TV_z7P%Mt zfMW=?ft3-7KM-Qyt531lUm5ogwk+H5N@7khDY+q+*`09C{{)2ni}AMrn)l-Oia9J< z@>=N0!OO#9_b@FX-1Tfkc?<&z`^+}Al8Finsa{L!>zW^%o2Lj73|10@0W-FZYj0o(Y%Y=Wovgl~#C>row-2U3& z9T;+zilLIEGO=QX-(Sa*R%+@JK*qvs} zgZ79asuvqf2zw0;mU;5t0iK3>KdDhh)Nr zG9xiTj9YvuJ}FP!=DJEIrJm~hQ(Eu9&U!NR^I)(MH!Rb=*>iPCk&dju#Qlb+IUCu~ z>x5vfb5FMCKPv?y_*Tse9IJadOj#|IS-E4b?7Kdcs{Gi2H3~5n2vWbb4R&2{K;xL* zyf{Z*@YNqi?ut2ox5cp!)7y{vJ1#ibmQ^sMh~4sn*P}wP?v9|b;ifR(AWwg0^ux3F z%FMVh6CzB!hWu=N>FuTomkyu@7lL^2QFQl+rk|mk0q_Z&*;M+B3$dzzBwQqp654xMCTI+1v4_ zXQm&pgOhfLVU@)01!Ly!0d-#cYd$t$LST?Ozc>BQ5b{A~%fA9G3gO){-&zipn5D4B zT|6j!t%Y=99y!9IHw)Xws}@J`NX?gt!Q;w159NpL;30e!;AtZXlT$;>?#x7n+9>Ha zgg)ic_xnW>%h?peEZ0N$TE+9ehf&N}TER0(VIsvpd9u^eHGe4z%9{6f2aLGH`q);b zdR?9mlcGMJ%6H`$Q)!lmXX5dq8bXN7j=vLh?D6K zPLZ#=5?1=VuMpW>5Zr9=W6mks_O<==&$2>f}pAg}JpFKB`&55&fpX zhCBD9YQ4?s!EVlXaR+M=kf)yT4+jQ)NK2^1yqpSn_wO8$w3)Y4R1mb?BmeA*%T+I_ z;Ufr57^A#ybWu%Lhr&ifb$qN|Dz^ZV;@dWM-l0#^u}Di+hrJ>`vhlw=do8F=sgG>) zOL)SUd0at~yG%P;xi=V^*3^`~l<6uxy?VFSY|k*c?+-Y|CRPvM<##n|YyNI8o899X z;YMDK=e915T1d5h zkznGW33`;5p5lOiW7$g=W;C`ay6IXHj{Li^z~vZ+-HE$heC8yYNW^W;9n-jqVd}yv z=BF}JnzP88XXf=DH(HwwbNUMd)Vi+XB8JIK*o$epV|c!IC3^j-3QL+Zz$%9jQlqkO zfXCk-GV4=c7gHww)XZQFXyv}==aY`fyYE!6h~Xyx9<&BCz^bzS-*e(FnJ|Ft%QA~iAWi7SvgV#V!kZ%u*WQ0tGPxRF&;|&_R!eaJF+=qRf z>qD^Rw3F{VKVMvZS0(RtpF7Q$Y)(Td*`lf^oUQZFWz?&dCQ*)+0Gq-E6ES;=(4RQ5@9M^!S?rng02tRXTE9=s`SJ1{X*hMBB;W`FF1ZMR zWyL}i0@i`z9ZuORP1Oru*G~~y|Fh8SoW#Xx7ak59?dhHWhcmf z8+FsT-vN{D6dC^ul3DWIFD3>Ez#THb7r9@I<|<+gL&CE0+T!j(6gwWY!iE_rI#h&8 zI&;3$hwu1jX)QZy{A;U=_5MXiVRwZ|&&_Ki%rdy7&cA!&KT?swMz$IcHB}~9aq!B5oO)G{A30?`&Z^t?)` zj1^}1RfL3F*o#n>gRCdF^(UT?NqcxlSii2Xf+tJ~A!vg7#<*XOj~EbV6nK8m^0UX_ z$D%vb4AV5Jp)?*7KT6#Y68Jhg%w(BoR2s@M(Q&&@_03eksQ4|SC+|955fvg0!gt6* z93DeSSZ8keI429DIP z&w*NVev$OQa+|~iyg$n&<|E!9WgxhIkfOK~7ytqOD`$Ds&)2(egdC{J*GKLxON{}X zA;`wzGg{*fa%@zGbZE{U{nSv4@M*e+(4vTTY&m=>Dns8i_KxrFYWQIkvf(r&Jv@+E zCxabj;m}ie#|v7QR*`n;<=i~%5*1af_aPmwy4vSMAX==9_Va&mLbeJl!C*Vnf=%;~ zN5#`xV#J{_7~FCwj?YF_ehQ2uiSz+A-`rz7t89_H>{XJILH}H)qlGu@h9(l|t&!N| z+88g2VDIxI0koefrQyhj0>qbSUX_HV{Zzp)L$)=3U!RP}#544zG@gd3X^#+_D6}I= z|2tro_mm2k!82)E4jT1xSAWYSRfjDtKYX{Vf1S(sLLp)IF`O%4PatX9?c$+ixLYP_07O&KKk1S>_-g$_q0L`)>Mg%~G(&kqcXVKk|)@*ltW~5AWHA9;) z#VKt7enFamo}1>^^Yck0og+{v7O*c>juQd#R3WB7&jl-vq8zK06<%JsN?{LbPVEBJ zi_4^JXX=apJD8x&MW?|n#Q~ojnIKIJGj(fT>ikHCb z(=H=h1<2Ejl(_s$Q{>!If&rhA8^2kLv7mixe$JYMeFLqxqn!r`7|wdC z1cd5(^XadMn$E=_>UR%_E>O)^^D1mqcW*S15#Smoja>PG0u+Q1uud4slOeT#??sHc zOa^a9;lJK&iu(2+S*nOj^2W;b$CuJvJChJI(@pMw*StY-`d%Vgv zYSQii)0i%#0IIsfPq{zP*B{3zs+k*jnRq5ajc?i9`-}#Vp|m^%l=Gx7+3K7c*YJ0A zI+o@*SE~lV?psaan`id}&khF~GG3K`Wp$HXjh-$jwdnLbe{v-0^s$-Dr@1Xd=WUNC z+q}DhxGc@rv4&(pVuQ*fA@B7IKl~r0lKJ?OJ@+I(Kf=30Ey0U|6AN8H^4H(z7jgXVOUBO3Nje%@%loDu{Y~rF z$t1@#M=ZTs>ku=>qp|Gl;n3eA|5ZXsi`#w;wl^N+R^!JxV?VNRZx~9NzogXe4f%W~ z8!nE%8q=e0ojs0;yl-k*6YnPDLo~G*gA{?_QYvyA8L51N!o)eb_4I8aeuOHEbWdU* z>xV_S_l&QG{N~zbxI8Zja}vR8L9g#cfgY74k2&i}yX9^$E-Gd!)PlY4@Lh+3#XR#3$13KD@GNnh`o2 z3J=Q)@OrDs_vYka=p&{yx;rlBBzLjO9gEx+pBENV17Q{yFnI&p)j92_Qa%wkXue%< zE(V`T(US&Gd*y~P_K){)HU!QRc~}@Cm&XRdk>5zAN*8ro4fQTRyi|o=$hBp_>#J71 zz~1suJ&qaI&J&dL6E$Z&mlnpx2qW`I&Q?2**>}99QcRgOd%>cvgAP=aA_##jEz;A;8hXEmDSr$O|ZQva(iQ@ z%wz}u6-3GN6o(_PqaU$uL+q=SJvO4@uvu8`S!fgx`FP=g9P1W&OU;DzCJ!8eQZ#S; z)Hx9xyDO+(y&u$wj~@KaIlwWJrXcl*Sq^Ey?*ty}_4n zv*RQL$YkKk_(b9_Xf;Mqb?56Q47iu88BQoge!rlSj4FDRa1Z0F1JhK|J}2y)6!>s~ zN#{#um|DZ{TeMz0Uw+Z{|d zosI1B)ge86R$hmm2O910hcBnKw={Qf>4{C=1GVD?ClhoLnk#Zcp>u-`|2pT9>RMwO z?cOATVDr0(9o2TH0uiEn129{pB)Et(QWl_6+LywvK=TNNx^c=c@-f_K%WuWKc^X>4Q}3l0yq;rQ_u zqq;7cBU>gX;gH|^v27$=sXD& z+EW)jKh(3sM5s}nr>S5A(}*O5q;#fFk%(vmv{ht`_2;0H;F2^_H!l}HPq6_?^||ADU#LWs_Eb!?FbTLv&AQ62_UjTTvR}XL z`!1;2EHyXxr@g(%_mns00C{AbX((qseWCZ%0bpej z$F2X2Y|%K#5YpGA8pOD)%ujq1Tb3Q|pJc9>pA1_`*cBgUmtV$WQ7ZEW`JzJLu;jauP_I=d$xOM~rMH;2TcwH6cN*L? zcKU#Qe!Ah&IiLVR=M^uQB>M?$bZNl1upkb0b)W3)uIL?Jii&_wIp2Y;G55sRYUvMK z67FkttiC)<{iO3bT{8G=xU4YAsThbVdya(x z2!NPh!%dmdIKfNT;tdI-QB1Zn^mniG2!`u@uwihv6`>8WOGd)!R-d9PN>@$7Bhh0v zDzh|4+39X0gj<4^Z&PMl20xXQ?=y)I_}pvi;Xiw{>s; z0GB_NI!$qJy{=&c&gW+_FnBN>ZhcE+!|jR&JIkv+dFFB{rIBC3`NbIl=d`qO!M8h^ zgP9N**e7;g<3Nl9QW1yE4iQEV0tPJY7`K@7pbkeOHr%!9 zsKoLd%8ZjMP~l4Xb?~12^8WdP*B0O9+;Dvk53GFm&H3aLjF`3b`7N_B+Tf@qlmo<; zgU#>ev1S5Z5wc^7ycEoHLQ@AXFcE+=fdA0$MG<$d-}j7Yz!WKqtSsr$pOWdM07V6@ zi+JvxX-)UjfMuOpg2l-9qhE{u00>0Xz#omG|CTbAgB7G=zhS zKR^meKKR4ra>|%2)!Qos&Jht&SZP5W+~B*kAKU0lDI{#nEjlA2xZJWEG*WtM{vjfq z^8xJ}u+qE{?V%(U8r}_Gi4sJ`h6BqsEKl6{QfX;ZA<#GSUl#IprI^u-Sufo1mX!** zR!~9_aS$qx{1XqbQZsB#Osg3nIqyh+S#4N_-4Ko9sJPnz^8h78(;@TML;HsB-B--i zw>LsMz+M21r6%S;-QRq`acm|o5R&6^G)awj$j)LiyJ?Icyj+`j&plFb%s9BQaPou* zV#B2o3${_(c^HUdRLu~4z}oQ2l^Z1G2^?N&RdAX+!`ee{>8bwiV_P&10wnI+{H~** zzYU-0Qe`D6vXhVAY<^{~mvj)5zP0JYBm7~%uA=J!?{dFXTS>h|1Cyy{Cnxwga3 zb?$<|k31m_|K-}gSXNw^96j;{`aLA4tNzO@&ITw1X_1Mz~2FSXOk5m zn;sSM>7P8C?pi(RdT$fJ9UEbQs7Y+oJYK1r^=DWmrBWfBBJ!uJQu0hKmj$CO3tychQX27GF| zguIefVrI_{J-1nl&38wdj;2{+Te{zd0Tj_1kg)&HF?>Vsnk&Tu`X~Lj)p{Q9Fr~5h z_A<2dbBc{bNbk$P`Gn{UA^UN8xfYI z;U_B=IvDXxvEzC7vp-*{))IO7wQ>EKx%UmJu9vXL_u|FQU-mA;_d(n9(qAyYn|wH` z3Z=w(aJ;_b0lcH~dQsr)B=E&kvEBw2%na={oV8a`jwgPOW{zW^o z_Hbpcrj4A+<<26?mifow@et1g{RKN+jP7I5xy8M2BoVs~%(N^oZchDw;T;S71;s>0 zZjXNhiyUY$Eu`C~UL*LI}MmBdML&=WOAXj##>bi+|vfDvY{4+a+RzQW3 zn7qf(|D#!c^oS|X(?{aMR87i5m(u~EWPmKjN&0)3&mChqrYI>vjR9xgK_}M+vT{c# zt0<07GP6|}2~`By%O1u5oKxhiXEfhvvry^Pl#y9aXBWqnM|As0*!kqC z{zXvhJXfxMQ%^?j8+YcAFa_6ge%R}K!Rt6~>6FH2TZ-?%T8(bdX0zRDP6UPF&kt20 zOMXi=za$|Ba4D#|05Hlz%|;gb+~dL9 zza_*&!R=fGu<@~zOI5fZs*T5e327Vf5G^ezg(c`gdu6-I&HQSWeea>}o~$o}lrYxrI7UAGmvzdl(kH75`hZyVTp<83A?#VBQ<4W2ZOh(?h>Ajhg2X>tn^-FkBD()7s%3fUdAWXOleU z7g7ICP$9Ti-8+oY<}J8sPJB%?@y)3zbpLpVb(HTgkSYJozxfFyqr@N)5Et=jnA0u9 zLMx_w2D^rVz($4#%J*Y798P?`*!F%#X>#U5LC>B01cIhy%p$^XPWVg?zWX!UYUtb7 zr+e~MSik#55EJ=I3z^z;2Hs)7(lGNLflsSwX1wL@FN88oFyWP-`KTU!;Gsr;*I(U? z%Ec#3f{CH(AyJAp3RPE(4QB(+vDc3vtiJEdENaqMe|MUnCtDkstY1m2&$CUM&(7)$2=Ty(=DU7@#I z&U2ka_qL-P<(>z$3yS9~d!U8|>RLt)c0TuFwAwY=)m>yp`o!Q8t-dEW+Tx_flr_uQ zaZt+3sp+XD`C|RI^aN`>5K3h*RVBq6ti$^G9sZJmP{Q0+PU!WF07ZLMYUos3{{v_| zi|GH}w`+2ULOYUKC`^@x1s1IbiH9llPjlcP+0=8$?Gq#-w6Zmhgp^xk>qE*Ddxd(6 zIbG&P6*xyYW_=&LXAk}v*!9Yg;|)ioJ()9>c2VWXp<4?ZG-6*andfz(6uO)HsFuEf zASz$3TKls+D{d(BziY<1jJndi*`BYOEb5kKT_aVTf(kN)@l^kbP6MolNuJE5-nAD zx~+L0HamBPj7%fweunk?B64+@nL^%{ zSNN!eOH*q;bV8q}$J20${qN&J;E(!`%$4R0Zuy!h@~@|6LK=nP>;u{K9CN{MEb=$4 z%1TN6*vW4FqL5Y3-MNzx5V4!fDL%>&p5^*{gZtfEGZgDb%K;a&yOmh9wK(m52zaj! zPrHy6UixEFmB_Ghi=TVa|8M6Qi@pZ$-8IZ5wo+4!}O*_O?(Nf-26<~BCiCda$@bM$4{J%VLv(fqpo zX##KOF#g}V<$Zf{n-WXbfC{T^owlPY4tI(nXU8ewskgMyya>^A>{z;dmW04q5u0dj zGLbA-2wTKYQobKa#;cO!a&gO<;Sv7=_2ci?mR%Jiq{&b5yXao$5#vVC)ym@r8hOLe zztZCcjv9ErdvRc;8FYmYnj=ZiL+?gJR05YN*t% zmOQw<S=AB)j@2n~*Erce8CZeOn*I6zPw~&u0_vR${uf@zd0bwS99Wx|Hot;jc&I|u>WC_g`#%^TYC;7<5-}9Rby5g@)C7?T|MO>ukJ8Un8Zs@6ivqdyOfyNNP-g7qFT>A;VdzEwzk%6T zMBs_C{;s#qRcz1p9sgaSGmFw|y0oEtwpSdX_jkV7?Jp(~ufboB@;@|9zj`4o*NZhD z^lixOT6sR;Sna%-sL2k!iuZ40l?j(MU`M54gl%e$82J&i5nL3gXxyWC#tJNdS$|~lYWept#Ovb!3EH$eD(z+Ll{gDP8Kx;Do%k`_{e4YkH88=N zKl}~N^mo%kAN)EE7!Dj-5b^pWNXYcSZ#1*h_V8uvfhfJWFK*W5gqibco^hgal?RUL zpH-<)Gicp)brm{Vc9yUrkUFa>@A6;z>wiAh8iary9G636E-jm!m<;MSVFAK&7m^*F z$L>t&iJePCB4Pw*VOl&))dKcAsnG|MVNb+^xVrR+bPm3_#-g2YoP3Ww@$BfX+c17x zvbtHbcLhcjpU>ARxb24^PqR>bb1MeKb(G%f@-sqj@DbxEqKlzKC64+RUsg};R))kf zV=nd~*wT5=RsC_C-AdeC7L@W7>OX6xR(^DOye=89ocD^!xBsP{_|n2~kglFCh82P9 zWkgo*^!4sb-<`Cx<#$YfIm+gmo%-EfpC8j5ev7(hFuT08I~=r=Y<8L(ZvAO@2xd%) zGd@4qKJV(443(HRtJ^xpYwf9dA7lzaZ;_BHij5U%OTS3R^@>p7(EyJAEH)_Gar zJclXZQ7z=E+p+%l_x{a4h6R@gt>MFhoBhww;1KXjO4hDy%W|(xFCE@FpXrr~v8|e| zx&H1{-VVlMjp?iiK*veGXu31>Q`g@Q16Esbz-0B@^C2p6Ch(o^8)@wkV@bB0`I|W8hzC8Z{Hujc%{k9P@oO+jHzg41YT z*2ULn&kvXa3%Bc?%9|!{(nThWmr|;*EM|T?rxCoE@@CeQV{7zxGe0qG7Ac(*_Q_xoJeIeg&L+WX8k=a^%RwdU_bw;i$5-_dr^sg487 zv&N=Q6h@WI{*veIsxu&}L;?f2|0VIdMW6ES4}=S3PR334|IbViaof4quNW||rg}bZT9}D=Q`u5xWS3s$LEHP?zO2WERU(Sb>ZoAvYz!0 z@3UmVE}SaQ>u+aNT@P)ojccxZ6drwtMnQt@PyEebEPt|p$R>J}Yu}x(>V>Xfd>)I` z{)f)`{710`!l&OgJKG}psb&ONjMtog@(+oTETEkZ7b3NH>H4y}-2>KGuW492 zUf!jaokqK5geNI%@cWVbcp=mnR3+un8_ z!s%n33vM2y^;-uerKp{f=dr2n)p2ylCV|A`7x_8-sy|g#1LOCXcL$3n14e$oRnO-* z0g}H_qv^9Ie!T}oxIZpb?QHhQ+?~lieb`*gfcR|mId)uXolA&cA%*XNT!v*rs%zJ| z-f7R%BN7Z`-iF{5IBn}D4%&+#h}}SrTt;&yceg+Ml<%XLz}8l=_RDUcANTLOc6OC9 z?LmBtLg%n#8u&{aHY>P*!i8MqbY~szJ=-hO*Ly)DHjy>8{asX*hTjj}*kr+a-ks+{ z13#xz6~umxFR1i-Ngy3)qZn^Oh{;6LJZh8F_r+J#6Eb3X;XHW`-Z^Rt9}rvh2YMlO zb(!rV7(*cvgU6_9e%R=^5mPreXT`<=3lYD!%rX49y1J_G1~@z8=ruWvBsbYZQI~N2 zUwBt_Q5q4S{qep%`5RLZ$gSTa+4Ao!5x32wE8+1>2`tFnE>I8)(@2=TB$R!ARbqC! zE_RpY{>Q10uF12!u%#ICo=~! zHhzCw>a=G)xj*PIfKvMGo3uZOoysK?d)#d~y4gRJ08d1GdhFy9ez2BPDp-%L|DZKF z9bx$wCV+n-EGxAj$th7ZBBQZr$-Oa{$wX(l`}~rUQdq6!45eYP?w0R7Ha5oL&j6PH zcXUfKaSJ`zdC4sws7yYwtO9Pdym9N6;|)D-3UQr_OKN87a55t!BbOfXI*Hj`m*Jm| zr4|>Yrzy)PLKl}y->E+0zPcP=BJl^+oI_pU0Qk;)wAum(mc3|MIElx1oPF;c+YnCg zv#>r*{Na?VTb6Fn?cwbBsf9hnO>DNQzd6F#)lqhNx&dGdt~V1^0c+pR^Pca)3(&rl zsBEp+x|y1qlJ8ATZ8w&zgL8tNd&4Qz6{4b|Adq0})bw=yd0WM+y%|Tb&{NNIEc3Bv zV5?H(yz}-+!0%3?3;*GUN|Jo&4%+q1w*K7dzSVL1;2Rb7{d}RR9p`ytqkRh=WPjrT7fqPqEIQGwL;;Zj z5^#m{=Ryxa0so!TEq1&5nW$sG%^CX6aX``NCNf|O*gwPhQ$pp*{B(XQ0j9ze{=3wYAoD84wWrKZv=~Y|{^0%D0_J6TfSedGV+7G3ArJ;Grf9krTZ1*5sjX z>esT$$D{?1AKJooobA}EUBw}DXyO)}(m8=r%K$II*6uNd6ZDs_Mf^@rK~lLyPZ|Q1 zC1I4pTh2Fj6^u&)38wXIbth;2^8-OxVo^2~k(LqoX~7ERkUoHrVIB8fki#_n`IK0TZTN&GRp>(B8+ z4RmSWE&*_>d?&s+-3_a?pDR0#{U&I?w(knXdY%b8TisiYR(-rT>b~?5J**U|z3kk{ zI_-r5_Y-&bi|weuW7l)&?D*oa?=2t^-l6KLyVz<`7h>f1P*rvB@h_IYVKg4LW-Oj$ zAQ?a0*b52r28ldh7JL)G378Va;Pm_rTR8hRUCMgyy^$?qDWr&`UUt#92&Rab4pMPp zmS`cLWWA75$Z!^Gw@Fn*w&>wlo4h%>c1$0QUNqbM>_o7a9)$4ZUHk$F&hEu48G}3O zIQP)sxmjbks~~HFtKi2}2?H??GCDOZytGMKwyB=jfQFdC#c%8s@rOxxE2VZ45l3Hx zjbpj4KL$ExUD2B$-ZeRDy-BaUatfqgnEL+XN2s6Me{gEarht4>mIs4N}3anY5(N+uLKMW08gmUqfC6_{`f1KH&b3?bt5+nShN( z9$1Ahd86pBt)<>CS*UXlJM{{FlFwm@^e=rgK}{fI`Z}U-4hGE6p|e2l5S(juKM8&xb)grM8t2wHRBWs)e9%AbEf8#P>ODR^pU7#^XOBxw#5ovK}ejf8mkYg9ed=feen~wlNma z_l9ba%2~o5k*n6Yv}m$uwI?1COSP^PX$P_yl!4&=6QK!^8l?hf*JWdbi3@QFCbh|?waL=fq4&wd zuaGJNcIw1$vQYBygZ4;FdUihSB21D_ENP4ZtjPk5*g`wb6-YS@qqQ{|J|tai4+EhR(>neP{(9|xONGAo7p zV_X#^(q7?%Y~0|;GRq`iJDUs5S$#*5NyJr!snxK( zx{6BwZ;4NF+S6em?PdEymR&zRBDZ1CZmcijQhYXBQuNGNfiTLbFTtz`m`yD&wi<** znhXVr#N$-6O7`iP`-J5`wN-D=2}bieFz{LOq?fgHMj#Lk*k}dnfR)*!U?v1zZn?TX z?hPC(H=*JK=E{tyI+EW^+zv>*6+LU10%#bam&#as8I+hxaMPp(1QF+D{U7)TJYG9^ zSfl+PdD5SR8S)-L5Us2+89lV&I2doCp?D7SM0C`~-ZHXEFFk1%iLI>1FWHVk9mC z_$iuBl^~N!eZGTysRBA@nakinS`)z_ZkMsNM(FCxx>!btkri?!PUUvmeRgl7S7d~Z zP0;8`H&1+bsV5chXIr4fEsEhSs?eNvr*-ZodP9P21zn9R-4t$|f*Cii_P!I}OW5ef z7NCn51%$?PzLW1S2+9Ol^9U9GJ%m~|Wy%_ml0{_kn4-s7 zoEnfPxpXy&*;yeiiys(acA>DB>?RJ-7p&&{bmUpVX5`E_4iVTTu(3Inl3dX$qfVa~ zAeIc_l__-6-qz+D+9VDYd!``^q{qPpCIgYL-N~F;=k&L^LS^ZI>2P?JW>?(;(y}8X z_QV@aHIlyEGah2zM-Gsf6*Z2MD*Z`z@L$6rB~*D=&7>l{-OCd+IC&1=#$Xzi$e;fT zd~O(QNW>5 zd~vQWN;b}a0mR$TQWq-h=#?l6@!)X?r*PuSN{8saF)g$U-1E}u-9eA4Dd&_vuYnlX z^i>m+oE!I`B2QTTI`kar(M}HVm%U|(%{anjr2HL#$Dys}_RfSIntEt{mPY`0Snf6MP|&N7jXEDjZ!Fys_K= z0z|*9yR90u3y!x1$SXqnQgg&Qms6y%`~Bhl{8bo9|KGy*u}cW$?MU9#G-MmMv!r0m z7R?F?pYCja5=zuL*ZwH#t4LO|Cq|xn!dy2!Na!3f7GSSQ?A7Y%G9Y!B@XndS0>WJl;(bTCpfznf}h@CC$o}~1uH1%Uz>N&v&3q<(> zk5%&d!u7hJGkk^NrS$zjwxDCYUY7i?o}l*=&=Yc{io@&KGB?Hmg-l4TwzizksN^D4 zo6{}E5%ybN&9?4%NK+xH_Sc@CBr+lSLPh0oI*#^dp}GRDq2;{L+ow)2t6oQb*t4_9-2YNzEZ_6oGS&X=co zlJt`otY;NQ9;Z&c3Dmv|qXIXa_c>IhB!Ex3Gz>;cUz%%h(~}Zb!ar2@+dMd};lG@g zkCjrPZJd7jlhCtr(l0KzjDVLs9n;B9fY>YLnMkxKz!$Jocnk@Id7Exhd2CX-riV$b z#>pJj>fdfRN(%lCx38kS-dG08C&GeYgAJ3|iFa3@Sp6uSD-99>Kgo%jY3r40kIME* z(@(tARA}Q$DNQB-JO~U$p}tNS$!D@qy<#vsQ5Nf%Ml2q3xh z<2m3c6QbdLtr|lejv>Vo!I!lE>1CqYe-cZ7Su~<$^;RCCl(f zJNtbUH?Mkszs5F#KxOG0mm%Wu-5}juY^_M7Yx-s*$gkcsK$ER?lsI#Gj`aop;ghFS zH&cGStjMmcWVk*K9Fe_(XlFPb{%wD5diY{3vs$Qm+1e+_=GJY zP%Sv5kXf6C0X;xDX{|)y3LU`g)57}xyHl?7VHW`eyI>+{K6P@%t4w9;O&iQEMfPs$ z7ZSD{?OPf7IddBPUwmvU0H#)Imkm=M4`s2!Ps0z+mp7QA7U~si=%v^eH=lmuAE6<= zxU`R%yQG}txFbtn==7!g%bwjG3Cal^ag+CA6gJ7835^Awht#2CQB~zqT$YpMjkWG) zjToVILKpA>li7UEkaNhClz&#*Qc4y`F~Q4G%T zhQ9a!7yV6RHZOIuB%{fGKlyPmjf(I~W*HU|_$j!@d`NdQ9>TcUkERsIo8A?Y6PIM; z>1ku4dqPOD4a&)?eQ=;=ztd@tjZxlah#;r2*NhA`9|}T-5`El~2*FPJIWZ`2`urMM zF`vT+?{WikGO(@i0W6UVWQLswW?<#_Tdn>nEdUpU#HC<6E-=A%16Fgj)^oTCvZhbq z8@;>e{2eNe88mnjK@29b@{Ax)gB9-TQ#%weBQGmGD~%m~f8FM9tYIn;o?`bQv@rDb;&{f23pxsDv9k1CXL)vIH)`eER`Q>whV>&{z zPYBm^8niDYPJvb>+QZm^#MJskEE9Aw!&e#C|Ez0 zs{;6+?32G;5-HJMDHn7n?2!UUEQvwck3urSkkJ5X3H4H(H!*zX@^mu!N&?cR&qbqr zu5_AmWv;uko;41(dA+>$zobMEJKb^@w3zNXOC}2_oHJ9eoj;22dq4IM*1E9$jr7tF zLLMCbpZcganf~=P+osNMJ|j4z(k0L+fcUy;+dr*kef;XXE)#GbWeXMJqX79|_uQVh znNm#wt^3*UIVT(2^kUtSZUSMz)^bsG;A>JM%6cA*)i|G6ruAL3wO+7ZqY)FYnfc4o z?q3Kn8}Gg%>>4$EfIW3kGjRvJcilV5mu&H`&qQ|JYSE9n!c}~WYpH-l|nfNVzijv zi=(Va=fBRa;a}_)c-qhl9LaxdMc5PNKUv{Uaw`{_!dZEOAa&WLw~_J3GV}CRYd2njB5qC8 z&4XRyI&xvPuQ^C*e}ZBlJ&2=r&RVdIp4@=vD6Id*$gBz2`Km(_5z#vZzSLGZJ!%Al zP0YhoG7Q9Y*lew~s@jZ>yRHCX7fN2T>s$XYp6iIO&OPo9zk6JsGsF)*rx+isv~^Y* zG?V+gOte?3sR*QkFC9frWHbv?;G>)PJi2x7bf^E9RNLBLC>S|=y@6dHfVEj$f=q&S z+8{LaX*X31csQ#sGt@A{iBhm{6KLkqbyq;(jF`s5WD&dQ-?%MvK2vAjG*NT`wO8P^ zf_%)P8sQs*cZ&C=!GjDa1vEJBp{JG&F+KQeNQ!KEY)iVnshfbhH9GGkBU=)Ru6loM z>|~Th4?e7`wS5r^+gFnYK%W1wAISZ)C^)xN|1$0Q*?ltuZ)P4LvnTy2)NX4abx>Q! zR8j0T|541OE>2&BFd$P-tfg2+yt_iVTOJfJ$v79>4$l~wTKILc3_Kr^CrI%UY3~KJFe;Ts z3{?zw+cQTV(`=z&#KQE>ouwkWS5i$Pe83|o=24XULBe;kwjlScO^}clMLf6^x|-}` ztjHdUjb6H71-4P2VO!&1@Q_1@)>kFLKz*)Z0g0?bZ}olzlB(h*eoC_;tH7N-I8mSS z+B^q75Dx<2w}0?2ZwzYOhm5qDj-DRdS59q3-uh-B!%&vZ@#}!9=r3$_NpTW$EhDzj zGt_L{^hRx%)}~sJX`u_DYD|>2mJE>k=0m90lIxxJK)FcFoM9K*l3ZhxX^%3_k6=1N z^{&2uC2n-@15d|#RWD(}DRf4fe1FgBBUvYIvq9H7`&bDaC=Wb;OS94HuyK#@WiE zc^RJG$OPp0wD}QEf5B7}b1MmojyDaoW;|mkyx{IuYD-g|ve-3v+xg)}OoHKzPj;-- z`lVJp6GqL6@UFZMoHh#W%8~bjv z6-GlQ;`kcAt=N>0Ho%M*hEi1a|6eO<1_xnOvbt63Czs}3+s2-B#N7AUWs}<3`PuWI ziGcJ5W{ASFp;cMjEGFKowjnhgGeIJKIFTXTqx2|eJBDsh{Li(6oT%?6Ar`h(DSZ)M zB*$D4NSgDs=`bb*ePtlcK>Us6ZyH)LOn$TW#-Dai1|&GB6_%VTFgT?06L)^-`+spM z=FP{$V)(|)5JpGYjfz}g{$;+}wznAQV>N?X*$GBpTNJQ=C3`UMwPGGPZd>`9tP~NT zPO6&8vUPTE`V14jcVfT2YfrK2UKlB-iYd2Gi*9aYGNc`qRe&M{r!s!ud@E_cFQ)%L zY@ryI7l9CV`Y_K=ar+}Ji7ciC`(+Y(c1hd9bq1T}XfwW$;%oea+LmtsG?_FTi;L-q zSkY-hJMdR%*rTOV>qSfrytR$`uR1fkwI&fG7823Cy3LIVhXqAkF!*hlaKZzdO@bDd zlfyu34d{rPm)u@Brm*FSRboBChJ23r!UIJXwf6QME z>i^RN$^cRr70q`?{4i3=vUM1!#Q3`Xf8W+_>=0uC#=hU9s8@apP_cPLh$k zF>GiGDML%J!qs9=3m->F(BQJ8Jj0Je_fDGjED?vb{Oy+KKrhkN!sq3o-UiL=_Q$gS? zNjI(&U$1sp;(&e7W>C(C!cV%xU>UO^kH9Rm!523_GGiTc*tdKx%YJ+QOT*M&&D(%n z5N#2@$dEF2EpgiS+aZ-?8l+4Li)rF-AnUBIq@f%Uz}b51#O6jk$>)=4aK;72&oDyl z&h+T{JBlB|c#$W?WpOk* z*q=A;=aI5#_=G6rzQqLXj8fJP-oP7tFU|dvgt+ps5Q5Ji8YSTPa?u{Sy->vFT=I-c zgBM6^K7_x!jipt%{3(Colkp+#p=W+r{*9^a8XtZ|N*iA0uHIjJmQbBB4~k7d|C)Dt z^G+*ar)PWA#zV@nE$(k*8L;_MSFNeY&L>p>`2x`WVr=0Y-bnvnE(fst%_j($3Becz zGl^RaqdY+$SZtpgs|2Re3pw!zS#fvf@$m>E;%kp?vN&_=2kqW%g1!74nxA`J)i;J1 z?!Z^AY5^IO1Mu1A0!wTWKo&39=akDYx7f z!R04aV|O4gwVDMWtEacs!#^KvYi0es|nOEk%6 z&q8nl6|x6C=9jEvlIWYYe`lxZ{8$16UKP+*gPiy6daFMm_6|n~4zzBa_i);Elp!Qv zbLlAmrPvO`e?gtyKp)^QY~DnvfA~!5YAceMUQ;GQjm%#|(W3YsjH!oMjpPb5i|MaP z_y_b6tsNCfbS#Pt3$1YJuV6v{mnD&Cru`im5gi_)1?--7rI?5`SG4Y%d`6XovgVGAa=kOItiEWpER#T_L`>NZKp=a#t%V!MLWx}ev zGFZt>SY8aQz4Srm4^a6)qP3N74ffXwJOFtr=J~RmoU_kDS2})k9<~Rn-k~ft7%<$> zE2rYEEwV6H1B@5{vM6#sRZ5oj+ZzJeFn;X@r=mdu=AZ9n|1A zYE{9g^W71!s0~ilk~LY7I^}noAPc9xukXgW{66+O`lUVA+3rqW{WspAPgB1o1{!&@!K_%)!rf>+2amr{Rj< zYWuek`YvcHE~uK*y(HQV-5iaVwVhh%isfxV zug*qvQA>$;bzxoXfdJY)X}oDJ(5(AY(&Rxtvf~{$O8{s@-C}j`pUrGHqSlsbj9wlkpOhnm8R6?Xl>(FckFKI%551*zw$Ynw!M8q$uWF#83Gt@e>@S~Ag&5+Vhyvf-er zVfBfLKZQ$vVmiFPHv1yL590gAK(E=TV#zpEuTU#;8xeQx>Bho`X@R*1=$X;Pc5V zS1wv(xFSfZI9vL~bCR0Xix1e%g{5*6ziUq{#`8(!;j7pX<3D>L zfMKy78v$Rf9@|AJG-qHgOc~ZOpEmJf(MvCX2L*$M&*y}k0^o?Y^2|}vTpH!r9H?$Q zUi74-ObYryVc>NqZBkzd@+zri#h?ml^$Ff0of7m(oo&XCb|+W;1H$k%hM^3EM_qgK z;7J5qB-XbJzm;tz2~SwK+cHT$h9M35 ztBliR06^HneVFETbJi|5q&w&hUnXO%E(cD{2YT4Nx14(%90leGJ^X|##qkF{U?vJH zWv2OC#r1#xP||m$-Azn#v_xQJ8&qOuG#e(b)$UOqqq98l`TFkDiYa8S)z)Cq z*FDQk$5zrQqh#dcZDl^5*6F3wV%cZtk%T!gwRhtJjXW`8%2sW&{Z+>aDT2^kh|Z2P zm+!frzO;01aVojZ?0EP^xmUaG^Ic)jRq)N|rgsqk)T#Sq(p}1sEVhOlx}QJ2LzeC} z_akUVuXeimX8Y11S+o0tF)^#Am8I=2Iij91@Y5E+kK_>(UN{RrQ zeE^;d45bA9*A`mv$(&zz8#Ay9EgA$=X7o!g28TA}?A{Q!8F1mf*?qugw>|W#7cU#m)Z%=X~$r!j^gAp_v*M1KbQacR%oGdV=&g&F9p09hj zI=XV4L3P;3YZZE8PYMzmOxa@t4S-ww-p$x#-$yk2E4z2;QmpnVXcikGL$9{}q`Mli zwo*bfW2G!Iqa zT-cZM2KIR2uXyl&^r8M)gnfMgMvII;Z?w(Vw`g>udA+Y*n-;S5K){}X5YR1N?Edp6 z0JEk1?@oj3&86|6ylR!q>{}-c{9vNgdvVP%+&J{PxAR2E5P7@-*2jnwWm@>q?+;tE zTfTpmm}())tO2B~K5fEvj3ZoAfaeoT!^eP1Slof`csa2AbYhxHCwVq-e`zDo8|9HIe1{FuwPNG{ zMjs(*#U@KWA)kxmOfE)c+^Kx?4P0yrnU0e~ka3T4+=K_EU7N8!7slW*JL{1x+{Y@e zJ`U7dgU!iilu_X@vB_~Yuigk4boF0$4BEP3TIVY$uOvna1#LK43Q(G8iQ-724)39^@uv>|hKLxQP^E^7uaGUhZwnTLgc7w20`RcW53;=^ zi?D(u;<0%Uk*BML4}=>T!U=+lH`#{uPy^?=IsXDorq5nc`g@CFtsD4ruDDLHH$#3?p|F=r3p-nR#>R$|nX&j6cJT zUjk@9#K?xxEYw#J<~Cu^S_3^r6pchf(=;vst{ZWDc^kFG$p_9q>l5--O=B{G}SQf@u{< zOy3m2!b{n4cuG22{19F|Ye88OE2gnCK3OL5?r{}RJY5Da2}yC>b8D+^I4&Ip;2f>H z$P9>FOJV3q)J5K%2Ht%~{4m0B;3$LNafk4}=;XfZ0I*dBwL<`E$g7;!H~HeJ@% zgb9YzJNr?>I6p1$&-2GP@7V&3tK=Jdo4M3!Lp?xMKR@suucEg3IAq_z3n1qYcg3eoRX|Eu!zWPSM1o6^u(+!)7`a9 z`zE8Vf2#EXWjp)vn%^4`ka!*()HPZ*k57<7Kci?O)x0!lBG1%`bwmix=D|3qCAs-? z%2|6GiE@>P#(N)fi_5p^?f-qH@H^CBEPmY3#YA&$p;0kyu}yIRn-M(<>WjvE=e)AP zlER%84JUn@p`i;sTWP;C<}5#!nMudohXtE%&u z>)L)kGaCfHfSqyuq{s{p6efk1N{EFlm~C-H;62FgnDe_YLnO&)U@N&}-d`GkWAJnu zt1>8@8r(`p7fX1wo~z0x>-xn_9no)ux01SlegTmLs@J@Q>9PsJd1Xq1Yeh zx3G)V&@&pE+`K>Y5wm1K3u(hYlvd{F!}fYvN5;DFrU}o%!npzM;G)<}9nN~Rr+E@q zz#NHcGL$um?ScK5<E+$DIi4{A1dzfxEU=^Xz^& zf7hP@VB^T7X62~a&q+{`lh4NzOY5$@E!3kkV}$5lsl#~fl=-$}Gk8G7^l3r8_Q<=p zXi@Pvc*tjY;z!%^V}0C5&c%B%?x@8BQ;D1ODo<@|cOtLUdBY8xO53Cm7JIb*Wz9AsCzK-He0x6Mb~64e}?#T`d4l3p)E|FMvK ziOOLMl8Xn!nhZ`p(W!E@;88@5Y~>bAUqNJnAhKB7PwG2z87z3i@~qBkCz#q6SJiVN~b8SH_g}5#4y8kFYHGaHMw3Vd*aeF zaB*6EmbX7BolCT&7+-5GS4+1rSQ{!;`Q3|tD5%F}fbDanBsw*B7DC_|3^l~|U+t7m z-8ABwOHAaR3oz8p6N^XKGT@<0D4-}{1)5bGmcij%(EpBpZQEFa8q7Bs3|>hDVy-`L zNNBmjrTuqa5?r>Q>up+Vz`5kWFd>YhciUIPL9$Y13aB{>(c=jSx24&e@knsf)#xj+ zS1tM8qtB2|^%x@{a1vp|s?uPSCQ0TQCNn*t=B1qC6%`l0sDW`zT$26FEcXG(;54+! z56mdNZIRu)4QJ4VAdAs@wSv~^C7xPQGg>va=gAQsfw%}3jvyBH5ATX*6SJ|2a`X!g zbrnxvQB-07*{i#1sjlFAi-|8f8OM@kIb160c-`3R<5xfnPR8x$h)s8_>FhW(qwiia3OA^*aM&$tHAzs zu*&F6WVE+Tt*(?5kvOO}ZtS>arBt~v{{hWJy{2|qwDkh?q|RHsYsmoYrTvl}11)T` zJ^r+TXe94#pbp@fZRw1BqA!EWdwX-LH*V|#0Hv)D;f1L3^ivu8%X|-R<8>Oof(1FJ zQ?;1)|Ft6ezvHweA+{)=Q1Rb=ew4oT+CUWHr@{H{`F0yNMjEd`N8xHlnN~X#39BO!yj7tj}CSBGFM- z74bo5dT$vQwI@K+4nFkga*rp%F50ai>((lK?$4!s+AA{u#=3I>JQ*j9oMrP9^^t} zg_(l4?m3?&zz6skZQ$*9 zXkE6BcgF0L@l$7-rLSti>%B}G1Axffi|dE-)pXXq$@3tc`oBX;%shNG#uZPoAm*?b zWAzkbi0m;NW-D5KA|341(tDl-G~n{9Cv?<)HfmVJ4W&*7)#cxMPx=0gnG=J_;knV~ zpw?J+BfTpzHvbmcJDice(btjL<4^3l+_90knGieY;(l6LjfbaXNoG7v- zotz%mFXy!nSB7w$8j00`1T1rtqlxB*x8-Lm__ty9i9;2O?GNKGSw)r{ZkbTIUvCYf zN|x3(eo`T4@!5Shg5Bq)?rw1H>X%Wr$}=GxuaCNcQfjKb@1eb4Fv@MEA@i5?y&s^TdUO8taiyj>VI&7?f0rH7qWR!_KRFwO29|677e&YDW70W|3(;ThlstP^n8cm~X z#G4QXFXw~wR<}i{d(n@>KQ6od5{$2$*J=5LAEw4nc$=QlgQfQg%DvLgwQ)nH#I!kV zmR~ciJwE25LEm~jD`r{hUl-hQv_D(9GIcHA8#y|C%9#rKKIrBFjNE^^ZFyL;GfuiF~00(Z(q^M#&pb`_U+rr^2SP8YgfucXUNGq<3pwS+5`UW`$+THoM_crUu{3% zkn7eV9$vgev<=7moxRwK%q|8g>{mvgZuACFyNsBkMp7vXS|8(%jmTqlSiLPe<31m* zIVLR(AJ?a3jvc)v2gc0J`nScooHMEy6QfDc9)9(94qQ)*JwSbhS;ey_8xOO6AJ$Ln zVrw4*7i78|kFWn&UrwpOX zOwsfUDk;*Ck44+?;n7Z&+7iB<;cE{DX(TS65T--A3#N$l{1(WY#1u#h^@Ej&w0x7m zj&r=B-F#~8VQHYJn&Yn55)K^em+92>Ay+wQo4=r^nmEGzfk6Y-dX-!OmDW5WYX{{Z z@6|9rK2kmqOxyT~nQ2~VZJ1uN-j+)xaM`=GLlV%9@O{7zO%N_e=SA6xT@=&L<=f(d zLyAp&CIfte3p*S}1^DdRG+7Y(W~Oy>TqWLjF1B#7nRL$WBnG&Aico2#mL5ousy2O_ zisb$hFMXm-&}gdGrMbiecHUv8N-))JsCnv+S|$mI{ykwBlO&$^+SVpC8^$~buevv@ z5=MW@KW|CBj#b!pB)7ip+Tzrmt-OIH_2f6E8{9NKoYDTtQ1x>mLF{KUjOL*kU&KwZ z#XWJfypp=ZgD3W3g#GPq5j;u=*y%7vfwQ{1H`n|2(_T4mG;x^`2@a~=SeJ?CmmdhH zXx;;KQ7oB)-W#kIj7AqxBJZ(X*PcGuE7%dfM*DP|wxh&3p%I+M#G-<1etUcy7(rx5 zSg-~<61HC@h~zwCTpaIpGQA3N&G}4VN@x+ZrNIrKJsQLQr1E3ihJ()yCDn~>Ux&Ms zsXE`1yqG`8t?Pa3LlfuwVE`*$Lj03oC;bi}8Cp3Mj96IfOn5P*HLRL$M0MyH<@0>h z(uP#cDerut#3{^}%=YQjY%<`u&y5Qv9dw2 zYB(>Jf3-gmq^+4OMx`ld%o{V^kACl~^?6G%KyExNT4X?Km&ql+WbvN4cGo`*;Y9?1 znL-mnt-E)~^PRy!6RYNj%)||ZBWusCw8uVD^prWmNel;mEXZt9nGl_GeA*==yUKn} zG=;lwU{)PfD|;?Rn2>)={gySL*GkyYN%w+aJJEz&paX}L;!AY(5)SC}ISvjg;0mvO zBo&=9$4?C{mA1MY*HLD%vhCR?;6VY@2Wl^c1Ktys-{~?mFA7u>yqT2!d_)gkT zMZ#35opj3bh`vRMZ){}cM`_l5_9j4}#*z^&-qOcL0!VOnWB&H6A&P_KHmp(UxShma$fnL7?``Gx z7b-0{=xsK8m)Yb*EJfICL`blQe%oGQ!P(AsU-g75YdX3P45t?iIq|MA=7elEyolSYiG@73 z2ICj%-Rp*Y*<3qJ?wv~2oA=`7T;~OeBXPJ0Fa=u1T#r%Z#(8Mc!36Ay;{%`Tr+1jt zDv{K0pA24D(2%+A08h!D0t*QVZ|hHzS~zx+zHYd*{&o|T{J4W&L%=#k#FQES_L zG1y%-D8#5Xro_R6S2@&u4bQ@@>STl?41k@g3k}=}*$AhVSb>QaZsQoZ<|c3JpT?2D?x-wHjicZS7kbGMz*=QPtV6$sf0MTuGP!j-gqx$Q;aM1sYaZGbxW!zw_<2hV)Jj)a?}%j-`B!$Tjak{;NBwRI z4zKmVPv~o3;90g>xs)E0S0E~TnM{9QYU;`-)kZ=4>*4kA+;)c?daUZ0Z@qRk8`_{r zKW>T~Kn&iJ@x~)c%9zMX-k*Eqa`8bMvAM6({r#>sD2lxwaq;DdeQ=XnH8Is!QFC?MifpWSj|~5s}7Dl7&t@B+trFX zN=vU-kKhbXFKr*VUofOZgA)-Hw{i7%@|<+UI2518l?WJu+p*jurumBuvnnxG-K!xZUgX^ZSB< zKANlTYI3JasuKGn_dGT|ZluGIG)&9Y27qylBpDn7m)kcev z$!1^GVgv`XaE)Jbug;*v!fn!1FY<};r@To(%u({qMBE)wLOwct88OWMqdir(fxkfO z7Z7M*J9-6cJ60k0#-UGpEbP-yt3)?n6|K7ljQzJ-RhaMkH_L3FaW8D%%76WKpKyM; z=gF2$e|ezrOU+}j7fLR=`(=o#q^*f$fXamQ#~w$D*ty04G~ zWzlG4Q-x}cav$bB0vb+23aX46#3IAB9z@`vV(Zg6&zY-_22HD|EUVSwK_}`AWK^tW zMA`-V;;Pn5D0R_Pgz$Qukp|Y~;{WS)+~b)*065MzT6uGwH=%No#}YyglgvBvDux{5 zW@a%T@>nXdnjN#^ydt(ni+QbVn%9~4O5rq%HW5p%yU%rh+~;%u-tUj!Ki}`~ z^Z8jKXX{#2bwT!l)yB&l8*>T{8zvk7q1|L611_C2^{h&b&1+Tidn5Kq9LJ~CjpX1K zP?4VJG2XkT9d^JmpOvdzQlJFv(JZx07UE0Gekaf?xw($Y9igXb1eHi$>5^y*h%t!7$2HeFKb0F z#G2yJhX5YWFbm|I2i}JxJW~|$HAwspfglS6J!2v7(?$y?5XJ~ukG0+ z!sFv$gYj{zyt|B32diR(u4PcY!j#;}2V%l;=J;j}gIUno4Rvxo5joF|I--^|9MDr7 zpi?_Y7S|{`@(OZE_peV%I=Pf=$2ON^J!AacJJJ2B{z_4mEdjDNh>DWay<1`OfM%u# z$Wz@tq)=GdctFT$ItROkhfvgjm74i@nXP~zEd%BD7yg5LIK4=C$W0r1E^RLN%@Yg? zC519}OmDK*#R>LxKnfnU&gs9yUs!2jgc!hTBkJeRF!pYw!hcQxoKzxH*;pCs@ar_f z_dXg;UAN@}cYvbDocN=qI<^U_Kw*M>1ZSl$!(v_@I6#S&J4QW`Yq?-*vN0g)-!xgo zxThuj!i}(Ws?(97Ln7ZUq~mE7kbVl>H{K9n9~eiIdqfaCgm(9wXT47a`E`|9ugnhB zExPppBtEX)M7<&~o7rG2M8A*9g|Vp)uf=AyovV~2!3*llhi=RHZ(X=d@1Uu5k)WP8 zQiUkhXsj0y_*t$UaH{i?g~Dwea!R;(B&?_*R471rB$wbQnSM|KadOudrkyfVq=S;D z1*i;4v(2sZ>nVmICV>n4OoCrFP<>_wV7!$rFGGu(L{m#_hl9Fxa557gvm;D*QKwwV zwmp`Pq(=v??UGOvCQT7rqxQfwwYNj`C9@Kv#U@mENm%1hM$lGT@k`-bCXQ79S$BqoPclva!tn$N&ktGT5CJ{yE9gM}stnMJ<;dw2iX|xg-@oSkPDa&j& zoa%%;h#fW6bIC6>@3beqye?*J5jnOEixt4N#L0#Taqd9i5e3$f&^bIlh$pY=n z$c3Tjm3Q&#lt{2>OG8VV*q^ipadzMcZXu`&%IOmu4>5VO8>ES+eHsP5l7jvr?5*07 zH(TWO%ts7oX8el1^a{jF1&Y1)QNY#ZwQ-zNk2Fb0tmgv5v=zqjb|25xj_lXFst5)D zS>-p>^zUF8OY2uf^TH@*=J43{Vv%~WX!DSQ+h4+$Do~Iu-r4F+UEPwpF; nua@G!0QNu0{{wXYIlO8;qpiVHE0bH5_!2i4?-LEsh|7Nf8vOdq delta 113717 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
A>KATI^EM*pm@y8K z_odLt>*~}*+}zh6&HO4Vh}gj#xO=#7=P-3~_od${e88JB&fM6zwQR%eTE^SS@6xNP;OSOIC#4#)>iu~NJcAmuce^V-FS zB%LO=zpJ00Ca5OZz5D7afPGNZh!HaX0t%WnY~y)|#I`(3HOmwi7Z*(+2~eA;W&;tV zU+8$R9J((Z=VkN^LDrK%{Hc;Qsmbd7`lT0gjD4oH$+H7PLj|pX&*LPU4m?%>=$mvD zIOqU2_0Z;23&5pV%uSxkoo zLhT$eA4W#vcqLUF9kT-%4nXp{>vi{l#9G`z`cvS{XzX|xYPfQfS#ixfm`iu+G~;$S zV$ny!5M9a_{+R)mJbaNO5DySGp~O@oMf$g3tw{VV<&zCy*mc>FUHIfH{S+s>kf0ax;eNnrmLpW?Di7mlYFQ7@?;B?xwP5gu9=@!@aX5`DY0}h&LRC3y9{!23q3}luI3{HM| z>7i37)ZLXj@8{*hbL>6zNDXiRSG_y+wVqG7pxIh8i zgZz|f!O9C{b)yJp{Sr(94e#ct=6E?u?G4Fdh|nY)_2engO2AR{C^$Hnucz#e z>vv)f-KE~!xzM}e70iQtw~^CW{pX=qMV9af&~e{KO}nMIdT@8XwuSlMR+*l(tYd$y zz<$y8!UPshF_D*IoFXurFvEk_uGbVvJUeT>63W3$W+SR%bXCDUELs>ZX@GDc|4+C~ z1|<5<*PzIcqA0G+b(!;de9*xSzHllwnv^Qh*rh&Qo#Zx|Ex0hxVtR1S@Ycs=4hW$-dFhi(+AIkk&)pwO|S*%zN@Sd@nnp zt>bVedY$9?4(V`ufq8fZjd&vGu%H{@9&3O-rK#c=?R{U)#qQjThd*sryCb%0&H%Z{ zH28!6X8-4H>DqN9s(AnacMI}J!dm8Tv4hv(?PIGj(rD7dW&vIO5S(>R15;qN$HB!B z2ft)2O!Qdjy+kw=mpHf=C8@ww9|Q`(@ucHdXhX3eYbHrPJ9}dry9!L<_+nERA&OF0D zR{_w|$o?)HT0h=FJ0!Q{g6El4?O_Ok91}LLrE>wEE|wfV=sIywkS%ub{X*sMTba%x zVql5K!Elu%6j^J4DPFZFvBbfM5G2tI0j?DQ(+{$ereocWi=k+mBxXr`#SKzi7#2n# z=31eFRfY3t*P_;e^drc0ojC%LTo3A?cB)F z8IUWnU(kM!_e=2ytU=ogb6{t9LVF{{q$iwmIGb%&eHZ8oqp`U262=sWp=6T^!WVOR zFc~OpxGN-y&wPr|xyc20;JaV@OrK$KlBOtxlOWV+LHKi(wmw#vI48)%Q;U`jHK4V( z@R^i%^66$jMNH*Dm&tOCn&I1&CI|}o+ssyAwO1K(Z+F(Yym0UuX=cJz z2wf((h?rIXEDh;2k3&);o+}%tPb?^#*m9AYyR%Vg$JER1qz*A44Wd(TyC%k+b@VG zA>wOqjjBH-opM5({cWFkA6$Fl@^jqNozc9PdHX$koLxMky6l@qTFAg9f9;3W zSR_4Sk&y%?uwe91awPRilG0h3E)%7uuwK#F0om1x_>tEb;fd!o069 zNx6v@lXLe1?^MS-H+m9y>-?8O=xy+mSC83#*SBwGs`LmLwd&c9qgA)U5wTnia$bsC z^LL38_~Bp4n|R~A4~`t7;fC4jRSwGp?|*iMC&H%x7@D-=i(rj&{z&Vy=jiHpH2)w= z1Hb$$ANC)i^FPk@Ag|JAoy{sCp^u4bLpP4}D8j^74=_3k8keMW^2sI8($cmn3zUU( z&TVEAVr%F}+ZV{6T;-8&p86X;0T*A55i5IUG+cWm!?VZB_>!Ws&qm%)#G)hkN zxt+3)#tOGW!vjyFK&cN4XWz&YY%lAazDid5zA|z4h&u2vYvjhU1ntiCOMTMbIh`4Y zf;*+{bv?;shxhVz2+!-7_^?9|!I@IiwUoGPr&1(e8mVu?AM*-8rw5>p4xV-j-moR; zis$7K3qoLQvE#upaZe+Otgrd^Vm2^DSG$BdRX=Ec9=fY%nN0sFEb3Rve!AlUJoQJw ze9jhD4}R#}UwiS>J%2jztT!@1Pc$M8Pz24O?7$qBY=5MuSv+%K1>R^fBtjY_$WOlr zCKbGHGSGch5$U{$vq_sk-va2^R;Y3vZhqiTc6-5@lL0q`b;pxT#NftM1m=v^Kn9Z2 z0DtFwbU-kpgbitra2{1Vlu1X1e``s7%m|p4ID~Z zFkD3tFi>V{8KD&o@Tz<#WO>`5TltNM&S&0~YT}OM-U1E!{<-%*zkN5eX!&-23*GE9 z*~@;Z{+<1&Dz26mmt}rByQ#mOSIdd^L~XChY>ij-38rLr#oJ|Z^pbf6^?sVpS+8}w zuQJviV0}|0^?6W$e)b3vGey)c-M&7#=kZ~C_PU-|hsYJ8p53RE{T_jjM%v%n;B9T2 znBIpJ zEDa(FF}foy`Bg0BfcWpZsDS$97T8s!QS0gHN&3>5BFmuT40n|P{}`Ku^{IWRLss<( zAk3Hs!Wf;0QlU3ypivYV@I=5D{YPT*_+hNH?hlf>59;x5SzklAZWKf-u!+cgCh3b` zg3+Y_fWs_w$4Q0u#Qi#xjK+d|M{X`0SrX2Dzjk(Zx}x2hW%hd*2uN|c?h*&HcLW~c zC?pY)o)mMUE;0?YF7B4{1YWlWTWQpKr$cT1ga(4Apt~XPnoNfBL$CAt>^(^4Pr&WS zh92`XTI%ZR#nZ}-m_N~#!-FH&rYCsEdj%)={Gu~nK#k~qkrl9MjJvX``t{jMwwZ|` zUXJFKfhB6?EZ1uq>P`$SnrIk4-sT}dgf)E?=rg{5N7;&dIP{$H1XorHXY~W$^_2oK zcME41YQ4UsuS8fjxO#3e=JK598eftLSh!nJT1BbR+D*Gh-^rmll)Evj1oLLUYuBoKdQ70Sv|=CMMIg$=m@qabhZ~NGAr)b` zSuj2x>(-4I4eo){S&@7zw=OXFWVM=NDB8NXj-4c{<4J|DQ3&ZKpPEmwkO5olcwtM> zZpMZeIi#=w;XHwt(kONgJ`vT>zTV#bimRW~5F0UEjLpwu@Z=F{%N`LR&l#XK1Q{;P z$CAMLTfO4}IDtcebcG7ahqfVJ5y8LIWH*c0Ph$y3%SR<6VS_EEfnYV>C*#)e%BKi7 zU@wwxw%TJR3Jq|NrLSgAK&^{RE80GMiaJYZb%071JdZE6pM5W#u{T zV-lJZ-aPX5hBL3uQes8o#iN1_9!^ERm=2ov0ftDQoS#>s+J~tXzdzXkQ`l{KSQ|mp znn_=1p^srY)_H+7*ph$KQVyB?#o7**_dWtYDmB^@-Rhn9sUabO;?I4UYf?mW8! zef=aruPq1#-osX&o105RfC&XDmfI?xK3(xKC5$n%@Jm{hkfMvc*SSgaE;QJRv?F`V zZDcS@7GRs5?I9#rK>2ko9#PV0dvJVtZvV`%tofE9-X@Caa@ydWtU3R3<{K(YuoR`k zDDbFK%CaJbka`;NxKl|xxJr5pkA;G?r-U0Eqg}2 z`SvQx_q*a}1Cn5ySH5_W3VS3Sy_SK$kM&^qq@R5TLE>V^4_6R2Ceuj3ZaoUR+$nGG z(sZ3HA|Y)uiCx&OA$5xG)iqUv{0*?Zq7V7ayFITd9;UeZGy@(&=XYqdf3WST6CybJLd3K zEQ_bN`rozd9YQQ74a{0Hu%Kzk$0F%Ys2~6r1zCn-C+$MVv%6*O;|<3Vy~YNyjhvE& zJno-{dqNvd55>@ef&#W7I7S-#;cQkGl}0}ddTxzl*lav{xerNK+Kl6p1YFt$wq8i! z5NR#LbCXzU(vH9>tO4Uvqmw~#p4M~E^| zVeaE$7`otK)@$@acx@hRr8`4p@K7`R>+>k{;fj00zM=9N2L0uKb^1in^FJR zm?UJWR{gn7C%`lF>PMrbNwYiHNL&<{KsVPmY(tNbSg-2SO^eH1K z%8%4zyUxN>m{oF8hKbji85no50-N^qh$MbkE3cr>-Ggr+ozEtw`*&eQ04BQau@_tq8N*=lz5-l^LwxjL{;hyv7EREBpo9%*|~+Ka^r&iWuq> zR;nv=_VJXKRCE$vs6Lhu<~99t(wBRw38jKGG|sUd{k&T#(svWDXJ^Z5Cpl-{;XSo^ z!{4d&!GVJENOeVJXyYvUMcv0b{)8rg)vdYY@l8B!7_DwLpU$Tz_USZMS`vg$ z8nT42&!{l-^U*wRut{Y#Z+&v}v+w(EAe{r-M0FkkH?WbpWo2d2nrB4=j$>oS)l}&X zr3UkYaJS%VL+qUk8~0LuH<6zQ$jH^fBB>S zN0ma{c`!N&9cQ8{+@3_#^8N z|9^@uzk`7J4 z*quI~evKvZ%7(rjCH4(`xb5p}idIZ`YayHVC2jLyi+YI)eFuw`x~ z>vJAgMP?(Xs{_+8!x8T7rd<2&X`j?yVh<|Kl$4a=^)SA!E#$%*{d3hPyEz6NHriUC z)5e_5?BSF?mbnEO?|R*Iu~zARcgn?PrQ99K4@504CXtqu?x;}nVXw`m6;QJ;-C#@? zJ@D69Ewz1N;2ZEq7dbt)hm{fO=eQ|1cOk(f z9Br>c8U(INxNA^}`ezf94`wqZ#5)B@oRlM}h;0e1W??rtx3?})(b0BKr~oFgvVDEO z-pYUX`|)c6%df)HX2{l+5sO;-O{LZc&TTDclMb7bCS4MIHp{iHxyrSBb$UvM)(fp7 z^?KiP`Z`R%&SCJwI^E0zH_ND=&Rq^zOJBOT*FHBrZfSk^@F7S4p(={t_-?->y`&~I z*7I6bBGiee;Vf`K*}hxwsAU^~!Y@NZbr2A=*)}Q{uQqrOI)qE`;QG+R+r-z>Bt4}J=rN)S zSRpBweUinL;@s5Fk%~uZ%U!6cwB0oQIuRVpz~Mq4<^co$NnUTv6GFi*2`yL=0! z@snhK=%cr@f6S^Ny;j zct)P*NWPm})^!cOz{5Em9zK2}k0uz$-tCwC^}gfdyyGUE2*CX{@kVIl(PpdGGckmw z>#f4mKD%_L30^}9Wz{`8X&}erfYwGrH+#>u!&D8cYDqI^)>En+e zdLC&nm?2lwnfiK8_tPr555Gq!2?EOWdbgXN+xwke+#aV&vX_uO6S_MTW;Dan_uV&X zv?QqZkCHUic>rHr=A3il6~5TwR7#X*ld3JCed08Gu1a<^a$p4)rJ3K1V4KH+9BHnmKRn z=KdZY4vdXGTI@F~ZE9qSG%H5r?u=i({n}?JS+I6 z&nZSJo_|El!p!4_sUmPgzrd$5@`d5S zcPvx%s(`53Wdw3-DA{gODgNx-H}co7;pd0jYjgG5h+NN8oZa2s)3d^o`V?^6wN4M~ z?Y6_`8QK2A;kcX9JUKZH*!Fc}uQ@jU9_m|tIByx5ci6vYk+Gh~ zmRcROO8Ldeg3)GJd0JhXGCb4b%7yhscX4F>)Ow43gyl%ZQtA`_So$p{2C2hSzY=c+nDjpWQt8SgqBQR4#$L$HRcC`Y>hw zQpL#AyJ+z1)8$p8`Et|GcxGws`AOh|22rU;A&Sw;sGQm6piwGL2XESprpqsDjt)N>C1#g1;h1H2q48d~g8)hw z@VTx;&1NBW5MIS@w)NE)K*jIjUvW)bTVvv}eqIu9l|Fpj84s#kze*h+o&A0Gc4YO` z`DQaR%mxgJfEA;=st;MYx#xptM(g(_$~UAj^z}a~Dr_}94pEaBJ@8tA%UX`)VX4&Z z0vc@FPKTLqnzHT3nvYQD+am_I%mc0pVarY1kra|-+}t#t-OrzaV(?;F&8E*zNW&^G zrn%$X#shdRK5ZXgziihRhL-SqB6qTu<4HMeMvFa6O_$4S!XsjMXl3`MA$9jLn3uqs zE^!IVm!qh>hzTVekjLe&iA%I<2o+J%9NyJ>(iNNwpd8jctqxLlKYVXEl<-UDYO2&d z;N{N|iKW0X+QzOKZ}s8h{q^}19L-$48N1u{5h+dOKEsKI2R(&U+^5qW*&>bF6gg?m zc(s`2D4Asy{GDB9w}J6QW$QDZ>Ee~P9a&ObURU{2O(!Rdtr?5G(^(AZwQD$62lHP$ z!wW!vOo&+=ryVT&vb&kz*)LMDlcnPaxYmcM(skgz!EAvj4FCJxo$pOc4g~{S;@iaH zNSGKo?Yw`YHudR#r0Jq@W>%xYufLxfBEywZ$-2RKhBw(Rf^($S>U#Xhx8-Pfm)q$m zqanwaoLx)W&=8hXEcDNOA+}BeML|K2w>Y-u2^5jb#cRvvN6W1t-T=7c*20lJwQu9& zKneEQCPTH^Oyxq=emo^vl*c8Fmf=`5q6!zpwmC^Cd4cZ7kKBVM>xpq%YevIy%6zZP z8b83bq)F&~>b7LcGp#6l495VJ_xH+rt05D8!{dLow|g6$9wsE^6rdLX{M$oS}G5E0Wjyz+sS~F zbISS1J>Rd-QN$WG{uHIL-f#nPjGhFRwTP)Bsq(z8=P9*=S{luFnWUap#w}+zFL1OX zCH-aF2z4bagX(psPOHOJJkQgP(4y@^@+l3TV&PA>%KsVhN%Z(I(+iE?q5Q|u$xpD2XMibIPD_4dQ^O<+NgmyNk=2x!LKPY6Iodvk*c3CQZtEG0@x@kqB7*IZfq_V@!?Tl7(5| zUqF9enU-6yG!4{rx|*D23O&t64V(T>!C`(Mrm7I;9^M(%7g@JI ztcJ^89jpR^A$QD z-K~-630_T>N}=TEPc7*5GchGvz8)Vay=r)=)!2iny+5Gf*6SfcC+CbjA}cD+Zj8f> zS>{&}f%fYbHxyKUXX4srPxj~g*w*grR7MXja`JATi#Fbu=d3v!1lTF`)(+o7Hs~;# zPJZ@u?(4XD5RaYctH@2+sZ4^2j#gM~+F(07J6Eo^br78EkxX>?lP(q@nqj_tW+OP4 zXw@9Da=iVg{Udc@!8gs)l#9t41%=Hbs}$e|*t2+}Dml6&mGEItO|e2Jw#pFlsSlm3 zc5+A6TD?RSGc$8uQPF!e_^z-8K2A+1S5xM-ogoe#yw%S>hYL5W>h*Z$=!=@H7%+%VhgE(mAG)qYh`=;qBL1t)RoJRy0Grl zx7!^&HpJE8LRiT@)#1ljeBWitAFmP?E+xNMlJZ+Q`>CrXvRSSEfCEIy@C*iGq~G*E z-EOs>u-5Ju6m)ugV?T@gu$}&n?(o&9&?%b4=i4APYd&|yir+%k(OSBx9G(LhPHRfCm`u@Cx4E+3I z+?HznB^ud0kAs1kuJo}3;$&|~-ULuoYk=j@KSQvhvJz}L^!B2}0f?w*hn2po+lRU( zddsF;td3R2z>Ks4JnjVPg2U9@j0~@ij#uO3S4nm zAz7@aJi7*3ruKVl*g>WX7JJ?=R`pOK3iaSEdN@3O_6L~iPQ2_~{@=*mU9vQL=$Md@Po#?SRx2Bj1VTEJe3=<3MWSjjdg7KoU_=pd? z(|2>to=Y}r_SnI}fp@wvcf?#ngZJgPwwz3oT(tQ>{=TbwNl}goVa(t`{*Zs>^^lc& z^0E6pzq0KB;pF6`^(iXDp9zZv3@-l{vR8AMdOF-#Oq%0ry3kN^?#JK!QpLAN(gaxgK&9QA@#uJe;0Ca0!k6*UDMBRr|R0pzTgw+|1S&yUHeyte$P{AbX+yC$^t zw+%i)&>lM1N8cQsrb@U~PSd;LpzMdSbg9l}9Vj;8a8s6TpOij33FAg%^o-NP{z2__ z%;I!FnV!o#AJF~Y%%puheRarv(}4|OF`8{5(PD*UWC-%zXiuRN4(wX5ojTXu6%aEU z^pj^X<=*b|$Wn7E&;Qe$Znso5TX_TzYZECmd~-BK?%w)wWe(ELE{wBka; zz}M>KwBiwV>~T$CoWeDhoSUlBE*-o0TZEq{HJWDTBpPHtAYHOshKaSm19*U&^?h0m zTPX1Vl7@R@nO zLHK1HrBFCsroVeArg04DiA!7D)8qmHr|Z2HI_rkCiij`drR|3|Vd%utc86|x*~4zG z{~i}xVu;i8aWm2W)P&L1%CScqYRfZW4DThhVi1goIM2ch8h}mspjFH>LRc?hE7wv+ zF5ATH>}Oe7lAzM&z-M-(T zJoK0d4huDqM8KN3x)db?&oxrIOk6I|ET|}GoSEy$>(H-1KF;&969@=rka;}vbE_O0 zVEvmP`IWK_Ho6u|$rBD5+kV(u!6X=5`)>(r4brAJi)LQ`)aY5sR;NOAaiPJ|-+Mg^wb*?kQ zi(&E=TB9-Pvj|urE0<|cY|+*6T5b&|L$&ots=0o}oQ+;MZi-#7(&%_8EYfuMtQbAS zOBEcvgvUX-$p}L#OCt}4w2}9}U=dN2lzM?k0rJYnH7md`r{IM~saG45xLqG^H{i!y zIcJ-6TcwD}vC`N5Q7>s)`{)>Zv|3=MTKTFLNO?QL7uLD@=cQ)^ORaLFC9l(>!;0)o zCiA)4R%y;VWi%vMJ)o8Q_^_%;-~Eh67VK*BJ0JO<^v(Qk$KK0ITe$5_D*FPr7)B!- zU31KkH=7k&P8?EBsX<`9mbJ-?s2sVYC{zTx*7<>gUf0Wuc#n%yEk;{?^z-eZ&5-9? z#CVnXuc^~qlx}_F3o1{8AEi?G!&aKl@UViSIVr&w{(92zsBYiW@^M#Ez1f%qc$nD# zIC%l@BbaWvaQ*ZM7su#g2!!?S7FqapqJy7o@o9}Wo|0>P+FyAZ#?^Yp)4Jc=g?W(qLIPIPJkGz4GmaY_7d<60VA{A&HI(-_fxE_ zV&|A^IM*F^1Gt}6MWyc zpub*Nl^KZ-THkM5k$BFJ-zN-v#NJe$%sNQ;{*+lbm`2V6PE~)~h~;0ZQI*!}jyr+X z_WdYMs!^dG1jIWCabW@ZNn?b9@`dld>{(a4b|}!VvEaeu34$*;)>u>e5(3}R=aRQ` z`lQ3cQ;A@+tL2CSslfhPrG(1O^uSptzcr9JxJ#5y{+?FejqZ_8S10Xr*(Z3WtP6_c ze+~oq;NT&A?D+ZtUiX-+`@2`)&LU&H6t7N}fZV5Uhy%sQL%$>(L(`H2F^5PzD_TaG z^~wuz2wkdh?H~WF0!`2#Ql}OtNd{9}xnbF)UV)ja51Cb3+*n}=XFxg)AA!5joG^#x zLQ&YS9~RNzQqi<2#%Bz%m*($<0N|DEIO*96f;pd&pX@YfkqP)+4k0Lrmv46jq;7U~$3grzY#Q)xn9cjzN;b2+FkIAC3ympO-j4c{z z?=pl8nnSz>8R7OVCU4zVlBXOZg^(4g6N?B;2?z$LQ54_M0{>oxuD_f-V&HfqO;HYR z4-1zxnbX({>!>cBZ2t^IWjMAe%0#;EDVQ;9_G4-kg?RMwT1XIppV1g#Ty zti**HkCKB@#F_TrR&GM(&K?Z?8mc^GVtY+LurD+j9j2_vH@FrTNBhSn+TUI8o)A^t zcOPu_8k-hd;Emeyf*=_iJ9wObjBs20ZiYh5$=rjg{Pyp8z@W_-;V6dft`{)pz2LJ*5b$(`t{yS~Zv0Vx z<#{dX%4k}3fBu;MsaY$tVodOzt$T@nIKms+zd;5+M(LX?LN(}r!6DgZxQjytFGfP3 zP^R*g8n4KLQpY}jI9GN|o4lwnKkvz=_}Ck!07FEUQIa`;8<7MSN<_BpK*v9(%7Vm~ z0Q@yl=05l5Ml9Xm;(JK|oiMWyyP6zIRiD7Akh(O+2_Nm&y}jr3W2F0;+cZ_`OGH&-0ovt++2k?v&@6%;toIp^!ONnp4sX z3L`UCd#)M0D(y3me4R1$6mwtg;bE~)oJyucO-L+6879l+RvPdOkPIs0g>~scMssWF zr(L*|wXNZWbbkZ+^6q}_8^J99Ze4-wdo~&iHUIQp-Ey=L$K=7mJv`DwRezEm-SV_> z_hCq@DQ=eN$N0QfOu1{hFX(0i_f>&w99QC(pJudo7?F}c%Tr<^yg{i=@f)b&W72lm zJJ%L)9Ycj@Im%84N{UKTCE$O(H<6-2>7F@MLN!?sMB)YCEo+wzoL!)AuURdA5n5{Z zERIE6`|XmXm}GjreSj6McHE`bOw?K%Va!6E>Fm1Z-c9?FPy<;?AMOshbf(!#a_hF}&T#qp+n)fz3-8LkNB5wGAg4NqcKN9Fng z{z_br$^`y>C4!(o-)N0RESQ=mU}_3#p7q7}pm|HXuBv2Vr@UPWO|Ha;t&$S-C&f5D z-e;@N2ko)|(M)B!BgkTJTD}kez=Oz1r1B*v+b~m#KehJPqxHpP!RvH zRR1=10Cy$z|J&0{)#^SK_-_&ZnT}@<^$Dz-b8F~>r;bS9k7vs zc(*az`!RN)Z-C(uySmyT$*Dd2;ilgVm(>&+G@zzeTa+}*!;$gX9cG_*NUxcVhRsV_ zu3+gKHf(L}>~5wQfMw~@KR56H-cgcJp}-95y?jJv`%OVCjrwpoX^rn0RD?&@-p7F7 zercnx9M<6Rl{4r^igl+0LI+E=t*BEIS?O&BW5`TRmzezZ!k*4|-x7v`CP^6Y6QW|N%0Nt5?b!j)+?Ir4M9!m`<=d3` z??w>#f%16!feQ0%nGWgxw8e|kFqptey2=*`P)c`M)>1k&x!7%!1yjpl{@nMpWi8}) zkF`iG+Rn!I>;$!4Zl0s9#FF*MAv2fj!&YX!o(rFfLhQ#l)D<8xjNPLvXrwgFd2mOQ znE21W);+?D8#Ep?(gXD#k)hG&dijwu)uZ7T@NkIS0&0Y(_qD{)C!kxD4emGupy+Xe z0s*Q$QAdjsii(Ecj>Eo>^Sb5d7jH%cF?1a|{sQUR?Y2j1_5QRTj_8A@)3OcXNbAWP zzSPoArjmv&*Qe7Fpu2W^IJq;FkQ;+2)il>*6%#Zda9>Z5K$x@PzmQn>!@^v>a^*Mu zJVdB3wqT3(o)=%Cl2)WP@R!E)ruRis+JcS)Xr1V;=L`{W$n`U%6IVNYBUl`Ux7XS$%JyOup^y^(;jg{u>G1214 z?wz^Y-yG=y0MNuZy@%rE6YT=YIhK|aGq#pJB(c??_*?o0~~bn+z0D$6o@JNq6>&o1KVxD<@3^^xf*2l|K+X^G|F3vkYV99u-tu0rxKUb!!FP%Eeem&HHRAs#h$l)>#XB z9{UH(E)QdVb(=NZDvgdFsZ(?N7KBTqEmG;)R8MYM8Y*RyDhn%qZ~g;9o1~AD%uj9$ zoGYNd^U>o@{^{zPeT)SeLUKX|lYEtl4(neT6g0d2j|WCZa`#Sj5`ZSn7uR_TC9JTt zH0=54(iNA_UD+L^ARH{xkj91jgE-6LXE!ei5`_s>ww38{`uGzDMxL-FC#MGMyL64E z_g4K`#&IwqcZ_VN=vn6%tZ#~nDBlNm_2=ZI!GR6Ruc=bv;!LQ#)~GK}wnXIb#cI>1 z#de-AZaoxm(tMoq5`w+OwJSr%uFf-qtwd~=i4F` zW@B?x-Se$3sb3jXgUN31foEV_?e#qkH8mA2?K?WUkenO}`lnTxukl;~aKx@GtNnnI zJ0HJgZ4kay%TH^L;0&s~f}T*q)a$*QM#t!nmg=u(H0{U-JTH+THs8JtrlJOYwV?TV zE>H-8{-mNpJDa}G1=_)*1Z2DBCj4V=1_qm;rf+jNrF3>iQ@UEl4b)vkAkNj>Vf*To zfk^9q8En;k42%a34>(e>5bfzf+$0twHW87Z<|{2w-=+DNdWfHH zTp!^6{AmY1@;$p7`K^CVWs9z=szUif@w6IN3SyP>>FwsCLoeN;OE2AE93Nf&C&;#m zk*<%cS{I$?V8*;s(sFTgWk0>~3qT+t2(CpkRA}5FOqE?Z2 z>p4G$m7c62(ij^XZ}b;pL7^f1d=a*u=QQy4(~jxs$O%xOPC$?YH<(?sH4gRZQSl+y z<4nNjLSO%XU{x})_Rm#aJhu}H1U|ck4yf0R@<=xxs#|;)@}uUK1h&{)$+ZL;wc9}n zy?52x`pIR*sDDHJ#czH!kRb!A=^8R#NXd8s}Aa7`iMnYl%o4JeBNh zJ4P+Lh~aj=bYeIOq9j^900TRy^^q{4;KkXuoyzzL7TDB%OJ%&)H%*}CMhh6?f~B|j zSknbLsJkBkYh`zsTd&5o-M+Nd+MWpF?Ru(aZo!`QcNwVlna4Fa2mA#gxpG`&C5)e~3cpU#cMheJ1(E-L*-kRXW6=)Z0p3~-T2>5{V-5jiqrliFR!Lf{QF)9Y-3-%WNEk_l-&Z*LZb)gYf}?0M zCKrX1FtqZls_^?7xylG43WBolW`SE7I7!yi*-PcNj+}K%l=pRsx%@BeHN);-wk!N? z&z)LvNZ2feUV98vUa}q5!WPAT22zO;38V6s9$f7JTq#Hf z+%qT3juQZ|yHd&aegZYzu3aN9BppfNzm*_OmFZ|&zQM}SYbTCTr3Dnm>Sy8_sBa0hZ-O+kZ zPw4`ADQn(}1m~N;5BprH9630VcFUg;I_MI9so$tukLH6@B~KZcp`Gw%u_Scc8F^GO3bpSuu(&4&OwAZ1s8lQ!;YGIWf|?aG%9fdEaj+ zCVyoOy)tF$0AbhiNq;omPb#!n@5g>5!&3g+d60=gb_UZ$JCoJ2Dd@yZ4MPWouy<+} zH10^_=Lm+3fR7F%KivV+t!xpT6e99oLh_;4CcyA4cAhpgxLGi=j_u~3P!xb1Bdpx`(y2_>Wd{J`PZB^~Zwsf+b(@CN%f z65$AQMf`Sc^Y8e>;$%Ft*B!P6) zs!2I<>{1pZO`u5vfo0Vw&bYM-^4U14ae~(XtXz;_@Cagg?R?KNo|{B2m3=l--Wbm0 ztel0I>{r{x^1H2UF`GI4ey<&^qt)DX&Ih7jGQ6IxPHBatK07}qcDuT8PR2g{jcVH{ zM>*usHAN_?a&BCVkTbw=R+^_32bVD2@{DZTrBv&)@RK*n-<5PUV0K`}3@?oMzB2)tX`iu(s%pGhOx#Lcj z_r}r0Z;;r~Lqy5_exP~#XHY5AVu3e^g2J;ENGl}!XV(BhvRcHC5K(HTjU$vH5@L=AtQa(rb`NatYhh&y03 zKvr~Am^<~8s|*yZP(33AS6pri+c|E3HvS&zOOWnV);YzU)c;GCXoE+xkM=;7Dm$5$?DRy#*934 z{c(%%4VD$H!=k%7A?PYP6}+&41&r@$`uzvt;r5CSI5yrbN|Peb&onk^W;ZP(#OXIC ziVJq`wXH`7-^ z$eur^vWa*cz2$mc)?e$GHBqY#BqwnV4?KIsu)TXG?rw|xo0O4zpML1{yh5YeD8$QE zJ}e3*@c5V;L-Gu2!#ArW2+X9I+oGeFjQ9KI2SpXk)ZBuefGD(xEI3J-%~% zP;+hazU%12OSYDl)>y_a8L`E;w;VKFY@p(p_cK%Amn_&No{k$?5dK13WU? zcof9M_DptJsT$FauQ3UF|Ep0rLxk=k3Sb7*ph8>}ERyl@>qHo4i_Y8*ejfTJ+fvrE z_je5AC;!MdaDtXssv(qK(`B5WZJREOI5)^yU#uP;Le~R1HJV}2ju8CY7 zwNXZvC_Mb&!pFoS{;#~#$J8eOmT?H!T9~cTjT@>JlL-y*8YiHai8FF2que2n>L}b< z4)4i{fa|G#!s4n#=@a&q_=p2M&uVT09z>rmv{d2CTlQ&orSTpashF__zSaX zK_8h=}b^1jU$}bcdJ4pO>>9AY5?s<7;&ADE6-!Ui+}JbnAcfWYh$(0^3Tc zxpO6rb=7{_L5QgawExwQJ_qK%A^s3vp!O9elT%w;JL3a_oq2wI=x7RiR{81o#476K z*DeBQ<9Y&6OYrBnBybIo7-vGWwBeg<92QMZpU!dZMc6S>SXI|EiEVky^ATKjWs?+D zVq^($?Y>)zjDRWh0XGI{@Nr5+<;XwpZTNw4?maty0nbn8^eqYhJ&tTX0W@h*S6js2 z;L=T?$g{8vajX^lw(LIEPj=N9(5F1qfA`sc(hpHLK@boBsnIG*X__g=_IL?ISf z%;`fr*>IvS;duq+?yxYplIC=F-#{-T6OS-Ch5$J=Mkohhmhcpf@(PBhPlQGhww-re zjP_i{S{k?%j?={aJf|Eyf;yLH9Q?>&w_q>2?X%una-BbU$6^?KQfXUDNj^g9Thop~ z@j@ZG(hRA!@hmK-UKS{oNX&ed`O1#YgI~Ia#CY{_gx9>ZEEAt%S1J;wn-58D)jOF8 zg|#aOc&E(rGd|O6kZ7~><8M0{aDLw1@pt?4;pcVm6CkL-4ap-gu~a?#Twm7gs3vF_ z4d+dFd5aZh40n`thTdGgCVfRkCyp!`Ne7qwl^Wi*Y?O6@ysl4gL)0z@rJlQh3dE#*Fd|rV{r{a4iPG^f3#k75833P!1kn_ z9`)EWrsoO)?$Wc~mP%E8*sHy>0C$k)N=I_cK*LH#XNk{=M>vz3LJmPK63;jD#3kF? zg!GlW=H@%o&s1Vv;9dGhe?^iIN$61|br5fkkX^4lJ0`^H+5U->h@YXa>_ZSX?CU{K zjhFG220?d9+g{2?Cxt2zg~J3Mskl_mB39pC8To926jNWg&sIc^bzTMD#s_pBL&xm zQB!I_ygH7yTfH2Gzdy7P4JJLvK>gQ!13Pf0I*9DFw`Sdh@Q#l!81;m|dks=ihQ2Oq z?diX3rU#QZUL8$%0y78e=WqL6bIu*SaMv6OWhG8!t99*WWSB_v+ToK6co!4dMMo7C z0sj`Z%-_;ds;2V^CJ99=`#Jd<8674+A?1N;)^{g;0+ikLI)bv%LXzJ6*g-p5|50Gr zjK;V^(}OWMdXiKfYICkX83i8(t2!VuZQtuRW}44#>uy@2QihzaRtd-|MzM%t>|Zy$ z7WI2-lf?Lmm-_NJd|OUF?VBss_a!J|Gc=>WyH_ueWabub@n%&Zup;vVz`Y#fEoJH+ zpwUdL6x9?w{hSMDN(YkLbw4;24eBrCfuX)nb6;ONlE*w?B9#-akL<3(6`%O%><==v zGXX_z=y}BI+<^_6tCI}K8a$~>#Ct-rO zZi_?{VMdKBlkaSM-!+u1BAPX|GKb{6Fw-1v2=E1 zJNnA!axjcsR%lhmJ6Z_2oMZqOB^jiA>e5l>wV^pczrtR6UhXFHeTMocPgfsY(pMh_ z-pa@t>4+KhKJ#W)2s#rKAKwjA!xbQqR(3qNiK$AYs1dmRt+8a6&k_fr0vyYa6SkCK zm%}W2^PxX*t;R*Ac0{CDYrSjClQyBl=YbKIJ~`xGJ+9Zeqs%u=R7fVXYCbe0PQMiW(Qqj?&`t0b^DIZIGT%jRr7;+I=Ao>k7^Xy0GbXs%bzS0^?n&Q9sh z;N*&`i6jKo3Hamc_1`Rkn=yPIhebILEL%`tzXs7BRCy_&98VAOD%Wzg(2*%eUi zm!7TaImx7}0yTc|R~n?U^KioE$X@s{!5or*?~WnAw7?F>zRO9#4t1epeLQQww5RXz zgDx?k)}K_gylHr4%Kep-)q;~+&ahNeM_!c^kMJkZbP3~Hc^MhSMoSjG;_jc?F4f=r-)Rnc0;B)HJVHW z;p_h>S)8G+*s`#|Zcb)u!&&=~unw^9$&TR%hnt9Pxb^!TSV(+5EWrUbDqJkEU4+qV zE?U_>DodI>r8T7@u&l7HbMbJh=G+#D;g)FVd^e=?ryO;0JYFy>LWEU?k*#LYlsXOs zx@OC!)nV^&a0sJwLTzE>NfjStQsR2<<_yPi3!nV2Hq6Oia4yT9tpZ46b!dG=RsNA78 z16G@PT}YqV;s7D9*MwE}9~S(!?_BS1v_Cophanm5@j1DnsLd(OIJ7`YGR2P?<_iO# zLHZH$+Jyu#ZN@`}+Ck#<&S|J?~oE@b@?JR`1OdlamT?LDgG~Kn5%m(GRd6T?6+ERUa zc~vgezLCY`S;3o+h)G~NI_sHt?+&%Tz!0sx3bd8PV{ZH0Xvb0-IH33P{gpk$Ex6AP zYoqySi4*X=%fG+S8!$cWdT*3#X9!n}YN@}{A*2_S<*L4dee4!)$DTfM_=Oo7qb-;y z`}(jptXtdbE29J*Or%S9OB5^u3cIQK;`W|nTQoRlk%SQ%)(;k6c~+Hp%?)5%I~f^> zO?4yT`j6*kRjFjAJzM&HwE7$b2WLBhwDtBL9M?`%Xyi>&U+dQK?t>wr4eT544E<43 z0`aMxc>2T-QfvDfOjE3(u7Y^wg{P8uWfra@Iko<;MXKfnUD~=Rqle`M46k4=J)YaTFG2S(vC*%@o$R6Htv7D=!o%g8}@|<$BP973RntiZ3t7p z!}MY7X%H+sAKoy`5qU@U+^96pyhX$bzFeznzj#Nc4JdF#Q_DtcM%v;7?1HQT){iNd*v)@it`{3 z{RTN~s*|6X(?>Sf9OKlTxa16(4*6YYT!^4X$(iX9MO1?^=J)h0H`e+euv8uX$+c`G zf2Yj?pdXpL?H~%vD;{21_j54Rn{e5ID{Y+_D$pRp3O--0iU&zO#`N1h9qZt7zzjAt zW+M;_3S6EEtF5lF|dYk-%|Pk!$#_#L{!IHnifgBL=H$%Kf-w zzVHO&oZ>1d_K^={SK71|eShZ)eh={<30KwJ7Q!OuHJEk-pS`B@;RtKP-lpgECwyZ^ zlyFCqo``4d7|HRbS3I({10?L)v`uBq8LVU_!4i$S&y{MSDM7z$*q7)x8f*`YUI!fI|;aY^2a@3snnJ6-^dgLKAKBsx?zL zSLHwt{A~ycG$=wX6w%rG4bkxOl}f^$J)#+~>8|-gIY3Ab z>XfUa7!keQ1c<4!*&5f)Kus9TOAivEeDq762`LgJK^pYWbIWx)=|1_iV1*w={wWRv z=_vo12-9ZczmSRRYB{V0H1Cz>&52c9_TP$P$eA=+RL${SvB1*3AmIZOpXiqG*bu}5 zbrOh#cKyl>2|0{zQK=61>hf;n+M`-YY{@!9KYq~0h7K%0oyXp_ed0i9NJkqZDd>Ge zN!=BJO&$0;$19_!XD;oNIhuDsPLFA3K^pNUL{g07ObzcC{C5a6YTAOy=S7!VmLmdKM@8t>DaCYCHp<2oBr-wl=ti(Cu@aOn6*VnbW3W z;(fIv)jZ$Rto(6pnPqAan4Gwg_#`+ARJ;e;LqzOgRv9O}^iagn)RQ+GG-|1gk`=sM zoxsHVjcgH{Tx%ScAZyGAowr(4SL>*S!pJb4(20g?Ww>=kbhWU!Y=m?=7lI=WJhDsI0=b~eMKNqvCNsJU%2FSJghW+Y+g+JcIh zlp!GGJpYG^h%b4Z9uF+&DTR#mZ$Z%mhGA#SANapA7J-eq-jXJ}U64m!K}Ql3pW@-! zXw*iy{upnN=|>*Ajhf6ULP%l_rC?iQGoiJGOKrar%=)Srntsqm(7>I$Ptd^Il6FG zLkh3@2EXcn-Otc3qZVvNZ03+&S_S6$-u@*ba1PVm9T?s4K^G{(ic>n!+q7i=MHVBA z0YT9@k%4I_{CmLv!kV=;h!lrHk|Y|oRn((Ruvu%Lv7=K5{POc#3VvR}n8HeEe{Zd# z>T1o?7L1A4F9GWc;#q~Pft8att3qZct&<7GT4%+gzsr!!wpR)Y_f>zd*(kr)qrtpHZ z^%veDMYK&iVZstdc5>np4V62UM#U}RJD@*|!w>3da190Cfdz5Fg9ywN?7@wl2(U{* zJJxk$f(DsC!2oNREAK3&rU12!+ud??xGO#L9|#lBA}0JDe}Lyor)}AYO(mV}R;v(R z+aPrsn%Mcm2DPb1)ncp^y_0qvHyqTDuLgd1;2^D5j!S!|i#SWu{HnlG>M#c(>|9&2F%I2RKxiTHvvQBxu>R09x0&pEeMLXjVEwQfm#ptmBG`Bbg2c6R-Td)>zC^SZipd}Ae>fpi6e zu*Y9hk=5no>mN%490DSQ5O&{)rfcCJUjwaitWHC_+BsBDRx}W;0ajigL z`4<-@9cTMBCV!(kEaOO=E@Qyh#)peF47lHVdLed-Yv#eCht|Mis>i1H&1xPWr5FQW zZjrWlxIPLvq_y5^4_~e>7j-YG1i2W^k(?BOYD`0-2kbmg0`|5Kf7cJM&3G7^k4V#X zO~VVICvdODEr*tK;P$^ zd&&+}gDQ1A9$w(+5rbRw%{*p4o42+MFYD-8!yZM(WkrrMhmUCXVT>Z;_u1>y)5=oK zP>?tGY=N*-oJW?Q=gc!AvAp7$-;32PVRrXewYQoV7Bt#wZ;d;+-=dx61bS{)*p`Py z#N3Jw)uCWbf%~lSOtYB7N;~8_a|XmR5shAIGrHh{T74Sj(Bc1`fUpk?HSiN*?v1{A zzHH%h@MV!yzq-YoQhrRRoJpqk=l0{BQ1Ad#9b8(6>8C%_wTAM16lEhdFh_*nqZKlXW8t)ey+rJ;IsPa!1#dvn1D zo%F&AueYnamjd6d!`byvp>6fM^0VadTvqTEO6Q}U=@s1S=LRKhHTpJgauf_AWbv(* z(h^Ic#_|7m2y2re$99iG#PBVf1=H7ksV`hi#G>o?mcE8MyE2GSy%~=~v6PicKcWMi zO*txNo0?2hJbtAxgVTz`3_qk_fH)5$PQO_-4<+uE19j=p zxiUq6_qaBUo6KOUqD&~v?e78NC{Fma-V$pd*WPdH1@f`OZ^#)BpuSt)8cSSmuK%s3 zzcXOrW4hRdVq!#U-e`>^{MyY5Or*R|G3ug1otIGs26+)VI-?xZijB`2muAQXws1-@ zS6g*boE#W-l+ORiH~An`VEu1jlDLa?1i72X4~+WN#y2x6@PUFx{>**m^W+l~2j~oD z)EhLo*b+Fs{Fm)g|C0k#~1E&xZkfVKhJR1q;-OBnvE>l zy}sFP!%&eA^B!1zdTa}QaRyg7>W>c5dL=HtWD3q~-^q#24~642$~1UMK|9>M z-H>q6+eq=pWHyl9ILyBD`c_@w`$nMB6Y<7JYa^qAXXADOUjJxM#>;bP;ik4n#%f;b z$e-+Uv0%9C>WU$_2xkEW`5rd+&dW6P{F;nuViQ~mqR#4?4NHGbr<7Mky% zTE+heqg0xjhsfu^!9)Vc%N3?1?~4!d_LhPL?LZxbgB*2VL`Q|e`-BgWKk zXa#sF<|MnnNe$4Cd@0M@wPysXcqLWS$pxR?VN zBiPyGgH-pwGjmydC2mh1@R=E%oFuTH^ zgIkR<)DLQG%U>f~4{Fnsy@O2)|I$kY1{ogZ>;g)|{6jW29Agf9M`Qj?j}R%kT5xTD z>KfCJomiqSr9vsu%A$H2nt+~xW2sbu5m#=mmIoFkE3_mO1pMxyQ1%Q|DeVWnlwc?K z-p$g*u*Q{SQ?)l;omiW&iKB4s^GqR&>{qQrgqUa~x7s-1>l2r!gZ6IWjhsEGM$Kka zaMbkHE6Lj>&}~iFEPP_yX?$%a3+HT_P;BhTcIHqhChDF-e|?>A1b9*5p3jXtal-l> zb*N#}+R1g-3%*%YDGjeDaD1`|tF3lWcemJVCDPsthuA57w&fir z!#d8pI-SA(i_H1NoiGx4ieY=K=6a8$2E>^}a-C0MBtG)fJgL+n?m4chsBbFE0K z@Qg^qg6v!H1^zko2PK1fQqmoE9gf;BGi|Dk`8@M$P7FJ_dj~P!&18A)m)|Qbt@EFh zMULLKV)nw-G1f{SbyT7<8%&@Q*j((|UKX8%^tMrN4-(=@O?)A8a1$az<5_6r$S|w@ z&TO{Gzo5F^D~{Y2JxTm|?jOQa#&X5?0*Z-+4O&PFIB_P@BRz`ByLUn+XsU6DF-J%k zRU32IHH;TKGJfQR_@dL5t;DdiVJ%MBTGNcU@gZ;ec-l{mhsQ4M6#5VXaZb*k>s zxvKwt6)Dl0>grs(xR!BN4^$`OG|BvzJ^Xn8S^H260!bd#-B{12w^%{I<5)9p=a+^Q7zm@wXcgRfbz57wC1iTmsQwcLO_^B! z)^E$x9#?Wa%KNb#6~t!EXGvPRZvgn?ED$xaY(q%@-s_4P7&5>v<58UW@SpvbU!?0K6~!zmie52jMQFJJOA%51KgVB*hgYM&qdL zM+?%H(pYZ?9zDdWUg3f<%eQpJh=syn20x|DM^Lf43HxZGPG;ggN{n3fgJTN6ClUiEwvK(${jPLFHmiQf#uN<@8S-t-#$VAUSm z*NAjIdrZk2N5_pVTXl=5jw04{zd_(}B_g1r9-flh@%S#{-Wj({t=u3X7<{+!vhbU1 zkn(2^%hywOwBDyZd||;eRDkAD#kVb-nEO(z?HF6}*MkksPUJ1t_hj8p@R#(OFO)&k zVaE{Ehf;2p@tscMCpLNL1f0aN~+xq;FDHVHw0W_Wa4pb!AomSTVz( zvy+2Sbv!+CM*dY6v$bw(M()oZw@@T6(A8ciT|e^QO-~g;bl9Z>ae|?hXI2hxiO1rR zSw2j?o$H#_r425yY2_uPR%xmu@nvKh4$B+c%^*ndEI6MBfq{el%EFcT`_PPkgsoMs z-~NN&9U~>v7`o@|Z~E(X{)q#p*1GPcOAgb~c9a*?bpCLL8C-TYBpjwuR`AN|2jy7G z**l=R`V-*)F0Y>TqqD2cz3mogKCe$suiVD!VL^b6BQLo_2TAY>onf3)f(s))D#!#A zW8OoW>P?x~^I^sDqO*Y88O z{)ZE3il867n6CRY*K#=6u*j2N?b;xE0{Ly-gR^vc=w`D2asV;5e2>cVUk6pGEmmn3I z;L?oMps>N!*6WqFhCFh9<=JIg1uaoL(?$1eH;&DqQ6~k-*M26S_6^(Ial)W@`Vo`! z)>Gj04AzHk@I+0VU8)KnkES-eQdb;J*@|iK^C^Abg1}}=XSPOG?5XE77EpUU=EM%x z?}rM(;9uM8{f2yvwQn;;LjK(%-O`cQM zY50n9wsb~TI4Ah2BGJfZ#l(WG_fIW5HJuGPnHe2}*vH*zNO19-L3V!rog7JUyAg{n zxX&wNNpM$42i#OfLuPFe(HpC+d5;8bXZIXCKtw{u3Kz+E2O_q3oRP`E_JT)qK2XRV z_0415!qZZocBQcfyTto@-~8pmE71~(e?cK^LRccPDoPn9RbR`XWof`ojneIBvtp-c ztnfMVKKThD80Idd74trctVw!R7%uea(6(-y_1$0OLiYQdGP**j z*ZPIhEj!Qq^Rh5)&YymA5XPFe!w$(tp>A4*IWhBR^{?X%2A z1vw?#8G>)tQNdjLM%S+|!@tyQVhRAFl3Z-X*Nmn0yRz=_5tAqit~^87DESd=;#l{A z%~(NTYM_i&6aYn3VdZMG*GHm)}fT+Ow3*zvYsSb&DS>xb$B=yf;KaOsH;Aen=# z$cUqnMt`7-uW-y0)bx(v^w_@z4ZFJ}^s^T2Sn^MD1_7f=Lss?bT|51iI6!2@55C_= z%NR87Wi4xiRyS(CWt<+-lhIVU575vc-%&ojv2}3ZPK9Aq_s>z(j3;rj|Cm%MRQLC< zNy@d`9-z`V?&DcJI=667iT~!9-p?!{L|f~Bu==&$3AoPy4TsDbO4S2Enn zAHxWuPw!eSHP#KLDDY~6b~mIRu>nP7IVVM~yHLSJu0&D=S;JofvC zO^SmEp)d9A@M(BnZ`A2=auARwqv8*F`t06XmdST31JnNJzpA5bc`1y;M+O0DGK`1v$#d}P{GzOTQyeXck0KYP%Jqy8r*n2q7O_3!;v-J%ILm*aciOCToT z(cttV1Y}RFi6c}nTcieCrfSv(nQCLp<`I@nYyK|>Rbzy{mt>Gw-Wue6ECra7UOkq| zs-j{Oa#OGWso`D9j2fTab~fjtXbXgNWx_fABfJ3xoBt+GUYw&R&??GbzAW32-`)vW z(MFDc4Yy(6_UliEP@e9}J!B~Qx`+&|&uZVbFJ>4_zj*w_8$h4(Z=ZW;stu2+A0gbs z;xf~IFB=&MZ>W-Afe`@Ma4C=lQ_a%XEb2wCarKGnZX=2(UXU z46>lRz@u=;=cw<-q@z=`N`?gB{)=;A#D-1B3j9n}iQHm59wi=GxeW3KL>qWoW}8Sq z&q0k|hxKiEeEK+g^{@B!$FM#OB1Kg;6WoICh}%1hVz^^0*a#c`ZZ>R61M|wCE*3nQ zbwK@Jyeh?&od*^XD9QyyYxsZsuLl&V0|;AOEt}qvyDR( z{cw5yJ!$t0tcag!{*?>K|3bXpynwIv7EK~`b?!_mFvKE`l=?2MZ9 zM0D)~&n$Z)cRjncz2*LkJc06`>Dp3M{chj2JonJB_gwaZgq7Opln#&AcxSEdfKs*; z<9r-CNG^anN$FgXmo2&xwMGF(-nUxAf;3*d&RdBgartFnLQ|0+5ZIV+q42r-I~_4H zu>W4d!MfKhpCY6|6eMaw_^D-IKxd6g5u4j82-!1&*Y#Q`-<&wlpkPOi5Q0o&3qFk| z3qP^3&5H13jm$?;+r9Z~v5eUe6_^~+NlwscG<6L|;G#EaDB!a7Fb%C5g zn#Q%TKS}5GSv_d1=((u>m;ceo=O{I`V%NN%CpB=c6t*8+2s+G_KD)}mw_i~xO-lv# zKEzkTzaq*!)R{Lc-z3n*f1g7ZWZGU8C?VH!e#bv;ko&ITs@*_rJQbN|de5P8FozMx zt|d(bMb}_s|FJvAI)dgidKB454e-fCrznb|7i)spp9Zaw7yz9a-=;Y=`-ndB?ufW}qUP$!okW((lRnqO} zB3odGEG>li*0FINQ0#0>7ObL@1@^G-{|`c>6wP2NAy&I4fgH|EfwHCL-16%Z9TX>i zdxw`tV=1zIo8gYqs)>S-zUT6liI9FDYbmYjeT-E4?kP{w#jiiXk#ZW)h%)0}5c>0= z*~0D=ST#rG#x)yX)SIs4|1vF#A}+DHqdZL=UfgpvgRm)HS17gb;PKko-kgD-xZbvL znuKgAg;cywzB#Pn_*DPp&FP3Hke*2u(--3fAwJN9#tGX071JBN=;4&5EQ5mOK+yJx z{|6-UHF+=EtPj>9p-Y*}8)un~cJEGm9a25b?*$s$T)0J4bA_pL{xJvjDnARWOtChr-pN%10oVu;yJ?D}eSh6@N%n^;B^4n#(7%6Sol7p?drA zsB;QBk3tEQ^ECYvaQ}$=K-_3O%>;X?ISWyvnE@QRLV`)o4Sm76H7?e7-lN|GkNALn z*3*etGZ*VHw59@)nCcdu`mD`c&MQ;zJU z2cH*569#J-?SQM40^IVt(~Ah9XQ0aa56v69b9wrggP!`M=lO#{<)mvV@0xJ&HfD*g z&>;tQLDTE#t!A0&KF%-v9?m9U2%llktozFRj-Op~-FnnxC~+94BUH&UawO#s$Ng@q zr1{LwQ@WnBNKYzlAEeC6xbV~rEfV=V~5=i6B#FCn2D=;yB~djy|O0HLRy;FTDQ zl9Q*hlg;(CWRLxRYFuVnDy)a6lSe+m>xR(_fBXCU?hV#Yhf+eF_D{X#=fl8GAcTvn ztJC$dK*4i#&h{hPahDk4yv7%}dRio^v%7ZZ4MOJAoQ7}x1MVg{ zqOM!71^Atg86XUv25`Vd%_0BZ<07)Y{$YNq5dQnSoZm?)0%<@oEO|IuReiqC=eRD8mOr~k7)ZdxYXiK;-~nq zZGRCK^NiS7h9!Zar>6)0HLJ<}uENWytb3wb+^S@kF&mK*z(qgoo3g)i-+EFAaZ6Vspp8hyk$7+ zVVvZgsO^ch%=eNJLf`jx6q3iyCN^z$B|k6E6X+WaobzRV>W(?(YrFTxj_AQjUVTky zX62QN=6k*qMwKg=$q9elp*1Ae91`$We)rWw3V8|HEW z+O~a9w(NbnX3M`aK^iV{0Y?WL1HSmJ2 z_v@B*gmf#a3hPGS}Q6 zN0s#j#g5;{a3OHxKyFihp$al7XIy=lWzOv=Y=0{7-79Pka9(~vgYP{P9+N&)c3WFa zmAT@@cHW>8F+$7f%FgWxaF+Z44BI~(5UtFluoqa`+OE}@b_AT<9-nMxJ+)su?w#vA z2xUERkUWjS-*($S(5;?E0YrW$Pa)5Kz$r1w`XuusL61?~HE{7PUZ}Pn^691z&wisq zYE+pn@g_>~0T+Vgx!eA1lEfFo&)_D{AYYA+`*#XP)SphI(TiR3otq8-xaw*?sF2dI zp-&$4c}9CcZ@WMF6bRg8kVsB)^!8DEJi|Y&tgq_Ud%OY-;EyaILzT8>E_j#la5(zF z{E$HMAT4%veRC%AX*cT`0-~|(?D^AqUXQIJIGJzt+4mX2Z@%FjXjtp(wdMB<&;BPj zr*+T{;1CW;yJfpyPXK4U&jlhFMsm%N`cIo0_!*G(9P=l0+H4;eU}$>Az7K=ko-6%R zJwC;+2K>faqsG8|^;$*_{Zp}w{($#PSQDv;4!$Vdx+y=j&rzt($Kp_b4(HLnTAW{9 zWRF)KlOC3rUutl6cl5Qg3eP;2!kt~ce{kNs@U&a1Z`iYC1g7Xcj%t`0^shiaD%47H zx^{9SwTT3KywosQm_RL^7mpo5`RN($iJkdzFU#>{#WxxS^<4gWV|6o5YNWJ&Sv03T zMDRiH^T)iOJHSJr&}MRH(8!%-tYn$fjpQoj^%-gh%s{=}QPQ{M2n0~{CJ z4vw~V+CPr~z}q;vb8?bf^M^q^AoAoc^9264YSt5S*4-a--13BBliOLL>q(2$t9I;E zFB6GZCwO_6c>(H9* zPrYgfYff9uoPjV%aL!Du)?39&r^rUpWLPn~z^^;7OiA(;PWc>}3MqE*^Bk26=WV1N zt04=oIhZ86ogzpuCZUzN_|l$Eu4ICmxHoGFS$D|6%KdLyk&Txj=PyQE(!e3W3?uCD zyZie_K1KmPIS`<8cmlK?Gn~ywPZOA*z|I8{V~-o$BvT_o`YLrQ>H=J7*!ADuv&KM- zeO4g$%l+f>U9RuBp zBX;2K89W#D&O1!T8yhH#ZIU2?_;>!9Rc_HU4a!udmv^}70m|GHOGFAr3^8pvNUC=1 zrgwnF_%nhD&yRIy`|Brbq^6E8UM0(9I3SlvJ6*4WHHn_)Bz-wrbcF>i4LWMtk z;`7^v0HbdaEM0M-Vk#YVjwN1l-4I2cc}8TKkpPRIqix#f2m|k%jkB%8lT5^yR9wuU zd%0fWgEYwT(9{Pd#lxXQdJWIj`^+6MRvD+lNk#uTJs&KGI^ALhfnch}%wy;lsib<@zgN zVvl3>Uf?;_d1nM21`T&acktnX|K$@NSFZ&g7RrI#VC&GwPFFpg1ew?&XVkH?%!Jzt`o2Ks3jJo1xhedt@q`?P1=z2W$DME&H>p||sLo`o*T zpDr``Gea_7hzZvMG6!GS)L<0=y_Dy)TsQv%3S92~7Se%Lj|zGC+fa^9gj{KIwLzfV zCW0(f%`^=?M4bvZK01iPCa91eSuDpo@%A*owJOKGnhsic(#`RaG(IdST}YcOZSHpm zZO<>4JgyFfMYILU?h3c$rw`@Y^$r`0Rexkex?B&a)PiKd?CE<`KlMjIM3zm{IlNnU zUYtDp9RbL~ENf+r-_{gR3?;it=2I&D)M3*56rsl3Q#C4x(w>&QqAhpCgdI-5Z3P_} z9bKxWblMQ)1zQ{d+jgtdCdU6}=OtE;WC(N}*z5kL{&Ze|TlahuL9*2c{2}+bcz%%g zIn)pu0bQ&0!b#RmKajO8_1q)0`V?-3Ae+Umo&GotdL=n{mClt}c0yUI=ZRbop6&iOM!hR5Eq_@DZC%G!H`!8WBm>!1A-d zB)a7d22745y48*HR^{8N)2@M4_?%!onGmfCAkUceD8+9Z5SOOHh>y0tdbcp2t=bVD z02OgiqHW)O72@}|oP@l|UyTB{4yL;2M^n%laJ2(vW|)7b@hN^Ny|#8|wR+gU5X}e+ zcrQiuofcyao-~M)mt!bNo(u6N9IFUjcUK9l=vH`&qrsQ9)Tk;drgs_lhH3xbKYP zwE>V#SC4)<^95md2o7}coG|eFvZY_SvjN6oyty+k&LBfprJr8D8YE_7)phci ztB#=&#d>PO@VTjt_`JrDQegTP@aUXpKk2j#3%>HUJ}HhjXVFmMpd?>lgIsHtoCi*u z99CGBKpBDNm>#1SJ}nCKR6VP58!DQSyKkTSr&0Zr0Q6kQzhnvLPx+t2LD0LvB~o0W z^coDIUG~OJB82Ex!JT)u@|DZGx41f(+~jwQ{9dUo`-aZ;KY}0yk)R*FN~)Yj{PRm& zJ_(z?2ttS#*op91(&=`6&J>)6Mchi?l)V4RDSzgtn_v5Gqj>m>Ji{clrI>fV%ITN^ zxksuyvKmZ-i=VB9i@ERdh}IH-zk2KPGPC27@+FP^K`uWlJs0~Ek1n)aK=?FJW}tNA z;0u37rNQHw%Rp=Gwn#0H&%%TtwC$Ut6bRph+l?j>%VIk8nU96oyM*F0rA_>y6*b?9 zof;?en)+8Aj@x#+KyI{wyY7)DwooG<71?eK%8@;ZfOTx!7QEDk3OG-^gLSJB>(pk% zDRg_UBw?WltC=61BU0@)2@5XETl$4XtAJ;~N|lqqT1$ltVp022?EkshIM%&L*4^Cs zYtNJUe)tM*%oA74)H+AtBdfOl@`{qTp;gCKt<>~jGIL@+@h@SKp-7OK7+YM|IKV71 zXg?i^1o?F8+GPNBd<>`0nF;zGUe$Ig4BABXz>x)Cq%s{x?>1v&nt)tOJg0;GCsVxu zSc%ymaN%^9rV4HiORr>>AXsui>HEf7_|pNM$}~i$D0;`+lYMMG z-^qb3qb$|%r}Vx(g#zBwMPLdV`l$vQ@^ZfH!^)~4U=GR}ic}%~$d4Q+>qgZbQ_LQ| zRzea}Mc&qpt~p_l{+Zo2O>Q@BUL=(#79in1)5pfi%MSVNpjzg2O1QFvE8HT#jhJK6 z96#b*vm4wqT@OUWc*9;%V-hXChf*j119VD z-X%_b_K)~GOXGmz|XD;pc+urQG z#I7AcyOe3q?x(g>&nJ?@F2w;r>EZFnhkSiNH*1V1$$8wBXMBx~&D5SRwlcX>THR{W zW4f~r>Cy@+!^w3a1#cg$Bo}ImcSgT(>iw~wapJ1KS4BWcb*+83Er^9q8L+<9b>Oti!AHPLwPMb9@a}L_E`}?AG$s ztgaH)blH4FV`?ZvC0XyP(N=c>(NM7$PmXYgKIt0eq8k@oj!Z_AN7KlAu_Xi732FgW zSRG7TPs{pyp)+^sLF;`TDH5Qy61!l^~E6exJI4^(n=ChHwDiFAna zyiWr^3@9EnY|@y03ps7rSHU|)J15=G{*{(iJ03$m41pP;zX^^TpfVCK)>ow-^EBre zIYSNkoVRO*7@86uw|8Xv@$gGHc8@8iG2&olEmu9R{8?<0iL~=2^{ue?W9O{hP8U(+X%eXD> zKY>gTzQyG(V0AvuWhsjv9KKeF4;Bp<>GUm#F#15Dk4_8W#6;bWMTAs|f-52yn+8{f zOBT36viHb}y{9vKSD502Cy_k_Lk%FQ%vc!vRh`xcpJSg-T0Oj`FjceRwUTS*}c z$F9q_EsH4^db=XsS%m$bf1=Vet~(tRV;!3W)S?85xnFMVV zkcQ>xr330#{k{`B<~I#Rg?TKuIuE>&!;zypr^14@9)u)T)o?NMZA|lVDunQ5&2~N& zoCG~0#$OhE?rVNrByD^}EGVyol*Fe64X(k8s?(>zNm9Xzw4{{&!1>9-(tU)#C=?-- zEJ|9P?Y)v!9|4(+YJ@5VcA`-T0FrZDTC28<{eCNES!HG<#leI*bSg_JH6G>+t)+$h zDVo2++>*<-jAU;=1Z|z7B#tKx(@&TfQC{#q*{#e#LK-QxXp=<%ENf*bKe5$F@OW529Jb>w7b?K zRTBG1-_V`$zt_VUTsEE_ZlSwy~s2z zK3^}Sx5$r&w9^DNz*4d}r?+9Fg&kk$d=et4FW>tGHy9rKCKjTD?Sm7<;Zvpm{m+7Hu)lphr?MGW6ixOy(AoFH5CE@#^T=XC3Rd666`dcS&C9XY zLwJL8geO@!SZ45H?nq%k2p3H9A@d}qDQkYlS2CiDqUPr0xP&{{R{Rgg?Vsu!4(e~I za7q& zY}f!SE!l?$pxl*xZaY3&3RKASYyJ@?4rEaQNgc@@1}dcOXs9os9B$!oJnKTbk2~v= z6S|3aThPPRu#hBS2|As!p{ z^}Qz*J^0V5;bX2rIe~bD_;3+{Ujb=a#OM*-d6Rq-799?nk_%nbmM5{rre}3n0u8h* z!WMnBJxyt;nF4lIOXIr4q(pYujGRLJZx`E1*CS&%Qab!Eia_|t<-{nBi5>UF)9R=u zo8NC}qYjJ{{rqid6>9mK*;~*4fMxZ1L5u>vgYkK_QsXgIGmB2Mmy$0)5Hap)-Ph6g z83*LHK!p{Tg}nz$9`6&~URYbVyE$zlqIV0QXsA2|<}2*+OmpbJHQ??Q&2n7PA2c3= zmFTFy)q=kgoMmoE#Jl;z1=SK@1cxI;DG_|0E}##`PUsn!pQ`Z0dWH~?YLb}6Zg3Hn zqRJN7Ncfp-zw9H74+MobIpcOEu%0h|J;)3T0>ge|+C#7_*IcB!?REVk706gvPvIkc z>E)Y7hF(-lKXj?*C0zaU=nbsoZ(3F7LvQOL^>LqyMTK>aK*16dWPv#7$^`-ioM4~K zOL9xAwrL#M60ouPDnJfGe+L;4d0A0ze&mzIYxp-(Wu54dhGM z)Oq#h<(Khqn{U~=r{^n2N@>%^8%i~tfVq^$ z7YSWFvW0Ar3D(D&s&-r&u+QT6@zPbMF^YtH)u?b<9Yd8#j6QYVOUQS>HD31s2;I$Q zp3!0AdTY+`3-~g6pn_+6H#`n}GIs_Eugz?aN4_h!gL)s(RZD3@ElhYat;(?JEi8Pr zmFnG*OTHMBBwI$B>z3VF_HKlS%^*H0J`%cx< zeJj+=<8fwL;u&nZRydLlzGSs~&L<(f8hz{OhYl6;J$qK|hB?6^05;w6unw|3|JUiW z+Z>KZMkaHw*Xv2W&V8~=sg*Yak2m>xLaCULJ6^A~-5SigKgAv0N>&Q2BDA;AlbHW0 zCZTT9ymWHSi|s8NE$(fGdnpbzWti&G8`l1~xO1?Y{Jo0RLK%M+I&1gcZAnBjG|(>V zq5Nf@#9U^c9E=}Oql4V=DNiXCPYnt&x_k{LG4J4@-oJLk617nCmvf+m(M+^m@OPZ} z$e9@5@!$p_dVv1wvxmoo+d0sME%LHgUGql?WD-jhhiwD>WQ z%vr|Qki=TbtmRHmWnsfIE-^e4HwXjS5rZ^ErVZ!44^G2-pksKE>_;E2)RHa6s9g%7 zL=AkVw$+$97@oq3Az@TE0JF#SBg+Kl<@YvsxBRO*WC;kKmy+60u%dt2o9>TFw7}1L z2RQ3Tf6;m90z!TVA72UKj&e7wQ?Vm|c2#f(yrXg4J-D>Mz(sQpmk=al)u|@3bAGfL z+_U;d@)dm%4BTIF1aB(~W1e6>A}^L_L|Ah}DK88J*v|mI|FXk#ZJ2v=hmU(0(6&tm z65jmw%5&?^gfG~ockh=MfGrUCb}EH_`a@vXnX7(NoEggwm^_hMS~p*N#4WPpg7mLP zj>1qV&+?JO_xV*7k-;ts?L*ft zd$;G|MPK9o4W^_;m|PTx!-0qpB0o-{QRG$A_lo|Mp^=x~sR9HL5^<8~>U8Z=h#<%j z##YuU{}95>DZ#YCuJ!X&j9BP%d30}sfL=%^{CzwqucJ5$ttO6(RR5&nCO#4V;XCSV z;6{f@heP4v$?QS=W%z zfbJFQG8_-TaeX|KO-lQN**HwjI#_|f8{Tswk#-7 zU-Q72e)z-Pw=+Cci?oUogkRDfVB}Q1{TqW|7tDk7euwQd zeQoTV>fpdmDg&=0Hl>L~354V$8S{jc!vm>hDo_?MXx^B7^<9O5H5t`%^u`1W{+kov z<32;)FnC1J^@Gi@JQ1%QL@9Oohd3Q+8us~~V5`WsNjLi=CDXDDTWUF@q0%2@{f4Cc zw&9J24l?K?{k&ldr4%c+rrs$S<(#=d{T~Y>&~RYZ)psw`tdX&07m0)8dab!t__;N|Qxcz<0AcjNx3g4ejM~E8 zUohCdfqS{{y?NWYaKMx-m&n0;Va1(T?J7`-k?*2yanN>*v!}r>q_s8?XQNBnaZ5j4 zhrOo7K*3clzrg2M@@`E28Z-Bw!Pn*p?Zj2ry^GPOU6_ERT+Ke*ORTC?WknoWV=~l? z$SqcOaM>m{cGLovL>%6lhE(T4Ii>j3x`fuO=c9heZXd%5eCIwJ!4N%~w#n^zGLpz) zr_fz5)OO1O8w4tLXu%Gt@o8+Q+C@q%wA=NJ&EVMs(CTOPdO0}A@*Le~%*gB~7S}<| z(sv^a^Cn_2ieH=CLeU!5N!xP7uG(a`O&;k?eL?WZ1)|8%=kQ7mOYa7B z>|agbxV8yxP>an(JeE{uf<|FAn!b7s%72FRqPZDe5;X09b0^L=2x1r))lYMg656lG z0FFgnYvKh`_OimAbf>+ifk%g6s|t7mZTEKlF@E6fgRw6mItc7T3DpX(b&-}W8dB>p z;WyAB?Fq?Ph=>eeghR&s@X{@iX$D9LGa%z=NEJ&UTTg*eFn4*YCasXzlu}*`R--Ku93CN(2jN-N=S1&l@G5+13F1mh9KkX* zC|4Y0%aiUSs|=Ij4zl5=z(OJ^`rYnyWSJ$`%qnm&TcufG=t>o+0?G_^i6ZQq7P|x7 zdp9n^3obggO~@7qGixb+H(Q0VRZH zGH}KhGdY==*;5lLIv-@S#}8_LM#;ox*Y%X+3h8;3n#=Ge+fmkiA#kYd`pB|#z903c z_8#9dAAvI&(XtD-N$Sx5W$C&W}o0{#>TqkEu7c1{|Px{r*tUl-+#?c1b3okGPM}b?=voSshG((Y)%8yqDeuoemJDbT% ztXvJuC4UOoYXT%2z>EFhMMJ$*W!CNm*_{QWlYg(+;N>~J>J{pkn^v?rk-YAZ`|+Ka zZESmdas6W%B4#%BwHf0IL5yufukcXhOV>zl@kLM$ytO_8>CAuQQH`)bY<$SI9cWF{ znCb&|oa$$@#;vXb{s9lWvYXUG%>GcMsG&{`a&#%(wQ~G`ca7RrQf@(i0odXzU zg)me}#v7CJ6X&q4; z|9yP;gn|u$ef;=pYyFS@Niez*68|doo0yGT_yQU!0JIry(2E_wtg2KJiSriyoYpvr#N`V2I2G`H~|xJ=DL=Byk9i^|kd9qEIG3P4B% z`FkoP9ot3P&;MYu5wVmuztQ&00e1CwQEb90%D{&Bj#650gP~U|YHCSF!J@BOWN2M{ zfe%-TJ)%y9e!9HboWw?q$J+zU-Jo*7dSLsiL>}Mvd2nJ1=VYJpFC6jm>MP|7;yL`A zZitqU5}{ehhUm2F19Z6YKk3c;WXeWPzqD)CzZ6OQW&Hd{shOB2d zy{D8QZEt-fgaULR)b}z&d~nPL3DNMPQ(#T^MY*FcCqKTrZF}p*%AO16_rORm(u>Ph zf+x!Zm0(upL>MU^;=Eu5N#grPqG?HRKE1Rt|V7^c^=%+8{m_L|PKD;r|!c%8< z_56jI6czD5=Ue<|M>mr3P1k;EuD}6%T-~W?6wwANl;t?(=Q&Q^1>6GiA2cvz$a)|5 z5eJoI+YSs<5mi;c29techDD$&MX|;T3g3(G7w<4(v!8Lb5~lmB4PyyNE(b6A{h*8h zRQ#K_Jy`u6icQBZ;m7W;o6W(*5%{hIE`_(WKSe{ACtbI_ci-K|)VXAMYX~Zs-K{!Q zI@719rNJP6F)AwoaoSh9uW~q1!6uq0+q$5D8YIZ-dEYGhw0%a``L7QscVG;sWmqQ* zq}@ueInwEgBEgAcc9)bO{|g_i^2H}Az*xz_^*manV;p1!m7%MOz$gGV)4bwaN9v+A zlRfvP7ytIF;6h{HI;y9T|4O!|G_guzlxXqj6#o+Vz*#CxwXxqJyfx*Umf&OO0nWBCFPbbu5*PL^aFJVw4!boVARIqNR4ppQ z2qe({%EslvmZsiBOMTJ9|6U%?9}aBa(wC>sM4|DdGBq$aVUzqB`1Bj(&+uLwnCojy z1CRnuKR<&k+O+HT)P$*Zf1WR>l@+(pZB8^PV-Uk5bxZJB2Mz4Cm!7;}ZNr(!ft7q1 z#H8O@bBFkfNozDtYY@5-_i&+wy1(%B>1EWwul%D}u-*K9FB#ZX(7;DO+4Ol1=`RX* z{4sAPE=4sr;mRP8`;Nc~7|B1h1eVfDa~kT=MLA*(S`|O;pC^?=vk=+VK+E}B6z7v} zP6!6Ri@y4t#hGb(@ z|E}%!3{Pl)ZTXlaFULLaR*6>D9W zrvtB+!H(;1jBmjDPJYhK^L*3AP5nf1`+eJvU5#}zLw}l0-Lk%y^NIIc3TO%zWOm`s zc;r}jOli?h69O}7KVc|nznMjJ-9 z5=VY|!?3m7IPdY~N06mtw6rmOaB@HVm;Y^l?*hJQ4Spm{?XB+{tCr9Ifv;d6y#+5r z`^Mw9ASy9GL_2+X=4L;27L&SMNK%s7%IRsKOLd*9i=ILT@33)<&^x|Q4fn?_Ay590 zOuEf3dL$v51`CUedq)Qab#>)*-~y^C_#3qmt0@HFsBJTwVhzdYRWV7e;+omOVug)N zDL@+&+R~gG%=kW8cbsB}PV#t*z1b$4wy>6^{CXX9Mxq?xV}@=ex!+20K!uGig_hwo|jSXYK~K^lmn* zpe8`5pBY$Jm6MlO2XnPIpLQYR`(ai;0e>7T=a&w*qKz+tLr9>08?-&*XL4&$Q>MtB zo{FKdaAs_WQD+t{w3gzCS!&0>v89cf`4V9%eEqdcR-kf9*akT%r$R2u*1|^BSZmF5 zatvQ`&QvXjRsAcEF-=sCOfr2GT?V(zP9oH|KMS7QKJg|O#DgmZe|C`)J#BCr@Lm+O zM#QWr^4@_>C5sfVN%{g-UPa`*k9eTkzwrIt9_8YG?X($W3<2K08wd?=myUw#b8Fuk zuyYF|(mpeS3c(NT<;LA#uS%<`k}D2k!Z@Nx>GK4ugqJ@~3MCZDp7kp}V75K=8*J|g z-o%ARYAk?vyWX6J2txR&z&+pm0)&R6mmTjvt~|G1L$I*2c3enBk3_fZHMN2&pMH0U zG2gSTHCYM>sBH^yy(_n{Rst0&E+Xxu!=&DHq+NSCH65sM+f}pHRYprvw8bB!>c!( zUsNngH3al6Q{>F9e1M92hcHz^gRex+%kYdTMEItbZR5s9ScxOiw2c_k)$DIchD%;#p8xNl4q(+Ke8_Dvw3xV0L3?W71DtHI7cSQU50m zUWAD(V-ycyga`+lY!-Ud&eEkX+>C|(h1(I*uh}w&5zpunZpz)?w^?o#tqSHDB?D6N z|CMIU#ZP_&)wdNdfw7GhHm=xmoa z3~>cV)XqeFQj>xn9Wu5q#d90G)Rbc#^tm^4L}21rx4n}&v1|Qm6T2Yax5mhCFnNII z+^`N)bF^KAd!l*C?#f%I^M>Zw%W+naM@7B&myWt;?^$N5EG4#e2-Rb2s_WAlT zj08rAlr5Ow%fZ;zNfq&j`hQ{^J1=3v94*Vn{X8dfqy~5j+)~*~Zs)`Mq&{LUd*7u) z5DB<=an=y7lfGVHv_7phCvyR92a($jJgqM$eF^lFE@!eW;9|WHR?wj7bFr1Vjw|#U z`Zpq6aV?~T&xx(s6Z~v=69VRzMv0BK572Cr9i%ffjqLAB&vWq zG<-d7YgEUZ&KyjYHI@TDPvInfMq!nJzLUnMKRO~SBmAHKNAr;=v(ZfP_U6|l`zLiGmf*ZR?oBD<%X*xeVtnL)IPUagU$@0DdohG zX6fKJmLK}COE_69_GSn<%>?zxN0)2imXb7o^y4*`f9-Bx0a~jg)tzk8C1>#%aAM$4 zaOpXg&MU>nW+!hgb6NJNuZU)N9<|=Ot88Dy{T7aBp~EuBzr%0bU?m|Ui?Qi2n}@){ z_-3F`%I?a(#~{@~WWCSRmt5s2mnDYdl=cm3R%3_vW1Wa9S`gD$I7^@pkZj2Aryh>-O`7} z+2X&RC;ovWe(V_D4`Q?lJv@b0)_~^025+~8z9Fx z0N-5>Av*uJ0{?qvX6q~IwjL)zY*N4W6*jLJ_3PlXN*)A!o>Ws|r_`hD zxWVgBoRTit$cIE0N6kSm=1BKonCaycnbdm%dRH4gEJp-xwz?~*KwSD}QpTYvr92Pf zQ`SwnMZKnkzyCYM8_v^AW#2?pI=gPVZekOAIZc(s$hvn~O8j9ZMP`g8<$$7!bWxUu z{rMtw1uM2JnvE%}J2PpIk7++DB6_~`Zi<(UsM^4)$bB7LA7@iYaj!bunW0)`UVa`= zd9nIm)EPe{7i1}TX8K)QC?yURlyCL9po9)r<-KSKih(Bl6(YfC(!#gAuF1nnO_-vk zgkry&J{IT{OkKPWUp&MC`VsYBBYMLNWrZ~JfzBnn|2=21BXtw_fZlq^4z_+A6uA83 zzbA=c=T_K&{;I_ZtT}|osxccb+^+?kBT>WUT!x*A6o(4A5%F0Ac0&hycKJr?4&O-m z{|Fz>;%U|@L?XHmr)H0o3_j!|4=B%|7`mQsRrcleY)>=(z z)v~ox9KG07f`hr7d-aU_?<+We5Nf&fN#TCvE?@W`au2G>vvDUzC)grMHc-!YSF8jZ z+K!}upnh!7qt~O|oYLHzNN^|&e*`CRAPLd@Ag-Tyi>CGf#}(kO(cnA zlxu_%K3KqxF)JB|bPFi)b}CehR5~;%R-LEpOFMxlx;^EHEUzp3K4>Jby^s*JV~oxI zFH`z!E3u>{L`#B@mr%wtT}INoz8lb|w`65Ew!gLd*-RJc)ib%h6oa0#DGQypVB@Hk zI({Uvhs0RlnzK(6*4oKH9p=OBD}yUL32UentvfZIl$X)8@lXz5rh&-Jo!`sJkpNqZ zkx_>dY5Z$6v6gs%ca0eYr7NtJh?`Lg-F_R@1MTqwgzJk=5qQ!x*UqO6j6i@oPac*? zxs>N%sHKHmgVSu26MH?foW`{rH_=g4*^N!8^FNDQNXq*PGJ~TbC@qS z&@9qu7O%-#l9t`s?rUvMuYy^@u0;32!kk=QxO=)g?MFySMc$~w$f3GPiC<8?LO!00 zFy2bH2CPdn(hxznb0To}geh7~JXC2XU|ZrUHXV}?ASo#pI|`RL5h1Y_FmjQRq?(L1 zRO{Y`fj~CPFr>=f3r(;JZ(Ls2epz%NHjY!cF%L2@T>@K@nko&X*zZ) zo0hmryi=m=bLro^vTPwVh~(&PSwQwHOp{vsJyPV&@;s74Lq+@F13?j^kzoBR^%Je^D$^DtdI~P--9fGzq@ONtiKqP@D3?H<2xBhS#xFT1kspIedl+P6M)K!8Tm#VO(8GJidE1>oRq3-yOL*6EVjcW( z9cX}i!Q_n2kl$q7`Vfk)_OJ7>JIFM3{O6^))Pr!6ZaM>XPys{G6b^-XQP{6D?BpD& zd^6U{ZnJL0FQ1_{V}Ar}#f8NCA-?~jjv;2A61M{Y=24oEQLq$o-wMCxJdf59J$`js zH$W8>5fqBtb64&X4k5^i@2sRJS|S@yv0`kRZTeVBHxkuLzLcutMGBX1oxz*>dtK^> zuxiFX9Gt4mpR<5(zp${G13lt4Ys78M!Vd=NHXq4EqzsV`HoOsfl5kBC8aH$}jKdtk zLUn+<0b9mW$^&mG>1?jgyRwvAO*KNg>5s+<*Bji$E@0GnMtA?9`_93#MMgB_z0mmu zf2Nlp(~SgYY*2mQZ9cgcxYo3nNcS{UXYP#7!11T;XV9#nfFG7`B&<@|A9*5y$Org(md}E%P2h;rj7CY6nLZ*xWO-l}XVtO3`9~~!7+~LD zWeMME`BgZa5pjQf)<2b?sa^GZKPY;q^G{VVFQ;hnClzy$zgU=1?Y_ZI{CBId@^G7v z|Fwl`QyO%QCNLjmt#_`g;&J22rDo0gh-zG;d}d2DrZAIZC5Q>TpO%1DX312Y)|(m_ zzL~|lt4LshHw$^f5|GF@V+Pn6NP~CI70uW!CTP^^y$&vT^X^N(q_OG7QoKHDTBh51 zov!}Un40@m`)(|~Og?K}-!tJ%fIYGRyC9g{D10MUCXZcDbJL#)FyLe1gk7_~gdogB`OB%_MA`Q^#+>;?!VjoW0lU zaFYauCG+u5+t?|5&;Jc3_|C^(oi{i}TMl+UO@QUx=OWE214Da`JcPfkod=h_uF0s* zK?8M{8qAh&;eee==hkRCelbTe)#l^(tac>YHncjcp>u)Y`~gom(;#v;5j^j3K0zG@ z38JgZ;n;E2(e+7nBaNqcy3Q-yZ@A}Rec-KyXk|;EgUsQnCz5rLS>3>V$ebKk)@a~e z9{GcKM8bu=0W7mt3^|!xWN>`dwJuRX$EvXd{ru`NP|>oGyDxfI-_^qs>=npMr|M5i z{h1Yq;wpi4-bC1YxPWYT3jMAy`ayh92v0rkCq`zHiVsGs>U7^!nA57hnM1nJ{ZYT^ z>zTUVhLigi%HZ}Iw-m`;)wacbzpdxs&UuuTxpE_?QWGo#nFgziceq`7OhZ-}^U3!mP;r^sUbyE*AQLywa-G$2M!TmVy zn{V2=J1wl5KoH_gfqkNBEnHb3K4|7gJAC22V3#0F&e zmeuL8vR{@HB3zjM>aBDyMgFc&&a+GfCmXU$9oGC>hTfG`&Xzz$7%5G35~SR`_F1h zId&?W@_rawj7E#QNm*co5d629O&ujq+8W>Sh;m7v26jxJ+nSl5>4!eGocC}h3i)pX zNSeN~hJ>hu?80a!Ml+XB1Aow{^RK|c#XrB66J@|jV|tquVW^t$8MN!jN9?_9Y6=a* zqPlGFTiDO>qu($75L+`crf@6#0;mJoET_5EyPN7Tf%#S0U$h3b;*p@%AMEVuJFgLo z%G(6D;}_!@6~vaeW=nY9PXu;^XVb)~Kr7`N3)HDoxv*o;&nSOXVRrLo9^5CuQO4QS z++F~ezGGKrRG}oiH|qiGA+J|l{1U0pP=^LS_e=yCdP6Qz3{tN6ZQtc|fMKe*x}@R2 z6-x03e!t0vWCShaIzr?gU28{5^(Pm*D15u8D0;bptO!fBxrgtmj$IRBtEQHdJGaCd zRw|fgBkfKBN!aB@c|Qz~K0(87;m4g`{4&Obh{!{cM`Jv*=Qe52j^ZbdM5+p=WQ8lc zmdvB{RmZhr(|47LElq$D0Jc!a^g?8CBGhrWiNC!gqqWwp6)AmZ8cgmK%}1E~zE1gf zI3;KcSleFisX8IbMN$~~TXr@(r0EwE0;4X?lFat8NFVkY_7l>L-(=vg#Z?o6YnT|V zuD%8IyLv;(T1pG|>jCg}Pk*Ov zyDW=rfFf#0QtxG8Z_)}oUiqnaE~sp`VFXlfYT$^fcF79()yDTdUu z_xMjv5;T`JU3o!G`@+V%#NKr0RC7BHnOaBs8g?Xqc)`LiZh{yH%(PhIW+4yiL)_dd zxHkh>V9D!Wh@B58*_y!W_+Sjo%$p_=p$+P3Doc54UL7wf3(pAG#raBAZ5}1ro(@;G zEKsPaUMtKWpS?qZ?WK@;vo3Ie!~INAl(G)vyW8J$i9|q2Ay{|T|1+&_TNpm&Di^f? zK9_ajJx3YOhJ#q@GzI!m=D!rZ$r~aeE#hAbRfZ;UKmycp8I7+y@XUSKBS2>04l9%5 zh7A283?`0<`;QbG2M$`3HThsL4N-^0K3A}P&C`T&)z(T^nm-wzYO$yvr4KPeP((61z|270 zLsajsl_6m5K5CPb)gc-tJMmG49X~~vdo!uSYF*!lnat!!;@5ueH#|FPHSgiR8xR9^ zn0*#}{nn}D@X6EJ>MPDxC88 z1;!h($2IYzbQye^f7JhagR!Bsl)e_h6ponEk@BqG^*~r8E8BIsP@S0}T`g_D>03)+ zUKK)6zO3$HD5$KwEBvEVLX+5H{hbo%pz~I?Q?cT|i~#NY99Yq2r}N2%{95bc3x$oT zvE*9p13132^RxD9mcDFaj=yHC+1e}EqY5kbUL0lREdPdlW=ZG5lOK{?lg7ry{#1Nw z-l;6BS||^egl+Lf(EZ7o00R5i`wHmr!N*WR!uP&s$FG#bErh1Dk=up zv_N53*pPocyT#mt%1ZYrS~(`yTy17yo$;`G{SmGdEm>l2mfNL0P$^vPk-T}CkjeyJ zyyVB9lF)fbCAwk$kj0Kl;E2+Sa@Bd5eq2}_KZ{Olf1H&ap4Y+3)`>1*R}Vpjr-yBC zkO|6-fy-u~s-Ps~h(;de^ZZ-}6*kKJg0{AuKuI<*X!56XL9UOnXFw;fSJ*RssAQ=! z=}Oo31rw+2TH;fx@N{vla!l4bt^BpP+6u zC>!too(lp!`Yp}u$E0ZE_VenVg$?Q{_qc;1XVGzjzR4swb+F81PbkFA;A#iUy=+{a zKGrS-a|YF^vg%D|8r%AFhrVFxnHtM7M;_2tSR-DX-ZrKxe{tPlBmtTaCYM{;=%mq9@*F`@ST0C3%TGN+C-H$w)n;fQ6iXXW3$`4+P0Yw&V(LIh;* zrl%0(Itk=;y8lwna&pU*{xy3`2UgryYz09nG7wyJ@eCV>$!kqeyKg8al=rG${071g z+1Yt{(2Nn>*AYB(94GwaVeM#u zZnm_ckI ztifpZvznvt%ZYnL@{X9Mqs#opw0?DdC4WE`mK)!AEENfYTZzzMlG8XwYCJ!11x|zM zt(kf7l5|K>c~N4FnE7H`$B{E`Wlf(T&|oI#;RYFD+O=tY^tC(1l7`2V07d%XdQL$^ zukSD@Z|c`J6qw;(Z~3(dS5kCPSrbs%5NYj=+NxUnOO_nw6F$SES46s(#g^m!QD)9y zIUsSRoi*QZ0NET|26N{4-CKZIWAX5L!JD?;?pWC%w3JG;xaEbIhxbTF{#NoJQ8d*c zF3#1QEI=JzR?Obc($`u}BFeRo%X%(g6wVbN_8o_uR5Zwx*)8g-NlfK@6Sf@8<=L1> zyDs%qT$f&+gak@D6u%bM(%l4$G}ZsIyMDNb6_?BZu-IQKe*`YmOu~QoI0{*Lkz}+5DweNwbN# z0-8L(bl&4|B#SX0a5vKnnu10xLt|=TbfZ{WReyaS(Cel?Z^v$JU)T#WXKY#E4W(R~ zN#7&QI+dxa!;2WA2XG)u*PwsP?Qf=dOH3qs$2f%iXWWe^9TPK3K}|+|kK*{JQqviY zX|M^nz^;!I`jnoy!d3LeVH%ZtfwV|HF)$A>LJGt5Mj};l?A(b;Uuam* zm`x)Hv2!uHYOxJnoYl}X0wgn95mF^}6F&H&U;XnSDcKupgx4MAOFVR!&Td1?eTLtD z*Kg*w;>uIxZQ#O8$ZuyQ*Nr@<-j1dB)ayMB_5`^nd$)V$Tq^2q`yk z88?}VNdg@Bb-0bz8yMf#7}3g^`pcM##qJvOm*QuXN#V-IPm0URWpz=2`x+}yK#49i zM{2c(#x2axGRC!QZoHzc$ynm)c(j_OSvl0#@)x`MKs{94r;IJls=U?QqC#Ou3!jai z#osl%ZVC~tp)>HMVENS4$ZBPK9kL|2g30+<30xzUbO}!^(86Ow>p5<3cJ5$#E?pj5 z(+%UKoqLTS;ci8kSe!XibC%@?^u0#$FEn>xn*KbZeUc41`Zr!GgcgC34_skM7icYt zSQW2UTt852SCcb#RiEVOKEkw#F9YcFfs6t|$Py?b(jR{#y($bZd8Iz~m_|psk0J!v znimNduxgMK;=Zn{Lk^g=_b3Ht5Dd|p$=8EP=)j7;?Qp|w_5-Lh)kgD3kpDH0c(N*V zP3})|isl6!vwj8riGEOOT1aI#gN;y0y^HYqAh?!Pi6xGdFgV&aKYK`_z@@GF49KJp z3FzRv)ZioyYiOsaKg-~a;bn111787$R|_EC$y_7;AB20i#5oFM!|LASh>N++DW#|~ zE!c+~j@x_u15-dL|B{vX{igKx4Cn$1g9sGO9pbKuH)*o2=;CZ(3bCJLx|C(9qc&5# zMhWBbA6VWIl8cLgneORa7xA8^!bU3R8gQNR*FvhEYa(jGDk%4jj<5o3X@%6s)6U;P z;SJ$w6KFl@i*#Nrtg8O5>iFal`H(uBGLSX^GSnZfSrRJBK`u945=^kKsL|Op;l4Df znBEm()yqZB3EAdluKzw#ZjRVDbH3V;87(oz!f-LW`jQ!*jg{5Y4cbJ`UvP1JBCoth z3OlHMvOpZ^^GgUgTZE&MV~h;$2z#(5G)0yRtik{LRZ%HqXK^Z}peV0jMt~*Al6gxu zMDripCjNC_`NNM-3Jsk*h+X4EtX8-9oJ{T#y62bsbVdZjO23gP5B#Lox|j0`Llk5N zb2$zssz)jDhGycC-MS*DKw}GAJ!BgM2UWABeC3{{v>Om%LjRd{-l$sL9$Ynb;!F77hMD@>sv-8h3nj`&fj%|b!+cgRG zi6OWQn=OJ-bKA>$3O4S*Z{Q*JUC<=^FU0;DN`apfk#$ZTtk|wjJN4X~7ZyM@Im3cQ z&#W=M$d}LFR+zo4I09R9LPhN?&^Bgt<++7!zzoFK(m(a=7E=PJ^oV9ooLCEM83nG( z8#TVvTdBW$w7Ze_sg2RuKRqvSoE^~!Gv|5^gJuM)nX<0YNAfjqyRay@=+NeY9t=|v zZ>Y7oG?Fj}pN~*xB&(^VKHj(`JRU5*W!TmLeP_|sU5xCS-{A-G3NP2bw|Z1w>y(p#3Jwa%wFYTu$S{(2XxqSsHAB8)H3(d_) zqI%~yupjnBOCyXC<`P^{MkB?!xj?HDtP^{HBpcxtA%$H`gayee*GT9pUJLf0*46}G zf@NjCW=ppCe2}E#`VM~d5|0t5#*b|f+TwL-zA*n%af;@-mgknKEw_yD1TS&xF)TN6 zvkG>L)9(*94rSy50BKK^#dxTKdly=ER*!I0nZ{LwC6ES<-Na}4$(-!aT|jEd9ghfFcr z2tssf-Ohey^+P^A54yqEf6~^U_X4()PBlM-AGUN7x}vFpxVDjkvU!&8pDr^xz@rSJ zVDVyRl*X!#JTgup6pt4cl%A5ME6@rPb=N&>9a~X?vcn`|7U4+^yQNWeD1(licVGcl zWO?eEMJ@Mtd|>IzhG%?@IP^{#Ba@KtQaxyQTR1+HK+h&?eBR`KjFlq+qt?8-*lvl1 zeL}hKCy<1RzVrjqmkz8qX)k%3Y+X}=Z}ThUk_N%W$W<5q4R=i--IM5HfJC`di*M&9 z>GD;mjwquHJlDPHI?2j?{^R}C1F_-C{ffm5Q{&5(9KqHW83MRedp2oVMd+4!wQavZ z4|K(#G0w1%HM896d%1HUJY17pRlI|(o|ypH=rjvRA|9Vn)|cFp)qHrIo>-qiS8&`G z^;*e;mn{CE-K1+0B&^bDN^8pei|cRWXdB0Y!%!_zES*uUF5MRhyQx|FNc+q=xSXNC zgVxk?2!T@-k zjZ6)-u6)LYNdetAMK*eiM0fYTOO*R&=kM6BWkE0Nm;i7o;Z_42I30E^RdLU45UyNg z;JF?TGN?Ds2$)iUir1rDu7RfbXmIj{6`FEby8Ke90|k- zp7K|E{uH%*W<@*x^Y80rVTV*4^a<={Y{Ol<3N)%|-j=Vr7+AIbO&(765=$TgVc0*W zRW-0wIZJ={I%|jd_#sVKVxr3dR&zq&bR7KP-R)b@PU@bGTJF>eCgpENrSpuUcs9?H zf@2=(6RKdcKW%IP@St$@w-V;Nr(x_1vHS6--9YfxsGXhbvuoN73vh9mio+k-sRUBu zNND<~Y8(Bha~7-fJ%@K^eCMrFhkh;hoz9Z4*>ABE-)ub1e_70N?Ia)Ha5UsCaI1J4 z6wD8IZTkDgyG_D`YNG^g2IvdweRR2mf8e z#yED71h8~#KI5SdWQqB1#ArXGOc{Esa3*|zv}j#gS*imf{wpPnkt~@MiQm@VT2g*u z02;|eC3RA}A3VqWfgikQobsJAA_4&y1r`!i|jsdq_Q{%{Cja+cjlmMwf;&mUa|{60a> zDB|AOMf||v^6JD9aJx;b{)}a5s$iL69mxoi8p(r0SBfDP{~CC5c&~>O=MOVZIjl48 z5VhazM5y-&h|WT<9%IH@8DM!2=M=_2?6&)RPBq)HjDBgnJ;ZaGWy(bo?JU?A;k8x$ zo#{fm>9}-D53U!A-)vFkc+3O9@^M7Vak+^~Y%M^n`=ZR_MKg}%5jWqn%`Z_P__nH= zo$E?l?@IG*HpNnRr)=GdV6@fa=4hHj`^o1KY2^B@#76HM`A_7x&>Bn_!O}ey>TMdF zqBX`U9FXCwJLzZTHow|GnASXtLjNCGF*mbWICp4cN?Sh{cD@e~7~u{l(xiY|x1-7U z-mWzd0p<)7_cw(6?D{6Up(1FoBAy-e zuRFBMQzq=3Lc^%gXm)ws@KH;d@rm#9={+~sVoFvD-lHKQ&4e&m zbvO`VdQg4K_zIrkS_VnU+&XIZ8KLj?IZPgb!T~@&!%jubYF^1`4?8xovxKmHX%H0i z4uRK$VZ@D(zqXB`f^dL(S@mpvDL8Dc+kgd}owk5-?;$7Qb-F(|DPVGSk3T?(Zou$g zxr^->4$F8J&Rpl6XJ2afQWSZ{!XSS?a~7dk+F_mwnkGy0$vx|^W+fn-N+L<@sk*KJ z-1lyDCFi;bno|>sKINd81bU9PwQDwOV=(B}OG}4y{K6#AK;DIgz2)AAaEl}zg)#l+ zw7IPeB%CrTs%!p2xmkW%d3&eQr67|f9O6u#I20SwXKxjrqs5o$TU1lPp&&E4)o^8B z3BH)!AmCav0<9w5&&WR>rk<09fsS8&rZ%MXi1ga-UcpLQ9ey#Jo$3J@2*LiuJhdFN zJ_7!|;_YIdQ~ZvMBBMH~@(2txwga~TGD>ELTY{h(4;{zZ@!osCERW^XesA41)vWBicUH?6Vwu1 zEwfFP775u6mTEy0=HaGeGWN)1v;TFmeq|AYUcWRK4F6op(R!_rB(!Rxjt-+gtxG4& zqzH251)iWZWIa=+->S(Xd9}XEF3DJ2DzGf=%t%p`#kgxooz$OvEypNSq^~C9`yw+< zRnKj3B@H;a@c4;V0l9_!rL#~Mbn*1_D=DUK9xrf+5X;M-np2P(5y(n=ulTL#DrTE1 zEYfczP_0L^8eO zF(q|djZ^Q(5Ul@2R=*-EXc()FH7k4j zeHd?^#>_37em}v^4$5^d9JuzS@5BFHn$e){8^ewtJ@20r{RDIavJ#G zCR1_X0d^kykE++Ua_;J%-PvA~KfMz$M16^KS&-qU7jwKTMMk*@Yf_Y@oeeGKq?4oSxHF>{?LT45h^1tpn! z)aLIiy@-eQ{Snt670@&BVGAggR53w&4@ANLPaTpJ|ro(?g0>ja5p}?)1+!_gC!5uBH7s;s;=9P1kvnyu{?lr`%QeJog*R zG+6o7dhY+s1iAbd9zUI0T}UPQ-@8cv3IFEP(pQ=AL3~Kh542YB+li(0KNp#gwErH+ zn1$j?Nt~OktZMy|ug^^83yxExUK&}dWbgKBz0o9|axc6f@AmjNibC9(+R!Ex;;+-+ zJ%G|!jc_i{KFRgPGFq#Kua9xbsbl+sO^Pv+u?=PYW>ekn?UbEi;F9WY&VX7@OXuNk zPF>Sa@fwTbfDSnL#|Z;s9wM=#G7tO0Q@UqN$RFaf$xgp(rEEBzyn2J&d;*wZ32)`t z5-LD?63k8%0qSu7Jpw}?xF4v1bOGDa_1^v;*N4Qp!+sp&1z+?drAQxWY|&y@kK4@F!g4M&VZa(6PIPcXFBmJlEO_4GXqyE9;)8EQpSv|jn?-9X5gjt)Mu z7>27Cs?#>86{q1x#X76uQ1Abt`^lK198=_Xd%Q5xz((cvwB%z3I@OAyqYNEShY?28 zc|`aH>vmgeY68cATedXrSN`aiqq&EMyEkNuRZqXI`R7L}AaF}EbGM;@bjNh<>aBQ! zVxB)G4q&tu~U}5b4$v`$MK(j+1@aN|_cUy{U_nU{6tx+z1YTwvz5DSTsYkEf4 z{(B!Y*vB#yV(tc`CF+i_Wp@sE^Id6jt?)dP!)|Cp^I30+h>pDKVR|u^ zI8~rOS$R9qX|}t@b6xgv>(~MA7uLEe8GMeZe8L(VvEHs+fjB4LF5K7aF^K!XXrBgt+*3-&(3>cf!E7UvE!4OsbZwcSm-+)OX z{2$iZy-H{k$~U@|)q020j;%7P25-rP+Qz{;ChZb&cB_*6O9_%ZSuO%F8Ma$mMT zJcQfMOdS8i_SF95WYYiI$$#o2ZTk}!D8-?Eelu#GDoX>Xf8+6-qsKUi@)fn{o z9`G>t+#THlw$^>M8v{z&Da^z7#;9ihO>)BiID`(8LM&|FnMg3&o?0W{KBzz3nxLEY z#D*j2k`|8)P7axu%%{-<2vEY_%OGb3dRNEbg00xr!J0NDP7r?a>LbPXg2<~b3|6{g zB?vo1&x|SPpWqkwwOS1?=OxYOok|(NE3A!>7hSMzlQZA~jyirIAs{5U@8xRi31=eN zt6j3$$QOeza|7;{z4!cz{Txl@&+qhJECnyUML6%32`ET8{44}+|IC1jPSX{7`jFiVA z-aqe$S`Gj6ICS%lXPak-0|G>!z1vmlYJch)aQ&Iya-*Wrh;=}#^{&Z%zvHQ>(RL=r z&TG|6Ka9;^X%uznDG!}6@;|nYmCIRAT~FVn$zv?bX{Ot@?1hx&zlEj@ZiF)Fo+;}*(a&8hki(c;kH``J~uXb z@?3VZM3H#Lo}TKW64l$gJP!d^*sb?@ZQI8USIDTSkn0bi-{kJBEjB;@b4IHbLTBXD zZH46?YKG_QJ2XK%(zf#nGzPr3hkXC(nVE})v6qQsW1$C9z%Tk`6Zr065jN)i8ZAW` z_uTe&ROf!54WAVsCw<_!@Hg^Q9d9-CigACm)iJqX)XP2KLM^;^G|fFdc0x(;aszF0TygC7 zWXWx9tQ8)Fh~HymgCy&zC@D>C*#y#i?X8GR4;X2SYD~u%1)sCg&VdZqH+I|SQ7(GC zrmd*1<~Q%Njh8b|v|zNgM*U;CwHxB*y%nJmNx|oi1^sD{aos%!Q?&%!3|W?hUq;4c zoaFAtNMwJ-^){Yw=2!Xu`C<7}w@Y>Kb7mf1n;i0H!$Qs42VUoYs%gmomtve&+poH6 zf5t28*{&t0j!*&+`@~hr>OHt~y#c|q%)b(&`|(k3ZmzGdM{S~`q9zyY&0P3WN4_uN zoOzysfpcR&JdNMoV&EyIQ0@GBYK*a7`{>7A^PN9l(B}S?!e#o}#kt>w6YmHga4EF$ z0nI01?dkgLywg#EnV-M&?IE>ne0e$G>`7K37$1H>-0$GP z9OCfk2mt@M%&Oj}-&2kYXo+tTqCSjvhq{~znOvN2UJOfhpA!fk?QxFnA`*z?lHpjyk?H*S3Bc8>@8rzz@;YMNwT-!$6QpN)54pysvNO z763kE2wg#pQk}KM1xR5rF#&&nv2BNjg{PIqnyTZz<<-^E@pI;>Jk>j<*9AZ?-dn4J zw{F>s4P11wIVbc$_b*k$_8}zdq=RXE?G0LJ_<+r{-=wnnV#GGPwKU4NgY5NctSxg+ zJ{@j-vq$Fl6h120Gx=JE0%5n8UUxNEL{(Hf2L4g6dy2P6h7&Ef%Yg#i2x5U-^33O( zwN6I?UH;cezlyTAE3N^+qzXK1tlaFXH7`Z+e6A*VV=0q3N+ELpmbircO)jEio~zL> z6%=vqN%-%gS0hgRPwf(c*bOVZGSpG~|^&=X$a%^|6{Je3)Nu^GrFL zZ?i+Wa_a@ny3Wo-jVa;Uc!eXH=$7W-fc)M3{DqU86Ca0>(P^ny)rf0=#I+#^~vwT!dS5V z8I^b$P1x2JF9eS?GYf=3Zu~*B8!w}KPlC?Q&JaoYQZh1EeiyH=KD>N&n^OSjN^()m{P-pTqY4&qT`-_u~tyqDH-6`l*lr+Nqpl4p;BFQ%PPW0@>exySqaE zjw8vN9wP0#FE!F`r6zy2zgG4mtlM6g`lfxfqVW-Xir-BvWsm7&5@Ql*gjCei^h1Y9 z@z!!!ZnE5XJa+=E<@1Lg9$dWwe!>Z)^gG)FD*V^uFGQ^;-{^;oj%MXafak)6i~rg( zf&b6G%;}#Dm<&Ukj%{z|{A+#oM6EYv(YlUpt@oxt2NUqzc3A*iy0_kxNIsywy~0D> zR|%mtVR}7H^gV2lK8grl9jtZK(#LCp3nUi{r-*pne*A0gjFqJ{iPjyvKYF{W^SY)G z8q0hg*aO@ydJ@4%^ri%^Tj3+5PD)8J0Iv{i$Ije%dwLloqb*RRwmV&ZSUAa7h8(Ec z8&#qYIFVlwKBNNtB}qLEZaLq!Twif7)FYUlFHC8$!oZ3D zUb?(w#fmD+TT!L-(V6n4^<5F@1~0L;;-VqI-}=jmw?i8wZVo)-MtyKG2ayGSI$UY+ zALzR?DMyD7qF(s$`G=c=hUVd*_k>`x!%xU%LM4q*S0@XiWMM&jTSBTxXA*2Vj{8Dc z|8&X+$?b8>-KU#&Bz=zdcK>ee#ddW#b?y4ILj%#;>#d=7^K{F;&uMz0TDf@ndS@UI zevO8F>23R>3kGJ5*S<5K$CRg=g10A`q@WJIwF|@NVb9f`!0^QT_A$Wemiol@CHigP z_C%}UE~Dw;aP38pfPk?6A-_QriS%Kg>9S$WC+Ocm0;ZP-Jp&C+*HwErm**?+#ER!C zt-jWhZm#>j@ZUXS2;R!H@$$V^0D6xcuSdWGy3kXG>jlvIT!)N;!n9RKo3Pc7)HmO9 zmk*nm-ewm|>i)!6>XvFSv18bFU4-;%V(vz21oL+^)uch1=F0)1>4i4p{>4=Q?-TA6B6+JR^>{%5@~GSn6&22&o6xD zw?Q#!n!p8=Oj=t0~c@Gb-`CCE|HzL31fhq$d1x&k(PCkmhWv0M`c$>N(RAYm@~IxZr9|CHT%5wrg)Hfsg}CT}*XMyd-2d^Oe}yoG z7eO~3V8tLA_88|_xNSA3>x4&gR)^C+KooI$R4*e*`s2|O-Ep)%i|Uk~oR@1cKtIp>;8I_YEJ*2%g(!bTo!1oHa6wK~*)Oj` zV&b+9XtDn>)yL^33!?! z34jZT6&{%?cV|xv3QAy9`XV6^Y5kGhBktw=8}<_i^qLi~nm3I&dk`M|hnxU*;OyFU z2nKK0{cuKiroAlFWaE+IF-V&1tQrkR)`)yNt)5>*I6Em!KN&G9TR#=Ur3h{|I%w*b zX9br2%@1EFa*w8$n=aN2nlHcVewE!bVWr);jM2@^~9&{hYCGY7e!PW zL^E+{)kee!Eh9zpG?+Co7>Eb&fN>aPIkI@D1WJt0P>bj!YZ1gEb68P_#hny6bt;4L z_h&-`6@OCaCcnT{f z?gS|)gRVp_@A@q1DdQhY`!Eq^>JJ;J8es5vZJ5s(Te;OYKE74#mr}M-9t*3Fj|d*_ z;cY+P);Dop@s&A6w1>&L*aQ;yDH-xcA~KlY$IEED^Rj~NO^%E{Hy^ov9+Br9MV}>w zgzR_c)?l@2)&g7Ov7U{H^EJM-PwL?MuRAka*- zlQaPhxbRPzH4QpRg@nvb`JXU#sDi$Kc-Mt=R;7ArpS!&^Wl9wJMZCqZ{6|QLCjVN+ zMc*&>-$c6YALin}#yEbYWGiXX*U-v1HKT*op+5eFGW~qZq++hM39Pu|VjhIAeIQMx zgPAW)iV?$Wx~CjkxhIVo7}dEkMpq)GpYl8MARb#wcTtiKzVDJY`8_8gK1b>gD;^(H zg*2i>I%RAXFX#10@1NyqVyO@%gRY#=ZItiqYkTm%*7@=NfLGDQ`OCX$J{Tkj;i(@x zQlzf=+WVS&eR`OPQ@{cQVQ|`yaXFXWvzYW(vPpAB+K^IzRa#is&<|#M88@fe#6fUg z7rX+OmK5L29P;O5!R!fxU*|}{#Vh?v;-)77EWkEj2cHsdqPWoWeU29hT0p$Mu z4~t1MOR$MB`lu+OY@49U>!0M9^oZh#*@gYpJPPZ8PzT|(Xk$jgW^&y`1$cPa%lJKP z%OtH&$9%X-k|PITVPAvL${R3=!Ne}a49(|F!FQ~6HovunO7t9)8Pp$U5*`k{c^yA^h7D9Cfz7J>r!}z!!~Gi8wYDG_)o`;`DwP zId{8Y|3hI}WSHL)H$K|&R19si zD7Mm)Aj4m~mXcCizJ*FKG#z|xT|m0ciSMo6!@^W)bI@XbAckUK*(OWhrqM1pF{OTT z9MFQ7Mke(5cij6gnyJkosRVo`5T!aCX3so0{LgV`MLNJtkt@L`cXx6iC8r@Yp;5R) zD#e;3@8Bv<5Cu)}Q>&*(Fr@z@bLX#TR2X+uIUForH-}HpAlh~Bo8+6+Fa2IsyO~>7 z=jYEI8cX*F>J{`Y0!0<+Ga@NCI}<D zO9$aRk5eCUvB9ElGhyZpa#RkdohxBTXb?RwzzPYG^)EEAsg0n;F4@x)rC?IXBa!ls z>#&a#?--{=fpmJw4RzpL7|6pr+y5mvK@4f3TTU;D$S7`i<^NtjtwQ(~Ex)U? zuHe=k8~EcpKsr1%mT!mE>`Be6-SnXdCYOMjH@cz2E7}_ymg`Suo%kJ|sPJr>i*lOF z*=NNZjwr?PqB}HGDTrpqRWV2LaR3{MZ3mT!aj_wR3xct4Ft4#Y&|as!V-fD}X$$Co z+Nx@rCbTxrYN&aBR5S&kF6*N6&ipe z8;GGA)I24RZ@)`M= z08=z=eY12D5OP2?!wc!vRQBCcjI$~woNv4LoexK0-&eO|^nY*abiHQu^@+XT>f*NN z*O@?D_w?u8QG(Z(Ru32T%1nhJv0GlqTyZY>ILik6G)X6^i8#xXN%j%)2^}86bZ8(g zwgOvy%Oj7V0X`-M=A~!rD0mI%TqG#U7AUsVNz;Y=mLpN3)tQI;JEC%o%d5FK1pIEn zQ4Ztk%0D6-tHzRG)giE+q`tuS#iqM$@W=HAzURg-?3(7*yYRN6%oOi~89Af zi*y}@cf&~c)V%A(S8JgC)+`d1D#EoRB;}kFhNAS)2sz?E^n$~$GyTz{D;chrR7s!S zaX=FZvTz4pbeu3Y!lG!jOt{TM>8aJ#xPV7HiDf;jb{H70)OV|AXC}gvYMc2)sJKOM zeJ&qONbKf9{{Gh2hM8-)MnJqI!p>etHx9+)dWbUc2gNo)#TJUgJr%5%&P={*cDwW@ zT7SoBA%8yPgsZoH9Zagiru;`%*<4oFA`sQp*yLt}>Q^o@I<_T&o_NQZ{p5jh>zhpf zu+QE9ia;`3tBQTHD7#Y_dvQwRSzsm@w{%xr$Hk z9TD45oz4{G|4r6E$-uw4C?M@UQUZ1NFqY#l3zOKo&i5$RvdhaQAM`b)x{`KCdp{-q zKx4~e3=_a_ChL+347xm65avTj2eIYK`qb<8w)&(rZYj}c*TL?;B?0&1B8&3{%sn5a zJ}b0bn5yZi@w-Xgk557+bo>xf)f-h0!i&Bz#y*1T|4TJfz+BQW>lDO2EOX+9PfS!8 z3OVYI^|q7;Y@DPPD1Snuz%C?V?x*%;d1ZH&`j`1+sic~J`*ntVljKw?r5kaBx zFxfhh1QejLZv=YlKJLL_)iu6aatxC}=0!-OB!3U~5M5u8O`8{Vpi}nvu&hte%G{wyAcvxy?wkl}pXG;eh#!RKR}ZWv~$K%oI$ZAmjRA zoLsh@mz#_WGxE+{r1plCBv{Nj^*eOYUjD>J-a~ZzRqe=Jus{c#MV6g9-R5Nhi6dgH zQcsvivg3#gq)aHTgQAyFBO|{GX-~!b{MhQWh$kd$f#F}LO)-xO-+p5{wQ98Q-p&^h z$wJZsZC@K)rc#@h7crVY@1^EKf^oc0=@jC*RW_uzg(p0UnTlf5D8TsjUs9+Y#{gMQ{8g?>Nb=%1H=-*lBJ_MQG>fx7 zpv~`z5qY`f&lWqISteAvJyh%{&c{{@p z+on1LCaY;2vr9D_QdnMm!9QL4x0LLJ)keNv^3Q7BF!}vATH$<1$SmtRz^8f{|9rEt zUkKE;#YTD(jrc%2g+#FmhKcA zwc5MZO^Ab6t;2NmrCR1z#nbK- zLx<{j#U&oQiFNG8F6>2e{W%Wa3_(>-5eF6|UCpzu2l)2h+e zpYEeSfYvuf3qLIduw0+wk&Me<-?17(pzeu4tiI^jVH{dMqq}>ri)T{qJ{NY5c)D8Qlg__fuEb;j*Pat^vzA(3Q&ayU#4D%)V2P6mxgn_-v z<@wEr0c~S!!shOOXfDn0JFBnqe`6sX?g=*3;)<%dogP}R#uz-y!NIdgA_ThP6})M< zONrR=SxeMW%2b)C?a(+Amt2++c}#aAjK3D%6Q3xDsgSv2Q&2C~mp*B^} z{hB%iplqyb-m>9i7y`F#!eS{b&x8^_i&Cwi24{^$ z_LDNLA+ceNBjcuEh!q8d%2HrvpI_o{QwZbX{rma zTD;bMn-TDpIl6{fkv#k>Y1R^)Etf%b@&Z~{4~|)q{#I5O`G=~KP2+s5Sg^KljVptbJ z)EBChAbsV@VUM?oCM`LFI9nw`=OHzCE$H=&Yn$y7ey1_#RXXAtu5apn?_lh$=??e z><=}b4{CxSwe-0U(r_!ol{2@wCnO`Ye9Y^OA~vk^7qj2g52EdVUEnf1I?9Cmo3W2m z`eLWsi&q?rPMah(OJ;v_39e~AR2wVzL^fhV^mRECT`Me|w1mg9Lx+wF-IoF3txc+R zHwLq)wwl?A_KOpDiL_nK_<;&^8ps;mnrtijsXknvk)!IUxBzTCy>Tv)yj1fLU6r-O zP7do8woVQV?Xg=mYX}QMj?XeVJ>X^>;t2axxoR8um0eBoK?fV2s5WK$=VA`djW?^( zy%|P%y?=jMUXyCjLks#Qpoi(f|JMP^%#u_!FMBkI>}I>P2MU=ha;c&}rk!P{BomHR zN+N0`CH7+@P{hqbZTaQMn}83B7LW4kknY>^p#G2S%E`3I+B$OF%+a;0nUiiaZKu%z z;sP{ooanbrzoZmKc>3Xt-+$g1cdb6gaK^tiTU<2T9fhEddA-(m-bMq$O#JZ@SOkxf z1Ierp3~;|+mW!1_u{lnjr~DHLMric&@-}DzYb|6!U)>?mXO|{ zrE5q%L_2AuKIm}1d&t4oBdb4#HjIE?I5{w!PgQt4Z z!Bgi6f+=b_Szh3yj+34~s(&zrao-weiMQO*{`BadA(S#ITGml>y2k-ZO%7nV;*M{DN5r&HCD5IDPo}0!UO!^w0zw?I%Ukx?iRSvO#7X9;Q@GqE5p+$<2t) zx)eN?G5Uv!Qpfp?)1krEa~3;nCXLyQ`wG+faHfD0Ibv~AVkKt$hR{f6jHv)x`y7 z8os(c=tIhy&H3fmb?K~R%oDYQ!**HfO`KoI8_69$eEx-;k6vEuQjH&%ZLUVLt5LMa z@od;s=nFXNPF3puRqyMHKsr(l&f&AQeH8pQsoj7tm}TX;k6N8ACQ_5QPVbwUHlqZ( zzWNW8gzul%5ztAL`F!%nfXPhpye)-1kq*8jY*r3gXB}FQ6FvQ=-#y&gXMB=JKxi0N z?gkj%iJxB`UFrlSVv=A=#LFRPdK~8?Up)?^dIB#B%G`Z@z3j76TAiB|9_I zW$=2*&30kZTFzBcF19JOIq6PW_FLcGDVL_X8icZZA`iMpl~vTuIC6u(h6nV`V!0UC zV&{r&#A7VDV^M-@m6n#Y>{25vtl@uXv({?4z<%@Z1C?d*{u7-2m|BKd3Nx5ygh{*G zL>SH(4_zi5rTEw%uYH`29OlXfLPG}>ulW-xqg=sYqH zafo_NbBQSmZtUq|EN^`fu;~*vY@AOgXd+Aonwq6RH|+3P_U-Rqn7It;W803XDYeyl zgJ#6QGCeK!NouZ*?Km>TS+o`XH1!pWF(LuF+atW~pL!BG4KZcg1ns{9u!>8rzU3jd z)SJJfA!kWL=oOT>xOSSz0POa9`SgA+@DhtfE;8CrLerd~qv>T^Vez7rXL0L8fB0UC zrFv9BKq(gaw1|SGnh>rD1tP3H9I_&NQ-qP@sSWgn)Rv-n1k7eAgUY_N`swyKq`%RP zgu|z>LC%3R7_hOfBoP#FRCvzjcP2< zr(d3W5Gz?)PB84k-4#3Nz(c?u?Hjunno~*nX1Yv3%+Xwxg(u34!|T*2xUO+tPBlC|GJkjfe&X!Q5ZK86roY} z;r3n5s)=eNV&GB0};tP%QiYK#$Vy~2m@Qnpk%rKghc$0v4DDRMU}D1pg2o+nd+Ji}J+S8b~0t*uQDc5H!ZM8#0d>}>EOLNGBj zl>Hwv$Pa>Yn)7Z4$r=)9EoDu!3Jd88)EL2WM3NA#3R`f5AKD)&MFN&8`j+_($>L1F zf`EtuKUHqQg|=a@io6B7c;BO-^|ofz#H7iFsM(Jn&h(QISw%|Akv_*RKjkXf(X-{3 z4{s3Im60_uKXV$^gTq(-?@46LcdSMjq5053d*JMeA5QmVeyATCfSkO>JH820dpZP9 zpU2UV*?NixQijFQb@FOSP?M^?qbFghrUySU58zYZ$LRg?#Us6G4*u&XM7Df8^b!hg>RU)U=OLnzD$floT}dXyZoW zWHl&6Y=FBQHIkh#4og3f4{)nag$w=our@v>w_+9sta{0Of3-E)od>#sBPs=`!u^1$ zW5HGp{$b!B$e2a3N{DYQmS1HdfbH+TZs^mv$>gNs;;F$=LYu5RQ|;K+<0QzSIdd;3 zv_jF}08ha{LDBM_NSy&1PolmXrPeHG5dfubz8^DQ$w;Z_##BXqVvKK09t#;p_3oh; zHT@e)Z1Tp|p3opM7vSa)1Dee~D!`2RYd)~Ht(NdKMJhIcT}@pVUu!n;X`KZmct14S z)${SO%msac`ycCHMhzkoZhmr{gEHpGV{S3@EMj-=M`>s)*EOr>jj;o5j~VHh&gC z`j{cz*^7TGBN&Nga_Q~leIpo@$^YhF`PB3d1eyv8?@WDojM5(?C8z@UC(-}djkqp9 z!A^_N^ZDt!%-48-E@?@4IfHoU$@&qF?(*mM#+&rIlk6Vdq=etEv+s0CNC`jKOojuE zK)YwJdTAKM>HH1$e5_#sf7Q?cf_*=mDR1Lt;%JFPAlpy-1|&F#E>2gZM4(W|TwvA` z?(5#YWwzIduVt7^IXsAp!iK>N*_2%D zvh*M^sOj|r)Bue`zR>|w-~G-v=du0HxSW@#n-RiWYf-8}7ywTJ9gvS0ASOd4sf8Ct zFsez{9UWI77VS*A!aoNfQ8+xU*Y2L8#OpJ1fZEl7F!vt3PttwpxszPm?a`SAIuMJ=7Vy++3vM$lya7h*9hET#JwTwiFUvRps|?c+b(@~E*` z$y`{h3Dz*Fvwl@)jVylH%Vn6I7>Q7R#+J)SqCr?vw?wL|h$b?EI1vJ?wI=`Ri8NG^ z>tB`z{=2TYXxb-P_%Vw&&O#BvsP@v(-TB4&bLy7~JwC|TO2jh#y~0r+WWlwvZ*%l>a#SdZbBSu`mTxj{b9kd|4(iUI_ z+Uh_%Hqqx)CKW1Zy|KK+~xhskp_05W#N=%J5l>f- zggABKQVYdoSTaswp_NE2HZz}+9c-nE=>Mx4Txj60Atu`wTY-z#kHBO=`XA^XcSL-+ z+Y31yzW6P2*Dt-eKTEfZiFxFlpwka4R1VuTz%A9UMhr>W9#LD_$mSW9y;P<>HjryVMJ=Yp@&XyHU(k}rjtg*tgU z%=61mu4BW@t_TNhMqz(nn1A#qv$CP&20n9q{R`}Hy1fa3KzP8DKN*wV^UP-8APk&nJ;7NGchS*Xy9pNbD#ww+2 z7|m9H!h1iZ{rY4cu@;%VI%An}Owr(~1V1!-DBYfUYWm=VHU=$EZ$Mx|x6RWaNm6+U@+QK^#&#t@Eo7R%dIbb1kDk9!}SH86h^eipW>gvk3;XpXre3%6;$|Y z?S-z85c#81Ph|U8ACj?o`QHHPb}MVbq}iM1oW9>!?-FUd|3hK!$NMDy=LNep} zW-T%ji^6Z6#rz9VYGCKqH^&y&mX)F9lW8$rLFy@e=%CiiO!j#O0|myvFG`WO#aj1h^l)})oOvOw{Okb7YHYm1x?>lSky6QYX%$=!KBw-r zPSb}V7;zGTcid~E$f9&z_QFxbIu6OP>e?T5r4Ar*rHD!BM!`_}6k zH|C^|8iL7Ar_1SxnX60^G?quVNm|^C(WRHVBSV7L{s#S_fNnQOH@uN065sO0;2+Fz z3Ue`0VB~Wj-hg#|q_aaP3m^aZ*eIOs3DrAZ4N&oM@+!7(ehCXnRH(9$eT}KP+R>p? zyCQYzdm(KmvY%Ndf^LU51;|dCA#ad$lX(sX*Q_qufv?NwTe{-!E4R-z4A*sM{b3}) zx9|jzYEVyCt2d&()u;a>D1p_9deT5V9SQD`SE@}{B28W+L^v~Yc z58bc)pO)pSA10|t3##rZdmqT*mX~L?vlEWGwx@D3WZUck*+$xB@hW2wqvB(Jekfr@ z?P4=(=As{36(L&~3F1r~Y8_C{mD|Dfly}%xct?pj@O#zfc17F9IPi?jP~zpbAdQoU zpGzaMA*|IS)hyHBasa^1SPlA?8HL+#Afbqvy}5Tp*^aJb|@A}A{}vux?q z4q#a7hK1(q%tX9s*JLM2l8UNX{WSZsVItH#)oMlVEgjHrO_$?2$TaIuR_O2nsT>6+ zF<-SD`epI%2Ca_SgV#1@2DYeQwhV}-C8)YsY*hEs9sdbKbXWl`mmDy~h2hw1XVC7i zU(cEf)0&7)`O@O*-gN9!&mjtmrQch?03^Vu9%O}#0*snLW zDQM>lG6aQu8hn3^J2Fsr@G}WVhJyYeLOu4V+rKdmZno3dukG_~EwhJ)0SpcLmplpg zk8yzf-(oG8EUv1lwsoDNCcPXK;-z+G$b~+VGWpvN$RE?Q*)#l1T+OYpfx{g2lbXme za>Y%|tGMN6(>o{0kXK?I%4M3GonlhnNi@ICY)(yjLhKZQsK63kt_DvybDZp!G3<3? zPV%QG98G!u?ejgi_Z9NjQRx+Rp7WxKIQoJExvte;U5G4-A93%{EF9%4hZic3{H;uA zd@+)3 zo}eQ==-z&fObB=J#6hEF*IbzqW~C({Jo)gi`xnD{P#_hF0o^o>t%?{NHu+G1udMnyP6&@;V&MM`3pSIezd1RBHS;h7t=^ zJm=U!7q_Jx2F9IReo(6#14U_uWC76CreNQn!DwdI<0zW(OSHeg9QE5iUfaE!`>Im7*(|ff5y%z&yTKz7`WnAGQZcQ zs4DS9%W4(djdg(nTBvIMmt#J)t^8H1qIJ!`RR7hqnWc)!4x9 z3qr)W48K*Kfe?3CnOmBV8dtIym@w`BnMP!Vp&NBZ3BNH+HlMFr+nX&S_iVpw11*p$ zPM+#WnEiMBscU4#qtxi^*(`t1D~>L|-M{SZ8Lf&a1RfAQO3M&!{EE8OH=Vj~iZT25^|3u^>v{a$i}0|}d+H&ZFRq3Wn420G)!FAHoLkf0 zNB;63Y_4*HZm{R1r5(DMIP5MVQp~JRYR^PV@WGz`;IMvJY=?Km^Qe?}Vv)&;G+c(S z$_SSJEc^*V3(Y?m^VYuZucK;wF1QE$w}GI(%boHah5)AiK8aZ>`!;C>5zH@M50Q4n zr1=UyoU}o4+aW{vT0B(n^oocRPD1N;aoHpaZY_BdmfQA{VVo~ zDJ2n*{vo|aAL0&Zf3axg!&G6s`bW5+U%VpVc}&eQXW($S3ylE4Cxlz?Z=0}e4Of;w z&W`yysChlM!#XV%ixfM?-FVhA935^%_lbXX1W~Gj705#3q#FF!e~RQ8c1G)a6qv{t zpIk1w&)AEpn{KxzL)3~d+JQ}6-j!NB?v_%HXmkUpppXcwug_ufpnQ1P=lkFqO}q#F z4GX?H-jy45v9!U22i9$WgUoIsm0jfcwP2h7-%QYE+lBNC4fTD3t?l`4JPOaxOso*^ zF&fy?MI>&k71is$*u*}#hwqP!=0rTc6#OS{5gQbspmO-#1mog@hjraY@~d%(m|!8c zB=Djss?gwU{-%W5RBZO8-@&V?7Ofy2Tx_f2R+9khOF!+iYb8Z?(iM}op3pxHZAWRM z&F5>m`2DaBh2E`jRB#?HYXl2ppHHb6I0pG8>oqc6O z(?{5ZgeM{Q#ReFLn}A{1SZAMS-1M{p3(DE(wDii@K|?Nw&UlQ?GPa$u11T|cDa~GZ(o%1IB+{fi;hxXX^#%u#}6>U`<} zfnvafQalwQp}NCAc9V){{!bD^z?gym>3Y=g4}spI-lM58z?f^W?|8Ka5@*HQ^}!Hr zM~2>PkobyTW9vX*(U*4Nl|}D7Lo8Xbu67uXBM+?QWz-cqX6hT#rs+xop*TrQHZHYu zk4kZmip*FnzBHV7!cNg)pVgJ$>9V1pJKg*xRs*e>$iI@HW%k8bHpuq6`J{f#bM!nX z?a4#QwAM%M@v*%b35F;QZVTr|NT{3-7EMkDm{93Ss%oh$`8yMA zhW^_R`GZ9pi50AocFZH{=KV|jtkUo1w<>O{Zx6`XtIEXKPa6!ozg*WT!UZ+{J(!7! ziDdi-bS3@*g~nKZf9RW|*Y_gB^y5qsNt-F3fWg0x&#(VnQYB4uX-LmI_&#BW^3hWQ zD|ALH{7CNjQAzfOs4Pgoo^rta#WkhUcORrjUIV%2`jox5j4+~+cD`^W;ht0xbh>|< z?ALsKzK+%HyjZ-q&Kw(Ft(&&~K3iYE_-n0ipYh}@n#c^2vBnTvr%(R0CG2I!^hL+X z)jGF5aXDB7*x=N!~Lr;913i!0TTMn$hI+3hWL8(*X7 zFfeQ_p7^+{z|GWzPA^j2Z{^?mq=Aazl;eE?Twc0dwdf>9`+5f$25faP`_4qN6JwvM zC~mNan!?Et06NRtLpX=5`fi&4g>=l%h!&gV4Gw!*{OUX^Z4ZQ)Bk947*_~#m>~s`1 zBCHa@(QUtw?h&RT+C5I9?-d_>nL{bV(_6G@Wi_(8y_)uftdM&@Kq$-6qVJjWT?cSG z&(rUP0kg&Eda=y777^mfSb1jRUMp(WT5o%xnNl8X^ZASRY5|#mLR){Y%&Zms+OhK= zPPiG(uP%_FQBlrZS+4l$kxyY89QRR*WtHwm=OyvbBA@DklaJ)@G=jP>*JWpoLYp-o zH6O?ZtS4;TE~>UNV-C_&pk=z%8q0`v_%*kNTxS^Pr6`h<>&@^w`R*4*9 zCA18vuc%@a1SkEx>fSF(m}h{}RNUpR1RSplS&)@f`-Of8({PlC3LDsvabu8nr&s-L zQVI>xHbzaUh%3VO+4(j8nV9y8U@m2b=24BnR1PRuzAEe<%~QX`O)4K*kSgRIoGZVO z845R{AZkS6I(5xD*bDpsd1-B2Ifq-i_<4am^mNeRo)2$6xreyn>SWjdZC$$_I6{+> zg=hOrcF%Q1$G$90+&cC!rB67#k(rtJWF;sfA~pzh_&Iw23>y8qa2m9H#x5GaFHkHE6`ik(zIdC$t;J5F zNr>k?M<`KZqdVhp^KDPLR}XC)W4)RUysd}uQvG*eZ9W7Hg(4$`4lv-RS>YR(@L#

xszZPyL(8 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 diff --git a/frontend/__snapshots__/scenes-app-insights--trends-line-edit--light.png b/frontend/__snapshots__/scenes-app-insights--trends-line-edit--light.png index a50d3f6dbcfeaed2cc0148865f1dc2babef13151..39f23e4aab8d141a0cb17618346204ed014ff6cd 100644 GIT binary patch delta 100304 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 *(&mqbE()a$e}x4AWT@a{fvPf&$1TO54&9+y;M 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

A>KATI^EM*pm@y8K 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%0A`yS2o`zQmQ({_p(1hZE(MPhDMX1+I&Cg9rL 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 aW)+!}NVqMeX>l2S4K4M{YGhSQzrO*R8q56v From 14c0caf439110d889a8be329765f6c0c46d1f2f3 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Thu, 20 Jun 2024 16:48:21 -0700 Subject: [PATCH 10/77] fix mypy --- posthog/hogql/database/schema/persons.py | 11 +++++++---- posthog/hogql_queries/actors_query_runner.py | 2 +- .../insights/test/test_insight_actors_query_runner.py | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index ddb7a241d957d..1ea507dd8fa61 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -1,7 +1,6 @@ from typing import cast import posthoganalytics -from hogql_parser import parse_expr from posthog.hogql.ast import SelectQuery, And from posthog.hogql.constants import HogQLQuerySettings, ReservedCTE from posthog.hogql.context import HogQLContext @@ -22,6 +21,7 @@ from posthog.hogql.database.schema.util.where_clause_extractor import WhereClauseExtractor from posthog.hogql.database.schema.persons_pdi import PersonsPDITable, persons_pdi_join from posthog.hogql.errors import ResolutionError +from posthog.hogql.parser import parse_expr from posthog.models.organization import Organization from posthog.schema import PersonsArgMaxVersion @@ -49,6 +49,9 @@ def select_from_persons_table(join_or_table: LazyJoinToAdd | LazyTableToAdd, con version = PersonsArgMaxVersion.V2 break + use_cte = node.type is not None and ReservedCTE.POSTHOG_PERSON_IDS in node.type.ctes + cte_condition = f"raw_persons.id IN (SELECT person_id FROM {ReservedCTE.POSTHOG_PERSON_IDS})" + if version == PersonsArgMaxVersion.V2: from posthog.hogql import ast from posthog.hogql.parser import parse_select @@ -60,7 +63,7 @@ def select_from_persons_table(join_or_table: LazyJoinToAdd | LazyTableToAdd, con SELECT id FROM raw_persons WHERE (id, version) IN ( SELECT id, max(version) as version FROM raw_persons - {f"WHERE raw_persons.id IN (SELECT person_id FROM {ReservedCTE.POSTHOG_PERSON_IDS})" if ReservedCTE.POSTHOG_PERSON_IDS in node.type.ctes else ""} + {f"WHERE {cte_condition}" if use_cte else ""} GROUP BY id HAVING equals(argMax(raw_persons.is_deleted, raw_persons.version), 0) AND argMax(raw_persons.created_at, raw_persons.version) < now() + interval 1 day @@ -90,8 +93,8 @@ def select_from_persons_table(join_or_table: LazyJoinToAdd | LazyTableToAdd, con timestamp_field_to_clamp="created_at", ) select.settings = HogQLQuerySettings(optimize_aggregation_in_order=True) - if "person_ids" in node.type.ctes: - expr = parse_expr("raw_persons.id in (select person_id from person_ids)") + if use_cte: + expr = parse_expr(cte_condition) if select.where: select.where = And(exprs=[select.where, expr]) else: diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index 127897a606a76..1d0406461b53c 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -269,7 +269,7 @@ def to_query(self) -> ast.SelectQuery: } # For now, only use this CTE optimization in Trends, until we test it with other queries if isinstance(self.strategy, PersonStrategy) and any( - isinstance(x, C) for x in [self.query.source.source] for C in (TrendsQuery,) + isinstance(x, C) for x in [getattr(self.query.source, "source", None)] for C in (TrendsQuery,) ): s = parse_select("SELECT distinct actor_id as person_id FROM source") # This feels like it adds one extra level of SELECT which is unnecessary diff --git a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py index 14123b232397a..6715f0d51af28 100644 --- a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py +++ b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py @@ -218,7 +218,7 @@ def test_insight_persons_trends_query_with_argmaxV1(self): self.team.timezone = "US/Pacific" self.team.save() - with self.capture_queries(lambda query: re.match(r"^SELECT\s+name\s+AS\s+name", query)) as queries: + with self.capture_queries(lambda query: re.match(r"^SELECT\s+name\s+AS\s+name", query) is not None) as queries: response = self.select( """ select * from ( @@ -245,7 +245,7 @@ def test_insight_persons_trends_query_with_argmaxV2(self): self.team.timezone = "US/Pacific" self.team.save() - with self.capture_queries(lambda query: re.match(r"^SELECT\s+name\s+AS\s+name", query)) as queries: + with self.capture_queries(lambda query: re.match(r"^SELECT\s+name\s+AS\s+name", query) is not None) as queries: response = self.select( """ select * from ( From 35e2cb26e006d0435c67333adbe1b978fbc8d5ff Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Thu, 20 Jun 2024 16:53:43 -0700 Subject: [PATCH 11/77] fix bug --- posthog/hogql_queries/actors_query_runner.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index 1d0406461b53c..1f033b07bd2b1 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -232,6 +232,7 @@ def to_query(self) -> ast.SelectQuery: order_by = [] with self.timings.measure("select"): + ctes = {} if not self.query.source: join_expr = ast.JoinExpr(table=ast.Field(chain=[self.strategy.origin])) else: @@ -264,9 +265,8 @@ def to_query(self) -> ast.SelectQuery: ), ) - ctes = { - source_alias: ast.CTE(name=source_alias, expr=source_query, cte_type="subquery"), - } + ctes[source_alias] = ast.CTE(name=source_alias, expr=source_query, cte_type="subquery") + # For now, only use this CTE optimization in Trends, until we test it with other queries if isinstance(self.strategy, PersonStrategy) and any( isinstance(x, C) for x in [getattr(self.query.source, "source", None)] for C in (TrendsQuery,) From f2b392665c7847bac868fe030855bcef94bc0313 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 23:54:49 +0000 Subject: [PATCH 12/77] Update UI snapshots for `chromium` (2) --- ...s-app-insights--trends-line-edit--dark.png | Bin 146343 -> 133851 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--trends-line-edit--dark.png b/frontend/__snapshots__/scenes-app-insights--trends-line-edit--dark.png index 7513b6f9da17b2bbe44c7321381a46407049b30e..4c93657d5e0b6b8a7e92a16023adc8a3ddf467c5 100644 GIT binary patch delta 100917 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

xszZPyL(8 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 delta 113147 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 From 4ca7bbdf828adda17576070ba9030d376e55d99c Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:10:43 +0000 Subject: [PATCH 13/77] Update UI snapshots for `chromium` (2) --- ...ights--funnel-top-to-bottom-edit--dark.png | Bin 186713 -> 184049 bytes ...s-app-insights--trends-line-edit--dark.png | Bin 133851 -> 146343 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-edit--dark.png b/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-edit--dark.png index 115c34654038571208a7a86d2015ef152d31debb..7e2b6ed14f087b8dcfa688820ee2609b1d37b08f 100644 GIT binary patch delta 133556 zcmb@uWmr{V*EI?%sD!ALw1|YXbfbuLiF9{&_o5LgrIButZjchBV^h+do9@nYZ++hH zd_Ue3?{&@(E-%?@uejH|=Nxm4F_|bs-%my_q3VRJhO@Fm!rlSb_KfZ6_T~r-GcpJIM)2e-_~rnnWREo^mg!BG^CYOYA6Kjo{b{r8vw! zC5qZI${wC{sZ?TdF5%{|D`EB{n9S>{Yogt#oSQDwrA0H`_wC)w*CslG)!W!l?KWma z-*@0ZE?42+dT}rkZftzzv=MZqw{Ly!-8;iS5*n%WWS)F(>FR-!UE3(2bY!{c^J?FA}#DW2(0XIJkFY*k-C+j z3-+mtWuxJ)jg%9KWcnDVLS5OKB1Tkd$&U&}AU~yi3Oc$?j#Sl~9|}dnLPEZWCp}CJ zzcz~-TPxP*u*x1l zE2zUYUx3qcvZZsudaz#g<7iPx&ifD}qzaSSKNF%oczxrw=GFJmJ`c3K57|Fude_w0 z@ByjZ{x0e}G9szD#s<|&HwJWk2F7*WoBTU>?wqatwxx-Y5UD>TRW53ciiwd1Uno^8 z>^(PaEDuvFG-^K;bopbgYlp*kvX&-9N>vbI@`P21`Jv2eX{{a4epfL2>9ErY*5LJF5H|$t zFz!$2XqQ$WuiiyM>X1!Z_F+sm8Kw8-ch`5-TgxQoafsLbEs9*?q{)^px%uST~N+v+w3z6eN4EZxL#RIoflxCY5Sx)n-0mea||b zYi$-XL_P7TMBjSlKjMptjSY`@t3AKu;o%`B8Kv{q)R67jfXPd_=U{QC*P#kEOpySe z<>=^0QZ%uW`BjAWbPqT~#mS9wg8HX%ZJGa63KB z2Yz5v9|m80aJ&9Ebdr~6!6ZCmS={E#Q#%$A+Jqa#kF7f(O>5V2gh1DQ+5O|=*MEwY z$6V`7quP;(Kh3NR!7Qq{pxbLiz&;ZUOiO#y9lf9Fc5LQxwT^!tJ{1Mxa`vMCvoBuX z*h9Kd_aN3=`=D9?USc-}7&;$xq=MT90r-J&Z$H<>r|;gSekz zqPm@|N!Zz;QHX}UI=(!Yrow*v_AQD4OlNPQ+cG);r%g0>SUe4S1NL=IhzT2^!_P&{ zu${a*9+kb563*`mr7wybUSoLQT$84|R|mPcpP4Xf*E(`DXR{cy`!J;H_<)^j*u5-n z!e%CLYxiS{Bi!4s>{C8@tHpS0^{|mn3=8p3ZF}y;fOtSYj2k<;Crp zq_Ov5BM-m=>@9Z+ljHOg}DaT{V zeF&b@r~Yi<_6cDCXO?^$n#D|2^2PDSK-qg%U%xxt&_c#b8F~?Isg&-yAT0gr-y7_k z5*EbR?Gf2t*FQ-st~$13B^{zg>uujRAJaxN$qFyo$jd|W1n014Fm0L{pF4KScnXDT zoiQl6{Wv}Gt=oeuMc&vT@3qdn%Vn4xSqpGfzK`y9ye1NWwnD(W^X_R><2;-*01}G8#ThHs2{yiEiO#K$-`0)2bz{Wo&WImM z2p(^>gaXu%?lGD7(b!}t>or=y9e1nMwi48IM$41-ox1@oD}0s|>QN~vJN3y)NiE>< zUD70}udaJaoGjTUCeEoNkFxsv)T{I>)m#t5l)1dFUdAzL>-LOpdrTB#;daLvmlx2| zC^^+7E9OfwirHLqp=~&IQ=;Cxx7XF0bnxl7NGJs3lw-DS;fkikr4VU!7QKgtBxOp4 z5h%1w&nyP>9g-+)%%5uycr5hEUEb6cVj{_;p}LET^?r9-T2Efa(f0|(+)^C@>qNP8 zs%Qr<)hn|YwDPt{xGh+KP}7f}LM{4oqZ$p`Z;e)_;+9aVCvIm9aPgV6GTzmRot$h1 z%0RjLo%6_y4_Q|kR9f#Z&8|cRFR9iseyjRgn5R_uLy~Mb2kH-9|Cqqy`m`suIK!#% zTm98g$kkQP)3~mivK6|7qpo{@%-B<*uhjzXZ!e{!r74}}yg)W+jwpxUDX||Tb6Kzd zu3Y@+V`GX^tFmOY$gL4U8%Q4%(-!>mkDy05NbyppXKUzSE(nx`{Y~mTFz#FD4Wl6XZa2Cm#8c`WC4Mc`xqbr z+C@k=8LE>b%8Ko2O};YTG*q-@!OBzkh$$JLAc4TO>T!kXFq-$qNdEo_G-orL%K0RT zgsC{m-*+{UzK`kq7q#?i3wuzAuTl9{?X;6G!ZfXzRF2T+q!JhEuW!Z&U1N!hH7a9c z@<(TnGzbU?{$QDJoV<3{KhEmUo0Br$;2hT6A!1t&P9&uee(U;_2BJ~ts8P6wMl4SK zo6tWpK3*YBpQLFFmCUar3i2bTR?&$xdw{?mk58jPY8uG47xne?i|2%%AnEF+S6Gci zstWc}u^x^-q$n#dD_KAO{)e`{;n={SCKma~pzKlF>1d{WUde=oL87FFTpTW)a?H_y|Jhimm+>>6;=r2_eh2()PQ*FK<3O04<@42~D#}Avq5l!8R#Z5v} zoukA89{%x|=f)e(C3n{e5}tV+tu-`s!Ma<_=u}`3a*TX%bu}l_IspOB3uX1vZ->Jk z9!G8$M?1|SOnmQzgkIRg8FYr=+W&6v&x41$%^BL$sL0(hbUpt2`h#Yb7-Z*G!EvHn zBgQ)E5su3wHU)Tl{`Q7G%k+p4_OHoB0JX1~?N4!V#5}A#_m~=!x?!4i6OH=09gwGi zQBLNt*?)-25B^lL&4QOdZjg*8%)Bc4&^ML zs}&hvr)u|<8Ty?A!~?2FV1&zQc+UqLijEDW4l`s~G1whMn0;~|)+C`U(XSd3T9#>QzEbSIdD~4*=s`?}Zb0OVc;eQE zWdM(GaO-Ad>?F_{MJUWF3H>6lc#9=poC2L3Z=gR!1hD_AY@hvLqo$0Nm!2l zb7%B(b*6lNiP~qU0}5gB5BVe9mu^-cZDT)RU>3rqNFNO3>AP2`S(dKQoSDuFk-9rP zKHeDF|LzIk+%(OrR|ypr4wDsD;&O6nq8)!~n>eVVg0r%w&=nBjEA)vsD>b?ti!eV=w%!u*f+mI z?{hUoaFVwsOZ%dr=-h|n-7Ay{QY#cGluuWnCFe}jflAe0C-%kntxjFoSh78%ysW7) zf94rRvz6^k1fwgyuFeYDD+URfryq~uZ{8rcdfDtNR5Gz`U}S`+ev6ln5-=nqXY*Wn zsTg<4)&Gq1-u?UOzrx$}UahD9eeMV3d|CAC$e-$2Sj)vErA4ykJ~Vo8gJdL^r$EUM z(UbG#$mi|t@27j5+kuc9l8@@@q-{h>{2RNEGfcX=edTGmUp-`EA}eEwlryb=h_NRc zSGWE46R%I39yuLdNJRxs!K##l8%39R7bQRazuWW=GB{C1%Z`_F*=+dmqhg#sA&bg5 zQfcY-_HI*6eI>vb0MuvHx%phm$ISHr5(i^o#NA}%gL z^xLRGzT4wG~Mk_*e*fK>k@w$qCP>yf!Nc`9B9(n3|f7Z=d`<-~qW+ z)QlB114Bbr&_WjDIx^z!GWH5Mh{m2i9ayhetKd;E!==sskrhOVh&3z~OQixlI@JkP z1H+i25#Rru@{X$NME1@*a79p5HOesG{#zGv$p10pe^Th*WySw@{NJecM}LU-pTqng zw*=fn|My#PiUlEGl>fZA|J!BzF6oB!=&g^>e-`JHyH>8uws=i!=j^yAC4V%ec?mgv zeMv=GYCY!@N&5M*P;`wvHhqoTwwgE=xWm>aG2d3_q7E{W-hqz$AG0M4K_%Dkip-X} zHX<}CNAY&dhjK;2zVLPQfgY30#>4H#9_6%F=CEl^^y2`6r`E$$@hA%6IC0Gk`LisV`FhX zcQ49xn)|c9Ng-X;QpbX(-*#`Fygl(`-J&ncf6fI^dxl1>U2FReHS@1jWi79-rMqEvRr{x>_jNS?xW(Ou6Z6Mf zH<9pG=#QQbn>-!-#A>`)W3&HMlg#VOdvy5xu6Fx`)$(3-JhK-)rqHJC^4f<-WZV+h zZjJ=EH}0XtH%dNJ50#3_mV)<8dlgV6T;o-Op$t0qMFit~y&dwflbmSoP zL%A+2-^Cd5z?I6kABTR^urECpTBiKBIY?KA*Cc!*AlJoxawH6|BXLyzioHS$LUlMj_g@|BmSYY!PuM+#K^){cqB%M9zL z^uKXHVe{Y-&MtQ;UQ*|l=))Noi(7}83*P!n;)phRc{Kt!6HX%7-1RXx*{6WVai^na zDrDUA@-T^WXN&uXV!qm^d}{y4&T;bP|F+aEcg@0CS)#~ zc_t)KZ&Ce_lVyVB^Oh$o{qKZjI~79TkP1}sSL&@NJ}dHF|B>UVu})U!6~Gv(-i}&+KLC ztucwZR(iORpUd_;^2bQLf8#Bvytt&f6ERWpFtJZW=gpfGeH=8D7&=A0u_8gu9YMD( zuJq$g0Mr>HCUKOT^78Va@ogsnC?8;8Jg1~YVPax>pdpK8KT2QnsDDxVSu9!2Hd8c4oss?nA=sWV>-h(0R?_Iq%)r zYB4Q5)yV-?rBrXlOi1X*Fjqaf>H2zsCVn5FKptW|NVA@srB{clA{mo;=QlSc_2i%O zI^8q}V^bfJXoFo6Y(gA9X!4ShG6pa)$xYSl=79r+o9~e7Pc|Sfhc)KSjM2FRuAo3n zqQ|q$7@31&fOol>E{Erg{Q!BxVPl*WU> z%!lnzu;tGEYdYn{T06?wg#73H49O3dIsnJUIW#tf3#E;r zV@S}z6?8pkJ!XfUG4yjv)pvWDM_N9*hB zYo15v0>(w?IKuBcz9c0{si@pVJ=**oVZW-!q5jEa`jg0lu5j_(uS$PmTIC|Ku^=); zbirbXXe&QU;L;sHhfI<6$v$TsX*1y{CNk>GplgY2;L2f0$M4FGL!#|;cguj^#d ziz7tyty`+X&jZ_^CJG38LQ?)UzqYA*drD;0y|4mO!)$PK(BC{ENfPi3%#nVvHlEH8 z8twW*Tb!eB56IDE{#M#n&5Y?`2zR5VrGOdfyZWh@NYfz)lD5I>UE#pp0<=f!w?81xJ;jF#ACb);GA;_xOHDpoqS)_Y*ekw{0wOTz-}j7TU%lX zgoYZs`9RGFu4Ngch*U1|=?QxjD>y7Eb(Pg{gYBoYdwg-@RkVPo+d*>>8G`B99*G0c zF*J4WA**p8NYl*Duv0+ShQ=~{EA{LUoQs5RRuqi-6X5kEYE7g_#ZBiNi5%9HFSB?e z9+A#RlFfq-9Yv>mZ1~KqyBa#$8A%Gr>r8fPvgT|y#ocWn-%4s0#`^Mn=X<# z3e|DfG&qM$*pLj2jpvRoYIvzwS%+6{04=Gxv$-msxVYsEhY2DGRF1@$GQ%Euu$fk` z*dneF&C`h4fu}~g+~X&MpBy(cf_svqt!C?EqL&RS)EMwWpqNjeL<%A%<~77^*5p95 zqWz5{*aj6nT7r_-X{W_Nf&#D^8>0=WAiaRM_-Up()hpu2Ddl6fQmN;q4E*KUK>F{q zwPRsnHYeWKR`@bq!iPpLxmHk&vDvi3`6~NX9n{`<5vh@iir-8SuBD;&}^2WHOHlKlott z51He`)4~4^G8skmsEdTk|@I#EPxrksg zNJd0NB;}^@=7bjj#&@WgX%aCK1yIC9>yHuhgp)pl$l}XYm+APyqm79$Od?L!iy7PT z?Y)Jw*GF4}F}=M~fK=D=nXD~0Jyb#hJK~P_piY{F4KqHIW`<%<(!;?u=UFFI31ZMD z*+0aym}?wf*#|VlK(V!T4s?lIdU;~MSKJglQ4-9ce%pm2*QBKx_nHeT(v_2YZrFp$ zTTOrj8wwN+C%yls_>^&=*2;h*5qa<6!0wW8W()Mj(oR(qu1#@q_^P#U@5@f&I5#CE zBz#w(<#Du-mFgAwq0|sDTBxR1s-l8lIcpf>qm*g8zAFL>uC+B2Z1&4k^Xp)C!Y~(i zciWqKbKD4kmL6a^_d$bz^hegIR4JXXfW3@V3c-z0TNygh*g?Y$Du=_cpA6FUpM{E0 zxRLSm*Eu_?;%3OvBtt&8ri+znvE%Vx704bc57ltSz3S6(Y z&iEUsgg&)={nsYM)$o;j`AqUEy@)?S#WzuW8$%ldCGcLl``)>GZne1z z4IPqzYGZd(=UFEPcI`O9y}gQL-tdRP5-||znmrtLc)CErc*+f1(rM5=znP*CDc4=1 zf+nlYB|)`w-3ab*S$55mMtdAwyQcm44A+0r+Jna_*XjkjYdfGT_v6GaJ4r}qqYoWVP=annz*iwFU@zk zuEt1XuUN3MS>XC29gnzIHsn8ktWD|{*tgXeDRo=1u0Ju8aYO+mDdc?N#eIo+mo2TGE(EX^7-gh&d`ZCExWM!YElMu z5ZLxz7$JG6n=}24+sR4-+^)OLardI6Jek5r-5@cE0cCq?WecUr?O3hReGA>ah)A_i z>FLv_578bStnoq1sI)Ncnt3U?b-6kvX}G-2-_Z6!M)nUJHD1c;J3BwmP$&GP92@oBLn z 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�H$wac|B8cu%{EB&DIv|6TF<5JECBK%dwW-Sse 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 YL7pp;DfZ3$3i0+bQi@NCB%TNSe^Y<3rvLx| delta 136266 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�VuWQ`y20&_2ySuKF?6^f1W6A*M2V!lP;7r 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%0A{ApKgh5>IeBs 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�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 diff --git a/frontend/__snapshots__/scenes-app-insights--trends-line-edit--dark.png b/frontend/__snapshots__/scenes-app-insights--trends-line-edit--dark.png index 4c93657d5e0b6b8a7e92a16023adc8a3ddf467c5..7513b6f9da17b2bbe44c7321381a46407049b30e 100644 GIT binary patch delta 113147 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 delta 100917 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

xszZPyL(8 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 From ae944361cb555c1017726d3ccf27fdc39fcc90b5 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:14:23 +0000 Subject: [PATCH 14/77] Update query snapshots --- ...t_session_recording_list_from_filters.ambr | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index a8f5bf5f6a945..5af20cd690c57 100644 --- a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -176,7 +176,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids WHERE ifNull(equals(person_distinct_ids.person_id, '00000000-0000-0000-0000-000000000000'), 0))), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-22 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-04 23:59:59.999999', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id FROM events @@ -1382,7 +1382,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -1401,7 +1401,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -1452,7 +1452,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -1471,7 +1471,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -1560,7 +1560,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person @@ -1579,7 +1579,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person @@ -1630,7 +1630,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person @@ -1649,7 +1649,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person @@ -1700,7 +1700,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -1753,7 +1753,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -2338,7 +2338,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -2357,7 +2357,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -2446,7 +2446,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person @@ -2465,7 +2465,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person @@ -3220,7 +3220,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS s__pdi ON equals(s.distinct_id, s__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS s__pdi ON equals(s.distinct_id, s__pdi.distinct_id) WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-07-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-21 20:00:00.000000', 6, 'UTC')), 0), ifNull(in(s__pdi.person_id, (SELECT cohortpeople.person_id AS person_id FROM cohortpeople @@ -3283,7 +3283,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS s__pdi ON equals(s.distinct_id, s__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS s__pdi ON equals(s.distinct_id, s__pdi.distinct_id) WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-07-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-21 20:00:00.000000', 6, 'UTC')), 0), and(in(s.session_id, (SELECT events.`$session_id` AS session_id FROM events @@ -3331,7 +3331,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS s__pdi ON equals(s.distinct_id, s__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS s__pdi ON equals(s.distinct_id, s__pdi.distinct_id) WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-07-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-21 20:00:00.000000', 6, 'UTC')), 0), and(in(s.session_id, (SELECT events.`$session_id` AS session_id FROM events @@ -3380,7 +3380,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -3430,7 +3430,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -3710,7 +3710,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids WHERE ifNull(equals(person_distinct_ids.person_id, '00000000-0000-0000-0000-000000000000'), 0))), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id FROM events @@ -3756,7 +3756,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids WHERE ifNull(equals(person_distinct_ids.person_id, '00000000-0000-0000-0000-000000000000'), 0))), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id FROM events @@ -3878,7 +3878,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -3928,7 +3928,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -3978,7 +3978,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids WHERE ifNull(equals(person_distinct_ids.person_id, '00000000-0000-0000-0000-000000000000'), 0))), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id HAVING true @@ -4513,7 +4513,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -4601,7 +4601,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person @@ -4689,7 +4689,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person @@ -4777,7 +4777,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person From 914917334e548358be64db9e879db74233649ad2 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:15:21 +0000 Subject: [PATCH 15/77] Update query snapshots --- .../test_funnel_time_to_convert.ambr | 72 +++++++++---------- .../__snapshots__/test_funnel_trends.ambr | 6 +- .../test_funnel_trends_persons.ambr | 6 +- .../__snapshots__/test_funnel_unordered.ambr | 18 ++--- 4 files changed, 51 insertions(+), 51 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_time_to_convert.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_time_to_convert.ambr index 0941ab1b87ce8..77494ab0f49d9 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_time_to_convert.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_time_to_convert.ambr @@ -485,7 +485,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC')))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -516,7 +516,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC')))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -544,7 +544,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC')))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -572,7 +572,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC')))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -600,7 +600,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC')))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -660,7 +660,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC')))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -691,7 +691,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC')))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -719,7 +719,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC')))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -748,7 +748,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC')))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -834,7 +834,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, @@ -877,7 +877,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, @@ -920,7 +920,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -951,7 +951,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -967,7 +967,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -983,7 +983,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1011,7 +1011,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -1027,7 +1027,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -1043,7 +1043,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1071,7 +1071,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -1087,7 +1087,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -1103,7 +1103,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1131,7 +1131,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -1147,7 +1147,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -1163,7 +1163,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1225,7 +1225,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, @@ -1268,7 +1268,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, @@ -1311,7 +1311,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1342,7 +1342,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -1358,7 +1358,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -1374,7 +1374,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1402,7 +1402,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -1418,7 +1418,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -1434,7 +1434,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1463,7 +1463,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -1479,7 +1479,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time @@ -1495,7 +1495,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends.ambr index fa7a5587a95ed..92825086a5d5a 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends.ambr @@ -74,7 +74,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-04-30 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-07 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0)) GROUP BY aggregation_target, @@ -166,7 +166,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2021-04-30 00:00:00.000000', 6, 'US/Pacific')), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2021-05-07 23:59:59.999999', 6, 'US/Pacific'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0)) GROUP BY aggregation_target, @@ -258,7 +258,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-07 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0)) GROUP BY aggregation_target, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr index e24701e0ec0a0..299290d113c97 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr @@ -132,7 +132,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-07 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0)) WHERE ifNull(equals(entrance_period_start, toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), 0) @@ -307,7 +307,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-07 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0)) WHERE ifNull(equals(entrance_period_start, toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), 0) @@ -482,7 +482,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-07 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0)) WHERE ifNull(equals(entrance_period_start, toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), 0) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered.ambr index 2839d58ff8b58..0511f366f9682 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered.ambr @@ -77,7 +77,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('buy', 'sign up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, @@ -129,7 +129,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('buy', 'sign up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -231,7 +231,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('buy', 'sign up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) ARRAY JOIN prop_vals AS prop WHERE ifNull(notEquals(prop, []), isNotNull(prop) @@ -290,7 +290,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('buy', 'sign up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) ARRAY JOIN prop_vals AS prop WHERE ifNull(notEquals(prop, []), isNotNull(prop) @@ -391,7 +391,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('buy', 'sign up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, @@ -443,7 +443,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('buy', 'sign up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1049,7 +1049,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, @@ -1120,7 +1120,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, @@ -1191,7 +1191,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, From c76a96a3a859f62f134ae1a740f656622160e742 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:15:43 +0000 Subject: [PATCH 16/77] Update query snapshots --- .../test/__snapshots__/test_funnel.ambr | 20 ++++++------- ...test_funnel_breakdowns_by_current_url.ambr | 4 +-- .../test_funnel_correlation.ambr | 30 +++++++++---------- .../test_funnel_correlations_persons.ambr | 14 ++++----- .../__snapshots__/test_funnel_persons.ambr | 6 ++-- .../__snapshots__/test_funnel_strict.ambr | 8 ++--- .../test_funnel_strict_persons.ambr | 6 ++-- .../test_funnel_time_to_convert.ambr | 18 +++++------ 8 files changed, 53 insertions(+), 53 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index 42444d841143c..3da37e69b235a 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -79,7 +79,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -175,7 +175,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -293,7 +293,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2011-12-25 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2012-01-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$autocapture', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -380,7 +380,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -478,7 +478,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, @@ -586,7 +586,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, @@ -706,7 +706,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, @@ -826,7 +826,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, @@ -925,7 +925,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -989,7 +989,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'US/Pacific')), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'US/Pacific'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_breakdowns_by_current_url.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_breakdowns_by_current_url.ambr index 71ca317b20bb7..a2d169f15b26d 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_breakdowns_by_current_url.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_breakdowns_by_current_url.ambr @@ -76,7 +76,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-12 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('terminate funnel', 'watched movie'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -173,7 +173,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-12 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('terminate funnel', 'watched movie'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index ca7be9b3d7ede..7cf414e986d55 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -11,7 +11,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS event__pdi ON equals(event.distinct_id, event__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS event__pdi ON equals(event.distinct_id, event__pdi.distinct_id) JOIN (SELECT aggregation_target AS actor_id, timestamp AS timestamp, @@ -65,7 +65,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -134,7 +134,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -215,7 +215,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -297,7 +297,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -410,7 +410,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` @@ -560,7 +560,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` @@ -710,7 +710,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` @@ -860,7 +860,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` @@ -978,7 +978,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1060,7 +1060,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1173,7 +1173,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` @@ -1323,7 +1323,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` @@ -1473,7 +1473,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` @@ -1623,7 +1623,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr index c131eef69edee..35d52acf95ecc 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr @@ -14,7 +14,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS event__pdi ON equals(event.distinct_id, event__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS event__pdi ON equals(event.distinct_id, event__pdi.distinct_id) JOIN (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, @@ -100,7 +100,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -161,7 +161,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS event__pdi ON equals(event.distinct_id, event__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS event__pdi ON equals(event.distinct_id, event__pdi.distinct_id) JOIN (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, @@ -313,7 +313,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed', 'insight updated'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -453,7 +453,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo @@ -603,7 +603,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo @@ -753,7 +753,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr index 41d74e60eb3d7..773a75392cb52 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr @@ -145,7 +145,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -334,7 +334,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -523,7 +523,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr index 573f126c3ab4f..c2857ff435f59 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr @@ -75,7 +75,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-08 23:59:59.999999', 6, 'UTC'))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -175,7 +175,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-08 23:59:59.999999', 6, 'UTC'))))) ARRAY JOIN prop_vals AS prop WHERE ifNull(notEquals(prop, []), isNotNull(prop) @@ -274,7 +274,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-08 23:59:59.999999', 6, 'UTC'))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -618,7 +618,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr index 1845beb0323b1..cd1fdb1ed4b00 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr @@ -105,7 +105,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC')))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -254,7 +254,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC')))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -403,7 +403,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC')))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_time_to_convert.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_time_to_convert.ambr index 77494ab0f49d9..b70f91efe9c25 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_time_to_convert.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_time_to_convert.ambr @@ -84,7 +84,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -120,7 +120,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -153,7 +153,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -186,7 +186,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -219,7 +219,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -298,7 +298,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -334,7 +334,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -367,7 +367,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -401,7 +401,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-07 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-06-13 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps From cb5af95cf72bb3ceea1f93eac6ad0301c8af0a68 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Thu, 20 Jun 2024 17:17:06 -0700 Subject: [PATCH 17/77] don't cache if not using cte --- posthog/hogql_queries/actors_query_runner.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index 1f033b07bd2b1..b189a92dcce87 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -239,13 +239,6 @@ def to_query(self) -> ast.SelectQuery: assert self.source_query_runner is not None # For type checking source_query = self.source_query_runner.to_actors_query() - # SelectUnionQuery (used by Stickiness) doesn't have settings - if hasattr(source_query, "settings"): - if source_query.settings is None: - source_query.settings = HogQLQuerySettings() - source_query.settings.use_query_cache = True - source_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME - source_id_chain = self.source_id_column(source_query) source_alias = "source" @@ -271,6 +264,12 @@ def to_query(self) -> ast.SelectQuery: if isinstance(self.strategy, PersonStrategy) and any( isinstance(x, C) for x in [getattr(self.query.source, "source", None)] for C in (TrendsQuery,) ): + # SelectUnionQuery (used by Stickiness) doesn't have settings + if hasattr(source_query, "settings"): + if source_query.settings is None: + source_query.settings = HogQLQuerySettings() + source_query.settings.use_query_cache = True + source_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME s = parse_select("SELECT distinct actor_id as person_id FROM source") # This feels like it adds one extra level of SELECT which is unnecessary ctes[ReservedCTE.POSTHOG_PERSON_IDS] = ast.CTE( From 64f160f34c07659ea1f11127492085b4abe4cdd4 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:17:29 +0000 Subject: [PATCH 18/77] Update query snapshots --- posthog/api/test/__snapshots__/test_query.ambr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/posthog/api/test/__snapshots__/test_query.ambr b/posthog/api/test/__snapshots__/test_query.ambr index 0b0ecf5fd221a..acffbb23e3ae4 100644 --- a/posthog/api/test/__snapshots__/test_query.ambr +++ b/posthog/api/test/__snapshots__/test_query.ambr @@ -486,7 +486,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email @@ -526,7 +526,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email From e61b9fc14ca127b3afc0ef4188ddce49d29bf38f Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:27:18 +0000 Subject: [PATCH 19/77] Update UI snapshots for `chromium` (2) --- ...ights--funnel-top-to-bottom-edit--dark.png | Bin 184049 -> 186713 bytes ...s-app-insights--trends-line-edit--dark.png | Bin 146343 -> 133851 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-edit--dark.png b/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-edit--dark.png index 7e2b6ed14f087b8dcfa688820ee2609b1d37b08f..115c34654038571208a7a86d2015ef152d31debb 100644 GIT binary patch delta 136266 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�VuWQ`y20&_2ySuKF?6^f1W6A*M2V!lP;7r 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%0A{ApKgh5>IeBs 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�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 delta 133556 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 z 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�H$wac|B8cu%{EB&DIv|6TF<5JECBK%dwW-Sse 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 YL7pp;DfZ3$3i0+bQi@NCB%TNSe^Y<3rvLx| diff --git a/frontend/__snapshots__/scenes-app-insights--trends-line-edit--dark.png b/frontend/__snapshots__/scenes-app-insights--trends-line-edit--dark.png index 7513b6f9da17b2bbe44c7321381a46407049b30e..4c93657d5e0b6b8a7e92a16023adc8a3ddf467c5 100644 GIT binary patch delta 100917 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

xszZPyL(8 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 delta 113147 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 From a58194cef1389e9823459e39fbc0609956e86afc Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:27:51 +0000 Subject: [PATCH 20/77] Update query snapshots --- .../test/__snapshots__/test_funnel_trends_persons.ambr | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr index 299290d113c97..728369ca33095 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr @@ -139,8 +139,7 @@ GROUP BY aggregation_target, entrance_period_start) WHERE ifNull(greaterOrEquals(steps_completed, 2), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -314,8 +313,7 @@ GROUP BY aggregation_target, entrance_period_start) WHERE and(ifNull(greaterOrEquals(steps_completed, 1), 0), ifNull(less(steps_completed, 3), 0)) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -489,8 +487,7 @@ GROUP BY aggregation_target, entrance_period_start) WHERE ifNull(greaterOrEquals(steps_completed, 3), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person From 583e223fbdfe01cda0421868aef1b4ffcd3ca026 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:30:44 +0000 Subject: [PATCH 21/77] Update query snapshots --- .../test/__snapshots__/test_funnel.ambr | 12 +- .../test_funnel_correlation.ambr | 120 ++++++------------ .../test_funnel_correlations_persons.ambr | 15 +-- .../__snapshots__/test_funnel_persons.ambr | 9 +- .../test_funnel_strict_persons.ambr | 9 +- 5 files changed, 55 insertions(+), 110 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index 3da37e69b235a..73619e77b967f 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -183,8 +183,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id @@ -605,8 +604,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id @@ -725,8 +723,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id @@ -845,8 +842,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index 7cf414e986d55..f637873df72f3 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -431,8 +431,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -581,8 +580,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -731,8 +729,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -881,8 +878,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1194,8 +1190,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1344,8 +1339,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1494,8 +1488,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1644,8 +1637,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -2186,8 +2178,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'positively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -2303,8 +2294,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'positively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -2420,8 +2410,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -2537,8 +2526,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -2803,8 +2791,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -2920,8 +2907,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -3170,8 +3156,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'positively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -3287,8 +3272,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'positively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -3404,8 +3388,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -3521,8 +3504,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -3787,8 +3769,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -3904,8 +3885,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -4176,8 +4156,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -4300,8 +4279,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -4424,8 +4402,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -4548,8 +4525,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -4968,8 +4944,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -5092,8 +5067,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -5216,8 +5190,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -5340,8 +5313,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -5760,8 +5732,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -5884,8 +5855,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -6008,8 +5978,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -6132,8 +6101,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -6552,8 +6520,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -6676,8 +6643,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -6800,8 +6766,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -6924,8 +6889,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -7344,8 +7308,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -7468,8 +7431,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -7592,8 +7554,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -7716,8 +7677,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr index 35d52acf95ecc..5c16a6f7f20c7 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr @@ -111,8 +111,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed']), equals(event.event, 'insight loaded'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -324,8 +323,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed', 'insight updated']), equals(event.event, 'insight loaded'), ifNull(notEquals(funnel_actors.steps, 3), 1)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -474,8 +472,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -624,8 +621,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -774,8 +770,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr index 773a75392cb52..4586b31a459a3 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr @@ -153,8 +153,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -342,8 +341,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -531,8 +529,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(equals(steps, 2), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr index cd1fdb1ed4b00..975d22435d0ba 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr @@ -113,8 +113,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -262,8 +261,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -411,8 +409,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(equals(steps, 2), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person From d897d3dd103da6b7969091696a58086f4634920c Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Thu, 20 Jun 2024 17:39:01 -0700 Subject: [PATCH 22/77] capture_queries --- posthog/test/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/posthog/test/base.py b/posthog/test/base.py index 6e9922910a683..94f251c55298c 100644 --- a/posthog/test/base.py +++ b/posthog/test/base.py @@ -1072,7 +1072,7 @@ def snapshot_clickhouse_alter_queries(fn): @wraps(fn) def wrapped(self, *args, **kwargs): - with self.capture_queries("ALTER") as queries: + with self.capture_queries_startswith("ALTER") as queries: fn(self, *args, **kwargs) for query in queries: @@ -1089,7 +1089,7 @@ def snapshot_clickhouse_insert_cohortpeople_queries(fn): @wraps(fn) def wrapped(self, *args, **kwargs): - with self.capture_queries("INSERT INTO cohortpeople") as queries: + with self.capture_queries_startswith("INSERT INTO cohortpeople") as queries: fn(self, *args, **kwargs) for query in queries: From f02c16ba840ecd097577254618e2e9c588e9a29b Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:50:49 +0000 Subject: [PATCH 23/77] Update query snapshots --- .../test_sessions_timeline_query_runner.ambr | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/posthog/hogql_queries/test/__snapshots__/test_sessions_timeline_query_runner.ambr b/posthog/hogql_queries/test/__snapshots__/test_sessions_timeline_query_runner.ambr index 09e38bf5e13ac..57c9f3373c597 100644 --- a/posthog/hogql_queries/test/__snapshots__/test_sessions_timeline_query_runner.ambr +++ b/posthog/hogql_queries/test/__snapshots__/test_sessions_timeline_query_runner.ambr @@ -42,7 +42,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), ifNull(greater(timestamp, toDateTime64('2023-10-01 12:00:00.000000', 6, 'UTC')), 0), ifNull(less(timestamp, toDateTime64('2023-10-01 17:00:00.000000', 6, 'UTC')), 0)) ORDER BY timestamp DESC LIMIT 1001)) AS e @@ -111,7 +111,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), ifNull(greater(timestamp, toDateTime64('2023-09-30 16:00:00.000000', 6, 'UTC')), 0), ifNull(less(timestamp, toDateTime64('2023-10-01 16:00:00.000000', 6, 'UTC')), 0)) ORDER BY timestamp DESC LIMIT 1001)) AS e @@ -180,7 +180,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), ifNull(greater(timestamp, toDateTime64('2023-10-01 06:00:00.000000', 6, 'UTC')), 0), ifNull(less(timestamp, toDateTime64('2023-10-02 06:00:00.000000', 6, 'UTC')), 0)) ORDER BY timestamp DESC LIMIT 3)) AS e @@ -249,7 +249,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), ifNull(greater(timestamp, toDateTime64('2023-10-01 06:00:00.000000', 6, 'UTC')), 0), ifNull(less(timestamp, toDateTime64('2023-10-02 06:00:00.000000', 6, 'UTC')), 0)) ORDER BY timestamp DESC LIMIT 1001)) AS e @@ -318,7 +318,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), ifNull(greater(timestamp, toDateTime64('2023-10-01 06:00:00.000000', 6, 'UTC')), 0), ifNull(less(timestamp, toDateTime64('2023-10-02 06:00:00.000000', 6, 'UTC')), 0)) ORDER BY timestamp DESC LIMIT 1001)) AS e @@ -387,7 +387,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), ifNull(greater(timestamp, toDateTime64('2023-10-01 06:00:00.000000', 6, 'UTC')), 0), ifNull(less(timestamp, toDateTime64('2023-10-02 06:00:00.000000', 6, 'UTC')), 0), ifNull(equals(person_id, '00000000-0000-0000-0000-000000000000'), 0)) ORDER BY timestamp DESC LIMIT 1001)) AS e @@ -456,7 +456,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), ifNull(greater(timestamp, toDateTime64('2023-10-01 06:00:00.000000', 6, 'UTC')), 0), ifNull(less(timestamp, toDateTime64('2023-10-02 06:00:00.000000', 6, 'UTC')), 0)) ORDER BY timestamp DESC LIMIT 1001)) AS e From 9d22b624debc129366c0696556272170c3d1ebb3 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:53:44 +0000 Subject: [PATCH 24/77] Update query snapshots --- ...t_session_recording_list_from_filters.ambr | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index 4717abc22a2b7..0db088ee5a38e 100644 --- a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -54,7 +54,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_6)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal, person.id AS id FROM person @@ -93,7 +93,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_6)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal, person.id AS id FROM person @@ -509,7 +509,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person @@ -592,7 +592,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person @@ -675,7 +675,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person @@ -758,7 +758,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person @@ -1236,7 +1236,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids WHERE ifNull(equals(person_distinct_ids.person_id, '00000000-0000-0000-0000-000000000000'), 0))), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id HAVING true @@ -1277,7 +1277,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids WHERE ifNull(equals(person_distinct_ids.person_id, '00000000-0000-0000-0000-000000000000'), 0))), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id HAVING true @@ -1318,7 +1318,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids WHERE ifNull(equals(person_distinct_ids.person_id, '00000000-0000-0000-0000-000000000000'), 0))), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id HAVING true @@ -1359,7 +1359,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids WHERE ifNull(equals(person_distinct_ids.person_id, '00000000-0000-0000-0000-000000000000'), 0))), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id HAVING true @@ -1401,7 +1401,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) WHERE and(equals(events.team_id, 2), ifNull(equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), '00000000-0000-0000-0000-000000000000'), 0), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), notEmpty(events.`$session_id`)))), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id HAVING true @@ -1443,7 +1443,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) WHERE and(equals(events.team_id, 2), ifNull(equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), '00000000-0000-0000-0000-000000000000'), 0), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), notEmpty(events.`$session_id`)))), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id HAVING true @@ -1485,7 +1485,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) WHERE and(equals(events.team_id, 2), ifNull(equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), '00000000-0000-0000-0000-000000000000'), 0), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), notEmpty(events.`$session_id`)))), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id HAVING true @@ -1527,7 +1527,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) WHERE and(equals(events.team_id, 2), ifNull(equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), '00000000-0000-0000-0000-000000000000'), 0), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), notEmpty(events.`$session_id`)))), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id HAVING true From b58a61e1db7aa97e328721520ad6e62f0e6a7803 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Thu, 20 Jun 2024 21:49:48 -0700 Subject: [PATCH 25/77] value --- posthog/api/test/__snapshots__/test_cohort.ambr | 6 +++--- posthog/hogql/database/schema/persons.py | 4 ++-- posthog/hogql_queries/actors_query_runner.py | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/posthog/api/test/__snapshots__/test_cohort.ambr b/posthog/api/test/__snapshots__/test_cohort.ambr index 747a61e3f1672..7e7448c7b57e2 100644 --- a/posthog/api/test/__snapshots__/test_cohort.ambr +++ b/posthog/api/test/__snapshots__/test_cohort.ambr @@ -79,7 +79,7 @@ cohort_id FROM cohortpeople WHERE (team_id = 2 - AND cohort_id = '1' + AND cohort_id = '24' AND version < '2') ''' # --- @@ -174,7 +174,7 @@ cohort_id FROM cohortpeople WHERE (team_id = 2 - AND cohort_id = '1' + AND cohort_id = '24' AND version < '2') ''' # --- @@ -184,7 +184,7 @@ DELETE FROM cohortpeople WHERE (team_id = 2 - AND cohort_id = '1' + AND cohort_id = '24' AND version < '2') ''' # --- diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 1ea507dd8fa61..219a0822b1b17 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -49,8 +49,8 @@ def select_from_persons_table(join_or_table: LazyJoinToAdd | LazyTableToAdd, con version = PersonsArgMaxVersion.V2 break - use_cte = node.type is not None and ReservedCTE.POSTHOG_PERSON_IDS in node.type.ctes - cte_condition = f"raw_persons.id IN (SELECT person_id FROM {ReservedCTE.POSTHOG_PERSON_IDS})" + use_cte = node.type is not None and ReservedCTE.POSTHOG_PERSON_IDS.value in node.type.ctes + cte_condition = f"raw_persons.id IN (SELECT person_id FROM {ReservedCTE.POSTHOG_PERSON_IDS.value})" if version == PersonsArgMaxVersion.V2: from posthog.hogql import ast diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index b189a92dcce87..56e6dbbe44d0c 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -272,8 +272,8 @@ def to_query(self) -> ast.SelectQuery: source_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME s = parse_select("SELECT distinct actor_id as person_id FROM source") # This feels like it adds one extra level of SELECT which is unnecessary - ctes[ReservedCTE.POSTHOG_PERSON_IDS] = ast.CTE( - name=ReservedCTE.POSTHOG_PERSON_IDS, expr=s, cte_type="subquery" + ctes[ReservedCTE.POSTHOG_PERSON_IDS.value] = ast.CTE( + name=ReservedCTE.POSTHOG_PERSON_IDS.value, expr=s, cte_type="subquery" ) return ast.SelectQuery( From f290733c04a684dd37aa0e3e38d6bb758fe1050b Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Fri, 21 Jun 2024 00:18:35 -0700 Subject: [PATCH 26/77] make cohorts work with lazy tables and make conjoined work with types --- posthog/hogql/printer.py | 21 ++++++++++++------- posthog/hogql/transforms/in_cohort.py | 21 ++++++++++++++----- .../trends/test/test_trends_persons.py | 9 +++++++- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/posthog/hogql/printer.py b/posthog/hogql/printer.py index 136e8ecab70fd..a75413a2fd7dd 100644 --- a/posthog/hogql/printer.py +++ b/posthog/hogql/printer.py @@ -100,20 +100,16 @@ def prepare_ast_for_printing( context.modifiers = set_default_in_cohort_via(context.modifiers) - if context.modifiers.inCohortVia == InCohortVia.LEFTJOIN_CONJOINED: - with context.timings.measure("resolve_in_cohorts_conjoined"): - resolve_in_cohorts_conjoined(node, dialect, context, stack) with context.timings.measure("resolve_types"): node = resolve_types(node, context, dialect=dialect, scopes=[node.type for node in stack] if stack else None) - if context.modifiers.inCohortVia == InCohortVia.LEFTJOIN: - with context.timings.measure("resolve_in_cohorts"): - resolve_in_cohorts(node, dialect, stack, context) + if dialect == "clickhouse": - with context.timings.measure("resolve_property_types"): - node = resolve_property_types(node, context) with context.timings.measure("resolve_lazy_tables"): resolve_lazy_tables(node, dialect, stack, context) + with context.timings.measure("resolve_property_types"): + node = resolve_property_types(node, context) + # We support global query settings, and local subquery settings. # If the global query is a select query with settings, merge the two. if isinstance(node, ast.SelectQuery) and node.settings is not None and settings is not None: @@ -122,6 +118,15 @@ def prepare_ast_for_printing( settings.__setattr__(key, value) node.settings = None + # If there don't come after "resolve_lazy_tables", cohorts can't resolve in them + if context.modifiers.inCohortVia == InCohortVia.LEFTJOIN_CONJOINED: + with context.timings.measure("resolve_in_cohorts_conjoined"): + resolve_in_cohorts_conjoined(node, dialect, context, stack) + + if context.modifiers.inCohortVia == InCohortVia.LEFTJOIN: + with context.timings.measure("resolve_in_cohorts"): + resolve_in_cohorts(node, dialect, stack, context) + # We add a team_id guard right before printing. It's not a separate step here. return node diff --git a/posthog/hogql/transforms/in_cohort.py b/posthog/hogql/transforms/in_cohort.py index fec1a4d7ccd16..60d7151b39559 100644 --- a/posthog/hogql/transforms/in_cohort.py +++ b/posthog/hogql/transforms/in_cohort.py @@ -241,18 +241,29 @@ def get_dynamic_cohort_clause(): constraint_type="ON", ), ) + new_join = cast( + ast.JoinExpr, + resolve_types(new_join, self.context, self.dialect, [self.stack[-1].type]), + ) - new_join.constraint.expr.left = ast.Field(chain=[f"__in_cohort", "cohort_person_id"]) # type: ignore + new_join.constraint.expr.left = resolve_types( + ast.Field(chain=[f"__in_cohort", "cohort_person_id"]), self.context, self.dialect, [self.stack[-1].type] + ) # type: ignore new_join.constraint.expr.right = clone_expr(compare_operations[0].left) # type: ignore if last_join: last_join.next_join = new_join else: select.select_from = new_join - cohort_match_compare_op = ast.CompareOperation( - left=ast.Field(chain=["__in_cohort", "matched"]), - op=ast.CompareOperationOp.Eq, - right=ast.Constant(value=1), + cohort_match_compare_op = resolve_types( + ast.CompareOperation( + left=ast.Field(chain=["__in_cohort", "matched"]), + op=ast.CompareOperationOp.Eq, + right=ast.Constant(value=1), + ), + self.context, + self.dialect, + [self.stack[-1].type], ) if select.where is not None: diff --git a/posthog/hogql_queries/insights/trends/test/test_trends_persons.py b/posthog/hogql_queries/insights/trends/test/test_trends_persons.py index ff1991ff537d8..d238863f940c4 100644 --- a/posthog/hogql_queries/insights/trends/test/test_trends_persons.py +++ b/posthog/hogql_queries/insights/trends/test/test_trends_persons.py @@ -27,7 +27,13 @@ CompareFilter, HogQLQueryModifiers, ) -from posthog.test.base import APIBaseTest, ClickhouseTestMixin, _create_event, _create_person +from posthog.test.base import ( + APIBaseTest, + ClickhouseTestMixin, + _create_event, + _create_person, + snapshot_clickhouse_queries, +) def get_actors( @@ -438,6 +444,7 @@ def trends_all_cohort_breakdown_persons(self, inCohortVia: str): def test_trends_all_cohort_breakdown_persons_subquery(self): self.trends_all_cohort_breakdown_persons("subquery") + @snapshot_clickhouse_queries def test_trends_all_cohort_breakdown_persons_leftjoin(self): self.trends_all_cohort_breakdown_persons("leftjoin") From fb33fe6915782d83911ba6cab794b3bfe447c952 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:27:23 +0000 Subject: [PATCH 27/77] Update query snapshots --- ...t_session_recording_list_from_filters.ambr | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index 5af20cd690c57..71311e8763ba3 100644 --- a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -1297,7 +1297,7 @@ (SELECT events.`$session_id` AS session_id FROM events LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___name, groups.group_type_index AS index, groups.group_key AS key + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___name, groups.group_type_index AS index, groups.group_key AS key FROM groups WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 1), 0)) GROUP BY groups.group_type_index, groups.group_key) AS events__group_1 ON equals(events.`$group_1`, events__group_1.key) @@ -1391,7 +1391,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), true), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview']))), in(s.distinct_id, @@ -1410,7 +1410,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0))))) GROUP BY s.session_id HAVING true @@ -1461,7 +1461,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING true)), in(s.distinct_id, @@ -1480,7 +1480,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0))))) GROUP BY s.session_id HAVING true @@ -1569,7 +1569,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), true), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview']))), in(s.distinct_id, @@ -1588,7 +1588,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0))))) GROUP BY s.session_id HAVING true @@ -1639,7 +1639,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(nullIf(nullIf(events.`mat_$browser`, ''), 'null'), 'Chrome'), 0), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING true)), in(s.distinct_id, @@ -1658,7 +1658,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0))))) GROUP BY s.session_id HAVING true @@ -1709,7 +1709,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0))) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -1762,7 +1762,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), ifNull(equals(events__pdi__person.properties___email, 'something else'), 0))) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -2347,7 +2347,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), true), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, 'is_internal_user'), ''), 'null'), '^"|"$', ''), 'false'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0)), ifNull(notILike(events__pdi__person.properties___email, '%@posthog.com%'), 1)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview']))), in(s.distinct_id, @@ -2366,7 +2366,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(notILike(person_distinct_ids__person.properties___email, '%@posthog.com%'), 1))))) GROUP BY s.session_id HAVING true @@ -2455,7 +2455,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), true), and(ifNull(equals(nullIf(nullIf(events.mat_is_internal_user, ''), 'null'), 'false'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0)), ifNull(notILike(events__pdi__person.properties___email, '%@posthog.com%'), 1)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview']))), in(s.distinct_id, @@ -2474,7 +2474,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(notILike(person_distinct_ids__person.properties___email, '%@posthog.com%'), 1))))) GROUP BY s.session_id HAVING true @@ -3389,7 +3389,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla@gmail.com'), 0)))) GROUP BY s.session_id HAVING true @@ -3439,7 +3439,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(notILike(person_distinct_ids__person.properties___email, '%gmail.com%'), 1)))) GROUP BY s.session_id HAVING true @@ -3887,7 +3887,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE and(ifNull(equals(person_distinct_ids__person.properties___email, 'test@posthog.com'), 0), ifNull(equals(person_distinct_ids__person.properties___email, 'david@posthog.com'), 0))))) GROUP BY s.session_id HAVING true @@ -3937,7 +3937,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE or(ifNull(equals(person_distinct_ids__person.properties___email, 'test@posthog.com'), 0), ifNull(equals(person_distinct_ids__person.properties___email, 'david@posthog.com'), 0))))) GROUP BY s.session_id HAVING true @@ -4522,7 +4522,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -4610,7 +4610,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -4698,7 +4698,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -4786,7 +4786,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true From 52a6a6f9716013b936e1a8c1e7370dc9f359a0ff Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:28:12 +0000 Subject: [PATCH 28/77] Update query snapshots --- .../test_funnel_trends_persons.ambr | 6 +++--- .../__snapshots__/test_funnel_unordered.ambr | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr index 728369ca33095..8a658948dedc5 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr @@ -145,7 +145,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -319,7 +319,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -493,7 +493,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered.ambr index 0511f366f9682..d28e46106eb37 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered.ambr @@ -554,7 +554,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -618,7 +618,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -682,7 +682,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -799,7 +799,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -863,7 +863,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -927,7 +927,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1051,7 +1051,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1122,7 +1122,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1193,7 +1193,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups From e363641ceb767bf922ff530946696f2136e163da Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:28:23 +0000 Subject: [PATCH 29/77] Update query snapshots --- .../test/__snapshots__/test_funnel.ambr | 40 +++---- .../test_funnel_correlation.ambr | 104 +++++++++--------- .../test_funnel_correlations_persons.ambr | 16 +-- .../__snapshots__/test_funnel_persons.ambr | 6 +- .../__snapshots__/test_funnel_strict.ambr | 6 +- .../test_funnel_strict_persons.ambr | 6 +- 6 files changed, 89 insertions(+), 89 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index 73619e77b967f..0f433a19be9f0 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -100,7 +100,7 @@ ''' SELECT persons.id, persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -185,13 +185,13 @@ WHERE ifNull(in(steps, [2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY toTimeZone(persons.created_at, 'UTC') DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -488,7 +488,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -509,7 +509,7 @@ ''' SELECT persons.id, persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -596,7 +596,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -606,13 +606,13 @@ WHERE ifNull(in(steps, [1, 2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY toTimeZone(persons.created_at, 'UTC') DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -628,7 +628,7 @@ ''' SELECT persons.id, persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -715,7 +715,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -725,13 +725,13 @@ WHERE ifNull(in(steps, [2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY toTimeZone(persons.created_at, 'UTC') DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -747,7 +747,7 @@ ''' SELECT persons.id, persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -834,7 +834,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -844,13 +844,13 @@ WHERE ifNull(in(steps, [3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY toTimeZone(persons.created_at, 'UTC') DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index f637873df72f3..7124c534df351 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -236,7 +236,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -420,7 +420,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -437,7 +437,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -569,7 +569,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -586,7 +586,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -718,7 +718,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -735,7 +735,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -867,7 +867,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -884,7 +884,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -995,7 +995,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -1179,7 +1179,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1196,7 +1196,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1328,7 +1328,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1345,7 +1345,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1477,7 +1477,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1494,7 +1494,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1626,7 +1626,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1643,7 +1643,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -2600,7 +2600,7 @@ if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -2670,7 +2670,7 @@ if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -3578,7 +3578,7 @@ if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -3648,7 +3648,7 @@ if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -3973,7 +3973,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4139,7 +4139,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4262,7 +4262,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4385,7 +4385,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4508,7 +4508,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4613,7 +4613,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4761,7 +4761,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4927,7 +4927,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5050,7 +5050,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5173,7 +5173,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5296,7 +5296,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5401,7 +5401,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5549,7 +5549,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5715,7 +5715,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5838,7 +5838,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5961,7 +5961,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6084,7 +6084,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6189,7 +6189,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6337,7 +6337,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6503,7 +6503,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6626,7 +6626,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6749,7 +6749,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6872,7 +6872,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6977,7 +6977,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7125,7 +7125,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7291,7 +7291,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7414,7 +7414,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7537,7 +7537,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7660,7 +7660,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7765,7 +7765,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr index 5c16a6f7f20c7..2cd43d115573b 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr @@ -117,7 +117,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -329,7 +329,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -461,7 +461,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -478,7 +478,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -610,7 +610,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -627,7 +627,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -759,7 +759,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -776,7 +776,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr index 4586b31a459a3..abd09217bc9af 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr @@ -159,7 +159,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -347,7 +347,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -535,7 +535,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr index c2857ff435f59..2935eae6b68e6 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr @@ -383,7 +383,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -498,7 +498,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -620,7 +620,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr index 975d22435d0ba..7ff818de40361 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr @@ -119,7 +119,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -267,7 +267,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -415,7 +415,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, From d4a74157ed7a68a0d5430b3477ef91a37edfa4ba Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:29:28 +0000 Subject: [PATCH 30/77] Update query snapshots --- posthog/api/test/__snapshots__/test_cohort.ambr | 6 +++--- posthog/api/test/__snapshots__/test_query.ambr | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/posthog/api/test/__snapshots__/test_cohort.ambr b/posthog/api/test/__snapshots__/test_cohort.ambr index 7e7448c7b57e2..747a61e3f1672 100644 --- a/posthog/api/test/__snapshots__/test_cohort.ambr +++ b/posthog/api/test/__snapshots__/test_cohort.ambr @@ -79,7 +79,7 @@ cohort_id FROM cohortpeople WHERE (team_id = 2 - AND cohort_id = '24' + AND cohort_id = '1' AND version < '2') ''' # --- @@ -174,7 +174,7 @@ cohort_id FROM cohortpeople WHERE (team_id = 2 - AND cohort_id = '24' + AND cohort_id = '1' AND version < '2') ''' # --- @@ -184,7 +184,7 @@ DELETE FROM cohortpeople WHERE (team_id = 2 - AND cohort_id = '24' + AND cohort_id = '1' AND version < '2') ''' # --- diff --git a/posthog/api/test/__snapshots__/test_query.ambr b/posthog/api/test/__snapshots__/test_query.ambr index acffbb23e3ae4..ff4f44e3bb774 100644 --- a/posthog/api/test/__snapshots__/test_query.ambr +++ b/posthog/api/test/__snapshots__/test_query.ambr @@ -496,7 +496,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), ifNull(equals(events__pdi__person.properties___email, 'tom@posthog.com'), 0), less(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-01-10 12:14:05.000000', 6, 'UTC')), greater(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-01-09 12:14:00.000000', 6, 'UTC'))) ORDER BY events.event ASC LIMIT 101 @@ -536,7 +536,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), ifNull(equals(events__pdi__person.properties___email, 'tom@posthog.com'), 0), less(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-01-10 12:14:05.000000', 6, 'UTC')), greater(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-01-09 12:14:00.000000', 6, 'UTC'))) ORDER BY events.event ASC LIMIT 101 From b445519d0accd01401266e19fa617a58ca3ba852 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:30:39 +0000 Subject: [PATCH 31/77] Update query snapshots --- ...test_session_recording_list_from_filters.ambr | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index 0db088ee5a38e..e1547df52b7f0 100644 --- a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -60,8 +60,8 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_7)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) - WHERE ifNull(equals(person_distinct_ids__person.properties___rgInternal, %(hogql_val_8)s), 0)))) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_7)s), person.version), plus(now64(6, %(hogql_val_8)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + WHERE ifNull(equals(person_distinct_ids__person.properties___rgInternal, %(hogql_val_9)s), 0)))) GROUP BY s.session_id HAVING true ORDER BY start_time DESC @@ -99,8 +99,8 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_7)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) - WHERE ifNull(equals(person_distinct_ids__person.properties___rgInternal, %(hogql_val_8)s), 0)))) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_7)s), person.version), plus(now64(6, %(hogql_val_8)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + WHERE ifNull(equals(person_distinct_ids__person.properties___rgInternal, %(hogql_val_9)s), 0)))) GROUP BY s.session_id HAVING true ORDER BY start_time DESC @@ -518,7 +518,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -601,7 +601,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -684,7 +684,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -767,7 +767,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true From 99e91669c32d4cdecd219a46aace9485b7bc1fe8 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Fri, 21 Jun 2024 00:33:23 -0700 Subject: [PATCH 32/77] pass tests --- posthog/hogql/printer.py | 6 +++--- posthog/hogql/test/test_printer.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/posthog/hogql/printer.py b/posthog/hogql/printer.py index a75413a2fd7dd..acc77f63d36e4 100644 --- a/posthog/hogql/printer.py +++ b/posthog/hogql/printer.py @@ -104,12 +104,12 @@ def prepare_ast_for_printing( node = resolve_types(node, context, dialect=dialect, scopes=[node.type for node in stack] if stack else None) if dialect == "clickhouse": - with context.timings.measure("resolve_lazy_tables"): - resolve_lazy_tables(node, dialect, stack, context) - with context.timings.measure("resolve_property_types"): node = resolve_property_types(node, context) + with context.timings.measure("resolve_lazy_tables"): + resolve_lazy_tables(node, dialect, stack, context) + # We support global query settings, and local subquery settings. # If the global query is a select query with settings, merge the two. if isinstance(node, ast.SelectQuery) and node.settings is not None and settings is not None: diff --git a/posthog/hogql/test/test_printer.py b/posthog/hogql/test/test_printer.py index 45a01b9820169..4e05c489c5cc1 100644 --- a/posthog/hogql/test/test_printer.py +++ b/posthog/hogql/test/test_printer.py @@ -756,7 +756,7 @@ def test_select_sample(self): f"argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id " f"AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, {self.team.pk}) GROUP BY " f"person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), " - f"0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) JOIN (SELECT person.id AS id FROM person " + f"0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) JOIN (SELECT person.id AS id FROM person " f"WHERE and(equals(person.team_id, {self.team.pk}), ifNull(in(tuple(person.id, person.version), (SELECT person.id " f"AS id, max(person.version) AS version FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, " @@ -777,7 +777,7 @@ def test_select_sample(self): f"SELECT events.event AS event FROM events SAMPLE 2/78 OFFSET 999 INNER JOIN (SELECT argMax(person_distinct_id2.person_id, " f"person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 " f"WHERE equals(person_distinct_id2.team_id, {self.team.pk}) GROUP BY person_distinct_id2.distinct_id HAVING " - f"ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi " + f"ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi " f"ON equals(events.distinct_id, events__pdi.distinct_id) JOIN (SELECT person.id AS id FROM person WHERE " f"and(equals(person.team_id, {self.team.pk}), ifNull(in(tuple(person.id, person.version), (SELECT person.id AS id, " f"max(person.version) AS version FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " From 55cdc892553b72ad76357ed3f0be1eed2515e087 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:36:11 +0000 Subject: [PATCH 33/77] Update UI snapshots for `chromium` (2) --- ...s-app-insights--trends-line-edit--dark.png | Bin 133851 -> 146343 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--trends-line-edit--dark.png b/frontend/__snapshots__/scenes-app-insights--trends-line-edit--dark.png index 4c93657d5e0b6b8a7e92a16023adc8a3ddf467c5..7513b6f9da17b2bbe44c7321381a46407049b30e 100644 GIT binary patch delta 113147 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 delta 100917 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

xszZPyL(8 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 From a8599fdd38344421dbdcb5625e93d0d12b8c7095 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Fri, 21 Jun 2024 00:42:08 -0700 Subject: [PATCH 34/77] printer --- posthog/hogql/printer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/posthog/hogql/printer.py b/posthog/hogql/printer.py index acc77f63d36e4..078edd54dc43b 100644 --- a/posthog/hogql/printer.py +++ b/posthog/hogql/printer.py @@ -118,7 +118,7 @@ def prepare_ast_for_printing( settings.__setattr__(key, value) node.settings = None - # If there don't come after "resolve_lazy_tables", cohorts can't resolve in them + # If these don't come after "resolve_lazy_tables", cohorts can't resolve in them if context.modifiers.inCohortVia == InCohortVia.LEFTJOIN_CONJOINED: with context.timings.measure("resolve_in_cohorts_conjoined"): resolve_in_cohorts_conjoined(node, dialect, context, stack) From d2e0276722b8171fb94458ab99066c5cbc56689c Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:50:42 +0000 Subject: [PATCH 35/77] Update query snapshots --- ...t_session_recording_list_from_filters.ambr | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index 71311e8763ba3..5af20cd690c57 100644 --- a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -1297,7 +1297,7 @@ (SELECT events.`$session_id` AS session_id FROM events LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___name, groups.group_type_index AS index, groups.group_key AS key + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___name, groups.group_type_index AS index, groups.group_key AS key FROM groups WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 1), 0)) GROUP BY groups.group_type_index, groups.group_key) AS events__group_1 ON equals(events.`$group_1`, events__group_1.key) @@ -1391,7 +1391,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), true), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview']))), in(s.distinct_id, @@ -1410,7 +1410,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0))))) GROUP BY s.session_id HAVING true @@ -1461,7 +1461,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING true)), in(s.distinct_id, @@ -1480,7 +1480,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0))))) GROUP BY s.session_id HAVING true @@ -1569,7 +1569,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), true), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview']))), in(s.distinct_id, @@ -1588,7 +1588,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0))))) GROUP BY s.session_id HAVING true @@ -1639,7 +1639,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(nullIf(nullIf(events.`mat_$browser`, ''), 'null'), 'Chrome'), 0), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING true)), in(s.distinct_id, @@ -1658,7 +1658,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0))))) GROUP BY s.session_id HAVING true @@ -1709,7 +1709,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0))) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -1762,7 +1762,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), ifNull(equals(events__pdi__person.properties___email, 'something else'), 0))) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -2347,7 +2347,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), true), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, 'is_internal_user'), ''), 'null'), '^"|"$', ''), 'false'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0)), ifNull(notILike(events__pdi__person.properties___email, '%@posthog.com%'), 1)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview']))), in(s.distinct_id, @@ -2366,7 +2366,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(notILike(person_distinct_ids__person.properties___email, '%@posthog.com%'), 1))))) GROUP BY s.session_id HAVING true @@ -2455,7 +2455,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), true), and(ifNull(equals(nullIf(nullIf(events.mat_is_internal_user, ''), 'null'), 'false'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0)), ifNull(notILike(events__pdi__person.properties___email, '%@posthog.com%'), 1)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview']))), in(s.distinct_id, @@ -2474,7 +2474,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(notILike(person_distinct_ids__person.properties___email, '%@posthog.com%'), 1))))) GROUP BY s.session_id HAVING true @@ -3389,7 +3389,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla@gmail.com'), 0)))) GROUP BY s.session_id HAVING true @@ -3439,7 +3439,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(notILike(person_distinct_ids__person.properties___email, '%gmail.com%'), 1)))) GROUP BY s.session_id HAVING true @@ -3887,7 +3887,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE and(ifNull(equals(person_distinct_ids__person.properties___email, 'test@posthog.com'), 0), ifNull(equals(person_distinct_ids__person.properties___email, 'david@posthog.com'), 0))))) GROUP BY s.session_id HAVING true @@ -3937,7 +3937,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE or(ifNull(equals(person_distinct_ids__person.properties___email, 'test@posthog.com'), 0), ifNull(equals(person_distinct_ids__person.properties___email, 'david@posthog.com'), 0))))) GROUP BY s.session_id HAVING true @@ -4522,7 +4522,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -4610,7 +4610,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -4698,7 +4698,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -4786,7 +4786,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true From 900a3a690e1510e16584b26808c426c4dce27022 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:51:22 +0000 Subject: [PATCH 36/77] Update query snapshots --- .../test/__snapshots__/test_funnel.ambr | 40 +++---- .../test_funnel_correlation.ambr | 104 +++++++++--------- .../test_funnel_correlations_persons.ambr | 16 +-- .../__snapshots__/test_funnel_persons.ambr | 6 +- .../__snapshots__/test_funnel_strict.ambr | 6 +- .../test_funnel_strict_persons.ambr | 6 +- 6 files changed, 89 insertions(+), 89 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index 0f433a19be9f0..73619e77b967f 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -100,7 +100,7 @@ ''' SELECT persons.id, persons.id AS id, - persons.created_at AS created_at, + toTimeZone(persons.created_at, 'UTC') AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -185,13 +185,13 @@ WHERE ifNull(in(steps, [2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + (SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.created_at DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY toTimeZone(persons.created_at, 'UTC') DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -488,7 +488,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -509,7 +509,7 @@ ''' SELECT persons.id, persons.id AS id, - persons.created_at AS created_at, + toTimeZone(persons.created_at, 'UTC') AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -596,7 +596,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -606,13 +606,13 @@ WHERE ifNull(in(steps, [1, 2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + (SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.created_at DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY toTimeZone(persons.created_at, 'UTC') DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -628,7 +628,7 @@ ''' SELECT persons.id, persons.id AS id, - persons.created_at AS created_at, + toTimeZone(persons.created_at, 'UTC') AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -715,7 +715,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -725,13 +725,13 @@ WHERE ifNull(in(steps, [2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + (SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.created_at DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY toTimeZone(persons.created_at, 'UTC') DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -747,7 +747,7 @@ ''' SELECT persons.id, persons.id AS id, - persons.created_at AS created_at, + toTimeZone(persons.created_at, 'UTC') AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -834,7 +834,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -844,13 +844,13 @@ WHERE ifNull(in(steps, [3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + (SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.created_at DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY toTimeZone(persons.created_at, 'UTC') DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index 7124c534df351..f637873df72f3 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -236,7 +236,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -420,7 +420,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -437,7 +437,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -569,7 +569,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -586,7 +586,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -718,7 +718,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -735,7 +735,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -867,7 +867,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -884,7 +884,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -995,7 +995,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -1179,7 +1179,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1196,7 +1196,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1328,7 +1328,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1345,7 +1345,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1477,7 +1477,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1494,7 +1494,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1626,7 +1626,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1643,7 +1643,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -2600,7 +2600,7 @@ if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -2670,7 +2670,7 @@ if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -3578,7 +3578,7 @@ if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -3648,7 +3648,7 @@ if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -3973,7 +3973,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4139,7 +4139,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4262,7 +4262,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4385,7 +4385,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4508,7 +4508,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4613,7 +4613,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4761,7 +4761,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4927,7 +4927,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5050,7 +5050,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5173,7 +5173,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5296,7 +5296,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5401,7 +5401,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5549,7 +5549,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5715,7 +5715,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5838,7 +5838,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5961,7 +5961,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6084,7 +6084,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6189,7 +6189,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6337,7 +6337,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6503,7 +6503,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6626,7 +6626,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6749,7 +6749,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6872,7 +6872,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6977,7 +6977,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7125,7 +7125,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7291,7 +7291,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7414,7 +7414,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7537,7 +7537,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7660,7 +7660,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7765,7 +7765,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, + (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr index 2cd43d115573b..5c16a6f7f20c7 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr @@ -117,7 +117,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -329,7 +329,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -461,7 +461,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -478,7 +478,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -610,7 +610,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -627,7 +627,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -759,7 +759,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -776,7 +776,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr index abd09217bc9af..4586b31a459a3 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr @@ -159,7 +159,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -347,7 +347,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -535,7 +535,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr index 2935eae6b68e6..c2857ff435f59 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr @@ -383,7 +383,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -498,7 +498,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -620,7 +620,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr index 7ff818de40361..975d22435d0ba 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr @@ -119,7 +119,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -267,7 +267,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -415,7 +415,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, From 7cf5d077ecaaae8c24260370c6712bd3987c49de Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:52:10 +0000 Subject: [PATCH 37/77] Update UI snapshots for `chromium` (2) --- ...-app-insights--trends-line-edit--light.png | Bin 133424 -> 145568 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--trends-line-edit--light.png b/frontend/__snapshots__/scenes-app-insights--trends-line-edit--light.png index 39f23e4aab8d141a0cb17618346204ed014ff6cd..a50d3f6dbcfeaed2cc0148865f1dc2babef13151 100644 GIT binary patch delta 112543 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%0A`yS2o`zQmQ({_p(1hZE(MPhDMX1+I&Cg9rL zM?~kzZ%XBBWoM{!st2i74!Xo_naj&4+uG*DT)iu%%c}=I>wMTX$DQSB&iPHBxu2`j z*A-;YKLQgYT{l%XtpIS4QfOLqa@%u1oSbe?o1YIDoh?Rm^%n}i&pj{IaW!n?XZf_7 zkW-c)jnJg`?s9TI8>A699F}q2iQ$`c;N^5X5@~fc%Xf8{WtJ*i@m_aa=`fUYu}n#g z@1Ve@m-Cn+R6dTZCIbCblsYHv?lO1Yg?MjppsvIX`=j=Mt~EI(0dYZh)4-`xEHw2hX|NEPFphh_&aD(w^2vLBe-xhkC; z+jV?;VAjE9v(n)gGp*ci_Gpdqr&_V5Z5Y@i;-{sqB)?p5a0j918ya6fVrq0^ zlzp&YgFakn=VF=NFZi-;YPig#|M+Ou+@o@qugKqy<>j|AmksK~b6#UV1Tdb7w9*4Q zE1&2J_`6%~X!YPqKm;dD@Dkv*I()uOSyauhce(z3_waP8RU;qOm9k+1Tpdxpj>3fQ zEG6B%yJ`+Fsd|vA9qM)}sixNEV47$u4N-W%a4pkOZ#_rI1@Tfj6q696f4WYjXTxRt z>vvDe7t?6v4kunmj*9gOEBX}aLaxIvwVADhc9(i8o{F|F6TT5OrV~hPoRDAuY6rWj z!<_b^Nr$Rly$;M8-6@Op7)Ytjd-Fyn=twYPAzZx!31IMd#Z0cM!L@ZR?5*1VlGP}* zO>fpNQml7ETTezf?kz6~cy6DLdyL(JLlV}Fj0KL3UHMtEJ1m3lt?tfhRocEh;$K0B zRqel+V%5nqJfsYxSsW}-(6y@)J!{=Jzb&*qUl5w9w*UK_z`7u>(K}c+_3Qhu1CUXd zoOU)VEhX98!4l`4#YCwP>Da7C$%n}G?lL>>xve*+XEuXH_vCH|zvf?y14As%)R)y2 zd-~|-vB!?@ufrV`1tDuUu7D@i=*ib=;L*Gr*Fh1UOqpF;9u`w@V?WgSZ z-F=Jrp@O6#DW8Syu5GEO`vb8yT2Wflecia66Zf2c-dh~ljtt8^l5VeXpW-FmtYWsf z?w&U}ZKH+$q7*%-JI-mBIn{dRyw{Cd(=#w>lEJflr}yc;o@l*Xhnhw)(v`_3;8s_7 z^TS3cP38SrDFUkF!mZ=bB-bLg-UGD0;`EjctrSZHXJ^gbTbupC!4CH(KMfYb?xcXU z6-15fdxp;bxv&BL>|w=3wH2~^oa4x55y7@Mf_(TcBD#5y<+8Wfewd+|SZ2F8(mY?| z)*-sxY{EXb+SpD%yK)gJvihaEuIDZxU{_w>Ww!D01b*IYi<%u@Ui*8R*=*J+mJ{_e zIg+RMi7QoFYI{V&Jz z8)J5n<3=zAR{-GK<nDw-!cHzI@So!I~)MzPt2W zp65{t=K?rD2=7LjRHIu7S{lL3(^{TfhVhpr{!vb>r6abJ)6>mHdCn;wm8*Os+)uuE zjs#u(7=e?Ww4an!lFqg)gY=D0FY*;l&D-G<;2+J_$Cg-m{J!nD*xi}>_3H(du2gcb zgi{mM*2z!b>yppc{tXmtMSrJo#KOR-IW=c{U0@X9ox+eXUL@@?O=1DdkS`?)c>gfl z?HhFzj?aI1;1k8Kam!Aj#K$=BLj*A4pI6sak;m+h9=~8cDSYDm&3N`#E4!zfu<(fR zgYVR|WH{n(4eEgDAlQz6U0g4O{c7^(G+~Vss`&i87Xhqcgt$%Kyh=93s0uHR+LYt?QXn-klJ*$iLglTcaTep-kn_mq=vjFg?YBIk{r`BW9AxKliVYm~GqOS*M+k zibDze1P2GR_|wv04q_FBVGEUp(99AcV}NT!T`;KcQYMBTf*E%2e}bIH#fqiTthA{V zgboZSFBDIN{i7fmb&2=Hewf6DaPsAgWZ4^qs@Hklg##}t*ZB53?=O>!k z{GJ8(F%eAMPxv-6Z+w*Si7)0b;_zA#!Gss^s5wU5QaJJg{lEZ^ zv|vO+R@URvktGOPYu+IdG2fY;WnVMR(&nNIk%2hJ=&X`(B9JBc(cJNlq-aH4^KS z*M;LnL|XiO1A1wT*h0F(bCX`a@rck&zvPA*KRyy0IOYSX(S3C(xF6yFpw+f*y(@|6@+wr{IAbI*A4RC@-?UN!$s< zl~46Imit&B`Ko!=0k7;`95x7Kyqq&6)(;*x2-x>}@J7qGMs7#slx1Yj^;sv$U(f9=Xcx>a zEcDwRUe4F)o9!~6`L0zYlPr&_D*vo*BNr=ptHU(z9d_dEjMY6wTQn2xo5&8(2@J@j zAR|mB4M)0Di$t-G1|8MMH{=k@*N}hC&@9mF%`W+sPy$Idw`CV$!Z(TCeew5AcWZ_E zdx=qs_pmE12e@(+xHqb#9Ov&T=32W!rMm94NvZm?9LlI)Vna?;!D}P-0?%{b?Q=JN zL^F4_ePjP~eLb^UL2y@l5@*H%=wEBTG!;RZ*p3qJY9CwqnGtb2MFG@o&rtlZJns?PhZ zUD6X&+e{<1zfHArej;{tjam0mX7PI}h4mJ0o4JCr&E6r$#@fw$#&y1ZP%KZRFbX*> zanjz5?CsIx&n)BG z^F`5#$w0Q{W$sa(EGE`!<;{7{pZ$3X7QHPzdg%Eb`{5_N(Gfz&1demgMRPqiX_+~5 z8AN{fEsvqeaP#XSQO37qx$eS7Q}TOHEYfwXLV#D9`Gu2tnx!ZjGdQ`Srca26$-*Yzpr>7+Y(zX41Jtk{%iuN{%oZWC+ZbCwifwRi>$Ip*fi;-tU7|!#`%@N#v6)w*l;QAU2?f@D0srLD^XZ4$`iZZlItef0*fh+m4z-rB@A{#d! zGoZlDY)zp}ji%4mF3}?r*hmAeAtW`NBQ?dfr{2=gZR;*^YqqGNPv69@D4_M z``5m(g50MxAW^|wF$9O3Q<46MIW{ot7;xAXN_n9GE=@jqkX&%#uFbCl(HDzU9!b?s zi+kcKsdAV}wb{x&I@h?WuvGXfgrYAQX0U>-&Ls|p%(8He< zF1Z;GUdnJDPLcxj-(57sIarFUSG!JzYV;&G_jqQDMm7&w90X6$NP*OX;t&(>3=sIM z1>X*E>`{xRmBOad-KC*XYqMsj{*?&FnxZcVw9W+>EN0-T2lWR(12J;Wn7+r45Rc!vX)FnfUXYujQFX%Hi zdvPOw&Di4h86m@D)iv-bUkZV;G=6^?EC+jo#)d#SQ(DyJId6yEtLY4J;;PB z(y^AC?3vTIs`Nzq$ZL5hAI{~Q;B{6++>aa%3*v^}26WblWzKH)m zK+fg;|~NXIy%EVnp^9!ga=O|oFk6=iyrq}TN-fotszU} zdGJ)`MJ~&u&x$=6(MamA%3L(0+rAmxPYf7ZWG(FduE#+xGmYP^SDDiTB)LU<&79Iw z@?j&keLcE4jD;SSxtU$F8=ktqa<84ot1Yq2zMFXN*Ou@d%l@=@{Y4KCgmjySNB2Q} z!2eA`ANjw_=nofQ4B|Bo^Ojy{aD*I_vDHAn4|Ij59_|xa%!Qb%=H?*!Uk*7p1_Lt4 zjeDQ{C`fA4P0Ao`7BG3C^YnScb#?7Fysk|Ef6`4eNnG8Bua4Nyw~EIg9i#U1a)Wus zsp`!7vz#95Q&jgXe_v^@BqHauO_GbOT6bSLRuJAFaADhh7Uqfr_0+_!Pv8b~jjU*aRa zeqGl>7g}BS)|zv#T)&?DO%!h~y97P6LMPc;>$Bj`KU@~L$+`l~c zkGm@+xd|xQ6-zct#Vd0vAAH~+R@mK@hf1TNH{$lcJ7^blhA%PNQ7d|12TMr3G!RU4Fz&MQ+=+ zm3dF9Qge%K*!m=?JhL$7laW!{|Cf%=*l`Exzt;rhFK$-mc1htw{*H?nOYXS*OHSXjR6Z7%}dh~>Zj!qPa?4$w#n-~uvND8=>cNqJB zGw67G@s=7g?|rTtGWJam+ZDfO^ynE|8a{E``$o6nDt;}dhk5wov;6d?cQ*GV7*+ZNb z9f~%iRVwi725)#QyJHZmb*E0d(00O9E8-^i;ls6C{`Qx|Hc00Dsb)so7z4JusF?K)27{tplm?4F$pFXg^2^`xtU4)fwU^U6L%Q* zz=t%3;GtY-K-X+H_<0SFxvb~9rK~#Q9>mGuph8YyHZIgoiwXN|>hWVjC{;MPXH;_s zYE78I+ou@Edjo&|SE)mqDnR*B@*0pXRFsEGfk`J)SaJ}_}(<2;$1gpa08{v+nvHuEA)VzUC5 z_ncd2${!bB2ycz@#+CN;tfF|Ylbo6ixE4c;l}c3?*-XAS$+9X23J}xqRko7OV8#p9 z!Gl^pm5|8D`hW)1l?D@bMw*%gL@`qCc8L;CX{jF%TT1^fsFh7N*f$v6VbGUPrlI0< z$r}H2PZ7XLxWjzSZ1(w@s(0_-Gly2GD8Fws_?V%ZuFQCdd-7kfgPCU5P5a5o<{9<| z+jGH>U*zBmyNq#37b`|8+zN#IgQQ7=Nk|K8@ItX-BZ;g093r+lEFp#W68=UzXFlI+ zqgA}Yve=)e64VX#izCmEE3LZI3>nnO@9V_DNHa#y%siYdjcR(vXL>KvVgl<;q;lU88c}Q#l`lx6K>2J1WmQLi0|(1##o*v zy4^Ty&j|kPrOVu|DbsxGoUYxEYHN|66^w) zacybc72y@%x1Z6@U-)pC*cqWZio1t$dY z&zI?r$jHL|-oB;Jx0z~eCSKS|7{dKqr^Jw)d_B0+LaC?!zGgO8xU4%14irz!wrI$| z7qy&akVX`mmBdU6M?Ip*X+MttxO`Dwfb&HlfKaGOF)gi($GuN#YgEr+5U^)8ChSbi zEjgd>ln1F0G6}HsEPn-NQrV!8aLofbLJo!3xaygk%uIyLOBhs=F_c0wOjd&9!3mVA zQQqAi(>q#!p4>l(>9Z}_zd~YSV#dfjc-(mo`R0u|Tby!ZOOt9({}*BO3DlX-4Zy!7 zC&(PxI@RYc7s=UEnBKnEU2IccY_6$0_Sag`LRF)BCYApAXZe$D&mQiUD!Y`PO~9an z|CBS-oI^44W^$?mv6E*zx6=as;y{5045N5)!6W7jja=KajOUrZWAcxR>0fl@M{Uh! z?4`r&6;9z!1~fBFnl(p9vWVIiU!ioQ7Dl0*KgmuNxL$fc@K_ym$(oW<48CKNK=@;A z_tgbodUt(Ur%*Pt!qj7gaA4<4YICdL(}4%L<8946dGcVY-(rI5F$W&vm6|f@oXe=V z7MMd&|MyQx!=#e94joE(09&PSU)RND?u8KJZ{8EACTvyAKN;%i9-`!7|-Z zyIqCw-czVFcWkQ6y$}-Me%V7c>#43Un;l$A<~Qo{kJk&yxOX)jXB>ldSkZkI^~x%a zQvStS8_UoAbtIf0ed_f@B4WuSe;1chdQeu%z?dAXv%cezhG2!evm*hRj3 zbLkB1hTk!M4#;#(tyoxbMJbM>kp zu$IVVM{qNJ9{C_-*Rxk6H#eA`Xif>qGi(VS@Rww0@U^e6Lo&tT9*_7sx+44Z(n8`) z8hrp6uVQ=KCrnEBW2;%$3#i4a-Wc7h-pvKeO+0igbn>K>`KkX@{eTJ~!{WO1@pS}q z^B+#0=C9taEWjo~<`PVUk}SK-XXgkPyVDPe1-AzZl}-XouXGK$RNV!awkaz_d}U+i zC#L*H(F_Z#D~ePf=IL{0sI4E^az%2^VjF`V6;)-03+e^N-B#wpa;0`?p`mWQd!GC?4%qIy`70edBGvH!czu?Kv=v(THPBW{KEt-M9n zU0QqfXHH50D%^AlvvI@tLm@&Zk7iqObos{QUT#m`$Ycy1^}#wN-YFn$_-n~7yeeKC zPVSlKPE#pos-TQ^o-@Zei4xYt!l-B1eQ;~LU=uJX;q+UWa;6ofM45Rem*p*X zYc?uxZx#8?@Nw};)XOG-=Feg- zPWVD;f}>3JASve_Txo&nc?XQCd{A$J?|_?}`@dHZW&s)GpDKH$tZ}jLEK1P{yB_4R zDT#l3&-hGUqd^{S**j(9GiO6@CjHJLLQrvk2k;6FvvSbQ4z-Y|Z}dLmxMhI8^Ze+- zBK=19BK|l`HJdO_S$}L~7L|<(31)d7Bihs+s?+vN&8+dNToBKnnwc}!7IB#;yy7s& zHni%W`wIpW``0E!QM>_bUDawp5c=Y>Eh_Day?wrE-m6o97$exUV4U*Va|KK+w`c*1 zM&T?tYh}Qeby8R2AEer^m4vaREBQ~zj~A@CP%bQ~LMUV3*wm0G@{|nhSDFJgbs|)l zWr)5ZqGzX;R=2iT-M#~c$Qtq|a4JWB7PTOmix-Cvis%nA!Chrce%oL%`Nw45q6xV; zIXTs!riaN!+-HK6OW1|X??1kq7OmYM_>I})yri402u#mFZ7A+o3}#>Wmrn^l{7<0u z|M8GdCw1W?!g0`?M!##}2QAr?PUR;NT|z&DJ6ErekYHT@1`?}t4m>Eu@xL~Hc1-^b z}XwSfpr!d7!#kAbPIx9zf4V*4%!pKK6O|({O9ic*PEp}th&nO zVMa!YXYrd}e7sNqKRHS*o|}X!zS*&HVe}~!@!vvS)qHlO06H`>&so(%(Oy(CCQSfk zBnt~s!e|^6@jscMqa!{|C8a>f6VU=b9AEu`f&koYMZ>=rSv%ekDDWK;M~Wg_Z=di` zykq{?x?#M&q@;KR=s*8A98}W<%$)vjgNCX9{g0pg)fAbaCrb7GL@WgZf8SqB1i1+&ft6NeK;BM%|+%ex`DucAe z;z)r8qggjlWS{0=Z*_JFW6e_2uK$qgqNniRu<`J|0}P@LT^>D1o-ZM_QEz!^G4$lH5)^n+!pE^Id$yLuJoZ~bwI7Tk9*zK+nTY-`b_yjpXLTv@V zlHZ>}Jb;&l&h@wNS-|ikdy3{cwbpyISa=r2hS6N9I?jeH7$|ysWJrSrTxi1|Z|HN( zbn+b4v&r4++{ef1ByIwI1r}vK+RXh$&g<|Qa2TnHdZA<}o)*|p)K{PaK|*d9rQ zUIs;P7CaQa&0oW4a(r}hu*%~N=#tP#%?%d$$2c2#Z!HVOX%(@4q+xM44g^}}1awOE z4XL@#f^w&&{&av>-S$?KTN$9Mw`?w>EeHrA`CL6&CSLulKKgN%VxtZBB>zH z{|ZauxLc}(aUsVqY0{r2PU&^Enl0zXLYtDk{M-rD&KryabmMJQnb3oF%D(8khpLZm zAX4(FUGt75!{!^4GLiX4Uu%EsO` z#-4}pI&Tu-2x8Mrd8epzUSpFVZXZjDJW6gv3>5l)J1@z$H6TBG*xKsvZvs|Sk4;3Q(pOhx5Vg; zjd#LmuS?Q0?H`eE250`0F{P!cp+>__mk3#TT=Us~HAY}ig}CqRr_12{Ue6kBi8S6e zGE3^^5Yk>(5__eqUfJCM!P{STfJim70)~#{_%nbpLWc(Axo##lrrpVuBk_mr6}F1M z7ZEzcs3a{Xg@o1`1T~MT+uQrW#`0y>@FPd~JN&bG^xbB`jW(+CwmC*^{%0LD|HIrH z-EB4^2xMZ@mq0&o(*9&}&OvSE%@F;7h|N2^6JG2!n6Ln<1Fm0B=SQnRmjQ(4=OwBx z;qtxgq)!}3;xAEQEzt%Zkr%9IQH=KxEZ8TV?z*`if<{9Y*CE;5gr1I$yMs3V473q~ zCXSzPHnqP`?q`%@@BN=Rm<`$JE)!R=AJqGwf=Y9gH@@)_j0=nmDb{a?764(3@bC8!1)V;5*KZ8U!M5W4ldO0E@P{tvO zb@qui=RY9viv?v z!rtnOS^GPgT1D%SdU8B)_M>?Jc*zjf-&ajQ5us{7G$MkzfI+OMjZdh9*5$9WKo8MD zxv=GII&@Yj4Xzs7mz_Be6A;~Kq5QTdC9UBR)bO7!qrjFzjAcQo9Mc+eRX>G*t7;G= z4SU$r@L}!YVWWcoHU{tpW|*-1?>}un|Hor$vAs9KlgjXg!e}_e4_kr%&&T0EhzI}%Mv*pKvM5WxPI}e@@ zKYdemeB`#dFrWf@f-D7PfGK>#JZE8F575aALXrTH6%X3@cADx+zb(*k!oK4ce+aOa zI2hV4j&}Y;;8kY?DXxAmSkWPZm?@@64bEG7_aWKz%i_+xy?dH~UN<2>`}<24flM1EHgU37B*d0oM&h2Zuu7X-R+g z?mR6GjdM|^aUB5cyd(g)l(sVOuJMN?DNUc8R(*i$UJQHctBwea45UH$OJ ze;5el|LffS%Hs%Ht=B;<6%(s?QU8O3{lD!Km`nTbB}+zx2qvhDbC;G8N+~QfZfbnm zFloOhaGckj#GZZ*<+b+R;$EXw5d%BBMBv5F7p(PI*kEO7{Kx5#hT2vaAQSW7K^+T6mH zlbj!z#g#5RdXKxca~QwSF8*HEgzSCa`s&Kf7SAb;1rg7XR6SfD45!$5gGlo(mD=b0I8~OE-AfQfsK^a4OLL5*>JTRcyVHI4%ifix) zJ}y=a?69wtXX%~D;FrlD<=MA?Ld5c#QCBelY|XTKYexa zzGA=svEe=P`;x%(9~ccxFjvnPj~X^mVn2tWehI{VjiCy|^0b>gxb1WTei57e7X8Jo z!%77{S<70>N~3)Co)vM1dM33K1DpWo?}r7F=lg8Go8SyHm3{}AROw`qg&@CBd9-g~ zw*w7b>e${UqLlhRwVxJq=2iAnz`>G``s8p>?qSj;=bmg|>CoXOT}AM~l5s*Ak@9bu zwk!`%o#@LQy;4p?O`Xqyy)H3vhi!R~d;)*k2(4^n)su4~xbqdznfdC1uGqlEA2^t= zrIwbGdRZsV;zUL(Kan7j!KJpq{`PId`@a`T9N1~`s-Pga-!$ZYXcHNp=x$U)ATW~{ zVMli3O49@dF5;8^c3)OZwet>^sRq83QP}ABNq*-Q;RSZ-D|XQjG2YyNa; zcvob|vfFB7p(jzyim_#&05P0E>ti@4QC`q={JZt$%kk-HCMQd$dh9cRr@Fw%!a_jh zeuoOwk`x*7t3qafPBy2hmRjjZIGJ?{QBqQk{Uvrnzhe1_ z0+q(o)Uz|vHV3X@@0al@r$FTmbTbf>**(eqb5t|YmC{<1l3V@lmG1#l%Y(ha$Bv!DpllIHCy7$)tVg#s;CO;?XzZ@Q7WA#~lgH#sFsFDm< zBUIsKvMrI&e9X#Zt(0K+V0iJqm?Ya9yDi2KrI!*53&(76|gkR3(pVJL2uMnSs~2zU_LsUpJk? zflO>?V%_(~MzTO8P-c92^b+dxV@;Zv?A6CF<_Fe`3eEO?7^FRF^K=vPr=V8op;RX| zuyv!Jtcoy4*^h`zPzS~Vy{}@rDz(~K3!QrwKMU`^r|^BzX(47{fQq;N>@iuY*PNpI4i6pX@tP zSULB8{d706qhwj;YvSd029?_rO`%NvCChXc_sF3)oc!e|#jBpoKBHf!sebnzUl)NL z9EGYr_9SQ9oP9$pLz<{xjn2-vDR@N5&!6#U7j${Hm6D|=jfN+Vfv&vdj@bhJD~EY2 zy(!&MWQcVrKkU&Esav(L^kA)j-kE6r9;1PST|<{*M<=H`?#OCyG3qvo15iu9dM8dO zC^+cpv@O3La;TQsTkg6^4ycLWiIaOnm32XN2G2w`>JFJ80eQUmdherxDSxApzJ|A;aYp+3qwUSNe)zzA z4#n+;?D8@ErnUuEJysyCY_OW@uUIb6(h_q>32geHC9n7D#u=F7)uoF^$l>WYMf#3p z8S_kQP)=tJWA*iFG+}4s2$y|SMuP*96l-0j#|$j6sXiKBD;~Je@nt6D z)?j*-+X;uf+wRP97;>Wjv**O+c}*4l2SPHXCHw6{+^fAGpO1CLT_oprB{Y`!ASo@4 zkDqTlf>&sHhyy1v94rifd*%aspGwCONbQ`Aekn4h+fEAqefHRYj}sew5Ci?f+CEa3 zMaSX&6E=Fzzjx_ehr>CLul1=XoECrSja56&_d&xb!BgbvQzP_w^H6-t^mO$Sg&r&M z>lY0b&SNDgt~`k5i?^R_+5t9`)@JDRe;-UIZ#b5zaO9H`cXmDx*?H|*P>LW#GLmAb+|E~2PQ!619bViOY zBRA{1oS!uqJRaFP3A(X^0Ff-~N7?Gun5kKzyYZB-0#aaXQ@EgIzf}eC*k^VY^J0ZeqxGFq+qSm61fVPd$k%!=% zGZ{u%$5(_Ejal#@?bqkLT&ej4R&B|s=V?+>0uhli!OkPt6FRFz`R>{MI*)>KO5KIg z?aT5p_s=57VKeB}&xmU8fYH4t^H(*Ys z*9Th;A!??l;4~CJ`oG#g3t#ujS|itRE~JsGXKY*v*B=o&ys9FSI{riQ#kbbTW24nn zs%bZu?_G+SJ-b!6ai2Okv^=j&OEbk>Siko!D0kZoReBATOn_El9|^j^VfNBH%>wg& z)#VAHldX~5qQa5Iz=cl_pp1p1N9jJpg86JLVw<3`95dCdgcD2jN@V<_UBG-*Kd4me zGixGcS5X&!W;2x?_MG(f^(DbPF+i8bC%RBFVXUA~CjJE7_T|YqHGojQadGlo0tzuP zoGXoV=URuVL32?*OZNk4Fbs7QDOpZt*-O+V8s~EURPGwfvM;ulGcv?(^$BEmJ`1Vm z98dro|AWygw(&H~bFoGiW0hh|832yQ)#M<4)}8x&#qHa zs;xBs7XQR!OoAE|y{DIyX+u8aajQ$gY4Bj)qx2WpGonV5+rc8)*-8J7$Zje(QOt2Sb8ODWDH3?BBy! zia(rjUgBw+xh(BakZ=h}^rs}3K^x_jm5z61qte^viClEh--lEN2WQE%TQd2nHDG=nxp zj(}yW%75PcYnZ2qC|$gE$%O;=l?$Ln@P4vc-DswxWcAlDQZfDU4tapWsawiS#pdkc z%-{3t(WHg)diF$@xu?3G>oKmKr4PN%Sk#mfr>Jrl4rF2+EAnR zbf&}b@jyNSGWvM%U7m5Bwug6UqIoXm&LsMHd}Eelrl)*brDtMh=Fx3$@8MjaqHZ;0 z5AXO{O?#ld`=dHkNVzNP_*`7&e1SMd;)7y`EGLKcDxdAWsy)|}c$KTX5Wq(*gGg$3 zU1M-6b1@WU>igI>=f+dP{o4w5_RVjCqzcUeLcSL<1fFItSaiP) zsC@Mzm$0EEnv-rAYCe9%#}ZAX#u7%LA@0P<%R}Gs92Q%Eon0lh?Q2tL?2nOFq%~)M z^NU)h1}5PIhQM&rJoC=epUx15MedzBJBtI)a%$;yv5o#`?d)W6z1+zLrCU#6*xyld z61r_Kh?HGpSNsf@-`Bu>=FQIAeMUwVNa$8d3CK4v8nz!g z8ddV_mOVin^fa)@vmp-Jw~|H@w{YY%x2i2{nCGf;=&}C(T;@!l1Iv_U+Nvk zqWxC+WpLMz%ZN3r_(QjDiR64+>Yn_6#;mEc^J3*bvf(WfFTDJ#a?QrP_3U%!n$(9f zGCvwFCSIhXB0|l8GMjqVTM4*400t-}KTwE2>gRWuC4aoE%aN&)%2oXMkP^`ksD*g+ z!j-j*E~8M~$CYMBypl_%7%d?O)da~8q}dU=6za35%Qc?sRyh7SRkvd6c0Tprc4NXlF7Bh${g^(wXq2c=d(woGQzQJ`9i9Uw?pU2NRyY*d8ejTNR zlde8|@#b{S*-1x}7jbePiYwyoK5zZ^Nq=pUlj;KiC#GtpySvY(_x#|KOrA#P*VLSm zk^*?bAg6o{5Ua0MhvmStXuNGhl9IF)%}hJ2Ae`J3+A`W6!FgKS6B&Mejp9ugq0`Tl(>)GyAfCeL+K z%e}(l?&}ZEqygkyNX=xk#!737U1x#$^E{bbO)Am6MR|_RT(Xf`E7`J}t^!d}QHqd8 zxRjZFgAv>`^_Dk55n*A=2RxG}u<=BKvMgih?-nY$TGp4+FStkDPtID-f}#n_qr3wS zP&0w%1igA7aH?eupjQAjr;leY=~Oype|1t$KNYWn-2U`epW+U(>{*#sXfC`-$_A9%o~02o4^4A9QShbCP7`m*o+cwS2LEuX3&a2+VhR8lF=8T3TFrCOteHA` zuj5pCg(nim-{Mdw;Co{Yt-O_LYc&;R#B z5s26@uRz@Jeq7AYzO=V)T|T>gIWQ*XL~tXG6OWh)o%fBejg1#WnaUr`rZFp1Z7lw8>e0=NtcXLw{JPC3)LfJx;?rGZ&xl=k(0$RXbgVI<wxsZU>*;{(ZTIHM#pQTtnPc>2~(X)6TcLco%&iCMr$n9UO`b(bCecJ1f1nyk|v2 zoBUQ+BE1$1yD(mfX1&Z3W2MQmia*bL-6&Gd~G?^vZq!GfILw% z4S(?@Et*%wMLj&?BQy@^MWJpoQQkiNfqHWwRe`Ny!=4HrfzEy8;`n%ALtF0zWce9; z2Ynl=Kq?qiZOo4J7z4lev=S?)t9F;gggy7L%agfr@hO%mIFMK`Li2R0g02tED&w70 zz9fw;;f62BiGkARH%)3u)7u9ftrDTj>kR(ftGo$`iDdM?!FJ9_tsdXSfj;nIz(=(? zD%t5ucAj1|{KRSfUi|IHSb_5G1eqt?-I?<*p@r>tW`MpnKQKiRIuPQ&crKt1|9yiF zE@sOA7I$O9?pvt;McaGFQ~m$%;|C#98j_KjGP6g?NTE>n$j-{jDB0sFLRKOYLiQ#k zdv6Nad&^$g`*%O|dVfEk&-?TK-oF3*&h7T{oc!$_$W{geA<=DV>FU^sbqd9RfiX@S1 z+~(_7fh-OP4i2Uj&Z1*I=@4bv2F}%%Ao1<_Cak*_Z(fW&h4#dzxr5PuMvq2c*lySV z(<50Xik~Ch>&SW)oC@uxLS82;43L8pJQn`#7f-UsxjIu-uMkqwVW80Nz~NC^U=R^p z_%l{4x}rFW?G-=8(<$8jgFTmf4||r9mlwekmVcu8Ecs2!R!wF(G0+EdbRywx-CvFi z5UMHKFl~!_VCzT0MJXP~F=7o$@aH`VsnFu{*ARYwOmsvA&Q^LO!v`o=EL@kmProL9 zeT`wGy%t*4(}N2TM17^Zu=@Icz*GJW2Uu7*g?j7vwhlnW)3d~G$;pF-!zP{mygKw$m*`+pF2Z6X*WG%w#3EEdVU(Ot*;i z<~mxGnL&Jrr>#vTD&}=9UR~vl$Ip5=sIE}Y>Wt>=)=F+~b5{f<`2Jd~Jg9Q}iSj+aVY`E7mn@8)|LT+bef zL2Uj>$P6DfI_dr4xII@G?4I|OQS5Fy<7E*#oK^qs5@6hsBruhG+9*#gU3Co`sxVe+ z^dP;vVy??H@MGPMmJj){HabF^Q}yHQP4?_*yoKB8ZVM|erv>U(x+@^{mxur z)de^K=JF}9e?&tz4+83_px=wy05m7yiN+%*@8`ni^kOBiH1+ivh`c~y6K zKC0NY%vsxw`t)xDXfz(gd2C;7eSRy){tz|>PhK-Mo#u~b2=M{*4LfoG?u(cx5OqG2 zKJfGBWy99QrvTq+l)u25KIF$mwHZA7T`Vm!U~f31jvm?}%_?oFdBSdP{FNi+2CsRZ zOmwN>-c9QoFSaPhMG-)af*lc&)7IkF%uv!5oO4%KItOT^j#0I@>0jO(=+3r${50Zt zM*2saG zjOm&GRi>$KwO1uH8ZEGD`S9ia@$yyil+FWEe={&u@wDI!wJkhtvwl;~G z?whBCsRZ8W)xXo*$q9ijGArS;{r)p=3Jh>$n;K zqp&3-bF$Csdjt-(=+;Kvcv3t@(3#0{6PI_U&NfLIEGd9Z5V17E?E&EWo2jCZ3d0}DEP?0BeF8_afI)6$l$}fR8ONG?Qg+r zhJ!kVYg-2di%)`u!^IOrgPf|Q0d+k~FX5Q?`gaeTwZ2H5K2?aCjeN{5u!lqa!j<~8 zQC}=JdR~mSXs)it*7BO&&rrrdwR3U)FLzoAO-yjvAz7=G zzyG@<2EFv>s;u&TADhL2uz|#+q=|~x(PMLSZsVJ#;7sqDe1Fv}@*LXKC-lLbP9TwbU zw{IuXD03nO=b`+RkD!4$*4FB^+98Acvl(*Z-oZkw2Qzm2S;sTj%7j|k+sWLhpSH)# z5;)q@L7tTNV{OD8wnQfRWV!b+7D;#<=)?mk8^2Vv+(J77yludbD~fs(ch3!bf{Xey zfv1G#lDd?TDmjz_oh$$KnDLH`=%T2q7D`}I%? zP>EL#+@z{nV08MyrP&RE~Q;DEJ z*n*N&L@{u2I1hJ#vY6Rh^nHa9XRKVc=jnj$ZxzZOp)-&;a&JB7G*|=nDe3{h0LUP(_&XB+Pa`fKUWga2a)y>S za0MLKUy-4ir_Z;!IGlPJm>nF0;^MBA?Z2e>-AY&;+&25ZG2Uq4`_12F+5&O-FHgI< zf;Z!3)97G6k%-+dqa(WiTU4%?wZv#cDl;X&pv1kB!fZqOdoOAlAci;5(QG%Q$pUPU zfZvyr;YJk_2v#T?`q$?Vbz7w*RKvgr)Sy|xKLj# zMh>?RI*mUc%yV;-`4=vtcM+hiZf*70`x0&g`oxvrSEzR-HumEf?0IcQ+;$sz7@yd6 zu1>zRf1P(RM7jIw8Odg3)ome(yR5Dj6mqVXXOSM$+FcOE$k|tZb(NLWo@l@L*DeZu zLe4p%w$b4y%fA>~+A}9BJ9>y=R%4>CgU8=XnTS3#o^r256XxJ2&*ujI_&yL^TxM+ zMWD@ZF$TYHp7O{{l4Tl=R}2rh!jy+EnSiCw86_Sf=1@w>uSxukQ4RKfxUh|!ptju> zIPBAyqrZPEvmAur>@$L`d@O!#*H3H-Z;AJ3UzPO0gt+$9U!o>?__MS853jraU^ofwrQ)S?*gl+crM{b?e7P{7VBp0kVKxGH zoKjB@Ut)-VNuk)Ze$Q%}hLh z-c{7XyNGwn+x5o+%fm+(jkrzHdH~hoM3#n2k1V6GATs<`kDNR80YwqA+aInl1CMWi9bF7=+vPDF8Gk3W?+<;f`B1}NFwWp(3>H0 z00`kHU}mzCCG&juXJ~_EEZ$h}>g|hIalhVHRG_$x`{`Q02e1Wr@0^9C5@7mJ{>>el ze`MSLj??R*&9W&$%mhrv>kk%^2S8R+SLz0o z6??)GkLXso9@=DO7pw|hKm!%2k04& zeuSvQAf82d{aD&&UqJ_*e7Is%3T5QBXNMaIdOw?BVYgiz17^Fa&4YenXzx9_cb-sJG- zxSjwK4-rO2Lh8TS-A%_vd=2mNPr?_(do;k|yz#6Rt)GeGpPeYdBR zs;;oJ$TAR#B`Z7aXP}cqE=x;FUJS-JEGTw-i_T36IiI44Lr;GhKKS9ok~3zK@`0FG zA(944Pu_=r#8FWh*kil-x5I)`q!2GfT0KY>#6>VE509 zA|uawRCyA5hLN%x%%hx%WtDG;1V6-p{Qpyh7iEdeF0#?a{*jKc6t%JW_;Vfz`0d@@ z-h{;VH-B*(@wm#OMgo5v>YF<{va;PIXYVTGJW?e+pTmhV4E4eQ9yClMfpZuy33W01 z%&|X||DzPbrf0J6eHqnp`q<&(2#u==yx z0@f^bE`-Qlg?K+M%xj`sS`DsI@HE8aw?zNJ1E`5gJ# za>mF{>2)O(gxAKzaaaPWRqz0A!(Q*0LDWwe9x9@3E5{z*Gs>?0bDPT9Z(2Q1bci?*Z=VsWypu)v#=_YmqMzu7;hRc$#Z7UN$y3-gA`~S5 z^`-vz9t2cu4cJah@r~4$zClhsA{S15Xola>+lmW%@Q#F(I4JOSnCMOEIE^>=RAB|~ zS)ciYIm`)^obs#0+8cu>Nw($L3W^GdQv7+G<{humC1bhx-){K==R8S*<7JqZJRuS4 zBKStC^UL_k`f@11xLM5PJ~V(D$1x9?^K0CI85x^Nu88`neJ?{^N3P}%ZC-X=ZL`YP ztx=s*-%Y$Lly7Fkj~XRT2_&0tP~VE2^#60qon_M}tF@u0BY4ij&Oz1k*@s8lS?>j= z#ba{QeQO$G_#WcL72QTdv7~DGMxHjWGe}9$4fyw?EB$t;ViX4MzCvbuDN!rBmh|5U zpS!D4vF4;a);TOX?;Gv1b9oU{U44*0Tdd;-0Rb#1OLlzdTsB%}vw>W~2Qr_lehsO! zeDwMm?)hC%tFGk$7wVYs%{to-DNq4@N_)lP8%}u_d>RQKxlPR@YDAjZV_qT!y}_TQNV49^^3(=^*9M;bDS@ z6G2cDb%6>lC)d-aZj4=)3L}OT&ggfd_zhPn-@QX*Z~17Ry&#vO&ptylHkq~a7wz@Y zV14i`@tm|Y)4a0mt$U+*d|;&gAuJ4|aPSzr)$&BorOQ4aKHxK^cpu~Ov{KR%Zn?R+ zknX2;JWP`B$uUvraFPVRw^KnUSU#lNy0nbRey=i6Z)e=#_%_FoWS-2nM7pt-p`$Ny z#dl*YS)9&6`!RJ8;0S`%^83$0rz%e8g?}g~ep7xK)|2FW@}?RvrcM&+t*=A^M?dC;*BjJ=lckso4@{h3g@MRt`qu=IuZ)b+ zc-!=eEUNWxQnRSI__G+ZnsS zMqjLGVhEZx+06`je|OUAc~9@;WFmarwB@KOy~neOvbVri?_U?74>o@@YoSm7@15$c z-_bLId{KW$XxFnQ_Mz@4yKarqzVp=b#f%uh)Y0a&qWO4`2J)(|;5o-!_VD1Q_IJ#Vq}F?ov~Yp)knx6exGPuE zQH2!S#(fP9jqJ|n{=g?+AnHu1`Hs+gmPi{hRk>WcAb9q8(26SC89$@=EM$E-s3xuA z^U`~*VJw;n9R2CxoAOV;I&55lIPUc}`*X^oExQWB3sq1VwxB5!bG*{h`A{)zUCPbCu)rq;&>}-*|Svd8O&ClcgK}F)>`tI|={plNi z;&Jw2<%rb2&BE#3tz|>4?~rkDdbXcpqx1mE#tfYbb>hT?kM^xDS)8@UMdvQQhy$8@ z9n9b2pBx}|T8K4NPvP?8dZ3Yg_}|mLO$y?G9v~wWCprDd?_ivr<9mZNqn(Z3&|{BPL&Md2$$vUD&q<8rC*zD_+hYJ1#w!>D5yyK`%^dVMw*O}D(5 z4d7WWbQ{*TXI!vTPz1!GE&%(vZF7KnwqAW^((pOeleUe8Y)L@z=pfdPdC|O{_tZU}d{Uw3bdZoi z^SsjOQMAxy^h-bYS!K8g+?ayBbBlf6sH-Hr)^*OE|8L*v$f5y+Kb?!;1Mu=x){#()pCsfNx{k`z|ZeO zR?2q%A6%5E*iHAWEW#?{A6|e#4lH30mQi^5lb6>)3N}{2VNg$+t<3u3-bEDk%FbN| zqI18IMWRhRb0}PS6Ci`dqFO`(k!7VO|3sCC?~^j8gjyZ|WAm#PZgXLv{(E-cwrI3z zPdd7`Wo0%<#`QtgqQ}~ml^*TsbeBV`zgdBw$`ME{{kGh84ql6e>P%C)vbS~c2C`VI zM#>X*rsJKx5XgL#GJy^mn;xKRor1iXkJB$r-<_H7F|!*N>^Z2_die0+*Oc#7!`g*? z4kg*$X<6qg+-pS9*gndY<~|NqfScQL*#RZ!fK|hDc5{pGuOF{tbVXEUM;FeL?}oX% zUDYhYscvn(BJ5ONOUu%bVf^8S*lt?bO`;s+Im_@c&Y8U>%oVJGf6jt*NWi9T|>Zsl77KVYf2So9B3^q+|}* zAV{Y-o$2Y+)eKuW60R!cTE7WJX%kIT%tl@PR3ajgEJ8I`pt-NKXp5G+u-#`02}jU{ zJdWk2ao@3RuaKT|T-oxMH$KiCn0c zJozqyd^|~F@Lqx*H~JN89~A)VT_tTg!?w$H)m>d((p`eww394E?JVhoi)Wm@SW&2s zm`K70mr1P8kC(ZjFl?8G(W?VB4NZ2%A@I;Y)-G>vZ$I6ClfC_-*%qBm1%xmL%8eSG z-3UbPGhYM<41*1544dzEAm-Xcc8vu z&`Rc$?8?M@F+F7Y{S`$3~i{ zQjCp%+sw|+-a;%#4GW5jo-P#p+Mb&~OR`=!-@BeXQbpP73pB^oJ2rz(v4BEB+ONbm z&ySSBUfa=(dKf{34vVeNK=xHl1~QPp zx?`9IGBWnfu%J^951a-4-gu1fVdzgr!ts(s zJ};%We3^a?&s-;9+F-I_3=QL7;J0TgvRQN!ble>OGu8Yg*G4HYx;THB(hYBdUT6GG z<4k|vnR8cfy)7uXLu`hLV5;fCekuof*>Ey`I&@`zZC?s8hw8+7SiQ3intAo-UiB8N z&eM0pUQTxIz=`B>1h4bB{1wL~m~hWa31YrZU{e0%VK>%Iu60~0SI=kJ&HgQD_;Zi> zf!sSjF}UR-+hyf+XZhjdBV^zV_P-Ty++aABVeXvf-a$5cE zC~M?cP;0}RaZaa(BV?3k*CoO*!j|$e>oflph5Nt-`Ji(l4VhIcq5KNtHO41iGyK6p zO3!P+J3J{9z?YM2MyCOyi&aQ&6I{9>ux}dvAE*RjWFWPE?c&v|Z)OZGKv4rIS{9>4 zdm)>!VT*2njIDeS7j{49kBBGKTgE{eBZuxJ`y1!&z`~!9)z7X|rH@XgL-Q6O#Jjqw zzD(S|mD5KQzwvs_r#|=o^H~4i!U|iwHXAbgf5B$V`Sd>G;X`JXL645|* zn|`~SX`ujxI@m1*9Y4DCU8l3?9$FGC(rf$DbDkn^aIh|X>od=C)>X0F!?LqCj1;H@ zx*mH^j30W~me$p(ppV@lYAT0^XS&iHi5<&9WBKx>I+>gTa!kr0DW{pXv9~_w_+%`f zz#$D5gzDoQP2jWYy^#s}mHDG{u+k;8nQ8iz`rrsz`#Mv-O&>)f1}G^&-!kp=Wi17R=ZT`uR<$&KT^SSzE{{PfklJd^l055pH^qc+7l}7 z&^(If#b#twgMA>x=qIc>Q>4e?&BaLS)7ws6k_ft<=+5`$n%?Y7U#;p{AAMpcX2uV5 zE{?JlByh4ub!Q!2gtKdIjmZs&N?ZRX1^(0ur3sF2zcm^Bw&`OI{BbISyG*)-;5C|7 zfQRJC76>2rPY9v}rhIrf?sAY3mF(9(f0jKAzdR_SJ{)Op?eEEn{U_?CKHbo1-~(V? zh+H?Nuw6Ri!S*hZ-w6nKOU*2`_c}yWA+e7=s81{BO=Ty(%ALwffBQE!8i&-qUr*5i zDI^NUa)KH3zw;p0|APlXj&B!;kpIAgFnO#yU~yW9K~W+NB)Y}RLbb(}qA1`=KFAvj zbtiW+F@&6Z-)M(_gSb?SFp~95Khe#2dB)E~k~3#Lb!YEztYVzPu(Yyb{&*;fbr^pU z(hohx=YG4z*U&X!Gy1t9czAf;kdpRWR9`fh{{M{!G4+|A41P}ke{vNGwWU;4ekyF( zLy~vz_LRykGN^s?hVFp+s(C|NlmbFnJK+ zBe=;tOa&@0-8IbjW);vmn_Y>tklYB>h+2Q>XrV(qool+3tS zboSaANHF_9M2R6f=U*-3d)xQM#zx}#V4f2Y6lPBP=;ZoJ%}BV^g?7q3xs*vI*-U-AlzxMGAb6i}H-Z#IU#;;Jq-rB|9Yw0fX;SV5Wb zA3hTPd_U&v7~-z;4ChfF|J`V8%Zs9W@6nvd2_@3bK})L+_#HH0j=f;mBOJ&sEACVb zKgLjjOf}+u!WS0v3l)D|m;k?_%nyf}87ncJ;It~KYi@Hj>NPM>@$#h0Zxm48Cz-t= z;)$KO1o)z87}Qt-eYc8ZC;T&Q(@o}yF#}vWd) z^@{2i$uw&namr)kIX=eQqF7s=s&5Qyr;Db$=vt0s!g5uzDQ?;f8uz-63)9`9qu3T+(aRKx73P{@(QbFU4Mhj zuM%UuZ9d0yR`=>ByeJ&g9i(4kx@+scn<6FIKb%(GC$su2f`MF+BmE1bNdl4n;9d0H z=p`EBW=HFJxBCxt)6KC^k-O{l4Q-^cTW3&RsScw}jn|SVm!4_e2z*F=+O4bgvGmgw z(;qK=FT0HnW2tH5PVJ8b}U*Q}Ln#VN69 z208dWRX*@y`&FNz-Nw|gvJe*`&*s|eM>lGR-N8;qRkiPy%^deVH~xzJvi!%+uoe}Z z3v?86c`AKl=P^6*x8FubLof*G2j`x$(Z&uEr&(DFXwhTZ8C2D zEfGcD{@2ZVbnK9sfpjpYrFHEx$1`gR9tFM99Ud) z?S*mi)>23RS@NzTF|IuGUyn@ro_8*l?%@lbLsb+XYu*Te^nO>7J=aa`;^D<@!?d0h zy@&`w^J@|ZUICp2jYvm{P$r$(u1+x}Dfhi|Ue(qt+;mT%pu)q!$!4iPE{~iy)p`D- zN#FX7yyp&}E^99F6opcu*+dJ0Fub{dwL8D$B9p4@Ki~D;z{>fXQ;5sXP3c^Ee>TMk zEQBIBx>o*1U54g_gLA2|Z4G$AUyKMoqB>O75&O?K~0nxtn}45}PZ+NN}u!zWm?xr`cJD`f0gAROIaU&emx+ib(a)lVUq%)753nY` z-3dnC+f@xDz;~H^HI657PBrYdjRXr?m`sSCj$5Nq!q9rZ=7NXkn?{qf40eQAs0yW@ z=B>)&;^8gVBSR)-AD)g#(K=TS(l4$u_;_bk;0bB^C`ILGo>!lPqT^IJ*h|&6rhciQ zR?X0e%A-chsZ|)NW?(!L!A4P2EvTO8AE5^Sk#XTW7F>gi&Z4^<9+t<7aPY&wU*g|4 zfEI+blTuUjyeLi2bnGA1F))Qq4u zc<}QJVjFu!m~Y?wFbAT9LhP~$vv>@C!Cxm|LA9s8 zTfP)y?y-)R%x!BX5gnbFVOFdPB_?ie(In|8)~`cQqi2`FI035m=myD0ni>9HE+Nw@ zYx(eNelyB41pgeKyn{m}*O>(yTzGp8%ZKklpeX;JYg=`O*j;0D)D8s79Pr`!h^{$$ zaHsrda6zApdZMQWJPQ8N_c1@7P$-luIePq|*s=!}!?~s(BT%8LWNp%;;I(Vy8!}2;OPV~+yYoeROU2(Nhql&N?mLHozqdrV zpy@ktB)~-u0F_^zDIYdEJFcy-$&@GCE*BF~Q7ylS81!jR;$EdW1vA~$9&Xz1%hs75 z(@L&8UFn|j$VTw&j_u^zROYp%u_kkN8R_yS53=Rl){mx(;nv}IY~SfRzOtpT=mTff zk_k%ZmC6SWlYw5`$RX{}$h6Rb?cfuY2pr_>9NO_=cXMFbx>eBDzVk+Y>^f)_o_mJY zKIMdjB6TqRP=?l#MK?ywfiSmY_tm~dn|vE+292Xk|ICzbzWfgGgc2xQvX@i+8Rqa@ z5^HhLQM}2fX?3oelX95$zOvh+V$Y`c)`_wc&ilXUQ^A!(U6xt`P;sPV=2t6>4#lA0 z$jF5IxP*;kmIZlzB~y2La2;g&Cx079Z_Ep+Jl~2+RVa?)w^@j_B`#MVbzX~a4ev7T z$}lDDN+pfkT;w-yEMArfI!7fGJCjTn6rYkMqw-4eY~-D-qfi5=b-1U=U!Q7|Q8d?n zTe&$j%aWXrKh?7?AOiVPyj&*Jqpeb0q4qj0kX~5Nm$)=T`Q|{X^r8cq;I7!?Xx@&E z+yto~!;Q{A%=1l$ORzJ0rlcc_Od!!eG<|-w^8Vc3jGj+n%xf~<0=fG*gsr*hsSL`Q z8W}RIR>KC-PN|ofl{HuGN8h1`q+KM~8C;Sf==3Aa?VRt9Lc%%pQXPi+6`&-!%@xCa z?c33`utmp!?-i3nw?dPVm{L#zi??4R4mR><+vsCVV^m;k@t3!$H|NyvpK`K_UkD^@ z{PaRGQCRC{r(O90aS~*3PdW~Ksl@6k-dYTbcU&q|A93C)HJ^Qv_N+BL4r1F$<7J76 z*!8}GRnrY*`6zy_GbO{gBQe=Dw1tf8_w}FA_FT{pQXy z9Z_x-78alH&Qz)Ox!~Zq>hYa#=vCaXR*9^L$m^hZwz6$``2H#fyVmFdpQ_F$4!`zz zp4BeuTIp8zwbq-c3+FO?_BsG-)Qpjlap$m@2$6BA6WTRO(c0Z=HtG2N>~ZvA5lnUB zn-0ZodC>L>S$-5ry_DJLW`gS1m?Uw5I1qxH9yn~I$1!P*8sRbDXC@PL2rk=Oay&5o zA>|=tVGdy;SXl)QJD9$R8i0SZL5Rbyubx1xniJeHMy;DaIw!ITjeNmAGmWH}_JCMu zFXd2If!sAPR*4tddtPW>e!#1;H=kK94c|Q&?Iog$d+utR<8o;hebkJ$E>GFl0&nr* zGBM_If)6_p8=N(p!QU<3uhu-s(O&yRAW=R8dUC(kXB7-`l^85btfpHSxmmuAu9e+V z>k-wA^Eg9nT=hmGoLwgf(bY9?D|n&TRU&2;FhFE52!&87=0hYPUE~9s2$(pf>D7;K zfKx{ba^$k}ZeAj~FLy+CsE8w+!zvZ7fJv@mY5BGVj+d^ks2;0<7(K_Ho*-_+7IGi& zLJff&LD@Ku<0kps;0{%$%}|kbm#-vM{udJ zwRgbcCR*j4+rEizc6{ErRoz?x#A{e(?41dwnoypyuEj4sspY|fD6pmR~!u6@Jm;& zA?SZ2N2MxGlm*AC*;@JQ6K53uSh=}f9V)U_Ds`~VTc0p6*AX%IC+A^m*ZzrLZPLCj@&ac$n|V`S?cJO4 z^v>fh0||GQ7trp<{G0o0arjOwHnof0;GsbCp>dKd7jneazAtd)+whqDE-k;S3SKR^ z9wy7sia`5VFPGXD54m(a<};aY8Ns*C#J^mXr}rQT7M?G{N4rwxn#e+QRA8XRUj6P? z*SaxRp2f0Io>8Ah44SZS-~R%X9xUm}!qW zh#OuT89+$k$* zvAm~o@g_hxXSTgB6(u}i%TO!5cj3Z!sdqhJM4S({CuDYpd6C0=N|_oG`9n5oEz!bR zFu+Lt#cOM7K$=lJf4EzU;?ApX@EPK<9Q{C<*ZA{;5LA}_ROjxniW7I(zh&QEKl`dF zrD~aD>=pkIre`@7ZYF4Nblp^RltEanmbc{FS`iHw;RkwJ`}soKqt}M4w<70yV@h$( zl6@JlD4qz?^Siq9&0+m*S15T|JLnnkIChiIjg&_p9<+bLTn?od7vOoM+NbJZ(Rf4$ zW88*@fk9*e?Y>a5^itu^{px$xn+vM>dMVQiAQTyEH68Q~YT+R5SuHzzNb*~qcXS@o zeT@PMDQCR@JFBO;?WQtLuD-x`(M?mz4;@dzlS?)?@$uy=`BIw2uX<`!w2LS0Y=@k^ z#>Z`pf6nEZ*XNrJWM;D+sd#%|;eAxH^V`PZ2pou~IJoI*CU^_&+mnntZa}AjMMoIa zbY%X%8O}VlzauqFFSFN~rY$qz(u*u@j_L0g;5mRd;!yvA^IGj^7xnMYt({M!1r~wl z2T|!Uq30L|5~W4{e-3OJqxSv4IZ9plU_EyrI~v)oUEHgvxJw~?c*KTRY_VJ>Ful9p zF;%o&=E$v6bxUyNX>_w^4wNMBj{CB~s7Q>d#xZSl^xYV}PdI~w+98pQse#v`yJ5fJ z0nImmJCi5b@6Ou(K!kEt1of7-^V#<3+_zbi@aqo|2SOh$%tcNx!nkOX{qIz_QydnXEG_E3W>X@lwQ^Qi}Zb zq4qW6fPu;1649^Sab~hz0!&xF=oBq}*Xl2}jfO2R#&NlLI>?d6uHCTh3&vbeez_;1 zqokli%^cL^&L12(f7w|ZdF8K=XQJf1F(uApKG>TlU@%&N&~H2`ujly_CO0=+8UgYO zX&_c+Qdwm$=A?|V%)G#P3N|Q8dssUTIv)!1jFTSwVmW1tJa|WGO+NiQLfxc~J~|cF zLO9WPsQV7La9PoV9H_Q)o*a6c0SvShcBY+{rC+tAgfhZ{@^U>IaTr*@q`vg&&e}st zdaDK8D=iztj2N^$Cxf|ExGk844!@f8m^^Vphc%q0BZrYbett}wFQ{hLzCvMK-m}Ff zf&5yV-<#tEk_AGJU! zqZL%CYI#051a|ib1^2(qZ^Aiu-ebCcrXet{|Jx2ZtSqWUh}~?Bv4Y{;Xr+76X1^(q zQ_cAyn}Li>mz^#wB0d?d2aOMqg@2p)h86L!zd@Pt1RqD|6EbU7e*Rx_?X#t1z zWN|+`ap9wN-%Rf!alQJoco%1?9vIIW!opB#92(_f5^uA#{}{dTA_w!>f;%kH>+mX6ts0z6L=N6Gy&iWmi2QQrJ&~(>v+^Bc`GO^R2 z#w0S1edGKznwjyun!PPVp6i*kwVCCoy`RQMhca_s8N%Qi$;TuhkX~UGQp@Lw%48ir zcg9DzDL5s3cXwS%%b-#vByU>6fPv*{D<;IBqt>O4Bblt4hcPtnUbA^UiAL!2JGXI; zCjn{ZQuYw5($%JNKl+MQwd1wF0@xP+8UdEwwb(fS0f2r8f~-+W$D0a5+@5`T2=B@gTU zyN6BVYc=Q-5%$v$fe9rvC3Yqmi zi56GaavOAP8OC14=1XB%hTL}MmwU-?khgoew_BgHNyk=W#+`GzGv!p{Y;a@EgK;Si z$6~lS*LE1UbiyB0XH~=aDG_-Zn#!DAbpzgr5=}B!PKG-JnSSd8*XffQj5wLv=D__@ z{;6=FLAUFHFEwvXADF10p1 zeb1zrEXy(xg1s*T@xIXYl6#+8ZbYGlv#UqJ`74%_E4TM8!QHY)H{$m9S@2i3LK}@0 z#h)cU4|$Hgd4`Zs$-$%u{I_xpRCKGte6x6J*T#rEKzuvbUr+w&tV zHzYE05rVfTB@5?@K^ZC?mV)AUh6A}g$XwqqAHVcD{%7DZqu)R+rtHg7=ct%-GAL5z z6N11fBP2LDeKME`&=H4XI+VftuDPW5ZBP4XnHqE%_v@3O;D_noM}*vYGU8NmfAYEFWnPFbldb0?x{_bSISm{hY$qa*BhX&3i9dhh zpDoV0PMC0P{kzTLTbus&ExylN24Qk}3k5i4;tlpqHL| zjk~m!Jn|X~fmMU42%eEFsT;4erbSO7)XH61%dag-@pgkk*KeyMkB9*<)DX@d*e% zmLqoq>l(tYzaOu>eBotgxMf}o3pM(bAjHTx>*pu#%Ooz^WU>+3STjHiYs|vta|8W& zX2#ocjS{4Q%(1PLynYQa;@Y$zWLnd(d{xU3OYYv=MlwK=-$`1&U3Ev@T|ZZ8(*~@z zXRb3p&*9M2rP&32qCyK>38O-VJjwd6rv8gGjOYJS6C#mtvX9-e$VeQYiD)tD%xpFoz{bXzOIzl%CnDM3o zF0?Lu4ww{RZ$);YLnL>b$ zxS?Q6SHY*B%bd|F8t_J@`xjY->8BsPScqff?hT2Vx=x} z?k?o#kVVHhp^(kccgw~-6Gtfv3HjRov(`rw?gFWCI;AAmi)~t7gvlyNhUm3`NvFm_O3BATcpzvC+eIM3!c#?I3m(!KWS+4Bmku^FlqiYtzXN`brY* zRoAJE27`^mHxa$A0vEx>UFT@e@)g7a3~1+8y>@2~@0hFj&u4Z;1_)$oMwA7Wmv>F5 zk#+k90wfCz&vgkXQRs)>s7QhoS5D_YGN0@zbSfUG|hiluZl zXnAZEG)=%D0_cVep~JoEXhb49Lp7=TL4fhZR)qD)ggf`v;&m17&A;qY0XBA#9ck@m zhPuh3r+L`;2~M}w%v!Ba$5f{(=lLv^Wh6zBZQBLb z|G>lN|7Jc#4E0R6zr$BBFdQg+LyP(%d)z((ip!q-lD$XjQF=+6O9hjQw<*iESOuMy zH9g4oSn03R~`Jlq>!5i!wQ<6%@LVl*gt+oyj7v&8#rpzpby!Cxb|; z)-fBQVW7riDxbU=8sQB0=h8b0gPfW#u5sY9ombYd1?n#4F;`JY@`%_XboBCno#*4< za2$$HWvv`92mga5l1n{iiFUf3aZnm$2%6@&>w2NV&2qT8fL{tjb2Z>B=hiP zL(`9JDP6Sr*UD|0m@!Fd{AddU>+Rim zxqZCZ$UihHKtI918V~+gT$2nk5mzu#f7oHG+g80yL_(JqB2`QL20bjdS<-l18Iw_{ zN%v#7!++5S{|^kqf4$`7unIe@RI_Z=tSFq&8fRZQ6kpZw1pgP=r%zp(l+&q?P{83~ zp{6L0$wrC#cTr%>kXTi9Pq9$)`p(Yk_hgplA3u~KZXBPGX&M>P4(wubg!2$X&+&oY zspZ$T`YFp>ubllEfaJl$&&2#Ux@Q2a!V1OFOTUxk+zz+FvuDU$c=AJwP&eA58>!*# z9bB+%jV*%N%-}KGC^Q8pZm_h1uF;5TYdaswZ{H95=H0@R6ThT`gC`t6U~kF<>gIiW zM;Kr)*N@Ftwy$n76zr;IxM);jq9p(E{`z+^4f*ec+uaL4qIe$U8vbO=UWHs)pV&AP zBM6)*^P)KoQsEa3aQQ+G#fFMDWh47H)@PHVC4#{6D+VC;qJE-85K!tm9`0XGpQ99r z2M6tt-fc+J52edcEzPWH2^<&|xeslGhNn$>zGu)GBi-qR z2xD=mSS5eBU#k4*uox6Y;uKpPLH*f!epoD9u!uQU_YGZ&O=LeDjaWj~uux6s(C0K) z&Swz2!HH>iONy6F6d4cf-1)7;t2p*bV z0j6ScBww59X?F!E5o;VImI-MBz4B^FBWQl}-}#UEZs8O5;$P&2Y`_K77yaW26U+f= zTypc>d})#)OeRCS&oZ=1>lQaHCtCS%0)!v$}^hhgWGvf2_p|=8HDxM9deRz_D=ZSwt7ZRAcvTeX*|I4fTC_>}Y+v^W-jjobz+@PS4T~b@ z$?0qXvoE3J_1vIlb)tR)lSM(QA?4WxoKBrc{1wlli1*7n}J# zU<(VJfy@~PYuUjvi~euk;AIrfV{ya1l3HRHpfCJ$_)OX008{IAoRVNr12X^DCBQ~K z2n=)Pcenl^&1@1u-5GltL7n*{aX!8S3225T&$Qckk}Hmg3K=wGk?AK21x1IsG&a7u zwN}1@cW1A1-v#J0v(nwu7!6ejnI-NDZ^nOgE-DcPw=bd-pFK|9jZ_{qFh<6mylhh< z;=YUiMLDbJYjh=r?Y=_R{+5B+FjArf2qOht?BBjmr}8E^*Gw& zD_C`Jb6HVeKRCa+fVO=3_7`$p6Rp)-u&@NOW=CU4K6oJ*ijw_ERF4=gjBh*t{Qqcs z&#LM=A9^U=Kp)>;bQSSSPSci?E_jTqMx^(4JZ#_L(8nl((|7MTtWpoS5 z7uWmzQ$MuL=rR1p^LG-&4pY#boTNt6R+mTrp4TJ)p4h8<{7YUxdYugu%B}ed7|@n1 z<;Hhji7}9mql@9f<<4&li}63}(Kvo&%i)lz4VrA(P=RGUuqo1j6F~iXQs}xPF*i~a z5xti$QS^bS|C*8_1A5&KMTEy7mRwRfQ5F(w=wZOPSX>hpmetlK8~TSBm^-*3cAwry z($bKffzsCG{m1Q8J3A`p&d~f>c+7|{yPR?utI~(M=UoMs-uE9p(uD>V%)45Xd|;Yn zfv%`ET1B2r-tR2Y2=+PdC2>i96jtBOd~GKsIQUGM)uQh_F(}Pq2pXPq*R{;1XSCwG zzkLgt`Ek&UkrEZFIHy`Y)B{U8_VXXa-GAHp@UOUpp6ws~FD8vcaIguZ{u#n%BFq7U zYjh|g4}AjQnkPcGt*s4Rc}HS2Ix^?{_`wI7e89>}XlrXj09?0`W`6nj$rJ0v0e-M7 z{q8gkAg!YEA7EpmE6~f5V>UN82U^XbHRcV&<;$lC;PYCLk+MC|G9kzE3NWH`2>wE6!0M=(KM9_DoC!l?6w;j%J-BiqZ`gBA_fXFHQW0Dfea zE*$l^@MD4wGxGhIW~vVZR8*^zsXy?;e06QD!Pe$yh5PAFC^kz-O3r#;jgnJURYijO zq}pLFxkkfTP}^jPX!-{AkNY@{)O=Rcfyu)lq^OtOYXuLsdjVjDBFr3mnyPvWj>w6^ zh()V8)9l{$_6HnEO6i*46_SEM_T=M|-Jhn21P}oO^4|dB*IOppPZN2OV~@vyJHKi$ zSeOeY&{=40=mbC7AJzlxMKm* zl@Fme|0%HaIq+kCKj^{g`qA(|hNbT;wp*K6T1v+`eV)8f)_*Ro=pmi+b}VBObT#ZQ zSCT*>c>{Yc1w`FYJaacV9@N>;3cZ4i4B|WFxF%awT|L|TGP*O8-*TWjoYyo8==U!Y zKIgA-b91-wqfZs|%Pc`8^)nQ~=2V%2)E3RVQq>Y*9AdI|r3Ww}2x~ zR^nI~D0otKxSMQ917#ZgQ>WxVuxl_%L&46*Nh8q3#pS_fgpgepdU^f2z*)ETbf^}+t2XDO;ffd>UYtCM`7mxJpm&3ERoJ;eWT)rCzcb;*7$M>hKAU9BN?Kt+!yAQpk@p07Eg@;pusWzo9Z7%d5gGzH~&ND%Vc}<7Z zA0|8ju|F%Pj6LPbM8(cG{rB?*34J8D*|Uwk8WeJUDZ&(MOdj16d~XfVldc+PbV znzJH!j32`=ci$qJ|#UXeb_BqJ9m z>8D;}%oBkCD-Uz-6rsE1&>lAAt!L#JA{st9I6l|`5YZYW{PHt}UOiEVO}hcoipkO; zOz-^s!WjK1IYpgz*V}Xhgue+c{tyHA)D|xtvOeNQ0$@>*HefK{R14joVjhI@Em6W7 zpqo5f{^kVE<^>VQAG_-_e{6dYW%U3h5*g-d-{ z{$1#sS>GNHfb}x$$*Bj`_GGq!C(FR8*j}X!_zZ|8BqJX|^CwxS>Rs9r%oRu? zxxFt3M$EEe*>A)H7I#1H9!1NVy86)(CZ@PQA4y=i9G9j~h&JQ8JiaF-Cjd3UI3-Ox z2{`!o6rO($s2Y_ZYt4eQgGKrI4^Ci0&5vW^q{7i5bd&DeLCYW>dIt;)3?1oOxBaMY zR`-7e9c{kjRM(;&Ld!&L5bE2Mnxn(Rr^D8;F=;dxXwc;EA9X|c_uu%+917xDrXMhL zzy2-w#>fF?KuR>Q9Z8RtFfmqW_UaP_p zmg(W%gMN<&_BOf~V`6fa-+_A(f@Yt@I|!oJw;%x60ghHe`GDD{YHXoht{J8|!C8T) zfDpJMnh4gnJ`9d7+o)hhZlb{jajAjZ3ylnAbgKlNqQvd(*HC6+78LC7{~8;~8PSxb zno5wNI@wtN*yCpmDD&7Cv0;{}(1j}31!x3qY*5a$=vyFIUwaZ09i87GYWK&g{ux)@ zGw$!A?gT?=xByBVj&IG|-~avZXMw+;2Ui({wLM=2*yM@$QXC=tzLItN3JMCLe<2f^ zN6P7g`@1hA1NB8$SSA$@7oC?p5pY+Da1C5>P`YqI2`X~$rWYYiFV;|G8*?&)5Mm3w z{;Q_f{|Nn#--=-VQ)BG^<~{$n-tre?V!mDlzXesrKt_O&h{TJVrg%`GSm{UOVx*QJFwsI(+mumXa^~{4LIM1Za?rVTQ+r&Lbx2O6vy@$Aw2m=w}$QK-OYt$ zkUDkv>JRwmy?%7CV(_i1ni@k;ScT?`j_J0z&Rjz!=)AcH0D^#+SP>cnJ5tqng^%{v zvU-g^L5PKklJ82Ob-(ji=bKy_uu>(ngy@leKp#VK^jDfk^yJg)ot?6 zO~?ztFz{5^T7%{_7wt^?f0)OWLf$V_vsAqH5S*Mo%%}LOa0L^Sa?Ix`#e+y=TKZAx zUCrk8U6={`9f4oiZ*(eYYNxr>{EjTW2Poj* znCtG&ZV^eIn3!-hG!yt-2;zAtK-?O%MPt&8l>vaw?{M-HhG3#1;*>7kdO}MF&#=7DseD`ayk0=perB-8Y|SG>YHx3`4hBuztgocd~~P;fA$1=&vKsq#D=+sizF0Rp2&+L!Yx4(8X)_M4W4F-nMwPosANCj13*Vgpe1 zJ(i}r`a7)UquAKk;CS01yL-Xh786oVyE6&!rRq_ouoz*C!h7@C zyD%#q8t}=b+d-5FzEmBn92hNzqQNxyy24!(SQ@~GzoGw<9Q-9f*FwJonCEK<<8snQ zVq=mH0^oeS$ie!PlEYnOE;ybr%DXuU(Ut zjFa!ybTE$U-&`6_htBmmK)H4KOV-^QaP~lM_JSfdrvChKy2c1)WF?S!?0}H~K(T*+ z6fJ_Ldr>z0$mf=zv-oh;k`Ou|JL}j&h7k_wU2soVq(Qe?;rBP$T$4co;q_KA`%!m_ zc%Pe878hF6(dU||*YF%zUv1%AshS|uY*k6b3ovz} zpLfbRqmCZ4&GUB^pdq9q_{xJExE~bjWc4rDAMQ-8<-o9}oy~xE?;gVv4Iqb4Ve~{H z--Xd;!KDsJWzU^G8wbWnq1*zx-?0FAv{r2%@hI=_MV;oictOFYQK(Q8K&ON{*H|$; z;AGXboOiy4KDzY9hpva?)}P7QhV(Xsg6)L{_} zaj2iMf@3x*txi}NWD*ax?;kqg@XLj8E0ZWY1`4ue_nS+c(wNO>_9;_ zcqgD$VJ~0RP$ymnsLsN`Fcv(1UHylg>?dw{9i1;Q?|VTYDtkqz8E+So%!!%)MET1z zrVbd#l`4whc-TOovh%%txWW~3A!*>Rk?9zKov7nn8LLXuRbsLI42=$H)E4g<9M_t7 z)2KNp&cnzz7U(+x{BzyvBJk#l5H02gFqq-z$I0Z#EVn@iGY$^UwJTSua^D|W&^I z=Ki}AA&;yeCZZ;XB7A_q>wSjlufVDGl{n-#zR1qX&em|c=Svw2M_L|1mf8+`Ouc~s zIy+}SQMKk7tHC#dGR-xpDnpuTsZl_G<%-1U=xAEt`2EJ{+gcI4rd@E?SEOx+5vTmd zKc`JQ;eLz3$HQiiwt@`zPZ8Z+;4sOt!%!RvY3ww}kUWO8GY2J4z+^NEUAjgd zqrC)(v^WS(w!!UdG>{J2OQO z^LORUFYtZfSY&=YMgXA{8d6n3KY7^8%GxqK&ZxIsu&)&X_d&z+`>DJrVTbR)f7|&Z z>uvX7AC^vBp~AwHRt82|d>g@W{6O|MYhWvV2Y@cH1_BhAGV9D(Cl!=+PS0msPCdM? znj^(K^g7OdYcVx2Fwn6dMFunNUqL$_@x&#hjDbv#!U4or+OtiM9s)b0(MEZEhKzX} zb?)7(Z~IM(n&M*a1Vdhw=t<|SjAm?`i-XCKt0h79_3qs};8(k0Dw`FMQpN*6DMk_7K5l+^zGqi)x<+y1TG7%GxtRkH8}5P;}%?LK-`5h z-y+B_Tu5$hZPiHw-Q(QjQm;z@%#!W^=b-W7B{yg*`TLhnOkT&rC|yN!9Khq~;;LkS zgAPQDI?i$Z8h-u1)*Sz}^0N%tBsF2n)M59On3=Ad5MUHDU zF>*kGfTBCJ|DAv*afUpm2hLftKua-@V}Wh@3hL^S$7#axxkMqG<&nEU#zIg2>mu@P zFCZD9*W;pqRV^H<{5LukQYr{+P;GFO5f^_8EyQRy(e`m?88X5NaWf<126T4Pou#F1 zmi&Z~t3RgQVl(bx-M?@&g^5`|E-b=L|Le;Ar&U4WxXa@YxmK=O?;iro2~L^=FxjcI zLV`7b4W4KBrX|X1H!BUivoLwIcoS1@dz|kf|9fH-==N1#G{FgF1yBDQ_CQCGttq;7 z_qLX{Y^3145q5h4LQU}RLNgWd`cR4BWvh(hrTjD6>0UBrG{n&f6I>+%ku@6 z)m$YzAT$VauK~o}8yNYj ztV{_#=pnjmdEy|B^o5) zl68Rp0g{r3@4dMAbB!;dQ{JkU)LsEdndj^f)_Wgx3=csn@SY5Od_9Q*^+dn3gro0V zpg4^o4clsqU}sl4m$wwa&0h*bWYF4kIKL%R>Hg{iI9f;pd`cDMQX`X-IK}&|$%@ID zKw4>(K9B5!T;HPp+1*5<_Tq3k@YV z8ZN!a5QLApVK#C{z0m3u;45qlBO~JoKsK-uEDX%v`vNrsN?sEhI3{xvJ{BG?P+e!e ze0(*HRwd&qrMhosH!0f(g#V!JWguO&=w12c}f8E6&_}LZx2027tV?3;sO_k zj>Z{-REO{N@+GKayo2!htm5q{7~Gg|V%HB>2A6vAwcRbzXU{Idc|;dr$u8uY$o6i+ zsHN|7yzF<`x44suG>=F8R#hh_ z$mtxHu`tu@TX-&49=yLKAV4i5B4Y229ot|z(|!etkYWr$7>tpT5qhKnv|Ln_zJbNr zE0J5xbrF@8mhw4n-vES69CqLRMboF5+&N@wDq(NusXCxvJO9ft;Xm3h_XIk{ckFrs zD-PHB^^+K>J@!m}t@L1Q@G;FiB_MfTINWKFJG8I#p{-0>ib~8H^gk92-VAt&qdXZM zK&YnNMzHwhy`{2oKpvuioH!v@%>ihU?(5@oT4ZnjCg31C7-))!1J&%SN}H+}p_^j* z9=Jz-I6CSLxy~poGL&vOA)=T=N`iV2*k9scJL|JPRr@AT5@pu;yNlg{wTcvRqK53T zW_h&I`uEGm@HYUzFNuht^A6GbcG}I+90ZPJ`hY!N=HXCET&IEg>V$L$lA?06MF0eW z-4v50pk%gKxeN9*GC!Zfnhn6+5dax#>KL%U`Sj28gGIckV*rcSULN_0fBLjo(&Miu zIUe1)gYl;oCdgGyEg~8PL&C>@?NkKS7g_rAKAe!M!9>Iu$DLLEzMN~2NV>zQIU}WW zq-64KNRY@eQ; z{bBlbdOeFXAlwW;YeQxYv+^jQUf2pdSZI!rnj0Sort%M3&fb73bik!fccorHD>kf8 zVnuQGflN`(H@OHk41{-m8v3S^QJaB*qM|}hyX2Q8eQy}pfoc{SPBr#{09+2PxhQI|5XO+xA z>vN)9tm~p3u12BNPssm3NS+K-UX|pKXh9O_l$u&UP5;{3S|#dl zoe%6auqA3&a|}8OpdeBSE(&D$NW|~m)9uaD>os}lY$+G9$>hENe%PrOy1FO)RQ=#!i?Sd& z3;p778A+<-i3=Al7U#vXm z7X^eRR*o4kF$VsOudiP$wM|)&jp54~_v1@H(+H~2*Xrs>UvZOqS3!a2o}?tM0!vt~ zSeyL8sN~+hz&zut1;e=#RZvoK<7fLR2Ea~k#1`#Ax>SU@owptRoj`y!VdU?*v&IQJ= ze(Bs{^GHZY$Q6Sjc;>J5P|<6uriO;oFumUS3Ckt?^4B`wT7! zA_E-3hH8}Bc^;mfqnFRWkMW;56Lsmzl~Z+fErB0DYCjgVv3U#=PAfaBh`v7mIyy0J zw4&_o_3nav{hD|xKSK1YW?0O63DW=!8GOBX61%L6VzRsOh;0|KL_m`Ht6WvowL_xu z6EIP1XX$pfJmZ<4{rwk!CrebzXBTG(k{IvQ=l)?i#k4qh)cs|lbZkZiCydojO~{1d zOU2l(--Eyg;U)vOV{2d`gRtuP_U%bWsP61^A@`~kk3`KS?kawYr(`Cv^~f2#?K&r9 zw|WvrhTnu#0g8HO6}~H+I>({_*CnB@PGd4$>Id9>jMYp#%=#g7HpTom+6zuAEpkBslIwWN1`5_rX>(;0$pB^wg^PgQsza|m!C+3GXUnj#DzLP$5QV5rP^@J< zh7+HD=JElFL;MlFM77q_n9?Hl4?7%(dW$A85l8lg3hBr|1Xo_io$B*iKEH|}KVc5L zZ#CO-t-lza@H4ot-fv|<@xMOY=LeqXnMD~`_41`fb`S-ZF9^<$5qQetP&qX8b3z1b zWat11irjBZ;ejZ4`R`+8K04TfeiT45g|DE3TMn4d46sZ|7HV9O5zFNvMk;_sbpf19 zNlUjiL9bL`-E%&(5mZI%WP!RrV0`r=8zSItL?MqDnVInhMspm2yVdFx&G~F6|0&OY)kVb?;SKvl3^YKwaR@u^4i63~RM9MZV!#pwD@=(#jNhi{)F2rf};G zAt4%K;@;bD@o;g!fZ_Ij6BH0&;N~U=u+CMmglBGxg_*2ZBz07S2YDCv0@K#c{r$>4 z?E4TM*#1Tbc`zpoX1p5l6N8)&&7^>jkCFMv^%|-zR+C-nS^@N89wTtGiAw3TFjg8Y z$sMqco+0!mAA%UCXKLzopj148;io&=8$KFYSn%`pB{Ui=JO^Oi$$tYXS0_>xePGFT z_P19gIa;9j4kHUL1xc9!M?**_qRz{~!h#UMaEhw6sTO(28whFmTBkQR^gCN$Fx{CL z)72C-l^fK=@qURXB_w#q$stU|c(4qigNC?7Kyi6?kcCx3oggqODoS?{c+F9;mER9= zsl;NXa4)64FH!OaU8)i$Rkd=&@LaZU`NyG+|tTAcmP{0BiPv zvJV%uWyd@N%26&!LGpSFltD6ph(nR~YrCWaR#v67lc+Z8N#tOIqS}{ASE1h&xqnni zJ7X9bQz(GP)0wTM^6X41?yR8UrIlH1ZzYPv#eFP&S)^RY!h-9U4kydg`a?Dspq58~ zTJ24vwfkx@Sx@RM{(5^kR@x~cq3j3CueP?jMEmOZEvHaK)7z^oh=E7VqB>+hcRfX` zj23zgdVp=SSsd^NeqbEg-&x!K6JZJ?^$jq0Aai&5VEPcHFc!~Pe|`KhwF%Bbj7;J+ zD>*u9I__!0m}pGx%6T^>X&=}bBa^>(=tLa7pd?J783p(agYvCd7y@@u-X&OI`-QUI zVe&#XymmTRD-W$!oeabNRD*Yk zy}vP@vPy?DN7dM$DFh+T>7y`p z;hDO&pDx1u$0~Y1+2+cbQ<(DVYV6_co)2!aO|f#r>S?!k{9c~NmnO%&Ht&DKwX-2c z5+*HoRMbAvs;;3C+i8H(Bvylf1wjS3qN%AVzV!2Ftzv6np8r0MWK#wPd%wScs2*A; zTu`9h{uOyp_$s~B*m=!uESZ%MI@df+VfKrbrpgb~VUd!f&!0cbr>XP%^uIZ*f&0@Vr>j={JEWfC*;&diC>0cG1VrW;j^PmTpQUuQ76+AF?BbRq>m?!UKM)1 zTs~b0JH^e%$ER+5X?}tL^ZIb$$4gpDHIejE#M^87*3hw-k0kK#B!J?*!O|I+nejh< z{K#j!NP`)fOV=9qL3hW*#B-~qp^NBnZomT9X&YQ|PMhs-n?u_gE~fSC1BwR6y`#ra z`$AJLG?#*6K{YTmGA0jfBi=|6X5JI-xuyJZ%@M=UO&yq55dP8u`SjzW3k()Ke-blh zaUBzM@)KVFrOn2}SuruNcc7op+!G4jO16eSS#4}=_`Bc?$}iwx$*8GWwqyE^{u+qWSLxePHJ3&FyI z0olaBLBz3cL8Xu$+$iMYuQ%tZ&a){$TTy0u6y*zH9dc{O?NQHg?pMJQ{d9b0m+aT4 zvGDNl28!*@LIW9BA(4EN07vN#VjXc;31^;xM0Da$^x8hjZ-}SGEL-n>=-~C(I^%i` zZ(}&}+z;>`$=)X~hGH*biDrC|Zr1apgRO$VsBzv5zPBO~Z6txM|HE;I3nJTFNNC3ahb5{Z`Ro`JFxaQRJL$6iRHuYw-QAlr6Vk*} zAWCrux(r$~b?^Q7G2!^=2)uNrb|o$>-S}L3nIt6bP4DEBJ4YIOb)_CWi76g9`!u<$ zc4gF!+7CDXu*BoX4~G{UQ}Yw9Ks=qev0#7?XmIx5(BN@`M}|y}K?R}$%DwVHQ-Y*8 z%Bf(`)bF}H2F&DBD`4LFKQG<&Efb{Qy{XOpHnIxGEvAP`1kpskr$?FFxQ`qKhY*H4 z3~oWFHCq}IhME!vu0qRcBdpgO8$;^-YdLAr)2HnvDFs5(5`0EJwwMB>ct)p@>67jZ z=dN9=drfNFJZ(y8Lfe%O;-eCH5z%Ij~ku zbiT89R*6zSSSJR)Y<7Dv!$%n}NY^f;uMV~aw2oM%e-D*nTwYymFL}&W7S9rOnRE11 z@RQ)c$bG_(AHS7M{%n3oprm9ANboKbE74Wt-b3yvwn*Q1~EGnv*R{f4HVox-w13dyQuPPm> zuf%57VLv;o2Kz>*uPM~IdXg+Lh<(J$RK|9|y9XQA(DNTx5XzB54HK-1&YYzKXmGb6 zE2@iFI-zyIgY*blW^d*laU+3a9!h#XTYM0AmeAz zAT}U0#U)<|#6NaGQ~cwX!U+5n|CKc`c(t)F7UO_;m zdRE}?h5eJfKtK7vShW8^#(Y+G--K)SWS7_{23dsnIww6@?!Ig5K?uis{o(-VCGWeM zt=Dp5?p!as#1?+^>A||!M3&!turO;_-Sf%{dtQwipusMhvuJ(CD;MU@v^9V{>EFh zQWU6UQm2_LlRl7{#9%&f9JvAP99*}YVuz58dlxj|uP8qF$nQW6MHuu7HKbLVE4*~0 z^CJ(Lug&Pb@VouqlG@VnsLf>I&^-(3+U(2IFl18|qJudq5+UFGGR;PH2&Z`|Vc>VU z4)e^OfjpO0Ej~OK&{M)O_4HH`q=~^_7*AJb8LIffPI%2=?j19S%=vI;?i5(IWF!`Ar0Lk%+Ze38D~1+UwO$_cz>@3lzJb7*>y zRo=TCzu2$e6@TSWxrC?twPn4yE$#mx7Vo?R;0!*X>)DwcFhm?>v{k%3hfj*iM;B zju|KX89hJ3f2EuArmgU)ASJr8!>lu4{L4$Ji1lyw$TBZg=es?HdPVZ%f&GO}%a_=@ zIXPeKyuWwgi#aNMy~%b8LrO;x0B@ocGD}Qr9H9F{&&NzSGegx|EtJl8X+)Xhc|`qO zk8$D=Z&;|4x))TcZ2 zTGLubH~n&k;tl76$&I`{>y}de-?JJe$;^HOzl zg1xh=yr)h^)x2d(Z(SShWbL-v``vy;9=7XSHQuAns+Y5N+HDn8)7`eDu#l|?Y&|c( z5`Vo1N-^@{mT$`jDJ`A1IlD8twkUPyH=iw_tyA~S8n^1S!D z`B0P3g8QJ^PASpA?p}qSqh-&QU*D zWEQnSKj7dX7P?P20Kc)?bL2xLiQcM}eKNa1hCB0S*uw8;iIQHA>F3i4?ph_&x;lnZ zwCZkFH4Hz9iQdcw3Yhh93#$ni{Z<=U)o7rwE;T#_|DBZ^af|0}gUtD#&)-mqR?d!& zRq4Za1$ntkn|;>B2R2S`Jvu8teyDSu_W2M4v-lOYZmVS2EC4wAdINd2Y6~)DT;Co= zxKB?%z_?uY4A8lAM8CY5=JD$H)i~)8$#9`p--o=ZG0rMk)z5K z%D29Lu{^#S&29)Dv35_Z{PITXn^!l#l_yAA6J8J?fHdN~(D~}kg6)K_;rvcK(2M5} z!*Rac@2sa3wqR?HF1nOhW~^pAvgiFoj)VK;@0T*}3M{v_Ypl&L?nSZ%?Bek7oRNv< zJV(Fbx^nRATJNH}dhRSq2f=d9{85ujcDB!mGGXp@t0QM58+r8T5$gUhq?D8{5q3nTX7S_H0&hbtDO^ zy<%TECbF~(}b*2-xix=NKTpicB$E2MP;`5Ia@>n-e^uDMaSx_oFgY*y~`gn zb>Z{v!VT7X^Z6}qm4(uBIJu&;6t_h$r{gA^8!rD-t)f9ybfWCeQ-0DUt?MpbL+3Ea zrNL}M>hAo&%^jJ<28B13v*v*V2Uok5=QocCt-r#d+)pRXb!Z}|oC*3bBm{1*FeW-) zzBE{XpQq$MUEeRcQCdl7l5%Zo(|nrvDJay`AhlPXu!DWSILM_nos&IKciE@esFbVNwk=z-;x^}k!& zLupXiGwJ(omr6vWlhbZiT#E4wfP2dBv}y)}83JyT0l8LX%Kj;6boIg|8%2!>BbRG% zZoc0E18oM~!g~zqht5aF=l1svbXG&Vb&-wwTfcs(Uo+Q@4k0*KuR9jMQkd!O=T}uf ztQ2Ql)K$pU^a;83vsK&8&%a8pUvz6J<$%`+PBXS%Vo=|*e8_gZ32M|#!|s;Y|Lnl!+Zm&Y?47vDd~iWbW3noYgt~y&h-2PkV)t5Nu^XJ<=(`?x z_*1_mud`Du2pQT@!?=9EPpW>8*QKd5PR?OxiqfY(ovgi|7=!T|PpfopdCXkB=u%yE z;`=AE48fvvV?`g{d?LeOX40Z#(nd~K9W`P9I>UV8GJOGpvnhyFthu}>w8^e!dj7GF zE1d0ym{iF#$QB}R+hUQ>iHO1g#+5ELJyONn=!tdgG*N*u0#mlY-Esl zVZ9zG*^${WL#CQb&y5IkwdXA~ODu>k4jGboi+`D8jn~W=n(XkXuILdN92g9=;KxDW zNchh|L0hu5)eAYi96ODc^XbEP61Ika8{W*Yxf50AIwr8me+ob4>z0F@+{OKkghM@3 z;5>M)ofk7cJy@2#$q{;`E9A;K`d!ZC)g#6)I2Uc{XO=+%tLF zbeZR2wEarc^30Q$t?5VID8m8sa}d9yD4{p^zlyqf<*&`(pCjoCv73JMBL>tLD=+k<`K9i|5~SKlI86P!2Z3a@!t z#&WJ^b3|N7z`~fE*a#pA?3s1$;47&7W5Y$mBjdikVm#Q1#n3so@bF2VYF=LFq}J8v zw`k94cGSsDQ2YEzWl2Xek(Ei*PB1anuQOA9xU`0G84D=f8kb2hnG=&IFC;q7RxVC3 z9oS_5IyR1XdRdnc*&q)f>qlWGz$(0H1wImaXS=eJ+ z9bq}Oevz=G5wfCu`7pW)cJA`4EfY}C)Au(wGR~S1dq3QT=ZaIYBYGbMM4- z(~M{h*h*P6_qhn3LwDkfeQ|fi`AYX^kCsWK*s86-1rUhvR32!(?VkR+eO&Lt=6w>cf3Bhn|#BVx1cUy z+-F2URl|KgJ4ZD;uW4YGS|H$*-(b&LtlYQx%J(n4%dQST_a1*Mx5Mwe1Ky)$JY7Xx zC$V^rzC>)%7~xN$#hYo%txY)+2|e@+8v4$w{;lMLq1|UkzRlS-1FQ)cXBeA#KBMtD zRn_80oFbb8zpm6i-Huw$o)SZn`T6-)NZ;T*8$n)PUQdA~uOuOzUta2P)tdvnrbUhv zXXb}de173bTFha?bKoyjR|0N#-Hnx-9*VrAupsaTX*I~j|E`8-?dB%O%ZH!zZXo-$ zC?6l+2pqL895x*){>pnBOvDY3_$LT|!a3gZc0HfguXA`k8O~3LQ%^mC*|3p;^99iy2tTq?+5+f=3-4)cyeLGR%*c@<#^M$ zk79Ce?TUod=a=3sH*6Ojtrqu1>Ki7*1@t_I9EU&MGCLf=DIs}+y0B^@0*xW)@`KfyyZW;Y>gy3MtB1b6x4p8=BP(AC7*u(qC>(U%KSDZm#5eX!G`` z={d`@)YPt%^0#4W;xzTWOb~nM-`SpPxo!qk%T!f6(`A*7=@kS`k35`jo=H_JbAxX2 zF-T$CGN0ge5H%mjV%sHAP`jq8<;B9xMKfz_pazpSKBzEOOt+28#X8zKu1vmseJFHp zZ|mZXIhVoQIlORgbAoEey^AoW{2g@BjBb7wEKnjPb^DpgiFA0JYS@|l5FMvAe7A72 zXKhOp>PlzVC>qIlNSW4EU`8#Ch}B88d?U2=qbp6tw1cN_Atd02!2~6m#RCst_2vZL z%Jk^?04sTSW=quqvNY1)Hr|@^>MY=3Abq}tYrTxkegoNWqs28;PcR&Yx>?g^toNPGmg4lF8UY2D*@ z1+AHSA64%k_8Pwt$AV|!Y_tp4iFPqote}muo6Y(=8$LY< z6|vsJ`wZc-v%%ZS@tZ2|ZH2KKWZr8Zr2Y~uy(mlz=Y;QhZuRN@j-Fd}oCYs?*pu;! zs4vgZuQR#pS#^#|!TVc`d_UL`==*}E(uATVLXKe=Ui6dR+OISqS^9T%_(s_b=#}?V ziWreArmDLg?Ty_8(cpmzJ~(jW4x`W;Ki{O2m%puB8~7$8*U3pMz|BqgJckMfsuI2z zZ(_l&yel_&sWDP-H$=6_>Hu>BceB!a{OS$I9;xRqUVJh9Kw@#717XA!)74ERdh$LS z{Z4*E7M(-ypUc{DW)RgIBX2!juImdGnQGpnyZ_;uA5ay~s@`d}B@B1l&ou;YF6C9_ z>q?G+94;lNBYB4bQR(*T&1@aEce>FLX>>LokCT4&a1M_)engY2oS{mhChxyS_~e^Y zfPy==7%oCmgB%Ih-Fj%*brvHNd4uY+fK8Jn+gmmqllN6DP_Hav=oE>Pck zcL&b3->|MH9CX_Bi{P%9r+YDCKTkwRCqQu3Kl)d=d0bnH-EW#b@+^(h`~jy_G<91% ztCxU)KaKJp80xyf+4lxgqjR~lu%J0C4%pQO&`GTXO48IN$>Ro%PmK6dD= zw;;uA-{>~+kQ?5A$6|?#T=>sj6~Xpr!eU^8^!M$e^t=4-uB>dy4GP}5Q#YVdW`62n za~cz9EUuEsd=$E9+@H&{z3@!2($f#A*fbX8)cvE7^Qymof|B_qbaWMZZez;hy`N-Q zH`qi9IWe}_i|>2|F3^5!#=Z2Ql>MqmlpmEK_16au&;I!Kf~p|0Lt|XGI>*7< z#*jtyr$y~;iNmJu%9viykI_fmhF!nx^riV>$m<;YxfXc`IFO67L$-KLj zl4O*ECOIk#kUXKUkMHv7m1{w8T|OyTDQ)elY@{o2jpco}<}9zDz-WdQn~hdfIeG>D ztpFtIUt6tng(Is%AvhSb1y!~@)BcYyKi&^3CZ$6tOh>2xzRl}h6vI&?c9O!o#>PhV zsep^T)V!txTs{7hsc%$MGtI32QO%He6jYWK)2OCrwlRAvyT8CU9+<8L7rhnOjTWfor){V+Td_lchD6<&S~_WH!tJm|W-{&>KUJJ8>U_MyT{o>u%?%h}vN z-0;juI!jJ85}=K3W)?Q*2_1vWGpneOdnWbGnRDN0?N6(&Hio>+-fYprFugv9ky z)EW)QnqBbtGnFGGT74fHkq`dCjOzIweTwQ|ehvNeZUWpkGoT7|^T6!!B z5>$-Iefmj<;6$^SQGX^CP>^@~ZBn7vA7qqG0C~{aJQj3pEjat)=*EeNd=qXCc}%(U zo)BM3#L1^}tntn(m$_FB%n;QTA|sQ?&ah13;xnY)G23MYa-E4Jp0}%iF8=z~y%x7s zVXlHC3LgaRPO2xe?xH{SsP|pvBldgnN{DXxH0F-R75o;weeBc@&YG-;K4l&gKW{M? zItAqTUw&peNlBv^(A|_@;7Iz=$Nuj1bmA%sORx{(noeE%!EALi1n&Fg6)VDchxd2K zch9$rM4z($$YQ1}OdMQv6y9<5@1B}W>lyG^W^!=2hDPwb1=T6T+aF~`+}g`HJD$2? zF#n0+=;I2D-L|3z&%SjL2<$iO<>|F4!(^CCgBxc%&N;?zm#MfYW9vO*WZXj1%blkl zy{2uIQNCoeDYwJx+~$es4z}=<-7Y<$H(gYiOs7yf+S*s_oDp~6zayuV;+g5?$S zy_a+(YwlUhL*7Z{Z`E#`JPkK4rT-T;aClvQjUGxbY+CLp{OSSjKMT#)Y zRyf|4(!k;Z?q03A-AUg!d|O2?d>2EGzs<|y>3o!mT;Tk}LvLTNG&x5BoR5AY9$j_9 zYE%(OOUa=`vU?NKlr8sRt4;Q?!_H5p&55~qS5=&do)BPEOVVCU;jd(S77kw_F`b|d zl?<6fbiAh<_IJLCnq3gx zt-W7MIUykzZRdOXuO-dE82=Zop~01#?aqnGho=zco0o)h&XCSbX^DFWjBGdDU_Qa1 z?VydvNRlSHQl&n)@B3b>@|89T-ys(bFlX8h&Q}>%GNl%>Wt1eJj#pjT0o&syHVLHN z=2yE7%m)Wvf5TpE8V$bQLhbyT1Owkb7rCm6#Pj0cr==W-i+qqdC+3#d30pp|-*0+y z#UsLuB)ZyV#9)SOfalWqZ4fK-q(3We1=A*Dd!e&uV+L{IPJLgH+*yyAmTCnJWl_NQT}>gva(aH{ zIpHc}{G+7Hmvl^gkL^GTA8mF1ZR&ytuDgX{$;HaT=2kM%-z|ZB`NFi8 zYw*t&_r#OG^|>>$LsSI`V=@>|4-5*$$S0>>#QkeRL7n;?20w~EE$7-prevzw3cp1+6}i&Ml>O+{Pz;e~)#;Dv$! z#D1!oS7sTu;=NhtQZN30#JvSnm+9Ir&WxkZScnoTr2?X)7)WD)N(j;o3L?@Vg7oXC zD3VI5l%jMANS8qf2&i-mNP|c>oa<#~_J4n8o$u^#ue0}mvz9X`Ki+tr`?>qNZa*J1 zt=s$Ohtm1^?;PhM8!+NN{Se&nhijlL`=CU>sad+KOMy0-Cn}NAC;W6ExcJo?6|HQ! zweS4tKq&iBKm8jnBi8DVh8pq-|8BjAe`&Y><1j2U+rk+^;`ZJOnNgpMU^~YtP+0Jwqg0G6?lF3W_haG-#mOd-UkeJ>D&fRT$w- zekp7#*8dF&uCHIe{_5m(&NIXG^WQ)$G%i=g*DxF8i+IreB{=`Q)DnN})xUHX{tn7v z#?`FunEUf4Nsa(%wqtuT*g_8caqc3y@N#D6=0w-Pz!oQ`jh-2th+ASaB+itVKiKYR z-Zj*{4ePh#f#l@&KgB7)O*85A*|S1^N;{s_U;ElUWbw$3+YdcCt{a@ z$lBNLe&cs65OodK%a>-3Za(sb=Apa!V+>zj`%2qSsiEOsoOxbe{sfW7o$kLr&Ou=|43MZCnvQ>|J5u5yR?&W%BMLpP6%)R>xaI|LljX*YDero%AsG!MC{{V ze*X4{=gqh#>`vo~e;tARzgvt=ODn&_(If%0CK>a=k{8PlJR;8T^)CnD&~WtP!Oh?M z1uMtQgL>p7zRo|2mFUVTy7H>QT4znLqt8h8|uVwjp?Tb>8lx7E0%PVrY-vqy&hSURul zJl>{vWVelWmPFdKli?ax{nd;>!&-a{;Kik$f4*jgxud4{6(g<1>8kzKp5gj?Jj8f0 z9zx|)+4Rp+v;bBSz_7j8n;W^K0!Syso(;3+{dSjmY?pd22b(4_Z?41g__O7fPuJ+$~n>S5l>t0Hc z`?l`HL2>Iv4u))|yXoK5t=k?PJRu^sokqSbOD6fY_U!tVA)+`RCDC7zQaPij==W^G z!omUo=W_t4O^WjWvEh+^k)K#Mlb~RL&AF@1fOr3tH0E^X>USdB!r(3E=R>LT3jCaaWO=Ov59)fy`CCROuIt)_3ALkfsOq z3Pmtn@&Ot(Psb^13MZOvs(nnQaayV~8lNr%%Ehb}c-jq5WUmH3-jo1XG@7Ez$wee&5M$A&vVlD?%Vehnr5@Dx^62>qg8Z^#i#Wc zSa5mnN7pXF>sOKuyNT{@vcXe1Nt4E=@8erE>mD|$W&jF9_UW;>lRZ)0?C6pO=Ci_@ zaDVXNl!U}D5$-zgNPe1umJCjkumXD=3wolrwYB-PJLnFau9jz0u-2-Pkm$>`AK$-$ zl4%PnKudtv9>`J(^-WC6EbUzg|jjA-cyi<_;dq+DCB` zcn%Uc{bHp)S*LZxwcg}7dWGH5)&8OPIwm<@Mr(WSe3oTrDf-FDmiI^i=)lXh5eok& z3Sh|VbzB7uO1Gfp_73GWlv^8?N4mRzP8H~{{{hY%$oV=@z){=+fxwvq{#{_PsttT{ zj4O0wzc3K^8p*ybKq2e-MY18qPH?VgZt%2&i@LRdxfPe)44&=YJfE1TqV5hw2R#6O#{6!+Xq}0KkN$IEiGzb_RyfQTpG` zm{(jm^6@djw+{4Ie0T;d)b^b_?|}dAOaCW zX&m&$mjUSj&n_cC9(TaBV3c=5;lsGxhl#3iQF@fqB-}R9AOmqfHa1qIOgT6ywr7v>0?rN@ya)OKAk_hGjXn|4 ze~v@ywI+A&%`qR~ZeCy`Nfau0Bi%8pl!P;#h^q>nsfvv~s7n*<3p;~8tNQ?bp`9TT zVCkzF!M2Q>1ZU_cZ?)3|&2$=C(S>1^Ft zzx54AOdGfWmE8a~r84wOD}a}5>U%pq3jDuNkZtgMe0+~Zo%l&)IO2a2-w$Fp!-`9g zBZ^xPu0)+YS|ln3XKIsmgaw3!dobzueS6-`RFJ@sbP5r!3&uV~FAEC`-~-m!Q;Ii_ zSkB#8HOy%_*53EBzn-p(mFRhqU98upE6H-neKP|~p90JN{X0&1#}@1CREu=q6?xnGr{8`} zt6E;!H}$@XqV~?=XWET|Hq{?**b?SCI`zwg--qVjQo3%(5%YAJZ9f5^)WvMGiErgJ zVp&2C6W`48JD0!T>;Zw7J4Te91+Lp5!e!>ceJ01)cS|70*$-*hg;Izwh@LpX#-?!j zF*x~-+hOqVH86dR02joE*#XkQi_EKY=SB)o%{5?(fcQweW1e*(r*F!7~7A>ALkMm=S6t6U!^JMZO?DF1~Q0of`D02BB~o#=)YL zWLMAu*tr5I4YDwq_yz%LW!L3lJvyHg3dMFsxjnV_3Yk@HMV0O7>4e)WEc*2=%D}S3 zi#5n^GKz3nyCd{z{=0P@mJ8!l@%o_PPm)fS(g(mc(Lfec{7-+eG6|y}&Z-N|l)= zmi^tn#FBv-mev}>YbC)^&>iW?;{iaupguPf^T@0B+a$&NwE`_iTwT8BHxCXk$vX6B zC_f3-b&UIRnOuzefjW+MM?V5g>Vr;9m2YV z#`trj z`B4F1aH>NvJoXO91%sT8O!j-t)2sN&&jkhsM!nxA%*CynZ=dl#%e0Xv410k4z+(vB zhTl+DRSnW5oJKQ_q0Icciof+GIF@PejR9WMf|dS409JSG=Jz)8&y6oq>`|gKO)sS1 z2jIG!d9wG8;>N}?VRq8M;k)wdl_dICID?^S(4EESJSd{h%LH*rk$=eV&oNj_EP#Y6 z{#df|H@hH3X(%i?FcZl25T)KSP!;lEn!DM8qo;)ZQj|VaFy9vv2U?av{E}Qs{)9A1 z%7uT2S~>_y!~+)|AKnM4S(OG)o{5d zv}n)N=b6p6d_KL4vEUzwhW3cY=@-Vw59+u~*EbV(t>6`}!_flKnqPpTv?m>}9QH&F zn3zVBGM7)MHb#LylRYpvm~Le@q;u&&J49L1Hyt}1cD>?|TM>qubYm-3vsbI09AzhW zo!&B^FHa7@>@)|ET*k*S}#sKPDZ@@Dq^)>I~soG{NEMmR2yfTIcWjsa6ev&%q;v-90}Ashrn z(A}#!Xn=M53)MLWg}FRD+1A}hSV6|Yd)&O`SO#5rQb$}Lz~C1}*z4yUm&Xv07qT?i)FCmzcQ_6C4MaFW~ykQcpr*9+P$T_FgP67aBJ zK;sx8CpP~LqrO8qxQPfcmoLW~wfz}aD=I5%$?tqXPsZV$z|k-xMv{BRoY^MGs$*NP zf+?=MaSpyiE7uW_!a9&R1QeT_KdM^euj)@p~8Z7kth95QoX zUI@6UyQo<+*N^@Ub=?C!!=&(55@BlE)LAA0-JXg?p$J>=zA-T$lB~ zzWE*fUY3%;#&(|*Ur@LK7SD>>-J*^+rbb&&R1-qOiQxQET7r)71V88@klMU%iF}P| z!GiuO4P61+^Z zhU;YVG?Y)|+Bawzm9PbC?~n=R@dlr_-kLfC%n~P2A2L-&fXR(~Mr#O~q(m|FIX$T3 zFKa_K-MSQ|`K-Rad3T*xC-)c}X$H`Oo?)>6`a4x+Lnma0nf&_=xEry9ypU%e2qOH^ za}p8^H`}boLAc3|m!Ssk*&W6$8x)8J@cTalB;@WsSADZ^CzOB>QOT3XMQ-%Fd>~U< z9Wk$3{T}=(<%O9EPoCV^cdyZl%mBT1$t<;mmVC+*@bN{0ABKu*99-L_q|EhB=O3US z=GXDsnp%}?3Ytg{V4o#ZbPKvm=`9nj=7APtDr0goyBwi~&H$ilt93u?Hk+mt(3TMl zHnM;XP_NukLT;^wHOX&0x?Q#RTwNhJ`Ghr1qT=E!N0}9+&1{h^Gh)ccT%Zgj%^ae!+ufkM&AFUBN%9HcW zFMDaCk|l_7l{DPhV5ak6lDEwsFQqpCG8wx7pQBiBb)k`TLN=v**K-_O(Y5@~|rK$WfC61=*MSVDs-=$YjFi3*Mj{a|D8G4K&Q z;5r%7DIrn(`$nc+r2T9IH*kXYdQuQqmpfOz>2&S)kruNFMu+HuGvEp4TnF1JQ}0U)JJ8xgd^V75G#}9+mmQ=H}>e^>tSGyVa1H%9m|WezV7aT zt4p9OH{qC1y!wjm;mQbi-bREHT(rfTgah5(5xXA-_t5+-$;ZB+?eLf;hLP$s=ne!hjG^bLY4QUc zl;Y0Sm01#txd*BB4W3(!41{ z0-hOQuNWDdm>?$1Gy_LFJr$Z)lAC%HhFXOO}Rf9uWCS_D~7wzX3dsMF)tv6hl1>VC>y4T2&m1QMUKWOHLx?ZgKqole_rB z2WxUyoVHVy)R2InQj=aqT`Zxnb{?jWBq8=Gt#O@6C%xkR`}M&`=2i*rG-fDE4;{N^ zHrMF{JsMZix$k;Y)NKTu2(bJK&Yx1F{S6R~iGswKN=?UBh2(ohqZJc;0ACD&-~>?f zQNhH{O1ry7D_qxP>Tu=6MhDI!rQTs@ep3}np2jOGt#2xN>@nk}2{ zuo(~7#iBXz^7kM~0x!0Q+0DN+QHH*UUq_`rrz)8jKB}=7vv}dV*}YkoM5kD|>%t%+ zTH`uUVFht%?5Gi$ltp0Sn$cqdZ6X3$YxYkf)wErUaf|>?Nux<<3F(uj7hx9NJP8@@ z8aqzP(8m=E7w%4v${@w~S7s#^v#B0%=ku9e!=|?k*hx4h92Gr(M{8!tR08*#J z2nTmYyQY0)gtb*D!Ze*Zg*4WM)jfAA!Y7l;PnZ`KDujQvf@g@_%_nI_rpi0B10xG2EilW^Czpx$m;S7&O?VD=q+{Aji*N}bAi{E z5wuwDMN7TBG)%wnBQytJ`RCIaT7fLSB1gVMSV=8OYD8-ok`j3M={MyP6Tw*V84_nSwcvQ0O-)HTdjtce=+s3}P#gwzZ8n)63%sY1 z{QC7V5RUC3)tI)`+x04%>?#UyB}{VO!)q6TlSoHy*UTy$c02DzQ$!M^r}TqAu2*&G ztWU4-Yk9Hxmsa!fa$5w9zq}k7D_WUOaogSiuj(2?Z8HDDVh8>BPM&M=*Y^_+#`s4! z^HDra;*EK=kue~VYT zI*hva(P{w}CdYy20?Sji1_;2dv2wILdbKMByGlmJ8X706LIu+gSJ%o3C%sFf$!kv; zntT0x?7oUZvw41UwARN_dkAR>Y4E|q?TG;WV7163cE#Xq*M#K+slk$QC|h>+6@tB+ zMt6Wn7zsOFqDeP4kUJ3R*^L+XTDMJLudYLHASl%uHH(}a=67N!;eE?v&o6=Z5iDr8 z?7JVZM?#mAJ8d|Y+hmfE6p8$sDdVPwskZp|hO6Sb%?7>|iK9Jt^us4r`sg$CI(Nxi zJyzrh{lpp-09^k?f#+Qn9-?o%;tAKF2&(~v&=*J_hol8>fp#F-#1)}NymEyzRaL1uIax6|A#*Wm7ztjhd=3rLQvN?HbTdszfE0WBi zfoi%rErwdqX~{BVREe#S=^~I}kw#Kgv-bg^4$%%ntQtXHrVbwd$lZq}+tMe>g_DuY zAY;T*A4aVyp*V|@@R8p5gk)*tqvXlsvM^h;8b&(No7e@k=Ox^Xn;%dGM|`zHwr&t^ zi!2%AgnoUMpD#j&0AW})W2EbhksTyQ6VQ~lBJ!Fd;61z~<0~qbvoFcPNytIdMo-=s zU)qOgi(mA|n{|V*a5tX{SnCggbxsKCX!Cp0RfLVObKA*)0f+5__;}YId8_Q{2CW$6 zFKGIRVt1-IFdq&+I>%Ig50+Z71x|nxm=fY|L`KAini(0iMW494)tb2dJ}}Jc-ETCR zvkEWHMv?iO<1p)(VWLYTwu(wuO3x*N? z2~5M6Cm)DLE-28WsVK#yAaSWkf99r&PGSABWl1HumQ$5_D@VYo%r%NYVK7L`BJQv@ zA2I7)<gfZ}BqU@bk1*dmXu~$L6bW!(||*rY5jLLO2Pv@Y2)Fr`KYx1c=I zpVf07CnWcXyE@yY^?;)&2E-f5y-#CxOWI<_ATXf4$f|=2Hu9~0__Se7lB#WfvKh1X zN4~3u2&)yEk2UsJh)U%CE-pOEbEcFr&+TcrnIS$A5+&6JZqBk--zp7~LX^m;x zcm{g>LZcqx(gMbKB{)j8r#3PM93YTsGv+#98UBHc!R1kmxB$jeZfE~D*D*HJc`Z1^ zK~RJ<|3zE7?zJwEStyW;g{-)W4f9fP)?Dj0L&J#Nt^ z0EP(80#q+dz1EZQc}l^I=H-|cup=CUQC3Ng0Cy1)B?kVB46)$JORtCGkJ38RCynlY zFyCiIpF$rp;d*;I0rJae^N}wO>|BFzl4T*g7u2+^B~dWZaI;)@5J5FEfAU3hCA?o? z-fN-Vg0MZCI_)#T+%&3~Wzn8SkvdWM6+AF<14 z3?#Bz9mye=9UsM#V5`^{p2MiI^0- zHmC17MsB_WB-v$iC&HuTA5R(srw41qvhqAvt%*G|}6;5>{t9Nt21+%liQBS{AQHbha4rOnT|gm84kG zDnkk~gih@yLXv-4x1pGf1xde%G^(hM(IROTYo$7O;WI*W14QhpNY0Gdm{U+BDB@Od z_-l0UYJ_oTwH>j@8_hhvtu{&~coT1Y;*ex0j-|*p@ueU2K1M2y8smgGGRq`aQ(*N` zvkLyF>f0;jwq0+!eBXSa`K#7<;`U}9chlsY19GC%bzmC33Yeh)X>M&-0z*3`@XqSU zm3U**K!_icuZEsd zhwR<>%=^yYfBM%>IiKZ_I%6KA1;XvOh5R9AP|o)^?N6 z1)u-ZZ+4`pRVrsT>3cTmPgWUx{u0FpK7J(TPLa6)F{AgITKV?YaN@+tzzUO4QcLc^n9>g-hLAk2Z=ZZmaEmF zyD@df3&|DbvTyUW9C%iQ_2w}c6<5PNul#RGv`gBH>=GYq#2Ij8T z8Z1QGzS-gW9h*TOy$d|Io;U>OWr9m-GfYZo3xm9E_eC9y(>N+^Qs)i|?yaIH$Oqe> z)MMV@xKXuyoQf#Sz>_J^Un@0x+67d>G`4e=6P2iI2`1fhWmZpuy=AZR; z-*dcMxO2YxUN~D@P2)8ei*)Q_Xb+3o9$bTwe7hv0{AOIk0J>=$HoXMwS_LZiGE^b7 zT4t$|?qvb(IR(Y;RPw(c+%boM;^bL$;!sc= zi5k{t9g}r&(ec`Vzc&4v=&$}tDPd+<{}}%Irtvk8?x$Hk@UQ+~FQSjx6ci7sFsO>+ zme)VHZ?vWXD6cnnBkXstA6(P#Pak&?A;j z?#N~lt1Afw&X}A-=DQ;AEoYvu?R1~NAGFk2)0Lrrswm8$Ji9ZcelEzXh>bS1=?HCT zzPZHwmudbYJlL?7vF(Lx@V>_3s)=Q`m?V%v(hKnR@}aP^3zuOLFetjVCQp#$2_TF_0zIYU(<`{`68N?o z$#5SGZ#fL>QF&) z{M`U5q$6-|s48`PnU7t&h=QdsvaLH&{CWVtbsuKWdD|mZ{{mi`H8S(11fo@Da!ugK zmXbjb{5$!NPmgngJ!LKJHv(VCZ9Hiy`S&MBjY`4c*MsoQ7i7W5Nz3oKL!sL-e?Z|Qj&Rp{Z!s$b#%RGlX*bA7Yz`{HF9r=XAI9{v_ zDRU|?w;6&fm;+NH7{P&(cz6V!-7X|$?8(TBs!~kas+=vjc;9^n#mCjCs54m>Osg{3 zHG%UMd}9H-j+-cxcg;lVb}e@W-%G1c<OX6d7jI_wap=qOG7x9}l0$^WWmh@kV( zl9)BxeBsM=qY~poR`f`V2=Ce&yLb*nVJ!Rg$*>3;EHL@;XwP^VvoBft6uL369YSp( zg7n__n{|}Mg8iX8Q%8CzA(I{vOW)W(1H=4S$d)i^gFmQ%0^2pz0HP)fk!UC;1H`Ph z>oVGKb`&%h>N%X?ne@Pa@_FGS#DVnoZc<{%iVSJ|z!i3gtI}UyY&V$+1!#i{x%>j0 zyQw`fH%UJPPDnTWCm+&lfc;?r)1=p00Qt(ig?Rk{bu3{hgPlld`J$Y}E-fvsk3hvu z{V;Zw9Om04gjrz93{E4dsm)hI$k^ThVe)6RVr=TsRp6`CtnVdPNFOZp*54kTI}0;l z0OxHS341~Mb9}Au;^7ywfa8*h3hv`26u_sJy#MYH2b$t}942-G0<^yQ9JI^N_3D@o_pSCBjeL!D`R?vs z#qTRg2#C_QJD(-$3a^+21_91~=|VgkLep1!;Uji8zJ%M$L@bSysk}|{R;biaqe|j~ zPM7>2zog=aK&sQA8t2ZVlUppqTR<(o@Yy#KlxUyf3GEWPaqV&_ihmF8Y!iyzzF`I# zj=3>nm7Y9I3aQVK)F3k#R8+RZM1!~bjNAk494nknrN`vp+){;ej5K5d0XfR3S6t_q zU2b#*{vdyV6cOo4C4}js+Jht=CIle~NIn8wv9t=32%Vl=E7R+cQgkts(+Cw=^sRVoi^Zy9`l2%{kD6@WGv zRGzdFRXk-9(9f~;W0X{n(i{?P-(@IFgk|b2yDrg;_Z~k-UEmC}QxY4bei5l4cSB2m zy_LI8Dq`rQBMFK1%NTEdTmhmt!=BOFTw*FHy@HI2aBlE}VZ|v@{;N(U`LK8lQ-N2$ZcE-cKhC2srX_%!as5zG$YSQ0ZR^*X+do{DcZHmPvI zu!~Nw$|=P)wfQq0kr4_lHaO|4-(^WKDA>5=$#D3pzn|dE>MmR7v0F{5XEd@e{C;Wh zGO_EpF!SyxCuXMOc7soS(|cDXll?YaU?~hG)CS4LRF=#rzMYiW!ht!#%&3j<=KJMG z8ihL?(8Tb&F6RxL9P@kFy|w10%pDx&_mpKtv%lqBOGPlts3)h*bMf-(_1v&T>YGfw z8lY6Yvsjy5D$|nG14VSg%?8Ys^473q{`5Tu8oh$!qBPpKC=kk zJrS~>kRuTGfK1WpH6qJ*d913L$Z$zII5l$E4|Q(tN%95im=FnK-36vF5t#Z_o? zviLRzM)Ef28cGzHM=qrkl$+iM9@Con{*cYI(40dy=CL)m=Jvr(O9^kCS#*x*;w0y= z1c_YN3XH}i`X9C`GF}wAlGV*xS$l9)C~o*R#qZ?666il%peK~GrY-qsMnt3 z9ANQeK=R202L;`93ilLzWb5pLt;tRA;1OMoe9U!^uP%Te2ua z#zz=~sF;r&bwXGTvV3O|xA&lANq8YkRsx&eXzzMQot7+n?5q)6H0!ciA`=oI+CGXB zyZ|0$u~Hm!@s7v1`fQM2+-rWEmeI1I-`uy~ScPQZ4SV2*-E|roKdWXuOK7 z^2t6NsT!v4+*x0F_2tz%A(N9_d#+#Sa#<)mPcX~-PN*?^@~(EiO|>6+#^Ig!*g9}^ zu}a-aw@iKEOZIu@3!YImZFI+<5(TZ>G3P8kzSrQ_)DfB`GF6O5t?gtB2pI&D9;5im zxbF){v|AV6krsWL?$`jjLLSQ!|KTKWvdxLK-q3WU`!UyC<4UO7(-fjv55{LF5@VKR z{+*OT0n`V3;HdFxlXK0;qFXk8`~u3%8tHOLcm*$T!uimLHHUo83)GuaVHV1;Cwkes zV7pDnfQh`(?ilf9V|1C?XABR(Q}!lnOkhqX-A}SMhAITno>AIs3I#xJjhi7EdXjYw zMQJx1L1)GiE>o4@9d{bpc=ju9+(6%p!oM$eeXVc2^`r_j2S>=--Tk#^rOq*05n(Tx&o#(x9 zCV2h|FU(_NmlKY6u8=W}W_g=Ky657p6_byl^R6Rx@yod(FKn;DPg={zY(3HT>ba3y z;LCtW_yS}qY_1bJZ71r@=d{t%M1P|LS1By-c(UMl%ycF!<+zWDlhIF!*Wd|_!;ve+ z^mzu-eIUr9ClgXi?;2$hP`>JNUvIXZOogM$z%q{IJ4Cu>qz!@pu=p9hGFwGWap{nJ z%jq(R1H~n!bRMyL7tK5G;V%@I<`j5j$GXDHCZjHX7$b$-;^qJO@BAx&1@Heae4Bs%$#DO_5(fW~ z1t9nTKe+(p{r{5-K;Hj9xd6o9r;Pps5wISU_KxwtDetO#*fAFAZq`TGhin7&D$-myd6}g|o!^3^#*W0(dOACMd z5PxeV>-NdU*HsgXFOJz=doC4n;Ca4YP3^`bPY}9x3QF~b*i=&--U}iZ@@vcawR#l= z#X3L$$uHu~tt(`WiQ@nAnSbX;*5vrt+WD zoA<}mc15(T-Qd=K8zIIcA>1WAG5AqJef&pRr&La|R7gSL!G84U8C6sJ)XGD4X_&L2 zS{_Fbbb0&Ne)!B@jx9o2R#x_ppB_0PZ4n~_Xdkzo;o8qner6DMRrZqsF1>`OGQiLA z-KeiL8+(Lbv)LnVeq9Xg*t9u);l-LeM`1;~?Of)OqodMNg8PsdZth-IOz!ks?{_6D zhLeRwM?*v7dQRvH2V{XZ|&x{z6=jMDhlxP;|Q*#8Ho?j zyy~f8ovE&pcq6s5;#kznaI3{6vb;(`A=jE`RMcj1sL<;IA0PQzzuE;#GvY$cNY_A`YDR|0`Samjvu@V7KHcQ4M#xo;1 zZ<9gpg0Fp?ADP{hR9FhDwxKU9<4V1tZb~T1L01&ba7t1 zMWIosKU9SsmDkB_yG+D7P105!M>S5req5GK!|qwAIr9<~C3)o!3C~Prq#P%ctZ~KG zpLHWnJ{~U#uCNoBN+H_mN8)$Qv4P$N*B?aRk7kx#nAq}_ryZ-8{4hdT@!Ldc0pBSh zm(QAYp0%g$Y&7X;n;&ZLf3&}Go#3C>7eJd2(H1Q%znUGw$(MTS(~!SfV8!vNx;O08 zNGi=okwfSPP-%R`>gJ|#W48Udjd^e5l~ZV*np)ZD|Lum5?Y9pKXr|VRkX@DqvR`@Z z+@i_KZ9xzBUpq#RGC91A!5^bfnPc3+m2BzrxA*K@lOn&DCiMw%I(fslb-amNV4qJ5 zXPOEq_1PU0$4tZ@mU*1pQP0*?@3$msbn0<^{3aTX0d&GEpgwm@zxeQ027!})uffJ% z^;EF+RblIBLrjEobaht8^WqKO$|)9SY)4ykHWz7r(=Y-*^u6SR!wtzwcrB6kueP~# z?>E;_stl`|E2p2;$*`zDOUR3j2iT1?U2f9FXOyF^Z?zp%w9hOJ$?Zj*x9HfwAdz7G zqAy-4?{`PBC3hbN!R~s#O05_Grs7m8`QueHR38l=0Wq%au$}Lo1N@3%EnCqrvl0Dv z*TRGXwFj&RzC`8q=cJDxVCtw_)AY{hJKUy{peY03+H=CF`3|K>qG^h848~;)PGwZ1 ziakB`=54%ALZN1s$qV^t*QY6o^OJM~i65D7{nboxZzfDRPt~RUQ=xxfjou~uLh0T; z3uEq&h8jkhR8my6idGg9`h~8w(eET*sYs{uwIxvy&J<9q)PQH?Vo&3lM42w8gi|H} z(!O9nbbo04l04cl)#bN3D?)9!w)W4Arl?^&^Vx!#T(PAeEK-{sDevqU8)l-Ti-9mp z`5~n{tg$lxdN6$R*Xl6K`ZPnCV@BU)fw5EhGH6ycGb&t{H_M`#&;3k>t;-06h6 zyqnee#JULAi6`s|KPEVNhk|LuP1@#C{a$|iMqMB}t`jjlV&2X=h~COc)=g;GaOBp> zRZqWK^YH!PlyL}vNnff?-25`Z9Au19^^)Xf1`> zMP0vvb@aP#Dt94rWe*l~gwG}KsVjQ-gXp&sV3oSFDti8aztm3l!UU@KdMfwnEe~sd zl~L@i2sQ@nZs>;6xdJ{5uRX_NQw}k^jySBKB%%U1`0*Lb-{Pd4AYxo@7^sfwmP+DHV!>8+E{7Ee_w)RaiK7}bC<;jXC8{Re+u|a3HC{rq$ z?T4Y4$1IlAL8Kt%cW;}EE&HsW)?oW%AE@L;Czrfj9f(!PaMrpK3g^9+Rm%j zEKiyAYtSv$&3;OXtWv!dfs$1-5Zr>WN6Y3~ZpYwL)HadSZIQiy=WmOM0u`T-q1vS8??9W;sJ1&2< zH00#Vm(kR@)gPav*N>Nm9Cw)5xB#qIJxIZcg1Ijb_3N91b9#))}-mVC^MLLkcc&6`Q|?CkQe zu8w1Kl;dDY@MKc@<@aab_t=^?#sLx&Ubb}y{k8gdbgJKe-}MQUko9|03)KkQ56hQZ zB7(RVs~;X5sIOeq9b$_rcB0Ln?N|)I}9?Rl0sXt*A{+|!io}NMCl$6bO?e5~ zY^Vxr9!Jq>sCCwQv@J&oTmZF?`7C2E>$4n} zH6vb*_jF7pGSkqoNeR7Ly#+m*0QX30;-lXaKfg$<8LHExjx){u9vRFy$nUobvb$II zeyNqGZ1}E|mtoQFSTIrHu3!JQG52MRQEXLxBWag&`@a)|03D_^o8^9+64~ZQy)*2n zmQlTl3Y*m8Eb}Lb|7(+86VZ91_#~sKW8JVL4K=0S+JUB6|3vs^p`%Ds?T^{^w6P2r z8W%D1+;FC27r`6xdAc!6DbKEPFp5qusNG^Vf93a$D^ZDwW?Pw-yi`+kUr@2=j<@}G z$`36lDOm@68vClW>Wfw>%-eG>SYBWlt1ns29ydTWE!x$ESxr%qP)wb*#hl-8iBq$A zd2X_iC;em(#j$&c9%h+!^*2&V(bc)&N{}91w?^L$q3IuIe6P(*QBVAp;J*J5|IsW*3K6ELtwb7^|Vds9+$VN4jsUA3#Ujx~-nAKfy|W%h*E zR@l1xrI2mDB!Ou%e2F#~)2f;7XkM6BV>eQr>BDOafUs9b=;6HhU^K zytzI_Pag2xN4k#VG-m{%oYu|+p#4%`R@OOHYZRrIyl?%}#MphGJ7YUszh%xYK{@$( z%!U;kr}@dZUc80M(kAhGJJ+uWtg!JL5vS%Sdh5F@`u2z|(NyUjE_-zt`+pK@6eDTI=NB zacE-3Q!|)Yb$ZzGR6v(oOD7JaWe;(2$%2$=$o1w4mkg`${{72c_niiw7;Q+(j8p!%AM!KLVEzk~O!#PLz#Pen{H6<^mox z&UqiF;LPSaOh}N2nZn9--~W~&SgP)_`Xz4@9qaw~gE=fZ)_=w&b2`zYoJ}g(dktHT zE-P;PBjCH$$rkf+13vunTY&Nt+33HEduTl+ErMkbC{fy}@EjzTZMCoG8KzRNDn@9r zlg>CnvBa_eh&JCNg)}3h!GTAtB`x|iyLTtQI?QuwxvIK~ zo;o~_)|~h`73cg5y9ezwF3<{otLrS22M|F^PF%bA-3R^DgCcG5AKZU+D^L6gB8Wpf z)kdyM{SneGaqv_}dwI#`Tu^+><>Bo``0amjTPI1e#@z1;U-?x}Zaa;Sf2_ohJP(@6 z$}T&O*3p1NANTv`%=v%cC+^?Os`OY=gC{1`BA7$@;8?_UB}IAa)eT;2%SgRfP*Acw zM)69P5#N^Qzo>K3N}j#P$s;CbZCx^^@X+(GRLiAZYwv)Z3-P}#`~QEbkUNJ7+MsYE z{6Lj!T z>0s_h=Vw2P2Uqsa+X#il1Pca+nFnjhHJgpQ#@*3#q-AA~s4MB+c_riC;tPSb-{Co! z^V`o-N1n*Sp*iw|kXg#uV=%9TMUp!YFc5W~_KzW@xL^k^Lj?Gu2 zVq$3XcuM4GuNWCEvaS1L%{|I`uX73uCp7g^3v0X~bk;&$ieIQ)})-M+4msg1)#z$aB#q5sZR>ZekhURTR% z<;FjQ+u!i&RSpa>r}ZpJu|4a$;`74Y@FG>smnhb5jqUmjB62an35NOAn@pQ}JuvK6UNL6KY!8=T*Y@|eAVtbKFa*rO*Mt*rR;Gw>O8gKeD75S!b%Dt_TxO!m0E+q8y@rLuy$Y1|)+HTivn^Coj z@Z*Zf%SBSgG1UdvW%EC(>@XZ%VAjxV+Y`(2bM{FBRQN%28!sy>2Y`fYx3AjmpQ+AK zRo>bc9wqZ^?S*&!?#0Kq)$7u0Eq!|Rea-1_Qm4)sZY#QwJj%IAp8C9E%b}dil#6{o zTEA%@Ke1iq7ptGF1sFDM=4@_@FVTPWzU$y;bM1lu_M*hvRiAKKt%$t%kWv*s{Zw!G zX9|m~yyDX8z9S)35K^{W@69@UyASH`K3trB<2PlI&8NNAu{`8E5dAxqmz|8+I!@O6 z`vhjqI3`SWHfAkGZL`bML4R%?Mt%gsg&>nM=z7iV4bl=BZbQ@8`a(N&8O?{Ecp}T8 zL_~X`#V!dwxLO!FlP-suRl3lUDHT(h7C)++eX^L4%4_il7fkm=K z*gJ@%#CVPfga&w*L&uM+AS`f157gEt%|~lIZN_J`Mbq=aUo;FqWWKtQY){19vo6!8 z6fVSPnl*RZhVf7nBx%dkG{b&eAMO287}iW8M}eF)1*X{c-n2GPu&(pCB;Y8AgoHGCiVWe^eQwJ~Qz74Ajj%Lx6}HRn!Qb-rAMBk?*?ak?~15?Y3zFJOe!rRcKQR z3<&sUoY%1_Dl-S}feUyMgzSGjs|eyw*v2R{(4bYb`us`G*o*ZpHBT@V8Uxjz@P_-{ z0FM{9cJ@UytUkh0C23~dK#y8HE-Yp)uH2G%qLZ>l&1jLUes@GnR8qST5he%Pm~-OG zQ~oO}i{xY{IlR?p1egxGH8ZOq;W7atgv6xP1Gp_k0#ixSDI|d|;v-)_-} ze$v<1KJR~0)n}utOsg85Wh)$vezeAf>FeY=i6s$*+2}qOSw)-hf`;!hn!t{O!Vme( z8oKJ<%3#xhPtW)8>EG?IB<^SRg7{Ao+vxWaI?22vzj^ZB5GN5z>EHsAc~A%?^k0~O z2(=)k@Mx${{<&jyX=!OZsDRwWBEYtTZwA50_ptoR7a&0UCNrHMcxUyiD|Ea-!(=pe zc~P5iyT)Mj@$qv|;US_OGHFhW0@+^j{A52TAtKUdHJ)$NF9(5<@`Db@!1u?|$9TSV z3PQ6}-qPSncz7~`Y5e0!01w@a96(R#(&0NP7`{S1k~xo_Y!b`Op%m?9kvn*R6iTG( zNT&=<_+O`8@9K-#Bx$6dWfZoXV(3Ay8=`>pH@3bAfqvUb900pu92{%Em&ga3g4<%x zv1<=`atHQDWHEo_PdHkrCjb$7dR#_9K|yTn+`&?TvDufPGNN6`8RC6wkp&8X9Fh$V z9f<=#2Y1pki(b|pHJ|=YR?z0?&ngO-h=->qX~eN9gt&R>p84a zXt`8H987AP!5jMfc!?6RrcqnGDq>1UP-R>>@+9E#<5;v*ngD<@RG$zmzj)-zhlfA= z|BTWEPjKar{u@Fr9If>I=4o#nmBcj`NN%nlKdd5#`+O(&sUa2$ zeDsKTZdtUfiZlBNY7M=Ru{cN9fP8f;bcJkb7P%IH{$XgogoT^?0`wh^L^uo(NfBt-rYaS!R@He8o%gR2j1%1}z4#I`SrNK5I8)su7O6V=UKq)r& zEZm`Qcf>3Ub&on`hY^edRwn_IP{4(i(d&**%c@sCNYDU@Oatc*O`S?$o(m!06I{?X z+nNu$r;L7VwRfbiY`gLn;&6G+KBCtn3yh{grcPhPXbw(Xk^|=1qFlBfLT%#Nkxcg5i|~=mwuMZwCUCJ z{VXgsE%aU5x7)8y!Xwdqb?J8yjCuxe{aU|kqvpZatzZr?1?>ScE2)474dz^`T2`pg zdQPhZdw%!sFN}iMC2&KCR8aX9MF^VcgF9^op&{xY2$d$%WSw^6hWZ3{a|+4cILQ10 zlowmMKkGQzj=f2C$G4T?8$zP1eJk^|4v)BA9m`Ru_U^Q2(y|=nH68oy`l^filhsDm z?=Rf+is#}1CwzLu(1TnvxEIPG+KdCPAO+lOisR$s;nTR!76Y@~8-tN~#P{6F$)+x= zUE!3Jlr<;r^~wIJfY8X@?<`iA7VtJmnC@2dQcdVHWMlb5E}->1OWu&w^02$e8D{7k z7}SHh1vCNj@T>g6g(Ur_h{36Rit`WcZj8lQKqV;vri9)i`xHr}_B>^*DV2DE-rX0_ zTPnQyKW?{KWP#uY4nD~t_qpGtl2f^+8B9CFKoU=j6e6`;53pK^lSEPkazRKn?>V4*^ogv;g9o1hadGKzebs8Fi^-&);6T=+V6;E1=J}qUlbhY_ zoWR#J1Zvu+z{&SjSLK9gLEG5^b2Imv_xY|`vQ9#J3t5&CuB*#8N#6(0RF8z?Ymobr z#Kj&S9u+5+l3tA|cl_!`%#gf@CTNRZ03w=I3f=nYFOI;^kH?o)l!BYY1Vkk)mc@KD3x_{!M7%+yk>L#VF~8qSZz50u(EUI*W>6 z$e)3$qd(+)G&pbf9KLj`KLw?a`HHn~gV`+$uh6Ly@SX0gHkt9mPC4Z&3{G7!0td1f zq27Phhmt|y85pMQORd8aWO{S#oy35@GV5?D=e+4Wj0b%|sxGk5>iSM*G@FJ0W=eYQ zD7=|o7hu?PB_Fo+bm?lXf=ebvxb5fj*jS7ovL)4KC)Pc&Z1=b`1C@wkdeDK7LPVr8Moi#^0DLsYL z?OwGK(e);QP$n zyP67J^0qOF#6naYh#+{J8X#(j*U8K5Iw#;TA67vR2Z;19PFRG3buSS(l0no$gXIXZ zFw4`0M!(zCW>x4O)@`U>M=fX_@-evHe|Uho!Z|stt&B3L$?pC(#(0<+QNY1+hvE}R zBZ&a1clbLk4NdP8k(j-(_oNGooM!x60`U=oFS1f+U7Z~Mhw|w?UCyv5gSDGRmB1AL zM{P3aM($?IvuE$g7yN{nnBS~vuM`=MY-3vLXXt?1IdbHP^Y;xSRrA}KnN#3o%3o(e z5dts9p_OS?I1#TL7l{*Yf^6fLL2He|Ext%;?h(2{#Io0prbwKM4Nu2tg8n7L9E2*M z(t5OG$BrqG&>6#b0`JQmSOAxfpcAR%(+rcnq8v9FdO-&DRip2E&ao>WwgcN+p5XFp ziGUCN3AwJWE@;~bQuD!R52Kz{2PffWZTfJ(?hP{8d|1{Do=C;VkIE7f#9jH;sm!qX z9q_YrF2CQf40LcVSl*OTPDAK2IF&P!Fv%AVy$e+{t1S@y@_)5y{aH^b#xx z2q+99C{lzGq)Sw!NKC!>q zyxW;`&hwme?tRXW%TG$O$^Q2Dt#_^Ut~d2Fkm>5l#TNuW$cdYfA!XTJR7J%+GCCqc zFlh@r9C9_(o(yM>F)Tlze`AHsAWgsUZ?K{3ZHTptob>1k(*di$oAzkJkz!WQypa?za{;CA<`Agzn1(*drV0LF)j z)}kOfz*+*Hb^=><`IUUOSCq9}<6)RD7EH``&s5b;fL(s(4 zdsqJ9=g+^Q8KyT#pb!0opou6DWv35WnP+Jtdhw|M{Vz;*QC4*82w%svE_$G+G4Hr; z1EYEEE}$I;Xe)!p?x*o*ZlQVyR4++x2jiBfd%f!14l%-5VZS-7a=(C1Q6?>HCZg#t zAah}IZd6={9%HJ98P=KW&=HFkXkoqg1U5qCw_#KqIj#kD%(Gv9H5 zKs$vl1VC1=#3|)%9PO|ztrhHl&OMbZ#u#@+poa=xMI31eycxM6*@bcnP zUA9X6KH3o(zVcHLSroA%*kSE0mzLXqE$f;dtay-ptUI1v*m1?6r%Sp0;Z5Dzni|9? z-%bxoSa1oQ&NN61c2&9%?sdU;++A+=Zfh0^A(s%Myk z&MlAN)y1Tx4d9<>N8bQ$^uz$-HLKzvUk60V1ay$MqICg0yOb4*a7+NP2)sQg1do-n zAVZXP;*!b`o;BpL6!TLYtJf2;*Y$=#S6$(z!m5ELF;OuwZP@EtA(PN1zuOgJYwp$Y zjPH|G$XB+32%`dY#lTa1sqsg2!HnJ`o5FoT^q{2dfL!SesFS`xz@-61Lk34zD+!Et zqfkrg287tYgm(0oElJAUiVsNQPaX52eGENXU_8KUD8InKL-^92&&1J`6JYPT0l{8v z(86y70rODt&Sy`eCnyTd(cg#ssY|bB1MbpJ6?0A$1(hJMVBGHCEa)q{fQL*z^?^rM zpUihh*SRZORjy|0(gmydt1W;g7Pyzsk8<;_B{@gvu(~KbJ8RSg@K;#al zbZ{-O>@Q4r_=1r6tfw%zGi~xtn?Sa3lGq5(r_T!N$jru=EX!Rv09%*_h5Yl5OjWLi zQ5^}LpMi(<^9lXEViR-W*^|?!Pu=@Nsg7Iq4n2|ho&>OI%hoQb?KsIu@|ub&!SA9@ z|F@`}_i5fZ%Q8D)y1{>TwdbKt-qCMc!|J{{g_HTdIT)6wpyAL<@jS)7j&GZ}zeyc% z;ml>@8NrqA6iePESoeUvfrq2LdXENB&kwkO&NBQM5bSAH*|bE7yjjlE%g!N1+|1&f zukprRUvqahU^%I4YHAuW^LP^Ts8&B!k!`5r{5$=3(w2et$i%_do`)Xt?AADHt*g63 zh-W(X(@)nLe!is>VrF~GWm)+rmh;clG&ID7ghsQAC%!%k4GlfkU%GDqqXu;QjsVYC z$p^u}W4l=Hl&*Vs<`=(Kryxg5e;fLbEPIZFEDqHYa4X^wUx~EGfq^F@zDB%E9R(`) zDoW+5oy8!)<%-DHK`C*(l>g>og$GW>@8srGi|l`3c^C;Eousq(48SglA|OxCw@u?O zm}cgZq`dt6nB-(hu<;F@dN_pq8%GZZ7Vro9K>b@-C(5To;R4_B&5&X>X`7B+K8zQ< zH>t+5#~4a71odJn@PSsKE?Iv^P8>3x+TOT%Gt z&*=vfa0+T&%ZhpWlfG7AFQ%{}fSSWG0YVZsFf_FM88%y6e8jXA{?gww))#gi0QLXl zE<2=I(AyUDmzD7!R!!u;v2zZQ%tU6kd_v9ze^(EO{KnnO_HIjkrZWg&+-jU|S?gjD z#=lLvQYQ$ag2RzFyK1Ex{g!t~%AXym`XG?@U3j@`rD&2@%^)ze4k@T?C$Ev>+%i8c zA^()Z{(qIQ8b9*~`7Y#5?e2UHYT>rL=yXSkNmvl6MEgay`L+-&uN}tffBIjw)5524 zL#FG`r5_ER=vwCT7hx3^osP!$nw%uAIugk7M*_uO1onB!)8?ml54`6>1)>9-g8w2K zY`e^uW;8WkY492Iu&rDQjJ_}Z$@u$!&Uy4q)GjYMuC+q)@4cJXxmO=KY_QrQi_SO! zK16i#cM3JqGiQq9=VMmir6<9YXP6QSF=I=a>7PAI+811JUAZE;Jf3vqkoW>4VHLWv<&3`N{Je9B)_6!(gTc!nVbQ5h zk+JoSH+)%4vFy!@e~^!P!#Hs~B;%VR`yO3{#0VqUbvb`_I?KH>-TMmCBYp)-0F>}l zMH;Aj@k(x)z<>#YrwKOU$@By#Al^zqpYnhXq?Lsv|(jx&+}loU7m9W!wNZp*5gy zHy!^xPGT-{DczT~Y~{Eu)~gV&>AT{!7V+|0gHcgrA2MwMQ`2`xD{cv@v#n8Qd*}T{ zpBKG2;dIXV;4bo@Z{#SAJ^1rETnnUNPgaOm?}}KRNp~&^`%HsR`&;Z-rjrXK<0+*T>;hLg~E6{L0sOd3jM3Cx#fk zeg**Vo_V^w?a@W{di0rDB!?;CE2zdZedmb_6>7^ppNJ%Qjp5VR6gtljUKs5 zaQCM_<<>4dMcgMXww&?@>X?w)ZU7|MBCsTfOj{sG?PIDIM~-Rki$E`TcR@wAKaK#i z+}PvsV$8j9+C8R0PM0AWm7yvd$3cl%n&BS9Zx=?#2x<|wohj0qgD)3%i;GowWlu@r zrMfDcleS$rFBwg2XAQ?X1NO$w<6ny@*%cp0q(H z2Wv^P|^?N3{$8^WU>tlZyN)g&<5PQlGy})*&D#+kiahm^L0>N z2`%TaF%x>cdwkyIx`JkjnP04`!S({dg~AUCO?*nGhe4QtbSr)M6Hb`o2S|N#WpH~f zx4COtu&M?LbFrc`!8)D|dVm>VS|d1SKy3xH)9&g1vf}C`Lqo&DyTht(vjhG4p?}@2 zclPjn_PnwB9qzKJCGYNid>=p(>ZtVb5?HBIW~%2^w~cAkT2G$Zw4GMgpQ+j}zR)d4 z5a>7j8nXvO>T{y|dvq#qj$vKYkO(Q?oQCHZM$d*r%Lo5&o(HKG!FK13t zlTY_u#gD(9A;9j|Ac)~yONk@Q;M1Bs*2kxudpCqNixM5KtlVtKqm?X+`%AQ>sU5zy_<;o>IIi8mwOi=Fv!128YUv?#f=);ax@c;= z!eTOZ7KKEP5=v0PGYu+Dh)L9k0X$0#l0_!K)qtgg92^UKbrcdHu^#ml72e*AI)f5q z@ToH0;s#Y35K#5y@k?{rtzKSW+9HdIRvdB1 zIs4)}2RO!%%j<^A%-+T%qpu?6%C}PZFm*Ki_H9vVjY!VV5g1=2kfHBEjEgza~l__dj>$dYsgtu!_=+ zbZIWzTZETZe;s*A~h{$gci6&x5iClL}B2F|tpzw++Ej+i2U;*_5> zVSWZD*sP(9ngnw3u#8E_vz(6Q12BoaDG+6BqmfEFZ<2s;k$7W9L0@2Oudq@Ex`?hEIO}tL4zWuJ$pDKRMX*- zwCK%h&15E@MO9X4{TI;+6E54ZNkPN7L`e}RlHttgBVny^+83`*d5h~^3&=`t;%Uic zCfV?Q*QGR%$429Uy~0}LDgu&>DXY}H99f+l8+GQ_HvROx7`CN_bUwf*jK0O3L^Bf2 zwKXkoK<+A;Uz~w;F(M~r+1zr;vUn0lTv(xQ5gr~}udvqToa%j%-ME9Zl_(M9x6p^C zOo9OoT*etdw_GnF*hbI*!ba8(hu03zN$3DJwXv}|Pdh({{Qbz0Q9ykNkQ<1H`&0_F z!P19|`$7KpRbo1nuZ3do4*dq(i5(K6e_&xgNf9T~ zCQhGtHT!gEeeh?TWKPsV{Mn$r?dl}(Tnq3^>5T3RaEuo-iW0_=%k}a!8s=#v0-!^L zeRGg*a*jfU&y;UaHli617+EOGtD++V z4f}8)l}C#0_(Sv0eF`~1uO=$+!7WNdKmRvx5-F45{F&oTBo(K$0)2QNqL>#UK#u2x z{(_sALRmh*r4%}faiF*1YVD)_E3Q7XKro>()|7G-9RTSPZ>2ab_r}}tqW^n)IHFK3 zljF)+K`m_^S{#iGBis)w+_r5 zM~k`-trzp!Vwhnn=`7;!Ps^PW!o@TCf@|BRPAJCu9;I=0>9Du@D&HWxVQed`!<$}l z2uF_fEQd(H+DfVMsuCp@(l(1u?M&{z(+T5mUP8jHn2Zdnv!a6}P=iVemG_))IlwK( zJ#U~V&^b7$^4<>d=7m6@dqhBfO^YETCeW9XOOt@WPR`S^Sex?x`DGP^660Vp_T-c7l0&0u%b-@7;Nm~ zumT$Mc5hJ*IxfbWfwVg9sPB@?QXOe8^KjOSlU4_mQ3-KL*{7}RPzOI6{tTjhN0x~c zu)NSBak&FtCj%~79DWK{WDNKdlWiTbOmjZIX6U_Z!pNZVeYeF{@m!ZieT;6>*I$es zU(eMK8ZIZc!g!y6CfUO@kb`Y2wmT-cbdg|h-(=~*`$o&m9;){(bKI=wb)3K!(JZ=Q zyUCz)_l}sg^@>QEC^2W8b#|fiT%%w6MRvZya>|>16{&N6Wo%s6!(>%s>-fj;#lMKS zgeOR>e$lJif8nlj{@x{5M~mm#^haXlv&sQGe{8XU1R)9pQwip!OdWfx}&2k`MqMluDAa_`H1eZOwO__4pR_&?G|+nGd8l z#w!xjn-IHv^4k$sm^xye+=V_-urIYkJDc%=9!JZy9y|J@)u#pqSKfvg!f?Rd9lpQK zbB}IfLQFE6*gYCb?0h3`IKVj^@iGJ((Bs_a)EJjU7i19@i1clRvl0$JXsH7y?!d@G!J=S#T7uNP zTUmd=Hgl6$f=>pY(ktem%(is?W$=BqU_}DtRrBmGtZvrE=)bdhfbuq!EBZE-gnZ$s z?CtyN1jQH?`vP6#Be6Yd4}{}x7l#vTZz>`dB8E2E$JVdJX53t|G{FdtA#m7cUVZ+f zfFJaM?f_5J{?n)WTe?;QfI-nhH^~23K98=Dm(&^90z=&Fx#P^1kC8HFu>p=;TMeFZ zlJkQ+2hlqA{DdmqPt_ERe$w1q>Q--mW&sB z;;D%6g+v`mlcGHSxZuz?RJ)KB9e&hb|4nZAyq#S@TN~0IlN2LLqD@e~cfGTm|Dnk) zBzu@WI4DeCO)Yhhy5#UzyKUljunMqJ=+{Z}e{JLbZ+eygW25)g?=SdoZPEWn%kw{8 aW)+!}NVqMeX>l2S4K4M{YGhSQzrO*R8q56v delta 100304 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 *(&mqbE()a$e}x4AWT@a{fvPf&$1TO54&9+y;M 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

A>KATI^EM*pm@y8K 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 Date: Fri, 21 Jun 2024 07:53:30 +0000 Subject: [PATCH 38/77] Update query snapshots --- posthog/api/test/__snapshots__/test_query.ambr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/posthog/api/test/__snapshots__/test_query.ambr b/posthog/api/test/__snapshots__/test_query.ambr index ff4f44e3bb774..acffbb23e3ae4 100644 --- a/posthog/api/test/__snapshots__/test_query.ambr +++ b/posthog/api/test/__snapshots__/test_query.ambr @@ -496,7 +496,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), ifNull(equals(events__pdi__person.properties___email, 'tom@posthog.com'), 0), less(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-01-10 12:14:05.000000', 6, 'UTC')), greater(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-01-09 12:14:00.000000', 6, 'UTC'))) ORDER BY events.event ASC LIMIT 101 @@ -536,7 +536,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), ifNull(equals(events__pdi__person.properties___email, 'tom@posthog.com'), 0), less(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-01-10 12:14:05.000000', 6, 'UTC')), greater(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-01-09 12:14:00.000000', 6, 'UTC'))) ORDER BY events.event ASC LIMIT 101 From fce4e66bfd2ba33f6757a818b7adb9828296302d Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:53:55 +0000 Subject: [PATCH 39/77] Update query snapshots --- ...test_session_recording_list_from_filters.ambr | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index e1547df52b7f0..0db088ee5a38e 100644 --- a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -60,8 +60,8 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_7)s), person.version), plus(now64(6, %(hogql_val_8)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) - WHERE ifNull(equals(person_distinct_ids__person.properties___rgInternal, %(hogql_val_9)s), 0)))) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_7)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + WHERE ifNull(equals(person_distinct_ids__person.properties___rgInternal, %(hogql_val_8)s), 0)))) GROUP BY s.session_id HAVING true ORDER BY start_time DESC @@ -99,8 +99,8 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_7)s), person.version), plus(now64(6, %(hogql_val_8)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) - WHERE ifNull(equals(person_distinct_ids__person.properties___rgInternal, %(hogql_val_9)s), 0)))) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_7)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + WHERE ifNull(equals(person_distinct_ids__person.properties___rgInternal, %(hogql_val_8)s), 0)))) GROUP BY s.session_id HAVING true ORDER BY start_time DESC @@ -518,7 +518,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -601,7 +601,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -684,7 +684,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -767,7 +767,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true From 88a3cea29bbd40d82b3a1e844f21ae1149abe58f Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Sat, 22 Jun 2024 13:50:34 -0700 Subject: [PATCH 40/77] changes --- ...t_session_recording_list_from_filters.ambr | 16 +- ...nel-top-to-bottom-breakdown-edit--dark.png | Bin 184785 -> 184810 bytes .../api/test/__snapshots__/test_query.ambr | 4 +- posthog/clickhouse/query_tagging.py | 10 +- posthog/hogql/constants.py | 7 - posthog/hogql/database/database.py | 8 +- posthog/hogql/database/schema/persons.py | 48 ++- .../test_session_where_clause_extractor.py | 25 +- posthog/hogql/database/test/test_database.py | 4 +- posthog/hogql/printer.py | 15 +- posthog/hogql/test/test_printer.py | 28 +- posthog/hogql/transforms/in_cohort.py | 21 +- posthog/hogql_queries/actors_query_runner.py | 66 +-- .../test/__snapshots__/test_funnel.ambr | 40 +- .../test_funnel_correlation.ambr | 104 ++--- .../test_funnel_correlations_persons.ambr | 16 +- .../__snapshots__/test_funnel_persons.ambr | 6 +- .../__snapshots__/test_funnel_strict.ambr | 6 +- .../test_funnel_strict_persons.ambr | 6 +- .../test_funnel_unordered_persons.ambr | 8 +- .../test_insight_actors_query_runner.ambr | 400 ++++++++++++++++++ .../test_lifecycle_query_runner.ambr | 32 +- .../test_paths_query_runner_ee.ambr | 172 ++++---- .../test_retention_query_runner.ambr | 18 +- .../test/test_insight_actors_query_runner.py | 6 +- .../test/__snapshots__/test_trends.ambr | 243 ++++++----- .../__snapshots__/test_trends_persons.ambr | 180 ++++++++ .../trends/test/test_trends_persons.py | 2 - .../test_sessions_timeline_query_runner.ambr | 56 +-- ...t_session_recording_list_from_filters.ambr | 46 +- 30 files changed, 1119 insertions(+), 474 deletions(-) create mode 100644 posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr create mode 100644 posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_persons.ambr diff --git a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index 0db088ee5a38e..e1547df52b7f0 100644 --- a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -60,8 +60,8 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_7)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) - WHERE ifNull(equals(person_distinct_ids__person.properties___rgInternal, %(hogql_val_8)s), 0)))) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_7)s), person.version), plus(now64(6, %(hogql_val_8)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + WHERE ifNull(equals(person_distinct_ids__person.properties___rgInternal, %(hogql_val_9)s), 0)))) GROUP BY s.session_id HAVING true ORDER BY start_time DESC @@ -99,8 +99,8 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_7)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) - WHERE ifNull(equals(person_distinct_ids__person.properties___rgInternal, %(hogql_val_8)s), 0)))) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_7)s), person.version), plus(now64(6, %(hogql_val_8)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + WHERE ifNull(equals(person_distinct_ids__person.properties___rgInternal, %(hogql_val_9)s), 0)))) GROUP BY s.session_id HAVING true ORDER BY start_time DESC @@ -518,7 +518,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -601,7 +601,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -684,7 +684,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -767,7 +767,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown-edit--dark.png b/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown-edit--dark.png index 53a5c8db24622f933374b8cb0b90512b0d56f8ba..19da516ab3674d1f43ed5b1f262bb11fda05e3f7 100644 GIT binary patch delta 131678 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

S5x)_gjshWSVc-&fm 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¬U4oHha%=tEqb5dOVS#D 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

uDO+vj=yuZk+t>7GL}{TD4BKyR>?7 z{e+09>FNnxvEAZ{KoMd19g?lSh=ELLW`l(owktXn8u=3HaDaU6jwaYStSA126LPXn zQ**Wy>3 zLxE->SuIzkE0H_g=jy^xw%Go(h+?QnEojHoTg30&iFI1;G*7pHE?X|;*iC`KLl6J_ z2oXNGE(4cufBcB=Qs3ivYr1pF4Wrz4{&A#}M@)Tvy-aC)xZPX2Cy0qMlg2<5nkc77E>autMy?UJUJ>I1k329OJ$-q_e? zP2SgA?u=Xf6A&s;^!A6V;O2;p@#YBe`tkd|ZzMrjH_e|ZZXN;@)1y;W;f>%aH6LkH zNt$}b$;EXqRW_G>mSv;@OXyFnq4!Awzl#8IEDVW$)4ItKC8+r0ii# zrrVw*h=F#GZB^*X$zM*#-FAP8Ru?*IW?Lm)KYa+pzE3kLxPYCbXZbD0>sftd z-8P&*8qa=l*ThSZQ#M(ik3D|Aapt@B_{FKij`z$nmgIc3=x9jbT6a^GF7{(z-@`(k zy6uDW!0;rys%ig#z^rw!7io0zaI0Ky)(_5qF1`R+Cp@Lf`C^zF-ol>L?aD{;5%0kZ zdit2tQ&&_})L`=wf2umh#>Ktw6~{-LoMs9;+a>Yt*O8~NF{>LC{c?tehGG$J;-`BI`3XFY9h{ih(b+6vMee0}L-|^S(e0uD%hg;Q zd))j`{h{t7M+=GRx}DveUhHIme0g1Xr8Jxez4eLxgMSgoNp*|R?=tjLeUdsR<{-ZP)I+;XIh_(FQwp*hQG?s|--7cO~!wJdy2{ zwC=oqwzPcJ`1>s{iTK^aLZ33CFu4uHu~{laj*W30UsgmCu;;NZAmFx@+Ma?JcVU`v^M<7m zy#@P;cNP{Fax_Zr)VMn?UT{N#0LkR4!LgjoM~$b? z!>7U`(j3>L96e88f4Qvf;&l+oR8`C~mh`?{H{BS`mmXz^v|UOyLLx-52ZVhrdE6L~ zHs%M_jI_7;G#pklQjRk8?>b@@8jh_rR%~sLr_R{+hJQSgjHV7(ud=>1TB!4ak3PoP zN-IM(pUZZa3CfmFU0&7mUIb)e{53)*SuRfRN@><3WrAG;e*E2x7zTR|lN5ceVt~VG zJ@s9s{qb+}N3ruY1Lo{}6BRg<&Ra`e2_;~aA~_1Q_5cJO|431CB6{yL|GylI9M=3rpIKJ#iB05E(6iX3HlmkD(${wsT61ZDc77YYeRQ8Mj=y zJPTFHR}J8tbw$hWY~~y^HO|vBC?_rXRPq8sk%N~ih8NP*^M`@N1%#&1fw z&-hnZO}di9h12GOxM%yz6-59QvZl!SAahd0~9p0J`0bN z_xiAUSMXLn0L3hJ1EY>!hmUHBF7Eg8U*OJmCnFAIPXU8+wwJB9c4~Wr907N zLlZt|#s;ILqB^@ekU$v0C%ts#?Ya8imwLn7yX{;M=YF^DVga~Cqx$1nrgWTP&y<^S zlSxV1usI7~kpfMQS`n7T2=rr7yF+CC%d5%Y$WW2|;RVM^G{IlC{qi#oCM5x%K9SE5-1+{4;^w59TX|GU${yqpjWSOvqq=xleIHp7^Jzsk zeqRxs6S_ZVQ*~%L^XtI}*(A7dMaAPRX`S`*BBy*3$hs_i` z0E{YX{VK_YL&0PwL+`zN_v%eb-i^-!rrX!>>)2)(J zEys#Oe!bht0JxefMQ-GW&JJs*P=5bum2Qu0zjg`wB?>!!zZ;w2bLYvl=3|%bR`nfqBbrALWlCzUdVbo}iZ*AF zp*ZzlC>CDW2-`?7PvyaB_*G<KHUScz3+!9Il7f2Zu0nMV32a ztFe`1>E8Os6hr}Hb^s#gq*!ItMv}4WB_=5+r69$yg2kcLWaAq|3`Cy`r7OMDzBmI_ z2od*rWUoaWgWevu^E8LoO@YBqvE87FW~t@tBlEXz`+F#SS4+?FuFK;Af0(-MG@zxN z+JQJW9;1Fa`fGfveA*h*y=J!E*Z=lQxu9tBHy=;=Z0|yM(H@aL-Em2}F`N>6u<3Ah z{-7tNuKwnZU?U*vAL+6sgII+mIc#`qba$@Gc=>bd1h;pmQqp)Yxpp>=H)$27?5fW& zyqnggpu3^G?NWl73q4K)aSU3obCsxQ^=gTTNxeT&+z=UUjv&S({skweUxY|_Y=_+m zS*Cw84!O6|oq#M`ks(qfFhb&BuF`p042CQ$rD88-*Kz#LZxx$#pUbqC8#J20cpS}E zy%1@4qam-Y(-0ZBw0vleiNFn9{c-i18|R&wTlMLrkjd_i?%#h6e^SSOyICYIH5AB* zQ502QLQ@cgCRWWGC8tvf9UPXlSH0#N*fX%H8bY;J?2eAZ{cWC5jd$4+o`hfcvv;G^ zdey!HkX>Y#4DB&mZhR!5UKd@Cxvh}b5liQu?Rzmu4R3vb@qmiu7f%w04H>BaGNszX zlQ=8v7Vo6NpIFnY{-9AS)a~BoPwF<=Iu`ASpZlh0O{!9>y@}Ostk$j$eSXKrGQ2d?J51u;1)C1H;S(DeW72)&=>xA&w^mwYg^2;-zy7 zeWld$%_9^(66{5r+*o7~;X4?@K_()eQVW#b&ZyaHi>nuM*NNjL zSqBsOj00t|FQ-U2L7M$z`Ez%!G17!9YuqpmlHL3=6#S!yB86lHfSnvIPPfX#h?E-! zH9)p%5e%jNk!IwRZ@hDaEY@JNGO2d08h11*RFUDb(d(U*!y#5kC>`5xk$~FOFRKwkF}JBd;=Sc~Y8MTb1)o9w4dS&l%!-;H~kJIOJPZ+EeBD zvI#7iIcnJ)b+2@`PrPb$4zgr-%cnsNF<;A)nXATmwFmA3ZJk9QBPNRN4)6+fYvewY zH~h99_QiP0@XNcA8iM`cAOyw!{&J_?-U3xrRMhrF@8aI>YU+jAbS0W3mbkr7qY_o_ zzR)t}BG!WkX{IOE^m;!(CiOF`{BW%64NL#g^m*Ka+`moWAA~>2=>lM?BetgZVspr5 zUfJv1&3*yI+kW^B4kqb2H4q5WM{+dk3~)%HbF?_9h*Ex1jRrTF&pEh23(mUMz6wgk zwY6vNha~mI@R@IJB}l;vSDo3~D(c11_r;tOVnk!0S8lvs<*)g21)_3;`)sm%R|s^?Q1 z3z?l@b-!eV6ZTiW!$4k(vF>_Bxwt2lBQ1?g;Qr@i0=R0o1fMIHD~%g|*xFe>G+Q&l#rai1B)^mG4PT{?TD^rP~ti5eeQG1Tz4Sxb)*^ zRf2r)Vs@K%)UqoxyYTabnp<}ck)ppFu~aSDiD+N7)S2Y(i0S_1CzSpNA8J=s0QuE;^%b!zrT7rLh zCgQ(b1-X11%WdTA;3?=cPHL>Ni4XGAfB7L#iEdxdLf1W8UteEE+P5^gAFHv%@6`dU zr_I2*XJ@Bf^Y!Q|GvMFn-9)0$&eYHBmtoi-PQ|~%i+UWr54f?*^x^l+__DVXWMVki zxV=^^b%QAXUfsX#wnpG5`B+9ZEO=-0I;$yE;l`@@7%g2$Qc7lFr8_BEz~K(OH8$$> z@xKSc#f_qG3;OsJTRd&o_W1G)aEZZ|ydKA>z_O6u9J=a6^PdM7l>GIa6dfI%8ql|+ z2KPQ2Ei5kH=fFSU!TdKa|5TvrV&}%tb>T_t29b$I{8WG3m!m@UAC}Dj;U9VAop8|u zhG-rJeB|%P`jr&)Z44phv*he*6BttbrDOZ6m+JV6uPMF;p&^TZJ zd8r;@x9XJh--#5>0#Ag4`(ftW3!$eU$Wx9+r7|CvYRZ0)3z|fbG55>)cB6mgyRUZd zbEvS0i0conr+g%*XK_?O`B-t1&=@Fw?ZxBd`RQV(2v)zh_(B~jGkgN5n(ocMzcVRH z5@qa@8Y4yZni|L4Y5$c2PckKUv@KUMsMcUZ=IjLF1mR+#Vg=MpOb<)NL_9tDNFt3f z{b}g`{1HAoT*SVA?;h+M@F`%D?g@+*&9?2wV>_Ek&kEE4)ViQ{0V2@KB~vOu@$b$O zQ%K$7O`)&ezDb-J8nvEJGNod_y}oiED$q&-lArPTeyj$G*5CbuYZ*nq>j(H-8k&2h zQUQ~Q29pxQ((!>V23sy7E+Q;Gl9xU{K0ws~g!>y`zmV|o#^^?6OgUn~t*g>W#L7Ts z=Oq*LXt4H-LA)p$=gUoPe7kb3!P&>RZV>TD8koTOt`|8){&Jgo5cW-Xu!}hO36_@D z9)cP!*4SsTgUYm$@!9iyF9n27El#@(Ty~#VgW&`@#(EC4WroD|<} zqHXO`+4)e378iZXnHNNz*VGhrr38R+(Ds}nzIfMMB>iQ7GitWqjP19@Xkwa(ZsWS` zE+A;Q-BY&Q*N4dfXG06D1t-trI%AEDGJ9zHa)yD>L=sn|jiSG{>w?e9!)?H{g*Yj< zUpCKb#kzM-9|B&BF1_81SuZ-Z!Zo!jNt_n@S+92k{AyLsvUpt=0@Dt&GAS`Dr4Fk- z2Lmr{&WSVrZeN;sbf;f)am@#`fXXSD5RefTMkS4Kj{{uefkL)5z&BGx%&51H%-A(S zvfMLawT9ok!O*dOYG=aw#y9lausNV^3`-`VlD&ul9*=FJB)H`*eE`*C7`49CdbzJu z86#`+eV*I%K|!P&ALO!^N2#O-`EShP#KB}$2=Md2FhyO884`WnpFaOX2i}lG0|UdN z6A7y8%qE4}=1fx!hk{5~-~WJL0E~&Oji#&kJ3w$4ud;!%&XH@jzuW=+I*p@>I_$*7 z)(i)hk8qyM=M3m?q;v>5f%YIC6-_B_DD{@;Z&bU?0HP0(Bo<7&a48X0GGfUH2tH~M z8v3D6yG0bvj}f*IU!c=gUvEgO6euN}y0S`p>$R*JwSJB{+&Kj&I-eZ{339%Xc%-LH z(d*gH^%;;rq+_!lKUC=47WPmMcSe(G$+_S%(>3HT)|Oi11GtEb`forq^rlUR|q=ZE;P zjiJKk1yX3Plr!+x68v2Cw8Pv|(|1z^wFH`p!Zw6*!D$jQgb-o1LM zS~wpNr+aHId{l2GA)6#yb($JL^5q%XnxNZg32US9r(joeJFH$L6LNiH z$_+sc5N_C!jvGAt909aGz!8p4wji86T*UUo-PzI454T^Z&hQUdkrERl_32;E(@>yH zYigo`CD2^~f89B>h4x{0mkER}mgybcETw!V{ID4w&e|7mb5!Wq2p;&L%sH+{n-(n3 z(LejUC|h(x?Y_ERch86*VEGatx(b=Sa^iV~9uP$-{{tPcD&cyXzOJQPD%=+Z zy1Fo?)%et5_*0+l8S8Yf8I%4`O5?N26FhA98WbQSfA3+~VPF5+J095>>^Kj}N_{P3t#X19Y(@)?KN9fh3xE zo>wXwgoJ&8eEWz<<#ssrS*j{vOsE<<5ErXFItDXI@T>FVF+)u4*|IKbeCiiw_g4bljEzv8hqKI(29CK#Lv^2;j)A%4YkDa8h^% zSfa2&xdKX)xXFNK!@aW$`o#!+Nr~so%#SkKgT*o$%-9S$k{qg^7q+RFn!nA_Tt<faE?nnHA?c@BLYgrHIrUd!K9=H)x6IW~j7BRqszc1TvIsm^crAla|Qr z{6=Y&&D|`OEN}fbSK{};MR) z>J{efAaDeM)9{esvG2H{!D3c7e%Xm>SGQK#K>n%`(#fktC0%TFfdy7W7{mx#0+N9|Z=Lk0p)0~YZJl4c}nKC+}i1biId-H-CTe_yIO!=+`WN%oHM(cpBC9=(QYDoaBm zIax0eCl#)=&8DMx)G<$|RIZe({Mg1mJ`;aB%FJt;)sFJZflDBz=TKC_TyXD#Uyy=HjL5?n{li zJ)!-Q8uD(o0hPPh#48|=4WxPTo}X;W0)a*^Lb_^ttj?Z8!*;jN03ce%#seKvM3?WI zP<&vZgLTZ5c}=Vjn&#@&F`x&a%1bRbC$f`!O#nX=3>Q5W+60nN;IR1-No#X+iCd>C z&u<%P35iFlMY^lXYkSVuVHNK-v4Cf`sP6dj3%TTljbRJR=`z1P{z^r1a^F`h`Onn= zd8GQItBSIrz|L6J8NE3mFmQkTMf)TL7XGnZV2H1LOPFx360_y02O7B|Okc8CpUouA z#7EH_Zz>!TVB)@SR5Cdri;KB68~6Iwg;JKx`$E0ChTgi%79eqZnUI3o+tQiW2L@?|YXlQsq8Ccw> z;C|#8rkvdiOk#BgRRy|D0IhPnZ1V+SUA;*ffnKdo!k=Q`U5i%J;{aE+T_nxFgqntp zNlDFd=GRs{zq8kUh`%-MQeSkPi%n}Di{5HQdTl-&_T9km{D)56XR5kaMx7%FzDorU z&C)O_PK{5Rk0udkHlu>NwVnZhRv8=3#NkPa04n_1kA`Hp{v%|i*eihFy}=G`nmrm0 zvtRBw4`X(kaFI#nNB|}1{>8u(l|mI@RCE0b2#xVogPW7gPW+4UXG7*kI*+NZ!{2ix zjYD(KyAwH9F2)66#TF-|z}S+bT7Vv1o0!<>BE2Mjv&``kPK_RzS#tORH5r%=)gLph zu?m(56^$BwwozgI-fyOm3#owFrN?^-7o5%BerEKOvKWLn^P!v`X+{BHkyTHeoxOkm zKCm$Z@S|CP7t~lc?Ex#ZnhhB?&jj&dDDSP``XKc|mjh$5fl*6I^}f`mGjYE;dsFjr zw;xh+nvAC}IPB5I`KlrT9#K_#0Go7?kg=j}Q~ z+}!p$7i=i;)4To6G}3zQ$mjjUr1D2-ZsT{NO!MA#PUN%8x;VF`ev+=Fx_h9E#JD-p zR-I8QEE%_S`$7W)37OeEmTp>9Dut&sM-A?rI67J|E2=LfRJjULU+|wCgK*e{v>NemLJjK5wc)h|OqZ~*Jg?JGPa0cY+j;^{kq^HKSI8~mU`hDK{o?u_?*=+u$NZqT|V%(A=Z`AVB zcEzFLk!e@Eau%~&2V3gs`Ju;UgqMFCJ@go@`QwxBry;&W>Cx;Kq9*R=&i{++5ML>i zG6qV)r-%L@)_~Vix<2u~9jyxvX*Y<-;Hvh}G5BAahsh=*8i7!=OA?x=aF# zsJM8EJHlOnl(*;N;&qw=6R;kxkHTN{Gykjx1aOI|_bs8SySxq?L+_Do1pkW_0P^+$ zxut9EGqN8eAk^FNH2CwUUsoG#C*rniyLx;R1#p*j|2iY@%YF&>lZ}Sa!P@16pNqL~ zSqHSBYz-A&V7>mcn(8fj(n|7f%D-JE(Q`Gy^liRCeeKoV!D;uCrjSF6d4L`EMrXxy zG)vK;t?{Jw)DQq775i{EjG@<{;e$q#Eg5(XP!vi`D8Y#~SotwNhH#m!Wuj$%1lNs} zDj;W4NHyVK{D*%tU5Lg1e=}V||BLIA^j--^iBJ?8z9L=Ji}iOZFO6D&1)`OhSKxL% zsHO*XHlh+8+vHwrN7GhtyfIv;!*0~!aWMu{2pTMY+1z-OIDTsCn05M6KHOAR}F-aYnUWAt6m$)F+)giFNb8cg2M09^Iapeh;2?-ly;N>38N zq~MR{+X$TDYW(k%A%hNZX86vS?2ayfj&c<>%xQCE@3;V@v^qu|;8JIYjn#UM67R?Y zw`>2pBVfy!ryY)`0n=?y1>kF=fOtW=v|X?_T2(aQT9eNwqHPIN`;PrVDRNt z)J`vOXn2`i;)jbN-?ii@dAE67r7HpoqPADa{M;U|=~TRRCxAgkfjUFPe;%o4 z!Nvb!*re60F9W0uuwrV|qqKQ3QmD70vlBF}IDRSQzf$W4<*=WwJiIW)&3kuHRJ?V! zu^KI`TVD;jONO3t@lr(}oV5X2R9r^gFy;*L^kH*+p37;zS(3ee>za}&&eCn64NDZr z)f5j9iI|yqWR4Y6>kK00Z$b0ME|4=(n5_S(t(VzlTbJf{O-MC>TBG`0YF{bHidMQ@ zLXydg+xjsm=Nm{pj`u;AK>~<~fb3ni8iX>$Ibp~aD?1$OK}3I#C-aDl+t^FSx(`yB zhKKRJ@yre!0IHC#c#1EIJ$OG*PR8rJy<+0X2D-Bpej1_yV6ZxU#|2PH>n)z6%r2BK zV4#sCU4<@pHJU!Bu|-xZ2Z*_<`Qbnvp5D6#GVqkOOX9R2Oe&7(d`ukIWe@L%5m5VIL;nVu>dx`3q`GIK`Ni85PM8Q(sC4Y)zBKA+EqC1G4}JIXO?HG z!y2AGXbu5yZM+P1mr1A#VN;c2o(gz@i;jlunc~o@o#dQccg*4))(gH|lbfV5v8Zao zyjI5p#ayHyL4a6>!CJ8khIY8`WM&VRM9Ql<>|7077m}$D=%tz=ow0Vp6~JWUDR@8# z+#Lr`FWdeAWAUV1rV>@;W{b1^4Q~8S9t}n|;`m4MBrxPD7 z4{0m^igDk;}Z8Hp7Y~%$=|Y{4sFwo34)eaGsBFn*Iqy>and! z*tY0=u?2I?2f!W&4=-`PZn!6=An>g>rM<_*Fp-Lzoaow0s`V@zdaFzdNJ2(y54+t!f-9YX?HR_#V!-iIJL(pBMl=zP3x%i(l zXfL((L!P=-j@)kez2HMiQE1)w9y~zNAKyPTeR9gX0>rdjFrhjm>k>$1x7>^wB)Uws z-d3|mvDIB!xld^3qbJdFS7ayw1D6#CD7By-MqN>@F}VMr}h}_PaXd| zmo@FAPUiNvIY*x0P)<|(B3Ep>QuI+`f$#SfKmC7ttO5V=e=}MCzj~}`x{~Ey5R?)C zP;bbCb|Cd7SbruN9~rMe>mrl!S}^Z*(kIO^rjn{vzLUDRnr76&!K%BKe<-Z>g2IX~1Rz zP!US~$5{NQzd@;i;C0^n*B+|Yu_yNt@0Aot6l;SoE55Xr5xdM%t*&&N0nQn?J-Qu# zeRKV3sE+dk2$#qCSD?L)%Z}yBH^hU5CTeZZb*%cGR@TB}2m}gyzyF;mJ}a;!+736JG&I}hfFBDF{8~Cjn~?4d&&*iNGO2+XUBrmMr_qQ+?U;A z6v=66J+qJaiHfQOHYa z3Rv*a2so`JGC!VVzh|}EAMN_eo-(TI^|{PSbN;wISGfughVxQWnxFkU+T%u z>RehQgwODL*QHCR>bic}-hd^ccsvT;&z>Lyl&LVWTR(r=5pnO!2aZZC@40fhACj7n z7Pj|85t#|GF^W-Q1**zbstcu13G=>;xK|5 zeH!Q6MuIG&`zeQ8-=rC!v!v}V&A#Jetbz7Tbc1$NfwZraNTo^c0iMb4)Rj zMB0tzj+xafrwzw5l~iwmp4G7&PLNvccv85cqU;^dCJt^q5+Xq_-!R?Vdsra+q)}8) zl4m8Jce{Yz+5Q5pryX%GJF9k}HcsUiXTQg5jh@Q$UGWuF9}4EZE%2R07%W0ruRM>> zxKh)705&=78L61$sJIS$U#8CGd1?cKWCLI%fXf=0v3mtubCi}*oVO_bP z!v1_$YQFeMsSeq4rA(DGoV>xc1bsIdiup`y;Y5ONETF~rOv3qk8yg!#8lLE7veZTKFsHtV%@trlkupBbkzRl;Wk4UKk-i|cj7Pr() z)o!jcSo{*OF}s2OqytdXLEPS#w+T6{B}@42p*+BkP5ic&1Yr#5WU~X)_DB+_&BlJA zB&rKYcfi^4xXbSLh99zpVB8Yfm*9%RNoF4^l}Y~mIV`$8coIPk`U;e&py}X0o$HQ3 zm;%zqV`C)eWM`bd0=h6-%p@52-j`|~P%6Uu_U7-pT@614HWF%xlpES8$OX>xZQ)p& z=b6u!_LuWri$!>Wm!xr~=Azsg!2>KNU^f9(SPaD594$BpIxfA&FO|ng%l{%*zsRl2cP7JA{luhtNKK z)|BIAlVqWGjTm6QkVJJ}ObU$>6&1DJ*6Dq)F~EBP`l#4ZG@!o=NC2p}ZuQ^2ovuRLzwz75X##T+s+wZ3 zR3+r7;upst_}B%GmUgux_rLz!{RfhGOGau%I*qu-1ZQ?3z76ZPhSI-r zNC|FYli3VeI=R{`J0K{m7?zwl3YdJ`QwMgaZowGt)! z20G#YXCr*NP)PYWOOXiR5i+!`pE6{JHhmYhNy)er{!dp&R^OMvU~CC=v-r_8=poHSqx$Q0#8n`9YxbW$6rwDZmB`k^%SZpQ0e~waSK#j?fVL8MAeI~ZzAiFt z-q#zealol^u}%k8s)67Ao44@KM>e-6elj<5z&(KEZPK0GvJ##@_S=A}#6%{;VzfuV zie&xp;pPav(fW>{Vm=7kn<+d3Z3DC37;MgXLc>+{Wf=$XEt!&(V6X>Gq$P7H~z70VyK7W6nF zR(pFTXnW~Y@gWR@js{B<_vChS!98^Ar0p~IS1ySZB`oa9gDfvg-sNV-j$dk2JbL)# z^&*M<%Do#@Y>6(!YZ{apvz+x|8U-XrU1>;FkcA^-t^fX}qcTE(V2qQ@u3|Q$phyn63Zda@d@ebs<`&s?k2E zW)G7Nt~=g&2e+OU&gkE5HYHRqI|R1&y4Rq}!S9=mcG?sutbco-OjMEO!QbW};b0cq zo#{|(9p1$qD6C|DRqDsdbDPt+S9;AK;ZR)hQurIblP=|NZ7Dsr>q?Z;aYd-lU%pH# z-6=5LPEPo4YK&|J)b+3uNUELaNGUHz*GU5V_PC7_!+d-~)#+cWr!a2k&`^w9Q5RUR z{qd)IZ{07LnK?r~R{AP0iUDc;4miM_vH7FHAr-kr@Xg5St#czz7)2l?c(-0&@Fq|x z7j#8#h*N+q|AwEX-S^brKM&d4)Kn)C)g&Bz6Lo)4T)EDhAGFNKs|>|T*+BEY+?Z=S zZ-j)N18GkrO<{M1F!Wj9Z0L_4^s0sKz29oXWo5JEQo6R{R#`pAO1e^5qqnv!@#<>B zzTv!h$uB_G6fHhN56D8~X;=`r=CmV%VLc$&z4pj=y{UP7{>y2nAYHGn_KA62s@nEh z65M*RCxy#;wl+iW;CbDTZ)z(&CcR&;KnV+N2?+@(YuWd3m)6EUiA6*#n-^)8nuEWJ@hK5XL>H2hqFY&6Dd&Q(ZjDbJJ>)6p zy7ehJ+0eEy-{LM$`ES#uwGd#%eM&(=0UGV)OH5>+@tdFC(gUsmT*`l~tRQb?NOPW$ zx60inxuf5db6>m4xkek|Rp-UZZZWcyuqyUBF|p%I!6b68>we`Y?yV*H_F<$z6BR0c zx9NQ4*3!~aeZ0Xpb2CT5!opJSc7O+(dx|)$nxrxpI%4ym)T)yC|BFcAFkfC68rc9y z*51*9ItRx5oR&7>r;*se?_3<1X^;QGRYc0^`T1rqp`bOeOX`g7lz&P|>8`R6)SsCe zH#Rmdwmi#w?2aoOysyZmz*Uyh7nKXhm)zY2|58h$cw@Y?FILl zm%b%N{U1$pu8sh? zG;V_86c<+h?o0oNv7*_7pTB(39X43|*K>6m$s%>oKx2aU@sM8ucOoVa*s;LYTK?W| z-qzDYO~oGI-_#^-0{-~OVjk9CZ5O+T2Ep{5xNw8X|5QG-Xafc|;v-6mI4fQh7Krb2 zyYKp77L(UROwh=6bwx?YM@-~_e3vKa(j${j-uP1c@AZ-UHwRPR_*Z>H8VVNH0}{=P zTX$Shm~4gWf<{{XXyj3mj1zL3H$`uT$l&qGfbP0t!lK=UP zKh0A~Je6OsZ$amuQ&Jjv^GBjmQgpV~e8B=Q>{O)&?<#wqHfVNrcah}Cy#}{C-RKPW zPZf|fvxSjDrzEO$PhiK#M@P!fR%(-ZQyMxtq@cn$Q_|~+BaGGFJBu|p@+}eg@B5rp zjJX))u1R-_bl!-b(ng#T($f&eeP0zLNs1yk8f6UOeOKW6}UVAU}-? zLt3BLFA{id9wlfbgpqP)O*x@ocrJ?nw(L)ae<{>QTx_oQXApMA)!hdjOsGH!z4e@a z3lscL!O#DHF!t9`S#DqSC=Mua6aV@c}n5|bmxSW6pwzd%~xE*Kyh_dfOE#KD0=I-ui-(ZI)0jf)) zqhl|fZ8ZB0VO5QPmVdkCIs|?PY9?M7=}n<%S|#>zKek|%kEYvy;g7~tdwBsg_6tNx z=$qoR?SQuU!Hw9PGk;M@fL?NM`ikfnJ!NB9t zYcL6oN`mIThBH5!wzl>mtq@k-6us=8!KIEwp->>m7MLuJEIJB@QHjY^yE~B!m@(+q z4(H~P5_&}rPH3ftr<(?oD1H=7lsF&VsXI`BhemoARU63p>;(ZFmQ41k<&rJfNjEq$ zY*scEHb^aOTtFsiUi24Y)>+o6-+%BF{j*Hya@AdPlCu*xBV%J}MMYc*V3c!ASjndM zKGDHd{sQVTi|N@nNfTv1qr2kIZ!o1Xc~(so-7;m3V!U+h@%!^DuYx&DZLQdusdX88 zS=l~{Yu8CRZx9ebH<@KCe)`yE_>0i`x=n_I{ZQG(%{z#IE&4NS>t7iW4Tpfo$;my! zoP7L{EJgMjv*@X3=9%aVD{Ct<3GZF6jirWFWOXRQvv4bzb;;nrt>=*um{HGF#y|L~ z(s_Og? zhDM&AQe|mQh3nD{QcnFZk5<4qsNln(fv!p#|9od$sxlGLV^G(5|0zfaB5Z;LhfhjM zI#ag{&$gx@@F(V<+z_(F`_?*Tw^*0u3-Eh65MAB{jVrYRg8YupR%2BmcHQ0MG1~RiFLx7(F9>;(MAcrA;9l4mMHvO9)WR0e|21M+c|YVN@DKW0c|abP>tIP z!hd!kBi}$38X=|nHK(wTWw9Y#pm3v3^4Pt+w?u*2Owl6(w%@#e`9NMwIjjE$6;=KB zJ=z$ZyqBW#^z^<0q7ZS;J=jG?={Wjw^%g>C#4vmYC-j=2?Sfa=a=oj_Z11W}I1MC8 z61Vp}nbVsTsU)HanO`sUq(({(Pa?0*EdKNb_4V;$;kiYFkBa-=YG{d-SXq-5i@XwIWDcf4NsD|MoBWp@eP;+RNGrK<6|DY-@EF6!7&80 z7UP|0Te(M%E={%+%7(5O|x47=0 zbLj>p zUn$9#uMBA1EBE@4Jd1a*l)2PT%ZbRf+o++Dyp^Hu6nN>jX8lbjVgG0jT{4Cc@N7Z* zEnu|nabCz646Qh`wG-Oym97cO510XO?pkc~zE@WZ3=YP=c{=KbrugU)&|AKyn~SR8 z9^stT2s)AEaeDe;?eDLS7loVJ=G|grQ!vQW9pvorFh%&SM~ZLJ(?_0RS7{gRUpmuW zJ#`+}*~i0~|1~wTHnFqi-<4r%*=`v;KQmrQIxwKo*f=^HKrKOD#g0ZMnjukSt^|ZD znb8`r0NYZpE`bSeO@>an$n>q_X+K_jtCq}n+$2@U!ezD-=(imVFj=DHt*lt*;(CxD>4Y{Q0wYxMar5*l}$L-F(4WEB2Gajt2X9fTx_2(m+gQ zd2#d43Ncm%g&Q{rui%RQfb8_VSV%b&QHqV;%?p;R?6TwW~5V4W>D<>4|)QW@`Gt-u^0GvSGXk zE&9FQG$mYeQ39U|2Q&NgQ%pSflhK1J&(6-Zmv%PcQBlNpc3bgRudwXt^F4nSZf<~& zJdTbYts-uJm3-q_h1k8v8Y#Lue>7lJ1r${D%g^lfT z??+z@Q*Z85N_KYkLqV=qm1tqqUN|G?n;g|12Mj_&eqq#lWCG4ah(XwNi~%w@NXchU z=ImSorWgy58=^5Vjhi+Vlfv721-QM?{B|?{sRl4ojraMx1G;CaYQI~4Ux)5<2RYZ& zKo+y*K<+{hqa4|PbTo<&&ezKF^Sf(HJXQYYcuY)8Xr?r6XSOO%NMJ*;zKy*g^FX2E zLi|;+P)LSBvoEtTE(X^Y*-Ud7)2-=SJEWXUbax6G9ZuZ#Ob0qFTxkLB$tzn9;I=)n z!FJggrxy~6vmCTtO#iK|tIKmR7gt_h%*?x5?9GvY9Yj}~MZDgo3?Z{`L1AJ2SPru} z($ED0P&;^a2Jtu#kBo9l^x{WU)5EA`!?6h9Gj>B9tB&1YE+|pS$+bRMw}4*t z(r}STz*+c>m!g57PapL-kV;W?Ku-3l0l5tdtB`|x_;7h8N3X*ETBwY}#Ljl!SV;^{sT z{zu0uYkHc?K##-PTKDR#+>I@IXW^PeU1w5l-7nn&T&kh)wTX?%3+FS$FRJaW1?1mw z=Q?i;H>W+)b)DJM+*|mNsw4?XnBqs#PyquZ>R=%IK0NO1b2MQ1-pLR^rdG1u%~_JX z3lsI%&jQ1hC*OtB7AbE1G47&x>F0AxtiA*hY zM#jYjrTRU{1b!?;FmCr*Zm?$z0vW-bDVqYhkdr-XBFFc=>0Qum&MzuTk-X$liX2Es zxE~=_p z)nSj%eGa|7y>6!GU({Bh>~cM=uC}_;B`S8gwn0{FdjK-|3QKgcv%Y6{d3dx>n|h48 zJ{|X%P*G8Ao?M*$NNuUz7*T%KE!WfAYiDQE6*$%9ux0f1++j=780~zRy5-{bZ1q@a z*3(bA1qHi{i6`B~fbf{JyESa`Wh^Lv`C3Z1m&(Q2l|k}$H1|$x3|A(yKE#g9{ADS zX=NH<4QcTa1}(`EKfic#DcSd0njLgX&!pY$ z+U)huOJrp!&+(|J)wlbSKYSqKG^nW``b}R!bR-bNCA;ME)wNsje5uR|OaW9&5?f3p zAC$@h7*0p?q^#^i)lVC{ZP{C2{RcRAzGM1g?_p2&cJbToXk?#T;=2g=m}_B{@< zP`_!LHGyzROgvL5UD~(5Ri%@|HN_#ia2^BjM10Jzc9&p#sRl?HSlf$C0a{IYZ3ffJq~UmysL^4zp;o7U%Yr5sZL)rwl8+D&L}yq zg8>zDd1d92tnr8Rjohcg*TIzqLPju-m#J8;)Q- z77W`)32OV_{#Nu z<9+%Z%}fai(#X;Iz>--1E$$=6yC~Dx%aGdlTu|Ruo+#z#FSZ`>Z$QpvGxWzO=u@w6 zUAY3nSY!3)KOTrw{%IWNbQ@WOqj#652)8sq<2Df}ElF^29Msg+TU%PbdY`#tE$}%y z-rng-7raJ6w$44ZIHXeRV=kGQnF)FOXEp8jA3kJXNRJ;sW@Kr1J93Jr5a1UaOpYDn z+9s!@RBs=Mj*b09g@{qqK`$J<&z|^A-`)TX{^J~Gdy`kUY17TDvxHHKLVQU#Ld@Cf z9|nM?1e0_E0zb;(n=n%Li|wSaap&y`d#l0G#J}1<*=9_*YH!|hce(#kl5b^&^BERr zXGJCY+HhqOz_eF?qHRvk$~msj%43t7qj^v41t8wJ7yhA1MQfk(Vh`G^L{Hp5_ggGY zPAkg4V7-JTrf&3!B{Oq(Z3YTvYcgRIf~l#6#i2Vc5BIj}kTf<=;8HrS?~-$MeN>9+ zOxPVPUCQDx9S-=y?D_po*pOIpr>FVkxQV0ibxUBYti{B1LKdXL- z$jdWvFJ6XUf@-q%bxTs={Kvq@M@&gc3E4#tm!ei;O||F=0h#OT;$p|b!a^W;@mfs3 z$;r7UcYsSM4FJ}aU%Iyo1%YAP-OYVmUI_+lP&71Ec!_)zu#|7~!vVDAwXgKz%(}lu z3Y|FJb;zXkM9Md1F$XM``;in8;hg9FxiFEuu{<*}M|CF$^pvw2$CT@lF!_2g;I z3KzfEUKde)VWY}>$Sb#dKFGm$_dc^G&6;?c&V?gL)A*I8H|}H`7o2N?G_o2tHm@V& z9v9MQc-I)?L`|`9NIQ~UHuQ0+@5Vy6u+(a-={Q{c_u$svj`@E45sFjLnIL?F(&N(} zt=E@{x#aA&9!)z`ZVlg&`|e$-tbP)0w{fkw6H7xk&97wznHKL>4|npacNfQ_fD>qF zmUz;1etPtu64ruEujW7v9Ae}_Kp2m?L!|tR5()zY1cHlXLW-H~tE7@B`3I2d2es)| z(i(Vz^3P$i}H{G)f>+{MBi07f0>5FV_Hd^Q-}lsr77ZYs*d zh6(|a-1bB-Yj{hJ_qg{`gV!XGOmM*ya};Bj~n`e5g^9k-@5|IY*TPC?+IT7LOCRuxy7RaqH-dS-er_*je+-bR9?cPi5Z5l?;$H2H7M$U-UqWkg>hb2bq` z&diXBC=-*vGGo>!y-Z5)4$|~Rb?~USvz7^H-b#yyFE~MO>B)OcJXB9nH8Vb81irY= zvW7Pbh;}V*<-JUI0}55CG`hc#vM5#5R^|JUm~aAg(wG+_=u!wxkjX2JEU?Xe>_mpb zh!{abkfWiC!cyVO1>O+7(TV}?k3bZ85&%D$HZZcX3em{{l$=JlX^~r2z27iUHa0yS zn_4eEOE^S+VQSsK$f5EZ9^l+GIN^wiPf&

(HIyJ$x;p*pIQ# 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�tp@Bh#zMmJhS0I+QaOYFvaRxvW)MlyWD3!qJP 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 D1n9bg diff --git a/posthog/api/test/__snapshots__/test_query.ambr b/posthog/api/test/__snapshots__/test_query.ambr index acffbb23e3ae4..ff4f44e3bb774 100644 --- a/posthog/api/test/__snapshots__/test_query.ambr +++ b/posthog/api/test/__snapshots__/test_query.ambr @@ -496,7 +496,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), ifNull(equals(events__pdi__person.properties___email, 'tom@posthog.com'), 0), less(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-01-10 12:14:05.000000', 6, 'UTC')), greater(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-01-09 12:14:00.000000', 6, 'UTC'))) ORDER BY events.event ASC LIMIT 101 @@ -536,7 +536,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), ifNull(equals(events__pdi__person.properties___email, 'tom@posthog.com'), 0), less(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-01-10 12:14:05.000000', 6, 'UTC')), greater(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-01-09 12:14:00.000000', 6, 'UTC'))) ORDER BY events.event ASC LIMIT 101 diff --git a/posthog/clickhouse/query_tagging.py b/posthog/clickhouse/query_tagging.py index 5ef923cfcee01..e5c8f450371d0 100644 --- a/posthog/clickhouse/query_tagging.py +++ b/posthog/clickhouse/query_tagging.py @@ -1,14 +1,22 @@ # This module is responsible for adding tags/metadata to outgoing clickhouse queries in a thread-safe manner import threading +from enum import StrEnum from typing import Any, Optional thread_local_storage = threading.local() +class NonSerializableTags(StrEnum): + FILTERABLE_PERSONS = "filterable_persons" + + +NON_SERIALIZABLE_TAGS = {x.value for x in NonSerializableTags} + + def get_query_tags(): try: - return thread_local_storage.query_tags + return {k: v for k, v in thread_local_storage.query_tags.items() if k not in NON_SERIALIZABLE_TAGS} except AttributeError: return {} diff --git a/posthog/hogql/constants.py b/posthog/hogql/constants.py index eebadae922bd6..d7221b62dc054 100644 --- a/posthog/hogql/constants.py +++ b/posthog/hogql/constants.py @@ -27,13 +27,6 @@ # Keywords you can't alias to RESERVED_KEYWORDS = [*KEYWORDS, "team_id"] - -# These are CTEs that are used internally for passing information down the stack. -# They're not dangerous, but if you override them, behavior can be unexpected -class ReservedCTE(str, Enum): - POSTHOG_PERSON_IDS = "$$posthog_person_ids$$" - - # Limit applied to SELECT statements without LIMIT clause when queried via the API DEFAULT_RETURNED_ROWS = 100 # Max limit for all SELECT queries, and the default for CSV exports diff --git a/posthog/hogql/database/database.py b/posthog/hogql/database/database.py index 49d1cf5b5eec1..26f73468898bb 100644 --- a/posthog/hogql/database/database.py +++ b/posthog/hogql/database/database.py @@ -45,7 +45,12 @@ PersonDistinctIdsTable, RawPersonDistinctIdsTable, ) -from posthog.hogql.database.schema.persons import PersonsTable, RawPersonsTable, join_with_persons_table +from posthog.hogql.database.schema.persons import ( + PersonsTable, + RawPersonsTable, + join_with_persons_table, + FilterablePersonsTable, +) from posthog.hogql.database.schema.session_replay_events import ( RawSessionReplayEventsTable, SessionReplayEventsTable, @@ -87,6 +92,7 @@ class Database(BaseModel): events: EventsTable = EventsTable() groups: GroupsTable = GroupsTable() persons: PersonsTable = PersonsTable() + filterable_persons: FilterablePersonsTable = FilterablePersonsTable() person_distinct_ids: PersonDistinctIdsTable = PersonDistinctIdsTable() person_distinct_id_overrides: PersonDistinctIdOverridesTable = PersonDistinctIdOverridesTable() diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 219a0822b1b17..6c57eb5e427a8 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -1,8 +1,10 @@ -from typing import cast +from typing import cast, Optional import posthoganalytics +from posthog.clickhouse.query_tagging import get_query_tag_value, NonSerializableTags from posthog.hogql.ast import SelectQuery, And -from posthog.hogql.constants import HogQLQuerySettings, ReservedCTE +from posthog.hogql.base import Expr +from posthog.hogql.constants import HogQLQuerySettings from posthog.hogql.context import HogQLContext from posthog.hogql.database.argmax import argmax_select from posthog.hogql.database.models import ( @@ -21,7 +23,7 @@ from posthog.hogql.database.schema.util.where_clause_extractor import WhereClauseExtractor from posthog.hogql.database.schema.persons_pdi import PersonsPDITable, persons_pdi_join from posthog.hogql.errors import ResolutionError -from posthog.hogql.parser import parse_expr +from posthog.hogql.visitor import clone_expr from posthog.models.organization import Organization from posthog.schema import PersonsArgMaxVersion @@ -39,7 +41,12 @@ } -def select_from_persons_table(join_or_table: LazyJoinToAdd | LazyTableToAdd, context: HogQLContext, node: SelectQuery): +def select_from_persons_table( + join_or_table: LazyJoinToAdd | LazyTableToAdd, + context: HogQLContext, + node: SelectQuery, + filter: Optional[Expr] = None, +): version = context.modifiers.personsArgMaxVersion if version == PersonsArgMaxVersion.AUTO: version = PersonsArgMaxVersion.V1 @@ -49,9 +56,6 @@ def select_from_persons_table(join_or_table: LazyJoinToAdd | LazyTableToAdd, con version = PersonsArgMaxVersion.V2 break - use_cte = node.type is not None and ReservedCTE.POSTHOG_PERSON_IDS.value in node.type.ctes - cte_condition = f"raw_persons.id IN (SELECT person_id FROM {ReservedCTE.POSTHOG_PERSON_IDS.value})" - if version == PersonsArgMaxVersion.V2: from posthog.hogql import ast from posthog.hogql.parser import parse_select @@ -59,11 +63,10 @@ def select_from_persons_table(join_or_table: LazyJoinToAdd | LazyTableToAdd, con select = cast( ast.SelectQuery, parse_select( - f""" + """ SELECT id FROM raw_persons WHERE (id, version) IN ( SELECT id, max(version) as version FROM raw_persons - {f"WHERE {cte_condition}" if use_cte else ""} GROUP BY id HAVING equals(argMax(raw_persons.is_deleted, raw_persons.version), 0) AND argMax(raw_persons.created_at, raw_persons.version) < now() + interval 1 day @@ -72,6 +75,8 @@ def select_from_persons_table(join_or_table: LazyJoinToAdd | LazyTableToAdd, con ), ) select.settings = HogQLQuerySettings(optimize_aggregation_in_order=True) + if filter is not None: + cast(ast.SelectQuery, cast(ast.CompareOperation, select.where).right).where = filter for field_name, field_chain in join_or_table.fields_accessed.items(): # We need to always select the 'id' field for the join constraint. The field name here is likely to @@ -93,12 +98,11 @@ def select_from_persons_table(join_or_table: LazyJoinToAdd | LazyTableToAdd, con timestamp_field_to_clamp="created_at", ) select.settings = HogQLQuerySettings(optimize_aggregation_in_order=True) - if use_cte: - expr = parse_expr(cte_condition) + if filter is not None: if select.where: - select.where = And(exprs=[select.where, expr]) + select.where = And(exprs=[select.where, filter]) else: - select.where = expr + select.where = filter if context.modifiers.optimizeJoinedFilters: extractor = WhereClauseExtractor(context) @@ -184,3 +188,21 @@ def to_printed_clickhouse(self, context): def to_printed_hogql(self): return "persons" + + +# Filterable Persons is a lazy table that allows you to insert a where statement inside of the person subselect +# This is useful for certain users and queries where we might not want to pull everything +class FilterablePersonsTable(LazyTable): + fields: dict[str, FieldOrTable] = PERSONS_FIELDS + + def lazy_select(self, table_to_add: LazyTableToAdd, context, node): + filter = get_query_tag_value(NonSerializableTags.FILTERABLE_PERSONS.value) + if filter is not None: + filter = clone_expr(filter, clear_types=True, clear_locations=True) + return select_from_persons_table(table_to_add, context, node, filter) + + def to_printed_clickhouse(self, context): + return "person" + + def to_printed_hogql(self): + return "filterable_persons" diff --git a/posthog/hogql/database/schema/util/test/test_session_where_clause_extractor.py b/posthog/hogql/database/schema/util/test/test_session_where_clause_extractor.py index 3ae4e408c2959..a42da52ab6f22 100644 --- a/posthog/hogql/database/schema/util/test/test_session_where_clause_extractor.py +++ b/posthog/hogql/database/schema/util/test/test_session_where_clause_extractor.py @@ -297,16 +297,16 @@ def test_select_with_timestamp(self): FROM (SELECT sessions.session_id AS session_id, - min(sessions.min_timestamp) AS `$start_timestamp` + min(toTimeZone(sessions.min_timestamp, %(hogql_val_0)s)) AS `$start_timestamp` FROM sessions WHERE - and(equals(sessions.team_id, {self.team.id}), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, %(hogql_val_0)s), toIntervalDay(3)), %(hogql_val_1)s), 0)) + and(equals(sessions.team_id, {self.team.id}), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, %(hogql_val_1)s), toIntervalDay(3)), %(hogql_val_2)s), 0)) GROUP BY sessions.session_id, sessions.session_id) AS sessions WHERE - ifNull(greater(toTimeZone(sessions.`$start_timestamp`, %(hogql_val_2)s), %(hogql_val_3)s), 0) + ifNull(greater(sessions.`$start_timestamp`, %(hogql_val_3)s), 0) LIMIT {MAX_SELECT_RETURNED_ROWS}""" assert expected == actual @@ -363,17 +363,17 @@ def test_union(self): FROM events LEFT JOIN (SELECT - dateDiff(%(hogql_val_0)s, min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + dateDiff(%(hogql_val_0)s, min(toTimeZone(sessions.min_timestamp, %(hogql_val_1)s)), max(toTimeZone(sessions.max_timestamp, %(hogql_val_2)s))) AS `$session_duration`, sessions.session_id AS session_id FROM sessions WHERE - and(equals(sessions.team_id, {self.team.id}), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, %(hogql_val_1)s), toIntervalDay(3)), today()), 0)) + and(equals(sessions.team_id, {self.team.id}), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, %(hogql_val_3)s), toIntervalDay(3)), today()), 0)) GROUP BY sessions.session_id, sessions.session_id) AS events__session ON equals(events.`$session_id`, events__session.session_id) WHERE - and(equals(events.team_id, {self.team.id}), less(toTimeZone(events.timestamp, %(hogql_val_2)s), today())) + and(equals(events.team_id, {self.team.id}), less(toTimeZone(events.timestamp, %(hogql_val_4)s), today())) LIMIT {MAX_SELECT_RETURNED_ROWS}""" assert expected == actual @@ -421,8 +421,8 @@ def test_session_breakdown(self): ) expected = f"""SELECT count(DISTINCT e.`$session_id`) AS total, - toStartOfDay(toTimeZone(e.timestamp, %(hogql_val_7)s)) AS day_start, - multiIf(and(ifNull(greaterOrEquals(e__session.`$session_duration`, 2.0), 0), ifNull(less(e__session.`$session_duration`, 4.5), 0)), %(hogql_val_8)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 4.5), 0), ifNull(less(e__session.`$session_duration`, 27.0), 0)), %(hogql_val_9)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 27.0), 0), ifNull(less(e__session.`$session_duration`, 44.0), 0)), %(hogql_val_10)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 44.0), 0), ifNull(less(e__session.`$session_duration`, 48.0), 0)), %(hogql_val_11)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 48.0), 0), ifNull(less(e__session.`$session_duration`, 57.5), 0)), %(hogql_val_12)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 57.5), 0), ifNull(less(e__session.`$session_duration`, 61.0), 0)), %(hogql_val_13)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 61.0), 0), ifNull(less(e__session.`$session_duration`, 74.0), 0)), %(hogql_val_14)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 74.0), 0), ifNull(less(e__session.`$session_duration`, 90.0), 0)), %(hogql_val_15)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 90.0), 0), ifNull(less(e__session.`$session_duration`, 98.5), 0)), %(hogql_val_16)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 98.5), 0), ifNull(less(e__session.`$session_duration`, 167.01), 0)), %(hogql_val_17)s, %(hogql_val_18)s) AS breakdown_value + toStartOfDay(toTimeZone(e.timestamp, %(hogql_val_9)s)) AS day_start, + multiIf(and(ifNull(greaterOrEquals(e__session.`$session_duration`, 2.0), 0), ifNull(less(e__session.`$session_duration`, 4.5), 0)), %(hogql_val_10)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 4.5), 0), ifNull(less(e__session.`$session_duration`, 27.0), 0)), %(hogql_val_11)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 27.0), 0), ifNull(less(e__session.`$session_duration`, 44.0), 0)), %(hogql_val_12)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 44.0), 0), ifNull(less(e__session.`$session_duration`, 48.0), 0)), %(hogql_val_13)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 48.0), 0), ifNull(less(e__session.`$session_duration`, 57.5), 0)), %(hogql_val_14)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 57.5), 0), ifNull(less(e__session.`$session_duration`, 61.0), 0)), %(hogql_val_15)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 61.0), 0), ifNull(less(e__session.`$session_duration`, 74.0), 0)), %(hogql_val_16)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 74.0), 0), ifNull(less(e__session.`$session_duration`, 90.0), 0)), %(hogql_val_17)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 90.0), 0), ifNull(less(e__session.`$session_duration`, 98.5), 0)), %(hogql_val_18)s, and(ifNull(greaterOrEquals(e__session.`$session_duration`, 98.5), 0), ifNull(less(e__session.`$session_duration`, 167.01), 0)), %(hogql_val_19)s, %(hogql_val_20)s) AS breakdown_value FROM events AS e SAMPLE 1 INNER JOIN (SELECT @@ -435,19 +435,20 @@ def test_session_breakdown(self): GROUP BY person_distinct_id2.distinct_id HAVING - ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT - dateDiff(%(hogql_val_0)s, min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + dateDiff(%(hogql_val_0)s, min(toTimeZone(sessions.min_timestamp, %(hogql_val_1)s)), max(toTimeZone(sessions.max_timestamp, %(hogql_val_2)s))) AS `$session_duration`, sessions.session_id AS session_id FROM sessions WHERE - and(equals(sessions.team_id, {self.team.id}), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, %(hogql_val_1)s), toIntervalDay(3)), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull(%(hogql_val_2)s, 6, %(hogql_val_3)s)))), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, %(hogql_val_4)s), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull(%(hogql_val_5)s, 6, %(hogql_val_6)s))), 0)) + and(equals(sessions.team_id, {self.team.id}), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, %(hogql_val_3)s), toIntervalDay(3)), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull(%(hogql_val_4)s, 6, %(hogql_val_5)s)))), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, %(hogql_val_6)s), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull(%(hogql_val_7)s, 6, %(hogql_val_8)s))), 0)) GROUP BY sessions.session_id, sessions.session_id) AS e__session ON equals(e.`$session_id`, e__session.session_id) WHERE - and(equals(e.team_id, {self.team.id}), and(greaterOrEquals(toTimeZone(e.timestamp, %(hogql_val_19)s), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull(%(hogql_val_20)s, 6, %(hogql_val_21)s)))), lessOrEquals(toTimeZone(e.timestamp, %(hogql_val_22)s), assumeNotNull(parseDateTime64BestEffortOrNull(%(hogql_val_23)s, 6, %(hogql_val_24)s))), equals(e.event, %(hogql_val_25)s), ifNull(in(e__pdi.person_id, (SELECT + and(equals(e.team_id, {self.team.id}), and(greaterOrEquals(toTimeZone(e.timestamp, %(hogql_val_21)s), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull(%(hogql_val_22)s, 6, %(hogql_val_23)s)))), lessOrEquals(toTimeZone(e.timestamp, %(hogql_val_24)s), assumeNotNull(parseDateTime64BestEffortOrNull(%(hogql_val_25)s, 6, %(hogql_val_26)s))), equals(e.event, %(hogql_val_27)s), ifNull(in(e__pdi.person_id, (SELECT cohortpeople.person_id AS person_id FROM cohortpeople diff --git a/posthog/hogql/database/test/test_database.py b/posthog/hogql/database/test/test_database.py index ab7f8a90db281..3256f6ba889e6 100644 --- a/posthog/hogql/database/test/test_database.py +++ b/posthog/hogql/database/test/test_database.py @@ -462,7 +462,7 @@ def test_selecting_from_persons_ignores_future_persons(self): sql = "select id from persons" query = print_ast(parse_select(sql), context, dialect="clickhouse") assert ( - "ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1)))" + "ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1)))" in query ), query @@ -480,6 +480,6 @@ def test_selecting_persons_from_events_ignores_future_persons(self): sql = "select person.id from events" query = print_ast(parse_select(sql), context, dialect="clickhouse") assert ( - "ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1)))" + "ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1)))" in query ), query diff --git a/posthog/hogql/printer.py b/posthog/hogql/printer.py index 078edd54dc43b..efde4d8fb0afe 100644 --- a/posthog/hogql/printer.py +++ b/posthog/hogql/printer.py @@ -100,16 +100,18 @@ def prepare_ast_for_printing( context.modifiers = set_default_in_cohort_via(context.modifiers) + if context.modifiers.inCohortVia == InCohortVia.LEFTJOIN_CONJOINED: + with context.timings.measure("resolve_in_cohorts_conjoined"): + resolve_in_cohorts_conjoined(node, dialect, context, stack) with context.timings.measure("resolve_types"): node = resolve_types(node, context, dialect=dialect, scopes=[node.type for node in stack] if stack else None) if dialect == "clickhouse": - with context.timings.measure("resolve_property_types"): - node = resolve_property_types(node, context) - with context.timings.measure("resolve_lazy_tables"): resolve_lazy_tables(node, dialect, stack, context) - + # resolve_property_types has to come after lazy tables otherwise expressions on lazy tables don't get handled properly + with context.timings.measure("resolve_property_types"): + node = resolve_property_types(node, context) # We support global query settings, and local subquery settings. # If the global query is a select query with settings, merge the two. if isinstance(node, ast.SelectQuery) and node.settings is not None and settings is not None: @@ -118,11 +120,6 @@ def prepare_ast_for_printing( settings.__setattr__(key, value) node.settings = None - # If these don't come after "resolve_lazy_tables", cohorts can't resolve in them - if context.modifiers.inCohortVia == InCohortVia.LEFTJOIN_CONJOINED: - with context.timings.measure("resolve_in_cohorts_conjoined"): - resolve_in_cohorts_conjoined(node, dialect, context, stack) - if context.modifiers.inCohortVia == InCohortVia.LEFTJOIN: with context.timings.measure("resolve_in_cohorts"): resolve_in_cohorts(node, dialect, stack, context) diff --git a/posthog/hogql/test/test_printer.py b/posthog/hogql/test/test_printer.py index 4e05c489c5cc1..c0dc8db167561 100644 --- a/posthog/hogql/test/test_printer.py +++ b/posthog/hogql/test/test_printer.py @@ -759,8 +759,8 @@ def test_select_sample(self): f"0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) JOIN (SELECT person.id AS id FROM person " f"WHERE and(equals(person.team_id, {self.team.pk}), ifNull(in(tuple(person.id, person.version), (SELECT person.id " f"AS id, max(person.version) AS version FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " - f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, " - f"person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) " + f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, " + f"%(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) " f"AS persons ON equals(persons.id, events__pdi.person_id) WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", ) @@ -781,8 +781,8 @@ def test_select_sample(self): f"ON equals(events.distinct_id, events__pdi.distinct_id) JOIN (SELECT person.id AS id FROM person WHERE " f"and(equals(person.team_id, {self.team.pk}), ifNull(in(tuple(person.id, person.version), (SELECT person.id AS id, " f"max(person.version) AS version FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " - f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), " - f"plus(now64(6, %(hogql_val_0)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) " + f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), " + f"plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) " f"AS persons SAMPLE 0.1 ON equals(persons.id, events__pdi.person_id) WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", ) @@ -801,8 +801,8 @@ def test_select_sample(self): f"SELECT events.event AS event FROM events SAMPLE 2/78 OFFSET 999 JOIN (SELECT person.id AS id FROM person WHERE " f"and(equals(person.team_id, {self.team.pk}), ifNull(in(tuple(person.id, person.version), (SELECT person.id AS id, " f"max(person.version) AS version FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " - f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, " - f"person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) " + f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, " + f"%(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) " f"AS persons ON equals(persons.id, events.person_id) WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", ) @@ -820,8 +820,8 @@ def test_select_sample(self): f"SELECT events.event AS event FROM events SAMPLE 2/78 OFFSET 999 JOIN (SELECT person.id AS id FROM person WHERE " f"and(equals(person.team_id, {self.team.pk}), ifNull(in(tuple(person.id, person.version), (SELECT person.id AS id, " f"max(person.version) AS version FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " - f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, " - f"person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) " + f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, " + f"%(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) " f"AS persons SAMPLE 0.1 ON equals(persons.id, events.person_id) WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", ) @@ -1019,8 +1019,8 @@ def test_field_nullable_equals(self): f"SELECT " # start_time = toStartOfMonth(now()) # (the return of toStartOfMonth() is treated as "potentially nullable" since we yet have full typing support) - f"ifNull(equals(toTimeZone(session_replay_events.start_time, %(hogql_val_0)s), toStartOfMonth(now64(6, %(hogql_val_1)s))), " - f"isNull(toTimeZone(session_replay_events.start_time, %(hogql_val_0)s)) and isNull(toStartOfMonth(now64(6, %(hogql_val_1)s)))), " + f"ifNull(equals(session_replay_events.start_time, toStartOfMonth(now64(6, %(hogql_val_1)s))), " + f"isNull(session_replay_events.start_time) and isNull(toStartOfMonth(now64(6, %(hogql_val_1)s)))), " # now() = now() (also two nullable fields) f"ifNull(equals(now64(6, %(hogql_val_2)s), now64(6, %(hogql_val_3)s)), isNull(now64(6, %(hogql_val_2)s)) and isNull(now64(6, %(hogql_val_3)s))), " # 1 = now() @@ -1040,7 +1040,7 @@ def test_field_nullable_equals(self): # null = click_count f"isNull(session_replay_events.click_count) " # ... - f"FROM (SELECT min(session_replay_events.min_first_timestamp) AS start_time, sum(session_replay_events.click_count) AS click_count, sum(session_replay_events.keypress_count) AS keypress_count FROM session_replay_events WHERE equals(session_replay_events.team_id, {self.team.pk})) AS session_replay_events LIMIT {MAX_SELECT_RETURNED_ROWS}" + f"FROM (SELECT min(toTimeZone(session_replay_events.min_first_timestamp, %(hogql_val_0)s)) AS start_time, sum(session_replay_events.click_count) AS click_count, sum(session_replay_events.keypress_count) AS keypress_count FROM session_replay_events WHERE equals(session_replay_events.team_id, {self.team.pk})) AS session_replay_events LIMIT {MAX_SELECT_RETURNED_ROWS}" ) def test_field_nullable_not_equals(self): @@ -1059,8 +1059,8 @@ def test_field_nullable_not_equals(self): f"SELECT " # start_time = toStartOfMonth(now()) # (the return of toStartOfMonth() is treated as "potentially nullable" since we yet have full typing support) - f"ifNull(notEquals(toTimeZone(session_replay_events.start_time, %(hogql_val_0)s), toStartOfMonth(now64(6, %(hogql_val_1)s))), " - f"isNotNull(toTimeZone(session_replay_events.start_time, %(hogql_val_0)s)) or isNotNull(toStartOfMonth(now64(6, %(hogql_val_1)s)))), " + f"ifNull(notEquals(session_replay_events.start_time, toStartOfMonth(now64(6, %(hogql_val_1)s))), " + f"isNotNull(session_replay_events.start_time) or isNotNull(toStartOfMonth(now64(6, %(hogql_val_1)s)))), " # now() = now() (also two nullable fields) f"ifNull(notEquals(now64(6, %(hogql_val_2)s), now64(6, %(hogql_val_3)s)), isNotNull(now64(6, %(hogql_val_2)s)) or isNotNull(now64(6, %(hogql_val_3)s))), " # 1 = now() @@ -1080,7 +1080,7 @@ def test_field_nullable_not_equals(self): # null = click_count f"isNotNull(session_replay_events.click_count) " # ... - f"FROM (SELECT min(session_replay_events.min_first_timestamp) AS start_time, sum(session_replay_events.click_count) AS click_count, sum(session_replay_events.keypress_count) AS keypress_count FROM session_replay_events WHERE equals(session_replay_events.team_id, {self.team.pk})) AS session_replay_events LIMIT {MAX_SELECT_RETURNED_ROWS}" + f"FROM (SELECT min(toTimeZone(session_replay_events.min_first_timestamp, %(hogql_val_0)s)) AS start_time, sum(session_replay_events.click_count) AS click_count, sum(session_replay_events.keypress_count) AS keypress_count FROM session_replay_events WHERE equals(session_replay_events.team_id, {self.team.pk})) AS session_replay_events LIMIT {MAX_SELECT_RETURNED_ROWS}" ) def test_field_nullable_boolean(self): diff --git a/posthog/hogql/transforms/in_cohort.py b/posthog/hogql/transforms/in_cohort.py index 60d7151b39559..fec1a4d7ccd16 100644 --- a/posthog/hogql/transforms/in_cohort.py +++ b/posthog/hogql/transforms/in_cohort.py @@ -241,29 +241,18 @@ def get_dynamic_cohort_clause(): constraint_type="ON", ), ) - new_join = cast( - ast.JoinExpr, - resolve_types(new_join, self.context, self.dialect, [self.stack[-1].type]), - ) - new_join.constraint.expr.left = resolve_types( - ast.Field(chain=[f"__in_cohort", "cohort_person_id"]), self.context, self.dialect, [self.stack[-1].type] - ) # type: ignore + new_join.constraint.expr.left = ast.Field(chain=[f"__in_cohort", "cohort_person_id"]) # type: ignore new_join.constraint.expr.right = clone_expr(compare_operations[0].left) # type: ignore if last_join: last_join.next_join = new_join else: select.select_from = new_join - cohort_match_compare_op = resolve_types( - ast.CompareOperation( - left=ast.Field(chain=["__in_cohort", "matched"]), - op=ast.CompareOperationOp.Eq, - right=ast.Constant(value=1), - ), - self.context, - self.dialect, - [self.stack[-1].type], + cohort_match_compare_op = ast.CompareOperation( + left=ast.Field(chain=["__in_cohort", "matched"]), + op=ast.CompareOperationOp.Eq, + right=ast.Constant(value=1), ) if select.where is not None: diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index 56e6dbbe44d0c..08108a0a1a7a8 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -1,15 +1,23 @@ import itertools from typing import Optional from collections.abc import Sequence, Iterator + +from posthog.clickhouse.query_tagging import tag_queries, NonSerializableTags from posthog.hogql import ast -from posthog.hogql.constants import HogQLQuerySettings, ReservedCTE -from posthog.hogql.parser import parse_expr, parse_order_expr, parse_select +from posthog.hogql.constants import HogQLQuerySettings +from posthog.hogql.parser import parse_expr, parse_order_expr from posthog.hogql.property import has_aggregation from posthog.hogql_queries.actor_strategies import ActorStrategy, PersonStrategy, GroupStrategy from posthog.hogql_queries.insights.insight_actors_query_runner import InsightActorsQueryRunner from posthog.hogql_queries.insights.paginators import HogQLHasMorePaginator from posthog.hogql_queries.query_runner import QueryRunner, get_query_runner -from posthog.schema import ActorsQuery, ActorsQueryResponse, CachedActorsQueryResponse, DashboardFilter, TrendsQuery +from posthog.schema import ( + ActorsQuery, + ActorsQueryResponse, + CachedActorsQueryResponse, + DashboardFilter, + TrendsQuery, +) from posthog.settings import HOGQL_INCREASED_MAX_EXECUTION_TIME @@ -232,25 +240,50 @@ def to_query(self) -> ast.SelectQuery: order_by = [] with self.timings.measure("select"): - ctes = {} if not self.query.source: join_expr = ast.JoinExpr(table=ast.Field(chain=[self.strategy.origin])) else: assert self.source_query_runner is not None # For type checking source_query = self.source_query_runner.to_actors_query() + # Source Query has "Select actor_id as actor_id, count() as event_count) "source" source_id_chain = self.source_id_column(source_query) source_alias = "source" + origin = self.strategy.origin + if isinstance(self.strategy, PersonStrategy) and any( + isinstance(x, C) for x in [getattr(self.query.source, "source", None)] for C in (TrendsQuery,) + ): + # SelectUnionQuery (used by Stickiness) doesn't have settings + if hasattr(source_query, "settings"): + if source_query.settings is None: + source_query.settings = HogQLQuerySettings() + source_query.settings.use_query_cache = True + source_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME + s = ast.SelectQuery( + select=[ast.Field(chain=[source_alias, "actor_id"])], + select_from=ast.JoinExpr(table=source_query, alias=source_alias), + ) + + tag_queries( + **{ + NonSerializableTags.FILTERABLE_PERSONS.value: ast.CompareOperation( + left=ast.Field(chain=["id"]), right=s, op=ast.CompareOperationOp.In + ) + } + ) + origin = "filterable_persons" + join_expr = ast.JoinExpr( - table=ast.Field(chain=[source_alias]), + table=source_query, + alias=source_alias, next_join=ast.JoinExpr( - table=ast.Field(chain=[self.strategy.origin]), + table=ast.Field(chain=[origin]), join_type="INNER JOIN", constraint=ast.JoinConstraint( expr=ast.CompareOperation( op=ast.CompareOperationOp.Eq, - left=ast.Field(chain=[self.strategy.origin, self.strategy.origin_id]), + left=ast.Field(chain=[origin, self.strategy.origin_id]), right=ast.Field(chain=[source_alias, *source_id_chain]), ), constraint_type="ON", @@ -258,26 +291,7 @@ def to_query(self) -> ast.SelectQuery: ), ) - ctes[source_alias] = ast.CTE(name=source_alias, expr=source_query, cte_type="subquery") - - # For now, only use this CTE optimization in Trends, until we test it with other queries - if isinstance(self.strategy, PersonStrategy) and any( - isinstance(x, C) for x in [getattr(self.query.source, "source", None)] for C in (TrendsQuery,) - ): - # SelectUnionQuery (used by Stickiness) doesn't have settings - if hasattr(source_query, "settings"): - if source_query.settings is None: - source_query.settings = HogQLQuerySettings() - source_query.settings.use_query_cache = True - source_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME - s = parse_select("SELECT distinct actor_id as person_id FROM source") - # This feels like it adds one extra level of SELECT which is unnecessary - ctes[ReservedCTE.POSTHOG_PERSON_IDS.value] = ast.CTE( - name=ReservedCTE.POSTHOG_PERSON_IDS.value, expr=s, cte_type="subquery" - ) - return ast.SelectQuery( - ctes=ctes, select=columns, select_from=join_expr, where=where, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index 73619e77b967f..0f433a19be9f0 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -100,7 +100,7 @@ ''' SELECT persons.id, persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -185,13 +185,13 @@ WHERE ifNull(in(steps, [2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY toTimeZone(persons.created_at, 'UTC') DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -488,7 +488,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -509,7 +509,7 @@ ''' SELECT persons.id, persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -596,7 +596,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -606,13 +606,13 @@ WHERE ifNull(in(steps, [1, 2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY toTimeZone(persons.created_at, 'UTC') DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -628,7 +628,7 @@ ''' SELECT persons.id, persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -715,7 +715,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -725,13 +725,13 @@ WHERE ifNull(in(steps, [2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY toTimeZone(persons.created_at, 'UTC') DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -747,7 +747,7 @@ ''' SELECT persons.id, persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -834,7 +834,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -844,13 +844,13 @@ WHERE ifNull(in(steps, [3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY toTimeZone(persons.created_at, 'UTC') DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index f637873df72f3..7124c534df351 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -236,7 +236,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -420,7 +420,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -437,7 +437,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -569,7 +569,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -586,7 +586,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -718,7 +718,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -735,7 +735,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -867,7 +867,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -884,7 +884,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -995,7 +995,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -1179,7 +1179,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1196,7 +1196,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1328,7 +1328,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1345,7 +1345,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1477,7 +1477,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1494,7 +1494,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1626,7 +1626,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1643,7 +1643,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -2600,7 +2600,7 @@ if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -2670,7 +2670,7 @@ if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -3578,7 +3578,7 @@ if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -3648,7 +3648,7 @@ if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -3973,7 +3973,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4139,7 +4139,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4262,7 +4262,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4385,7 +4385,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4508,7 +4508,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4613,7 +4613,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4761,7 +4761,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -4927,7 +4927,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5050,7 +5050,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5173,7 +5173,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5296,7 +5296,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5401,7 +5401,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5549,7 +5549,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5715,7 +5715,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5838,7 +5838,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -5961,7 +5961,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6084,7 +6084,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6189,7 +6189,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6337,7 +6337,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6503,7 +6503,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6626,7 +6626,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6749,7 +6749,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6872,7 +6872,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -6977,7 +6977,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7125,7 +7125,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7291,7 +7291,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7414,7 +7414,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7537,7 +7537,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7660,7 +7660,7 @@ if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -7765,7 +7765,7 @@ (SELECT groups.key AS key, groups.properties AS properties FROM - (SELECT argMax(groups.group_properties, groups._timestamp) AS properties, + (SELECT argMax(groups.group_properties, toTimeZone(groups._timestamp, 'UTC')) AS properties, groups.group_type_index AS index, groups.group_key AS key FROM groups diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr index 5c16a6f7f20c7..2cd43d115573b 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr @@ -117,7 +117,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -329,7 +329,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -461,7 +461,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -478,7 +478,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -610,7 +610,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -627,7 +627,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -759,7 +759,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -776,7 +776,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr index 4586b31a459a3..abd09217bc9af 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr @@ -159,7 +159,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -347,7 +347,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -535,7 +535,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr index c2857ff435f59..2935eae6b68e6 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict.ambr @@ -383,7 +383,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -498,7 +498,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -620,7 +620,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr index 975d22435d0ba..7ff818de40361 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr @@ -119,7 +119,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -267,7 +267,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -415,7 +415,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered_persons.ambr index 7710fd9dc8aa8..9a4ea2c43af05 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered_persons.ambr @@ -95,7 +95,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, @@ -172,7 +172,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0) UNION ALL SELECT aggregation_target AS aggregation_target, @@ -249,7 +249,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -263,7 +263,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr new file mode 100644 index 0000000000000..c9aeb3e0ff95a --- /dev/null +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -0,0 +1,400 @@ +# serializer version: 1 +# name: TestInsightActorsQueryRunner.test_insight_persons_funnels_query + ''' + SELECT name AS name + FROM + (SELECT persons.properties___name AS name + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e__pdi.person_id AS aggregation_target, + if(equals(e.event, '$pageview'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, '$pageview'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'US/Pacific')), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-19 23:59:59.999999', 6, 'US/Pacific'))), in(e.event, tuple('$pageview'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [2]), 0) + ORDER BY aggregation_target ASC) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_lifecycle_query + ''' + SELECT n AS n + FROM + (SELECT persons.properties___name AS n + FROM + (SELECT DISTINCT actor_id AS actor_id + FROM + (SELECT min(events__pdi__person.created_at) AS created_at, + arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, + arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, + arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, + arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) + and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) + and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, + arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) + and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, + arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, + arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, + arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, + arrayJoin(temp_concat) AS period_status_pairs, + period_status_pairs.1 AS start_of_period, + period_status_pairs.2 AS status, + events__pdi.person_id AS actor_id + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, + person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) + GROUP BY actor_id) + WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) + and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0))) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_groups_query + ''' + SELECT name AS name + FROM + (SELECT groups.properties___name AS name + FROM + (SELECT aggregation_target AS group_key + FROM + (SELECT e.`$group_0` AS aggregation_target, + count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview'), notEquals(e.`$group_0`, '')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 7), 0)) AS source + INNER JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'US/Pacific')) AS properties___name, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups ON equals(groups.key, source.group_key) + ORDER BY groups.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_query + ''' + SELECT name AS name + FROM + (SELECT persons.properties___name AS name + FROM + (SELECT aggregation_target AS person_id + FROM + (SELECT e__pdi.person_id AS aggregation_target, + count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 2), 0)) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.person_id) + ORDER BY persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_groups_query + ''' + SELECT name AS name + FROM + (SELECT groups.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT e.`$group_0` AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')), notEquals(e.`$group_0`, ''))) + GROUP BY actor_id) AS source + INNER JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'US/Pacific')) AS properties___name, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups ON equals(groups.key, source.actor_id) + ORDER BY groups.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV1 + ''' + SELECT name AS name + FROM + (SELECT filterable_persons.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, + person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV2 + ''' + SELECT name AS name + FROM + (SELECT filterable_persons.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_lifecycle_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_lifecycle_query_runner.ambr index 7e0475cc8c97c..07bc0a111aa15 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_lifecycle_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_lifecycle_query_runner.ambr @@ -45,7 +45,7 @@ count(DISTINCT actor_id) AS counts, status AS status FROM - (SELECT min(toTimeZone(events__pdi__person.created_at, 'UTC')) AS created_at, + (SELECT min(events__pdi__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'UTC')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'UTC')))) AS following_activity, @@ -69,14 +69,14 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 00:00:00', 6, 'UTC'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'UTC'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'UTC'))), toIntervalDay(1))), ifNull(in(events__pdi.person_id, (SELECT cohortpeople.person_id AS person_id FROM cohortpeople @@ -125,7 +125,7 @@ count(DISTINCT actor_id) AS counts, status AS status FROM - (SELECT min(toTimeZone(events__pdi__person.created_at, 'UTC')) AS created_at, + (SELECT min(events__pdi__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'UTC')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'UTC')))) AS following_activity, @@ -149,14 +149,14 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 00:00:00', 6, 'UTC'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'UTC'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'UTC'))), toIntervalDay(1))), equals(events.event, '$pageview')) GROUP BY actor_id) GROUP BY start_of_period, @@ -202,7 +202,7 @@ count(DISTINCT actor_id) AS counts, status AS status FROM - (SELECT min(toTimeZone(events__pdi__person.created_at, 'UTC')) AS created_at, + (SELECT min(events__pdi__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'UTC')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'UTC')))) AS following_activity, @@ -226,14 +226,14 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 00:00:00', 6, 'UTC'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'UTC'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'UTC'))), toIntervalDay(1))), equals(events.event, '$pageview')) GROUP BY actor_id) GROUP BY start_of_period, @@ -279,7 +279,7 @@ count(DISTINCT actor_id) AS counts, status AS status FROM - (SELECT min(toTimeZone(events__pdi__person.created_at, 'US/Pacific')) AS created_at, + (SELECT min(events__pdi__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, @@ -303,14 +303,14 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) GROUP BY actor_id) GROUP BY start_of_period, diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr index da4c647db0bed..afa0d1f23304a 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr @@ -58,7 +58,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -142,7 +142,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -226,7 +226,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -310,7 +310,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -394,7 +394,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-05-23 23:59:59', 6, 'UTC')))), and(equals(events.event, '$pageview'), ifNull(notIn(path_item, ['/bar/*/foo']), 0))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -477,7 +477,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-05-23 23:59:59', 6, 'UTC')))), and(equals(events.event, '$pageview'), ifNull(notIn(path_item, ['/bar/*/foo']), 0))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -560,7 +560,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-05-23 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -643,7 +643,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-05-23 23:59:59', 6, 'UTC')))), equals(events.event, '$screen')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -726,7 +726,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-05-23 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -809,7 +809,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-05-23 23:59:59', 6, 'UTC')))), and(or(equals(events.event, '$pageview'), equals(events.event, '$screen'), not(startsWith(events.event, '$'))), ifNull(notIn(path_item, ['/custom1', '/1', '/2', '/3']), 0))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -892,7 +892,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-03 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -975,9 +975,9 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1061,7 +1061,7 @@ (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item FROM events LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1145,7 +1145,7 @@ (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item FROM events LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1267,7 +1267,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -1283,7 +1283,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1388,7 +1388,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -1403,7 +1403,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1508,7 +1508,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -1523,7 +1523,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1628,7 +1628,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -1644,7 +1644,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1749,7 +1749,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -1764,7 +1764,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1869,7 +1869,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -1884,7 +1884,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1989,7 +1989,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -2005,7 +2005,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -2110,7 +2110,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -2125,7 +2125,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -2230,7 +2230,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -2245,7 +2245,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -2326,7 +2326,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-02-01 23:59:59', 6, 'UTC')))), or(equals(events.event, '$pageview'), equals(events.event, '$screen'), not(startsWith(events.event, '$')))) ORDER BY if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id) ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -2353,7 +2353,7 @@ # name: TestClickhousePaths.test_recording ''' SELECT persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -2445,7 +2445,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-02 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -2456,12 +2456,12 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -2492,7 +2492,7 @@ # name: TestClickhousePaths.test_recording_for_dropoff ''' SELECT persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -2584,7 +2584,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-02 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -2596,12 +2596,12 @@ and isNull(path_key))) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -2617,7 +2617,7 @@ # name: TestClickhousePaths.test_recording_for_dropoff.1 ''' SELECT persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -2709,7 +2709,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-02 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -2721,12 +2721,12 @@ and isNull(path_key))) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -2757,7 +2757,7 @@ # name: TestClickhousePaths.test_recording_with_no_window_or_session_id ''' SELECT persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -2849,7 +2849,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-02 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -2860,12 +2860,12 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -2896,7 +2896,7 @@ # name: TestClickhousePaths.test_recording_with_start_and_end ''' SELECT persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -2996,7 +2996,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-02 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -3008,12 +3008,12 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -3100,7 +3100,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-05-23 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -3187,7 +3187,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -3312,7 +3312,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -3328,7 +3328,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -3404,7 +3404,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -3529,7 +3529,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -3545,7 +3545,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -3621,7 +3621,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -3746,7 +3746,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -3762,7 +3762,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -3838,7 +3838,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -3963,7 +3963,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -3979,7 +3979,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -4051,7 +4051,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -4135,7 +4135,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-05-23 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -4218,7 +4218,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -4334,7 +4334,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -4349,7 +4349,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -4454,7 +4454,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -4469,7 +4469,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -4541,7 +4541,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -4657,7 +4657,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -4672,7 +4672,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -4744,7 +4744,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -4860,7 +4860,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -4875,7 +4875,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -4980,7 +4980,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -4995,7 +4995,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -5100,7 +5100,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -5115,7 +5115,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -5187,7 +5187,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-05-23 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY @@ -5275,7 +5275,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-05-23 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) GROUP BY person_id) ARRAY diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_retention_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_retention_query_runner.ambr index a793e4e6022b1..3c13640fab72e 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_retention_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_retention_query_runner.ambr @@ -226,7 +226,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(toDateTime64('2020-06-10 00:00:00.000000', 6, 'UTC'))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-06-21 00:00:00.000000', 6, 'UTC'))), in(events.event, tuple('$pageview', '$pageview'))) GROUP BY actor_id) AS actor_activity GROUP BY breakdown_values, @@ -271,7 +271,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfMonth(toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC'))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-10 00:00:00.000000', 6, 'UTC'))), in(events.event, tuple('$pageview', '$pageview'))) GROUP BY actor_id) AS actor_activity GROUP BY breakdown_values, @@ -307,7 +307,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(toDateTime64('2020-06-10 00:00:00.000000', 6, 'UTC'))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-06-17 00:00:00.000000', 6, 'UTC'))), in(events.event, tuple('$some_event', 'sign up'))) GROUP BY actor_id) AS actor_activity GROUP BY breakdown_values, @@ -344,7 +344,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email @@ -354,7 +354,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(toDateTime64('2020-06-10 00:00:00.000000', 6, 'UTC'))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-06-17 00:00:00.000000', 6, 'UTC'))), in(events.event, tuple('$pageview', '$pageview', 'non_matching_event'))) GROUP BY actor_id) AS actor_activity GROUP BY breakdown_values, @@ -390,7 +390,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(toDateTime64('2020-06-10 00:00:00.000000', 6, 'UTC'))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-06-21 00:00:00.000000', 6, 'UTC'))), in(events.event, tuple('$pageview', '$pageview'))) GROUP BY actor_id) AS actor_activity GROUP BY breakdown_values, @@ -426,7 +426,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), toStartOfDay(toDateTime64('2020-06-10 00:00:00.000000', 6, 'US/Pacific'))), lessOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), toDateTime64('2020-06-21 00:00:00.000000', 6, 'US/Pacific'))), in(events.event, tuple('$pageview', '$pageview'))) GROUP BY actor_id) AS actor_activity GROUP BY breakdown_values, @@ -462,7 +462,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfWeek(toDateTime64('2020-06-07 00:00:00.000000', 6, 'UTC'), 0)), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-07-27 00:00:00.000000', 6, 'UTC'))), in(events.event, tuple('$pageview', '$pageview'))) GROUP BY actor_id) AS actor_activity GROUP BY breakdown_values, @@ -498,7 +498,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfWeek(toDateTime64('2020-06-08 00:00:00.000000', 6, 'UTC'), 3)), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-07-27 00:00:00.000000', 6, 'UTC'))), in(events.event, tuple('$pageview', '$pageview'))) GROUP BY actor_id) AS actor_activity GROUP BY breakdown_values, diff --git a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py index 6715f0d51af28..1545c80464710 100644 --- a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py +++ b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py @@ -237,7 +237,9 @@ def test_insight_persons_trends_query_with_argmaxV1(self): ) self.assertEqual([("p2",)], response.results) - assert "in(person.id" in queries[0] + assert "in(id," in queries[0] + self.assertEqual(2, queries[0].count("toTimeZone(e.timestamp, 'US/Pacific') AS timestamp")) + self.assertEqual(2, queries[0].count("use_query_cache=1")) @snapshot_clickhouse_queries def test_insight_persons_trends_query_with_argmaxV2(self): @@ -265,6 +267,8 @@ def test_insight_persons_trends_query_with_argmaxV2(self): self.assertEqual([("p2",)], response.results) assert "in(person.id" in queries[0] + self.assertEqual(2, queries[0].count("toTimeZone(e.timestamp, 'US/Pacific') AS timestamp")) + self.assertEqual(2, queries[0].count("use_query_cache=1")) @snapshot_clickhouse_queries def test_insight_persons_trends_groups_query(self): diff --git a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr index 23ff710fea0ed..5c44cda048673 100644 --- a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr +++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr @@ -68,7 +68,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$bool_prop'), ''), 'null'), '^"|"$', '') AS `properties___$bool_prop` @@ -78,7 +78,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-07 23:59:59', 6, 'UTC'))), ifNull(equals(e__pdi__person.`properties___$bool_prop`, 'x'), 0), and(equals(e.event, 'sign up'), ifNull(in(e__pdi.person_id, (SELECT cohortpeople.person_id AS person_id FROM cohortpeople @@ -165,7 +165,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-07 23:59:59', 6, 'UTC'))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.person_properties, '$bool_prop'), ''), 'null'), '^"|"$', ''), 'x'), 0), and(equals(e.event, 'sign up'), ifNull(in(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), (SELECT cohortpeople.person_id AS person_id FROM cohortpeople @@ -205,7 +205,7 @@ ifNull(nullIf(toString(e__group_0.properties___industry), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -235,8 +235,8 @@ # --- # name: TestTrends.test_breakdown_by_group_props_person_on_events.1 ''' - SELECT persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + SELECT filterable_persons.id AS id, + filterable_persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -251,7 +251,7 @@ e.`$window_id` AS `$window_id` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -259,14 +259,28 @@ GROUP BY groups.group_type_index, groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')), ifNull(equals(e__group_0.properties___industry, 'technology'), 0))) - GROUP BY actor_id) AS source + GROUP BY actor_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count, groupUniqArray(100)(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS matching_events + FROM + (SELECT e.person_id AS actor_id, toTimeZone(e.timestamp, 'UTC') AS timestamp, e.uuid AS uuid, e.`$session_id` AS `$session_id`, e.`$window_id` AS `$window_id` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')), ifNull(equals(e__group_0.properties___industry, 'technology'), 0))) + GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) ORDER BY source.event_count DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -315,7 +329,7 @@ ifNull(nullIf(toString(e__group_0.properties___industry), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -455,7 +469,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(equals(e.event, '$pageview'), true), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id, breakdown_value) AS e @@ -510,7 +524,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(equals(e.event, '$pageview'), true), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id, breakdown_value) AS e @@ -593,7 +607,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name @@ -603,7 +617,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(and(equals(e.event, '$pageview'), and(or(ifNull(equals(e__pdi__person.properties___name, 'p1'), 0), ifNull(equals(e__pdi__person.properties___name, 'p2'), 0), ifNull(equals(e__pdi__person.properties___name, 'p3'), 0)), ifNull(in(e__pdi.person_id, (SELECT cohortpeople.person_id AS person_id FROM cohortpeople @@ -654,7 +668,7 @@ ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -717,9 +731,9 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -773,7 +787,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) GROUP BY day_start, breakdown_value) @@ -821,7 +835,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) GROUP BY day_start, breakdown_value) @@ -902,7 +916,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name @@ -912,7 +926,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-26 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-02 23:59:59', 6, 'UTC'))), equals(e.event, 'event_name'), ifNull(equals(e__pdi__person.properties___name, 'Jane'), 0)) GROUP BY day_start) GROUP BY day_start @@ -1008,7 +1022,7 @@ toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___name, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___name, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1016,7 +1030,7 @@ GROUP BY groups.group_type_index, groups.group_key) AS e__group_2 ON equals(e.`$group_2`, e__group_2.key) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1040,8 +1054,8 @@ # --- # name: TestTrends.test_filtering_by_multiple_groups_person_on_events.1 ''' - SELECT persons.id AS id, - toTimeZone(persons.created_at, 'UTC') AS created_at, + SELECT filterable_persons.id AS id, + filterable_persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -1056,7 +1070,7 @@ e.`$window_id` AS `$window_id` FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___name, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___name, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1064,7 +1078,7 @@ GROUP BY groups.group_type_index, groups.group_key) AS e__group_2 ON equals(e.`$group_2`, e__group_2.key) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1072,14 +1086,33 @@ GROUP BY groups.group_type_index, groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), and(ifNull(equals(e__group_0.properties___industry, 'finance'), 0), ifNull(equals(e__group_2.properties___name, 'six'), 0)), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')))) - GROUP BY actor_id) AS source + GROUP BY actor_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN - (SELECT argMax(person.created_at, person.version) AS created_at, + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count, groupUniqArray(100)(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS matching_events + FROM + (SELECT e.person_id AS actor_id, toTimeZone(e.timestamp, 'UTC') AS timestamp, e.uuid AS uuid, e.`$session_id` AS `$session_id`, e.`$window_id` AS `$window_id` + FROM events AS e + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___name, groups.group_type_index AS index, groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 2), 0)) + GROUP BY groups.group_type_index, groups.group_key) AS e__group_2 ON equals(e.`$group_2`, e__group_2.key) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), and(ifNull(equals(e__group_0.properties___industry, 'finance'), 0), ifNull(equals(e__group_2.properties___name, 'six'), 0)), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')))) + GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) ORDER BY source.event_count DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1120,7 +1153,7 @@ toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1180,7 +1213,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop`, @@ -1191,7 +1224,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, 'sign up'), ifNull(equals(e__pdi__person.properties___filter_prop, 'filter_val'), 0), true), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), toIntervalDay(30))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id, breakdown_value) AS e @@ -1255,7 +1288,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) WHERE and(equals(e.team_id, 2), and(equals(e.event, 'sign up'), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.person_properties, 'filter_prop'), ''), 'null'), '^"|"$', ''), 'filter_val'), 0), true), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), toIntervalDay(30))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id, breakdown_value) AS e @@ -1355,7 +1388,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), and(equals(e.event, 'sign up'), ifNull(in(e__pdi.person_id, (SELECT cohortpeople.person_id AS person_id FROM cohortpeople @@ -1426,7 +1459,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), and(equals(e.event, 'sign up'), ifNull(in(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), (SELECT cohortpeople.person_id AS person_id FROM cohortpeople @@ -1470,7 +1503,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name @@ -1480,7 +1513,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(equals(e__pdi__person.properties___name, 'person1'), 0)) GROUP BY day_start) GROUP BY day_start @@ -1515,7 +1548,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name @@ -1525,7 +1558,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(equals(e__pdi__person.properties___name, 'person1'), 0)) GROUP BY day_start) GROUP BY day_start @@ -1587,7 +1620,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_name, ''), 'null') AS properties___name @@ -1597,7 +1630,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(equals(e__pdi__person.properties___name, 'person1'), 0)) GROUP BY day_start) GROUP BY day_start @@ -1659,7 +1692,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_name, ''), 'null') AS properties___name @@ -1669,7 +1702,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(equals(e__pdi__person.properties___name, 'person1'), 0)) GROUP BY day_start) GROUP BY day_start @@ -1739,7 +1772,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-03 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-03 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY day_start) GROUP BY day_start @@ -1782,7 +1815,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-03 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-03 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY day_start) GROUP BY day_start @@ -1825,7 +1858,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-03 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-03 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY day_start) GROUP BY day_start @@ -1868,7 +1901,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-03 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-03 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY day_start) GROUP BY day_start @@ -1929,7 +1962,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY day_start) GROUP BY day_start @@ -1972,7 +2005,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -2045,7 +2078,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) GROUP BY day_start, breakdown_value) @@ -2112,7 +2145,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'America/Phoenix'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'America/Phoenix')))), lessOrEquals(toTimeZone(e.timestamp, 'America/Phoenix'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'America/Phoenix'))), equals(e.event, 'sign up')) GROUP BY day_start) GROUP BY day_start @@ -2155,7 +2188,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'America/Phoenix')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'America/Phoenix'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -2228,7 +2261,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'America/Phoenix'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'America/Phoenix')))), lessOrEquals(toTimeZone(e.timestamp, 'America/Phoenix'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'America/Phoenix'))), equals(e.event, 'sign up'), true) GROUP BY day_start, breakdown_value) @@ -2295,7 +2328,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'Asia/Tokyo'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'Asia/Tokyo')))), lessOrEquals(toTimeZone(e.timestamp, 'Asia/Tokyo'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'Asia/Tokyo'))), equals(e.event, 'sign up')) GROUP BY day_start) GROUP BY day_start @@ -2338,7 +2371,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'Asia/Tokyo')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'Asia/Tokyo'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -2411,7 +2444,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'Asia/Tokyo'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'Asia/Tokyo')))), lessOrEquals(toTimeZone(e.timestamp, 'Asia/Tokyo'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'Asia/Tokyo'))), equals(e.event, 'sign up'), true) GROUP BY day_start, breakdown_value) @@ -2451,7 +2484,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 00:00:00', 6, 'UTC'))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 10:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY day_start) GROUP BY day_start @@ -2512,7 +2545,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'America/Phoenix'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 00:00:00', 6, 'America/Phoenix'))), lessOrEquals(toTimeZone(e.timestamp, 'America/Phoenix'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 10:59:59', 6, 'America/Phoenix'))), equals(e.event, 'sign up')) GROUP BY day_start) GROUP BY day_start @@ -2573,7 +2606,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'Asia/Tokyo'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 00:00:00', 6, 'Asia/Tokyo'))), lessOrEquals(toTimeZone(e.timestamp, 'Asia/Tokyo'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 10:59:59', 6, 'Asia/Tokyo'))), equals(e.event, 'sign up')) GROUP BY day_start) GROUP BY day_start @@ -2805,7 +2838,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, @@ -2817,7 +2850,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-07-01 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), and(or(ifNull(notILike(e__pdi__person.properties___email, '%@posthog.com%'), 1), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', ''), 'val'), 0)), or(ifNull(equals(e__pdi__person.`properties___$os`, 'android'), 0), ifNull(equals(e__pdi__person.`properties___$browser`, 'safari'), 0))), true) GROUP BY day_start, breakdown_value) @@ -2866,7 +2899,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, @@ -2878,7 +2911,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-07-01 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), and(ifNull(equals(e__pdi__person.`properties___$os`, 'android'), 0), ifNull(equals(e__pdi__person.`properties___$browser`, 'chrome'), 0)), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', ''), 'val'), 0), ifNull(ilike(e__pdi__person.properties___email, '%@posthog.com%'), 0)), true) GROUP BY day_start, breakdown_value) @@ -2946,7 +2979,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` @@ -2956,7 +2989,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), ifNull(equals(e__pdi__person.`properties___$some_prop`, 'some_val'), 0)) GROUP BY day_start) GROUP BY day_start @@ -2999,7 +3032,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` @@ -3009,7 +3042,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) GROUP BY day_start, breakdown_value) @@ -3237,7 +3270,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) GROUP BY e__pdi.person_id, breakdown_value) @@ -3291,7 +3324,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) GROUP BY if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), breakdown_value) @@ -3347,7 +3380,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) GROUP BY if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), breakdown_value) @@ -3387,7 +3420,7 @@ ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + (SELECT dateDiff('second', min(toTimeZone(sessions.min_timestamp, 'UTC')), max(toTimeZone(sessions.max_timestamp, 'UTC'))) AS `$session_duration`, sessions.session_id AS session_id FROM sessions WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) @@ -3429,7 +3462,7 @@ ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + (SELECT dateDiff('second', min(toTimeZone(sessions.min_timestamp, 'UTC')), max(toTimeZone(sessions.max_timestamp, 'UTC'))) AS `$session_duration`, sessions.session_id AS session_id FROM sessions WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) @@ -3549,7 +3582,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, 'viewed video'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(0))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-07 23:59:59', 6, 'UTC')))) GROUP BY e__pdi.person_id)) LIMIT 50000 SETTINGS readonly=2, @@ -3576,7 +3609,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, 'viewed video'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(0))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-07 23:59:59', 6, 'UTC')))) GROUP BY if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id))) LIMIT 50000 SETTINGS readonly=2, @@ -3614,7 +3647,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(equals(e.event, 'viewed video'), true), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(0))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-07 23:59:59', 6, 'UTC')))) GROUP BY e__pdi.person_id, breakdown_value) @@ -3657,7 +3690,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, 'viewed video'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(0))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-07 23:59:59', 6, 'UTC')))) GROUP BY e__pdi.person_id, day_start) @@ -3699,7 +3732,7 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 2) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, 'viewed video'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(0))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-07 23:59:59', 6, 'UTC')))) GROUP BY if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), day_start) @@ -3830,7 +3863,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY e__pdi.person_id) GROUP BY day_start @@ -3864,7 +3897,7 @@ ifNull(nullIf(toString(e__pdi__person.`properties___$some_prop`), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + (SELECT dateDiff('second', min(toTimeZone(sessions.min_timestamp, 'UTC')), max(toTimeZone(sessions.max_timestamp, 'UTC'))) AS `$session_duration`, sessions.session_id AS session_id FROM sessions WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) @@ -3877,7 +3910,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` @@ -3887,7 +3920,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) GROUP BY e.`$session_id`, breakdown_value @@ -3941,7 +3974,7 @@ (SELECT any(e__session.`$session_duration`) AS session_duration FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + (SELECT dateDiff('second', min(toTimeZone(sessions.min_timestamp, 'UTC')), max(toTimeZone(sessions.max_timestamp, 'UTC'))) AS `$session_duration`, sessions.session_id AS session_id FROM sessions WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) @@ -3967,7 +4000,7 @@ (SELECT any(e__session.`$session_duration`) AS session_duration FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + (SELECT dateDiff('second', min(toTimeZone(sessions.min_timestamp, 'UTC')), max(toTimeZone(sessions.max_timestamp, 'UTC'))) AS `$session_duration`, sessions.session_id AS session_id FROM sessions WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) @@ -4002,7 +4035,7 @@ toStartOfWeek(toTimeZone(e.timestamp, 'UTC'), 0) AS day_start FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + (SELECT dateDiff('second', min(toTimeZone(sessions.min_timestamp, 'UTC')), max(toTimeZone(sessions.max_timestamp, 'UTC'))) AS `$session_duration`, sessions.session_id AS session_id FROM sessions WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) @@ -4042,7 +4075,7 @@ toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + (SELECT dateDiff('second', min(toTimeZone(sessions.min_timestamp, 'UTC')), max(toTimeZone(sessions.max_timestamp, 'UTC'))) AS `$session_duration`, sessions.session_id AS session_id FROM sessions WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) @@ -4091,7 +4124,7 @@ toStartOfWeek(toTimeZone(e.timestamp, 'UTC'), 0) AS day_start FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + (SELECT dateDiff('second', min(toTimeZone(sessions.min_timestamp, 'UTC')), max(toTimeZone(sessions.max_timestamp, 'UTC'))) AS `$session_duration`, sessions.session_id AS session_id FROM sessions WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) @@ -4147,7 +4180,7 @@ toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start FROM events AS e SAMPLE 1 LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + (SELECT dateDiff('second', min(toTimeZone(sessions.min_timestamp, 'UTC')), max(toTimeZone(sessions.max_timestamp, 'UTC'))) AS `$session_duration`, sessions.session_id AS session_id FROM sessions WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) @@ -4197,7 +4230,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -4234,7 +4267,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-18 23:59:59', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-18 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -4271,7 +4304,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-18 23:59:59', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-18 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -4316,7 +4349,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-08 00:00:00', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -4363,7 +4396,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-08 00:00:00', 6, 'America/Phoenix')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'America/Phoenix'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -4410,7 +4443,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-08 00:00:00', 6, 'Asia/Tokyo')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'Asia/Tokyo'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -4458,7 +4491,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name @@ -4468,7 +4501,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, '$pageview'), or(ifNull(equals(e__pdi__person.properties___name, 'person-1'), 0), ifNull(equals(e__pdi__person.properties___name, 'person-2'), 0))), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -4516,7 +4549,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, nullIf(nullIf(person.pmat_name, ''), 'null') AS properties___name @@ -4526,7 +4559,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, '$pageview'), or(ifNull(equals(e__pdi__person.properties___name, 'person-1'), 0), ifNull(equals(e__pdi__person.properties___name, 'person-2'), 0))), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -4573,7 +4606,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 06:00:00', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 17:00:00', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -4620,7 +4653,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-18 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -4667,7 +4700,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'America/Phoenix')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-18 23:59:59', 6, 'America/Phoenix'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -4714,7 +4747,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'Asia/Tokyo')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-18 23:59:59', 6, 'Asia/Tokyo'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) diff --git a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_persons.ambr b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_persons.ambr new file mode 100644 index 0000000000000..46cefcb7c8f49 --- /dev/null +++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_persons.ambr @@ -0,0 +1,180 @@ +# serializer version: 1 +# name: TestTrendsPersons.test_trends_all_cohort_breakdown_persons_leftjoin + ''' + + SELECT count(DISTINCT person_id) + FROM cohortpeople + WHERE team_id = 2 + AND cohort_id = 2 + AND version = NULL + ''' +# --- +# name: TestTrendsPersons.test_trends_all_cohort_breakdown_persons_leftjoin.1 + ''' + /* cohort_calculation: */ + SELECT count(DISTINCT person_id) + FROM cohortpeople + WHERE team_id = 2 + AND cohort_id = 2 + AND version = 0 + ''' +# --- +# name: TestTrendsPersons.test_trends_all_cohort_breakdown_persons_leftjoin.2 + ''' + SELECT filterable_persons.id AS id, + filterable_persons.created_at AS created_at, + source.event_count AS event_count, + source.matching_events AS matching_events + FROM + (SELECT actor_id AS actor_id, + count() AS event_count, + groupUniqArray(100)(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS matching_events + FROM + (SELECT e__pdi.person_id AS actor_id, + toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.uuid AS uuid, + e.`$session_id` AS `$session_id`, + e.`$window_id` AS `$window_id` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT cohortpeople.person_id AS person_id, + 1 AS matched + FROM cohortpeople + WHERE and(equals(cohortpeople.team_id, 2), equals(cohortpeople.cohort_id, 2), equals(cohortpeople.version, 0))) AS in_cohort__46 ON equals(in_cohort__46.person_id, e__pdi.person_id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2023-05-01 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2023-05-02 00:00:00.000000', 6, 'UTC')), ifNull(equals(in_cohort__46.matched, 1), 0))) + GROUP BY actor_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count, groupUniqArray(100)(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS matching_events + FROM + (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'UTC') AS timestamp, e.uuid AS uuid, e.`$session_id` AS `$session_id`, e.`$window_id` AS `$window_id` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT cohortpeople.person_id AS person_id, 1 AS matched + FROM cohortpeople + WHERE and(equals(cohortpeople.team_id, 2), equals(cohortpeople.cohort_id, 2), equals(cohortpeople.version, 0))) AS in_cohort__46 ON equals(in_cohort__46.person_id, e__pdi.person_id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2023-05-01 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2023-05-02 00:00:00.000000', 6, 'UTC')), ifNull(equals(in_cohort__46.matched, 1), 0))) + GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY source.event_count DESC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestTrendsPersons.test_trends_all_cohort_breakdown_persons_leftjoin.3 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE and(equals(session_replay_events.team_id, 2), ifNull(greaterOrEquals(toTimeZone(session_replay_events.min_first_timestamp, 'UTC'), minus(toDateTime64('2024-06-22 05:15:07.580097', 6, 'UTC'), toIntervalDay(21))), 0), in(session_replay_events.session_id, [''])) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestTrendsPersons.test_trends_all_cohort_breakdown_persons_leftjoin.4 + ''' + SELECT filterable_persons.id AS id, + filterable_persons.created_at AS created_at, + source.event_count AS event_count, + source.matching_events AS matching_events + FROM + (SELECT actor_id AS actor_id, + count() AS event_count, + groupUniqArray(100)(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS matching_events + FROM + (SELECT e__pdi.person_id AS actor_id, + toTimeZone(e.timestamp, 'UTC') AS timestamp, + e.uuid AS uuid, + e.`$session_id` AS `$session_id`, + e.`$window_id` AS `$window_id` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2023-05-01 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2023-05-02 00:00:00.000000', 6, 'UTC')))) + GROUP BY actor_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count, groupUniqArray(100)(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS matching_events + FROM + (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'UTC') AS timestamp, e.uuid AS uuid, e.`$session_id` AS `$session_id`, e.`$window_id` AS `$window_id` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2023-05-01 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2023-05-02 00:00:00.000000', 6, 'UTC')))) + GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY source.event_count DESC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestTrendsPersons.test_trends_all_cohort_breakdown_persons_leftjoin.5 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE and(equals(session_replay_events.team_id, 2), ifNull(greaterOrEquals(toTimeZone(session_replay_events.min_first_timestamp, 'UTC'), minus(toDateTime64('2024-06-22 05:15:07.850995', 6, 'UTC'), toIntervalDay(21))), 0), in(session_replay_events.session_id, [''])) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- diff --git a/posthog/hogql_queries/insights/trends/test/test_trends_persons.py b/posthog/hogql_queries/insights/trends/test/test_trends_persons.py index d238863f940c4..5f3d54a51fe97 100644 --- a/posthog/hogql_queries/insights/trends/test/test_trends_persons.py +++ b/posthog/hogql_queries/insights/trends/test/test_trends_persons.py @@ -32,7 +32,6 @@ ClickhouseTestMixin, _create_event, _create_person, - snapshot_clickhouse_queries, ) @@ -444,7 +443,6 @@ def trends_all_cohort_breakdown_persons(self, inCohortVia: str): def test_trends_all_cohort_breakdown_persons_subquery(self): self.trends_all_cohort_breakdown_persons("subquery") - @snapshot_clickhouse_queries def test_trends_all_cohort_breakdown_persons_leftjoin(self): self.trends_all_cohort_breakdown_persons("leftjoin") diff --git a/posthog/hogql_queries/test/__snapshots__/test_sessions_timeline_query_runner.ambr b/posthog/hogql_queries/test/__snapshots__/test_sessions_timeline_query_runner.ambr index 57c9f3373c597..8896e81ff544f 100644 --- a/posthog/hogql_queries/test/__snapshots__/test_sessions_timeline_query_runner.ambr +++ b/posthog/hogql_queries/test/__snapshots__/test_sessions_timeline_query_runner.ambr @@ -47,12 +47,12 @@ ORDER BY timestamp DESC LIMIT 1001)) AS e LEFT JOIN - (SELECT toTimeZone(session_replay_events.start_time, 'UTC') AS start_time, - toTimeZone(session_replay_events.end_time, 'UTC') AS end_time, + (SELECT session_replay_events.start_time AS start_time, + session_replay_events.end_time AS end_time, session_replay_events.session_id AS session_id FROM - (SELECT min(session_replay_events.min_first_timestamp) AS start_time, - max(session_replay_events.max_last_timestamp) AS end_time, + (SELECT min(toTimeZone(session_replay_events.min_first_timestamp, 'UTC')) AS start_time, + max(toTimeZone(session_replay_events.max_last_timestamp, 'UTC')) AS end_time, session_replay_events.session_id AS session_id FROM session_replay_events WHERE equals(session_replay_events.team_id, 2) @@ -116,12 +116,12 @@ ORDER BY timestamp DESC LIMIT 1001)) AS e LEFT JOIN - (SELECT toTimeZone(session_replay_events.start_time, 'UTC') AS start_time, - toTimeZone(session_replay_events.end_time, 'UTC') AS end_time, + (SELECT session_replay_events.start_time AS start_time, + session_replay_events.end_time AS end_time, session_replay_events.session_id AS session_id FROM - (SELECT min(session_replay_events.min_first_timestamp) AS start_time, - max(session_replay_events.max_last_timestamp) AS end_time, + (SELECT min(toTimeZone(session_replay_events.min_first_timestamp, 'UTC')) AS start_time, + max(toTimeZone(session_replay_events.max_last_timestamp, 'UTC')) AS end_time, session_replay_events.session_id AS session_id FROM session_replay_events WHERE equals(session_replay_events.team_id, 2) @@ -185,12 +185,12 @@ ORDER BY timestamp DESC LIMIT 3)) AS e LEFT JOIN - (SELECT toTimeZone(session_replay_events.start_time, 'UTC') AS start_time, - toTimeZone(session_replay_events.end_time, 'UTC') AS end_time, + (SELECT session_replay_events.start_time AS start_time, + session_replay_events.end_time AS end_time, session_replay_events.session_id AS session_id FROM - (SELECT min(session_replay_events.min_first_timestamp) AS start_time, - max(session_replay_events.max_last_timestamp) AS end_time, + (SELECT min(toTimeZone(session_replay_events.min_first_timestamp, 'UTC')) AS start_time, + max(toTimeZone(session_replay_events.max_last_timestamp, 'UTC')) AS end_time, session_replay_events.session_id AS session_id FROM session_replay_events WHERE equals(session_replay_events.team_id, 2) @@ -254,12 +254,12 @@ ORDER BY timestamp DESC LIMIT 1001)) AS e LEFT JOIN - (SELECT toTimeZone(session_replay_events.start_time, 'UTC') AS start_time, - toTimeZone(session_replay_events.end_time, 'UTC') AS end_time, + (SELECT session_replay_events.start_time AS start_time, + session_replay_events.end_time AS end_time, session_replay_events.session_id AS session_id FROM - (SELECT min(session_replay_events.min_first_timestamp) AS start_time, - max(session_replay_events.max_last_timestamp) AS end_time, + (SELECT min(toTimeZone(session_replay_events.min_first_timestamp, 'UTC')) AS start_time, + max(toTimeZone(session_replay_events.max_last_timestamp, 'UTC')) AS end_time, session_replay_events.session_id AS session_id FROM session_replay_events WHERE equals(session_replay_events.team_id, 2) @@ -323,12 +323,12 @@ ORDER BY timestamp DESC LIMIT 1001)) AS e LEFT JOIN - (SELECT toTimeZone(session_replay_events.start_time, 'UTC') AS start_time, - toTimeZone(session_replay_events.end_time, 'UTC') AS end_time, + (SELECT session_replay_events.start_time AS start_time, + session_replay_events.end_time AS end_time, session_replay_events.session_id AS session_id FROM - (SELECT min(session_replay_events.min_first_timestamp) AS start_time, - max(session_replay_events.max_last_timestamp) AS end_time, + (SELECT min(toTimeZone(session_replay_events.min_first_timestamp, 'UTC')) AS start_time, + max(toTimeZone(session_replay_events.max_last_timestamp, 'UTC')) AS end_time, session_replay_events.session_id AS session_id FROM session_replay_events WHERE equals(session_replay_events.team_id, 2) @@ -392,12 +392,12 @@ ORDER BY timestamp DESC LIMIT 1001)) AS e LEFT JOIN - (SELECT toTimeZone(session_replay_events.start_time, 'UTC') AS start_time, - toTimeZone(session_replay_events.end_time, 'UTC') AS end_time, + (SELECT session_replay_events.start_time AS start_time, + session_replay_events.end_time AS end_time, session_replay_events.session_id AS session_id FROM - (SELECT min(session_replay_events.min_first_timestamp) AS start_time, - max(session_replay_events.max_last_timestamp) AS end_time, + (SELECT min(toTimeZone(session_replay_events.min_first_timestamp, 'UTC')) AS start_time, + max(toTimeZone(session_replay_events.max_last_timestamp, 'UTC')) AS end_time, session_replay_events.session_id AS session_id FROM session_replay_events WHERE equals(session_replay_events.team_id, 2) @@ -461,12 +461,12 @@ ORDER BY timestamp DESC LIMIT 1001)) AS e LEFT JOIN - (SELECT toTimeZone(session_replay_events.start_time, 'UTC') AS start_time, - toTimeZone(session_replay_events.end_time, 'UTC') AS end_time, + (SELECT session_replay_events.start_time AS start_time, + session_replay_events.end_time AS end_time, session_replay_events.session_id AS session_id FROM - (SELECT min(session_replay_events.min_first_timestamp) AS start_time, - max(session_replay_events.max_last_timestamp) AS end_time, + (SELECT min(toTimeZone(session_replay_events.min_first_timestamp, 'UTC')) AS start_time, + max(toTimeZone(session_replay_events.max_last_timestamp, 'UTC')) AS end_time, session_replay_events.session_id AS session_id FROM session_replay_events WHERE equals(session_replay_events.team_id, 2) diff --git a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index 5af20cd690c57..71311e8763ba3 100644 --- a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -1297,7 +1297,7 @@ (SELECT events.`$session_id` AS session_id FROM events LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___name, groups.group_type_index AS index, groups.group_key AS key + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___name, groups.group_type_index AS index, groups.group_key AS key FROM groups WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 1), 0)) GROUP BY groups.group_type_index, groups.group_key) AS events__group_1 ON equals(events.`$group_1`, events__group_1.key) @@ -1391,7 +1391,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), true), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview']))), in(s.distinct_id, @@ -1410,7 +1410,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0))))) GROUP BY s.session_id HAVING true @@ -1461,7 +1461,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING true)), in(s.distinct_id, @@ -1480,7 +1480,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0))))) GROUP BY s.session_id HAVING true @@ -1569,7 +1569,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), true), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview']))), in(s.distinct_id, @@ -1588,7 +1588,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0))))) GROUP BY s.session_id HAVING true @@ -1639,7 +1639,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(nullIf(nullIf(events.`mat_$browser`, ''), 'null'), 'Chrome'), 0), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING true)), in(s.distinct_id, @@ -1658,7 +1658,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0))))) GROUP BY s.session_id HAVING true @@ -1709,7 +1709,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), ifNull(equals(events__pdi__person.properties___email, 'bla'), 0))) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -1762,7 +1762,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), ifNull(equals(events__pdi__person.properties___email, 'something else'), 0))) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -2347,7 +2347,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), true), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, 'is_internal_user'), ''), 'null'), '^"|"$', ''), 'false'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0)), ifNull(notILike(events__pdi__person.properties___email, '%@posthog.com%'), 1)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview']))), in(s.distinct_id, @@ -2366,7 +2366,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(notILike(person_distinct_ids__person.properties___email, '%@posthog.com%'), 1))))) GROUP BY s.session_id HAVING true @@ -2455,7 +2455,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), true), and(ifNull(equals(nullIf(nullIf(events.mat_is_internal_user, ''), 'null'), 'false'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0)), ifNull(notILike(events__pdi__person.properties___email, '%@posthog.com%'), 1)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview']))), in(s.distinct_id, @@ -2474,7 +2474,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(notILike(person_distinct_ids__person.properties___email, '%@posthog.com%'), 1))))) GROUP BY s.session_id HAVING true @@ -3389,7 +3389,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla@gmail.com'), 0)))) GROUP BY s.session_id HAVING true @@ -3439,7 +3439,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(notILike(person_distinct_ids__person.properties___email, '%gmail.com%'), 1)))) GROUP BY s.session_id HAVING true @@ -3887,7 +3887,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE and(ifNull(equals(person_distinct_ids__person.properties___email, 'test@posthog.com'), 0), ifNull(equals(person_distinct_ids__person.properties___email, 'david@posthog.com'), 0))))) GROUP BY s.session_id HAVING true @@ -3937,7 +3937,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE or(ifNull(equals(person_distinct_ids__person.properties___email, 'test@posthog.com'), 0), ifNull(equals(person_distinct_ids__person.properties___email, 'david@posthog.com'), 0))))) GROUP BY s.session_id HAVING true @@ -4522,7 +4522,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -4610,7 +4610,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -4698,7 +4698,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true @@ -4786,7 +4786,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id HAVING true From e60c7daf46a9ab27b89ea6792324f9c7cc74ef74 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Sat, 22 Jun 2024 14:14:03 -0700 Subject: [PATCH 41/77] all tests pass --- posthog/hogql/test/test_modifiers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/posthog/hogql/test/test_modifiers.py b/posthog/hogql/test/test_modifiers.py index d118f4e32355d..df85051f0486a 100644 --- a/posthog/hogql/test/test_modifiers.py +++ b/posthog/hogql/test/test_modifiers.py @@ -82,7 +82,7 @@ class TestCase(NamedTuple): "events.event AS event", "events__pdi__person.id AS id", "events__pdi__person.properties AS properties", - "toTimeZone(events__pdi__person.created_at, %(hogql_val_1)s) AS created_at", + "events__pdi__person.created_at AS created_at", ], ), TestCase( @@ -112,7 +112,7 @@ class TestCase(NamedTuple): "events.event AS event", "events__person.id AS id", "events__person.properties AS properties", - "toTimeZone(events__person.created_at, %(hogql_val_1)s) AS created_at", + "events__person.created_at AS created_at", ], [ "events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id)", From 0a5534ede59e7ee70c205f9d14cf7ddaf503252a Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 22 Jun 2024 21:23:07 +0000 Subject: [PATCH 42/77] Update query snapshots --- .../test_session_replay_events.ambr | 32 ++++---- .../hogql/test/__snapshots__/test_query.ambr | 80 +++++++++++-------- .../test/__snapshots__/test_lazy_tables.ambr | 61 ++++++++------ .../__snapshots__/test_property_types.ambr | 28 ++++--- .../test/__snapshots__/test_funnel.ambr | 14 ++-- 5 files changed, 121 insertions(+), 94 deletions(-) diff --git a/posthog/hogql/database/schema/test/__snapshots__/test_session_replay_events.ambr b/posthog/hogql/database/schema/test/__snapshots__/test_session_replay_events.ambr index d1265cfc0cb75..922e3c812576d 100644 --- a/posthog/hogql/database/schema/test/__snapshots__/test_session_replay_events.ambr +++ b/posthog/hogql/database/schema/test/__snapshots__/test_session_replay_events.ambr @@ -82,7 +82,7 @@ JOIN (SELECT events.event AS event, events.`$session_id` AS `$session_id` - FROM events PREWHERE ifNull(greaterOrEquals(events.timestamp, minus(toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC'), toIntervalDay(90))), 0) + FROM events PREWHERE greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), minus(toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC'), toIntervalDay(90))) WHERE equals(events.team_id, 2)) AS raw_session_replay_events__events ON equals(session_replay_events.session_id, raw_session_replay_events__events.`$session_id`) WHERE and(equals(session_replay_events.team_id, 2), ifNull(equals(raw_session_replay_events__events.event, '$pageview'), 0)) ORDER BY session_replay_events.session_id ASC @@ -103,7 +103,7 @@ JOIN (SELECT replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', '') AS `properties___$current_url`, events.`$session_id` AS `$session_id` - FROM events PREWHERE ifNull(greaterOrEquals(events.timestamp, minus(toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC'), toIntervalDay(90))), 0) + FROM events PREWHERE greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), minus(toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC'), toIntervalDay(90))) WHERE equals(events.team_id, 2)) AS raw_session_replay_events__events ON equals(session_replay_events.session_id, raw_session_replay_events__events.`$session_id`) WHERE and(equals(session_replay_events.team_id, 2), ifNull(like(raw_session_replay_events__events.`properties___$current_url`, '%example.com%'), 0)) ORDER BY session_replay_events.session_id ASC @@ -125,7 +125,7 @@ JOIN (SELECT replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', '') AS `properties___$current_url`, events.`$session_id` AS `$session_id` - FROM events PREWHERE ifNull(greaterOrEquals(events.timestamp, minus(toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC'), toIntervalDay(90))), 0) + FROM events PREWHERE greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), minus(toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC'), toIntervalDay(90))) WHERE equals(events.team_id, 2)) AS raw_session_replay_events__events ON equals(session_replay_events.session_id, raw_session_replay_events__events.`$session_id`) WHERE equals(session_replay_events.team_id, 2) GROUP BY session_replay_events.session_id @@ -147,7 +147,7 @@ JOIN (SELECT events.distinct_id AS raw_session_replay_events__events___distinct_id, events.`$session_id` AS `$session_id` - FROM events PREWHERE ifNull(greaterOrEquals(events.timestamp, minus(toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC'), toIntervalDay(90))), 0) + FROM events PREWHERE greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), minus(toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC'), toIntervalDay(90))) WHERE equals(events.team_id, 2)) AS raw_session_replay_events__events ON equals(session_replay_events.session_id, raw_session_replay_events__events.`$session_id`) INNER JOIN (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS raw_session_replay_events__events__pdi___person_id, @@ -156,7 +156,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS raw_session_replay_events__events__pdi ON equals(raw_session_replay_events__events.raw_session_replay_events__events___distinct_id, raw_session_replay_events__events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__events__pdi ON equals(raw_session_replay_events__events.raw_session_replay_events__events___distinct_id, raw_session_replay_events__events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', '') AS properties___person_property @@ -166,7 +166,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__events__pdi__person ON equals(raw_session_replay_events__events__pdi.raw_session_replay_events__events__pdi___person_id, raw_session_replay_events__events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__events__pdi__person ON equals(raw_session_replay_events__events__pdi.raw_session_replay_events__events__pdi___person_id, raw_session_replay_events__events__pdi__person.id) WHERE and(equals(session_replay_events.team_id, 2), ifNull(equals(ifNull(raw_session_replay_events__events__pdi__person.properties___person_property, 'false'), 'true'), 0)) ORDER BY session_replay_events.session_id ASC LIMIT 100 SETTINGS readonly=2, @@ -189,7 +189,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) WHERE and(equals(session_replay_events.team_id, 2), ifNull(equals(raw_session_replay_events__pdi.distinct_id, 'd1'), 0)) ORDER BY session_replay_events.session_id ASC LIMIT 100 SETTINGS readonly=2, @@ -213,13 +213,13 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) WHERE and(equals(session_replay_events.team_id, 2), ifNull(equals(raw_session_replay_events__pdi__person.id, toUUIDOrNull('00000000-0000-4000-8000-000000000000')), 0)) ORDER BY session_replay_events.session_id ASC LIMIT 100 SETTINGS readonly=2, @@ -244,7 +244,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', '') AS properties___person_property @@ -254,7 +254,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) WHERE equals(session_replay_events.team_id, 2) GROUP BY session_replay_events.session_id ORDER BY session_replay_events.session_id ASC @@ -280,7 +280,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', '') AS properties___person_property @@ -290,7 +290,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', ''), 'true'), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', ''), 'true'), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) WHERE and(equals(session_replay_events.team_id, 2), ifNull(equals(raw_session_replay_events__pdi__person.properties___person_property, 'true'), 0)) GROUP BY session_replay_events.session_id ORDER BY session_replay_events.session_id ASC @@ -316,7 +316,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', '') AS properties___person_property @@ -326,7 +326,7 @@ FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) WHERE and(equals(session_replay_events.team_id, 2), ifNull(equals(raw_session_replay_events__pdi__person.properties___person_property, 'true'), 0)) GROUP BY session_replay_events.session_id ORDER BY session_replay_events.session_id ASC @@ -345,7 +345,7 @@ SELECT DISTINCT session_replay_events.session_id AS session_id FROM session_replay_events LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS duration, + (SELECT dateDiff('second', min(toTimeZone(sessions.min_timestamp, 'UTC')), max(toTimeZone(sessions.max_timestamp, 'UTC'))) AS duration, sessions.session_id AS session_id FROM sessions WHERE equals(sessions.team_id, 2) diff --git a/posthog/hogql/test/__snapshots__/test_query.ambr b/posthog/hogql/test/__snapshots__/test_query.ambr index 322929782830c..00481d6d9e824 100644 --- a/posthog/hogql/test/__snapshots__/test_query.ambr +++ b/posthog/hogql/test/__snapshots__/test_query.ambr @@ -257,7 +257,8 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 420), ifNull(in(events__pdi.person_id, ( SELECT cohortpeople.person_id AS person_id FROM cohortpeople @@ -322,7 +323,8 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE and(equals(events.team_id, 420), ifNull(in(events__pdi.person_id, ( SELECT person_static_cohort.person_id AS person_id FROM person_static_cohort @@ -402,9 +404,9 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_2)s), person.version), plus(now64(6, %(hogql_val_3)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons - WHERE ifNull(equals(persons.properties___random_uuid, %(hogql_val_3)s), 0) + WHERE ifNull(equals(persons.properties___random_uuid, %(hogql_val_4)s), 0) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=1000000, max_expanded_ast_elements=1000000, max_query_size=524288, max_bytes_before_external_group_by=0 @@ -426,7 +428,8 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE equals(e.team_id, 420) LIMIT 10 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=1000000, max_expanded_ast_elements=1000000, max_query_size=524288, max_bytes_before_external_group_by=0 @@ -448,7 +451,8 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE equals(events.team_id, 420) LIMIT 10 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=1000000, max_expanded_ast_elements=1000000, max_query_size=524288, max_bytes_before_external_group_by=0 @@ -464,13 +468,14 @@ ''' -- ClickHouse - SELECT e.event AS event, toTimeZone(e.timestamp, %(hogql_val_2)s) AS timestamp, e__pdi.distinct_id AS distinct_id, e__pdi__person.properties___sneaky_mail AS sneaky_mail + SELECT e.event AS event, toTimeZone(e.timestamp, %(hogql_val_3)s) AS timestamp, e__pdi.distinct_id AS distinct_id, e__pdi__person.properties___sneaky_mail AS sneaky_mail FROM events AS e INNER JOIN ( SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN ( SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail FROM person WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( @@ -478,7 +483,7 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE equals(e.team_id, 420) LIMIT 10 @@ -495,18 +500,19 @@ ''' -- ClickHouse - SELECT events.event AS event, toTimeZone(events.timestamp, %(hogql_val_1)s) AS timestamp, events__pdi.distinct_id AS distinct_id, events__pdi__person.id AS id + SELECT events.event AS event, toTimeZone(events.timestamp, %(hogql_val_2)s) AS timestamp, events__pdi.distinct_id AS distinct_id, events__pdi__person.id AS id FROM events INNER JOIN ( SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( SELECT person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE equals(events.team_id, 420) LIMIT 10 @@ -523,13 +529,14 @@ ''' -- ClickHouse - SELECT events.event AS event, toTimeZone(events.timestamp, %(hogql_val_2)s) AS timestamp, events__pdi.distinct_id AS distinct_id, events__pdi__person.properties___sneaky_mail AS sneaky_mail + SELECT events.event AS event, toTimeZone(events.timestamp, %(hogql_val_3)s) AS timestamp, events__pdi.distinct_id AS distinct_id, events__pdi__person.properties___sneaky_mail AS sneaky_mail FROM events INNER JOIN ( SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail FROM person WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( @@ -537,7 +544,7 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE equals(events.team_id, 420) LIMIT 10 @@ -554,13 +561,14 @@ ''' -- ClickHouse - SELECT e.event AS event, toTimeZone(e.timestamp, %(hogql_val_2)s) AS timestamp, e__pdi__person.properties___sneaky_mail AS sneaky_mail + SELECT e.event AS event, toTimeZone(e.timestamp, %(hogql_val_3)s) AS timestamp, e__pdi__person.properties___sneaky_mail AS sneaky_mail FROM events AS e INNER JOIN ( SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN ( SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail FROM person WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( @@ -568,7 +576,7 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE equals(e.team_id, 420) LIMIT 10 @@ -591,7 +599,8 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS s__pdi ON equals(s.distinct_id, s__pdi.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS s__pdi ON equals(s.distinct_id, s__pdi.distinct_id) LEFT JOIN ( SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail FROM person WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( @@ -599,7 +608,7 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS s__pdi__person ON equals(s__pdi.s__pdi___person_id, s__pdi__person.id) WHERE equals(s.team_id, 420) GROUP BY s__pdi__person.properties___sneaky_mail @@ -650,7 +659,8 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS pdi LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS pdi LEFT JOIN ( SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail FROM person WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( @@ -658,7 +668,7 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS pdi__person ON equals(pdi.pdi___person_id, pdi__person.id) LIMIT 10 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=1000000, max_expanded_ast_elements=1000000, max_query_size=524288, max_bytes_before_external_group_by=0 @@ -674,18 +684,19 @@ ''' -- ClickHouse - SELECT pdi.distinct_id AS distinct_id, toTimeZone(pdi__person.created_at, %(hogql_val_1)s) AS created_at + SELECT pdi.distinct_id AS distinct_id, pdi__person.created_at AS created_at FROM ( SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS pdi___person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS pdi LEFT JOIN ( - SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS pdi LEFT JOIN ( + SELECT argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS pdi__person ON equals(pdi.pdi___person_id, pdi__person.id) LIMIT 10 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=1000000, max_expanded_ast_elements=1000000, max_query_size=524288, max_bytes_before_external_group_by=0 @@ -701,13 +712,14 @@ ''' -- ClickHouse - SELECT e.event AS event, toTimeZone(e.timestamp, %(hogql_val_2)s) AS timestamp, pdi.distinct_id AS distinct_id, p.id AS id, p.properties___sneaky_mail AS sneaky_mail + SELECT e.event AS event, toTimeZone(e.timestamp, %(hogql_val_3)s) AS timestamp, pdi.distinct_id AS distinct_id, p.id AS id, p.properties___sneaky_mail AS sneaky_mail FROM events AS e LEFT JOIN ( SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS pdi ON equals(pdi.distinct_id, e.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS pdi ON equals(pdi.distinct_id, e.distinct_id) LEFT JOIN ( SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail FROM person WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( @@ -715,7 +727,7 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS p ON equals(p.id, pdi.person_id) WHERE equals(e.team_id, 420) LIMIT 100 @@ -738,7 +750,8 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=1000000, max_expanded_ast_elements=1000000, max_query_size=524288, max_bytes_before_external_group_by=0 @@ -753,13 +766,14 @@ ''' -- ClickHouse - SELECT events.event AS event, toTimeZone(events.timestamp, %(hogql_val_2)s) AS timestamp, events__pdi__person.id AS id, events__pdi__person.properties___sneaky_mail AS sneaky_mail + SELECT events.event AS event, toTimeZone(events.timestamp, %(hogql_val_3)s) AS timestamp, events__pdi__person.id AS id, events__pdi__person.properties___sneaky_mail AS sneaky_mail FROM events INNER JOIN ( SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail FROM person WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( @@ -767,7 +781,7 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE equals(events.team_id, 420) LIMIT 10 diff --git a/posthog/hogql/transforms/test/__snapshots__/test_lazy_tables.ambr b/posthog/hogql/transforms/test/__snapshots__/test_lazy_tables.ambr index d99b73ba703a4..125d4641bf217 100644 --- a/posthog/hogql/transforms/test/__snapshots__/test_lazy_tables.ambr +++ b/posthog/hogql/transforms/test/__snapshots__/test_lazy_tables.ambr @@ -13,7 +13,7 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS cohort_people__new_person ON equals(cohort_people.cohort_people___person_id, cohort_people__new_person.cohort_people__new_person___id) LIMIT 50000 ''' @@ -27,7 +27,7 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons LEFT JOIN ( SELECT events.event AS event, event AS persons__events___event FROM events @@ -49,7 +49,7 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS cohort_people__new_person ON equals(cohort_people.cohort_people___person_id, cohort_people__new_person.cohort_people__new_person___properties___email) LIMIT 50000 ''' @@ -63,7 +63,7 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_2)s), person.version), plus(now64(6, %(hogql_val_3)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons LIMIT 50000 ''' @@ -77,12 +77,13 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, events__pdi.person_id) WHERE equals(events.team_id, 420) LIMIT 10 @@ -97,13 +98,14 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) LEFT OUTER JOIN ( SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 420) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) WHERE equals(events.team_id, 420) LIMIT 50000 ''' @@ -117,12 +119,13 @@ FROM person_distinct_id_overrides WHERE equals(person_distinct_id_overrides.team_id, 420) GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0)) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( SELECT person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE equals(events.team_id, 420) LIMIT 50000 @@ -137,7 +140,8 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE equals(events.team_id, 420) LIMIT 50000 ''' @@ -151,12 +155,13 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN ( SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser`, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) LIMIT 50000 ''' @@ -170,12 +175,13 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS person_distinct_ids LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN ( SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s, %(hogql_val_1)s, %(hogql_val_2)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser___in___json`, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_3)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_3)s), person.version), plus(now64(6, %(hogql_val_4)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) LIMIT 50000 ''' @@ -189,7 +195,8 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) WHERE equals(events.team_id, 420) LIMIT 50000 ''' @@ -203,12 +210,13 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( SELECT person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE equals(events.team_id, 420) LIMIT 50000 @@ -223,12 +231,13 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser`, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE equals(events.team_id, 420) LIMIT 50000 @@ -243,12 +252,13 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, argMax(person.properties, person.version) AS properties, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE equals(events.team_id, 420) LIMIT 50000 @@ -263,12 +273,13 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( SELECT person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE equals(events.team_id, 420) LIMIT 50000 @@ -283,7 +294,7 @@ FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_0)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons LIMIT 50000 ''' diff --git a/posthog/hogql/transforms/test/__snapshots__/test_property_types.ambr b/posthog/hogql/transforms/test/__snapshots__/test_property_types.ambr index 3a14a373810dd..9ee90fa0d16e0 100644 --- a/posthog/hogql/transforms/test/__snapshots__/test_property_types.ambr +++ b/posthog/hogql/transforms/test/__snapshots__/test_property_types.ambr @@ -2,16 +2,16 @@ # name: TestPropertyTypes.test_data_warehouse_person_property_types ''' - SELECT persons__extended_properties.string_prop AS string_prop, persons__extended_properties.int_prop AS int_prop, transform(persons__extended_properties.bool_prop, %(hogql_val_7)s, %(hogql_val_8)s, NULL) AS bool_prop + SELECT persons__extended_properties.string_prop AS string_prop, persons__extended_properties.int_prop AS int_prop, persons__extended_properties.bool_prop AS bool_prop FROM ( SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS persons___properties___email, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons LEFT JOIN ( SELECT extended_properties.string_prop AS string_prop, extended_properties.int_prop AS int_prop, extended_properties.bool_prop AS bool_prop, string_prop AS persons__extended_properties___string_prop - FROM s3(%(hogql_val_2_sensitive)s, %(hogql_val_5_sensitive)s, %(hogql_val_6_sensitive)s, %(hogql_val_3)s, %(hogql_val_4)s) AS extended_properties) AS persons__extended_properties ON equals(persons.persons___properties___email, persons__extended_properties.persons__extended_properties___string_prop) + FROM s3(%(hogql_val_3_sensitive)s, %(hogql_val_6_sensitive)s, %(hogql_val_7_sensitive)s, %(hogql_val_4)s, %(hogql_val_5)s) AS extended_properties) AS persons__extended_properties ON equals(persons.persons___properties___email, persons__extended_properties.persons__extended_properties___string_prop) WHERE ifNull(equals(bool_prop, true), 0) LIMIT 50000 ''' @@ -19,9 +19,9 @@ # name: TestPropertyTypes.test_group_property_types ''' - SELECT accurateCastOrNull(events__group_0.properties___inty, %(hogql_val_1)s) AS inty + SELECT events__group_0.properties___inty AS inty FROM events LEFT JOIN ( - SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___inty, groups.group_type_index AS index, groups.group_key AS key + SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, %(hogql_val_1)s)) AS properties___inty, groups.group_type_index AS index, groups.group_key AS key FROM groups WHERE and(equals(groups.team_id, 420), ifNull(equals(index, 0), 0)) GROUP BY groups.group_type_index, groups.group_key) AS events__group_0 ON equals(events.`$group_0`, events__group_0.key) @@ -32,18 +32,19 @@ # name: TestPropertyTypes.test_resolve_property_types_combined ''' - SELECT multiply(accurateCastOrNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, %(hogql_val_2)s), ''), 'null'), '^"|"$', ''), %(hogql_val_3)s), accurateCastOrNull(events__pdi__person.properties___tickets, %(hogql_val_4)s)) + SELECT multiply(accurateCastOrNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, %(hogql_val_4)s), ''), 'null'), '^"|"$', ''), %(hogql_val_5)s), events__pdi__person.properties___tickets) FROM events INNER JOIN ( SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( - SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___tickets, person.id AS id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( + SELECT argMax(accurateCastOrNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), %(hogql_val_1)s), person.version) AS properties___tickets, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_2)s), person.version), plus(now64(6, %(hogql_val_3)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE equals(events.team_id, 420) LIMIT 50000 @@ -61,18 +62,19 @@ # name: TestPropertyTypes.test_resolve_property_types_event_person_poe_off ''' - SELECT parseDateTime64BestEffortOrNull(events__pdi__person.properties___provided_timestamp, 6, %(hogql_val_2)s) AS provided_timestamp + SELECT events__pdi__person.properties___provided_timestamp AS provided_timestamp FROM events INNER JOIN ( SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 420) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( - SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___provided_timestamp, person.id AS id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) + SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( + SELECT argMax(parseDateTime64BestEffortOrNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), 6, %(hogql_val_1)s), person.version) AS properties___provided_timestamp, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_2)s), person.version), plus(now64(6, %(hogql_val_3)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE equals(events.team_id, 420) LIMIT 50000 diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index 0f433a19be9f0..e01491ba20029 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -1079,7 +1079,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('buy', 'sign up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1180,7 +1180,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('buy', 'sign up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) ARRAY JOIN prop_vals AS prop WHERE ifNull(notEquals(prop, []), isNotNull(prop) @@ -1280,7 +1280,7 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('buy', 'sign up'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1412,7 +1412,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1550,7 +1550,7 @@ argMinIf(prop, timestamp, isNotNull(prop)) OVER (PARTITION BY aggregation_target) AS prop_vals FROM events AS e LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups @@ -1693,9 +1693,9 @@ FROM person_distinct_id2 WHERE equals(person_distinct_id2.team_id, 2) GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'UTC')) AS properties___industry, groups.group_type_index AS index, groups.group_key AS key FROM groups From a082165bc6accfed3a6a007f1049869c1b115192 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Sat, 22 Jun 2024 14:32:39 -0700 Subject: [PATCH 43/77] work on all queries --- posthog/hogql_queries/actors_query_runner.py | 8 +- .../insights/stickiness_query_runner.py | 9 +- .../test_insight_actors_query_runner.ambr | 124 ++++++++++++++---- 3 files changed, 106 insertions(+), 35 deletions(-) diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index 08108a0a1a7a8..39b4760a961a6 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -16,7 +16,6 @@ ActorsQueryResponse, CachedActorsQueryResponse, DashboardFilter, - TrendsQuery, ) from posthog.settings import HOGQL_INCREASED_MAX_EXECUTION_TIME @@ -251,9 +250,10 @@ def to_query(self) -> ast.SelectQuery: source_alias = "source" origin = self.strategy.origin - if isinstance(self.strategy, PersonStrategy) and any( - isinstance(x, C) for x in [getattr(self.query.source, "source", None)] for C in (TrendsQuery,) - ): + if isinstance(self.strategy, PersonStrategy): + # if isinstance(self.strategy, PersonStrategy) and any( + # isinstance(x, C) for x in [getattr(self.query.source, "source", None)] for C in (TrendsQuery,) + # ): # SelectUnionQuery (used by Stickiness) doesn't have settings if hasattr(source_query, "settings"): if source_query.settings is None: diff --git a/posthog/hogql_queries/insights/stickiness_query_runner.py b/posthog/hogql_queries/insights/stickiness_query_runner.py index 3087e4d99ee5d..b38ef7e26a6c8 100644 --- a/posthog/hogql_queries/insights/stickiness_query_runner.py +++ b/posthog/hogql_queries/insights/stickiness_query_runner.py @@ -181,10 +181,11 @@ def to_actors_query(self, interval_num: Optional[int] = None) -> ast.SelectQuery for series in self.series: events_query = self._events_query(series) - aggregation_alias = "person_id" - if series.series.math == "hogql" and series.series.math_hogql is not None: - aggregation_alias = "actor_id" - elif series.series.math == "unique_group" and series.series.math_group_type_index is not None: + aggregation_alias = "actor_id" + # if series.series.math == "hogql" and series.series.math_hogql is not None: + # aggregation_alias = "actor_id" + # elif series.series.math == "unique_group" and series.series.math_group_type_index is not None: + if series.series.math == "unique_group" and series.series.math_group_type_index is not None: aggregation_alias = "group_key" events_query.select = [ast.Alias(alias=aggregation_alias, expr=ast.Field(chain=["aggregation_target"]))] events_query.group_by = None diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index c9aeb3e0ff95a..eb18b655b31f4 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -3,7 +3,7 @@ ''' SELECT name AS name FROM - (SELECT persons.properties___name AS name + (SELECT filterable_persons.properties___name AS name FROM (SELECT aggregation_target AS actor_id FROM @@ -55,18 +55,47 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.properties___name ASC) + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e__pdi.person_id AS aggregation_target, if(equals(e.event, '$pageview'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(equals(e.event, '$pageview'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'US/Pacific')), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-19 23:59:59.999999', 6, 'US/Pacific'))), in(e.event, tuple('$pageview'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [2]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.properties___name ASC) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, @@ -81,7 +110,7 @@ ''' SELECT n AS n FROM - (SELECT persons.properties___name AS n + (SELECT filterable_persons.properties___name AS n FROM (SELECT DISTINCT actor_id AS actor_id FROM @@ -120,18 +149,44 @@ WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) GROUP BY actor_id) WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) - and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0))) AS source + and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.properties___name ASC) + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT DISTINCT actor_id AS actor_id + FROM + (SELECT min(events__pdi__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) + and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) + and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) + and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, arrayJoin(temp_concat) AS period_status_pairs, period_status_pairs.1 AS start_of_period, period_status_pairs.2 AS status, events__pdi.person_id AS actor_id + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) + GROUP BY actor_id) + WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) + and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.properties___name ASC) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, @@ -179,9 +234,9 @@ ''' SELECT name AS name FROM - (SELECT persons.properties___name AS name + (SELECT filterable_persons.properties___name AS name FROM - (SELECT aggregation_target AS person_id + (SELECT aggregation_target AS actor_id FROM (SELECT e__pdi.person_id AS aggregation_target, count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals @@ -200,13 +255,28 @@ (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.person_id) - ORDER BY persons.properties___name ASC) + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT e__pdi.person_id AS aggregation_target, count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 2), 0)) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.properties___name ASC) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, From 324ea5a054e7a7c3b719dd616ff2ad11e1017cff Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Sat, 22 Jun 2024 14:43:21 -0700 Subject: [PATCH 44/77] all queries --- posthog/hogql_queries/actors_query_runner.py | 25 +++++++++++-------- .../test_insight_actors_query_runner.ambr | 5 ++-- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index 39b4760a961a6..c2104de70aab4 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -4,6 +4,7 @@ from posthog.clickhouse.query_tagging import tag_queries, NonSerializableTags from posthog.hogql import ast +from posthog.hogql.ast import SelectQuery from posthog.hogql.constants import HogQLQuerySettings from posthog.hogql.parser import parse_expr, parse_order_expr from posthog.hogql.property import has_aggregation @@ -255,20 +256,22 @@ def to_query(self) -> ast.SelectQuery: # isinstance(x, C) for x in [getattr(self.query.source, "source", None)] for C in (TrendsQuery,) # ): # SelectUnionQuery (used by Stickiness) doesn't have settings - if hasattr(source_query, "settings"): - if source_query.settings is None: - source_query.settings = HogQLQuerySettings() - source_query.settings.use_query_cache = True - source_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME - s = ast.SelectQuery( - select=[ast.Field(chain=[source_alias, "actor_id"])], - select_from=ast.JoinExpr(table=source_query, alias=source_alias), - ) - + for select_query in ( + [source_query] if isinstance(source_query, SelectQuery) else source_query.select_queries + ): + if select_query.settings is None: + select_query.settings = HogQLQuerySettings() + select_query.settings.use_query_cache = True + select_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME tag_queries( **{ NonSerializableTags.FILTERABLE_PERSONS.value: ast.CompareOperation( - left=ast.Field(chain=["id"]), right=s, op=ast.CompareOperationOp.In + left=ast.Field(chain=["id"]), + right=ast.SelectQuery( + select=[ast.Field(chain=[source_alias, "actor_id"])], + select_from=ast.JoinExpr(table=source_query, alias=source_alias), + ), + op=ast.CompareOperationOp.In, ) } ) diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index eb18b655b31f4..2d7574764ccb2 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -250,7 +250,8 @@ HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 2), 0)) AS source + WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name @@ -273,7 +274,7 @@ HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 2), 0)) AS source))) + WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) ORDER BY filterable_persons.properties___name ASC) From 53736686e224d2f91a8e26b28f7d54dde9854c24 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 22 Jun 2024 21:52:36 +0000 Subject: [PATCH 45/77] Update query snapshots --- .../test_funnel_trends_persons.ambr | 159 ++++++++++++++++-- 1 file changed, 141 insertions(+), 18 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr index 8a658948dedc5..bf89083a6719f 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr @@ -1,8 +1,8 @@ # serializer version: 1 # name: TestFunnelTrendsPersons.test_funnel_trend_persons_returns_recordings ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -139,14 +139,55 @@ GROUP BY aggregation_target, entrance_period_start) WHERE ifNull(greaterOrEquals(steps_completed, 2), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id, step_1_matching_events AS matching_events + FROM + (SELECT aggregation_target AS aggregation_target, toStartOfDay(timestamp) AS entrance_period_start, max(steps) AS steps_completed, groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(step_2_matching_event) AS step_2_matching_events, groupArray(10)(final_matching_event) AS final_matching_events + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, if(ifNull(less(latest_2, latest_1), 0), NULL, latest_2) AS latest_2, if(ifNull(less(latest_2, latest_1), 0), NULL, uuid_2) AS uuid_2, if(ifNull(less(latest_2, latest_1), 0), NULL, `$session_id_2`) AS `$session_id_2`, if(ifNull(less(latest_2, latest_1), 0), NULL, `$window_id_2`) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'step one'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'step two'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'step three'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-07 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) + WHERE ifNull(equals(step_0, 1), 0)) + WHERE ifNull(equals(entrance_period_start, toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), 0) + GROUP BY aggregation_target, entrance_period_start) + WHERE ifNull(greaterOrEquals(steps_completed, 2), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -175,8 +216,8 @@ # --- # name: TestFunnelTrendsPersons.test_funnel_trend_persons_with_drop_off ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -313,14 +354,55 @@ GROUP BY aggregation_target, entrance_period_start) WHERE and(ifNull(greaterOrEquals(steps_completed, 1), 0), ifNull(less(steps_completed, 3), 0)) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events + FROM + (SELECT aggregation_target AS aggregation_target, toStartOfDay(timestamp) AS entrance_period_start, max(steps) AS steps_completed, groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(step_2_matching_event) AS step_2_matching_events, groupArray(10)(final_matching_event) AS final_matching_events + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, if(ifNull(less(latest_2, latest_1), 0), NULL, latest_2) AS latest_2, if(ifNull(less(latest_2, latest_1), 0), NULL, uuid_2) AS uuid_2, if(ifNull(less(latest_2, latest_1), 0), NULL, `$session_id_2`) AS `$session_id_2`, if(ifNull(less(latest_2, latest_1), 0), NULL, `$window_id_2`) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'step one'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'step two'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'step three'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-07 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) + WHERE ifNull(equals(step_0, 1), 0)) + WHERE ifNull(equals(entrance_period_start, toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), 0) + GROUP BY aggregation_target, entrance_period_start) + WHERE and(ifNull(greaterOrEquals(steps_completed, 1), 0), ifNull(less(steps_completed, 3), 0)) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -349,8 +431,8 @@ # --- # name: TestFunnelTrendsPersons.test_funnel_trend_persons_with_no_to_step ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -487,14 +569,55 @@ GROUP BY aggregation_target, entrance_period_start) WHERE ifNull(greaterOrEquals(steps_completed, 3), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events + FROM + (SELECT aggregation_target AS aggregation_target, toStartOfDay(timestamp) AS entrance_period_start, max(steps) AS steps_completed, groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(step_2_matching_event) AS step_2_matching_events, groupArray(10)(final_matching_event) AS final_matching_events + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, if(ifNull(less(latest_2, latest_1), 0), NULL, latest_2) AS latest_2, if(ifNull(less(latest_2, latest_1), 0), NULL, uuid_2) AS uuid_2, if(ifNull(less(latest_2, latest_1), 0), NULL, `$session_id_2`) AS `$session_id_2`, if(ifNull(less(latest_2, latest_1), 0), NULL, `$window_id_2`) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'step one'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'step two'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'step three'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-07 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) + WHERE ifNull(equals(step_0, 1), 0)) + WHERE ifNull(equals(entrance_period_start, toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), 0) + GROUP BY aggregation_target, entrance_period_start) + WHERE ifNull(greaterOrEquals(steps_completed, 3), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, From 38939d666169dfd7cf46bc1e35c5f92e5d1a2786 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 22 Jun 2024 21:53:48 +0000 Subject: [PATCH 46/77] Update query snapshots --- .../test/__snapshots__/test_funnel.ambr | 223 +++++++-- .../test_funnel_correlation.ambr | 464 ++++++++++++++++-- .../test_funnel_correlations_persons.ambr | 298 +++++++++-- .../__snapshots__/test_funnel_persons.ambr | 168 ++++++- .../test_funnel_strict_persons.ambr | 144 +++++- 5 files changed, 1155 insertions(+), 142 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index e01491ba20029..4c3ab9d949e19 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -98,9 +98,9 @@ # --- # name: TestFOSSFunnel.test_funnel_conversion_window_seconds.1 ''' - SELECT persons.id, - persons.id AS id, - persons.created_at AS created_at, + SELECT filterable_persons.id, + filterable_persons.id AS id, + filterable_persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -183,15 +183,50 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, median(step_2_conversion_time) AS step_2_median_conversion_time_inner + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, step_2_conversion_time AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalSecond(15))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalSecond(15))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalSecond(15))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalSecond(15))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalSecond(15))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, if(ifNull(less(latest_2, latest_1), 0), NULL, latest_2) AS latest_2 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, if(equals(e.event, 'step one'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(equals(e.event, 'step two'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(equals(e.event, 'step three'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2 + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-05-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [2, 3]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.created_at DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -507,9 +542,9 @@ # --- # name: TestFOSSFunnel.test_funnel_with_property_groups.1 ''' - SELECT persons.id, - persons.id AS id, - persons.created_at AS created_at, + SELECT filterable_persons.id, + filterable_persons.id AS id, + filterable_persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -604,15 +639,59 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, median(step_2_conversion_time) AS step_2_median_conversion_time_inner + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, step_2_conversion_time AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, if(ifNull(less(latest_2, latest_1), 0), NULL, latest_2) AS latest_2 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(and(equals(e.event, '$pageview'), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', ''), 'aloha.com'), 0)), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(and(equals(e.event, '$pageview'), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', ''), 'aloha2.com'), 0)), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2 + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2, 3]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.created_at DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -626,9 +705,9 @@ # --- # name: TestFOSSFunnel.test_funnel_with_property_groups.2 ''' - SELECT persons.id, - persons.id AS id, - persons.created_at AS created_at, + SELECT filterable_persons.id, + filterable_persons.id AS id, + filterable_persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -723,15 +802,59 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, median(step_2_conversion_time) AS step_2_median_conversion_time_inner + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, step_2_conversion_time AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, if(ifNull(less(latest_2, latest_1), 0), NULL, latest_2) AS latest_2 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(and(equals(e.event, '$pageview'), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', ''), 'aloha.com'), 0)), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(and(equals(e.event, '$pageview'), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', ''), 'aloha2.com'), 0)), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2 + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [2, 3]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.created_at DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -745,9 +868,9 @@ # --- # name: TestFOSSFunnel.test_funnel_with_property_groups.3 ''' - SELECT persons.id, - persons.id AS id, - persons.created_at AS created_at, + SELECT filterable_persons.id, + filterable_persons.id AS id, + filterable_persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -842,15 +965,59 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, median(step_2_conversion_time) AS step_2_median_conversion_time_inner + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, step_2_conversion_time AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, latest_2 AS latest_2, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, step_2 AS step_2, if(ifNull(less(latest_2, latest_1), 0), NULL, latest_2) AS latest_2 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2 + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(and(equals(e.event, '$pageview'), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', ''), 'aloha.com'), 0)), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(and(equals(e.event, '$pageview'), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', ''), 'aloha2.com'), 0)), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2 + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__pdi__person.properties___email, '%.com%'), 0), ifNull(equals(e__pdi__person.properties___age, '20'), 0)), or(ifNull(ilike(e__pdi__person.properties___email, '%.org%'), 0), ifNull(equals(e__pdi__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [3]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.created_at DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index 7124c534df351..ba4e250851da9 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -318,8 +318,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.1 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -431,14 +431,60 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -467,8 +513,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.3 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -580,14 +626,60 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -616,8 +708,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.5 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -729,14 +821,60 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -765,8 +903,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.7 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -878,14 +1016,60 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1077,8 +1261,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties_materialized.1 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -1190,14 +1374,60 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1226,8 +1456,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties_materialized.3 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -1339,14 +1569,60 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1375,8 +1651,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties_materialized.5 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -1488,14 +1764,60 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1524,8 +1846,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties_materialized.7 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -1637,14 +1959,60 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'paid'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__pdi__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr index 2cd43d115573b..5e93052861bc9 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr @@ -1,8 +1,8 @@ # serializer version: 1 # name: TestFunnelCorrelationsActors.test_funnel_correlation_on_event_with_recordings ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -111,14 +111,58 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed']), equals(event.event, 'insight loaded'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM events AS event + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS event__pdi ON equals(event.distinct_id, event__pdi.distinct_id) + JOIN + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, '$pageview'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed']), equals(event.event, 'insight loaded'), ifNull(equals(funnel_actors.steps, 2), 0)) + GROUP BY actor_id + ORDER BY actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -147,8 +191,8 @@ # --- # name: TestFunnelCorrelationsActors.test_funnel_correlation_on_event_with_recordings.2 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -323,14 +367,70 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed', 'insight updated']), equals(event.event, 'insight loaded'), ifNull(notEquals(funnel_actors.steps, 3), 1)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM events AS event + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS event__pdi ON equals(event.distinct_id, event__pdi.distinct_id) + JOIN + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(step_2_matching_event) AS step_2_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_2, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, median(step_2_conversion_time) AS step_2_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, step_2_conversion_time AS step_2_conversion_time, latest_0 AS latest_0, latest_2 AS latest_2, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, if(ifNull(less(latest_2, latest_1), 0), NULL, latest_2) AS latest_2, if(ifNull(less(latest_2, latest_1), 0), NULL, uuid_2) AS uuid_2, if(ifNull(less(latest_2, latest_1), 0), NULL, `$session_id_2`) AS `$session_id_2`, if(ifNull(less(latest_2, latest_1), 0), NULL, `$window_id_2`) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, '$pageview'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'insight updated'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed', 'insight updated'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2, 3]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) + WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed', 'insight updated']), equals(event.event, 'insight loaded'), ifNull(notEquals(funnel_actors.steps, 3), 1)) + GROUP BY actor_id + ORDER BY actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -359,8 +459,8 @@ # --- # name: TestFunnelCorrelationsActors.test_funnel_correlation_on_properties_with_recordings ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -472,14 +572,60 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, '$pageview'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -508,8 +654,8 @@ # --- # name: TestFunnelCorrelationsActors.test_strict_funnel_correlation_with_recordings ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -621,14 +767,60 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS latest_1, min(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS uuid_1, min(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$session_id_1`, min(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, '$pageview'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(equals(funnel_actors.steps, 2), 0) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -657,8 +849,8 @@ # --- # name: TestFunnelCorrelationsActors.test_strict_funnel_correlation_with_recordings.2 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -770,14 +962,60 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, final_matching_events AS matching_events, timestamp AS timestamp, steps AS steps, final_timestamp AS final_timestamp, first_timestamp AS first_timestamp + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, argMax(latest_0, steps) AS timestamp, argMax(latest_1, steps) AS final_timestamp, argMax(latest_0, steps) AS first_timestamp, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, latest_0 AS latest_0, latest_1 AS latest_1, latest_0 AS latest_0 + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, step_1_matching_event)) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS latest_1, min(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS uuid_1, min(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$session_id_1`, min(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$window_id_1` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, '$pageview'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__pdi__person.properties___foo, 'bar'), 0)))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2]), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr index abd09217bc9af..9bb5d369842e6 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr @@ -1,8 +1,8 @@ # serializer version: 1 # name: TestFunnelPersons.test_funnel_person_recordings ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -153,14 +153,58 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id, step_0_matching_events AS matching_events + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(step_2_matching_event) AS step_2_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, median(step_2_conversion_time) AS step_2_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, step_2_conversion_time AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, if(ifNull(less(latest_2, latest_1), 0), NULL, latest_2) AS latest_2, if(ifNull(less(latest_2, latest_1), 0), NULL, uuid_2) AS uuid_2, if(ifNull(less(latest_2, latest_1), 0), NULL, `$session_id_2`) AS `$session_id_2`, if(ifNull(less(latest_2, latest_1), 0), NULL, `$window_id_2`) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'step one'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'step two'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'step three'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2, 3]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -189,8 +233,8 @@ # --- # name: TestFunnelPersons.test_funnel_person_recordings.2 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -341,14 +385,58 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id, step_1_matching_events AS matching_events + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(step_2_matching_event) AS step_2_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, median(step_2_conversion_time) AS step_2_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, step_2_conversion_time AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, if(ifNull(less(latest_2, latest_1), 0), NULL, latest_2) AS latest_2, if(ifNull(less(latest_2, latest_1), 0), NULL, uuid_2) AS uuid_2, if(ifNull(less(latest_2, latest_1), 0), NULL, `$session_id_2`) AS `$session_id_2`, if(ifNull(less(latest_2, latest_1), 0), NULL, `$window_id_2`) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'step one'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'step two'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'step three'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [2, 3]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -377,8 +465,8 @@ # --- # name: TestFunnelPersons.test_funnel_person_recordings.4 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -529,14 +617,58 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(equals(steps, 2), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id, step_1_matching_events AS matching_events + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(step_2_matching_event) AS step_2_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, median(step_2_conversion_time) AS step_2_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, step_2_conversion_time AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, if(ifNull(less(latest_2, latest_1), 0), NULL, latest_2) AS latest_2, if(ifNull(less(latest_2, latest_1), 0), NULL, uuid_2) AS uuid_2, if(ifNull(less(latest_2, latest_1), 0), NULL, `$session_id_2`) AS `$session_id_2`, if(ifNull(less(latest_2, latest_1), 0), NULL, `$window_id_2`) AS `$window_id_2` + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'step one'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'step two'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'step three'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(equals(steps, 2), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr index 7ff818de40361..cc7685ff37c47 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr @@ -1,8 +1,8 @@ # serializer version: 1 # name: TestFunnelStrictStepsPersons.test_strict_funnel_person_recordings ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -113,14 +113,50 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id, step_0_matching_events AS matching_events + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(step_2_matching_event) AS step_2_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, median(step_2_conversion_time) AS step_2_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, step_2_conversion_time AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS latest_1, min(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS uuid_1, min(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$session_id_1`, min(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS latest_2, min(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS uuid_2, min(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS `$session_id_2`, min(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'step one'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'step two'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'step three'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC')))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2, 3]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -149,8 +185,8 @@ # --- # name: TestFunnelStrictStepsPersons.test_strict_funnel_person_recordings.2 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -261,14 +297,50 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id, step_1_matching_events AS matching_events + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(step_2_matching_event) AS step_2_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, median(step_2_conversion_time) AS step_2_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, step_2_conversion_time AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS latest_1, min(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS uuid_1, min(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$session_id_1`, min(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS latest_2, min(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS uuid_2, min(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS `$session_id_2`, min(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'step one'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'step two'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'step three'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC')))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [2, 3]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -297,8 +369,8 @@ # --- # name: TestFunnelStrictStepsPersons.test_strict_funnel_person_recordings.4 ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -409,14 +481,50 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(equals(steps, 2), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id, step_1_matching_events AS matching_events + FROM + (SELECT groupArray(10)(step_0_matching_event) AS step_0_matching_events, groupArray(10)(step_1_matching_event) AS step_1_matching_events, groupArray(10)(step_2_matching_event) AS step_2_matching_events, groupArray(10)(final_matching_event) AS final_matching_events, aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, median(step_2_conversion_time) AS step_2_median_conversion_time_inner + FROM + (SELECT tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event, aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, step_2_conversion_time AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0), ifNull(lessOrEquals(latest_1, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 3, if(and(ifNull(lessOrEquals(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1)) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time, if(and(isNotNull(latest_2), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_1, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_1, latest_2), NULL) AS step_2_conversion_time, tuple(latest_0, uuid_0, `$session_id_0`, `$window_id_0`) AS step_0_matching_event, tuple(latest_1, uuid_1, `$session_id_1`, `$window_id_1`) AS step_1_matching_event, tuple(latest_2, uuid_2, `$session_id_2`, `$window_id_2`) AS step_2_matching_event, if(isNull(latest_0), tuple(NULL, NULL, NULL, NULL), if(isNull(latest_1), step_0_matching_event, if(isNull(latest_2), step_1_matching_event, step_2_matching_event))) AS final_matching_event + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS latest_1, min(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS uuid_1, min(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$session_id_1`, min(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS latest_2, min(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS uuid_2, min(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS `$session_id_2`, min(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'step one'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'step two'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'step three'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC')))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(equals(steps, 2), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, From 5aa25e18346921c44a62c000bdbba6d7d831bac9 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 22 Jun 2024 21:54:41 +0000 Subject: [PATCH 47/77] Update query snapshots --- .../test_funnel_unordered_persons.ambr | 92 +- .../test_paths_query_runner_ee.ambr | 956 +++++++++++++++--- 2 files changed, 917 insertions(+), 131 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered_persons.ambr index 9a4ea2c43af05..ab710413373b7 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered_persons.ambr @@ -1,8 +1,8 @@ # serializer version: 1 # name: TestFunnelUnorderedStepsPersons.test_unordered_funnel_does_not_return_recordings ''' - SELECT persons.id, - persons.id AS id, + SELECT filterable_persons.id, + filterable_persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -257,14 +257,94 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id, array() AS matching_events + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, avg(step_2_conversion_time) AS step_2_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner, median(step_2_conversion_time) AS step_2_median_conversion_time_inner + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time, step_2_conversion_time AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'step one'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'step two'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'step three'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0) + UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'step two'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'step three'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'step one'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0) + UNION ALL SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, latest_1 AS latest_1, uuid_1 AS uuid_1, `$session_id_1` AS `$session_id_1`, `$window_id_1` AS `$window_id_1`, step_2 AS step_2, latest_2 AS latest_2, uuid_2 AS uuid_2, `$session_id_2` AS `$session_id_2`, `$window_id_2` AS `$window_id_2`, arraySort([latest_0, latest_1, latest_2]) AS event_times, arraySum([if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), if(and(ifNull(less(latest_0, latest_2), 0), ifNull(lessOrEquals(latest_2, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 1, 0), 1]) AS steps, arraySort([latest_0, latest_1, latest_2]) AS conversion_times, if(and(isNotNull(conversion_times[2]), ifNull(lessOrEquals(conversion_times[2], plus(toTimeZone(conversion_times[1], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[1], conversion_times[2]), NULL) AS step_1_conversion_time, if(and(isNotNull(conversion_times[3]), ifNull(lessOrEquals(conversion_times[3], plus(toTimeZone(conversion_times[2], 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', conversion_times[2], conversion_times[3]), NULL) AS step_2_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, uuid_0 AS uuid_0, `$session_id_0` AS `$session_id_0`, `$window_id_0` AS `$window_id_0`, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_1, last_value(uuid_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_1, last_value(`$session_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_1`, last_value(`$window_id_1`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_1`, step_2 AS step_2, min(latest_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS latest_2, last_value(uuid_2) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS uuid_2, last_value(`$session_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$session_id_2`, last_value(`$window_id_2`) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 0 PRECEDING) AS `$window_id_2` + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, e__pdi.person_id AS aggregation_target, e.uuid AS uuid, if(equals(e.event, 'step three'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(ifNull(equals(step_0, 1), 0), uuid, NULL) AS uuid_0, if(ifNull(equals(step_0, 1), 0), e.`$session_id`, NULL) AS `$session_id_0`, if(ifNull(equals(step_0, 1), 0), e.`$window_id`, NULL) AS `$window_id_0`, if(equals(e.event, 'step one'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, if(ifNull(equals(step_1, 1), 0), uuid, NULL) AS uuid_1, if(ifNull(equals(step_1, 1), 0), e.`$session_id`, NULL) AS `$session_id_1`, if(ifNull(equals(step_1, 1), 0), e.`$window_id`, NULL) AS `$window_id_1`, if(equals(e.event, 'step two'), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2, if(ifNull(equals(step_2, 1), 0), uuid, NULL) AS uuid_2, if(ifNull(equals(step_2, 1), 0), e.`$session_id`, NULL) AS `$session_id_2`, if(ifNull(equals(step_2, 1), 0), e.`$window_id`, NULL) AS `$window_id_2` + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('step one', 'step three', 'step two'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [1, 2, 3]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr index afa0d1f23304a..488692557e9bd 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr @@ -1177,7 +1177,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -1277,14 +1277,44 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '2_step two'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(events.event, '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(path_dropoff_key, '2_step two'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) + and isNull(path_key))) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1298,7 +1328,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.1 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -1397,14 +1427,43 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '2_step two'), 0) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(events.event, '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE ifNull(equals(path_key, '2_step two'), 0) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1418,7 +1477,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.2 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -1517,14 +1576,43 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '2_step two'), 0), 1) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(events.event, '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(last_path_key, '2_step two'), 0), 1) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1538,7 +1626,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.3 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -1638,14 +1726,44 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '3_step three'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(events.event, '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(path_dropoff_key, '3_step three'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) + and isNull(path_key))) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1659,7 +1777,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.4 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -1758,14 +1876,43 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '3_step three'), 0) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(events.event, '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE ifNull(equals(path_key, '3_step three'), 0) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1779,7 +1926,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.5 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -1878,14 +2025,43 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '3_step three'), 0), 1) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(events.event, '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(last_path_key, '3_step three'), 0), 1) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1899,7 +2075,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.6 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -1999,14 +2175,44 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '4_step four'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(events.event, '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(path_dropoff_key, '4_step four'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) + and isNull(path_key))) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2020,7 +2226,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.7 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -2119,14 +2325,43 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '4_step four'), 0) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(events.event, '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE ifNull(equals(path_key, '4_step four'), 0) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2140,7 +2375,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.8 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -2239,14 +2474,43 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '4_step four'), 0), 1) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(events.event, '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), not(startsWith(events.event, '$'))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(last_path_key, '4_step four'), 0), 1) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2352,8 +2616,8 @@ # --- # name: TestClickhousePaths.test_recording ''' - SELECT persons.id AS id, - persons.created_at AS created_at, + SELECT filterable_persons.id AS id, + filterable_persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -2454,15 +2718,44 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '2_/2'), 0) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-02 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE ifNull(equals(path_key, '2_/2'), 0) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2491,8 +2784,8 @@ # --- # name: TestClickhousePaths.test_recording_for_dropoff ''' - SELECT persons.id AS id, - persons.created_at AS created_at, + SELECT filterable_persons.id AS id, + filterable_persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -2594,15 +2887,45 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '2_/2'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-02 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(path_dropoff_key, '2_/2'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) + and isNull(path_key))) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2616,8 +2939,8 @@ # --- # name: TestClickhousePaths.test_recording_for_dropoff.1 ''' - SELECT persons.id AS id, - persons.created_at AS created_at, + SELECT filterable_persons.id AS id, + filterable_persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -2719,15 +3042,45 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '3_/3'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-02 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(path_dropoff_key, '3_/3'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) + and isNull(path_key))) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2756,8 +3109,8 @@ # --- # name: TestClickhousePaths.test_recording_with_no_window_or_session_id ''' - SELECT persons.id AS id, - persons.created_at AS created_at, + SELECT filterable_persons.id AS id, + filterable_persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -2858,15 +3211,44 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '2_/2'), 0) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 5) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 5) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 5) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 5) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 5) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 5) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-02 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE ifNull(equals(path_key, '2_/2'), 0) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2895,8 +3277,8 @@ # --- # name: TestClickhousePaths.test_recording_with_start_and_end ''' - SELECT persons.id AS id, - persons.created_at AS created_at, + SELECT filterable_persons.id AS id, + filterable_persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -3006,15 +3388,45 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE ifNull(equals(path_key, '2_/2'), 0) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, '/3') AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, indexOf(compact_path, '/1') AS start_target_index, if(ifNull(greater(start_target_index, 0), 0), arraySlice(compact_path, start_target_index), compact_path) AS start_filtered_path, indexOf(start_filtered_path, '/3') AS end_target_index, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_path, end_target_index), start_filtered_path) AS filtered_path, if(ifNull(greater(length(filtered_path), 5), 0), arrayConcat(arraySlice(filtered_path, 1, intDiv(5, 2)), ['...'], arraySlice(filtered_path, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_path) AS limited_path, if(ifNull(greater(start_target_index, 0), 0), arraySlice(timings, start_target_index), timings) AS start_filtered_timings, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_timings, end_target_index), start_filtered_timings) AS filtered_timings, if(ifNull(greater(length(filtered_timings), 5), 0), arrayConcat(arraySlice(filtered_timings, 1, intDiv(5, 2)), [filtered_timings[plus(1, intDiv(5, 2))]], arraySlice(filtered_timings, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_timings) AS limited_timings, if(ifNull(greater(start_target_index, 0), 0), arraySlice(uuid, start_target_index), uuid) AS start_filtered_uuid, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_uuid, end_target_index), start_filtered_uuid) AS filtered_uuid, if(ifNull(greater(length(filtered_uuid), 5), 0), arrayConcat(arraySlice(filtered_uuid, 1, intDiv(5, 2)), [filtered_uuid[plus(1, intDiv(5, 2))]], arraySlice(filtered_uuid, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_uuid) AS limited_uuid, if(ifNull(greater(start_target_index, 0), 0), arraySlice(timestamp, start_target_index), timestamp) AS start_filtered_timestamp, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_timestamp, end_target_index), start_filtered_timestamp) AS filtered_timestamp, if(ifNull(greater(length(filtered_timestamp), 5), 0), arrayConcat(arraySlice(filtered_timestamp, 1, intDiv(5, 2)), [filtered_timestamp[plus(1, intDiv(5, 2))]], arraySlice(filtered_timestamp, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_timestamp) AS limited_timestamp, if(ifNull(greater(start_target_index, 0), 0), arraySlice(session_id, start_target_index), session_id) AS start_filtered_session_id, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_session_id, end_target_index), start_filtered_session_id) AS filtered_session_id, if(ifNull(greater(length(filtered_session_id), 5), 0), arrayConcat(arraySlice(filtered_session_id, 1, intDiv(5, 2)), [filtered_session_id[plus(1, intDiv(5, 2))]], arraySlice(filtered_session_id, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_session_id) AS limited_session_id, if(ifNull(greater(start_target_index, 0), 0), arraySlice(window_id, start_target_index), window_id) AS start_filtered_window_id, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_window_id, end_target_index), start_filtered_window_id) AS filtered_window_id, if(ifNull(greater(length(filtered_window_id), 5), 0), arrayConcat(arraySlice(filtered_window_id, 1, intDiv(5, 2)), [filtered_window_id[plus(1, intDiv(5, 2))]], arraySlice(filtered_window_id, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_window_id) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-02 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index + WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) + WHERE ifNull(equals(path_key, '2_/2'), 0) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -3214,7 +3626,7 @@ # --- # name: TestClickhousePaths.test_start_and_end.1 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -3322,14 +3734,44 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE and(ifNull(equals(last_path_key, '1_/5'), 0), ifNull(equals(path_key, '2_/about'), 0)) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, '/about') AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, indexOf(compact_path, '/5') AS start_target_index, if(ifNull(greater(start_target_index, 0), 0), arraySlice(compact_path, start_target_index), compact_path) AS start_filtered_path, indexOf(start_filtered_path, '/about') AS end_target_index, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_path, end_target_index), start_filtered_path) AS filtered_path, if(ifNull(greater(length(filtered_path), 5), 0), arrayConcat(arraySlice(filtered_path, 1, intDiv(5, 2)), ['...'], arraySlice(filtered_path, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_path) AS limited_path, if(ifNull(greater(start_target_index, 0), 0), arraySlice(timings, start_target_index), timings) AS start_filtered_timings, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_timings, end_target_index), start_filtered_timings) AS filtered_timings, if(ifNull(greater(length(filtered_timings), 5), 0), arrayConcat(arraySlice(filtered_timings, 1, intDiv(5, 2)), [filtered_timings[plus(1, intDiv(5, 2))]], arraySlice(filtered_timings, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_timings) AS limited_timings, if(ifNull(greater(start_target_index, 0), 0), arraySlice(uuid, start_target_index), uuid) AS start_filtered_uuid, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_uuid, end_target_index), start_filtered_uuid) AS filtered_uuid, if(ifNull(greater(length(filtered_uuid), 5), 0), arrayConcat(arraySlice(filtered_uuid, 1, intDiv(5, 2)), [filtered_uuid[plus(1, intDiv(5, 2))]], arraySlice(filtered_uuid, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_uuid) AS limited_uuid, if(ifNull(greater(start_target_index, 0), 0), arraySlice(timestamp, start_target_index), timestamp) AS start_filtered_timestamp, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_timestamp, end_target_index), start_filtered_timestamp) AS filtered_timestamp, if(ifNull(greater(length(filtered_timestamp), 5), 0), arrayConcat(arraySlice(filtered_timestamp, 1, intDiv(5, 2)), [filtered_timestamp[plus(1, intDiv(5, 2))]], arraySlice(filtered_timestamp, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_timestamp) AS limited_timestamp, if(ifNull(greater(start_target_index, 0), 0), arraySlice(session_id, start_target_index), session_id) AS start_filtered_session_id, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_session_id, end_target_index), start_filtered_session_id) AS filtered_session_id, if(ifNull(greater(length(filtered_session_id), 5), 0), arrayConcat(arraySlice(filtered_session_id, 1, intDiv(5, 2)), [filtered_session_id[plus(1, intDiv(5, 2))]], arraySlice(filtered_session_id, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_session_id) AS limited_session_id, if(ifNull(greater(start_target_index, 0), 0), arraySlice(window_id, start_target_index), window_id) AS start_filtered_window_id, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_window_id, end_target_index), start_filtered_window_id) AS filtered_window_id, if(ifNull(greater(length(filtered_window_id), 5), 0), arrayConcat(arraySlice(filtered_window_id, 1, intDiv(5, 2)), [filtered_window_id[plus(1, intDiv(5, 2))]], arraySlice(filtered_window_id, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_window_id) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index + WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) + WHERE and(ifNull(equals(last_path_key, '1_/5'), 0), ifNull(equals(path_key, '2_/about'), 0)) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -3431,7 +3873,7 @@ # --- # name: TestClickhousePaths.test_start_and_end.3 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -3539,14 +3981,44 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE and(ifNull(equals(last_path_key, '3_...'), 0), ifNull(equals(path_key, '4_/5'), 0)) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, '/about') AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, indexOf(compact_path, '/2') AS start_target_index, if(ifNull(greater(start_target_index, 0), 0), arraySlice(compact_path, start_target_index), compact_path) AS start_filtered_path, indexOf(start_filtered_path, '/about') AS end_target_index, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_path, end_target_index), start_filtered_path) AS filtered_path, if(ifNull(greater(length(filtered_path), 4), 0), arrayConcat(arraySlice(filtered_path, 1, intDiv(4, 2)), ['...'], arraySlice(filtered_path, multiply(-1, intDiv(4, 2)), intDiv(4, 2))), filtered_path) AS limited_path, if(ifNull(greater(start_target_index, 0), 0), arraySlice(timings, start_target_index), timings) AS start_filtered_timings, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_timings, end_target_index), start_filtered_timings) AS filtered_timings, if(ifNull(greater(length(filtered_timings), 4), 0), arrayConcat(arraySlice(filtered_timings, 1, intDiv(4, 2)), [filtered_timings[plus(1, intDiv(4, 2))]], arraySlice(filtered_timings, multiply(-1, intDiv(4, 2)), intDiv(4, 2))), filtered_timings) AS limited_timings, if(ifNull(greater(start_target_index, 0), 0), arraySlice(uuid, start_target_index), uuid) AS start_filtered_uuid, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_uuid, end_target_index), start_filtered_uuid) AS filtered_uuid, if(ifNull(greater(length(filtered_uuid), 4), 0), arrayConcat(arraySlice(filtered_uuid, 1, intDiv(4, 2)), [filtered_uuid[plus(1, intDiv(4, 2))]], arraySlice(filtered_uuid, multiply(-1, intDiv(4, 2)), intDiv(4, 2))), filtered_uuid) AS limited_uuid, if(ifNull(greater(start_target_index, 0), 0), arraySlice(timestamp, start_target_index), timestamp) AS start_filtered_timestamp, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_timestamp, end_target_index), start_filtered_timestamp) AS filtered_timestamp, if(ifNull(greater(length(filtered_timestamp), 4), 0), arrayConcat(arraySlice(filtered_timestamp, 1, intDiv(4, 2)), [filtered_timestamp[plus(1, intDiv(4, 2))]], arraySlice(filtered_timestamp, multiply(-1, intDiv(4, 2)), intDiv(4, 2))), filtered_timestamp) AS limited_timestamp, if(ifNull(greater(start_target_index, 0), 0), arraySlice(session_id, start_target_index), session_id) AS start_filtered_session_id, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_session_id, end_target_index), start_filtered_session_id) AS filtered_session_id, if(ifNull(greater(length(filtered_session_id), 4), 0), arrayConcat(arraySlice(filtered_session_id, 1, intDiv(4, 2)), [filtered_session_id[plus(1, intDiv(4, 2))]], arraySlice(filtered_session_id, multiply(-1, intDiv(4, 2)), intDiv(4, 2))), filtered_session_id) AS limited_session_id, if(ifNull(greater(start_target_index, 0), 0), arraySlice(window_id, start_target_index), window_id) AS start_filtered_window_id, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_window_id, end_target_index), start_filtered_window_id) AS filtered_window_id, if(ifNull(greater(length(filtered_window_id), 4), 0), arrayConcat(arraySlice(filtered_window_id, 1, intDiv(4, 2)), [filtered_window_id[plus(1, intDiv(4, 2))]], arraySlice(filtered_window_id, multiply(-1, intDiv(4, 2)), intDiv(4, 2))), filtered_window_id) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index + WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) + WHERE and(ifNull(equals(last_path_key, '3_...'), 0), ifNull(equals(path_key, '4_/5'), 0)) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -3648,7 +4120,7 @@ # --- # name: TestClickhousePaths.test_start_and_end_materialized.1 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -3756,14 +4228,44 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE and(ifNull(equals(last_path_key, '1_/5'), 0), ifNull(equals(path_key, '2_/about'), 0)) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, '/about') AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, indexOf(compact_path, '/5') AS start_target_index, if(ifNull(greater(start_target_index, 0), 0), arraySlice(compact_path, start_target_index), compact_path) AS start_filtered_path, indexOf(start_filtered_path, '/about') AS end_target_index, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_path, end_target_index), start_filtered_path) AS filtered_path, if(ifNull(greater(length(filtered_path), 5), 0), arrayConcat(arraySlice(filtered_path, 1, intDiv(5, 2)), ['...'], arraySlice(filtered_path, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_path) AS limited_path, if(ifNull(greater(start_target_index, 0), 0), arraySlice(timings, start_target_index), timings) AS start_filtered_timings, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_timings, end_target_index), start_filtered_timings) AS filtered_timings, if(ifNull(greater(length(filtered_timings), 5), 0), arrayConcat(arraySlice(filtered_timings, 1, intDiv(5, 2)), [filtered_timings[plus(1, intDiv(5, 2))]], arraySlice(filtered_timings, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_timings) AS limited_timings, if(ifNull(greater(start_target_index, 0), 0), arraySlice(uuid, start_target_index), uuid) AS start_filtered_uuid, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_uuid, end_target_index), start_filtered_uuid) AS filtered_uuid, if(ifNull(greater(length(filtered_uuid), 5), 0), arrayConcat(arraySlice(filtered_uuid, 1, intDiv(5, 2)), [filtered_uuid[plus(1, intDiv(5, 2))]], arraySlice(filtered_uuid, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_uuid) AS limited_uuid, if(ifNull(greater(start_target_index, 0), 0), arraySlice(timestamp, start_target_index), timestamp) AS start_filtered_timestamp, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_timestamp, end_target_index), start_filtered_timestamp) AS filtered_timestamp, if(ifNull(greater(length(filtered_timestamp), 5), 0), arrayConcat(arraySlice(filtered_timestamp, 1, intDiv(5, 2)), [filtered_timestamp[plus(1, intDiv(5, 2))]], arraySlice(filtered_timestamp, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_timestamp) AS limited_timestamp, if(ifNull(greater(start_target_index, 0), 0), arraySlice(session_id, start_target_index), session_id) AS start_filtered_session_id, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_session_id, end_target_index), start_filtered_session_id) AS filtered_session_id, if(ifNull(greater(length(filtered_session_id), 5), 0), arrayConcat(arraySlice(filtered_session_id, 1, intDiv(5, 2)), [filtered_session_id[plus(1, intDiv(5, 2))]], arraySlice(filtered_session_id, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_session_id) AS limited_session_id, if(ifNull(greater(start_target_index, 0), 0), arraySlice(window_id, start_target_index), window_id) AS start_filtered_window_id, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_window_id, end_target_index), start_filtered_window_id) AS filtered_window_id, if(ifNull(greater(length(filtered_window_id), 5), 0), arrayConcat(arraySlice(filtered_window_id, 1, intDiv(5, 2)), [filtered_window_id[plus(1, intDiv(5, 2))]], arraySlice(filtered_window_id, multiply(-1, intDiv(5, 2)), intDiv(5, 2))), filtered_window_id) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(nullIf(nullIf(events.`mat_$current_url`, ''), 'null'), ''), '(.)/$', '\\1'), events.event), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index + WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) + WHERE and(ifNull(equals(last_path_key, '1_/5'), 0), ifNull(equals(path_key, '2_/about'), 0)) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -3865,7 +4367,7 @@ # --- # name: TestClickhousePaths.test_start_and_end_materialized.3 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -3973,14 +4475,44 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE and(ifNull(equals(last_path_key, '3_...'), 0), ifNull(equals(path_key, '4_/5'), 0)) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, '/about') AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, indexOf(compact_path, '/2') AS start_target_index, if(ifNull(greater(start_target_index, 0), 0), arraySlice(compact_path, start_target_index), compact_path) AS start_filtered_path, indexOf(start_filtered_path, '/about') AS end_target_index, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_path, end_target_index), start_filtered_path) AS filtered_path, if(ifNull(greater(length(filtered_path), 4), 0), arrayConcat(arraySlice(filtered_path, 1, intDiv(4, 2)), ['...'], arraySlice(filtered_path, multiply(-1, intDiv(4, 2)), intDiv(4, 2))), filtered_path) AS limited_path, if(ifNull(greater(start_target_index, 0), 0), arraySlice(timings, start_target_index), timings) AS start_filtered_timings, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_timings, end_target_index), start_filtered_timings) AS filtered_timings, if(ifNull(greater(length(filtered_timings), 4), 0), arrayConcat(arraySlice(filtered_timings, 1, intDiv(4, 2)), [filtered_timings[plus(1, intDiv(4, 2))]], arraySlice(filtered_timings, multiply(-1, intDiv(4, 2)), intDiv(4, 2))), filtered_timings) AS limited_timings, if(ifNull(greater(start_target_index, 0), 0), arraySlice(uuid, start_target_index), uuid) AS start_filtered_uuid, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_uuid, end_target_index), start_filtered_uuid) AS filtered_uuid, if(ifNull(greater(length(filtered_uuid), 4), 0), arrayConcat(arraySlice(filtered_uuid, 1, intDiv(4, 2)), [filtered_uuid[plus(1, intDiv(4, 2))]], arraySlice(filtered_uuid, multiply(-1, intDiv(4, 2)), intDiv(4, 2))), filtered_uuid) AS limited_uuid, if(ifNull(greater(start_target_index, 0), 0), arraySlice(timestamp, start_target_index), timestamp) AS start_filtered_timestamp, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_timestamp, end_target_index), start_filtered_timestamp) AS filtered_timestamp, if(ifNull(greater(length(filtered_timestamp), 4), 0), arrayConcat(arraySlice(filtered_timestamp, 1, intDiv(4, 2)), [filtered_timestamp[plus(1, intDiv(4, 2))]], arraySlice(filtered_timestamp, multiply(-1, intDiv(4, 2)), intDiv(4, 2))), filtered_timestamp) AS limited_timestamp, if(ifNull(greater(start_target_index, 0), 0), arraySlice(session_id, start_target_index), session_id) AS start_filtered_session_id, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_session_id, end_target_index), start_filtered_session_id) AS filtered_session_id, if(ifNull(greater(length(filtered_session_id), 4), 0), arrayConcat(arraySlice(filtered_session_id, 1, intDiv(4, 2)), [filtered_session_id[plus(1, intDiv(4, 2))]], arraySlice(filtered_session_id, multiply(-1, intDiv(4, 2)), intDiv(4, 2))), filtered_session_id) AS limited_session_id, if(ifNull(greater(start_target_index, 0), 0), arraySlice(window_id, start_target_index), window_id) AS start_filtered_window_id, if(ifNull(greater(end_target_index, 0), 0), arrayResize(start_filtered_window_id, end_target_index), start_filtered_window_id) AS filtered_window_id, if(ifNull(greater(length(filtered_window_id), 4), 0), arrayConcat(arraySlice(filtered_window_id, 1, intDiv(4, 2)), [filtered_window_id[plus(1, intDiv(4, 2))]], arraySlice(filtered_window_id, multiply(-1, intDiv(4, 2)), intDiv(4, 2))), filtered_window_id) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(nullIf(nullIf(events.`mat_$current_url`, ''), 'null'), ''), '(.)/$', '\\1'), events.event), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2012-05-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-05-07 23:59:59', 6, 'UTC')))), equals(events.event, '$pageview')) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index + WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) + WHERE and(ifNull(equals(last_path_key, '3_...'), 0), ifNull(equals(path_key, '4_/5'), 0)) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -4244,7 +4776,7 @@ # --- # name: TestClickhousePaths.test_step_limit.1 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -4343,14 +4875,43 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '1_/1'), 0), ifNull(equals(path_key, '2_/2'), 0)) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 2) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 2) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 2) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 2) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 2) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 2) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$screen'), replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$screen_name'), ''), 'null'), '^"|"$', ''), if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event)), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(last_path_key, '1_/1'), 0), ifNull(equals(path_key, '2_/2'), 0)) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -4364,7 +4925,7 @@ # --- # name: TestClickhousePaths.test_step_limit.2 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -4463,14 +5024,43 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '2_/2'), 0), ifNull(equals(path_key, '3_/3'), 0)) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 2) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 2) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 2) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 2) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 2) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 2) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$screen'), replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$screen_name'), ''), 'null'), '^"|"$', ''), if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event)), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(last_path_key, '2_/2'), 0), ifNull(equals(path_key, '3_/3'), 0)) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -4567,7 +5157,7 @@ # --- # name: TestClickhousePaths.test_step_limit.4 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -4666,14 +5256,43 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '2_/2'), 0), ifNull(equals(path_key, '3_/3'), 0)) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 3) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 3) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 3) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 3) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 3) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 3) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$screen'), replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$screen_name'), ''), 'null'), '^"|"$', ''), if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event)), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(last_path_key, '2_/2'), 0), ifNull(equals(path_key, '3_/3'), 0)) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -4770,7 +5389,7 @@ # --- # name: TestClickhousePaths.test_step_limit.6 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -4869,14 +5488,43 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '1_/1'), 0), ifNull(equals(path_key, '2_/2'), 0)) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 4) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 4) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 4) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 4) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 4) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 4) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$screen'), replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$screen_name'), ''), 'null'), '^"|"$', ''), if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event)), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(last_path_key, '1_/1'), 0), ifNull(equals(path_key, '2_/2'), 0)) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -4890,7 +5538,7 @@ # --- # name: TestClickhousePaths.test_step_limit.7 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -4989,14 +5637,43 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '2_/2'), 0), ifNull(equals(path_key, '3_/3'), 0)) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 4) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 4) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 4) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 4) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 4) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 4) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$screen'), replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$screen_name'), ''), 'null'), '^"|"$', ''), if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event)), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(last_path_key, '2_/2'), 0), ifNull(equals(path_key, '3_/3'), 0)) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -5010,7 +5687,7 @@ # --- # name: TestClickhousePaths.test_step_limit.8 ''' - SELECT persons.id AS id + SELECT filterable_persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -5109,14 +5786,43 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '3_/3'), 0), ifNull(equals(path_key, '4_/4'), 0)) - GROUP BY person_id) AS source + GROUP BY person_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count + FROM + (SELECT person_id AS person_id, path AS path, conversion_time AS conversion_time, event_in_session_index AS event_in_session_index, concat(ifNull(toString(event_in_session_index), ''), '_', ifNull(toString(path), '')) AS path_key, if(ifNull(greater(event_in_session_index, 1), 0), concat(ifNull(toString(minus(event_in_session_index, 1)), ''), '_', ifNull(toString(prev_path), '')), NULL) AS last_path_key, path_dropoff_key AS path_dropoff_key, final_uuid AS uuid, final_timestamp AS timestamp, final_session_id AS session_id, final_window_id AS window_id + FROM + (SELECT person_id AS person_id, joined_path_tuple.1 AS path, joined_path_tuple.2 AS conversion_time, joined_path_tuple.3 AS prev_path, event_in_session_index, session_index AS session_index, arrayPopFront(arrayPushBack(path_basic, '')) AS path_basic_0, arrayMap((x, y) -> if(ifNull(equals(x, y), isNull(x) + and isNull(y)), 0, 1), path_basic, path_basic_0) AS mapping, arrayFilter((x, y) -> y, time, mapping) AS timings, arrayFilter((x, y) -> y, path_basic, mapping) AS compact_path, indexOf(compact_path, NULL) AS target_index, joined_path_tuple.4 AS final_uuid, joined_path_tuple.5 AS final_timestamp, joined_path_tuple.6 AS final_session_id, joined_path_tuple.7 AS final_window_id, arrayFilter((x, y) -> y, uuid_items, mapping) AS uuid, arrayFilter((x, y) -> y, timestamp_items, mapping) AS timestamp, arrayFilter((x, y) -> y, session_id_items, mapping) AS session_id, arrayFilter((x, y) -> y, window_id_items, mapping) AS window_id, if(ifNull(greater(target_index, 0), 0), arraySlice(compact_path, target_index), compact_path) AS filtered_path, arraySlice(filtered_path, 1, 4) AS limited_path, if(ifNull(greater(target_index, 0), 0), arraySlice(timings, target_index), timings) AS filtered_timings, arraySlice(filtered_timings, 1, 4) AS limited_timings, if(ifNull(greater(target_index, 0), 0), arraySlice(uuid, target_index), uuid) AS filtered_uuid, arraySlice(filtered_uuid, 1, 4) AS limited_uuid, if(ifNull(greater(target_index, 0), 0), arraySlice(timestamp, target_index), timestamp) AS filtered_timestamp, arraySlice(filtered_timestamp, 1, 4) AS limited_timestamp, if(ifNull(greater(target_index, 0), 0), arraySlice(session_id, target_index), session_id) AS filtered_session_id, arraySlice(filtered_session_id, 1, 4) AS limited_session_id, if(ifNull(greater(target_index, 0), 0), arraySlice(window_id, target_index), window_id) AS filtered_window_id, arraySlice(filtered_window_id, 1, 4) AS limited_window_id, arrayDifference(limited_timings) AS timings_diff, concat(ifNull(toString(length(limited_path)), ''), '_', ifNull(toString(limited_path[-1]), '')) AS path_dropoff_key, arrayZip(limited_path, timings_diff, arrayPopBack(arrayPushFront(limited_path, '')), limited_uuid, limited_timestamp, limited_session_id, limited_window_id) AS limited_path_timings + FROM + (SELECT person_id AS person_id, path_time_tuple.1 AS path_basic, path_time_tuple.2 AS time, session_index, arrayZip(path_list, timing_list, arrayDifference(timing_list), uuid_list, timestamp_list, session_id_list, window_id_list) AS paths_tuple, arraySplit(x -> if(ifNull(less(x.3, 1800), 0), 0, 1), paths_tuple) AS session_paths, path_time_tuple.4 AS uuid_items, path_time_tuple.5 AS timestamp_items, path_time_tuple.6 AS session_id_items, path_time_tuple.7 AS window_id_items + FROM + (SELECT person_id AS person_id, groupArray(timestamp) AS timing_list, groupArray(path_item) AS path_list, groupArray(uuid) AS uuid_list, groupArray(timestamp) AS timestamp_list, groupArray(session_id) AS session_id_list, groupArray(window_id) AS window_id_list + FROM + (SELECT toTimeZone(events.timestamp, 'UTC') AS timestamp, events__pdi.person_id AS person_id, ifNull(if(equals(events.event, '$screen'), replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$screen_name'), ''), 'null'), '^"|"$', ''), if(equals(events.event, '$pageview'), replaceRegexpAll(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$current_url'), ''), 'null'), '^"|"$', ''), ''), '(.)/$', '\\1'), events.event)), '') AS path_item_ungrouped, events.uuid AS uuid, toTimeZone(events.timestamp, 'UTC') AS timestamp, ifNull(nullIf(nullIf(events.`$session_id`, ''), 'null'), '') AS session_id, ifNull(nullIf(nullIf(events.`$window_id`, ''), 'null'), '') AS window_id, NULL AS groupings, multiMatchAnyIndex(path_item_ungrouped, NULL) AS group_index, (if(ifNull(greater(group_index, 0), 0), groupings[group_index], path_item_ungrouped) AS path_item) AS path_item + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2011-12-31 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2012-01-07 23:59:59', 6, 'UTC'))))) + ORDER BY events__pdi.person_id ASC, toTimeZone(events.timestamp, 'UTC') ASC) + GROUP BY person_id) ARRAY + JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY + JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) + WHERE and(ifNull(equals(last_path_key, '3_/3'), 0), ifNull(equals(path_key, '4_/4'), 0)) + GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, From 39d6661d6b2c313c8e95d27508db8f989b238fc4 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 22 Jun 2024 22:00:13 +0000 Subject: [PATCH 48/77] Update UI snapshots for `chromium` (2) --- ...--funnel-top-to-bottom-breakdown--dark.png | Bin 110890 -> 109071 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown--dark.png b/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown--dark.png index d99c83e6eb844228a67257d858f9f1b7a2a67575..b2a3ef86228181043ea265265d561d8d6351b986 100644 GIT binary patch delta 73239 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 delta 75748 zcmcG$2UJwswys-%hysFwBuNsL93=-8$r&Z*jO3hQDkumDNX{UlqU0dCNRl&(fZab_s%}&ym#-d)>d1qttw_3ee}`$|9@jf{<@koceThn2r9mGI;$O>{H2I~ zJ?#~Nx8hyb>#rC|p50!hHQ2b(7+P!K^GLGb02_SbGcZ2})7B!Xt`OWsLw{bwr0WmS zYimb8L~nd@3{P(hUg%Cu+7^uBT(049dGh;np+m%|J@frKDOVEQaY1~=5IgHf;&8!$ zdJclP_q1jH^dt1q%m8u;I6a-#TwuWSK3wUwtC*VepE(q>ad>t0xC=d=RX-iMT(bE3 zWc6ni9js5}LAqu7oo&^j5=j@0e1opD<1kV#-)oa5)dU13F)v_Hx!rVQ6y0^nR)c6h zeABb8gr6r)!0L#?x)9wx=B${s~1A|+FUR? zHu7wd!&S?%=4tBghr_hLKWa|T63t!?tbSj?WX!rAOqYGdGBu+kHi6Z#QZB*sO{94H z%cDT8d_MQhsito2X_qC1oSL)IZ0hBqA6ckxQ>T}T?ax~u<1b-`U}y6|7Q*2YKy(y+a#5%=SL8_7z6> zCcnj!pG#^#3z73x%4-(U|T~4P|M^s}3_-;pLw(n3&|`1}lVnE|YHCT66RG z#JXZDt?Ou{m(8WN6W@|v4jXEI=>^Z0*Xm}Yy1r1U`MSGFwLAMW%gwO^*OmT=q*8yQ zpTQZhe!6n<2R1{F;wvPqk}D&bln-o{>>eJCPkcbK+<%_JqM2{JU+-YCpeTWW>J1eK zbJWSiY&n~P@va)RbhVT$vdI0ad-MAf8;Kpm+TPL8 z*f&fiIy&;r3+Ls_mz8?#tnskkR9W-k0@0R3nm-|P z=}WX^cTG@GaKvTPldSey(G@*4U9<~g_*;XKO?T%m0d2>=TGLUe$cgac;^GPx=I+Y8 zGD!|%H#>vJZOpZ#r1XnnA$y9^%0q_};hA&KYf2<0c;AQfU-+O>ha z=Y(LwNyv3R|K8N3RV}ccSuc^jW$s@8C!n76sx$EZnwMA!Q#FpKc~@WmV$h;#x-W93 z!RRN?&knYhbPS7_>+&x!VY!1k>>=ncF3wN(cA!900k6H=!XBHSy%3+@)nmOR!2CPs zevk#SsC&(--6_&y)v_z+#<|bWk5yVh7Sr*nu#m&kD=H<$rxAgEh5^3!^df8T=wYDa zK?E%8v9I&nHqW~De{`Zt=Ccdvv7W#5KZ(oE@Qd28tz}pFbGhu)5ClaILz9MYvCD8X zUo^sA#y^DDBKVkGh4e>UTsq3eJIa<#JVv<46%!RKx|iVMwQ$^b^_j-r-rh;Abbl^# z&to?dJfDWefM4Hu&(6+vkOxg&E3Yde`KQFDTGHnog^IN8MoLOJNpYd)@IQY;dr42k ztqn8cByI2PglJh#bn0Oz$#)6k{`ucujplqig#+r- zE&e(7|Mp^T-GYAq(f`+n7n^BNYXUN*_LOmK*vJ;w6RC3MZO%WTgnM6GB|<8kqA{RK zyws;nDxO2XL1Mnuh%ZHC?bjF8G>>Vozyq83QuBFcvC9oe;?4tG726avw2QOl7E8e* z5Axm9a>84x(^(?@CbKOh=@y%7pEf4S)03tZvRtz9UXL+77d?LJ=y>x6EiK5)HEm8| z3@;w>8}wBcBZ<5Wo;>kGo%|d*)iU#lU*(hBisWDw#U`KK&%~PT>a=l(+Sg-c*42?% zn3zt>lob$xRdHpc-AH8;-sZS5?;Q?OT}gsF1Zo?7ONDEfFS(Ghx|hG>Qc|_#ed>ge z_ic{49p1rQO-sa5{;Qy8OW-Fv-(8ez)~{SSLTv7HRQWeNFf%iAT-mwh-Ry3<#6R#w zzeXdIFYAL2k4LZaTljO*tAUv+RX?m2!k98RA?t-}c}W`O+ar=SD}26!i%-WYY;@PW z=e|lJESlS>n`a#>BM0*ddll(|j4Q^&M6xw{?(DCR2Op60?+xxd$jAtEhGP`A_4O4# zb7PmTk;;mis`b7}QW0x6?s1cRyvNVJkZMx9-k)xjjBLwvb#+xMUxRjSxaL*O5mII9 zIusO29E_SbX9zHESJB7l6HZd0$m;7aZqZ5e_%2v&Rj&KPf^ezc)I(EEV=KD$j3Od$ z!Lc3P>d|m3jqi(}i=@oV+-((AIYP_ysVI1sPtf@a$w)N19FBq2&&V7-S%dujTS~D| zj=D4Kn2zSe(=B#4(cNeD{-OjB0fA`51KW`ol3@uur`x%qBH4bYR;U`TK;K73QPC7E zUa2x-kIdFJKIOOwj@`h+`)?MYV6zfI{!M`sgg34`rt@V!?>i~FEMsS&SnxHFAg7GlE9|B&!#4)ULnP1 zQXJ~(`1vb-9rO~{b2zM>Q+iDHnMR7qXl;&lr}HE%8~VQ9*s%4eRiYH$=?^ru8vQ`V zr%Q}j;#fG~pK^j8L;C%_rG1yd(o}c45(es)&O@lx7*r57RL*C2@TA?;$btSHIu;qhhirMp;Czw%To^$cZOXxYbtjCr(j>W%J7$8J!yp$g?L;vVf< z3%igty#n`vfdQ}*J!{(A@<`z z?d=*zr^inFBTmHZp>%9)J^EBcgUMgohqTbq1>&N=uMOG=9<|Z5U-J5m^gn85)0e79 zEHJaQci`wzQTcB| zZ56>U?*J>IYm#u<XI9!GtLTs9faQZYY>3Yv|8kq6`^~I`)vqr!62XysR?EfGt;Ie_0|LTGbk5bl>#kPRJ)j=Tn=T5` z$k*A~e>z_*OyMhdU;{&?nV-$q1t{=_^7NITnc1ZKEL~TSqPt8v`(&9~Sl3J)jCYHQ zSSq2H(rfoPyK1@4iD7G9&)>h!)5{BrN_u`Eu;nTgR;vkeaAG%O@5j&H6ykm-ypI|m zF%-B|jrH`Dm0E0i2i>52)rIM@+>@=_t-di;(|3NkQU!|d3$%+C10G8TY}DXCcn~*~ zugm4S^RO=U@Ih6T`-k!JOvPt5#B2uNzs3%{dOi37s;@(Z5wiP6R)@?cq*Io7Fp2*y z%)aXeMuGWodac5x1tX>Kw`?B;&APM$QP`9PPjN99tNx)dQ+D4?Dua|dKW{E!{si!p zZig1S<;J^iO+>v8o0Cxzdlc7y(;K<=vct@*YiN@~#Pbcc|5*|_7T!$hrDCJKN9+nb zz{Y`aFj>+`UJz8BWj2EleYvheF|u=fy!&8SzbRBb_jo>1;+q4BVjorU+1`4pd}!7; zZ-s8Y2#njw=z`iHOXs&j$YQ7QV`SA~vcH1wHrrJ^ ziU!EQ3nRFx5v*pWym!2g2llRV{9;;c$}M6BG1vbs!s7>Vn^F;3THEP_LUbpjPP?Ik4Z1`4CSP?UD>0W zZDo@o4@mrH{q&$hvcSs%O*bZW!)5N29@xUdLhRA9s-u#IMts|D>V%#zyjEUs*}1&N zqDQFQb~I>U^}SA+H5g5cG0g#{h#rfk@o_!dsz#%`Le)2Lh*{?xFCs>!d`bF(5Ve?^T=+?*TWYqXsmj-rH6B?i$FI@ zfrmA8_VL}IHOsEomW^R$Vj$Kf%m|t8ijI!H^7E5v6tb(WjU;BYd8+obNXL#fLKj+_ zid-<6uT1>2U}#b?;B;z(8loE5$m{rL2B)M_)~L;9{h;;e6PU+o|+ zCMK-I%;Ye&3Vz;u3KO{)k(lrs-kk6q;PfDP|M4KS1dInPp8b?^Z#qXM-&#F_Qd}va z*9-p%5HY6GD46h;%NW@kKTU+Rwy9GM0FC{VoV5qRr3h=K5-3I=l`` zx0<3qb)kJxV~DjL%&ATwgV~P3F<*%KATc~A=A-xB3IZ0%>gwu7Y|Bm7iQFPaZJjxg z_pRuJ#aC6Lg%WBe^YU2VO3{HHmjKiT)o$yK>IuD|5rv3Z^)|S=8pdr8t+w@u!!X6g z4I@%ZDc`c`#UoMKPKkY9am!rNinG0co#ocunfkb*h zWBRcHm*TyM3H?08nE=Pi#04&C@A%YP2Mc45+viuq5LJl?IPUVa<>ByXy=sj++uCrU z^rgSwXqhEP{bk)=^!)uzQB*x2#S%6Zq#`Aka{r5Z>D7U3#m_)H0@I|;G*VoDrO|En z0|RV=*Cg?D@&L+mAiLfWfEgxFX{tBD4J)Xtt~ed3KUwkv*Lk5f%pzBjm@9J8-QMo% za8lvE=?$~!J$YHPP1!Yxj93KKkLha3G!6rPFR@iIkXHOq($GL(UBd&6t4^nBUJikk z<&d~XZNQBQljdit9(}dKV!_0U23A#W)=Lr@c$gRWc&pv8~6~ z-=l|A~JJ}w*`D<1XIo;1;~MbV3|#@r zmyhLUoXSsc$*TGCAE;$1<%ufl-6adY{K>-&q@oj( zafQD2_m+`c->gRiYzkM~4mX9Z#`zqo_j3jzcFm)sn9Cn^lffd8pH$E(u;t4S*OAtgI^D#WXe{KdFL4WS@Di)zW0MAHZ83jA-}?{ zP5*Oa?Q)#{8clqSLIZh=&v6?Y6ng9=H|{*SdFRgKHNjF{>*0cy&x*Q0O$K-LSuthx zhv?OsNhKYfJ5W@wPPz4Umf=PV)dy@^}Bx7g>l=gJ))VrWS zUufQ0NHEShS!mYyNd;TAC^%U40r|>6%{}>ewtGygSK^p42Y~i?{dx#U?bs**YSCF0 z)n*Vzg1X+N5dkiXoX_@ybfo>l!qSqRqZU*{teC>f&bRgMT_-LX?>oWzp802;&+qVA z&v0d}n9TiiM#V&9n!o=BWGipC^~!qoquX^2wcuAG4u1eqvF>vAo`K({oyTaWx(%t{spwmu8G~ego6vz(la8N@@Z+Hx3UPz8 z>>sd-Nq>$=G46Q#$!h1#2j_xLd-O5c3g+K^s4Lf-*|b{|i}87uE__fGXItbwuGw1r z#J!eph;lzJKZwYDxnL69`ArUvLPQPCHKh;caPR`p9_oW{n+=4FQ|&D64W zz8P1c)yZ6}3x9ulhI>4S8tV3*o)o@%rvZyp_IuD|OrJ=cS`>!gQs!4MYWe zkFJ5niuDIr`qzhu!dkxX&bKAi8{Lw)iqFa&zpy}fR%gN>>f_qRarq#|rLTIKgj^bW zz8!*UfAzd@XWdftelic_v>p(*b4gD*&g2qmeuMVs2YSvo?&Tf$J5Vyd$|tr zx)i&odsK`*$l8dbqrgRCX)mBL$H&}LszxSOM(?kYb#*+=9w{-`^$MONzC-Z6haZ0# zw07|x_lbhGP$z5`H;n7=$MJ{m`p_h6@9+;7J-V_0S#vBps9uN>YJQLmE1a+)K_&C! z>>pQyAs5ii$o91hY}=gw6^7&_y8fXNT|DYEAq)5)={=|;-ue%65A@%OWyTtjp)lB8 znCz2B&u;w(J@LQLl>VRR_&29eSfp%t4OQ*%odRu$Gf9CoT#A!)=U}&S)fLFD9X-V{ zF)24lJB77=AMaLFeJyqxD`)cCD>~?0WZ{yx?{M7-PwcTc^KIPPxhE=08Qi2wl^Kc} zOrU0%K5I97*|kV}_bv<)7l%C6TrZ-(%$|Jojp>>Js6{=32k)L2orRWbz*f#r>CZT zDYA<4EZHk9R=jGUGlZ$BDb2eIbqUk|xooD_*m10mReD!2ubS|sI0>bFwEP&8V#CoG z@-8Y$)*aH|i+_k?QA!rp^4Qy3=xX30*HJF7!&Iz=Vu}h_;*owHLTO;(FzP>OSZ~+Gw7*+1VtE*(su<=@l+kz)jDN0&d53HXpg9X@}Kw(iXj`L3VNQo`zp>g6O?+6CyN`>DA@(|%Y zrM;#|ah}ztNSq$AYuBzd0IQ~EvKKV+a=bNn{iod{w@XV(MoKNIA?h=vDd-H?0&`h> zay6S(zp60^d2BX<=DL$1sQ=x~AiS!mqd=$#)Y7&s8zi&K%hG*RlV9~~h^Ku|DWB^w z{uX*@owc7`zp;3<`%&IH>pMM8w*^n*qesX1M_*GNcCV$CW_O^hf2|eEW4{q&fmfyogRH{T}C~j)C7X<{Z*)xlGf*akzeQ=@$5Xud=v5 z&T%OXBsZ{RQ@BueJd%Zvesi??Q%!jC18dmM5P9LvdIw?rw^hpl$ZYLWM%&4{z*O49 z*CX}f>9wbLw}sMUVwxh-YOIFxRx!taXUbbqd#b?GGzfyLgpU7m+>8CHaBPx%dU|nw ziTUuilB0Y($MBu&PW7t_nk!eAM1ckcT^@6a%v4{%Pxf$7{p`R}&(X<=b5{?YC*nYJ z!VPH2y`mn|N)J(r5!L*GrXlk$_fvPfq{BtaCl%o)$n@HepFeY(9NiSVoR)?G&5z_o zVq(FTi%GQsW&`kjNyxTekLguev%%~>=wS4h+mR!yK!u2Tm$^jUU@{J}>Gg2{mTqWd zBt9rxB;y}AOx>oY-lpwSR1lE^9cO6jEwxyCF3lhHhSQG^YHMp(LAm4SjchjCo5&q7 zDekW~Gz2CrlPdL}iLjTAjo^C~pm>cE&oZj(X7A8{P${Nq*99oO)@N(s?CjL2$xcN9 zB~<(}Zs}CtnrC9lPTJYR%G0iia9ig`)e(tDQ@UU&TQA`8+<6ESJ6qwI@`DI43hN_0 zru=)d&YeuR+pKs|>mj#S=Q9wYhRUa@Knz2S$Bw`Z{}9gnd)u>Gstb z1#9N@Av?!}gDs-2{48lS$D^HFc$8w!Q~z+ll>wXp{ew;r2%SD+r~M#isB|0)C;|&# zo-hYXe@!#d-^4nT5bDl)7MDJ$CnzgW70MAjF!%Tw%c{74(OuWdPR*z_Bkx^`nP z0h3j`T4cM=ybI@G;FF6q3@Ai!;a%1D=3z^DI<@h~2of$3EY&Tp4D@FA(9oa@+wrE!AbmgY6}y`tHy>v<)m^~8Uc z4xC)h4)pAS*FSI+q#!~(>DdQ6u-RE-U(o}XoL516kob8gPajeGlwpHer#!KM-luUV zaj}cLSabL$V0g-W@Odo#`hXU>wP%^(pQ=A_+ZnYA-x^E+BaR z1Aq=nY>-rura*2DJ|ny0)e(?;?fO^Th7CcC4_3gR5x+t(M?xreBSulbH3MkP^sRCY&CziQ7W!P5(8|iMTq<;KpM&-3Hn=|~S zHq?6BntQ)1EfiAp9x7<6nC#C*o?x5V`$F#B?9iKv#|Ey+mzu5;A`T(KWhnhDx z5Fk<;_n*gnHK@G;*Dwd?!=>@75>jXG1q zdLbYS+M}-A;e9ic!=5%;;wH?cFHDkC3OZ#WSF5&eZE?=kCS};lt#OdoY$~buapGxR zH~J%zA0YVdp4r($KTe5azxBlB4so7L^YiR|&ODwj{0!D&Tx!0=SqUtRB9p;2oT==m z*=ndpR-?@NYYgUKu6k4Q^TlU!av^Km;y3#)Fm@&5^9}2Z+vnL6!pyrgW0~3iR39Br zK|%x&!qM@`-27(Xp!MPeZ-eFl<5N&tv`>$0H9`MsQZLT-NB%+-VKO3mq5pG;;(vpo zfc|rcLKS7w_#ml1e9$TN>6>~?{**Z3BUh5b6UlPt`oYJ4*SB<3s!L6!*r;*`Sj81B zbnLj{T-~;FH=tQe)XX4PCjk)Dck=(HF8&2wK>t6eix$&?hJXrM$MlN3v7dYP-{O`# zOkY3F=v-bJla&?hNf-4&1ES`pm!)m0-Q-C)U^{M&i+)xa4UNmyE-u-@eQh9Wx{JSK zc^;(50If;%dO`cpNlzNn@dTwID`g1!O@-ryfm-uA9ya<+ zcha+sh@Wf{_i=9BI(RsO4~0$b-6 z1u5vagsMJ`xHQ;u8(%Mi8I|dDF@X95EId^Hj=1-f(@j7N32N5cd&s*-_ZYC-r*As< zrh4tyR`bu!&e~2?hJfCSLRqfWj2q=`tqtb>D7U+P758j^pb(O~{ijlT=19a0polUH zP$hGwbb~V0w5RiXve&FW0^-Vbaa1<*G>JiRH|_k zSwm!x(E`!X*BrLs|Q`sZl0&d>il zFa&z@@5qoRA1MX}25aFGpe2feID-dXHf`MnP)e<`p=74nBe6ga(qEn-6w`Q%lz*Ep zJ+!w5Qg5fE;I*~8yS)I$!N?u}guu&qnzIh|bw%g6`+vHtDCe0?JH~z!rftp%2=ESX zGbM_AD%k%51Wy*QE%;J)cXz?p4?6-xB3{%jQU?49l51j9Q;U@708eTAk35MHxBAt`C1(x+oNe^7pCzs{w}I{OL|VzP)mEiWpC&)~@kp zveD%DWIrkNdJXhBkZhM+*ZT4E7#I7q|hMhCV6d&^A1B+`c|x*Z>;O0%B@1Xn41(99TK(_U|0*S+Yz( z)B3iPf^>S<$rn($yYL?u37Cl85rYshPA1D zmNcPq%h3`dP#9&6c#|NmUm`f*-{m>Pns}7MEoTmfU(z@THUS66bL+Jxti88)Hk|(+ zN_*C_<1_F(x1)m2jK$7vu{-W5>HRGGeaW)FFIj$ObF)VRKLQ90d$VmBabBk(A&_)P zq`1tJbMJ4~gXpmAfsRITyr@LaU;5i9UT~nV6pfVI^Dd0X^8CdQtL9bLYD+p)D8{~u zN5M>b0jm7?+2E;lr&YWFLXi2?MONh7PuqjF+NBnh!+50KZo~M-o7Fc^xiC^xs6gc$ z2uTxe!*=kKFbgw{Q4zxan{;AttOv^cLr*PIhuULo@K0#X z#wNdErgBDl!Y}`fDX(Qn%$&KS0!WYr&^Yhu0VOYL3s7AK`k@0xY&{^hyaE)T2t_ix)mEBOhmCn{${fh-UBl5 zbws{??d=ydO;S!P{j+Li$b)ZvU-hcEhw&+-q@=C_g>o^Z4Wga}1WkXgB`fKBuhP#j zg>>#7zw{2Xx!pFZxqOeQCW}%h&|m{gFvCwMdh+s5t-mmc;WBPV^V~x)q3nw+N+EC@BSX1H0tsJ|5pIR%MJuZ6o51Z0AQGK;==Ud&&Q2IlVvp;gcsQP|x|6_d)0<#b;(-!KzCpHElP^ zMswgz;Iv=+6)Ja{RHuw(Fh3W6I3rB#6n?=nx?>zj#^=fzeuuBY=*2nK+_C!-5@;`_ zPnLCA(O3;QgPGMIqpeILg#ZVPuJTol6F;IhBlmQlmY)7qbMuqWeTf|l9MI=k=c-QD zAQsg>M448}LKkh1~j-f`bMjT-Hp5^Mqz3o;2$aVW6rSRk; zG^n+k!EL~tyAB$4Ov*9odGyZ<;#ov)c_K{ODoW|TXScTC^BSp2_jJqcG47VQu^9NT z3a$-ZUoPXHsxl&@~j5D3+g zqni+;xt#D8i(}@lxr)k73#Jw zbwCLCi(F6WQePsSkZpvsK)>}&vC9<7T9PdzAelEs#Y^QpF6?( zFIha@zbqb3>wN%LF?2S!AN?BJDD@fmmD)4@GDNG>O7=0*9@77+!w`FYTaj6Pv}&u) zBd-lg;d4Nn86I_+aJvv)V}wb)rRdp-%Bq?#I7O|+?^{C?Rwjx+G#WLCH)H?@6>Pge zLYN&XKO;_i-NC~J;@oKcB@7&ehK&s{h;!Oy);HLa`7ywQ4X@9j21>&D>3m0fJL{pA z*8tQVz-{#01^q?0;-H+blF4IQ#T35Xc2dDKB^W`(ZU391!-zhSm!r0G;T2Phr`m=- zvH8=LA%M42)bSPqVA&N%n}&xI5_5$R101Dcw%dSa_!epJ z(@2^%UQWYZLImtR3Q_k|6o@4+?~))bS;oj*@*w^NOzG1{6x4%v;dE_JT#=g3^`?`2 z!Vk93EZ~`Rr$ammZ{D1I3lF6qur|L4kfab#e**mez^juD9QEC(X>kRBx+mRa8im?z z0K#l(9R@@O5XWwjlFI1l2$A#KS)c@MUR%<}2SDd-0NhkDK!uRmoXf(64?#8lfmWB0 zl(Zd~{iDF~@Y+__(z5eDc-um7v*Cwn8w3nOnxv$mu!wmRloJ>m9`LF$r7?t;dzq6) z;HC6{b<9%rx6FeG%9=`x1|vL*H_NkFZLyUbzUb&@WMZy2U$l{0u4(cBhi41YMIoif z)DNxlw8~8-fkk9sU_h18pOOD3s?_M&!gh(#GOMM_{Ew$P>)Ch8y^B{76n8GQ~S-qmk)s)l9-sQRe8TR zjY(`A?BfC6Dl~H;cK`mHV$&^5qk$zh`g<9b3#10nCd1*zs5B@(LH{5F`cMw|KJ$Vl zXSUxl8JIt8x)rKS0*SYpg8RRyN(A9iFaGE?jeKj0+^VH#TvF^v-fz4j^eu7;=oCW^ zBTsTQ*gQ|Z?v7C6)ukpU++GD*m@MJF8Ak!FQg=vHH7eh0E9o95S@@Yl$+8%FVf_gK zL?QG9oLpbXW1(d^V=4W#HLkMI<@oq`ZgEl4;`89V=lhn&x$!+ohX?$iZzJ*A8oh++ z$pG{KD5+qd7-3g@VZ->iLNMMY&?}WQtC!b>`GdBXzIm2+mIOY z5^K3cC;tfRw%-j*YywQ6{zWAx%K<=yRLJwLq0(vcgr4vZyYYU;oCjgV9J7E9`2O7* z$nl2$C+6kC1NOXRU-ff|OY2Twy8p1NGHxi_7%NR!o$mf<8hq#)x!PG#T89PrDn>rO zpif=?_ZIib0N5~4q0C{iyyOh6>_k1@Ewdkt?oAUeaa5%M75x{2JCDI?#+mficCrfz=vFte;zCpNkQ4I|bQM!GB zJ`_R6m~rZumH}5%63Z+$A&VqpBgO&RBB&Dp7D6X19ITj9Q7PWd(o?yuw@hw$a&iKg zugHPLx#Ww>4**d&)5*6TDGC96TBA7?i-8r~j620@9HpA-YNr`M7$a9vuGg* zgtun24N6tERC_Ag3IWl-zc>^${YXx8YEuzyHauu1=XPuzpQW-X_6!hiVciFi<@Azrie_|C+Nb zbgST*t(8?s(5q zhRX%Q4)Z8toBRECop^}$^tsHXzb4P~xhvHMgP)%HrFGfzVSqwn-U))+4ENej7suq~ z<(b4_ekwDXH3`C}d;%JOQ0IM273zs+8^<23QJJXScOJcb z1URD23(0NJz^y?KY!E|o_M>v87K&Q6-fZqQDBYa?PEk zZ`spY+5ex@mp0yI*Z;v1{3S7=f1#M6jYhD_6#@1o09DD1vdECa2~!`wVoLA`B=DrK z<;zZOxfDLpsm8M|@04Q%D3I$#I{84wwrHOrN5wQW zP?zo`%jGy^!6KhpQSZ@~lyWE25%oLlYbz!!u3J550o?V$Xf ztY45D^8j}SHkbhU8g$fh;IArkq}^EHlWl;x1lP`ZPRB1nZJf|AD9Z645KsotY z#TV?VJitj^$azD<##?dGg&D9HU=k(l>sq?3?T60EhCm?cL>0BFF2H4uF30MBp4s` zgS=IUSy!q0X@KlW9ZbJsyboU%^qpG@iHCR)M=YW|RsR**I(Cbm# z&maqVl)R@0@x&|>nx_Z&V{0NqGza=OCqxy{Y?r#RJ zxC@t(=$v=Lrs+zJl6yw6Pnc!|EZ2S=-Agy__-WqkzAXiIQB)pG^Shiv`4u~xdD~ul zUzfu+mVMW&Qk67|-Pk{Kq_E+D!th0X{VDYez?GFeM+`kKy}|w(BwS!R967HI1I8Bn zc)bbiR9%@8ZA~-gP@Mj^m}_v`dgR&p`D9YhhudcxeJI3Le)QMD#0B&(#C0UBP$g*D zi>$X^a|7I7miwm8uR_B}uuZhYrq2MG8_muT@pB4DWK|+R^%)~yHNKj8VxUym*c5Lz zM>(}fJPdY@qc<#YgkGr700^Zp+g~ZJU*%#u+t6#NDnX?40cspgR3j*bl@u;mgQ6o& z<+`k)vN`9fiHuYd6nWa4CIkQh4bzr6JuA4Y*z$#^9QRdbz@Tz%vGh(mz5QH46C3rD z9vjyCap|1aYWkwD=MkuL4)3#sW*8cjmx8c3+24}Qm=c{dM>#XVnhvywr!UGc@wjzn zCn|UyzYk!|20M=WhPR_lU@OEfaZp zYj|zs)f=>)C!-{w0KIEpj}U_uY)<#-7v9AnA9%1$Vrz?pyGek^WOlb3Y&mpe4{mw{ z_UPt3%SV3*cs*byN!66wRc@yXA47**!XlwLVe>~Gr8TRV1afy@K{Bw_S5qHJZaulh z^x;FH2^tYo=!nmD=o?BRTcbxeqYN+~f1zdAkAL`>;BKv*`?Pp;9;vkOoK`MPDz0|SAv zvA2H?@O<(4k(;&_d`0;D`1WT5(Y9gLpjW>tlxMs$QQ!akxqEm>%f;1kLG2ZTN7RzE zxi|ib&uXT~&XK0Dv)ht8>C3H~4_)_}{4f3JK#lm(9162A56$|x45Tn-1OLXEH!TW^ zrg+;LVT{eOicHq)iyzdxh*5?uVwv!GHyaakXgHs+o!`X*#b0aW=>a`i++Zd^yUJwL zMe;?^4T;s^!U~BRKoCSn$24}p3wcXQ*_vBhRcp%UAIPN%y`(qbWO}fe$`a3L*g4%h z3Q_z_qF7P0V`kpY{UTCXVrBM7@c#467x0`7oIcT(Z(pC1dM?6X-*qawb&;x3-ux`Vm{)@AreKKm!(=g>kZZGun6X>wjy7XtcB54N`6D|esw|23Zr)n$X*(CWo zkE~}tG>+5m_ob8FEq)X2`=#lLR zsgj%=HrNEezc!lYcS?&U_iY%K%wdx57SKxsXcB#rci0fIN`*Hpk12 zXFvSxTN?vywXFurb;~|gNW7A2bDU@@qsPLuYse0FWjf)(`Vb*GxpbMe|32uLzI?Gd zR$W>k0oOx94LEd$jY1$im+C*(R;C zaW#V8^eol+pu?K0pThsd*acMwA7LN;@NAcL8^`g=_%t*dQGAIplLFM~s3=vVb4?eE zTeqK)>}}chrS1;HHIzjW=*7jBu`KZt1u|3jU*;BUC<8SN<>)rl3)OnNTh6!k9QqL@ zAe~eTR`TAwVZ){3eMiKiaVx_y{@qFA{)#^)3%e(40Cqc(d@{gGmu>M@74TfY^7Sr+ zeG-g-LOTOl!a^|@-+z3K{=%Uyt?d}GOy+Z%&ubU$gXKAXNa@RG!v`vgV0cYgF#cJ` zcD=*G(D=4{^>$*SR#4=frog9L+49RuV2-4(tXM5^Xf?NG_-cG04c+@LU+6qcSz%l{ zdIV+;e1DJp&<*tKOXb3?JgWdlp2}m=fO5kh*bF1a)*T25pSlte7;R7@IS(2`_BTe; zXf*K|*~QYeGy0Z*6Hr&mJl{EG4WbYLmt83(72nAY8oGIg_$kv z7*|$S0*882z1^45bSrYOr7LWH+i-Fge}p5bi)++a9pp(XB;f?39oICPsk~%qDeJwp@!^m-V%xp)&APQ<9wcUxLy;sWJ z(>nL>vl`-p3^DUaGdj(V$@$u;InBYQ;qvr(UxGMIxpT`N)Ik&z9ew0AOY7~rEd_Q7 z0Na|*7eVY}A4KRy{dys^SHOEiz-G80TepI}N>I|78@#=P(fJb1CnfZEL=lY?B%*TI zmr6dOC}i9M>BV*2MjFM={rx9KMs}xZYxNQrDyh*E#pl_3U}g;UtS22D+ZuSTmUZG` zVUs~EJBEXWh7NP{bDJ?I=el5PbIQ@HSKNJdy6IrM7a3Slwv{rpM>C(134vQvAIRUj z{>|O3Th+tNXUEO^;p@%PoW-zCA{QpjJks8Uhn+FbgV(OzFF(?t2xtBB{muj2*YLI6 zXKVm7`nqwGxw%vQvUi>UP}RcSz1Lm@&_Ne0v3o5!vQ;0>$gKjJm|0o#9)RSO;42!2 z^7+m@m<(@6g??!JCu%L(InQ+^{GV@Fz+(RAE_)23f4-sMW#~WOQ1GzjAEvX@dlO*G z{{9H46#sog0rZ68i`GBhe1P}t|JZS#P$V)7znB|!d{ATjo32Jp3(m@!t)-wr>y~I! z8sVi`^X8;sz^j6e!eT#cInYm36Ch^lh-Pma~Ygk`m*+d)WlE zz<5J_j*(xYThIYCosdA1PDKS<&~gDUvtVp9X*B6*j5cjF<2B)4jNs!0QYBgVGX#PT z?D+b&zuzhLk9R^qdCc0ZUzV1k;8EMFpgahS{l(j`)ZZE%6UcB6i<^h$2D}#T=;6{f zFhE#3s$im~#vsW7dJh1PpgA6H2?)ZEY!=;~pibm*klCfwz5tT}X^CUzV*-)?nFtN|*tfX4;=X%2oX*8X*MUL;2$dY*pUOG~XB;*fHdRA#DphRnjn`KvPf z*TKP984y=6*actq5ITMx-29Oq*tB7jkbkjJQ>!DW*Pv@Tx(Q%oEO?zxC1UFoa8vq8 zk;QN?PtTb(YeueOXLfjx1)-^ZUDVTTrBc^X?Cf$f*FhNA&v~>o?v>p2XBvG(kCiTN z_%!i>iH=`W6UNQMQ{{QLVJ5fWqiU84Xk;tb*48VZcWZ6IPsL!Z6TWom=~S2}UG3f7 z(E7062LY66(>lo$MI#}-(^G)}Z)=(G*q;0(UW6T+o^J3Qtc>>hHAdWbaM(V6vm=)R z76Ue`Az*r`wzggufQ|%wqH;39GkN=YVwI5fb@$UEw^KZOa^VPF`Z-mN>FLa;Ig6S4ew%IZz@{_$Q|m7f@|8#l~2Ul$rX{X$534S zRnYe%lRjl22B8!=?bqEnz`MVNM z1qMAMqx1Yql<(mx7VNCr^EwRpWfcwsS*Jw*i?+88%c}j_25(SA0YOAkLQz3FrAt9j zL68!W4r!#MVm+@1b&m;Ax#nFI?tlgj7A$wfP@&9!JfF!QDct`!mk6qj!lELC zkeFCwz8F^E#h0G))d!20lh)%Tg%X;4f^XXjaeiPcoX+ZHurK4viYrctPTR zG)^??W`C~woo02oMd?zVxGDv+d&9 zpULvK>-{6YN{7gz?}~8@2kFpU;xMLIYA}nHl~qiccoy=N#k4n_o;w!2tGaP2{(V~?S2k0L^fSz(e)gXM$a(+o8&ZPAfpyL02-^@-~>dR>&g zd1jpvk0%J3)$%`Hl?sT5-pIYfRiw7L`ID&q>cn(o@;yEK#P&1T1XhkylIm`bda%^0 zd(8#WJ+xFq1vi+#69YEr#iEw=j5$O|jwhA)O_h7=)3u|Q0N=W!PHD&P>10j&AFvC^ zH#~g!Fb|0gn&FdwVIY}!ytw4s`$9c)_%!^FfcHA2-Q`+6q~S+I zI?GR>`EYh;=;cI1U>rPV23SLEmO4>d$(he>*nBqG{BenhiCfDXj`5piBmG~O5}qxp z^CnkNz)wM`cxA5zhv=&FJM1KpN6VFifciJ;jDUi`@uXHIOJA*jzn<08 zRyri@8nCfYOzE~qFvz?72_L7n$_U(ttY_@uGT=bQ$@YcaVsBeKOlV!ipIW%CzhtFW zH>+RE(}*(+QUNy0i7?SD9V`0=HoIM6B7W;>qrgQ^Ezv9P#sNZ&a7J>TtuL77vQh72 zb*i7F&-Vt2+ASwa?WSW5N=TR`C??^z9G=h{v>csxhi*lMB-yXW_e7CX`F{ZRd6Fc% za`vAJ76zAcOvA(BLSwFiV+%aqF>c1yLrat1?~U_UCE1<2&!c$EaM*T)z#8tBu<)Db zcT9r|pFJsg%JNg8>j9s0Z_17*KFvhO#ErM&;}}kKiM}AD%h<@POnr|MT8IXFbdD&RO!# zmHA|S2s>z=Tq@dx4wa3G7JGh|>GKy^OTLSN;|VhJnqe0R2G>`=etJU-0f`ZG4Pm#O zOcEu^M2S_Dmt_rp&ow8Kw0?wh2789&=J%(m$MXNw`5_e9i|r%#MLb{)g!5Wlr>DmT zB^ZFK16i8{&|8){VCLZLY<1#73neF;HO)Sh!GVE?#$Abb0uKqUgob7()A}{)$3A|> zw6ip#vLy0bRU{E_trS*pUH`=koyPoe-B(r3L(MuGGBV740i|KJ6)a#E5f0*9o7onG zd^GGtgh0kMUQA0fYP66{!&>UvXPYeTBVnR}d{^wKs3_2`b8b)69m)AUh3(6eVdRf+rQbH*ITY%;((%DMG|8#D)g7~#`DOSu)SGuJ5OmI_a zC}E0@G@pR(wxuxy<-XR65WZ~_e-a9e=G5GxG_YOtnw`V0EZUr7APe%km82hV{j+CB z$2o4(!G9i4g!4P^P*zoKKPzF}jjd1&(VVeE%D;KQ|EqK9U&1D!*4_TH9iNm$I@mTc z5(z#hoe;o9p|@&`1#TIea$FM2ZzElAA%wuKPR*=JjLe{-6MO0A&E~T*~c2mZ@)sR1!O<(s8hjD z-ER-D38?7kcJM}!V!K3}B!9BaQHek{CN5tHzl7!d9^Ku!k9-yXtfdIW1ZwdHLw5Io z0)q7PqEA#JpFO+RD*YtT1*T2e@M&Ej4)2x+YSq$1F0pGK;|is$+M z?@x7g+qLt8j{>3eL;o-oAtQR{VKE~QWFCQN>WrK{0icnE#YK|~v(Kk__WpaJ{?T3d;ERqWL@TJg={{TK)~H3tueKrj{03t{fMw*Pw{`{qxoaNm)YuxlD<86ZwCu!v9hfo)FrQ z97U=hdFpJgNck7tdaCEwgfGSTQ2Sm+(_gXk$&B@P{^@7daL(`6n_DT*KGcs>{FByZ zqhDm3zVzhJ38qCW=XGo5O=^02hJHN1^@lWqJ@5X7aNS z%_ewIasRzG_F^(7&@*OT3u#SQ5F-71`KKDJ2&?iGXPJq_U)M}p<#+$1()j_oqm$Fx zS}t~fsqsa^3DXM~Qnd8d*yQBg)P$nF*79oevB)@d$u`TwTUQr@bF@#?>qdl0J~irV ziB2!1J}Wv>AvxYSqob3y)SN*r^x-}(QdwOcheY_J_1O{>C`y}Zaf<%|b+ofpQ8Nsgh!2@utD~+NO zJhA+?dR6iwHahl^+qX+lM;zQn^=aDNp{AzpPE*6q8EDyarr%hyVY5*kz5VuZr7TXmeAnZ)~8ODd6>4n`rs9x94DURPzuF2bwCG4ml3$hMInz z{~d*{J9*Q%`@1CK^?lno(8@ z>FUSes5a@0(yD3#(MkXa+rkP9FVpyXLH_};y&?deFowcyRHTywGY-zpYPm-}^)r4~ zIUIkUMTwkDXGl?#FdqfMK8K|}?WOa9m$u4?TQ~1{)_~cJHQw*#v@sUT4@c=|(UVjx zcu9q(WdR?TE_H?bn^L;+ImiS5{U~ zxrj+mY$do09H^6A#&idy!5}9Lm<$x!F#~(GLcI0Moo8Ub0Y0$SF#*K67GuHr=FhoI zw$i#&h`fA#aeYbI60D})y)W01cuNzFKD^h_As|W$RRXrZl(khQ_MW38M=f#d1ENvm zi~P~@Wlpy5@Jn99ISkqy!UYgpObkG29A{?cmWC>J4u&AN)8hYX|;Q#y^E#%g40<>_F=yDTV>?7?W7yB2U z*OXgf(hKod1dmelLE){}y2TFQN25_*x3> zZvY9!i2MuRDN&L5CS;4Fh;cWj^-_v#?3zxdrz{R@K^A0s0* z26Wtgu!_{%+@20x|9wlm8W3op02{Ql?CMO#ER^L#jknTUu4F&$v@_{c?D+m%%m&Q| zz1HhYOuo~f5q%&D(l|d|#YE$E-+tV(Wrs5x=n{$%<<=L zuJ0HubU(x^UU&q#Nq?CkjYY*Kb@-1PILLC}(2%ckGpS;nBntJH)N0=MI;A=~axo^O zX!>$TYcK>_^E>05c`5GTV2xM476+IC!?#u;mWOl^%%#(w=hd|K1aVnep{XPp8MDCU zRVswkK!ppCV`Ht}+{T%$g`P9gc4!)d{-E0!1wC*@I^CA#hbzv=M@0oxf4(byoCR6c z%7}AgZJRd>L;k8@?Va$ ztq40)<=Z48t+n^WuUg*kV}+#tlJhJcx*8V|iIF%y(I}d%xTVFIF@@ItK~GG5@U9KG zo#1FZ4O3!HzF9D4hl{Qn0OJIWpD)<%S)cy1-knTXIVC5eHqR3va&!&s-UI;;6}3CQ zAogtWY3bUq;y>L4vok7VXDgv|yLOHS=>+Z%Hm>RZEF$m$3T6{M4Gp&-Zw5y~+$~|K zCw8<>tc^iFI|aohe#Ny6Y8PVECUSxW>O!b0ehp0FfMiS!9>qd$9v3_c{o1A;h#`u= ztM%cLx9o}@)$DJ2V-50}Tk|LB>85B^M7f4_8pR_OBA}!C2=VV|ex!sRazj#gH&>@D z+eN!WHpCr}T0jTSn_H4YrpOwysjRGQ_d4cVEiB9zQ#zSH`#;yFmM1yfEMhgz-(VtB z%Fv{8pJ95+&pd{VYlr0*IcRJz^!(~5XHiuhz&cP&pD*>bxeskG?=e^?C-P7Ibbgdg?Tz(Y;UB+y$1~o`0V<5FAlXQP&j&(BD%?hvLFOAZW_fFuL8&OKe`~H3|7mh>I^1Y2zOsi2IJ4$eO3TnQ$kYj!*OYJf*4}=1WuPg(X+)wi8 zIMs%ZwXK}_&Km-$F+cX$+L{yL2}d`kU%E6dr=V~dQj)F0SSDPz{k#sJ7wYOlfO|1*P)?hIa};FG zYg=pM-M`2{_V8Fi;iIc-I8T}}Q7?rB8yjq5w}gZ|K)WP9IcE!rHRrA5X~ zqx2sradSwn>9ZkD$cZ>W4t5fHJ65gL~_A?4YGq|{>fR*&_?d@G6C2h}N#*$i8 zht&Mq!S=FWK?rG*Y(3gI1{i=xR8q$6kbWse;NqV1YgH|sA+7C>zxEL^dm&wrs=QfU zTl@B(e{zV6{X#n z^D~QDu3Z8H&H_?gpTz=Nn_B4^>HVT{=%px%H6@jec&`h~VO#=VRUKdHqfiR%M){n1tz$NmoMi8PJlqpZe)dH6(R21t+jX|wQrvgI9q`%ErFWQ9 zJIr&8I!(eY z?wEFr?P7#u2E-SS*jr$K!nr^mcJ^el7R6gH#0xK z3%}rQfFfw0!Z?mupu?`8GAoEjC(UueTMD$@E&_|v^?X`R{vd56QisMI2#hcw!w@+t z`xG(SS1Tkm42bk~NSqpMrlyu3&$Uqv6tHD?n*$UD!z+|Bp8DUMkSxbV-JW+OQ)xfXrsq&mmChXO6w&@3xPODM1^jvgr~z0_$o;=HU> zz&duiMnpAOFjZ{onF;38<@+zGq4zvqC19oH_(Te&-fG~qyHYi1TVb;^>C6tEGZ* z9YyJna*);r!oI1gsp`bF^M{cppfllDd1Y^3-_;CahPs|N8L_Y@Ds=tq&o}ox4!i{0 zNK11w5jd#sOVmp#wnqwjW<+On9Y57if2LlJ)_8Zbe~u<)rM-2l$Erkn`U6n%ZMi94 zrR`yQ{iGla^7aOeYmW&_=6A*?Szj;ZA@wT^J$4D?f9-S~%qUP66^Cwt%V70U19=*SyEiQ0cbxU z8>Q>BCAWMW+f>FjM&A>VTW?=Wtk?t-MvZ2$R(d2Wi~osk)Uy*YntmIisnpxDh9o zh0@-fWr055=x1sCpqle_+V%+D?BT^4oRNm6ot_@`X(tF#hp^d}yCfVFdT%fCe)t^f z1qC*VH2B;Xyy#iDvxBoRTJ{jxJJ|aP3+a%}iIkM|2d~t0+t7MFD{Kk(930M)_`Z!q zmUL^j`v!K6xyc7|jdPAe4oAxZ9UPs0mb;eRV|y=Xzffr*9Xv24Eh}pPx!X8< zt{d?#C?J&+-P8>$fX6s&x7dnuv8$@hwXV&c^I2JWiP~E2^8{it%W;zgSZ#J~G0}!_ z@gHG4_mO4#)Ae2#u-z&wDi$cSVB}O`rqcqEIf!uDM84caN+zuz7+PO598{7RoonHE z#vFWav*JgvG7m8>qbhK)RIO?6ZkimufvqRw+QKCOmsun%Q6& zNhuP4umI zVs{My=VG@yP!DQzO4e^`;2wOb8bEQ3WceHJ;C?pf>5s94vj>K8^>fItU-Gf88qB90 z`1bbphcz6e2X-sF;Cs-OYG@DdLPMRefBOIrDz)!>g4UP_lzxwa(`<|IrU#J_{J)Wf zB0c*Dz%Rb5-$`l+Z9Ej$<)%O@o>EmZZrzL*QF*oKQ>&}9@1u+#q^FWo)Zy*7;ppr< zH8IiFm~7-ZgY1)LiHL{*a!f?!I;eBJK1FZTRkyAzxUW1NQR-uI5`Nv9nV;;jf4ifk z#@2&6_$442)vk#EOCeMyRAkqneW)ieeY{a#*rD)qc_ToWk+DfNO!$+d|aJF4%buhwfF+O9+Z5HrR^jNBl&g|%L6!5x!mHoER-V4|y`Yo5MG z!L0r(xP^ecCvw5`&|kFBWX%>3xcaC~ypomYqb|p{UXt;9sA#&TipeVcG*74O2sqe& z0|Lm<>e2^I#LZDmv!rxj5M+ipOSs&_WM!2^n*p7i!HzUh>~?E0_#{3$yRsr{pc#Y2 z-aLLPkv=a|{%T^{dw+=kleoaAGaBC>-=A^4#s3b$B*w)d6imJEJvbL2@nAqcM@I*xOU*0f_SmTF$o1|0`8U7t4-fX<{3_*grSo+=PV0EKfq1=_456KB zr7^IHIV#+oQD3XRz`h(v4=r0%fD*(*zwYo!1;?<}VH$b^q;_5Ub#K=uCG1|>Q?)?z zM>!c=TXFA?o_Qy|v%73Rrq{@DkoS3}DAG4(KKhLN{fZOGCr>ociFMVRbJ?(c zgZx)7Z0hzeewcp}SRt3)I{k#*p_%Oq>BlpUm4|pz*6NWf_24|Pw08ktYwgPqVkQ;w z(YTihy* zit)2-7NyjutrPb~+xtS|YvL8Q)ijHA<$an%SZ5{!koqvnhA^~rj(8?IG%o0bhzR=@ z%a!i`tH^k1kz*tJ;X?m<#)bO=wq~oD_}beGwkUPS7sz3D>bY4rR~_a4>Kg^tgX!j1 z|H>7X7Xe)8$kcg5tB0=CJx`P3;|J-jy}kNzDoa-p-C<$mH_}`let5>T?^tu3;Ky6= zdJp4X*967w%sPGa#Db}(O})l0CcFOHHRqC}hf+?j+NtPzOH@{D#Mjp^+!s+(9)$Qo zPwxpT2KgzESm`Gt0y_^EHeLYvXKBSCAC60ockU&n@JE5yuc6c)@(jIW(fj#^l(pyG z{X-Rmo;{Ooz^dI8>pXK6z)Z!LMI)_%;^E=+&ek>c5kOq7LD@{ww zO!3nHsufo&@UOPp7Warealui{&=mGu6~DJYL`tglRRa{qAb4l1npUH^!S{1OG~RGiF<8Zzr=(3ls3z)D7*}f`Hhg zdM(*ywf!iRG|Jh>STTuxtqB7K@~p6el^ck2iJYNp)!L$`b$g*8dXcE(v2vRRACkPa zXALE~o@>>NdDsw5o_|_tx>Oy6V>8!31QXqa&4>QMU`ML%9d4?18M;(1v5Dw3O1wq_TtMVw{_$Fzx0^Xr!=x)IrrY+UyxwIv^q-Ab>(g zM{CtA98F+yaCon^5;_J@)j(q=4a`eJcV~mVY2w$f#?jJ;gzeFCuR?oBuU)(5Zu$;y za?xT=;JwTISOx(yF+m6hj)7reZ(9xGKsNwwy$^*}`8Z@DV%RO+cEY?7-dYDd%CD|e zY)FUV<8Oi%e{!SFub-6M8${!ay~|s_dd`^2;;&yYynv4%>pH~4tgdvRs!?LU=+kO) zYhsCi0lP2GwdBWP&VU(oboxO-mTfTNgnsBxk=6hZBU~mXHmA`H3+Cm{y!)ov%U=Y% zpPpt7fxaC&iqUveV^dpO*H{BP5t4MlOA$@7c$uLAN?4x;WioW5Xp|uwfejT zyV`@9hxuU+bVc}DPX*l?>nD7&_X-kZN>8a_`BnM6@P%@+EedG`eE#qT=>JA${}rGU zI{@UUyFcv%_!yax(KV*0-)TiAn6GcY`PF%h^K`llqj7+Tbk+x@mTxvy9MfmHGt3_w zE8Cg-P|u_%z4j-1L?0XR2c}@|-<=JA8yg}TNu_NliG#3JNQiNp?mooDLWR8TE_A{y-<(Cz?8Ge{pxx7(auPHGdPhuB)nadPanZr<=D0Pp|{Oa{SYLiD)w zLzHm(cw%Q9aIv~$UpQNk=rX!cH^4J}R9oCQNW9 zQPL4I6EqQ@HW3F<3$_iGmZk$J(b(7s?RH-pjp=3wRG)Qh+fpMe(tWs@fH_3`JEtP+5{+55uCO&f|SwM%GMt8ED{r z8Yp%Y&Jl@j#bqmdIxx}CulD$)V6iWQcin3Je)-`}^f#@sQP_Rf>S>UtcDL>RFa%%h zliI&8J^6+gNd(4C{%RvcM#~F)NtOO)1m&^>w+mdA5=!NZbXjM7h^xaWA2=$cQ($1! zl8pJp1!5^H#l4I9fT%bIeKVYCx)Vfo@9ndqg)v98R4C|$og_-1uQL@=QM}};}@_JG2@w$PxQLObajCPC=Mqa+?x9wB1`&ZSX91Jg* zciQ*J2tJZuYh}QPiio@h9yn8bf_Ap;IIyLqg>zXC(gl=6G$PPi>L?ogEx^?|e*zlP zVZLh7c76$^?ig69R!a>lC6ci{4Rk%#@DX^ou_yHBp~ahUDoZ2*_75<{lN^JK(BM|j z!W%H_FSt5W)0nKV8-`dFzgXN+(26Jr6iA(Si$dgJFGr#NdQsEV=AY*j_$@`9M!X*> zvLRg-v`f;Pi&A$UxjoymPZHiL`H3!Mb6twd()Lcs+{&Y+9Mzm6gZT$MW_TIhd_J&Y zG5$N-a-V>yPxo$q?LENCL7CbQM+*?$XSS%|I^zynE0B>a;+WZNKIUC(_E;U*oO?>U z`*P0HQ41Ql#SRY`KG7q5LbDyv%p^#je?)>?+x&65){jPV)lmct?;XL1U4@xq+ zrZ?*F4+X54KN8i`?yq}VLNcwYWol7+a#=9nd|GT;R^;#%9cVYLO=w8#xL?g* z`oWt%yVvQO03PC|83v>FIRj;;xY)Gz*(SBR)L#V1wX~vj+YzvqaM9CJxnd|nV5s}= ztx3H{Ene7Rm{YDldAzI58Aj%`e5w3+#rd!pJ{^#nPBGq54th%T9NmJkFda5-b)Sq3 z0@3zp=?BN!huL4h7N5oHNwA0>RTn*y1ogPmWMQNqI6;L+&$TB&Lg!opInZVG49(Yw z2-~epJM&S8e5tb`7p-B*$HD}US4^8IqHvV!vUbAMiN zhHxC@>OE^~91u98zUow;+nE8x+PDIxx!0_FutU?*p~Jg&`0g<{%Dtj_9In|0YMWTs z`jwq!e;U!dhyEk`^HZv*VT5y5(m7_FdY6{wUok;SlGazXT{oF8N0+9FFRzsCu3WBP zGBZO>)sN_~U10_!%k4PBpnsbeNHXc%b{Kw$7HUS7VgD>R9apHehN+SmA3{SLTJ`FF z#`OikoQ_wh!TgJQVyES|L`X@QRyOwp|Gm>b$aX=g0LQIcSnkl-G8E!hu5%Uzl%>$= z5fjiPAWm=1X)izP*uJbKy7U}SGSGY!SlH9CMimx1z&}wA$ZS2g`KZ6FhSNIO0HJ>Y zK26p}nomVB@nfrO>NTnBKSsBBBtZXbuh}3mo_S08O@; z?+8?=1xd}OZkFZBup`{1s**0lpGf7UbLx&4fvbPy!piz|cy8Uk=5G)tPW?e6j#^u9 zbbWffG?26N!tW|CW@S%LOR$&i+n4tH_iga6B!J1(drFb_vn*faGc+%4do1X3&yEi8 z7Je?JR`}Szf%p>E`$u2n=dUey>jQFSa1Ib2vwRPWEar#I(Jlx4Xy%LJ4(79?MLFp3 zMEB@`z8$P%35$xPj~9Qd+c>eSo4AvFKcq;|nD3#+2^KENKnM-L)BC3^YM^`) zOJXg9w$y}$(@v=*U3M}rAD=|~u~c-M6m+uAMY+aybA;SP^5^HfxJ|A+0+rH{i|a#~ zN0?|%C1DgX*5wFq1#*E$!{+{D&-FbS1Wei#-?v zgIqh&)frG<%d)SWwa-72{SB21jD3Mv2A{mqp%Pk_2Xl>EecMG_L6L=-X>V~80ePvm z#o<&ykyal_2RymPW}vnKi|+O_iYtb@=`2g5d2hXU$Mh_sqoVM|j>nyV`#leWG}PYo zi1P0GHjr7tFskSu6)m@NnR@w;{Xnu{fmh~qE0|S6_sw9QX?2&J$kRl!M-;xm*k0|; zxJK*3VpDPW5!#$?BJ@d?2e00jW#n!RJ7U42yC4Q3ggR;m1#s;&cpqG2&&=<#BHnTQ zeDm*{pHhsL4B?2}*1AXUe_zwuReu^|rF2mf$hK@Y8!M{`UsamU68nIA1t1Z>EuK+Q z<(71kBWEbk5`Wr1)xOr#H@4pC*#&JxLHI)mwXhQ&V2LK(=e1#GARdj?C-I0{7N&=0 zplxMV%XSyA#iSYpw~)7Ok%A=iCCN4_O5q=CIJc`F;$xAd_V`GTP7yXXGT_lT5&=P0 zc$}~1uoG5Kb$}*rCYDscOt&IWPO}q3-e)AYR}cK>seJpuj|&yP6=Jmx;&e39GV>+o z1|<&Gw1&jV>Q0H{WXc?RH-SUz8yKLQa12UM3Hvm8n>25u9E=91&_*xdVhF8H%i{A% zkDWanL2NTzv>6{CpKZ|UbYg$V2jbL6RLDbJX&IU6;zg;==Gd_Z@K-3I(7#+#Kc=;C zjD+w6^NzZN9MZ{vX@bYz-dW~gN{|(_4i|}XIy7wW_-?gVgjSnoR6GWL5srACAYeR^ zqu|r$&r7e=@4HgB)%}eI$|^|26IPI?DMUXCr^}&;L)drc=Y!^6D?e zC!+2ZL{Blj&peTrcuxA&%ggz&$lH48>HQvdmjIzPb zi0b|IPlC<4c9^0I~5QFy5>w%WBi2I*(^uhb1_Kp{amsl{a1sb7@zBVRCb{3Zj)~5_qbIs~`9ii5W5YBFyQ;RH-bL?zY34tlp!Z7tk=$d_|9t4PV6?Ry z$%6z14kF6G=TMs9{_th|*FP@h*F!9sF+`Bc;%rp@S|cNGI2iNbL8{(&Pf5=r5P$O&VRBC5>J&ip64CrXr}6#f-`r!O~-GBiX|kIOFG zQ(zM;{rKF-X40pos(Ssv;cU8wh;M&#b!I;6F$U+$mlxN2NTbIkwg@8xtne0l)4|eE z*$UnaI_*3~K2S`4a z3NoENO^ks)eVAj6tG>{49~1>&pYUlfTqJx=9YCJr_zF5W4;>SE6_L?;T7f-5eU7>m;;Wut`rO6*rb zkaE>_vA3$)GoT|ghDk{H%hbX4)j|gj*;m3oK76mvQuv)a0eTwbEu#JX)Aq;9Z!ohq zlC&nq@-L#swQF?ZcBqs^>~|&mOK)9i7CpX<%5NB^bLL_vQ&vm7`VE`T0Ea198v@qZC>&uJ>xSmt45S{!LmM z3)IkgtG|XB&H}i7ekcnU1=FxKre|h#Ct?$BZ4~6^zjMC9ySzx>*yv%gQEj(U2TMB^ z0rT}en~^c}A)l=IeY;+~A^Sk4<}I$(+Ljsq+aDNI9+)vtQwgo+&to19!OMkXe!O=* z`5T4c%a1!2^iooMeEr};p+=lv7R!Mtri8u-_Dl4{gf~!sE@E65*DLvXs@53Rir?_~ zNH&(pfh7s*8Yd?OIQ)4iASpHF$Jie}e)IslIPn-uv4ZqStkn#S5}wPSK7M_gih+XM z0uOsf~3?P_-TTchB-t0!hkuN{sizdCJe@ zn0P8CwZpFd1ioLKa%!;A;+!w&o+E^6yHZmb)zs9OHMvQ9dwUVEjs967%*LegpKsq0 z%)}^J$p>mf#@B`{bTj z9)lz4S-2w*5FtLgtoNK&HD>XM98c>d_fS;jQ^QDNEZ<-wEv<5E<;;`rUpa*^kO~pV zwZQH>w>>e|OVF3DAvK)Pd~Pv@ZS@VI=lTNEr_MYZDTjisAH1i#!uW7`l5uxIdD&UG zp3|RY6R=ZFsmzj}pa1NnQ5S@J0Bx67SG`F*o>fzM|Fz-P`Gd)tP_oyr^VQ`!FzYT5 z63Smd2Sbxpurn3cjH0k#8LdTND9!bd=De}@JOGfkhTrK)T<*;yT3ViIXn2Bw)h8f& zI(!M7QLxnt-d=}?7De3(AGca^h}VXJW53{A5NrWy$D3HnO}IJhhB7rZl^+YGXcDC3 zA%THpWWpwV;BL3JS|$GAk<)uXAN7Vq15t8m>DgxH=Ig&UkO0DNR@CY4NWh+6YcbA% z>^j-qs+%66d>nL=*Jx!KY5#o^pRgp9(lko!%4)E^s7Fffv4-e%&8CI&=;hn(XWzo* zINFavui<>N5q#9%LO3z{A0n#7=U-!-IDCwFKj(Sz_4Bkkl`$9kh601MFAm#5jUF#* zEs(-|VKY+r_VS0%_&NG?uQmzN)05WwOU1&A;c&EfK{mP#(I2kBCNQSKB_*_a&~4X{ z4V}mJMxJqi+dx*MJtg(0fCbt>=J5kXq zXAX9IWD$~KaM=-$zWSEDYfOAhqzuvu%ab4XWe|kNpC;gP=~!bY;i?=Wm-&59zY2z^ zSsm_B6&Bs831aHA{Ix+W|AObUy+n-;!~rZ%{JF7hDy#rsXBb~)xxH{_xP*qyL{MLK z5bGQYt8c1e{eWq3CNYA!@$51~fImk9%F zZS1TW?S};g`NO^oCFoR01bK6y=dZj_=F>^jV>wYvW7z9FKbF*4S(_j-IYsk1mC}U* z6TR_YM`9nz2evcL*>wCet|WtZDYmJm5fk=oM@L6xP77Ka9dzO&{{kK3lzs4m{ttWh z-z_`v)2BCJjsnS(SQ={|kvay-Bv0}Ky}WY$pTp^E3}9W0U0{N)#m1wKd+|hnHg?>0 z*biuFLkuop5QVfp!l3${v}r-o#%X0|&3T_kLg_90iuab@@AIn~aZ|i$-aPHSh6K`` z=AG-fa$=527smYHfebhLqxbm)`8nXz+J8R%>oik~@9u|F`-!u!$6YBds;e)Alu(x9 zy$*?agz*r4CT3)@i4`TUT(IG3VVfSl(G>2{x2>VRHk?@n)5s1UjpW=F@^yzVZ6@OA9hPW%k5#i zLla*4p360}EHMH@mYq9l+^fAsc}z`RT`cSH^Sh2VW%LvCam zuDac&t{o~2E%r%cBNTS+x5ys5(sfQIPp*a<@2<0f?*Ar(9)cy7I zZDv8p4VF6>b3`IMOH0+!i363mN0zV|{mv=@Z)?8HM_lPwiV17*`J{BH}&3l~g^@*f@Xm+`;i)j3o+%-U43WvT=0>Gr!IGL}bt& z;Sb)Hw499Rr2MJHrwpTE_|s~v{0&}nfvjbGR77MXhozWkhK zR5tfYz8jUWq#ctyCd$_%g^Z{pM~WAZTnL3?*ExCylGlr1s(JxpA}>thW!K$ff3?P6$=l8vrw`3!Puuz3$_7^NlcR0`C&HIi$ zJ=Rfjd;R(Z!o4&^;~yh_?pJGje=)^3SZ5mj7Qsp* z2ah?-D?cCBgia9p z8dJG?SnNe*6K*;Rld+Z>eHHj<9Avf&;kRvyv6IWFO{_MQ6Zr*7ehDqL>)iA zhtcn^7Jpv2U06d~C@wf$=$P8Qr8}9F>}wSQGe|MoJuGHy2?b|)`pUEN^CeAbEP&aV z%0PI;5)@*TnJmm5Wg|s!AE4OUf3{b$J2}%ezV*UWxP1kJ10KW=jl@o)51_IIVHtUl z3e#%vhh}8P>%Gri$#*y~LgVh?SFzlU9myr{PsC50vbi6ufuY^# zr=F!J8EaZ4IyV^`r`HL>Gq}I#WO?~((tIT@R??JfsZrFNIJz4uOmg(UpHFQo26iKTT< zFP^Wfd)0X6l@ax#TwFv+ve9?vWUpJ=n0gsTTY0LpN;&M^E#=cu_eS5SLeMgGr>7x! ztadHt>8?|d!0L07L(BxrHg9+#sw>Q|=B{o0Na-@PT<9i$wSe?vu&6mr_NEEaT6YIP z)?)B6IQU$G0*1Fl?DB_OmoHqw!2xN1nOtNx7Q55r_P-oBO&*uGg+sF1OcnVDJUsTkkNNB}kpye{3@$`42$C0y2w zYVFL@V~0vcZ*Nn4y*VRQx;2%V!yvg_VrxsgLRA5#0@UVWD6SG^)zi=pxu;JNaOGjx zP@kTe!0s$kJYQ`0>mRshQeZVi8y71b$$aUmC~}{lum39Lo2y*2JoV-4ySryl+(u7m z&R}ode{;Z!LV@*Tgn;Y0f|p~GKd0&;yj^fFn;DI&)qK~H;KCK;pEndu3P?P{{VKh=4WEU0?zzffzEwbX801agG%PD5*7Z>87u?T?& zc^+jnvwTrdumtC}u<93^IW{r6PgNOy8Fs3h29L8QhuF}qrOVmbxh2Y}eU)`}=N=`* zc5icV&}*BU`*p@ii7^HRJ2Ad6Frb5^-w5%=H^8Z_7ZsCPy3i6?L1vOi5h-xabZGT^ zSQm%+!q9`qkMHX%;kl{rGd<~;MQj;N-;<*w7}b9k-dEZk@Bc(F@*(#k|I?9@UCWs! zvDoHEk5%Mlb>E?Y3ONY-T}0eXXyRK-cFNEgFG`b+9dqq?P8)pr?OQ@Vvsp zVa>|Q%fmuNh`7pH>NRX+HgMs-%X?TCd;Oi^8w984LuzN8##`bQ`}G|Gm8CN6FINRF zh5hX9U`M}N2@i=bS<6x(}5=RMEkiC+(uw%@*6an}m(4du2H5)%4yT~P3971ba*{SdTU=}lykE-69m zMX3etm+zjsxjxdMp`!8~Epz&s7f`TcYXvhSz+Ey)J1qSwfiSGXYAOF1y$9H^NqUSp z@4!?~!q*t)9Ik_ch1N5Sr8p~YE*vW#+gufT$+(oXXq^Ny$Cy)!x5IS@#qKW=an#dD z=Dz;vFN(_fy(HJ(cy>U44+^QQz`pS+ktk;sr>px(uNZhgg0`BFB45!ks_uOeuJUxb z@$ys}OFP0F)vet!A9#Lk_f3JlG^iRTw^FzO{;0Y+l-tngAu`H9s}S^3!IG99w}BS@ zeQ!yN)@JI6U%E_r7QKs-!!&uxd%CgnE|^D~a-NJQ0d$Ov=a4EYk4xiYPlv1;XRPlU zu1_}-$&v`&x_p@^OaGUl!^?i{vw65;P<`>f9IctvZO3CZEx{crCps}de&ib8;TK*2 zidvMRq2X`^O+d-+BiR+kARN4_0?#sK#x#5i-oA@*eR9odXa1e*VRhEQZXQ?=h+Wm9 z0h5Wd&<)t11NWcDd^C|OV526q{NQqD*Xv`0hdpWNl#Nk0+Kc~$J^SJn(Gy6+4b0EX z3Y>IyW|8q9@eh|EG%$4H?~Q|np_r!dY?XDNYPD5*d z|0lR{;&5j4joTS1aX8{@ygBr_5Gistl8EnWtWAiLr+HPw$2Y|pLG1X#$-*S@%5w00 zMd~fo_oE55U@&{A*cty&kNISeXgN}{V$Y16l5%N% zH1~9(xn1<`y?dCmZCdYP&>pJt$G*+@q(X*7YP}|TXeT3Dqp`Dw76UwpVCm?+%MoYP@c{$A<=Vx z9SOH2QS&{0YKr5={R4#imR2bl_8#}~e1&o zu>u09w^6hHEYrw1#dv9HsiUdn7A&%JdC&b29y5~feMxUa&`99daY+gmHHV-BGubP6 zI9gx0F~U^C_Uvj22E9EdXHw+j=nxOV-0D*Unc5$<(s`$!7rU+MmQ=g02R^U@E(<00 zz!JM9ik}LXl%)$_vpqsMpi&IsHXl3-2_{6KTCVoOGbo5GXh;dZIW_=Led%CK=XCCg zWm4zsGY2}=bu8C7vBWuUCbkln5v{?5CEHmBI?cy~o9`w+KVUXQ=;_fX;NjunbD1Us z5y++C>*u?Y%3w6AC_3@OxN+d-<&}~=|2tnVFBkD>^!PDnFGad98CS}2i^s0ktU1Dp z-azf$!DT&vRUJ+1B4N-4vID-*@Fc|&$e2!J#@JOxX{s7C=(%Tpb6=LkD~~msr2K+? z-C)Q|q-um?Xnr>-Dalk$ZvEu|CiJ3qg&T~OTe_SKC_wMT=VHwexM)=6`jos;A1eyu z#4SOVq<>&wV!JO<%z(bSfT^6#mM(dI2dEf7W5uz$$`jZ1=PzX#{w1lq*iuobH|MtA z$j|}k`gF3UQBkbQ_R*iD9+^)qD~EnMT=#QEPc1J#$w_>i%ll((&FGy*$!@Iir@DRP z_DIstG0=v{M@{YrZlnuoyn$r8x(!dlnGQ~L#IYA!6kGCT{@l;+e`)|tOOpPuoH_RG zk%Ep?Dc-ollY0lc3xIwCr}QIdWhGfP=N!De<4ezO5Hgz54;(*;Q-PwwKj@ z9C`v&G&JW>Iu3D8GRo233zfbZZjmcwDuR$SQIwl*cdb`gzBgc3fZ1i0##>09}XKr3s#Ie+$l~sL7P&#;zOd2KxqT2(F3}U&T6%h%*82k(rN^(j{ zB81egyK&rz-5JP?bSJMD!87L%5#i+Cy1|<=lQTek8}#fcf#QF1q-05;G{PS|7?W+g zFi7S_tU0`_nF#q)O{_dhF$lgn8G1L}4^o79f#)VlTKYZPS=Q7w5&{`;Rtx<_Tu{Sr z@o+ldw(wTw(2F?nt1?>G$QJq>WVyg_4Y; z)c$dRywWvwe_QH8`gq#@-i;gi(AV>6#Tv4AEriC;6H;3{6cU$y!cP(o=BWHVKU}My!<#R$27-BF62y0i$^@x)a0vx;$rKSB`D9k7ltKFiNC^Y z?)Chv`?K4^n5ds!8hjHx+})XSV&!bF`4@I#_akl?K#Or+;ClGQm%Z@a`u-Uo^zCOO zGIt6tH(U`Pn*U~kJ?FdMLl^+BNXv-r{6e7)R${3kr<9$S8@& z&cT_a)Jy##0J&9u>7h8`-z&*j_uZSo><8i3kqiTNZrf?kE#pKOtV036L1 zXhQtASG(rYr{eNAa7KRh294;FJot9|-n}be@4vQ$?5ANI?7iWq4!KP&&(2}F-zo>6 zktoyj3YdE6%uJqPXjpE)M9gW|%Bx$rKy^_dN4fd}MMo4ylz3{H?{kj@pTs2bZdlK( zCrldAJ>X`tA*Q%h&VS`-WY1_+4T1_L?Ssk>-u?{%bO>_Bcli+ens-KIB*DUuEKI=w z@-rE-%G3DgBk!etdqlkhzPtkM%Nxmy(2o#=6PLWaIOAU?FuoAjQfusc+P>q*a2HZr z^gi+QsJFw;6wf}L8MtBhjoDvG@$oO##d~e1ex+`1=b!-elGpRhYU(wK0`nJGe?e;G zADBAH`G%Axxd74l$EGqHx}lMg$%O*pqm3n_m4kml`0*WJlDwdZZF#JO1TZLc?{xd} zwseF{nTXK}M;8ZXF+;NwvP4a;lBF^akGjD@OvV?{Z$I!0ok88?AK_1tzRhCoc`Faj zpz2%cJHUgCL-(;JKi4J;Q0+sHRKK^Ly`A7+FdO#o1C{Z2msKvJoH&5rZcjpHZU>L+uvUR3Y@-= zG^rd`u*-Z4RrDy;?JQ^3Q>j=qZD*qUh`jmU^b&0#TYFX^Q@ogtAA*7U{j}E8LVk9N zqgIEVPTXp-Qaa-cAcuFZ`dAd)#9q9E$2rW$Krx_AUKja~d~@WD*ApzFlTDo8UA5;E z_fT|z?EeP#TuLv6bL6$5iZYVh_<~@-^>^4Lj8ME>@;pk8mM9ldt%f0srC8*KTMJTW z!|9I+VW{3yVT&uMNv$zm=#coiPv0e;7deyTTxAJF|H}RMKuHM!zgN`(bRet=-4-m3n>-E=k7#ztScjOyzG0pJ7c-4-Xin0jZDTpLh6I20oo^Pm&qwtw>h-8s>~;~ zj@m_4g7{WP9iPoEppaWM;jNDtcgQLKU+{ez^NK)zP^ify1}FC4AwU(NFhpjh0d#(~tt6E}9dA)bcHE?sL6*?X>H4vf|m{M36#gP2${* z(Q3P2dZW?z>X}>gCM2w;!_lcc*RGO4U9XmNnjU=_=PUUY{^}Q5PV%$K!VavMg6A zP7}mO8Fhm6i9c4{6|(CpepJ1?cvmGP!n3_=xaCrjz69F0K+{hTm}+$1?&4RVskMeT zx-6mP7PvRx;i6RjJ3-Umr;dIKd!D!ZvK-Z0V1aZO;-9kte}DPLcRVuI@G5LOS!;SU zmemM{nf8VisM{=MRQI8(~Ecrt|+19#A8u5Fbo!MFj^W zKPJq2{(SzMORoh-L+B^^!+Xivm?k(ly%K?aSqdZ!RZskA^Hj|O-lBLfBQEzI$>P)fk@%l8W5zHUYcT2Vusre#N56 zGHFTrMsZkAsP2*Su=i>&Aa)-k6@hEL4}3c+X#=4`;f$!&{=1v%8Z+JmY;(d=*B)qj zi=uyhJovG!FqqT8SZqA8ydXqu69h z?oL-<-#-BEt)Nif4RG6U&yUb367nci6?44>XN{(>SMuE4km^^}MMVUQeU=`^ZU+lv z9H%Y#0TjI5xwQ(v+0)t79j|d$*a?7VIV#YL9amD)UNlb6eLjCHHI|I5N#K_^KV*>i zO3mD}vrV$qc1dJui2&`r(w2GcGWL(vI-Vm`!PVaF4xwoQMddRn|9I=#yW$3MC$J}o z?*m8ZZGz&{)2GSI)><@a|CjX&yEgjZTk&XStiQ!X-)l@`o-T@J$lkjD%hGGf z268&Z2pu6+?>|8;)rL6K)z=(Pk#gx#RuG?emil)TT6))?b`E#4v$NCnr;<4~f&+bn zPr18BMn;tLdAPWQEUxzfDyS=G`UF$6-v!-`JBRwFR^dzGawK5E-4kgBRVvwTInz(b*RH6L$G`Mt@7 zxv1~IJ%{iX`2q=R=$`Zx_?a<=Im_t35p;3h+61G0#P5Gc%}v#Z>mxP+xp|3_3r}l{ZkgZCX;;in)=Md(BEYD4YOk<^Rz9U+zp-e*y`u*|M>0ScU0!Xtb z6*RgY2n6MjlC_?%h7#wYp&`Bu*-%9i0;{tSb&+yAoQIgPv$qnYn^y@OpB<`H)iXMc zZ;$Q!fXJphL;K;f_eXzL<9TcGm;+W&{a(FBxO+13}}^C(7LzwH?gl?*N4f0-B#}c_=FiO7m zPczh)|B-n99<>X%f9SI@-ofsYjFy@;_^I8+cLO}*BZDcH78dBh2cu22GO^{8&?PjR z!|7qo2dSEorUfvycOE7%q)IwsD&(rVE7YmUF*d68D6JMEeF_?CUbNAXw(0}y0}cO# zzIA0c7$rzOCvl%b!=di+ zE?L;xHXa|YmpkTd^?HViVtC-(q*qMMVjd#C?g1PMTII5{f+qxaTmH0$7+6olU}nh; zofD#>B7&Cv=xn=a$EPRT{c;LP-qfkF5j6f{1e5Uyt?BwxSy|c3u3YDDf2lRia8qCS zAb01El~%11YeSpVfHNU*_d)gX_0@;FZO2Xy1-cAl`W}tpT21K!*NP}g&9M39c%;1>vej(=>6ZCydVV$WYLEmCNrZ#$VkE%v*S4><#t44Z z{n2m~(z=A~{%2U!#{H|oG2)Bp8CtZS;%P)K{h7;prrzQoV?T-q;aruw?dy2w_%FpL z@pZq($&I7h$ITkaElAE87I!4(tq3*tbnFR{oJtBUKoMHJ7r7tm(O;?Gkur`eIzJFW9K$;Ev@vKp` zp^U7wsOr8lOxnp`=t0T!y;#Vv4laLZo7QG&jla%uLDBb^}7~m6pZZU!vOX zz~8hAdH6=`8NvFxx-%dfsb9vMzs+<%!`0X*YRm81mfsoctIQJJ5gx~>`vo|P)Y?t- za}_r4B&qAuVpd*0;Qebqg!3wiUp z&Ye0qYiEaDzGW|&=GGow1Ds1{0i`ZAibv}-Ab=xY z)_LT6ok_K_1}F`5m{2Im)71CtwEolk^Wq;L;-V&jVXAXG&|VLoQ!LWsjzi2K{RgSi z4;+>o8LQ1SFKz^^)g0qP){dcIwT+SIDQs+4PU{Bb`%l47P`^*gk{{n$HFo{;ROOn& z*GikWJ7o*c>po1?e}|{#@-z(&-8XV-ycvh0Jt`ojjYkNYfptSDzvUn^uMn&KZLF05JFn`=B`&))0YMK$ z6egpjPrY#&dgV*XO>TOQ-(qusfnKHJWu>}?N${JB0~zPz?8I#k{~v*M=b%Xi>Is_` z{n=4FbY@wxLgy()U#`*j$9mt{E_@egXBW`8z7rGXX8PsPH7>o3#mr@$I=DBA`9CnE zQPKvjp-t6}yG)1m`|Q>W23|H$gpUAbA_HZo8(4nJHJ2x#rFv%Fj&5|IVtw7=;0Kgw zP;{ugC!mr1B|ft_f~v`J&Nr`}ifRIVqSmnnSzzcEDF?@Abla3WxHkuKYaQ2kU~V)K zfA>Mqibl`Y-B|1aylbfZ1PL@>xeQjKht-n)qdsEQBQ(iX((U3!m( zF3?9LGJTMwGjESMga&JiGVM+XEwVU}Ba<=5kVng;WU=R6J-IzHQ&IrAfyH}P`SU3% z7FO-u`|8d+6ni8Y87aKnb^Rr0(4v5k95jk9FemECp)VJ}t#p>Htx8fm5eqLqOSr3% zThrKzhd(u5W^HRw1EzghTZ0XnjQNgZl!jC3Wndt_{czkZHq2E=sy!<0HZ|JjURy5> zV5CXJT|hx%)MTuf2n3mU_3;$mFbG?7Y)A@rRdvgvaR#W+o0aite5OH$`jEpWy?i%ayh2%?l428_uA}d7R#Z zv}6h?QP6O$uD$_;5V%ftE}Q%xrBWk2MPSz}_6U0n4i%(KD$T!Wy!f%vz1v~J-KC~v^ru_c!c@{# z`;By@oH|!d4jez-T1obr>8??`wK`rKFcN7NXlCf5eL1s)AySBfvLHLnNI+NHX(4b9Uj9UUtb`VB2hS zM~8sz4&q!w%S`YnDmHzaD2PJ)o0G4fyWNC6fs_;zyW{GUF|yCU#CLzu_&{OBE!CRW zM0bS(FtIvy9umgL?u&BSA`KXOhnf&$kS1y$_lhq^J{=@YNXnmJp(s7mrfc8}Aw#0P z@#L%`S((`nVjIDNl%l=78ZMTWFXai8@0;#_KaJ5ZFmU89=g^x8h%l2IdVU6_qce*% z+gV(R>rarSP3$&EfLT1E{QW93ja_I!4MU~%`VI$9K9hrZ8-aO%^{EVrz_F>^>0qqQ zZLI7aZ(30)V{#db#9yjbDMhn{?@!6zxi~vcAOHnT#D&(-gkTfP!4%FjDEi)Z!#s)ZtC~++`-f)V=YtU+SV>F-{_Ys=!A=Iv--Bc0{^^ z%2rPF8l4Z5_62_Jx89)C)GEM16j}MT(F!`J%@sQ^g}#!!`=sVICs^0}>@vRLN5nTs z5~IE>*WfXgs^RC-3{72YqCaB#MXYMHz#EoY1&S=sKm5t?v;48qN(_jRFO?`W(BjCM z!;axgeEDj>P+;$%ZEo*P_Y=tfPA@S=d@}591d=H^`B_+oDXIR!vxWX;h+;U3}6#+D|rpD{Y61y2@vEVk=?oW&fYs4{h&gckbaXkDh@7D~SejcVrY)Za_k^a}HcUJppYZq?2wXyb3hB$C~l_7niL& zS|~cGQPcEQpzX?u`Ex2Hta#(YHRcc3&dCz)#1I9Tekt_2ri~^~(E2r?ZNH|pDg54O z3!%#>PL-mf#zsxLx!|n}4xT^aT!%CXoox~d$ng!dgc;qPXk`TB3nY_3iBAIggs4Ukex*C{nm`uRQz&3<2rm4SOIE zAgpaRRFQg6n4Lj^PzFs`t`Csq zeQj*Kjr>Ixj7~N-oxVzhTEi20RBV0t&4D_ zpn?9fN78uf!KyS>f6c~C*n!~W-U7#j)*6H2^7-={_|-KAzL9r$9}2cV6Q?KitBxw- zbwvQU7w;Gc47jXxmpE!bTKM}&9(R(q1PY~2%68p{q!Z29xVdqolOQ1&gNxU_Uu3ci z1bljM;C~Z~+_LhZENpLaiD*dvML<*}lUpJa-}*^U=#aVm6EI+D=Dt%J z^Vn?`eWeUPY*|7=VQ&v}WDq=A-dlIeeDHF(>6=Ws72V&aRdJ;fc?#fy)M9u`Brj|%|# zJLJ4D5s;=5RoA@n4Q1nP{9ymV%YC{)zxfD5>>;v>$-cE_#&_o_lzvq4Zt|}V=4uPcpxKCrx;R7}74YF<_4J&GoP~ zqD?V6$DqWVRyQ(o0cIc8OY-JrF5ihje7<%3_@w&t=VwSYSB3oUY#fMa-OX+>7o2!% z*Tr)6z8I&yiU$)fw@mH|L6A$QgoN;Ss}4ktV113;m;CU~>H_UjTzSDJW-vJqp7us*rqzMUk{}5-kW3uyFM_<=6 zP)tY9w>s@yz}>6ey={M(+Xo#oOjMMYUM%V*dZ?cIo&C3%Txr!5uI6YURG7E%A~cK$ z3rqQ^^eSlgFUHs9_uq4QGS3s+U;D>=Ryp#BTG2CfXvX2T=|F1pH>!dni+3R*_Y0}+ zV9&R+)AacKRrvxg^YVkPQx&%(f#{>b>wGeMWtSp#3KROP6)^Jfh8S1{N}uZ_0#^Yw zG>XFww+a>i)S=SS9aHRJ(_Gv*eem(tl`6?k?|j6LUq`q_+>WRdJ#+s*Do5TvP>W8} z5*5ae?(2Al^I6$^gfNUyfnr2+?zYf-4e96{-@glOCGUcu>y=`RPBy6{iRqZ!1sW_= zf`_Uf>nbh!749nO4r$PapnsCm!a$?6wJvdg(~$;)Cc2pZ?{oC~!Rv1-bi((mUo7gx zApiP@@uDwEK{TAE%Bh4{!$<_}JzWn*71Ud(=+|5Z$@P|je_yfe4R(twz%h9Wema9L zve2IW@DrjrG631-7PoPssh~TI9tlkpl#LZhk@mg5|6~N?;4akbaM`ZZ)i_V-N|+ls zqs!THjA>?P=Mk-XkB$%i9H5kTwHtT12_!>3D}B$b*Ub8fZ$@)VOZS7rUq2^)&kdep zqAYA*e|6obxWit~9UM zCTa*aiJg3xOK@M1) zKXLya_1HCIjS37qp_!AYs^fWM)LR(lg7xV0WtesIUY53@Q_T^DB2XvA2C0Z5vi<`~ z#pku!A>@Suu6&F2LaYpI?rP{~jmd5S+J#s!upzVmhKr zWtjDm^Me;~9-1xRd*1XBtsuN&HLX+ftNBG;P7qnmp-YNwg34HghLbBehAVxEbWn|b zRQwuadS<4;Muil*Jc}YueD=rv_dyZKCiAN!3x?+{jOQ@pz88YF9wpxnHj01sJQNg; z2bx#=E4KFUrjhO62IEzQJ~F1EXOk^($`lw zQ<9jb)D(z|u73ilJxE+WptWz>!WL1zODcKt#tGd9Kmy$g6HV++U-xyq3#G^~M+m`< zNvV9_-Im!$z0zzUsz@u#b|ON^?I=<5he5)s$2P+ORi<8$NqmMR~O4 zePJ`uM{Unw{LV*q`^>)WIT(=F8Njr$RcQf}wYP8j{;1rQx0T8a+t`UhGtdG)5mV#G zZ$N{h**PYlcsh82c_3l&VJXt}{)0=!JwQunaSMc&XTeD0gOO$`UUOEq*B&3k``w`s zuLW9FsWP)zQ3i8+IjP?Xza#viUR+Wwup;f6`i6*vjdjeLYf`X+eC_OX)<@qJV;rsANoIEuJ7hQTtC^`ePzn<l$=+zeM;^>ZPi%h2we5vL=Oz z?1v(;=?DLe@m6HRqAo>cZ!ybWP9X`IfEYUe@N~Fx?f1RR(tw%T7p#=G-xJ@ueVZ_Y z_`Et5%l#gHDcNL&UkPVjvAjizWUmlO5r*DLe-`Pg zmGL440W6Y%h+ZB!E$Jj`=RL0nY85q3-^lWoa_kz@EvBA1=>8Vlc<7jHkQNvp&uM3r zrypm$7L2%*M>EeC7md!4p841nWR)7P@$_?LWtL%xpwVcJ&)AQ#$HzXBk0DmA<~lj2 zV8@`+vdqC;v@ze2MYGgDP(IoiyQ#NRcf%sqw~^=meHeo(zfVM;KtOY+SaYWOl-|t* z(S6#{GuW4LAYjV#QK%y=v}cIu1nU85+GlP_o%@K?EfGu0^#iSgL5InA($P=Wxp8hj zdWng5k~=h{*wA==;@itCJsX?VKJ_BKuKq-RO^HRKRT8EGrbjUyukGy07&h0}rA$l~ zCmeK(UGzpAXQw;~uT183sFY?X8E99ZEWUD=b#8CrZvPyfrx?79}6Ex+b_BWutj;QMd3i6Bo;PjK`&OJK6ZpsfCT_OMmS zQX03!!lhNV?(RYB^=YawdZn+W*|IJ8-g|71#9+LzdfXG9#qTwKdR2CuJ3Ihn@m`<`g<8>rz|(8vtShI=gJ>Xbi?nFXV;v&uy~p|AicyI8%n3} zVCA&o4aKXMucWvS+j|dYd1`1|l>TFN7C1JcFHMERcIKFw67Pct5+Vcb+#!oDfx}jM zdW0LBG9B0ZivhtHJ%ohF;`t6SW_%vl&5gVCg8*sJSk+drriKtuRkdrFR17Sf>33i*8?*OGw(cBSSW8&>qK0EW z{S?pY&qP0FD_4>Fxw$#2T33wife)I>HBYwj=yxmI zH~QHNxnN+^!bbD*@~Rl*<F4JeP0N=Ta2tpG$?D8SaeG}?{yRM?|<8E%s^_@D=emxsH@mSYL8DmbB^9&ie?}p zAs(3%2~j={fzIrlX&i!Ym%F;H<{c@-2b#+~jhE&hKdOu=f##+B&SRm&R;k=)eJ-Sn z&IxTde(2MXYq4i`)Wj{9aL}f(-w3r`J`$<-#0eT+PHYaLc|4OfoQperJ9QF&?q)?J z-K{SgM3Os?=|^WdIujF8i%%7BXjMB9=^q+*tNJtrMLbLKZaKRj9a-~)9d4dcZDKl$ zLKU_~ubL{#|DZ1&-;3{8>@t$$o|Lac|D6#+i^7hRCd9FQ4(NlC_79_PkH_IBL?(7#-}mjyQeW&26}d{wzL;P=-AEH>It} zLAG{sX6T2Ohu}%*t2(XYsx^`*acUf=j9NW}Su)~*n(e{fEgL*;*{9lq)hQcut-pdq<Q5?J--A7PfUrP_{HG{T}L$cV87-MsgG=RH_F+l0^B1aBEEk0M+|n@ zCTMAC567@5NEKys;*1jAeZo1$GjgD zv}ofYGIP3n4`0GOyxy)u7b(zPm#jr-tYr~=&Z_=i?Ned9n(%p|Q(^!0oa(F3{SNAj6g@OXD0b;i8H9gE3SK(M9!7H>!Y9`~%kCqiFy zmT`ptf%PJbf+w{|rc7nHQGa$Spa!m#Y7=`hSMHjL5RFd?=bK*y$7Dxks#Lwn_a?&b z+1*6?)@x6@;}PkFXewKv^%N2yRs7t~ zY`52HgAfPDS;gaxrFXJz#=KH8KE#Z@{aM|d$doIL6UiHq>?^Dsi&~+gQqnC^hQZU& zuz@=3u?UqI;ov#E(7sYru8*7#geT$=j||I&US;T%lEwddhFvf)c1*HKU7`mbG3STt z+G-WnN~b4e8NZnIGEHNCs@@#9S#M9!{?0K3iHQ+`x~%?vY!X5ek~B~>WyxmXmu?8r z@gxPURb||#knGDJRF?|696X}!q=AlRvT2|@L1Vq@yTsTNy)jk2t?tr z@%x3mTK_h!0`?4ra)tLdd6M?_-pjVZ{m+7T9W3oxjuy@|oyuESFjcn3{!kYe_a%Oy zoH^)$JFuA(-<{OZ)|a8p1w(-*rY!m9mk$iPoULjmNuS!j=Dq32AyDIFPo&7gS4+-r zpkfP?XSnxXVMH|A&{&S2x0)PBime9C_+5V{dXo3mUJVMSG&eWjUg_m8`q|#w=BD01 z9>1HlL+}{B`&5(v{oA*V#?3o#nJd?%WX?6AW9)qfb{lh~|{5P4DpBOy3WczFzrNqYh(+rR=8{Jrx$^{Ra=! zHN;Pq@t(XC4WX$?gEEZ8$+`(5GO{ed>Gp3Tx1a4k;B?qxbbk2juJcigzPFbbB=S~1 zj`NO*92}|Ajfr+=9azf4l^5=B`q*dn zg$JC?qu1Mua&xU=V&vp(we_v>jPXgif|V=}6sD>!&GYS$5Gu-|p+~!t6(Kl($`-8x zgVwZoxLYMG>&JH6TBkf%^w%dBU)~H}3Bd^75?oNS$+neh>T=A~dFnG?V*wMAgqozCV;X6I#yT2TwQnv~}er5YsCs-JKHJKBVw0cIa^6KKky~ z8rD|t#a&qAQ<;xv$!6+Y5;!6=RM?L-Vw5DOurZhrgy%?Rb!^-rQ`hP^ z|5ZVpV`&(HBc6`0_IWU&0Q)ZK>&cVlo^n<9P3p*V!z#CVd2yWV z-_D=r-)cBVg-3B|a5jLqKTyGQNqA3cd-X@Xt|ezZcMv*kh>7k0a^WXSn$UZ!Lrxcp zMxS#B>BfT+8#^1)VBXMnY#?Xio(QMiY88+_{l%927?>ozU_t=@aF$rF9@*E=alEB8 zohT5?i8H$mn_&NtL~2G5r`UAVwzBPSjLe?HEwb2?;Wl7Cl)U+qvH8aj`j8gNqRPs# zvDGMka*m5l7vK6Gt$AYni8VVygi=JqUv`nJZP!weRB+Nq{B`4ImzJ{X+|>JEen5#M zva8Oo1aX8P*{1&y7O^ah83f>|`{*;hY+7@87d<=DuLiz2RdGD6)BW<2V1wQhrI{H5 z^iJt3vBIo=tQDE7>eX{}dTijR*Z?qgtGh{Ndzo3%aBqn}G%_+B>dhCIlqPfvgqmCa zE4t-J!kIp8KxGvg0U54vOJ#X%%(i@jS`Ojhq@<)`?WPCYOQT|K3b_^7ch8bS@Ymej z*Hse=QL^c9u^@QvgVzUxrHq!VLgFRnr)F8DcGdJ zpnstFFS1)5V z@2dLZ!%xZlqnLp;5X*2Pw`XQ=TGURXp$#~N)ZME;GGiJB$WDu{FDd0X07eF^@Q3w+~MZA~_I=wFZIbJ6!CZ;kN zKjemaQ}+dU?sPxz#n-?4^CwhOWXGzv*ayU}{H7yp_{mWKI847)PdL8!`aT2yIK9TJ`K|r zDtewOfrK_xq6c?XEw84{%2kx>l!#J?Fh~D+!>y**lp?RfbRK;zVFF)IJL+(`*hadGKq&#IC><$)>eG+g1FYjxEj z_G!2u!S&Y{8k|}JFbhBbTYw$;-vRaiWy$}KLW6%h3;L4(^@5u(WXfhFhci4=yLn-V z1pRexi9EuHxMyyo=l1TMK!3FgO@EGzN?qO4Lgf_grjwq`e&g+qu{A;>oBpVnN;-+7 zo75sky}3Rv2ZjN?qo?+3tVH)!6(w0O_7`Y3#g3m;FG~a*ul#lD$yquCSPt{d4l;!d z$u;uKmx&+S^@?8q+>uWaC3?KPeS0L|%$+=E?*lWNy(GuFT_l`7b+MoSa+`K;!#yS@ zse%IHhz5_PzppeZw*RHu!8XfwZ_A@7api*7B|HZPnYa{}BGU99^k*vZo7e0|w}#)( zvA3#~hMIDl`F2D}-}E4EFqfZ=i2fyCP!NsU%~t0CXc!4U5*3ACnwo?N8Uw;xbb9P2 zP7_>?F@OCIvJeSwz)u4kv9Qk?O9(?4o%T0=_1``hTQGd%?xT%lm&0Q`h?sUT&?gb@ z6eVWCHl;^S@1Ub!!GNg1MNSe%^&SO{u5ii{#NaAz(eN87{^3U{kJpbaM?O2deZ`~b z%e_hV*l_wy7^4EKfJ#fm=3u(i3+KZv^y}MQ>%4NGH$K^h(PXLaOT9RqmN~Ani$T9D zT28DlOP>u0ywQI1qTy_H?n=WsZ+A}ooh%owd==i4hmw*dCVGnIzY|DIcgMwgPLZ1U zPXvgkA-sUIKJMc9OujMMVfzYqZ)VCso=WcTddy;*&FeO61H-u|I;9#)Kg{$-YJbcG z9LJl+P>F>LO93tSSjB#QQmb?>;K@;7stc#m;f|TY-jv%&fvMX#VxA4HKYN!Y^_I|v zgHK{Abo2@&a_@*J7ui-PeL_CjDabI}rw$qY+ zU!g#{`gL|$Lu3YFKT2@mKhPMbDe44n3tDc?fs_s0)$q3-#Mo=QppURfM+27l{m%ONrm2nVx z_UzfMxvf0&EgE@uXtH_Rw9AX*mT8wcE$!K^>ol3%3ftALnk+xU%>Ojx91m=w;fUQ&vFKMmRY#Q@$DS-!Wm zFe@i^zVx5#M2YQ9c%NPbLa1k{OSVfRQZ+U9gf3f=2Y93=hv7TzQAO8(Pt#%XI*8kE z?4?63zW@D2i9;<9h$)OJ&weo~8Ic<=F{VL>ZjkbDuseFLR_$Cy+$jH({3e&$62FinyO8wM45l8nJH*Nef?@sHv&>)fho6)JVBccC4eR>1oP4;Xw9Wxp0Kh zv24lL5*wD%6W1N0nheMql+Go-$UCjFZ(~)faT+c?Dx1I)3BG{4oEMlGFl;8Y|MU5K z2w@^uP0#XFxbTQe#_aOxcz@=fIvi{pHRL-F+8 zgLO}PZ|{ms4VQg67y{c9oI-cm%YBqX`j1asm6H%5zQMf{AsSAf*hHR{L_tC?VZ{vt zXaF_`QN}*87llknX<>1$=)+$Jm`(I9s}j{6D%UHm@2}uFlIsPqw4vSJ{djRCxU#Ym zy1(T?*R5X=1{<%9J4YXOC`fp1n)!M2JO8-1N6p$V;+O*Ih1MqBAuA#&@kC(1&T%+StF9vqWgskou( zcol;{Y>zH^AZ4uhPqLGCPOJHB(J?~O=s zOw5d(ZMl|s@Q)T3j-un8RZhY&M=%Li&1QaCiHLSKtxT{gZjp0;^QS@p zxf+!SOdBt(#?jnN%?VCs?c$A@KKBV|`4Ql*gNuKKJC5BfaX#E0WaH^CwD(3o;s}^# zMO`zeTascgUj|Yd4i|=%;#CF9f`7ecHqpUwEOu6viMr*+ufZQ?y!%lEi7&`T;}r52 z!pm+6OD8^aK_^q7AkLsXiSlTHX_OAeo!^f&I{e43jFJh)=m&bn;+tFix_3~y}q zYuz^C;Ma2-FMm{&Y}X@49JEqT6eAcl2EK_hwtDL?Cw}^<}b! z=8Juu;MNGnG|++%tLOZ@jE*Z+RjcBh3jN1Pd1UQ3)sX~s3yZ*1iKuMGROcim=34RH z@%`pzVG(K19aEESI-ZSuo{#K29h|UpLMZ{nasAj+WkRT13VRq8N@`!vU2kY;$WpH! zL4P*Lsk34$ZOH~igoXPeyUl;iMI0FJ<=@`e*$FqR;wiGrBS|JJyPn(_RDr%L7K~OS zqgPl>#SL4J1L6%@F=Pt{Wr##>n-8?Uc zG$2}1ZN!NqmHJshaVu9+e0hY{etX zz36{Crb|Tl8|Arbm8nwN(vq_5e_H`v31^#WsIHW))l5(AicA5I90nn0WF+a$CwrCS zr>_dHvl!*N)gH$sjW6~u^}&dT?HShwPM|Bsespl!EEW?Zz+|Ntwl4=n4n9viP`+pdkrm>t_sbPj%3n0To;bd`#da?!}TnCE1c zxq5xRnPtg0{-Kl%@1eAQ=f^O}gCrz`nllT}do#5d)v6Ak^yt!=@G@4d5Wm-fohVzj z>Wmb_IK9|fi>Kt|p9!zoOG8-yGUU7bNbTt$%cxy4^zMVOFH5|Rsx|F+nxowZ;Cni?<|5u>^|w6_YO?1(@8lvR($eQ$5L>6}^R z=+E+8sI+G`HTT|I%A1MiGOt1Y@%Q=+sLoyWz?y4=_)0=bN}Uf0<&ayep4iXG zgmx?(L%jRQEBg1CVM(@iL;hG7jT9cC*Wj+RM6xg`;l_*a z*d>g{;#s|R9Kaw1-VB1=-7U=5R?NTLeoCeYlL||}eD_V3-~tld$2yC32{;dQEdTan zYux*%uUzoq;kZQ=40m$&VWq$QsEe%?v!PaujFH?N?+Wi!%8<(Ib5Akwx7F4NXytE7 z@ZM}QHTY!OOjO;w(f;Ey6i4gaUESXxx&BM|oc+dZH)Iq#ec*Po>-3w~VBNQW@eTu@ zQUsFQI1~s#9Emqeht>N;%1okqyGu(44odySTA_jr+YxrTl-xHA3Q9H&@&)wDD37-y z0ldA1+6xUv%SHN+H!_MI{K5k)aVSg-&tD)v z_jQwQ{n$H?e^>IY?6*Ze+)L;%Bx;ULud(uhTjgYRSMwnvseWvAJ0d5WfBST6N9M`a z71Z0qKl#_!q*>eZo~N`_^wA^h4qqpK*7{v?^D>plcx&gX{!zc`Yr+Tf;Q4LN#3(K- zgN0M?R-KAr+qA{gUku~Hu>bh{h5jt0-ob#Y2cmFavpW=*=J6}DMFrA52dc#sbGOh) zYi7-t&1@o8j)Ljpnm%TOpD&;vnAe=@u@_N%xJ8?h0b}Cw?xEfV4A}I639WTZ4wmYH zw8TDg1+HuwSwjm`StCyD0pUl%l8Hol%`1&5=Rb4j(8_#Eia$kKa^&TbE{~=Ynn;m% zJvYVsS>g?k4_g)IRTL`uw`NR;@}Us<3*{MoMfDQdY@SsMX+~$VbhV}`)3y+Ek>-`C z?X)%M;|O>JHK zDC(;o3-BHl6%esdlp;qUpi~=TsM0%#6lnqJovjBEl`05GSE?iwDG41^1f)v|B~+ye zAs{6nC2;5Vyx%v*@80_>f83ifEP?Ejwbxp6&gXgNobp>q9l8a+w3dXf%bMk`yu*3( zyOHNyPZOgs>1x$bI& zscfv>NVCr{_l^!uC;InaR<(20WJUHijC@N$Px$!v3AIm)5UkgpeO-OX&1^R2bb+9? zoiO4%|H`L>r7Jug=2)RKAAOzgj+x^{n=SjYR2YrGyv!>XM> zSWJK?#MF*4w>rD-1+Md%OPv{eH5P$GXH|}b zlW`{WWqx-f$OVLD&B=pCF#4iW`^$g{YdhrD zTNQqj0|3M(<6uM>kOZSjTuXDhVt~w4Y~crb%GM?`FJdXhEar@?GhCC9}wIfya4ziP`C?)B1}wcqWNGoECuD{Gt#9C|##LTeGsIukD5@t-;a#isco2jpuX;bPHQG+EGK1?5?c*GJ zAP+{T#(3Zuj@PW+Ed4eH^}*4f%Qx<5Pc}zTbW(C%CKXYUAboiRhaP3GE35%<(FD+a zdbMrV#Xj`8tQf)Lvv>LnHfSFl8NcdeWXVPG=G8y~l_0~uBG{eHfN*qd;RoWMeK%CfR%e?yzP!hg#0Q(!o><1oKx^_OCUQ; z)(3_R#L6%IyoruJZLrehTQI9#BZ=8(r@9a%2P(z#@p*@s9ub^jy__+!?ah78V~ey= z=ulov&9xf!s>8V|HHDmd-q&OWY`g`BhzASt1svJ~L^B$v_}Gr!%`+&LQ>Z>s;jSCa z#|)s4NJ#y;=q5`~Z$h@wY#nyoN+J>E>I?N(#sVi%RTs*>RaAe~1I3o@YW?uANwIan zTPdPFHtPHL@5m$&q5zFtM8U^D{`eZ#U0c(cs*e)(dk;>Ol55>&iU7Urc917n9HErF ztnj4fqJ*oD58krr2nS|K6`aA@Wm~bXAyeIrm>8NhkzpynFjxRnV(;;t>CZi6PuIm=w_NEvP+RLa6dW9$v2A8950~ttwz} zr}KZ6q43@+SH%p>QxqbF*^}aEMj?5tx!d)jxO?3G8hp_tx6b;0g3W4@cT~p5zg|OqbGb{2OVfkz4D7mX{o};ragok1Qwwwt%&Ct%jVWq>IlkUG+un-N|ixl_z zTZr|42F(Z%F_jA5%MS^BVVp`)C>m(AI`va;^4qt!po*X_;)yzNyzIakZDeaP8#Hm4 zH^{<&aEW;d*k~U)WZrrCDJo<6#3joL$I^VRNot}ZpjbIOk3N!|Y&#&N-X&6#_A|Zl z6@Nqolu>`3HeZ5>Sld9WCXygit}el35_;W4!C3a@8Weaos`o&$T*1?Rpbo3WT;}NR z6>fJV=O+bqb6opOXS>&U(OU-b5jf=uS7wgRG`OBpin|muv-r?W1r0~(oDwExJ97qM zr|9`S7m@8PpEue~hf9;m0RxpL4?+jO*Y`yudtskLVN{%Vj6e)(TmZHaHX=2Xs%|~M zhwYlXIyyU7?i!T=9YYCDwQ=NPJw%l;*YZDp@tIXt>gqeQ+7upJfEzDf+EiCj>DgL8 zdU<&84-_l@Fx(&pKI8z> zJWxEXU1WKHZE3m1ZTJmmTvsr+Y=WKl($bp`uUMl)YMljd8g>b=R=xb!udU*Ut~@hH zb4iwRmug!ovQi@WZ%Q0I;H@&*99t-Bc4mOqarb@Pd5a^Q_LsK??>{eQ%vnzdau#%r8Wc|}l@7%sk$#ici~e*9>za!Y~6bK45)P z55#3y<=Fhcc#b%rrG3=!dmo}Wmomt7-jdI6Q}?apr|0v3^2_Q>=ngiy6gOn z?UTP^z3A#WiyP_c&s4TW`jSg~{E? z*k0HXAgCqtYiG9~8cLOcYIZc9D3F`!vN4boKGpk~iSlc`fLqx&Jr=oR|H_PrN=f`k#QE$MKYxUkxaIBiO(*kUSSBHYo4E5en!Dfdhlj zaZcYy3YN_`tkyjqg7DUF0N$1$k36Ow4~Hjezg3xj48Wd-aBm}FLz3D*2>Y1h_jq)L zTTSALQm(7H2icaojn12@yC-k0FB23a@}n}WTJ#1+p1$|))&>7#I#qS?aVLo5aE9{d zu@tu!+4*ov4P%4KnQAv6qYw}JfglN7uBap;7n#j_;liD$5{Ch$!TqLKyzzSH;nIbv z*lpfj`6r_-!&j(|rKwx3&%b7c;W`BM-CB(P&69KYtURhNf$k9E#u`Up9njdqV64=L z{))4^nZ^#H@zH>in_J0KW?!QUXZnX8bs!4|M58i{%Vo4n9dV4mkZ`4Ati1>dcsX}9 zk}8U)T6N$66l4TkItqD7ExmXQs9P<$_>85=mKhK-k@Ton>*lU5gHo)3KQ%X9@+qs% zNL3&AyA!8QW#nk_QA2D~ZF*Zpx~o0qL`5~DdfxhT8Zll($mFu}hpQL22OT=Wi+XQr zl5%>X*rME(79E6EU|fD1G63*;1tj#^@Nn&>^M{|h1Fwa#UNQ1n&kW#@b9h!&U7g8U z&@nem-8<8ew=c&TwNLqI&>Tr~=r1!6sgb#LTsg^*^apvvy@f5{*Q4+!Twf)Nvk89d zE@09^rQGLjz5e#Qbt_{ZD?1YAe#*moed#4UetzIgV`%`g{K z=(BmHih@8hqhO%Z{?!X}Uju0Ur0W=aT`gcIpC0B)nIGh;Ns`lwf?}L|xVGF&Q55sV z=O`NrD}P`^o#mp;Ol7@y0d;p(Q!gun zJBZ#T_$pFfKRv5=K3ZaIdW`oYo3aYkU_x^0wK}McdqdnohhAQp=sw$HD{Ne%txohY z6-0FNJ$!OU{dWQl4#uG14>^8g?G0mqPY>x(JXzD^bNX@6<6n`Ztu&CL~G zMMl0Obarn1itboxNIc)2D;DtS7FY%4bU9qPcy7`F86s$dLa+xNl)$!UYFkYDBFC zyuMsdTD+Pp_|KdFl>qzy5S>EfpZ^a|^S?dIqs=?XQtCfGkN$Q?2{)ZzRC)Uo?dp+p z*(KoL8zldd7OL+EFNscQZAjAaEsd3~#3^2N-N_)EqA5qy*}@yP(|nU1aUD5>uCYcI zZmum?YdscLwwgkF8m?4^`g(9=&$SOshx+Px#8)zXVE>~mqQquI8+;SHkt*9Ps&%lu zms7;I=9mjazYXuWhF1ojqEphH2JzKr%h8Dm_0X_vedIRB)jSpUVb0ojk7SjSz~cR~e4;-O?D(U1tR0F|Qr)^z_8o z4&CKOmf{m6Y*sH&FFa<+TkvULC_lf>1LM}st_3zCwEB$NWs%~nq>KR@WI zZFl)oxhAJY17jp+IQ&~>Soxtd(r2M*JU>Kk`GCdx%i*4apJvzl&RS5JW)uzD>)Bt0 z@;rywS$_dy_ghPVZM%_ZGfc6H%0P7$P}i75H-!|FK~lcfuWx${%kRJC=qY$$a~}2t zVn99;!?L{*O~RRE2XhD91-kAlcP%4VI8m3N6r)6rqu6K z>fcScJj7v91o5g(Uw9ZwvWz0qs3ymQm>QdHDA5fc2Re2jcJJQ3v#H|dg18chhu>uj3>tws+tViP9Co2k3b z`hB@@+_!;`cv6hwc-vXpM~LLTZGZ-5+^PZc!~UL?DS7sWx@r(_6kMu&Q4tO`>_Ny}f67EHIy;bqgzQhQ| z;q?gk2S%P>N2)i)eS71U7Mt>{g;U7eW-K-ngHHXu46mjA0(zuSpOv|S2Gvwuw-t=) zNqMQ^laAz4b#)ZLC}8zfX67V*IkP`?@KEZyU^U4qMG3pg5?yivfltQdvLntZHbSV5(h^eXRL1tWT{;-ez%In2=isuYn zvbucc$K_-V&YUo3!|{=FE#Kh-GLJ0ZqDRs)&4T42SK zzF6J8dH7oUeGhl=f~zKs{=JVSKsD+&_H)Jd?~zlNl_0ui?~Mov=__}g=51QtaddQ? z?JLcGTDur7;Yc}$eeq2H&Hd|-eVnhE(T2*6qCk+0S*%k>+%{I&+mhD94CVWjqUDm( zAh<@~P9gGxq~w4-`(yir$D|+_9>|j%NQ5B<7S|m>xyYzK_ zwOd~#)lb)d{+uxwUJ*DfikI)aUod;RMr zlI6dRec=w+4it8OE2$XT1)eo8b_c}zA3mg^I@);0jsaY@)KqCxoJcBQ5+!Z}O3Bim zrcU7}FE+ipFY7ygIkAmHdcOMbrXBF;pLNC0e9)Z_U5_*sS`AgTyDSjsouV-W<;Gi< z3V%#ZWuez-iq6j996d4!wdlL%7Q)6ws>|bNETq_Gh%b9jj@GnVirS8S*hY0S6q0{7 z&qV;GOnv>IjChUffY?Vw*;2^pS4k2bGCP9QuI zqU*GJR0iZ*p!^nIL-y97=UlU9A}9}a-rw6r8`vy1Ux%_9J=MMs>WU^dFO7fyj*5KY zp~0%%fEh}n1E|vT=DMto|J=^8Q^qQ+@>`KIva(`q9qlHS%q>ogbYTKb#GvQ~$ohJv z&m)Z&Au$Y%ffwXNGL87xS@nj0rFS&)d%kdgah&-sQ2ZqM)o2h#3)b)V@ugH6;YI~u zIC}Gk-^8?>K>Y+m=mJX%3=;f~oyuJw3)Odw8}Xn$m(Hu9xC)JI>}neEk9)b&@a3fi zB_8*$eaBHal1|s_e)ZaGImHVBMsLt+)qs7o^^QF(5MknW#tC~!67lGGzOp(B!??2T zYe8R?w$LfDc_g6gr!VV6?{FJ3i1&<-?~9jJa|%;5cx@3rC+52`{%oaTO>IGp=_+f} z?lHNqRo+^YZB)X|+J$1_<(1aVskX$dWT89btfwpW^WyXGi^i|ekfDOf=te~}?<71~ z9@Ws#OU@w6Nbxp(N1ck%3NNXJz8Bs;Q(dU$Pe8}#R%HMs9a{QYJy$XFGDxI3G>yvT|w`T@tffE16c27iY2fTqjVF><4{vps|vtDA3C8VzL1 zUgLEL_)8|fwi_$)lrq~8muZOrX*b`)r7uEdGF#$AsLu__%>D~QIn@UN^wHb21-Zo6 z7curdF!UIw5$%u@*~p>4tD&fNx}aW~cAlY5-BM&^W3lSsOjtP&3gRIUoq&H`&``bk z7~+zwRT^ce&}+_}fBI%oXagUH9VeMyrZwoO8=>I4W}>@E{c#!R#JLLfZ%Qs1m%V$G zwrgWL^(bkFr|EoL@T>Ylbye%erj&liIE~zPDS1@?RsVuaavhE0EInh1akRQWa&^;F z#jr?Jy|~Ns0i7R7AMKk7TSy*xz~pi|YVS1`z2e)L$#z;EyIET=D0Xo>Xn-LnSFV%p z^K6?TsRR8fCm_LG2QidI+0myAopW#hqZ$ZNZtmIQ8IMxEu;zJILmsWLdqV64e|3Z3>HMrPK}NdM2r z`HqrO*DLjG+wYs>J&>=4>QQgyaU{qtA3}4_aLKLV)nW}W-kOAH)7*9$c@aS5I-sB) zng?80E+XhGcyzgapw^-*D#km3>^~K{ZMlLvCI6VSI@}+~HI_b@EV$u{n-IP|orJ$A zMef0dC4Z1%J=%UyF8EP>z@o&Oe1z-D!@EcMRJ!8KR0{JDn61@U@4rIzwIs*Ex7P#B zx&b;ylZI}GalB>PIfn`y8T${DWW5B$06^}^aaC7+{g+|E;Q%a(UuLPqXEkxF-9f~j zcF3nX+E_Ga!;bX&9jHJB<>lqMe(kKzOXuS^BF2AhnqHT1RCxF;x8$3WmUC=zk-2Sx zpyJe>%f;etFCP_`1G4__ACv-go?8n3v3PqugWU^M9Nudon;>_gZ=8 z+p*@?F`eXF`^9^7;i~7_Y1!e-VE0kPbyi-wcBe)G?Dqz)d*Q|N@&qcQGRD)oLkDs} zvi7R#&U9shI#^Bh^|3cWseWEYE6HSPK>D!n_SaV*W)2=qg5(=zyFn5c$A(KUzw6%e z0)vZR)&d=_NEj4O`lo0OuX2Qxd((<2^KIiIBAW@_mrF8Pjf9O?%E3}hAPe%^Is$rK z@nR3?@MP24)KZ7xd_lc@yAJNe+_%_(+4i>0_LQB5 zAtlq%Z0`Y2Uz)ndj_I_U-=Pi6o`(-E>*N{>nw?Pc_KqnYsXELwZ%O^6XR9>kmSIB>!exWiia@28ov zV|0y5ai#X7DJiFyxG$?j$aEQ+PBvc@5K#K~QBd4}>bwK*h+paK;JXFsx2GW#m5z~Z z?>_KPcv}|OKQ5E(bTe9nA|4&SdI;G8`8aFPzjnM@CZW{d*XI_SOH~2ap*Sc(!s%dN zR+zbH;-Q_6;G}Tij=!XS+UYyZ^l0a`px*rz{pkm}5w5=9eU~@(=0P-a@U`gmqkQ{* zJkPEGo3jOCE+(d+y0`D)!eg};czHAL_H~45@+vnwNC;Zi;}M5MCa7Nf@G^`FleAY> zOSECJRR2cV>+I}st^vY{{j0@tYh7=)4Y%kI@H)j$!%uGmBm9(^#>yE?Uuf7*8ri z;VmJK`k^Kn?oofZ!lQ7J40pY*pbx{#^&~IsF5ON?C*Rlrs~OD~7L$;Gw^rpe8vM16 z(Xr7lGp{Dw-yl~jnqf83*uz=#k-NcYjV$K=g#9eCWvK@}gYBD*oUF@fX$m2;LGYU) zq(n-7Kqvpwr3BHdR8o}qbTT{MAiZLP&Yer5NrOyXO)HS^!NBS!uRO;rr`&g)#BfD5 z%w$Q`^m2zS)OAXb7{?Lqx-}j@7F(Hp_vh>|Ay{>AKiu)n-*GAzIj| zRI{UPI}=(Mo4e}a;o(ry1vY&;n}?QutVD!0E#Pz z#uwA?)$KEI9E2cMYj+kqMZ$4wOxWJv_RAl1?{5k;3Q-ZNMtx0FFnf2MQDHz*RZ$V| z@tjl&Rc$<k&Bhy1$7%r2z~D^b^S!Zz=K38AwfOsl|j7)OzV3CBGT^!KCW zCqW8dItrfGm@TDmC15mm9^WLx21_QaJxWSSa{KmaFPDs)K1|>DIkh)~!}XDxhi8=> z9rHbG6JNc`kiZ$@%^5y;{ldTP`f3!_)YK#vvh!T|TndR>5fE zM+b=(2(qiy0D@#U2St#_5su^edza9jv?s z5S2e;@*ZUCuJ^(5mjnvFJ7-aBi>QWX>wAp_&bH;KH7nHh~Y zn3URoXM!g#+dYY0|K&w+9^X&jpcYKvBeb&5v9Ws_LfdI zTGBJcT8;H?BMS|(wDYW0xw{^O$aNj^_q8f-PZ|&t??PS=+o8Kc_6|<>5~nx zRUO{p>Mzxj-&skflsK+OIFuS)w?94{}jYfSBflPh$`#o02Rj+WSwIk@Efv{_{yrXIia z>u#PA@xolu(!}WLTb4S=@^Ko-SjB*NF28FpXtUG%*SS)6;N{XArR1Ztao~Y#?$YA3 z`Sh7dc2Qf>Kqyv*?plmc3->>g-V2j|j3mC@)-)^s@R^jGkEU4wQ6J=G;L{1r6-6Rv z<>X8e!1K)Gc1eRUzNy;>5<_1NIOu+Pp(EwHnluc#LC07=?PmItX^620OiLB7x3DWH z-!va~YV;8i?bjY=k@jq?bv|{scl+_-w14R@SK0peHFTH9=niI2GAY(;--If37g{Q1R{SKb3~G}A4!^? zb|x^0^*h_8+EH#D!=47Im8-U%9n-1Z^GI^yg#7(??go$#O%%1vVVNJzbpNv!cJFFY z`qkN(Z^zd?t#eIps>(6fkS+tqCI5KrtO!p$8d%_=ovmKnAt34I6n>WmD@>b2xrf< z6&ulo%d(xkai*<^v z-EqUDn^sD3U7rtFV4!goRSJdsTIx*EG>dR9`L}N#VdFQ53c!97AASt3SR0{G3N7L+ zqf9w^%$!2Ggt1DhL>n@K$MmiSvvQN69H=P0yL=gvFT@Sl1UGD;wz7+dhbHva1OMn= z7D+5iwG;NxSKyRnsdCsiPe?BJMDPe39Y2R%TDG_I&-X4~Nev9t>o=|yZoCmS<^Pvr zhnu%%csL8C0$17m>SFrhxTzj6SWe!dICgup$O?OcZ5yc89iZLxDB9qP9vt7#bZ7c* z|6ZsxUHdXxOG7nvG5p-QUgaoMMinD$bUScA^W9sYeZVF&`xK^*oRq|(Pm(8DitVD) z!V<@fd@Chlz@e9OoNoq1_`TDn9HKY)qTT3rxjeR=X(B7+xI?)#GZ^cF@PM0yz9$Bo z^d*7pzT2D1Q2^*YW#!I2dsESF7}*Gm%J}l7n}b2Q62`TOheG27mCfkL$TvE*`Dl@Z z67OXojk8&3E8SgYhX=XDJpR5>_lXzMZ?@Ih{HoCEYq+6bm8y-x1V-EQIK8XY-*<|5 zY=<{SMTJu_R1^P=fw`WCS@utBW%R+IF0`f)An1yLvj+v|-OW~`Va)G8g4S3)$k@NB z*>4&9S$bjqh|ygyZ=_kbCZ&%eqq$IJ?e{)8@9RVbH$aS-yuMnwF<-fpqt&>&@iTA$ zW=&K!62N0S?o=x%wUH*Ell!JQMqpNZ!WM)O8wZ>o{ydmSEuGZAqX~&2ccPv$BRb!{ zQML0D3Q`splQcD*WEryAg&xIo4G}z7uUxTF`XJ6F_3E@w>+7pV%W{5_EjWH&Uh1cy z3)rIVQB#X=x9eZ9MHd$r2W(rFUow8y1|t5)!D` zg^mAG&yh@e0#c_st9_D272^8fm)nCug+Q^Ju{KJ0EW%Q}Y5>9x+(;4meLLl+`|RLa zZ|cDZ^}TP-IH*4Rwg}iZn>c3q0HYx+@o)sSr^YDiSc>yGc9KUjPmW4_mw*u|6q3nA zz(sp1VJ}9R=&fGsjYW7AZe`TAKj=u&%B!SKRixVUUk377b0@%GyEedwTT<;?t##vS za#RL9PD9eqeK~M9Ez5ap&VZ=l$$$!pJ6bzO&nwYk~CpghdrlHp{1SgpmJ{}#A?Pr&~b{aoLOW$)HM zdgRFA7Gq-*&>uK?%}>dThrABCV{1Dje*#XAr8{Sh(fz zW0Qg<-YvS-$khOqSe&r!%);B;RY6IH@zGONH=rS23)3_-+ zl$9yxhmZn(Ip^%&{XiexGN<*_=>6v^6KKe);lP#E?HSk)J$Iu)68pLH9iRifK=kKX zennfQo$iDOd$+1hmW~D68Se!PC$^a$COmoahj9t&yuTvlQb6OhRgun*98huvw z8YBv7LcIDddK{Dj7hq|h4k(K;uLcLcXxne9)j&bf?3JFk2$y`oCuAd)=jzD!qt;eK z2V}k0l|X=Cnk+@^Q;&eoHR7QW<%KJ>f2zn=VoXW1=ccgP) z(T9oI*-~dlu8NRr620)Hnb`NnyTSceo}omXsGNc3ACr6>deL>jhm(?u4 zgoMAH8;vrfH4Pl&!_b0tSEr4YEk)50G1T&*fjln6*=LJ*bkk@ri%EsdS*s+KjwFmC z`dgSjq)&CUNQzE34;v#7R5^10Y{IU^lvW01aQUT^11@ zUq}se4U{k!4tZ~9*9#Uc`eg=c7IjTcSR!Ia?pdgH(zrHuc)fP1B89q|`zm75LHUk{ z-~id;kdYl}l33x*y|g6FSJ24HbPd98P$nsKXVvC?c!Zq=cm>@y;hN3J=eu;;ausa9 zI2(EE)(b?3ne2mXemz8LH}n-M7(sTsE)$7&%x zT|SX^3@Y|KsF1k`oy;(fTW?Ge2HVXr?$*SDM;DK-JWSNZ-~FhlE>AXqKLcN_$f zU40%&dD!ry2iR{!${DR_#Eu?(n4T%WpPIwZt(Qz$yI@%_Fzz9rR8Yznp$AT@_S?TB zQv6qKQL8#tlZphaE&soUfHH9fH@5wMer(iiz^s@d#5>m?&q!J)t}X7SHZ`s(2SoBz z%gphX$uvTLwtwG26ZQQWT9Dy4IP;hNrgz!R3+fCXFOYtJ~Vz za;)5!M?(Z*#-en28B%tE$1>*aF!3T|p*=o+(qvi0DyawA>h#@kT%6_*v(`>ol@(za zR~~z-Uw9vo?adP3HEtcG)9%-c0w)5;whluzRI9V=*d&`Ks}B z>ac#LhT1s4NLpGts`-TxggRI6ZH0z}vI{i`*368e6-1ioNWKvxpnDf=z1y6=&zqRO zML*Z!@|PyEr1zQDMy74|RM zmVrFuXWr?u9XZ)$hmIBLs?mFMoJTQ>ZG{Joj;7UA``Z0@uXlLuh}VNvV}ClmG~u|o z!8db3gbYo*RKI)+9|1LnPt5~FmahFEkD0lXnyxroy%x%U1{QPI+<+^_`8%f}XT^;U zci-D}3`I_g5TK;i)r|ZtMz9^u=GpE&e0DP(AA335hMUm|4G1InDQrhw$?xaJ*ALOZ z1*h6{WjG%+DmI1&DqqLWZa?L$U}i@oG(j=d*BqJ2ab;|;YO<8zAdT(G*Y^*r#l4=e za7m>-Wu6rj*hu43WdYG>NG|TU(3UZ`f7P`@XXm9nO#_QYRc*hj#ja?{2KBC|p_^xq zT|UwIEHS*0Cn&f;YiHNZmBv(Gozi(mQHB8|zMrdR`-}Y5am9YT#B)JTC(jU3SR2;k z*OK3}kA>We8-(}>f4~04OpIPpt=pLH5~YLaq!5{578_(~n4-lfTGU^e7rQ$uv~3EV ztbMi$!(H6mdiW2?b+^y>>hhImv{B^08?J~10Ld}@Q3r*duU z?ZwC4Y{#x(?R7=;CY55uSCC06f4et(hXEN!NSZBFP(w|e6_M3@oy($S5mIjLvI^eq zeY7K`Ro_fpa{m|$K3KA>Z+igSt`E3;-8PO5cd`gxdousj;D5klRpM{(_&0Ve?_^fE zs;+;cMoDXTw*6!?ImqPT_F0G^1;Ay1O4vO;$bvbzw6=AIdqpHIn3IX?V@ zY41eaqJ?($>TrS-1BYt2YHDKWQ)QP+Y1py?CpP!FuevNOEC-pHMdn<7vaU~zuc4zH zl`(l%&?)f^ARfmqLC}8T3?w7R>^w8~@oZP|juFg;x}baa7kphwocDiN`D=d@72Gkn82+ur=d9&qt@qZph-!qR7*7?BzL zQl@g#K$Af@OL&mU5r@d6sN7#qykdSn)2(hUt=%4}&<72w5OsSfYP6@gaAw z&2Bi6tJq$~r=*si({yK)9#>K&l?_uN+h}hD3KhcZ>c8aj6r&?-IN_S?zr90kCY4XJhas$eeI~zm23t3b^$3q z1>C&g+oJkYV&s#g>8Po^D|zE5j%e51(r|Y&mC*8+T_O3~V=6(QYhV zeb?q+k12L?$9DO)sLizebbaxM-!-*xg}I+f@TKivgQN2SH&*<$Sm3_I#di;M$OThx zKk)Li6$w)+WGszJvKS9FneEF2f3D+;GBRx!D_r9@463%P?DSl^S4PMa-!yM6>m~Q* zW@h(HZ67%}YoMcpG)viT^(hjU?}QRZ;auc571@9L=*C2+V@Gji_kOt6nZ;pTzMa)s zcG0-TYKAE=F}|*>_Ji=VcwoN!g!!~KrCZ}@Dj`kDD(Tot?Ks6#KsV~x;tzBzz0Jr!J;<*`!tI7fTB0(tJWpsPs8BqvRJZ5#Z6g1eKW0Smob-gd`&*qglK(K#`%lZUHl+tP}=KhDf3 z$<;F6j?gQSo1fCtRh<{e+QgSBNBOl}wWo0-_KlqcpEvm6n(!;xm4an+bvnM>-g0`yaGvlzKRkNv z$J!n}H@&@*{v1BKnC40w7f&;`%ZWW{YR+8GLc7z*4<;H>;9jF1WNR@QqpZXS+#5As$-43Ve#7*ZSgP0| zmgMJs>C8$Tlp&)5lg;yC=GSA2+MhPo8*?2y%1s!MPwjdB?iQ7Q^Lf*8`&xBz0i6Ey zNVDV9_xBoK5~6r&3#FN9r(9mA>ZezQ(5IJplX$R;*qOm$Zuaa(j#$kthE5!ZSr`;XzSdMRk=CB@vwI>Az$Lzm*C-QP8Pa-W1o zk8{@Z8%${Scx5HqVZ~%f8CbsVu!!!7yPqv>v_3x#IS?3os;{f9(Ubs+P!Vs^O;cqB-sY9&egojz0kV+tc57D2&_|G!-fYbKL)^2?$*`j&b+64PNWi54GZV!Ci`XbjS8cZ-$< zMyMIz`Kr9kask%s4Uz(4|225iT|nS^p!Bbkl+*I5ZzOBw@Lz}H#OGViOL_5K?^rk4 znR;|dwb{wdW;V~BjoR(rC0yr*bN60YcF$BK{Q`E3 zmt80@#~01GG=9u0C;V*FNZyei_^LQ6F-aV^$u-@PsczfS$(}@N$0EN)Jsz6vrYP_4 z;Ia8GsVGMBRSE9kd*?}@u3h{2(D`e1%y7y2y-*G^WLJ?1v-wXlw7ITu74UhYmgDYS z02jbw((&Fl+mVJY9^!&yo8t$6ZI_+mYTdB35hmx&n%iuubQdY9sdhuyTf(>#+Tf96 zQ(gX+$K4juynR!8!=`)tWcBv?pS+p+J(<|}Q}$k)L9+t1nRnQbh?(X0#T-2&M&Xh} z4sWyqHGLQ}N)(?T_y#{`kjE$ZluC@0yjMv6p3qCchbKq$!B+EQkUmYWB*xvAH@F-k zOv!@Z9-N&aRP&FEPlcR^JxcAmtUnnR?afLAHl%1CO!I4nv8klfXI`sz1!7RL_`-!O zP`wQM+1}6h0x)BsIKH;x0FcS`L(`XLwkzjF-fvUEZiUdA?eF@gIt-eGVs){siq!EB zyp2RZ`;uPuJiU9w;T#XzVCLJ=R~P0);hg_Q-GCHGVBI?8#}=TwuvZa}cnXRP>wMG+ z?r5N9tDfjteHC@)GY>QLq3 zek|gmRHVYE1s40iZTxE$zIy)8Cr}d)4#sc0{?B1T$3xn0nF!5^-s69ej>ZPR$sb31 z^iC(nl>Ww^u!uV5z3pZm_qX2*8BaqEy(o9y6v#4RvJ5Uz`xjIT$iBp;;ZT%*itB#N zE592MdqZ=k;*e8Zrw&z$_n*1SYp{4=@kNE72Aqhv7MgC%Rkk0F9yt5E)Bq>z3BbFs zQtks-y`#}?SEou^m0~|@uOj=4gS?G`3o<$O-#*Fv<&0>2-1BJc zMbX4l?z|s0qLj_!f@I3PFa}6tCSu!{lLr1J`tjdvD|4)aCpqTHvE<5Q1xGuN*Yjks zd0^jbsN6_UyJh6I?NYTJuG+~eZG5Pb2O4eow!*D_xUEbo$2->F!sK&gzo^%ooVjuD zr_)2;5uWJGXA-A9?%zh;xO3>2IN_1x))gLYyZ}V#yo2#mrkL-$PQ={{-SrpBuN_9N z*VOF};nm?QZjwVOcGz-d#1h+zG7OhS)dQsOs42Zn545N`1m}a-`uLBrHyN)c{MMou z-k-U2*0f!%ef`ouF6Tr9K!)GPzb_A~*VO&}`N^%!i>i+E`RkYdDbg_!mROmn*)0Ta zY^$f4NBKu{$o^=}vOBl*b0t!%GfgzH-09r!i|lO!QaHy(!~6JhB-9Kfzb1Ih^nJWk zZTYW#YVGYV&aOI__bbMS{QKnZPv4Cc$~n%P$s>67lG=giSPyESqxoYVUOt`+m(PAo uG5I|UA0a2XclN||?z-^bU!3pw*v|I5+)YV_-!yt2tb*FD{2TZF{=Wd+rs@Fz From 75434462ec7aa2208ab7a299c1efeba751831ebb Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 22 Jun 2024 22:15:58 +0000 Subject: [PATCH 49/77] Update UI snapshots for `chromium` (2) --- ...--funnel-top-to-bottom-breakdown--dark.png | Bin 109071 -> 110890 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown--dark.png b/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown--dark.png index b2a3ef86228181043ea265265d561d8d6351b986..d99c83e6eb844228a67257d858f9f1b7a2a67575 100644 GIT binary patch delta 75748 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 delta 73239 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 From 08e77ec5f6821ed960b2a88adc0702084d04ef63 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Sat, 22 Jun 2024 15:42:43 -0700 Subject: [PATCH 50/77] source id generalization --- posthog/hogql/test/test_resolver.py | 2 +- posthog/hogql_queries/actors_query_runner.py | 2 +- .../insights/stickiness_query_runner.py | 7 +- .../test_insight_actors_query_runner.ambr | 403 ------------------ 4 files changed, 5 insertions(+), 409 deletions(-) diff --git a/posthog/hogql/test/test_resolver.py b/posthog/hogql/test/test_resolver.py index c0555a8bebe5e..e6854e6730834 100644 --- a/posthog/hogql/test/test_resolver.py +++ b/posthog/hogql/test/test_resolver.py @@ -416,7 +416,7 @@ def test_visit_hogqlx_tag_source(self): "(SELECT id, properties.email AS email FROM " "(SELECT DISTINCT person_id FROM events) " "AS source INNER JOIN " - "persons ON equals(persons.id, source.person_id) ORDER BY id ASC) " + "filterable_persons ON equals(filterable_persons.id, source.person_id) ORDER BY id ASC) " f"LIMIT {MAX_SELECT_RETURNED_ROWS}" ) diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index c2104de70aab4..f40aeae63a89e 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -268,7 +268,7 @@ def to_query(self) -> ast.SelectQuery: NonSerializableTags.FILTERABLE_PERSONS.value: ast.CompareOperation( left=ast.Field(chain=["id"]), right=ast.SelectQuery( - select=[ast.Field(chain=[source_alias, "actor_id"])], + select=[ast.Field(chain=[source_alias, *self.source_id_column(source_query)])], select_from=ast.JoinExpr(table=source_query, alias=source_alias), ), op=ast.CompareOperationOp.In, diff --git a/posthog/hogql_queries/insights/stickiness_query_runner.py b/posthog/hogql_queries/insights/stickiness_query_runner.py index b38ef7e26a6c8..c885397f68d97 100644 --- a/posthog/hogql_queries/insights/stickiness_query_runner.py +++ b/posthog/hogql_queries/insights/stickiness_query_runner.py @@ -182,10 +182,9 @@ def to_actors_query(self, interval_num: Optional[int] = None) -> ast.SelectQuery for series in self.series: events_query = self._events_query(series) aggregation_alias = "actor_id" - # if series.series.math == "hogql" and series.series.math_hogql is not None: - # aggregation_alias = "actor_id" - # elif series.series.math == "unique_group" and series.series.math_group_type_index is not None: - if series.series.math == "unique_group" and series.series.math_group_type_index is not None: + if series.series.math == "hogql" and series.series.math_hogql is not None: + aggregation_alias = "actor_id" + elif series.series.math == "unique_group" and series.series.math_group_type_index is not None: aggregation_alias = "group_key" events_query.select = [ast.Alias(alias=aggregation_alias, expr=ast.Field(chain=["aggregation_target"]))] events_query.group_by = None diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index 2d7574764ccb2..c5fe45ec08e24 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -1,202 +1,4 @@ # serializer version: 1 -# name: TestInsightActorsQueryRunner.test_insight_persons_funnels_query - ''' - SELECT name AS name - FROM - (SELECT filterable_persons.properties___name AS name - FROM - (SELECT aggregation_target AS actor_id - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, - e__pdi.person_id AS aggregation_target, - if(equals(e.event, '$pageview'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, '$pageview'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'US/Pacific')), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-19 23:59:59.999999', 6, 'US/Pacific'))), in(e.event, tuple('$pageview'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [2]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT aggregation_target AS actor_id - FROM - (SELECT aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner - FROM - (SELECT aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e__pdi.person_id AS aggregation_target, if(equals(e.event, '$pageview'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(equals(e.event, '$pageview'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'US/Pacific')), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-19 23:59:59.999999', 6, 'US/Pacific'))), in(e.event, tuple('$pageview'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [2]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestInsightActorsQueryRunner.test_insight_persons_lifecycle_query - ''' - SELECT n AS n - FROM - (SELECT filterable_persons.properties___name AS n - FROM - (SELECT DISTINCT actor_id AS actor_id - FROM - (SELECT min(events__pdi__person.created_at) AS created_at, - arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, - arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, - arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, - arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) - and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) - and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, - arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) - and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, - arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, - arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, - arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, - arrayJoin(temp_concat) AS period_status_pairs, - period_status_pairs.1 AS start_of_period, - period_status_pairs.2 AS status, - events__pdi.person_id AS actor_id - FROM events - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) - LEFT JOIN - (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, - person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) - WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) - GROUP BY actor_id) - WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) - and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT DISTINCT actor_id AS actor_id - FROM - (SELECT min(events__pdi__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) - and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) - and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) - and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, arrayJoin(temp_concat) AS period_status_pairs, period_status_pairs.1 AS start_of_period, period_status_pairs.2 AS status, events__pdi.person_id AS actor_id - FROM events - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) - LEFT JOIN - (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) - WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) - GROUP BY actor_id) - WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) - and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- # name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_groups_query ''' SELECT name AS name @@ -230,64 +32,6 @@ max_bytes_before_external_group_by=0 ''' # --- -# name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_query - ''' - SELECT name AS name - FROM - (SELECT filterable_persons.properties___name AS name - FROM - (SELECT aggregation_target AS actor_id - FROM - (SELECT e__pdi.person_id AS aggregation_target, - count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals - FROM events AS e SAMPLE 1 - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) - GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT aggregation_target AS actor_id - FROM - (SELECT e__pdi.person_id AS aggregation_target, count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals - FROM events AS e SAMPLE 1 - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) - GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- # name: TestInsightActorsQueryRunner.test_insight_persons_trends_groups_query ''' SELECT name AS name @@ -322,150 +66,3 @@ max_bytes_before_external_group_by=0 ''' # --- -# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV1 - ''' - SELECT name AS name - FROM - (SELECT filterable_persons.properties___name AS name - FROM - (SELECT actor_id AS actor_id, - count() AS event_count - FROM - (SELECT e__pdi.person_id AS actor_id, - toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, - e.uuid AS uuid - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, - person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), in(id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT actor_id AS actor_id, count() AS event_count - FROM - (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV2 - ''' - SELECT name AS name - FROM - (SELECT filterable_persons.properties___name AS name - FROM - (SELECT actor_id AS actor_id, - count() AS event_count - FROM - (SELECT e__pdi.person_id AS actor_id, - toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, - e.uuid AS uuid - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT actor_id AS actor_id, count() AS event_count - FROM - (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- From e93ae5d2e2c5c95ae44ff8ce79402a560bc10582 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 23 Jun 2024 00:48:01 +0000 Subject: [PATCH 51/77] Update query snapshots --- .../test_insight_actors_query_runner.ambr | 403 ++++++++++++++++++ 1 file changed, 403 insertions(+) diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index c5fe45ec08e24..2d7574764ccb2 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -1,4 +1,202 @@ # serializer version: 1 +# name: TestInsightActorsQueryRunner.test_insight_persons_funnels_query + ''' + SELECT name AS name + FROM + (SELECT filterable_persons.properties___name AS name + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e__pdi.person_id AS aggregation_target, + if(equals(e.event, '$pageview'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, '$pageview'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'US/Pacific')), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-19 23:59:59.999999', 6, 'US/Pacific'))), in(e.event, tuple('$pageview'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [2]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e__pdi.person_id AS aggregation_target, if(equals(e.event, '$pageview'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(equals(e.event, '$pageview'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'US/Pacific')), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-19 23:59:59.999999', 6, 'US/Pacific'))), in(e.event, tuple('$pageview'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [2]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_lifecycle_query + ''' + SELECT n AS n + FROM + (SELECT filterable_persons.properties___name AS n + FROM + (SELECT DISTINCT actor_id AS actor_id + FROM + (SELECT min(events__pdi__person.created_at) AS created_at, + arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, + arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, + arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, + arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) + and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) + and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, + arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) + and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, + arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, + arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, + arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, + arrayJoin(temp_concat) AS period_status_pairs, + period_status_pairs.1 AS start_of_period, + period_status_pairs.2 AS status, + events__pdi.person_id AS actor_id + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, + person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) + GROUP BY actor_id) + WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) + and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT DISTINCT actor_id AS actor_id + FROM + (SELECT min(events__pdi__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) + and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) + and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) + and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, arrayJoin(temp_concat) AS period_status_pairs, period_status_pairs.1 AS start_of_period, period_status_pairs.2 AS status, events__pdi.person_id AS actor_id + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) + GROUP BY actor_id) + WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) + and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- # name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_groups_query ''' SELECT name AS name @@ -32,6 +230,64 @@ max_bytes_before_external_group_by=0 ''' # --- +# name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_query + ''' + SELECT name AS name + FROM + (SELECT filterable_persons.properties___name AS name + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT e__pdi.person_id AS aggregation_target, + count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT e__pdi.person_id AS aggregation_target, count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- # name: TestInsightActorsQueryRunner.test_insight_persons_trends_groups_query ''' SELECT name AS name @@ -66,3 +322,150 @@ max_bytes_before_external_group_by=0 ''' # --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV1 + ''' + SELECT name AS name + FROM + (SELECT filterable_persons.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, + person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV2 + ''' + SELECT name AS name + FROM + (SELECT filterable_persons.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + ORDER BY filterable_persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- From b9d9ada605b217ca6061c64c9766794801409f9c Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Mon, 24 Jun 2024 14:40:53 -0700 Subject: [PATCH 52/77] mmm --- posthog/clickhouse/query_tagging.py | 10 +-- posthog/hogql/constants.py | 1 + posthog/hogql/database/schema/persons.py | 18 +++-- posthog/hogql/printer.py | 1 + posthog/hogql/resolver.py | 17 +++++ posthog/hogql_queries/actors_query_runner.py | 38 +++++------ .../test_insight_actors_query_runner.ambr | 67 ------------------- 7 files changed, 50 insertions(+), 102 deletions(-) diff --git a/posthog/clickhouse/query_tagging.py b/posthog/clickhouse/query_tagging.py index e5c8f450371d0..5a9b14bbe60dd 100644 --- a/posthog/clickhouse/query_tagging.py +++ b/posthog/clickhouse/query_tagging.py @@ -1,22 +1,14 @@ # This module is responsible for adding tags/metadata to outgoing clickhouse queries in a thread-safe manner import threading -from enum import StrEnum from typing import Any, Optional thread_local_storage = threading.local() -class NonSerializableTags(StrEnum): - FILTERABLE_PERSONS = "filterable_persons" - - -NON_SERIALIZABLE_TAGS = {x.value for x in NonSerializableTags} - - def get_query_tags(): try: - return {k: v for k, v in thread_local_storage.query_tags.items() if k not in NON_SERIALIZABLE_TAGS} + return thread_local_storage.query_tags.items() except AttributeError: return {} diff --git a/posthog/hogql/constants.py b/posthog/hogql/constants.py index d7221b62dc054..24e67c0b05f5f 100644 --- a/posthog/hogql/constants.py +++ b/posthog/hogql/constants.py @@ -94,6 +94,7 @@ class HogQLQuerySettings(BaseModel): optimize_aggregation_in_order: Optional[bool] = None use_query_cache: Optional[bool] = None query_cache_ttl: Optional[int] = None + allow_experimental_analyzer: Optional[bool] = None # Settings applied on top of all HogQL queries. diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 6c57eb5e427a8..c6908f853fd38 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -1,8 +1,7 @@ from typing import cast, Optional import posthoganalytics -from posthog.clickhouse.query_tagging import get_query_tag_value, NonSerializableTags -from posthog.hogql.ast import SelectQuery, And +from posthog.hogql.ast import SelectQuery, And, CompareOperation, CompareOperationOp, Field from posthog.hogql.base import Expr from posthog.hogql.constants import HogQLQuerySettings from posthog.hogql.context import HogQLContext @@ -194,12 +193,19 @@ def to_printed_hogql(self): # This is useful for certain users and queries where we might not want to pull everything class FilterablePersonsTable(LazyTable): fields: dict[str, FieldOrTable] = PERSONS_FIELDS + filter: Optional[Expr] = None + + @staticmethod + def is_promotable_expr(expr): + return ( + isinstance(expr, CompareOperation) and expr.op == CompareOperationOp.In and expr.left == Field(chain=["id"]) + ) def lazy_select(self, table_to_add: LazyTableToAdd, context, node): - filter = get_query_tag_value(NonSerializableTags.FILTERABLE_PERSONS.value) - if filter is not None: - filter = clone_expr(filter, clear_types=True, clear_locations=True) - return select_from_persons_table(table_to_add, context, node, filter) + if self.filter is not None: + return select_from_persons_table(table_to_add, context, node, clone_expr(self.filter, True, True)) + + return select_from_persons_table(table_to_add, context, node, None) def to_printed_clickhouse(self, context): return "person" diff --git a/posthog/hogql/printer.py b/posthog/hogql/printer.py index efde4d8fb0afe..f439e37d3f6c8 100644 --- a/posthog/hogql/printer.py +++ b/posthog/hogql/printer.py @@ -112,6 +112,7 @@ def prepare_ast_for_printing( # resolve_property_types has to come after lazy tables otherwise expressions on lazy tables don't get handled properly with context.timings.measure("resolve_property_types"): node = resolve_property_types(node, context) + # We support global query settings, and local subquery settings. # If the global query is a select query with settings, merge the two. if isinstance(node, ast.SelectQuery) and node.settings is not None and settings is not None: diff --git a/posthog/hogql/resolver.py b/posthog/hogql/resolver.py index cee6802a4498a..8a8aad2e755b3 100644 --- a/posthog/hogql/resolver.py +++ b/posthog/hogql/resolver.py @@ -4,6 +4,7 @@ from posthog.hogql import ast from posthog.hogql.ast import FieldTraverserType, ConstantType +from posthog.hogql.database.schema.persons import FilterablePersonsTable from posthog.hogql.functions import find_hogql_posthog_function from posthog.hogql.context import HogQLContext from posthog.hogql.database.models import ( @@ -320,6 +321,22 @@ def visit_join_expr(self, node: ast.JoinExpr): if isinstance(database_table, LazyTable): node_table_type = ast.LazyTableType(table=database_table) + if isinstance(database_table, FilterablePersonsTable) and isinstance(node.constraint.expr, ast.And): + # Push `IN` conditions down into the subselect + exprs = cast(ast.And, node.constraint.expr).exprs + + not_promotable = [] + promotable = [] + for expr in exprs: + if FilterablePersonsTable.is_promotable_expr(expr): + promotable.append(expr) + else: + not_promotable.append(expr) + node.constraint.expr.exprs = not_promotable + if len(promotable) == 1: + database_table.filter = promotable[0] + elif len(promotable) > 1: + database_table.filter = ast.And(exprs=promotable) else: node_table_type = ast.TableType(table=database_table) diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index f40aeae63a89e..270f6bc7cf269 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -2,7 +2,6 @@ from typing import Optional from collections.abc import Sequence, Iterator -from posthog.clickhouse.query_tagging import tag_queries, NonSerializableTags from posthog.hogql import ast from posthog.hogql.ast import SelectQuery from posthog.hogql.constants import HogQLQuerySettings @@ -252,9 +251,6 @@ def to_query(self) -> ast.SelectQuery: origin = self.strategy.origin if isinstance(self.strategy, PersonStrategy): - # if isinstance(self.strategy, PersonStrategy) and any( - # isinstance(x, C) for x in [getattr(self.query.source, "source", None)] for C in (TrendsQuery,) - # ): # SelectUnionQuery (used by Stickiness) doesn't have settings for select_query in ( [source_query] if isinstance(source_query, SelectQuery) else source_query.select_queries @@ -263,18 +259,6 @@ def to_query(self) -> ast.SelectQuery: select_query.settings = HogQLQuerySettings() select_query.settings.use_query_cache = True select_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME - tag_queries( - **{ - NonSerializableTags.FILTERABLE_PERSONS.value: ast.CompareOperation( - left=ast.Field(chain=["id"]), - right=ast.SelectQuery( - select=[ast.Field(chain=[source_alias, *self.source_id_column(source_query)])], - select_from=ast.JoinExpr(table=source_query, alias=source_alias), - ), - op=ast.CompareOperationOp.In, - ) - } - ) origin = "filterable_persons" join_expr = ast.JoinExpr( @@ -284,10 +268,24 @@ def to_query(self) -> ast.SelectQuery: table=ast.Field(chain=[origin]), join_type="INNER JOIN", constraint=ast.JoinConstraint( - expr=ast.CompareOperation( - op=ast.CompareOperationOp.Eq, - left=ast.Field(chain=[origin, self.strategy.origin_id]), - right=ast.Field(chain=[source_alias, *source_id_chain]), + expr=ast.And( + exprs=[ + ast.CompareOperation( + op=ast.CompareOperationOp.Eq, + left=ast.Field(chain=[origin, self.strategy.origin_id]), + right=ast.Field(chain=[source_alias, *source_id_chain]), + ), + ast.CompareOperation( + left=ast.Field(chain=["id"]), + right=ast.SelectQuery( + select=[ + ast.Field(chain=[source_alias, *self.source_id_column(source_query)]) + ], + select_from=ast.JoinExpr(table=source_query, alias=source_alias), + ), + op=ast.CompareOperationOp.In, + ), + ] ), constraint_type="ON", ), diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index 2d7574764ccb2..86b9499ea9f26 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -197,39 +197,6 @@ max_bytes_before_external_group_by=0 ''' # --- -# name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_groups_query - ''' - SELECT name AS name - FROM - (SELECT groups.properties___name AS name - FROM - (SELECT aggregation_target AS group_key - FROM - (SELECT e.`$group_0` AS aggregation_target, - count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals - FROM events AS e SAMPLE 1 - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview'), notEquals(e.`$group_0`, '')) - GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 7), 0)) AS source - INNER JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'US/Pacific')) AS properties___name, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE equals(groups.team_id, 2) - GROUP BY groups.group_type_index, - groups.group_key) AS groups ON equals(groups.key, source.group_key) - ORDER BY groups.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- # name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_query ''' SELECT name AS name @@ -288,40 +255,6 @@ max_bytes_before_external_group_by=0 ''' # --- -# name: TestInsightActorsQueryRunner.test_insight_persons_trends_groups_query - ''' - SELECT name AS name - FROM - (SELECT groups.properties___name AS name - FROM - (SELECT actor_id AS actor_id, - count() AS event_count - FROM - (SELECT e.`$group_0` AS actor_id, - toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, - e.uuid AS uuid - FROM events AS e - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')), notEquals(e.`$group_0`, ''))) - GROUP BY actor_id) AS source - INNER JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'US/Pacific')) AS properties___name, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE equals(groups.team_id, 2) - GROUP BY groups.group_type_index, - groups.group_key) AS groups ON equals(groups.key, source.actor_id) - ORDER BY groups.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- # name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV1 ''' SELECT name AS name From 25475ab60978e50e0e2250e9bef793386919a2c1 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Mon, 24 Jun 2024 14:45:49 -0700 Subject: [PATCH 53/77] groups failing --- posthog/clickhouse/query_tagging.py | 2 +- posthog/hogql/database/schema/persons.py | 10 ++++++++++ posthog/hogql/resolver.py | 9 +-------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/posthog/clickhouse/query_tagging.py b/posthog/clickhouse/query_tagging.py index 5a9b14bbe60dd..5ef923cfcee01 100644 --- a/posthog/clickhouse/query_tagging.py +++ b/posthog/clickhouse/query_tagging.py @@ -8,7 +8,7 @@ def get_query_tags(): try: - return thread_local_storage.query_tags.items() + return thread_local_storage.query_tags except AttributeError: return {} diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index c6908f853fd38..4fb2a00b14ca6 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -201,6 +201,16 @@ def is_promotable_expr(expr): isinstance(expr, CompareOperation) and expr.op == CompareOperationOp.In and expr.left == Field(chain=["id"]) ) + @staticmethod + def partition_exprs(exprs): + not_promotable = [] + promotable = [] + [ + promotable.append(expr) if FilterablePersonsTable.is_promotable_expr(expr) else not_promotable.append(expr) + for expr in exprs + ] + return promotable, not_promotable + def lazy_select(self, table_to_add: LazyTableToAdd, context, node): if self.filter is not None: return select_from_persons_table(table_to_add, context, node, clone_expr(self.filter, True, True)) diff --git a/posthog/hogql/resolver.py b/posthog/hogql/resolver.py index 8a8aad2e755b3..d905364821c57 100644 --- a/posthog/hogql/resolver.py +++ b/posthog/hogql/resolver.py @@ -324,14 +324,7 @@ def visit_join_expr(self, node: ast.JoinExpr): if isinstance(database_table, FilterablePersonsTable) and isinstance(node.constraint.expr, ast.And): # Push `IN` conditions down into the subselect exprs = cast(ast.And, node.constraint.expr).exprs - - not_promotable = [] - promotable = [] - for expr in exprs: - if FilterablePersonsTable.is_promotable_expr(expr): - promotable.append(expr) - else: - not_promotable.append(expr) + promotable, not_promotable = FilterablePersonsTable.partition_exprs(exprs) node.constraint.expr.exprs = not_promotable if len(promotable) == 1: database_table.filter = promotable[0] From 0101a347fb2f514e89a266c648b94dfc4f761b66 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Mon, 24 Jun 2024 14:55:14 -0700 Subject: [PATCH 54/77] refactor --- posthog/hogql_queries/actors_query_runner.py | 46 +++++++------ .../test_insight_actors_query_runner.ambr | 67 +++++++++++++++++++ 2 files changed, 93 insertions(+), 20 deletions(-) diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index 270f6bc7cf269..58aad84ce8330 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -250,6 +250,13 @@ def to_query(self) -> ast.SelectQuery: source_alias = "source" origin = self.strategy.origin + + join_on = ast.CompareOperation( + op=ast.CompareOperationOp.Eq, + left=ast.Field(chain=[origin, self.strategy.origin_id]), + right=ast.Field(chain=[source_alias, *source_id_chain]), + ) + if isinstance(self.strategy, PersonStrategy): # SelectUnionQuery (used by Stickiness) doesn't have settings for select_query in ( @@ -259,7 +266,24 @@ def to_query(self) -> ast.SelectQuery: select_query.settings = HogQLQuerySettings() select_query.settings.use_query_cache = True select_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME - origin = "filterable_persons" + + join_on = ast.And( + exprs=[ + ast.CompareOperation( + op=ast.CompareOperationOp.Eq, + left=ast.Field(chain=["filterable_persons", self.strategy.origin_id]), + right=ast.Field(chain=[source_alias, *source_id_chain]), + ), + ast.CompareOperation( + left=ast.Field(chain=["id"]), + right=ast.SelectQuery( + select=[ast.Field(chain=[source_alias, *self.source_id_column(source_query)])], + select_from=ast.JoinExpr(table=source_query, alias=source_alias), + ), + op=ast.CompareOperationOp.In, + ), + ] + ) join_expr = ast.JoinExpr( table=source_query, @@ -268,25 +292,7 @@ def to_query(self) -> ast.SelectQuery: table=ast.Field(chain=[origin]), join_type="INNER JOIN", constraint=ast.JoinConstraint( - expr=ast.And( - exprs=[ - ast.CompareOperation( - op=ast.CompareOperationOp.Eq, - left=ast.Field(chain=[origin, self.strategy.origin_id]), - right=ast.Field(chain=[source_alias, *source_id_chain]), - ), - ast.CompareOperation( - left=ast.Field(chain=["id"]), - right=ast.SelectQuery( - select=[ - ast.Field(chain=[source_alias, *self.source_id_column(source_query)]) - ], - select_from=ast.JoinExpr(table=source_query, alias=source_alias), - ), - op=ast.CompareOperationOp.In, - ), - ] - ), + expr=join_on, constraint_type="ON", ), ), diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index 86b9499ea9f26..2d7574764ccb2 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -197,6 +197,39 @@ max_bytes_before_external_group_by=0 ''' # --- +# name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_groups_query + ''' + SELECT name AS name + FROM + (SELECT groups.properties___name AS name + FROM + (SELECT aggregation_target AS group_key + FROM + (SELECT e.`$group_0` AS aggregation_target, + count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview'), notEquals(e.`$group_0`, '')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 7), 0)) AS source + INNER JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'US/Pacific')) AS properties___name, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups ON equals(groups.key, source.group_key) + ORDER BY groups.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- # name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_query ''' SELECT name AS name @@ -255,6 +288,40 @@ max_bytes_before_external_group_by=0 ''' # --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_groups_query + ''' + SELECT name AS name + FROM + (SELECT groups.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT e.`$group_0` AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')), notEquals(e.`$group_0`, ''))) + GROUP BY actor_id) AS source + INNER JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'US/Pacific')) AS properties___name, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups ON equals(groups.key, source.actor_id) + ORDER BY groups.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- # name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV1 ''' SELECT name AS name From 54fa578cc651bde98413458ef5d70531d3eb04cf Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Mon, 24 Jun 2024 15:15:02 -0700 Subject: [PATCH 55/77] fixed typo --- posthog/hogql_queries/actors_query_runner.py | 4 ++-- requirements.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index 58aad84ce8330..7e91372a8b4be 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -266,12 +266,12 @@ def to_query(self) -> ast.SelectQuery: select_query.settings = HogQLQuerySettings() select_query.settings.use_query_cache = True select_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME - + origin = "filterable_persons" join_on = ast.And( exprs=[ ast.CompareOperation( op=ast.CompareOperationOp.Eq, - left=ast.Field(chain=["filterable_persons", self.strategy.origin_id]), + left=ast.Field(chain=[origin, self.strategy.origin_id]), right=ast.Field(chain=[source_alias, *source_id_chain]), ), ast.CompareOperation( diff --git a/requirements.txt b/requirements.txt index fff1929966e12..abc6527b6be9b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -682,7 +682,7 @@ wrapt==1.15.0 # via aiobotocore wsproto==1.1.0 # via trio-websocket -xmlsec==1.3.13 +xmlsec==1.3.14 # via # -r requirements.in # python3-saml From 81351ca0f2ee802c93a51a29d7e5a7904be14c91 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Mon, 24 Jun 2024 15:23:58 -0700 Subject: [PATCH 56/77] xmlsec --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index abc6527b6be9b..fff1929966e12 100644 --- a/requirements.txt +++ b/requirements.txt @@ -682,7 +682,7 @@ wrapt==1.15.0 # via aiobotocore wsproto==1.1.0 # via trio-websocket -xmlsec==1.3.14 +xmlsec==1.3.13 # via # -r requirements.in # python3-saml From 5ec2768791cfb2b908f407af762ca1a2222d24df Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Mon, 24 Jun 2024 16:01:58 -0700 Subject: [PATCH 57/77] test actors --- posthog/hogql/database/schema/persons.py | 16 +++++++++++----- posthog/hogql_queries/actors_query_runner.py | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 4fb2a00b14ca6..9c34e7d116574 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -198,17 +198,23 @@ class FilterablePersonsTable(LazyTable): @staticmethod def is_promotable_expr(expr): return ( - isinstance(expr, CompareOperation) and expr.op == CompareOperationOp.In and expr.left == Field(chain=["id"]) + isinstance(expr, CompareOperation) + and expr.op == CompareOperationOp.In + and expr.left == Field(chain=["filterable_persons", "id"]) ) @staticmethod def partition_exprs(exprs): not_promotable = [] promotable = [] - [ - promotable.append(expr) if FilterablePersonsTable.is_promotable_expr(expr) else not_promotable.append(expr) - for expr in exprs - ] + for expr in exprs: + if FilterablePersonsTable.is_promotable_expr(expr): + # Erase "filterable_persons" from the chain before bringing inside + expr.left = Field(chain=["id"]) + promotable.append(expr) + else: + not_promotable.append(expr) + return promotable, not_promotable def lazy_select(self, table_to_add: LazyTableToAdd, context, node): diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index 7e91372a8b4be..7f2b0f8f71b6e 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -275,7 +275,7 @@ def to_query(self) -> ast.SelectQuery: right=ast.Field(chain=[source_alias, *source_id_chain]), ), ast.CompareOperation( - left=ast.Field(chain=["id"]), + left=ast.Field(chain=[origin, "id"]), right=ast.SelectQuery( select=[ast.Field(chain=[source_alias, *self.source_id_column(source_query)])], select_from=ast.JoinExpr(table=source_query, alias=source_alias), From 2fe62586d11ae950e90e6463fff72970389e38d9 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Mon, 24 Jun 2024 16:33:36 -0700 Subject: [PATCH 58/77] mypy --- posthog/hogql/resolver.py | 6 +++++- posthog/hogql_queries/actors_query_runner.py | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/posthog/hogql/resolver.py b/posthog/hogql/resolver.py index d905364821c57..0c1bcf35d4dcc 100644 --- a/posthog/hogql/resolver.py +++ b/posthog/hogql/resolver.py @@ -321,7 +321,11 @@ def visit_join_expr(self, node: ast.JoinExpr): if isinstance(database_table, LazyTable): node_table_type = ast.LazyTableType(table=database_table) - if isinstance(database_table, FilterablePersonsTable) and isinstance(node.constraint.expr, ast.And): + if ( + isinstance(database_table, FilterablePersonsTable) + and node.constraint is not None + and isinstance(node.constraint.expr, ast.And) + ): # Push `IN` conditions down into the subselect exprs = cast(ast.And, node.constraint.expr).exprs promotable, not_promotable = FilterablePersonsTable.partition_exprs(exprs) diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index 7f2b0f8f71b6e..d6505f0502404 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -251,7 +251,7 @@ def to_query(self) -> ast.SelectQuery: origin = self.strategy.origin - join_on = ast.CompareOperation( + join_on: ast.Expr = ast.CompareOperation( op=ast.CompareOperationOp.Eq, left=ast.Field(chain=[origin, self.strategy.origin_id]), right=ast.Field(chain=[source_alias, *source_id_chain]), From e5cc2911f96ac772f9d9ea5748722e1e617908cf Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Tue, 25 Jun 2024 09:28:40 -0700 Subject: [PATCH 59/77] join on --- posthog/hogql/constants.py | 1 - posthog/hogql/database/database.py | 2 - posthog/hogql/database/schema/persons.py | 16 +- posthog/hogql/resolver.py | 6 +- posthog/hogql_queries/actors_query_runner.py | 7 +- .../test_insight_actors_query_runner.ambr | 284 +----------------- requirements.txt | 4 +- 7 files changed, 21 insertions(+), 299 deletions(-) diff --git a/posthog/hogql/constants.py b/posthog/hogql/constants.py index fafa676b7e712..400b1385499e3 100644 --- a/posthog/hogql/constants.py +++ b/posthog/hogql/constants.py @@ -94,7 +94,6 @@ class HogQLQuerySettings(BaseModel): optimize_aggregation_in_order: Optional[bool] = None use_query_cache: Optional[bool] = None query_cache_ttl: Optional[int] = None - allow_experimental_analyzer: Optional[bool] = None # Settings applied on top of all HogQL queries. diff --git a/posthog/hogql/database/database.py b/posthog/hogql/database/database.py index 26f73468898bb..833425625047e 100644 --- a/posthog/hogql/database/database.py +++ b/posthog/hogql/database/database.py @@ -49,7 +49,6 @@ PersonsTable, RawPersonsTable, join_with_persons_table, - FilterablePersonsTable, ) from posthog.hogql.database.schema.session_replay_events import ( RawSessionReplayEventsTable, @@ -92,7 +91,6 @@ class Database(BaseModel): events: EventsTable = EventsTable() groups: GroupsTable = GroupsTable() persons: PersonsTable = PersonsTable() - filterable_persons: FilterablePersonsTable = FilterablePersonsTable() person_distinct_ids: PersonDistinctIdsTable = PersonDistinctIdsTable() person_distinct_id_overrides: PersonDistinctIdOverridesTable = PersonDistinctIdOverridesTable() diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 9c34e7d116574..7b03cf5193a84 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -189,9 +189,11 @@ def to_printed_hogql(self): return "persons" -# Filterable Persons is a lazy table that allows you to insert a where statement inside of the person subselect -# This is useful for certain users and queries where we might not want to pull everything -class FilterablePersonsTable(LazyTable): +# Persons is a lazy table that allows you to insert a where statement inside of the person subselect +# It pulls any "persons.id in ()" statement inside of the argmax subselect +# This is useful when executing a query for a large team. +# It could be useful to set "use_query_cache" if the query is repeated. See `actors_query_runner.py` for an example +class PersonsTable(LazyTable): fields: dict[str, FieldOrTable] = PERSONS_FIELDS filter: Optional[Expr] = None @@ -200,7 +202,7 @@ def is_promotable_expr(expr): return ( isinstance(expr, CompareOperation) and expr.op == CompareOperationOp.In - and expr.left == Field(chain=["filterable_persons", "id"]) + and expr.left == Field(chain=["persons", "id"]) ) @staticmethod @@ -208,8 +210,8 @@ def partition_exprs(exprs): not_promotable = [] promotable = [] for expr in exprs: - if FilterablePersonsTable.is_promotable_expr(expr): - # Erase "filterable_persons" from the chain before bringing inside + if PersonsTable.is_promotable_expr(expr): + # Erase "persons" from the chain before bringing inside expr.left = Field(chain=["id"]) promotable.append(expr) else: @@ -227,4 +229,4 @@ def to_printed_clickhouse(self, context): return "person" def to_printed_hogql(self): - return "filterable_persons" + return "persons" diff --git a/posthog/hogql/resolver.py b/posthog/hogql/resolver.py index 0c1bcf35d4dcc..96822262d27dd 100644 --- a/posthog/hogql/resolver.py +++ b/posthog/hogql/resolver.py @@ -4,7 +4,7 @@ from posthog.hogql import ast from posthog.hogql.ast import FieldTraverserType, ConstantType -from posthog.hogql.database.schema.persons import FilterablePersonsTable +from posthog.hogql.database.schema.persons import PersonsTable from posthog.hogql.functions import find_hogql_posthog_function from posthog.hogql.context import HogQLContext from posthog.hogql.database.models import ( @@ -322,13 +322,13 @@ def visit_join_expr(self, node: ast.JoinExpr): if isinstance(database_table, LazyTable): node_table_type = ast.LazyTableType(table=database_table) if ( - isinstance(database_table, FilterablePersonsTable) + isinstance(database_table, PersonsTable) and node.constraint is not None and isinstance(node.constraint.expr, ast.And) ): # Push `IN` conditions down into the subselect exprs = cast(ast.And, node.constraint.expr).exprs - promotable, not_promotable = FilterablePersonsTable.partition_exprs(exprs) + promotable, not_promotable = PersonsTable.partition_exprs(exprs) node.constraint.expr.exprs = not_promotable if len(promotable) == 1: database_table.filter = promotable[0] diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index d6505f0502404..badf8914cf9eb 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -266,14 +266,9 @@ def to_query(self) -> ast.SelectQuery: select_query.settings = HogQLQuerySettings() select_query.settings.use_query_cache = True select_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME - origin = "filterable_persons" join_on = ast.And( exprs=[ - ast.CompareOperation( - op=ast.CompareOperationOp.Eq, - left=ast.Field(chain=[origin, self.strategy.origin_id]), - right=ast.Field(chain=[source_alias, *source_id_chain]), - ), + join_on, ast.CompareOperation( left=ast.Field(chain=[origin, "id"]), right=ast.SelectQuery( diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index 2d7574764ccb2..15d6fa9619df6 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -3,7 +3,7 @@ ''' SELECT name AS name FROM - (SELECT filterable_persons.properties___name AS name + (SELECT persons.properties___name AS name FROM (SELECT aggregation_target AS actor_id FROM @@ -94,8 +94,8 @@ WHERE ifNull(in(steps, [2]), 0) ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.properties___name ASC) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, @@ -110,7 +110,7 @@ ''' SELECT n AS n FROM - (SELECT filterable_persons.properties___name AS n + (SELECT persons.properties___name AS n FROM (SELECT DISTINCT actor_id AS actor_id FROM @@ -185,280 +185,8 @@ WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_groups_query - ''' - SELECT name AS name - FROM - (SELECT groups.properties___name AS name - FROM - (SELECT aggregation_target AS group_key - FROM - (SELECT e.`$group_0` AS aggregation_target, - count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals - FROM events AS e SAMPLE 1 - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview'), notEquals(e.`$group_0`, '')) - GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 7), 0)) AS source - INNER JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'US/Pacific')) AS properties___name, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE equals(groups.team_id, 2) - GROUP BY groups.group_type_index, - groups.group_key) AS groups ON equals(groups.key, source.group_key) - ORDER BY groups.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_query - ''' - SELECT name AS name - FROM - (SELECT filterable_persons.properties___name AS name - FROM - (SELECT aggregation_target AS actor_id - FROM - (SELECT e__pdi.person_id AS aggregation_target, - count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals - FROM events AS e SAMPLE 1 - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) - GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT aggregation_target AS actor_id - FROM - (SELECT e__pdi.person_id AS aggregation_target, count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals - FROM events AS e SAMPLE 1 - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) - GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestInsightActorsQueryRunner.test_insight_persons_trends_groups_query - ''' - SELECT name AS name - FROM - (SELECT groups.properties___name AS name - FROM - (SELECT actor_id AS actor_id, - count() AS event_count - FROM - (SELECT e.`$group_0` AS actor_id, - toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, - e.uuid AS uuid - FROM events AS e - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')), notEquals(e.`$group_0`, ''))) - GROUP BY actor_id) AS source - INNER JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'US/Pacific')) AS properties___name, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE equals(groups.team_id, 2) - GROUP BY groups.group_type_index, - groups.group_key) AS groups ON equals(groups.key, source.actor_id) - ORDER BY groups.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV1 - ''' - SELECT name AS name - FROM - (SELECT filterable_persons.properties___name AS name - FROM - (SELECT actor_id AS actor_id, - count() AS event_count - FROM - (SELECT e__pdi.person_id AS actor_id, - toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, - e.uuid AS uuid - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, - person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), in(id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT actor_id AS actor_id, count() AS event_count - FROM - (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV2 - ''' - SELECT name AS name - FROM - (SELECT filterable_persons.properties___name AS name - FROM - (SELECT actor_id AS actor_id, - count() AS event_count - FROM - (SELECT e__pdi.person_id AS actor_id, - toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, - e.uuid AS uuid - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT actor_id AS actor_id, count() AS event_count - FROM - (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.properties___name ASC) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, diff --git a/requirements.txt b/requirements.txt index fff1929966e12..7d6e53d709168 100644 --- a/requirements.txt +++ b/requirements.txt @@ -320,7 +320,7 @@ kombu==5.3.2 # via # -r requirements.in # celery -lxml==4.9.4 +lxml==5.2.2 # via # -r requirements.in # python3-saml @@ -682,7 +682,7 @@ wrapt==1.15.0 # via aiobotocore wsproto==1.1.0 # via trio-websocket -xmlsec==1.3.13 +xmlsec==1.3.14 # via # -r requirements.in # python3-saml From a8d1f32f307e350c37e538d0ea11f76f8278d950 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Tue, 25 Jun 2024 09:32:48 -0700 Subject: [PATCH 60/77] hm --- posthog/hogql/database/schema/persons.py | 17 +- posthog/hogql_queries/actors_query_runner.py | 1 - .../test_insight_actors_query_runner.ambr | 272 ++++++++++++++++++ 3 files changed, 274 insertions(+), 16 deletions(-) diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 7b03cf5193a84..94710f268616e 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -176,19 +176,6 @@ def to_printed_hogql(self): return "raw_persons" -class PersonsTable(LazyTable): - fields: dict[str, FieldOrTable] = PERSONS_FIELDS - - def lazy_select(self, table_to_add: LazyTableToAdd, context, node): - return select_from_persons_table(table_to_add, context, node) - - def to_printed_clickhouse(self, context): - return "person" - - def to_printed_hogql(self): - return "persons" - - # Persons is a lazy table that allows you to insert a where statement inside of the person subselect # It pulls any "persons.id in ()" statement inside of the argmax subselect # This is useful when executing a query for a large team. @@ -198,7 +185,7 @@ class PersonsTable(LazyTable): filter: Optional[Expr] = None @staticmethod - def is_promotable_expr(expr): + def _is_promotable_expr(expr): return ( isinstance(expr, CompareOperation) and expr.op == CompareOperationOp.In @@ -210,7 +197,7 @@ def partition_exprs(exprs): not_promotable = [] promotable = [] for expr in exprs: - if PersonsTable.is_promotable_expr(expr): + if PersonsTable._is_promotable_expr(expr): # Erase "persons" from the chain before bringing inside expr.left = Field(chain=["id"]) promotable.append(expr) diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index badf8914cf9eb..927ce76854ced 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -245,7 +245,6 @@ def to_query(self) -> ast.SelectQuery: assert self.source_query_runner is not None # For type checking source_query = self.source_query_runner.to_actors_query() - # Source Query has "Select actor_id as actor_id, count() as event_count) "source" source_id_chain = self.source_id_column(source_query) source_alias = "source" diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index 15d6fa9619df6..3df24dc55d6a7 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -197,3 +197,275 @@ max_bytes_before_external_group_by=0 ''' # --- +# name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_groups_query + ''' + SELECT name AS name + FROM + (SELECT groups.properties___name AS name + FROM + (SELECT aggregation_target AS group_key + FROM + (SELECT e.`$group_0` AS aggregation_target, + count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview'), notEquals(e.`$group_0`, '')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 7), 0)) AS source + INNER JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'US/Pacific')) AS properties___name, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups ON equals(groups.key, source.group_key) + ORDER BY groups.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_query + ''' + SELECT name AS name + FROM + (SELECT persons.properties___name AS name + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT e__pdi.person_id AS aggregation_target, + count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT e__pdi.person_id AS aggregation_target, count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_groups_query + ''' + SELECT name AS name + FROM + (SELECT groups.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT e.`$group_0` AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')), notEquals(e.`$group_0`, ''))) + GROUP BY actor_id) AS source + INNER JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'US/Pacific')) AS properties___name, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups ON equals(groups.key, source.actor_id) + ORDER BY groups.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV1 + ''' + SELECT name AS name + FROM + (SELECT persons.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, + person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV2 + ''' + SELECT name AS name + FROM + (SELECT persons.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- From 140d6d0cba0c8ba9e6efb4d2b3164c9fd9bc52b2 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Tue, 25 Jun 2024 10:08:08 -0700 Subject: [PATCH 61/77] refactor --- posthog/hogql/database/schema/persons.py | 21 ++++++-- posthog/hogql/resolver.py | 15 +----- posthog/hogql/test/test_printer.py | 68 ++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 18 deletions(-) diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 94710f268616e..16e2a2d511fbf 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -1,7 +1,7 @@ from typing import cast, Optional import posthoganalytics -from posthog.hogql.ast import SelectQuery, And, CompareOperation, CompareOperationOp, Field +from posthog.hogql.ast import SelectQuery, And, CompareOperation, CompareOperationOp, Field, JoinExpr from posthog.hogql.base import Expr from posthog.hogql.constants import HogQLQuerySettings from posthog.hogql.context import HogQLContext @@ -185,19 +185,20 @@ class PersonsTable(LazyTable): filter: Optional[Expr] = None @staticmethod - def _is_promotable_expr(expr): + def _is_promotable_expr(expr, alias: str): return ( isinstance(expr, CompareOperation) and expr.op == CompareOperationOp.In - and expr.left == Field(chain=["persons", "id"]) + and isinstance(expr.left, Field) + and expr.left.chain == [alias, "id"] ) @staticmethod - def partition_exprs(exprs): + def partition_exprs(exprs, alias: str = "persons"): not_promotable = [] promotable = [] for expr in exprs: - if PersonsTable._is_promotable_expr(expr): + if PersonsTable._is_promotable_expr(expr, alias): # Erase "persons" from the chain before bringing inside expr.left = Field(chain=["id"]) promotable.append(expr) @@ -206,6 +207,16 @@ def partition_exprs(exprs): return promotable, not_promotable + def set_filter(self, join: JoinExpr): + if join.constraint is not None and isinstance(join.constraint.expr, And): + exprs = cast(And, join.constraint.expr).exprs + promotable, not_promotable = PersonsTable.partition_exprs(exprs, join.alias) + join.constraint.expr.exprs = not_promotable + if len(promotable) == 1: + self.filter = promotable[0] + elif len(promotable) > 1: + self.filter = And(exprs=promotable) + def lazy_select(self, table_to_add: LazyTableToAdd, context, node): if self.filter is not None: return select_from_persons_table(table_to_add, context, node, clone_expr(self.filter, True, True)) diff --git a/posthog/hogql/resolver.py b/posthog/hogql/resolver.py index 96822262d27dd..8fa43528c2b25 100644 --- a/posthog/hogql/resolver.py +++ b/posthog/hogql/resolver.py @@ -321,19 +321,8 @@ def visit_join_expr(self, node: ast.JoinExpr): if isinstance(database_table, LazyTable): node_table_type = ast.LazyTableType(table=database_table) - if ( - isinstance(database_table, PersonsTable) - and node.constraint is not None - and isinstance(node.constraint.expr, ast.And) - ): - # Push `IN` conditions down into the subselect - exprs = cast(ast.And, node.constraint.expr).exprs - promotable, not_promotable = PersonsTable.partition_exprs(exprs) - node.constraint.expr.exprs = not_promotable - if len(promotable) == 1: - database_table.filter = promotable[0] - elif len(promotable) > 1: - database_table.filter = ast.And(exprs=promotable) + if isinstance(database_table, PersonsTable): + database_table.set_filter(node) else: node_table_type = ast.TableType(table=database_table) diff --git a/posthog/hogql/test/test_printer.py b/posthog/hogql/test/test_printer.py index c0dc8db167561..af18b7e67851c 100644 --- a/posthog/hogql/test/test_printer.py +++ b/posthog/hogql/test/test_printer.py @@ -1609,3 +1609,71 @@ def test_case_insensitive_functions(self): self._expr("SuM(1)", context), "sum(1)", ) + + def test_inline_persons(self): + query = parse_select( + "select persons.id as person_id from events join persons on persons.id = events.person_id and persons.id in (1,2,3)" + ) + printed = print_ast( + query, + HogQLContext(team_id=self.team.pk, enable_select_queries=True), + dialect="clickhouse", + settings=HogQLGlobalSettings(max_execution_time=10), + ) + assert ( + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), ifNull(in(id, tuple(1, 2, 3)), 0))" + in printed + ) + + def test_dont_inline_persons(self): + query = parse_select( + "select persons.id as person_id from events join persons on persons.id = events.person_id and persons.id = 1" + ) + printed = print_ast( + query, + HogQLContext(team_id=self.team.pk, enable_select_queries=True), + dialect="clickhouse", + settings=HogQLGlobalSettings(max_execution_time=10), + ) + assert f"AS id FROM person WHERE equals(person.team_id, {self.team.pk})" in printed + + def test_inline_persons_alias(self): + query = parse_select( + """ + select p1.id as p1_id from events + join persons as p1 on p1.id = events.person_id and p1.id in (1,2,3) + """ + ) + printed = print_ast( + query, + HogQLContext(team_id=self.team.pk, enable_select_queries=True), + dialect="clickhouse", + settings=HogQLGlobalSettings(max_execution_time=10), + ) + assert ( + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), ifNull(in(id, tuple(1, 2, 3)), 0))" + in printed + ) + + def test_two_joins(self): + query = parse_select( + """ + select p1.id as p1_id, p2.id as p2_id from events + join persons as p1 on p1.id = events.person_id and p1.id in (1,2,3) + join persons as p2 on p2.id = events.person_id and p2.id in (4,5,6) + """ + ) + printed = print_ast( + query, + HogQLContext(team_id=self.team.pk, enable_select_queries=True), + dialect="clickhouse", + settings=HogQLGlobalSettings(max_execution_time=10), + ) + assert ( + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), ifNull(in(id, tuple(1, 2, 3)), 0))" + in printed + ) + assert ( + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), ifNull(in(id, tuple(4, 5, 6)), 0))" + in printed + ) From 29ff40b6490cf14bec6fdf086368e273313e94fe Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Tue, 25 Jun 2024 10:14:53 -0700 Subject: [PATCH 62/77] working --- posthog/hogql/database/schema/persons.py | 11 ++++++++--- posthog/hogql/resolver.py | 6 ++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 16e2a2d511fbf..d0f4659fc2109 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -1,4 +1,5 @@ from typing import cast, Optional +from typing_extensions import Self import posthoganalytics from posthog.hogql.ast import SelectQuery, And, CompareOperation, CompareOperationOp, Field, JoinExpr @@ -207,15 +208,19 @@ def partition_exprs(exprs, alias: str = "persons"): return promotable, not_promotable - def set_filter(self, join: JoinExpr): + # If the join has a clause we can bring inside the subselect, create a new table that represents that + def create_new_table_with_filter(self, join: JoinExpr) -> Self: if join.constraint is not None and isinstance(join.constraint.expr, And): exprs = cast(And, join.constraint.expr).exprs promotable, not_promotable = PersonsTable.partition_exprs(exprs, join.alias) join.constraint.expr.exprs = not_promotable + p = PersonsTable() if len(promotable) == 1: - self.filter = promotable[0] + p.filter = promotable[0] elif len(promotable) > 1: - self.filter = And(exprs=promotable) + p.filter = And(exprs=promotable) + return p + return self def lazy_select(self, table_to_add: LazyTableToAdd, context, node): if self.filter is not None: diff --git a/posthog/hogql/resolver.py b/posthog/hogql/resolver.py index 8fa43528c2b25..55d48fe07a07c 100644 --- a/posthog/hogql/resolver.py +++ b/posthog/hogql/resolver.py @@ -320,9 +320,11 @@ def visit_join_expr(self, node: ast.JoinExpr): return node if isinstance(database_table, LazyTable): - node_table_type = ast.LazyTableType(table=database_table) if isinstance(database_table, PersonsTable): - database_table.set_filter(node) + # Check for inlineable exprs in the join on the persons table + database_table = database_table.create_new_table_with_filter(node) + node_table_type = ast.LazyTableType(table=database_table) + else: node_table_type = ast.TableType(table=database_table) From f9eb6330c04f2a29d4e3a71ba6076a527fc55714 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Tue, 25 Jun 2024 10:31:58 -0700 Subject: [PATCH 63/77] tests and cleanup --- posthog/hogql/database/schema/persons.py | 6 +- .../test_insight_actors_query_runner.ambr | 437 ------------------ 2 files changed, 3 insertions(+), 440 deletions(-) diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index d0f4659fc2109..cd5bac8b05856 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -186,16 +186,16 @@ class PersonsTable(LazyTable): filter: Optional[Expr] = None @staticmethod - def _is_promotable_expr(expr, alias: str): + def _is_promotable_expr(expr, alias: Optional[str] = None): return ( isinstance(expr, CompareOperation) and expr.op == CompareOperationOp.In and isinstance(expr.left, Field) - and expr.left.chain == [alias, "id"] + and expr.left.chain in ([alias or "persons", "id"], ["id"]) ) @staticmethod - def partition_exprs(exprs, alias: str = "persons"): + def partition_exprs(exprs, alias: Optional[str] = None): not_promotable = [] promotable = [] for expr in exprs: diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index 3df24dc55d6a7..67f82bea460a6 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -1,202 +1,4 @@ # serializer version: 1 -# name: TestInsightActorsQueryRunner.test_insight_persons_funnels_query - ''' - SELECT name AS name - FROM - (SELECT persons.properties___name AS name - FROM - (SELECT aggregation_target AS actor_id - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, - median(step_1_conversion_time) AS step_1_median_conversion_time_inner - FROM - (SELECT aggregation_target AS aggregation_target, - steps AS steps, - max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, - step_1_conversion_time AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - latest_1 AS latest_1, - if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, - if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, - timestamp AS timestamp, - step_0 AS step_0, - latest_0 AS latest_0, - step_1 AS step_1, - min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, - e__pdi.person_id AS aggregation_target, - if(equals(e.event, '$pageview'), 1, 0) AS step_0, - if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(equals(e.event, '$pageview'), 1, 0) AS step_1, - if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'US/Pacific')), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-19 23:59:59.999999', 6, 'US/Pacific'))), in(e.event, tuple('$pageview'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, - steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [2]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT aggregation_target AS actor_id - FROM - (SELECT aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner - FROM - (SELECT aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time - FROM - (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target - ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS latest_1 - FROM - (SELECT toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e__pdi.person_id AS aggregation_target, if(equals(e.event, '$pageview'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(equals(e.event, '$pageview'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'US/Pacific')), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-19 23:59:59.999999', 6, 'US/Pacific'))), in(e.event, tuple('$pageview'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) - WHERE ifNull(equals(step_0, 1), 0))) - GROUP BY aggregation_target, steps - HAVING ifNull(equals(steps, max_steps), isNull(steps) - and isNull(max_steps))) - WHERE ifNull(in(steps, [2]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestInsightActorsQueryRunner.test_insight_persons_lifecycle_query - ''' - SELECT n AS n - FROM - (SELECT persons.properties___name AS n - FROM - (SELECT DISTINCT actor_id AS actor_id - FROM - (SELECT min(events__pdi__person.created_at) AS created_at, - arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, - arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, - arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, - arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) - and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) - and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, - arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) - and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, - arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, - arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, - arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, - arrayJoin(temp_concat) AS period_status_pairs, - period_status_pairs.1 AS start_of_period, - period_status_pairs.2 AS status, - events__pdi.person_id AS actor_id - FROM events - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) - LEFT JOIN - (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, - person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) - WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) - GROUP BY actor_id) - WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) - and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT DISTINCT actor_id AS actor_id - FROM - (SELECT min(events__pdi__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) - and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) - and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) - and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, arrayJoin(temp_concat) AS period_status_pairs, period_status_pairs.1 AS start_of_period, period_status_pairs.2 AS status, events__pdi.person_id AS actor_id - FROM events - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) - LEFT JOIN - (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) - WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) - GROUP BY actor_id) - WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) - and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- # name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_groups_query ''' SELECT name AS name @@ -230,242 +32,3 @@ max_bytes_before_external_group_by=0 ''' # --- -# name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_query - ''' - SELECT name AS name - FROM - (SELECT persons.properties___name AS name - FROM - (SELECT aggregation_target AS actor_id - FROM - (SELECT e__pdi.person_id AS aggregation_target, - count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals - FROM events AS e SAMPLE 1 - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) - GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT aggregation_target AS actor_id - FROM - (SELECT e__pdi.person_id AS aggregation_target, count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals - FROM events AS e SAMPLE 1 - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) - GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestInsightActorsQueryRunner.test_insight_persons_trends_groups_query - ''' - SELECT name AS name - FROM - (SELECT groups.properties___name AS name - FROM - (SELECT actor_id AS actor_id, - count() AS event_count - FROM - (SELECT e.`$group_0` AS actor_id, - toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, - e.uuid AS uuid - FROM events AS e - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')), notEquals(e.`$group_0`, ''))) - GROUP BY actor_id) AS source - INNER JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'US/Pacific')) AS properties___name, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE equals(groups.team_id, 2) - GROUP BY groups.group_type_index, - groups.group_key) AS groups ON equals(groups.key, source.actor_id) - ORDER BY groups.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV1 - ''' - SELECT name AS name - FROM - (SELECT persons.properties___name AS name - FROM - (SELECT actor_id AS actor_id, - count() AS event_count - FROM - (SELECT e__pdi.person_id AS actor_id, - toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, - e.uuid AS uuid - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, - person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), in(id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT actor_id AS actor_id, count() AS event_count - FROM - (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV2 - ''' - SELECT name AS name - FROM - (SELECT persons.properties___name AS name - FROM - (SELECT actor_id AS actor_id, - count() AS event_count - FROM - (SELECT e__pdi.person_id AS actor_id, - toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, - e.uuid AS uuid - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source - INNER JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT actor_id AS actor_id, count() AS event_count - FROM - (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) - WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288, - max_bytes_before_external_group_by=0 - ''' -# --- From 38116a4816ff3503e2358f5655e935e3be91a8c4 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Tue, 25 Jun 2024 10:32:42 -0700 Subject: [PATCH 64/77] don't allow no table name --- posthog/hogql/database/schema/persons.py | 2 +- .../test_insight_actors_query_runner.ambr | 437 ++++++++++++++++++ 2 files changed, 438 insertions(+), 1 deletion(-) diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index cd5bac8b05856..e15cc15faccfc 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -191,7 +191,7 @@ def _is_promotable_expr(expr, alias: Optional[str] = None): isinstance(expr, CompareOperation) and expr.op == CompareOperationOp.In and isinstance(expr.left, Field) - and expr.left.chain in ([alias or "persons", "id"], ["id"]) + and expr.left.chain == [alias or "persons", "id"] ) @staticmethod diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index 67f82bea460a6..3df24dc55d6a7 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -1,4 +1,202 @@ # serializer version: 1 +# name: TestInsightActorsQueryRunner.test_insight_persons_funnels_query + ''' + SELECT name AS name + FROM + (SELECT persons.properties___name AS name + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, + median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT aggregation_target AS aggregation_target, + steps AS steps, + max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, + step_1_conversion_time AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + latest_1 AS latest_1, + if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, + if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, + timestamp AS timestamp, + step_0 AS step_0, + latest_0 AS latest_0, + step_1 AS step_1, + min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e__pdi.person_id AS aggregation_target, + if(equals(e.event, '$pageview'), 1, 0) AS step_0, + if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, + if(equals(e.event, '$pageview'), 1, 0) AS step_1, + if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'US/Pacific')), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-19 23:59:59.999999', 6, 'US/Pacific'))), in(e.event, tuple('$pageview'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, + steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [2]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, avg(step_1_conversion_time) AS step_1_average_conversion_time_inner, median(step_1_conversion_time) AS step_1_median_conversion_time_inner + FROM + (SELECT aggregation_target AS aggregation_target, steps AS steps, max(steps) OVER (PARTITION BY aggregation_target) AS max_steps, step_1_conversion_time AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, latest_1 AS latest_1, if(and(ifNull(less(latest_0, latest_1), 0), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), 2, 1) AS steps, if(and(isNotNull(latest_1), ifNull(lessOrEquals(latest_1, plus(toTimeZone(latest_0, 'UTC'), toIntervalDay(14))), 0)), dateDiff('second', latest_0, latest_1), NULL) AS step_1_conversion_time + FROM + (SELECT aggregation_target AS aggregation_target, timestamp AS timestamp, step_0 AS step_0, latest_0 AS latest_0, step_1 AS step_1, min(latest_1) OVER (PARTITION BY aggregation_target + ORDER BY timestamp DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS latest_1 + FROM + (SELECT toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e__pdi.person_id AS aggregation_target, if(equals(e.event, '$pageview'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, if(equals(e.event, '$pageview'), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1 + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'US/Pacific')), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-19 23:59:59.999999', 6, 'US/Pacific'))), in(e.event, tuple('$pageview'))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) + WHERE ifNull(equals(step_0, 1), 0))) + GROUP BY aggregation_target, steps + HAVING ifNull(equals(steps, max_steps), isNull(steps) + and isNull(max_steps))) + WHERE ifNull(in(steps, [2]), 0) + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_lifecycle_query + ''' + SELECT n AS n + FROM + (SELECT persons.properties___name AS n + FROM + (SELECT DISTINCT actor_id AS actor_id + FROM + (SELECT min(events__pdi__person.created_at) AS created_at, + arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, + arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, + arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, + arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) + and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) + and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, + arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) + and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, + arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, + arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, + arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, + arrayJoin(temp_concat) AS period_status_pairs, + period_status_pairs.1 AS start_of_period, + period_status_pairs.2 AS status, + events__pdi.person_id AS actor_id + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, + person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) + GROUP BY actor_id) + WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) + and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT DISTINCT actor_id AS actor_id + FROM + (SELECT min(events__pdi__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) + and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) + and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) + and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, arrayJoin(temp_concat) AS period_status_pairs, period_status_pairs.1 AS start_of_period, period_status_pairs.2 AS status, events__pdi.person_id AS actor_id + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) + GROUP BY actor_id) + WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) + and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- # name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_groups_query ''' SELECT name AS name @@ -32,3 +230,242 @@ max_bytes_before_external_group_by=0 ''' # --- +# name: TestInsightActorsQueryRunner.test_insight_persons_stickiness_query + ''' + SELECT name AS name + FROM + (SELECT persons.properties___name AS name + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT e__pdi.person_id AS aggregation_target, + count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT e__pdi.person_id AS aggregation_target, count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_groups_query + ''' + SELECT name AS name + FROM + (SELECT groups.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT e.`$group_0` AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')), notEquals(e.`$group_0`, ''))) + GROUP BY actor_id) AS source + INNER JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'name'), ''), 'null'), '^"|"$', ''), toTimeZone(groups._timestamp, 'US/Pacific')) AS properties___name, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE equals(groups.team_id, 2) + GROUP BY groups.group_type_index, + groups.group_key) AS groups ON equals(groups.key, source.actor_id) + ORDER BY groups.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV1 + ''' + SELECT name AS name + FROM + (SELECT persons.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, + person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV2 + ''' + SELECT name AS name + FROM + (SELECT persons.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count + FROM + (SELECT e__pdi.person_id AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid + FROM events AS e + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) + WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) + GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288, + max_bytes_before_external_group_by=0 + ''' +# --- From e3e7f27dd35462ab7e3b6ce63ba7acad6312e145 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Tue, 25 Jun 2024 10:33:35 -0700 Subject: [PATCH 65/77] don't make a new table if no promotions --- posthog/hogql/database/schema/persons.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index e15cc15faccfc..931b2e3c1a7d2 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -214,6 +214,8 @@ def create_new_table_with_filter(self, join: JoinExpr) -> Self: exprs = cast(And, join.constraint.expr).exprs promotable, not_promotable = PersonsTable.partition_exprs(exprs, join.alias) join.constraint.expr.exprs = not_promotable + if len(promotable) == 0: + return self p = PersonsTable() if len(promotable) == 1: p.filter = promotable[0] From 1bf03d77b06bbb9485011145c5d97eae806c8623 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Tue, 25 Jun 2024 10:58:11 -0700 Subject: [PATCH 66/77] cleanup --- posthog/hogql/constants.py | 2 -- posthog/hogql/database/schema/persons.py | 11 +++++------ posthog/hogql_queries/actors_query_runner.py | 14 +++----------- 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/posthog/hogql/constants.py b/posthog/hogql/constants.py index 400b1385499e3..769d4a250e65e 100644 --- a/posthog/hogql/constants.py +++ b/posthog/hogql/constants.py @@ -92,8 +92,6 @@ def get_breakdown_limit_for_context(limit_context: LimitContext) -> int: class HogQLQuerySettings(BaseModel): model_config = ConfigDict(extra="forbid") optimize_aggregation_in_order: Optional[bool] = None - use_query_cache: Optional[bool] = None - query_cache_ttl: Optional[int] = None # Settings applied on top of all HogQL queries. diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 931b2e3c1a7d2..74ba4ab0509df 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -45,6 +45,7 @@ def select_from_persons_table( join_or_table: LazyJoinToAdd | LazyTableToAdd, context: HogQLContext, node: SelectQuery, + *, filter: Optional[Expr] = None, ): version = context.modifiers.personsArgMaxVersion @@ -180,7 +181,6 @@ def to_printed_hogql(self): # Persons is a lazy table that allows you to insert a where statement inside of the person subselect # It pulls any "persons.id in ()" statement inside of the argmax subselect # This is useful when executing a query for a large team. -# It could be useful to set "use_query_cache" if the query is repeated. See `actors_query_runner.py` for an example class PersonsTable(LazyTable): fields: dict[str, FieldOrTable] = PERSONS_FIELDS filter: Optional[Expr] = None @@ -195,7 +195,7 @@ def _is_promotable_expr(expr, alias: Optional[str] = None): ) @staticmethod - def partition_exprs(exprs, alias: Optional[str] = None): + def _partition_exprs(exprs, alias: Optional[str] = None): not_promotable = [] promotable = [] for expr in exprs: @@ -212,7 +212,7 @@ def partition_exprs(exprs, alias: Optional[str] = None): def create_new_table_with_filter(self, join: JoinExpr) -> Self: if join.constraint is not None and isinstance(join.constraint.expr, And): exprs = cast(And, join.constraint.expr).exprs - promotable, not_promotable = PersonsTable.partition_exprs(exprs, join.alias) + promotable, not_promotable = PersonsTable._partition_exprs(exprs, join.alias) join.constraint.expr.exprs = not_promotable if len(promotable) == 0: return self @@ -226,9 +226,8 @@ def create_new_table_with_filter(self, join: JoinExpr) -> Self: def lazy_select(self, table_to_add: LazyTableToAdd, context, node): if self.filter is not None: - return select_from_persons_table(table_to_add, context, node, clone_expr(self.filter, True, True)) - - return select_from_persons_table(table_to_add, context, node, None) + return select_from_persons_table(table_to_add, context, node, filter=clone_expr(self.filter, True, True)) + return select_from_persons_table(table_to_add, context, node) def to_printed_clickhouse(self, context): return "person" diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index 927ce76854ced..78950b7da644e 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -3,8 +3,6 @@ from collections.abc import Sequence, Iterator from posthog.hogql import ast -from posthog.hogql.ast import SelectQuery -from posthog.hogql.constants import HogQLQuerySettings from posthog.hogql.parser import parse_expr, parse_order_expr from posthog.hogql.property import has_aggregation from posthog.hogql_queries.actor_strategies import ActorStrategy, PersonStrategy, GroupStrategy @@ -17,7 +15,6 @@ CachedActorsQueryResponse, DashboardFilter, ) -from posthog.settings import HOGQL_INCREASED_MAX_EXECUTION_TIME class ActorsQueryRunner(QueryRunner): @@ -256,15 +253,10 @@ def to_query(self) -> ast.SelectQuery: right=ast.Field(chain=[source_alias, *source_id_chain]), ) + # For some of our users, the persons table is large. If we're looking for person, + # help make the join smarter by limiting the people it has to look up + # The persons table inlines `in` conditions on the join (see `persons.py`) if isinstance(self.strategy, PersonStrategy): - # SelectUnionQuery (used by Stickiness) doesn't have settings - for select_query in ( - [source_query] if isinstance(source_query, SelectQuery) else source_query.select_queries - ): - if select_query.settings is None: - select_query.settings = HogQLQuerySettings() - select_query.settings.use_query_cache = True - select_query.settings.query_cache_ttl = HOGQL_INCREASED_MAX_EXECUTION_TIME join_on = ast.And( exprs=[ join_on, From a4a4a914ae313d6ebcc74411a64c2bf63c8a9868 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Tue, 25 Jun 2024 11:01:04 -0700 Subject: [PATCH 67/77] remove tests that check for query caceh --- .../test_insight_actors_query_runner.ambr | 25 ++++++++----------- .../test/test_insight_actors_query_runner.py | 2 -- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index 3df24dc55d6a7..e7b53d4a1ef41 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -55,8 +55,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name @@ -92,7 +91,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.properties___name ASC) @@ -149,8 +148,7 @@ WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) GROUP BY actor_id) WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) - and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0))) AS source INNER JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name @@ -183,7 +181,7 @@ WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) GROUP BY actor_id) WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) - and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0)) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0))) AS source))) GROUP BY person.id HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.properties___name ASC) @@ -250,8 +248,7 @@ HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + WHERE ifNull(equals(num_intervals, 2), 0)) AS source INNER JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name @@ -274,7 +271,7 @@ HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 2), 0) SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + WHERE ifNull(equals(num_intervals, 2), 0)) AS source))) GROUP BY person.id HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.properties___name ASC) @@ -351,8 +348,7 @@ GROUP BY person.id HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY actor_id) AS source INNER JOIN (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, person.id AS id @@ -377,7 +373,7 @@ GROUP BY person.id HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY actor_id) AS source))) GROUP BY person.id HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.properties___name ASC) @@ -423,8 +419,7 @@ GROUP BY person.id HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY actor_id) AS source INNER JOIN (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name @@ -455,7 +450,7 @@ GROUP BY person.id HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE and(equals(e.team_id, 2), equals(e.event, '$pageview'), ifNull(notEquals(e__pdi__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(toTimeZone(e.timestamp, 'US/Pacific'), toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')))) - GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY actor_id) AS source))) GROUP BY person.id HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.properties___name ASC) diff --git a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py index 1545c80464710..d34bdfe8876b5 100644 --- a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py +++ b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py @@ -239,7 +239,6 @@ def test_insight_persons_trends_query_with_argmaxV1(self): self.assertEqual([("p2",)], response.results) assert "in(id," in queries[0] self.assertEqual(2, queries[0].count("toTimeZone(e.timestamp, 'US/Pacific') AS timestamp")) - self.assertEqual(2, queries[0].count("use_query_cache=1")) @snapshot_clickhouse_queries def test_insight_persons_trends_query_with_argmaxV2(self): @@ -268,7 +267,6 @@ def test_insight_persons_trends_query_with_argmaxV2(self): self.assertEqual([("p2",)], response.results) assert "in(person.id" in queries[0] self.assertEqual(2, queries[0].count("toTimeZone(e.timestamp, 'US/Pacific') AS timestamp")) - self.assertEqual(2, queries[0].count("use_query_cache=1")) @snapshot_clickhouse_queries def test_insight_persons_trends_groups_query(self): From cdb838f5bd50f6daa74cece8f815901aba1281ae Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Tue, 25 Jun 2024 11:10:11 -0700 Subject: [PATCH 68/77] and --- posthog/hogql/database/schema/persons.py | 2 +- posthog/hogql/test/test_printer.py | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 74ba4ab0509df..5811114ef9da0 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -216,7 +216,7 @@ def create_new_table_with_filter(self, join: JoinExpr) -> Self: join.constraint.expr.exprs = not_promotable if len(promotable) == 0: return self - p = PersonsTable() + p = self.model_copy() if len(promotable) == 1: p.filter = promotable[0] elif len(promotable) > 1: diff --git a/posthog/hogql/test/test_printer.py b/posthog/hogql/test/test_printer.py index af18b7e67851c..8c182181d920c 100644 --- a/posthog/hogql/test/test_printer.py +++ b/posthog/hogql/test/test_printer.py @@ -1677,3 +1677,26 @@ def test_two_joins(self): f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), ifNull(in(id, tuple(4, 5, 6)), 0))" in printed ) + + def test_two_clauses(self): + query = parse_select( + """ + select p1.id as p1_id, p2.id as p2_id from events + join persons as p1 on p1.id in (7,8,9) and p1.id = events.person_id and p1.id in (1,2,3) + join persons as p2 on p2.id = events.person_id and p2.id in (4,5,6) + """ + ) + printed = print_ast( + query, + HogQLContext(team_id=self.team.pk, enable_select_queries=True), + dialect="clickhouse", + settings=HogQLGlobalSettings(max_execution_time=10), + ) + assert ( + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), ifNull(in(id, tuple(7, 8, 9)), 0), ifNull(in(id, tuple(1, 2, 3)), 0))" + in printed + ) + assert ( + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), ifNull(in(id, tuple(4, 5, 6)), 0))" + in printed + ) From 432ec1ab8bb316b2a78d9019a390cf69c6210196 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Tue, 25 Jun 2024 11:11:11 -0700 Subject: [PATCH 69/77] minor reorder --- posthog/hogql/database/schema/persons.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 5811114ef9da0..9191204f1dad4 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -213,9 +213,9 @@ def create_new_table_with_filter(self, join: JoinExpr) -> Self: if join.constraint is not None and isinstance(join.constraint.expr, And): exprs = cast(And, join.constraint.expr).exprs promotable, not_promotable = PersonsTable._partition_exprs(exprs, join.alias) - join.constraint.expr.exprs = not_promotable if len(promotable) == 0: return self + join.constraint.expr.exprs = not_promotable p = self.model_copy() if len(promotable) == 1: p.filter = promotable[0] From 3b57efb199f127644f5d035f18d7a6438445af5e Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 18:31:27 +0000 Subject: [PATCH 70/77] Update query snapshots --- .../test_funnel_trends_persons.ambr | 39 +++++++++---------- .../test_funnel_unordered_persons.ambr | 13 +++---- 2 files changed, 24 insertions(+), 28 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr index bf89083a6719f..7660b6457afe5 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_persons.ambr @@ -1,8 +1,8 @@ # serializer version: 1 # name: TestFunnelTrendsPersons.test_funnel_trend_persons_returns_recordings ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -139,8 +139,7 @@ GROUP BY aggregation_target, entrance_period_start) WHERE ifNull(greaterOrEquals(steps_completed, 2), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -184,10 +183,10 @@ WHERE ifNull(equals(entrance_period_start, toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), 0) GROUP BY aggregation_target, entrance_period_start) WHERE ifNull(greaterOrEquals(steps_completed, 2), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -216,8 +215,8 @@ # --- # name: TestFunnelTrendsPersons.test_funnel_trend_persons_with_drop_off ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -354,8 +353,7 @@ GROUP BY aggregation_target, entrance_period_start) WHERE and(ifNull(greaterOrEquals(steps_completed, 1), 0), ifNull(less(steps_completed, 3), 0)) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -399,10 +397,10 @@ WHERE ifNull(equals(entrance_period_start, toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), 0) GROUP BY aggregation_target, entrance_period_start) WHERE and(ifNull(greaterOrEquals(steps_completed, 1), 0), ifNull(less(steps_completed, 3), 0)) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -431,8 +429,8 @@ # --- # name: TestFunnelTrendsPersons.test_funnel_trend_persons_with_no_to_step ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -569,8 +567,7 @@ GROUP BY aggregation_target, entrance_period_start) WHERE ifNull(greaterOrEquals(steps_completed, 3), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -614,10 +611,10 @@ WHERE ifNull(equals(entrance_period_start, toDateTime64('2021-05-01 00:00:00.000000', 6, 'UTC')), 0) GROUP BY aggregation_target, entrance_period_start) WHERE ifNull(greaterOrEquals(steps_completed, 3), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered_persons.ambr index ab710413373b7..055fb117e0511 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_unordered_persons.ambr @@ -1,8 +1,8 @@ # serializer version: 1 # name: TestFunnelUnorderedStepsPersons.test_unordered_funnel_does_not_return_recordings ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -257,8 +257,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -341,10 +340,10 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, From 5450c98348929f945030c9c65193f0400ddd13af Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 18:31:36 +0000 Subject: [PATCH 71/77] Update query snapshots --- .../test/__snapshots__/test_funnel.ambr | 60 +++++----- .../test_funnel_correlation.ambr | 104 ++++++++---------- .../test_funnel_correlations_persons.ambr | 65 +++++------ .../__snapshots__/test_funnel_persons.ambr | 39 +++---- .../test_funnel_strict_persons.ambr | 39 +++---- 5 files changed, 142 insertions(+), 165 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index 4c3ab9d949e19..e8ba62cfd9ad0 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -98,9 +98,9 @@ # --- # name: TestFOSSFunnel.test_funnel_conversion_window_seconds.1 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, - filterable_persons.created_at AS created_at, + SELECT persons.id, + persons.id AS id, + persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -183,8 +183,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id @@ -223,10 +222,10 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.created_at DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -542,9 +541,9 @@ # --- # name: TestFOSSFunnel.test_funnel_with_property_groups.1 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, - filterable_persons.created_at AS created_at, + SELECT persons.id, + persons.id AS id, + persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -639,8 +638,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id @@ -688,10 +686,10 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.created_at DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -705,9 +703,9 @@ # --- # name: TestFOSSFunnel.test_funnel_with_property_groups.2 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, - filterable_persons.created_at AS created_at, + SELECT persons.id, + persons.id AS id, + persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -802,8 +800,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id @@ -851,10 +848,10 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.created_at DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -868,9 +865,9 @@ # --- # name: TestFOSSFunnel.test_funnel_with_property_groups.3 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, - filterable_persons.created_at AS created_at, + SELECT persons.id, + persons.id AS id, + persons.created_at AS created_at, 1 FROM (SELECT aggregation_target AS actor_id @@ -965,8 +962,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id @@ -1014,10 +1010,10 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.created_at DESC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.created_at DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index ba4e250851da9..435b61870c529 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -318,8 +318,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.1 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -431,8 +431,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -481,10 +480,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY funnel_actors.actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -513,8 +512,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.3 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -626,8 +625,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -676,10 +674,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY funnel_actors.actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -708,8 +706,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.5 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -821,8 +819,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -871,10 +868,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY funnel_actors.actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -903,8 +900,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties.7 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -1016,8 +1013,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1066,10 +1062,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY funnel_actors.actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1261,8 +1257,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties_materialized.1 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -1374,8 +1370,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1424,10 +1419,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY funnel_actors.actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1456,8 +1451,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties_materialized.3 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -1569,8 +1564,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1619,10 +1613,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY funnel_actors.actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1651,8 +1645,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties_materialized.5 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -1764,8 +1758,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1814,10 +1807,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY funnel_actors.actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1846,8 +1839,8 @@ # --- # name: TestClickhouseFunnelCorrelation.test_basic_funnel_correlation_with_properties_materialized.7 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -1959,8 +1952,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -2009,10 +2001,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY funnel_actors.actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr index 5e93052861bc9..1a92df48bec1f 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr @@ -1,8 +1,8 @@ # serializer version: 1 # name: TestFunnelCorrelationsActors.test_funnel_correlation_on_event_with_recordings ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -111,8 +111,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed']), equals(event.event, 'insight loaded'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -159,10 +158,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed']), equals(event.event, 'insight loaded'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -191,8 +190,8 @@ # --- # name: TestFunnelCorrelationsActors.test_funnel_correlation_on_event_with_recordings.2 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -367,8 +366,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed', 'insight updated']), equals(event.event, 'insight loaded'), ifNull(notEquals(funnel_actors.steps, 3), 1)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -427,10 +425,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed', 'insight updated']), equals(event.event, 'insight loaded'), ifNull(notEquals(funnel_actors.steps, 3), 1)) GROUP BY actor_id - ORDER BY actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -459,8 +457,8 @@ # --- # name: TestFunnelCorrelationsActors.test_funnel_correlation_on_properties_with_recordings ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -572,8 +570,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -622,10 +619,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY funnel_actors.actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -654,8 +651,8 @@ # --- # name: TestFunnelCorrelationsActors.test_strict_funnel_correlation_with_recordings ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -767,8 +764,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -817,10 +813,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY funnel_actors.actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -849,8 +845,8 @@ # --- # name: TestFunnelCorrelationsActors.test_strict_funnel_correlation_with_recordings.2 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT funnel_actors.actor_id AS actor_id, @@ -962,8 +958,7 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY funnel_actors.actor_id ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1012,10 +1007,10 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY funnel_actors.actor_id ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr index 9bb5d369842e6..0db27445a49a5 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr @@ -1,8 +1,8 @@ # serializer version: 1 # name: TestFunnelPersons.test_funnel_person_recordings ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -153,8 +153,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -201,10 +200,10 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -233,8 +232,8 @@ # --- # name: TestFunnelPersons.test_funnel_person_recordings.2 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -385,8 +384,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -433,10 +431,10 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -465,8 +463,8 @@ # --- # name: TestFunnelPersons.test_funnel_person_recordings.4 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -617,8 +615,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(equals(steps, 2), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -665,10 +662,10 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(equals(steps, 2), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr index cc7685ff37c47..14a5fafba8bfc 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr @@ -1,8 +1,8 @@ # serializer version: 1 # name: TestFunnelStrictStepsPersons.test_strict_funnel_person_recordings ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -113,8 +113,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -153,10 +152,10 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -185,8 +184,8 @@ # --- # name: TestFunnelStrictStepsPersons.test_strict_funnel_person_recordings.2 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -297,8 +296,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -337,10 +335,10 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -369,8 +367,8 @@ # --- # name: TestFunnelStrictStepsPersons.test_strict_funnel_person_recordings.4 ''' - SELECT filterable_persons.id, - filterable_persons.id AS id, + SELECT persons.id, + persons.id AS id, source.matching_events AS matching_events FROM (SELECT aggregation_target AS actor_id, @@ -481,8 +479,7 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(equals(steps, 2), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -521,10 +518,10 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(equals(steps, 2), 0) - ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + ORDER BY aggregation_target ASC) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, From be0a2a358296264f4ec10d6f3e95035310a90139 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 18:31:40 +0000 Subject: [PATCH 72/77] Update query snapshots --- .../api/test/__snapshots__/test_properties_timeline.ambr | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/posthog/api/test/__snapshots__/test_properties_timeline.ambr b/posthog/api/test/__snapshots__/test_properties_timeline.ambr index ac8cf04120ea6..670ac0cd349e4 100644 --- a/posthog/api/test/__snapshots__/test_properties_timeline.ambr +++ b/posthog/api/test/__snapshots__/test_properties_timeline.ambr @@ -446,7 +446,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array(replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', '')) AS relevant_property_values, + array(replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', '')) AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( @@ -482,7 +482,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array("mat_pp_bar", "mat_pp_foo") AS relevant_property_values, + array("mat_pp_foo", "mat_pp_bar") AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( @@ -522,7 +522,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array(replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', '')) AS relevant_property_values, + array(replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', '')) AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( @@ -558,7 +558,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array("mat_pp_bar", "mat_pp_foo") AS relevant_property_values, + array("mat_pp_foo", "mat_pp_bar") AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( From f3caafef17d361f67cfd79ec8b9c6409955a723c Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 18:32:24 +0000 Subject: [PATCH 73/77] Update query snapshots --- .../test_paths_query_runner_ee.ambr | 274 ++++++++---------- .../test/__snapshots__/test_trends.ambr | 22 +- 2 files changed, 135 insertions(+), 161 deletions(-) diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr index 488692557e9bd..c1551548b9f19 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr @@ -1177,7 +1177,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -1277,8 +1277,7 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '2_step two'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1311,10 +1310,10 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '2_step two'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1328,7 +1327,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.1 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -1427,8 +1426,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '2_step two'), 0) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1460,10 +1458,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '2_step two'), 0) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1477,7 +1475,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.2 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -1576,8 +1574,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '2_step two'), 0), 1) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1609,10 +1606,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '2_step two'), 0), 1) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1626,7 +1623,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.3 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -1726,8 +1723,7 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '3_step three'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1760,10 +1756,10 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '3_step three'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1777,7 +1773,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.4 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -1876,8 +1872,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '3_step three'), 0) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1909,10 +1904,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '3_step three'), 0) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -1926,7 +1921,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.5 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -2025,8 +2020,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '3_step three'), 0), 1) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -2058,10 +2052,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '3_step three'), 0), 1) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2075,7 +2069,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.6 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -2175,8 +2169,7 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '4_step four'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -2209,10 +2202,10 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '4_step four'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2226,7 +2219,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.7 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -2325,8 +2318,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '4_step four'), 0) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -2358,10 +2350,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '4_step four'), 0) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2375,7 +2367,7 @@ # --- # name: TestClickhousePaths.test_person_dropoffs.8 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -2474,8 +2466,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '4_step four'), 0), 1) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -2507,10 +2498,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '4_step four'), 0), 1) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2616,8 +2607,8 @@ # --- # name: TestClickhousePaths.test_recording ''' - SELECT filterable_persons.id AS id, - filterable_persons.created_at AS created_at, + SELECT persons.id AS id, + persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -2718,8 +2709,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '2_/2'), 0) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id @@ -2752,10 +2742,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '2_/2'), 0) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2784,8 +2774,8 @@ # --- # name: TestClickhousePaths.test_recording_for_dropoff ''' - SELECT filterable_persons.id AS id, - filterable_persons.created_at AS created_at, + SELECT persons.id AS id, + persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -2887,8 +2877,7 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '2_/2'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id @@ -2922,10 +2911,10 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '2_/2'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -2939,8 +2928,8 @@ # --- # name: TestClickhousePaths.test_recording_for_dropoff.1 ''' - SELECT filterable_persons.id AS id, - filterable_persons.created_at AS created_at, + SELECT persons.id AS id, + persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -3042,8 +3031,7 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '3_/3'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id @@ -3077,10 +3065,10 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(path_dropoff_key, '3_/3'), 0), ifNull(equals(path_dropoff_key, path_key), isNull(path_dropoff_key) and isNull(path_key))) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -3109,8 +3097,8 @@ # --- # name: TestClickhousePaths.test_recording_with_no_window_or_session_id ''' - SELECT filterable_persons.id AS id, - filterable_persons.created_at AS created_at, + SELECT persons.id AS id, + persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -3211,8 +3199,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '2_/2'), 0) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id @@ -3245,10 +3232,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE ifNull(equals(path_key, '2_/2'), 0) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -3277,8 +3264,8 @@ # --- # name: TestClickhousePaths.test_recording_with_start_and_end ''' - SELECT filterable_persons.id AS id, - filterable_persons.created_at AS created_at, + SELECT persons.id AS id, + persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -3388,8 +3375,7 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE ifNull(equals(path_key, '2_/2'), 0) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id @@ -3423,10 +3409,10 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE ifNull(equals(path_key, '2_/2'), 0) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -3626,7 +3612,7 @@ # --- # name: TestClickhousePaths.test_start_and_end.1 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -3734,8 +3720,7 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE and(ifNull(equals(last_path_key, '1_/5'), 0), ifNull(equals(path_key, '2_/about'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -3768,10 +3753,10 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE and(ifNull(equals(last_path_key, '1_/5'), 0), ifNull(equals(path_key, '2_/about'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -3873,7 +3858,7 @@ # --- # name: TestClickhousePaths.test_start_and_end.3 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -3981,8 +3966,7 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE and(ifNull(equals(last_path_key, '3_...'), 0), ifNull(equals(path_key, '4_/5'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -4015,10 +3999,10 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE and(ifNull(equals(last_path_key, '3_...'), 0), ifNull(equals(path_key, '4_/5'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -4120,7 +4104,7 @@ # --- # name: TestClickhousePaths.test_start_and_end_materialized.1 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -4228,8 +4212,7 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE and(ifNull(equals(last_path_key, '1_/5'), 0), ifNull(equals(path_key, '2_/about'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -4262,10 +4245,10 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE and(ifNull(equals(last_path_key, '1_/5'), 0), ifNull(equals(path_key, '2_/about'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -4367,7 +4350,7 @@ # --- # name: TestClickhousePaths.test_start_and_end_materialized.3 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -4475,8 +4458,7 @@ arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE and(ifNull(equals(last_path_key, '3_...'), 0), ifNull(equals(path_key, '4_/5'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -4509,10 +4491,10 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index WHERE and(ifNull(greater(start_target_index, 0), 0), ifNull(greater(end_target_index, 0), 0)))) WHERE and(ifNull(equals(last_path_key, '3_...'), 0), ifNull(equals(path_key, '4_/5'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -4776,7 +4758,7 @@ # --- # name: TestClickhousePaths.test_step_limit.1 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -4875,8 +4857,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '1_/1'), 0), ifNull(equals(path_key, '2_/2'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -4908,10 +4889,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '1_/1'), 0), ifNull(equals(path_key, '2_/2'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -4925,7 +4906,7 @@ # --- # name: TestClickhousePaths.test_step_limit.2 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -5024,8 +5005,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '2_/2'), 0), ifNull(equals(path_key, '3_/3'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -5057,10 +5037,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '2_/2'), 0), ifNull(equals(path_key, '3_/3'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -5157,7 +5137,7 @@ # --- # name: TestClickhousePaths.test_step_limit.4 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -5256,8 +5236,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '2_/2'), 0), ifNull(equals(path_key, '3_/3'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -5289,10 +5268,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '2_/2'), 0), ifNull(equals(path_key, '3_/3'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -5389,7 +5368,7 @@ # --- # name: TestClickhousePaths.test_step_limit.6 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -5488,8 +5467,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '1_/1'), 0), ifNull(equals(path_key, '2_/2'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -5521,10 +5499,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '1_/1'), 0), ifNull(equals(path_key, '2_/2'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -5538,7 +5516,7 @@ # --- # name: TestClickhousePaths.test_step_limit.7 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -5637,8 +5615,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '2_/2'), 0), ifNull(equals(path_key, '3_/3'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -5670,10 +5647,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '2_/2'), 0), ifNull(equals(path_key, '3_/3'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, @@ -5687,7 +5664,7 @@ # --- # name: TestClickhousePaths.test_step_limit.8 ''' - SELECT filterable_persons.id AS id + SELECT persons.id AS id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, @@ -5786,8 +5763,7 @@ JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '3_/3'), 0), ifNull(equals(path_key, '4_/4'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY person_id) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -5819,10 +5795,10 @@ JOIN session_paths AS path_time_tuple, arrayEnumerate(session_paths) AS session_index) ARRAY JOIN limited_path_timings AS joined_path_tuple, arrayEnumerate(limited_path_timings) AS event_in_session_index)) WHERE and(ifNull(equals(last_path_key, '3_/3'), 0), ifNull(equals(path_key, '4_/4'), 0)) - GROUP BY person_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY person_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) - ORDER BY filterable_persons.id ASC + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC LIMIT 101 OFFSET 0 SETTINGS readonly=2, max_execution_time=60, diff --git a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr index 50ecf53002996..452fd225ab92b 100644 --- a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr +++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr @@ -235,8 +235,8 @@ # --- # name: TestTrends.test_breakdown_by_group_props_person_on_events.1 ''' - SELECT filterable_persons.id AS id, - filterable_persons.created_at AS created_at, + SELECT persons.id AS id, + persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -259,8 +259,7 @@ GROUP BY groups.group_type_index, groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')), ifNull(equals(e__group_0.properties___industry, 'technology'), 0))) - GROUP BY actor_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY actor_id) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id @@ -278,9 +277,9 @@ WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) GROUP BY groups.group_type_index, groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')), ifNull(equals(e__group_0.properties___industry, 'technology'), 0))) - GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY actor_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY source.event_count DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -1054,8 +1053,8 @@ # --- # name: TestTrends.test_filtering_by_multiple_groups_person_on_events.1 ''' - SELECT filterable_persons.id AS id, - filterable_persons.created_at AS created_at, + SELECT persons.id AS id, + persons.created_at AS created_at, source.event_count AS event_count, source.matching_events AS matching_events FROM @@ -1086,8 +1085,7 @@ GROUP BY groups.group_type_index, groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), and(ifNull(equals(e__group_0.properties___industry, 'finance'), 0), ifNull(equals(e__group_2.properties___name, 'six'), 0)), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')))) - GROUP BY actor_id SETTINGS use_query_cache=1, - query_cache_ttl=600) AS source + GROUP BY actor_id) AS source INNER JOIN (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, person.id AS id @@ -1110,9 +1108,9 @@ WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) GROUP BY groups.group_type_index, groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), and(ifNull(equals(e__group_0.properties___industry, 'finance'), 0), ifNull(equals(e__group_2.properties___name, 'six'), 0)), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')))) - GROUP BY actor_id SETTINGS use_query_cache=1, query_cache_ttl=600) AS source))) + GROUP BY actor_id) AS source))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS filterable_persons ON equals(filterable_persons.id, source.actor_id) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY source.event_count DESC LIMIT 101 OFFSET 0 SETTINGS readonly=2, From 6b8c378fcc17882ca1c1cf94de1954cd5f31fc7c Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Tue, 25 Jun 2024 12:26:07 -0700 Subject: [PATCH 74/77] resolve test fix --- posthog/hogql/test/test_resolver.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/posthog/hogql/test/test_resolver.py b/posthog/hogql/test/test_resolver.py index e6854e6730834..6b9e0d166d50b 100644 --- a/posthog/hogql/test/test_resolver.py +++ b/posthog/hogql/test/test_resolver.py @@ -253,7 +253,8 @@ def test_ctes_with_aliases(self): def test_ctes_with_union_all(self): self.assertEqual( - self._print_hogql(""" + self._print_hogql( + """ WITH cte1 AS (SELECT 1 AS a) SELECT 1 AS a UNION ALL @@ -261,14 +262,17 @@ def test_ctes_with_union_all(self): SELECT * FROM cte2 UNION ALL SELECT * FROM cte1 - """), - self._print_hogql(""" + """ + ), + self._print_hogql( + """ SELECT 1 AS a UNION ALL SELECT * FROM (SELECT 2 AS a) AS cte2 UNION ALL SELECT * FROM (SELECT 1 AS a) AS cte1 - """), + """ + ), ) def test_join_using(self): @@ -416,7 +420,7 @@ def test_visit_hogqlx_tag_source(self): "(SELECT id, properties.email AS email FROM " "(SELECT DISTINCT person_id FROM events) " "AS source INNER JOIN " - "filterable_persons ON equals(filterable_persons.id, source.person_id) ORDER BY id ASC) " + "persons ON equals(persons.id, source.person_id) ORDER BY id ASC) " f"LIMIT {MAX_SELECT_RETURNED_ROWS}" ) From 1d43f696c8fb1a144798067999c67ae38b892104 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 20:11:50 +0000 Subject: [PATCH 75/77] Update query snapshots --- .../api/test/__snapshots__/test_properties_timeline.ambr | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/posthog/api/test/__snapshots__/test_properties_timeline.ambr b/posthog/api/test/__snapshots__/test_properties_timeline.ambr index 670ac0cd349e4..ac8cf04120ea6 100644 --- a/posthog/api/test/__snapshots__/test_properties_timeline.ambr +++ b/posthog/api/test/__snapshots__/test_properties_timeline.ambr @@ -446,7 +446,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array(replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', '')) AS relevant_property_values, + array(replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', '')) AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( @@ -482,7 +482,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array("mat_pp_foo", "mat_pp_bar") AS relevant_property_values, + array("mat_pp_bar", "mat_pp_foo") AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( @@ -522,7 +522,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array(replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', '')) AS relevant_property_values, + array(replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', '')) AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( @@ -558,7 +558,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array("mat_pp_foo", "mat_pp_bar") AS relevant_property_values, + array("mat_pp_bar", "mat_pp_foo") AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( From 811446e6cca51a003e003e3ee1f02d3333975d93 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 20:31:07 +0000 Subject: [PATCH 76/77] Update query snapshots --- .../api/test/__snapshots__/test_properties_timeline.ambr | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/posthog/api/test/__snapshots__/test_properties_timeline.ambr b/posthog/api/test/__snapshots__/test_properties_timeline.ambr index ac8cf04120ea6..670ac0cd349e4 100644 --- a/posthog/api/test/__snapshots__/test_properties_timeline.ambr +++ b/posthog/api/test/__snapshots__/test_properties_timeline.ambr @@ -446,7 +446,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array(replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', '')) AS relevant_property_values, + array(replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', '')) AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( @@ -482,7 +482,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array("mat_pp_bar", "mat_pp_foo") AS relevant_property_values, + array("mat_pp_foo", "mat_pp_bar") AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( @@ -522,7 +522,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array(replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', '')) AS relevant_property_values, + array(replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', '')) AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( @@ -558,7 +558,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array("mat_pp_bar", "mat_pp_foo") AS relevant_property_values, + array("mat_pp_foo", "mat_pp_bar") AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( From 436617b71e6d219eeaf65d0a23c913fcf6a897ac Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 20:49:31 +0000 Subject: [PATCH 77/77] Update query snapshots --- .../api/test/__snapshots__/test_properties_timeline.ambr | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/posthog/api/test/__snapshots__/test_properties_timeline.ambr b/posthog/api/test/__snapshots__/test_properties_timeline.ambr index 670ac0cd349e4..ac8cf04120ea6 100644 --- a/posthog/api/test/__snapshots__/test_properties_timeline.ambr +++ b/posthog/api/test/__snapshots__/test_properties_timeline.ambr @@ -446,7 +446,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array(replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', '')) AS relevant_property_values, + array(replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', '')) AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( @@ -482,7 +482,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array("mat_pp_foo", "mat_pp_bar") AS relevant_property_values, + array("mat_pp_bar", "mat_pp_foo") AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( @@ -522,7 +522,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array(replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', '')) AS relevant_property_values, + array(replaceRegexpAll(JSONExtractRaw(person_properties, 'bar'), '^"|"$', ''), replaceRegexpAll(JSONExtractRaw(person_properties, 'foo'), '^"|"$', '')) AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER ( @@ -558,7 +558,7 @@ ORDER BY timestamp ASC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS end_event_number FROM (SELECT timestamp, person_properties AS properties, - array("mat_pp_foo", "mat_pp_bar") AS relevant_property_values, + array("mat_pp_bar", "mat_pp_foo") AS relevant_property_values, lagInFrame(relevant_property_values) OVER ( ORDER BY timestamp ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS previous_relevant_property_values, row_number() OVER (

(^72Tp|%Md3X7TVIFKMgb0i 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 MqJ0;0=RxrQ0YpYW_5c6? delta 131755 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

2d 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 delta 107051 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 From 50964dcb23f04a9fa9be960fb2a53a4f3a4aec3c Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Thu, 20 Jun 2024 16:33:03 -0700 Subject: [PATCH 07/77] person ids --- posthog/hogql/constants.py | 7 +++++++ posthog/hogql/database/schema/persons.py | 16 +++------------- posthog/hogql_queries/actors_query_runner.py | 6 ++++-- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/posthog/hogql/constants.py b/posthog/hogql/constants.py index 400b1385499e3..f1dad762855ea 100644 --- a/posthog/hogql/constants.py +++ b/posthog/hogql/constants.py @@ -27,6 +27,13 @@ # Keywords you can't alias to RESERVED_KEYWORDS = [*KEYWORDS, "team_id"] + +# These are CTEs that are used internally for passing information down the stack. +# They're not dangerous, but if you override them, behavior can be unexpected +class ReservedCTE(str, Enum): + POSTHOG_PERSON_IDS = "$$posthog_person_ids$$" + + # Limit applied to SELECT statements without LIMIT clause when queried via the API DEFAULT_RETURNED_ROWS = 100 # Max limit for all SELECT queries, and the default for CSV exports diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 15741c40f103d..ddb7a241d957d 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -3,7 +3,7 @@ from hogql_parser import parse_expr from posthog.hogql.ast import SelectQuery, And -from posthog.hogql.constants import HogQLQuerySettings +from posthog.hogql.constants import HogQLQuerySettings, ReservedCTE from posthog.hogql.context import HogQLContext from posthog.hogql.database.argmax import argmax_select from posthog.hogql.database.models import ( @@ -56,21 +56,11 @@ def select_from_persons_table(join_or_table: LazyJoinToAdd | LazyTableToAdd, con select = cast( ast.SelectQuery, parse_select( - """ - SELECT id FROM raw_persons WHERE (id, version) IN ( - SELECT id, max(version) as version - FROM raw_persons - WHERE raw_persons.id in (select person_id from person_ids) - GROUP BY id - HAVING equals(argMax(raw_persons.is_deleted, raw_persons.version), 0) - AND argMax(raw_persons.created_at, raw_persons.version) < now() + interval 1 day - ) - """ - if "person_ids" in node.type.ctes - else """ + f""" SELECT id FROM raw_persons WHERE (id, version) IN ( SELECT id, max(version) as version FROM raw_persons + {f"WHERE raw_persons.id IN (SELECT person_id FROM {ReservedCTE.POSTHOG_PERSON_IDS})" if ReservedCTE.POSTHOG_PERSON_IDS in node.type.ctes else ""} GROUP BY id HAVING equals(argMax(raw_persons.is_deleted, raw_persons.version), 0) AND argMax(raw_persons.created_at, raw_persons.version) < now() + interval 1 day diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py index ac876fab34a3f..127897a606a76 100644 --- a/posthog/hogql_queries/actors_query_runner.py +++ b/posthog/hogql_queries/actors_query_runner.py @@ -2,7 +2,7 @@ from typing import Optional from collections.abc import Sequence, Iterator from posthog.hogql import ast -from posthog.hogql.constants import HogQLQuerySettings +from posthog.hogql.constants import HogQLQuerySettings, ReservedCTE from posthog.hogql.parser import parse_expr, parse_order_expr, parse_select from posthog.hogql.property import has_aggregation from posthog.hogql_queries.actor_strategies import ActorStrategy, PersonStrategy, GroupStrategy @@ -273,7 +273,9 @@ def to_query(self) -> ast.SelectQuery: ): s = parse_select("SELECT distinct actor_id as person_id FROM source") # This feels like it adds one extra level of SELECT which is unnecessary - ctes["person_ids"] = ast.CTE(name="person_ids", expr=s, cte_type="subquery") + ctes[ReservedCTE.POSTHOG_PERSON_IDS] = ast.CTE( + name=ReservedCTE.POSTHOG_PERSON_IDS, expr=s, cte_type="subquery" + ) return ast.SelectQuery( ctes=ctes, From d37785310f835e5b4d0a1fe05a4ffef870a6f5b4 Mon Sep 17 00:00:00 2001 From: Alexander Spicer Date: Thu, 20 Jun 2024 16:35:19 -0700 Subject: [PATCH 08/77] fix --- .../hogql/database/schema/person_distinct_id_overrides.py | 5 ++++- posthog/hogql/database/schema/person_distinct_ids.py | 3 ++- posthog/hogql/database/schema/persons_pdi.py | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/posthog/hogql/database/schema/person_distinct_id_overrides.py b/posthog/hogql/database/schema/person_distinct_id_overrides.py index 55ddd7f0640e7..97dd73f2930d0 100644 --- a/posthog/hogql/database/schema/person_distinct_id_overrides.py +++ b/posthog/hogql/database/schema/person_distinct_id_overrides.py @@ -1,4 +1,5 @@ from posthog.hogql.ast import SelectQuery +from posthog.hogql.constants import HogQLQuerySettings from posthog.hogql.context import HogQLContext from posthog.hogql.database.argmax import argmax_select @@ -32,13 +33,15 @@ def select_from_person_distinct_id_overrides_table(requested_fields: dict[str, l # Always include "person_id", as it's the key we use to make further joins, and it'd be great if it's available if "person_id" not in requested_fields: requested_fields = {**requested_fields, "person_id": ["person_id"]} - return argmax_select( + select = argmax_select( table_name="raw_person_distinct_id_overrides", select_fields=requested_fields, group_fields=["distinct_id"], argmax_field="version", deleted_field="is_deleted", ) + select.settings = HogQLQuerySettings(optimize_aggregation_in_order=True) + return select def join_with_person_distinct_id_overrides_table( diff --git a/posthog/hogql/database/schema/person_distinct_ids.py b/posthog/hogql/database/schema/person_distinct_ids.py index 5b90973771c86..9ebfd9e17fde1 100644 --- a/posthog/hogql/database/schema/person_distinct_ids.py +++ b/posthog/hogql/database/schema/person_distinct_ids.py @@ -1,4 +1,5 @@ from posthog.hogql.ast import SelectQuery +from posthog.hogql.constants import HogQLQuerySettings from posthog.hogql.context import HogQLContext from posthog.hogql.database.argmax import argmax_select @@ -39,7 +40,7 @@ def select_from_person_distinct_ids_table(requested_fields: dict[str, list[str | argmax_field="version", deleted_field="is_deleted", ) - select.optimize_aggregation_in_order = True + select.settings = HogQLQuerySettings(optimize_aggregation_in_order=True) return select diff --git a/posthog/hogql/database/schema/persons_pdi.py b/posthog/hogql/database/schema/persons_pdi.py index 394b76fda7ff8..17c1a393e4b99 100644 --- a/posthog/hogql/database/schema/persons_pdi.py +++ b/posthog/hogql/database/schema/persons_pdi.py @@ -1,6 +1,7 @@ import posthoganalytics from posthog.hogql.ast import SelectQuery +from posthog.hogql.constants import HogQLQuerySettings from posthog.hogql.context import HogQLContext from posthog.hogql.database.argmax import argmax_select from posthog.hogql.database.models import ( @@ -28,7 +29,7 @@ def persons_pdi_select(requested_fields: dict[str, list[str | int]]): argmax_field="version", deleted_field="is_deleted", ) - select.optimize_aggregation_in_order = True + select.settings = HogQLQuerySettings(optimize_aggregation_in_order=True) return select From 5da1b47e0ca62f5ada034e4adb64d487d94afdfc Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 23:39:00 +0000 Subject: [PATCH 09/77] Update UI snapshots for `chromium` (2) --- ...s-app-insights--trends-line-edit--dark.png | Bin 133851 -> 146343 bytes ...-app-insights--trends-line-edit--light.png | Bin 145568 -> 133424 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--trends-line-edit--dark.png b/frontend/__snapshots__/scenes-app-insights--trends-line-edit--dark.png index 4c93657d5e0b6b8a7e92a16023adc8a3ddf467c5..7513b6f9da17b2bbe44c7321381a46407049b30e 100644 GIT binary patch delta 113147 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 delta 100917 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

2d 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 From ee3b5dc1f427d3e538e259c0521ae821858b7ebe Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 23:11:51 +0000 Subject: [PATCH 05/77] Update query snapshots --- .../test/__snapshots__/test_funnel.ambr | 12 +- .../test_funnel_correlation.ambr | 120 ++++++++++++------ .../test_funnel_correlations_persons.ambr | 15 ++- .../__snapshots__/test_funnel_persons.ambr | 9 +- .../test_funnel_strict_persons.ambr | 9 +- 5 files changed, 110 insertions(+), 55 deletions(-) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index d9e0e5b8c2480..42444d841143c 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -183,7 +183,8 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id @@ -604,7 +605,8 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id @@ -723,7 +725,8 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id @@ -842,7 +845,8 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT argMax(person.created_at, person.version) AS created_at, person.id AS id diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index 4d1ba34adce68..ca7be9b3d7ede 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -431,7 +431,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -580,7 +581,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -729,7 +731,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -878,7 +881,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1190,7 +1194,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1339,7 +1344,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1488,7 +1494,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -1637,7 +1644,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -2178,7 +2186,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'positively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -2294,7 +2303,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'positively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -2410,7 +2420,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -2526,7 +2537,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -2791,7 +2803,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -2907,7 +2920,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -3156,7 +3170,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'positively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -3272,7 +3287,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'positively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -3388,7 +3404,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -3504,7 +3521,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -3769,7 +3787,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -3885,7 +3904,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(funnel_actors.actor_id, event.`$group_0`) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-14 23:59:59', 6, 'UTC')))), notIn(event.event, ['paid', 'user signed up']), equals(event.event, 'negatively_related'), ifNull(notEquals(funnel_actors.steps, 2), 1)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -4156,7 +4176,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -4279,7 +4300,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -4402,7 +4424,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -4525,7 +4548,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -4944,7 +4968,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -5067,7 +5092,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -5190,7 +5216,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -5313,7 +5340,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -5732,7 +5760,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -5855,7 +5884,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -5978,7 +6008,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -6101,7 +6132,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -6520,7 +6552,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -6643,7 +6676,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -6766,7 +6800,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -6889,7 +6924,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -7308,7 +7344,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -7431,7 +7468,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -7554,7 +7592,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key @@ -7677,7 +7716,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT groups.group_type_index AS index, groups.group_key AS key diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr index 4f6c68ea6c6b9..c131eef69edee 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlations_persons.ambr @@ -111,7 +111,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed']), equals(event.event, 'insight loaded'), ifNull(equals(funnel_actors.steps, 2), 0)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -323,7 +324,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors ON equals(event__pdi.person_id, funnel_actors.actor_id) WHERE and(equals(event.team_id, 2), greaterOrEquals(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-01 00:00:00', 6, 'UTC'))), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC'))), equals(event.team_id, 2), greater(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), funnel_actors.first_timestamp), less(toTimeZone(toDateTime(toTimeZone(event.timestamp, 'UTC'), 'UTC'), 'UTC'), coalesce(funnel_actors.final_timestamp, plus(toTimeZone(funnel_actors.first_timestamp, 'UTC'), toIntervalDay(14)), assumeNotNull(parseDateTime64BestEffortOrNull('2021-01-08 23:59:59', 6, 'UTC')))), notIn(event.event, ['$pageview', 'insight analyzed', 'insight updated']), equals(event.event, 'insight loaded'), ifNull(notEquals(funnel_actors.steps, 3), 1)) GROUP BY actor_id - ORDER BY actor_id ASC) AS source + ORDER BY actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -472,7 +474,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -621,7 +624,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(equals(funnel_actors.steps, 2), 0) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -770,7 +774,8 @@ ORDER BY aggregation_target ASC) AS funnel_actors WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source + ORDER BY funnel_actors.actor_id ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr index 18bfe7e9fb732..41d74e60eb3d7 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons.ambr @@ -153,7 +153,8 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -341,7 +342,8 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -529,7 +531,8 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(equals(steps, 2), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr index 49b02ae1302e5..1845beb0323b1 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons.ambr @@ -113,7 +113,8 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [1, 2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -261,7 +262,8 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(in(steps, [2, 3]), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person @@ -409,7 +411,8 @@ HAVING ifNull(equals(steps, max_steps), isNull(steps) and isNull(max_steps))) WHERE ifNull(equals(steps, 2), 0) - ORDER BY aggregation_target ASC) AS source + ORDER BY aggregation_target ASC SETTINGS use_query_cache=1, + query_cache_ttl=600) AS source INNER JOIN (SELECT person.id AS id FROM person From 1878fbc41f388df8c5d9156fec912dde46208d69 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 23:22:57 +0000 Subject: [PATCH 06/77] Update UI snapshots for `chromium` (2) --- ...-app-insights--trends-line-edit--light.png | Bin 133424 -> 145568 bytes ...es-app-insights--user-paths-edit--dark.png | Bin 190881 -> 197495 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--trends-line-edit--light.png b/frontend/__snapshots__/scenes-app-insights--trends-line-edit--light.png index 39f23e4aab8d141a0cb17618346204ed014ff6cd..a50d3f6dbcfeaed2cc0148865f1dc2babef13151 100644 GIT binary patch delta 112543 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%0A`yS2o`zQmQ({_p(1hZE(MPhDMX1+I&Cg9rL zM?~kzZ%XBBWoM{!st2i74!Xo_naj&4+uG*DT)iu%%c}=I>wMTX$DQSB&iPHBxu2`j z*A-;YKLQgYT{l%XtpIS4QfOLqa@%u1oSbe?o1YIDoh?Rm^%n}i&pj{IaW!n?XZf_7 zkW-c)jnJg`?s9TI8>A699F}q2iQ$`c;N^5X5@~fc%Xf8{WtJ*i@m_aa=`fUYu}n#g z@1Ve@m-Cn+R6dTZCIbCblsYHv?lO1Yg?MjppsvIX`=j=Mt~EI(0dYZh)4-`xEHw2hX|NEPFphh_&aD(w^2vLBe-xhkC; z+jV?;VAjE9v(n)gGp*ci_Gpdqr&_V5Z5Y@i;-{sqB)?p5a0j918ya6fVrq0^ zlzp&YgFakn=VF=NFZi-;YPig#|M+Ou+@o@qugKqy<>j|AmksK~b6#UV1Tdb7w9*4Q zE1&2J_`6%~X!YPqKm;dD@Dkv*I()uOSyauhce(z3_waP8RU;qOm9k+1Tpdxpj>3fQ zEG6B%yJ`+Fsd|vA9qM)}sixNEV47$u4N-W%a4pkOZ#_rI1@Tfj6q696f4WYjXTxRt z>vvDe7t?6v4kunmj*9gOEBX}aLaxIvwVADhc9(i8o{F|F6TT5OrV~hPoRDAuY6rWj z!<_b^Nr$Rly$;M8-6@Op7)Ytjd-Fyn=twYPAzZx!31IMd#Z0cM!L@ZR?5*1VlGP}* zO>fpNQml7ETTezf?kz6~cy6DLdyL(JLlV}Fj0KL3UHMtEJ1m3lt?tfhRocEh;$K0B zRqel+V%5nqJfsYxSsW}-(6y@)J!{=Jzb&*qUl5w9w*UK_z`7u>(K}c+_3Qhu1CUXd zoOU)VEhX98!4l`4#YCwP>Da7C$%n}G?lL>>xve*+XEuXH_vCH|zvf?y14As%)R)y2 zd-~|-vB!?@ufrV`1tDuUu7D@i=*ib=;L*Gr*Fh1UOqpF;9u`w@V?WgSZ z-F=Jrp@O6#DW8Syu5GEO`vb8yT2Wflecia66Zf2c-dh~ljtt8^l5VeXpW-FmtYWsf z?w&U}ZKH+$q7*%-JI-mBIn{dRyw{Cd(=#w>lEJflr}yc;o@l*Xhnhw)(v`_3;8s_7 z^TS3cP38SrDFUkF!mZ=bB-bLg-UGD0;`EjctrSZHXJ^gbTbupC!4CH(KMfYb?xcXU z6-15fdxp;bxv&BL>|w=3wH2~^oa4x55y7@Mf_(TcBD#5y<+8Wfewd+|SZ2F8(mY?| z)*-sxY{EXb+SpD%yK)gJvihaEuIDZxU{_w>Ww!D01b*IYi<%u@Ui*8R*=*J+mJ{_e zIg+RMi7QoFYI{V&Jz z8)J5n<3=zAR{-GK<nDw-!cHzI@So!I~)MzPt2W zp65{t=K?rD2=7LjRHIu7S{lL3(^{TfhVhpr{!vb>r6abJ)6>mHdCn;wm8*Os+)uuE zjs#u(7=e?Ww4an!lFqg)gY=D0FY*;l&D-G<;2+J_$Cg-m{J!nD*xi}>_3H(du2gcb zgi{mM*2z!b>yppc{tXmtMSrJo#KOR-IW=c{U0@X9ox+eXUL@@?O=1DdkS`?)c>gfl z?HhFzj?aI1;1k8Kam!Aj#K$=BLj*A4pI6sak;m+h9=~8cDSYDm&3N`#E4!zfu<(fR zgYVR|WH{n(4eEgDAlQz6U0g4O{c7^(G+~Vss`&i87Xhqcgt$%Kyh=93s0uHR+LYt?QXn-klJ*$iLglTcaTep-kn_mq=vjFg?YBIk{r`BW9AxKliVYm~GqOS*M+k zibDze1P2GR_|wv04q_FBVGEUp(99AcV}NT!T`;KcQYMBTf*E%2e}bIH#fqiTthA{V zgboZSFBDIN{i7fmb&2=Hewf6DaPsAgWZ4^qs@Hklg##}t*ZB53?=O>!k z{GJ8(F%eAMPxv-6Z+w*Si7)0b;_zA#!Gss^s5wU5QaJJg{lEZ^ zv|vO+R@URvktGOPYu+IdG2fY;WnVMR(&nNIk%2hJ=&X`(B9JBc(cJNlq-aH4^KS z*M;LnL|XiO1A1wT*h0F(bCX`a@rck&zvPA*KRyy0IOYSX(S3C(xF6yFpw+f*y(@|6@+wr{IAbI*A4RC@-?UN!$s< zl~46Imit&B`Ko!=0k7;`95x7Kyqq&6)(;*x2-x>}@J7qGMs7#slx1Yj^;sv$U(f9=Xcx>a zEcDwRUe4F)o9!~6`L0zYlPr&_D*vo*BNr=ptHU(z9d_dEjMY6wTQn2xo5&8(2@J@j zAR|mB4M)0Di$t-G1|8MMH{=k@*N}hC&@9mF%`W+sPy$Idw`CV$!Z(TCeew5AcWZ_E zdx=qs_pmE12e@(+xHqb#9Ov&T=32W!rMm94NvZm?9LlI)Vna?;!D}P-0?%{b?Q=JN zL^F4_ePjP~eLb^UL2y@l5@*H%=wEBTG!;RZ*p3qJY9CwqnGtb2MFG@o&rtlZJns?PhZ zUD6X&+e{<1zfHArej;{tjam0mX7PI}h4mJ0o4JCr&E6r$#@fw$#&y1ZP%KZRFbX*> zanjz5?CsIx&n)BG z^F`5#$w0Q{W$sa(EGE`!<;{7{pZ$3X7QHPzdg%Eb`{5_N(Gfz&1demgMRPqiX_+~5 z8AN{fEsvqeaP#XSQO37qx$eS7Q}TOHEYfwXLV#D9`Gu2tnx!ZjGdQ`Srca26$-*Yzpr>7+Y(zX41Jtk{%iuN{%oZWC+ZbCwifwRi>$Ip*fi;-tU7|!#`%@N#v6)w*l;QAU2?f@D0srLD^XZ4$`iZZlItef0*fh+m4z-rB@A{#d! zGoZlDY)zp}ji%4mF3}?r*hmAeAtW`NBQ?dfr{2=gZR;*^YqqGNPv69@D4_M z``5m(g50MxAW^|wF$9O3Q<46MIW{ot7;xAXN_n9GE=@jqkX&%#uFbCl(HDzU9!b?s zi+kcKsdAV}wb{x&I@h?WuvGXfgrYAQX0U>-&Ls|p%(8He< zF1Z;GUdnJDPLcxj-(57sIarFUSG!JzYV;&G_jqQDMm7&w90X6$NP*OX;t&(>3=sIM z1>X*E>`{xRmBOad-KC*XYqMsj{*?&FnxZcVw9W+>EN0-T2lWR(12J;Wn7+r45Rc!vX)FnfUXYujQFX%Hi zdvPOw&Di4h86m@D)iv-bUkZV;G=6^?EC+jo#)d#SQ(DyJId6yEtLY4J;;PB z(y^AC?3vTIs`Nzq$ZL5hAI{~Q;B{6++>aa%3*v^}26WblWzKH)m zK+fg;|~NXIy%EVnp^9!ga=O|oFk6=iyrq}TN-fotszU} zdGJ)`MJ~&u&x$=6(MamA%3L(0+rAmxPYf7ZWG(FduE#+xGmYP^SDDiTB)LU<&79Iw z@?j&keLcE4jD;SSxtU$F8=ktqa<84ot1Yq2zMFXN*Ou@d%l@=@{Y4KCgmjySNB2Q} z!2eA`ANjw_=nofQ4B|Bo^Ojy{aD*I_vDHAn4|Ij59_|xa%!Qb%=H?*!Uk*7p1_Lt4 zjeDQ{C`fA4P0Ao`7BG3C^YnScb#?7Fysk|Ef6`4eNnG8Bua4Nyw~EIg9i#U1a)Wus zsp`!7vz#95Q&jgXe_v^@BqHauO_GbOT6bSLRuJAFaADhh7Uqfr_0+_!Pv8b~jjU*aRa zeqGl>7g}BS)|zv#T)&?DO%!h~y97P6LMPc;>$Bj`KU@~L$+`l~c zkGm@+xd|xQ6-zct#Vd0vAAH~+R@mK@hf1TNH{$lcJ7^blhA%PNQ7d|12TMr3G!RU4Fz&MQ+=+ zm3dF9Qge%K*!m=?JhL$7laW!{|Cf%=*l`Exzt;rhFK$-mc1htw{*H?nOYXS*OHSXjR6Z7%}dh~>Zj!qPa?4$w#n-~uvND8=>cNqJB zGw67G@s=7g?|rTtGWJam+ZDfO^ynE|8a{E``$o6nDt;}dhk5wov;6d?cQ*GV7*+ZNb z9f~%iRVwi725)#QyJHZmb*E0d(00O9E8-^i;ls6C{`Qx|Hc00Dsb)so7z4JusF?K)27{tplm?4F$pFXg^2^`xtU4)fwU^U6L%Q* zz=t%3;GtY-K-X+H_<0SFxvb~9rK~#Q9>mGuph8YyHZIgoiwXN|>hWVjC{;MPXH;_s zYE78I+ou@Edjo&|SE)mqDnR*B@*0pXRFsEGfk`J)SaJ}_}(<2;$1gpa08{v+nvHuEA)VzUC5 z_ncd2${!bB2ycz@#+CN;tfF|Ylbo6ixE4c;l}c3?*-XAS$+9X23J}xqRko7OV8#p9 z!Gl^pm5|8D`hW)1l?D@bMw*%gL@`qCc8L;CX{jF%TT1^fsFh7N*f$v6VbGUPrlI0< z$r}H2PZ7XLxWjzSZ1(w@s(0_-Gly2GD8Fws_?V%ZuFQCdd-7kfgPCU5P5a5o<{9<| z+jGH>U*zBmyNq#37b`|8+zN#IgQQ7=Nk|K8@ItX-BZ;g093r+lEFp#W68=UzXFlI+ zqgA}Yve=)e64VX#izCmEE3LZI3>nnO@9V_DNHa#y%siYdjcR(vXL>KvVgl<;q;lU88c}Q#l`lx6K>2J1WmQLi0|(1##o*v zy4^Ty&j|kPrOVu|DbsxGoUYxEYHN|66^w) zacybc72y@%x1Z6@U-)pC*cqWZio1t$dY z&zI?r$jHL|-oB;Jx0z~eCSKS|7{dKqr^Jw)d_B0+LaC?!zGgO8xU4%14irz!wrI$| z7qy&akVX`mmBdU6M?Ip*X+MttxO`Dwfb&HlfKaGOF)gi($GuN#YgEr+5U^)8ChSbi zEjgd>ln1F0G6}HsEPn-NQrV!8aLofbLJo!3xaygk%uIyLOBhs=F_c0wOjd&9!3mVA zQQqAi(>q#!p4>l(>9Z}_zd~YSV#dfjc-(mo`R0u|Tby!ZOOt9({}*BO3DlX-4Zy!7 zC&(PxI@RYc7s=UEnBKnEU2IccY_6$0_Sag`LRF)BCYApAXZe$D&mQiUD!Y`PO~9an z|CBS-oI^44W^$?mv6E*zx6=as;y{5045N5)!6W7jja=KajOUrZWAcxR>0fl@M{Uh! z?4`r&6;9z!1~fBFnl(p9vWVIiU!ioQ7Dl0*KgmuNxL$fc@K_ym$(oW<48CKNK=@;A z_tgbodUt(Ur%*Pt!qj7gaA4<4YICdL(}4%L<8946dGcVY-(rI5F$W&vm6|f@oXe=V z7MMd&|MyQx!=#e94joE(09&PSU)RND?u8KJZ{8EACTvyAKN;%i9-`!7|-Z zyIqCw-czVFcWkQ6y$}-Me%V7c>#43Un;l$A<~Qo{kJk&yxOX)jXB>ldSkZkI^~x%a zQvStS8_UoAbtIf0ed_f@B4WuSe;1chdQeu%z?dAXv%cezhG2!evm*hRj3 zbLkB1hTk!M4#;#(tyoxbMJbM>kp zu$IVVM{qNJ9{C_-*Rxk6H#eA`Xif>qGi(VS@Rww0@U^e6Lo&tT9*_7sx+44Z(n8`) z8hrp6uVQ=KCrnEBW2;%$3#i4a-Wc7h-pvKeO+0igbn>K>`KkX@{eTJ~!{WO1@pS}q z^B+#0=C9taEWjo~<`PVUk}SK-XXgkPyVDPe1-AzZl}-XouXGK$RNV!awkaz_d}U+i zC#L*H(F_Z#D~ePf=IL{0sI4E^az%2^VjF`V6;)-03+e^N-B#wpa;0`?p`mWQd!GC?4%qIy`70edBGvH!czu?Kv=v(THPBW{KEt-M9n zU0QqfXHH50D%^AlvvI@tLm@&Zk7iqObos{QUT#m`$Ycy1^}#wN-YFn$_-n~7yeeKC zPVSlKPE#pos-TQ^o-@Zei4xYt!l-B1eQ;~LU=uJX;q+UWa;6ofM45Rem*p*X zYc?uxZx#8?@Nw};)XOG-=Feg- zPWVD;f}>3JASve_Txo&nc?XQCd{A$J?|_?}`@dHZW&s)GpDKH$tZ}jLEK1P{yB_4R zDT#l3&-hGUqd^{S**j(9GiO6@CjHJLLQrvk2k;6FvvSbQ4z-Y|Z}dLmxMhI8^Ze+- zBK=19BK|l`HJdO_S$}L~7L|<(31)d7Bihs+s?+vN&8+dNToBKnnwc}!7IB#;yy7s& zHni%W`wIpW``0E!QM>_bUDawp5c=Y>Eh_Day?wrE-m6o97$exUV4U*Va|KK+w`c*1 zM&T?tYh}Qeby8R2AEer^m4vaREBQ~zj~A@CP%bQ~LMUV3*wm0G@{|nhSDFJgbs|)l zWr)5ZqGzX;R=2iT-M#~c$Qtq|a4JWB7PTOmix-Cvis%nA!Chrce%oL%`Nw45q6xV; zIXTs!riaN!+-HK6OW1|X??1kq7OmYM_>I})yri402u#mFZ7A+o3}#>Wmrn^l{7<0u z|M8GdCw1W?!g0`?M!##}2QAr?PUR;NT|z&DJ6ErekYHT@1`?}t4m>Eu@xL~Hc1-^b z}XwSfpr!d7!#kAbPIx9zf4V*4%!pKK6O|({O9ic*PEp}th&nO zVMa!YXYrd}e7sNqKRHS*o|}X!zS*&HVe}~!@!vvS)qHlO06H`>&so(%(Oy(CCQSfk zBnt~s!e|^6@jscMqa!{|C8a>f6VU=b9AEu`f&koYMZ>=rSv%ekDDWK;M~Wg_Z=di` zykq{?x?#M&q@;KR=s*8A98}W<%$)vjgNCX9{g0pg)fAbaCrb7GL@WgZf8SqB1i1+&ft6NeK;BM%|+%ex`DucAe z;z)r8qggjlWS{0=Z*_JFW6e_2uK$qgqNniRu<`J|0}P@LT^>D1o-ZM_QEz!^G4$lH5)^n+!pE^Id$yLuJoZ~bwI7Tk9*zK+nTY-`b_yjpXLTv@V zlHZ>}Jb;&l&h@wNS-|ikdy3{cwbpyISa=r2hS6N9I?jeH7$|ysWJrSrTxi1|Z|HN( zbn+b4v&r4++{ef1ByIwI1r}vK+RXh$&g<|Qa2TnHdZA<}o)*|p)K{PaK|*d9rQ zUIs;P7CaQa&0oW4a(r}hu*%~N=#tP#%?%d$$2c2#Z!HVOX%(@4q+xM44g^}}1awOE z4XL@#f^w&&{&av>-S$?KTN$9Mw`?w>EeHrA`CL6&CSLulKKgN%VxtZBB>zH z{|ZauxLc}(aUsVqY0{r2PU&^Enl0zXLYtDk{M-rD&KryabmMJQnb3oF%D(8khpLZm zAX4(FUGt75!{!^4GLiX4Uu%EsO` z#-4}pI&Tu-2x8Mrd8epzUSpFVZXZjDJW6gv3>5l)J1@z$H6TBG*xKsvZvs|Sk4;3Q(pOhx5Vg; zjd#LmuS?Q0?H`eE250`0F{P!cp+>__mk3#TT=Us~HAY}ig}CqRr_12{Ue6kBi8S6e zGE3^^5Yk>(5__eqUfJCM!P{STfJim70)~#{_%nbpLWc(Axo##lrrpVuBk_mr6}F1M z7ZEzcs3a{Xg@o1`1T~MT+uQrW#`0y>@FPd~JN&bG^xbB`jW(+CwmC*^{%0LD|HIrH z-EB4^2xMZ@mq0&o(*9&}&OvSE%@F;7h|N2^6JG2!n6Ln<1Fm0B=SQnRmjQ(4=OwBx z;qtxgq)!}3;xAEQEzt%Zkr%9IQH=KxEZ8TV?z*`if<{9Y*CE;5gr1I$yMs3V473q~ zCXSzPHnqP`?q`%@@BN=Rm<`$JE)!R=AJqGwf=Y9gH@@)_j0=nmDb{a?764(3@bC8!1)V;5*KZ8U!M5W4ldO0E@P{tvO zb@qui=RY9viv?v z!rtnOS^GPgT1D%SdU8B)_M>?Jc*zjf-&ajQ5us{7G$MkzfI+OMjZdh9*5$9WKo8MD zxv=GII&@Yj4Xzs7mz_Be6A;~Kq5QTdC9UBR)bO7!qrjFzjAcQo9Mc+eRX>G*t7;G= z4SU$r@L}!YVWWcoHU{tpW|*-1?>}un|Hor$vAs9KlgjXg!e}_e4_kr%&&T0EhzI}%Mv*pKvM5WxPI}e@@ zKYdemeB`#dFrWf@f-D7PfGK>#JZE8F575aALXrTH6%X3@cADx+zb(*k!oK4ce+aOa zI2hV4j&}Y;;8kY?DXxAmSkWPZm?@@64bEG7_aWKz%i_+xy?dH~UN<2>`}<24flM1EHgU37B*d0oM&h2Zuu7X-R+g z?mR6GjdM|^aUB5cyd(g)l(sVOuJMN?DNUc8R(*i$UJQHctBwea45UH$OJ ze;5el|LffS%Hs%Ht=B;<6%(s?QU8O3{lD!Km`nTbB}+zx2qvhDbC;G8N+~QfZfbnm zFloOhaGckj#GZZ*<+b+R;$EXw5d%BBMBv5F7p(PI*kEO7{Kx5#hT2vaAQSW7K^+T6mH zlbj!z#g#5RdXKxca~QwSF8*HEgzSCa`s&Kf7SAb;1rg7XR6SfD45!$5gGlo(mD=b0I8~OE-AfQfsK^a4OLL5*>JTRcyVHI4%ifix) zJ}y=a?69wtXX%~D;FrlD<=MA?Ld5c#QCBelY|XTKYexa zzGA=svEe=P`;x%(9~ccxFjvnPj~X^mVn2tWehI{VjiCy|^0b>gxb1WTei57e7X8Jo z!%77{S<70>N~3)Co)vM1dM33K1DpWo?}r7F=lg8Go8SyHm3{}AROw`qg&@CBd9-g~ zw*w7b>e${UqLlhRwVxJq=2iAnz`>G``s8p>?qSj;=bmg|>CoXOT}AM~l5s*Ak@9bu zwk!`%o#@LQy;4p?O`Xqyy)H3vhi!R~d;)*k2(4^n)su4~xbqdznfdC1uGqlEA2^t= zrIwbGdRZsV;zUL(Kan7j!KJpq{`PId`@a`T9N1~`s-Pga-!$ZYXcHNp=x$U)ATW~{ zVMli3O49@dF5;8^c3)OZwet>^sRq83QP}ABNq*-Q;RSZ-D|XQjG2YyNa; zcvob|vfFB7p(jzyim_#&05P0E>ti@4QC`q={JZt$%kk-HCMQd$dh9cRr@Fw%!a_jh zeuoOwk`x*7t3qafPBy2hmRjjZIGJ?{QBqQk{Uvrnzhe1_ z0+q(o)Uz|vHV3X@@0al@r$FTmbTbf>**(eqb5t|YmC{<1l3V@lmG1#l%Y(ha$Bv!DpllIHCy7$)tVg#s;CO;?XzZ@Q7WA#~lgH#sFsFDm< zBUIsKvMrI&e9X#Zt(0K+V0iJqm?Ya9yDi2KrI!*53&(76|gkR3(pVJL2uMnSs~2zU_LsUpJk? zflO>?V%_(~MzTO8P-c92^b+dxV@;Zv?A6CF<_Fe`3eEO?7^FRF^K=vPr=V8op;RX| zuyv!Jtcoy4*^h`zPzS~Vy{}@rDz(~K3!QrwKMU`^r|^BzX(47{fQq;N>@iuY*PNpI4i6pX@tP zSULB8{d706qhwj;YvSd029?_rO`%NvCChXc_sF3)oc!e|#jBpoKBHf!sebnzUl)NL z9EGYr_9SQ9oP9$pLz<{xjn2-vDR@N5&!6#U7j${Hm6D|=jfN+Vfv&vdj@bhJD~EY2 zy(!&MWQcVrKkU&Esav(L^kA)j-kE6r9;1PST|<{*M<=H`?#OCyG3qvo15iu9dM8dO zC^+cpv@O3La;TQsTkg6^4ycLWiIaOnm32XN2G2w`>JFJ80eQUmdherxDSxApzJ|A;aYp+3qwUSNe)zzA z4#n+;?D8@ErnUuEJysyCY_OW@uUIb6(h_q>32geHC9n7D#u=F7)uoF^$l>WYMf#3p z8S_kQP)=tJWA*iFG+}4s2$y|SMuP*96l-0j#|$j6sXiKBD;~Je@nt6D z)?j*-+X;uf+wRP97;>Wjv**O+c}*4l2SPHXCHw6{+^fAGpO1CLT_oprB{Y`!ASo@4 zkDqTlf>&sHhyy1v94rifd*%aspGwCONbQ`Aekn4h+fEAqefHRYj}sew5Ci?f+CEa3 zMaSX&6E=Fzzjx_ehr>CLul1=XoECrSja56&_d&xb!BgbvQzP_w^H6-t^mO$Sg&r&M z>lY0b&SNDgt~`k5i?^R_+5t9`)@JDRe;-UIZ#b5zaO9H`cXmDx*?H|*P>LW#GLmAb+|E~2PQ!619bViOY zBRA{1oS!uqJRaFP3A(X^0Ff-~N7?Gun5kKzyYZB-0#aaXQ@EgIzf}eC*k^VY^J0ZeqxGFq+qSm61fVPd$k%!=% zGZ{u%$5(_Ejal#@?bqkLT&ej4R&B|s=V?+>0uhli!OkPt6FRFz`R>{MI*)>KO5KIg z?aT5p_s=57VKeB}&xmU8fYH4t^H(*Ys z*9Th;A!??l;4~CJ`oG#g3t#ujS|itRE~JsGXKY*v*B=o&ys9FSI{riQ#kbbTW24nn zs%bZu?_G+SJ-b!6ai2Okv^=j&OEbk>Siko!D0kZoReBATOn_El9|^j^VfNBH%>wg& z)#VAHldX~5qQa5Iz=cl_pp1p1N9jJpg86JLVw<3`95dCdgcD2jN@V<_UBG-*Kd4me zGixGcS5X&!W;2x?_MG(f^(DbPF+i8bC%RBFVXUA~CjJE7_T|YqHGojQadGlo0tzuP zoGXoV=URuVL32?*OZNk4Fbs7QDOpZt*-O+V8s~EURPGwfvM;ulGcv?(^$BEmJ`1Vm z98dro|AWygw(&H~bFoGiW0hh|832yQ)#M<4)}8x&#qHa zs;xBs7XQR!OoAE|y{DIyX+u8aajQ$gY4Bj)qx2WpGonV5+rc8)*-8J7$Zje(QOt2Sb8ODWDH3?BBy! zia(rjUgBw+xh(BakZ=h}^rs}3K^x_jm5z61qte^viClEh--lEN2WQE%TQd2nHDG=nxp zj(}yW%75PcYnZ2qC|$gE$%O;=l?$Ln@P4vc-DswxWcAlDQZfDU4tapWsawiS#pdkc z%-{3t(WHg)diF$@xu?3G>oKmKr4PN%Sk#mfr>Jrl4rF2+EAnR zbf&}b@jyNSGWvM%U7m5Bwug6UqIoXm&LsMHd}Eelrl)*brDtMh=Fx3$@8MjaqHZ;0 z5AXO{O?#ld`=dHkNVzNP_*`7&e1SMd;)7y`EGLKcDxdAWsy)|}c$KTX5Wq(*gGg$3 zU1M-6b1@WU>igI>=f+dP{o4w5_RVjCqzcUeLcSL<1fFItSaiP) zsC@Mzm$0EEnv-rAYCe9%#}ZAX#u7%LA@0P<%R}Gs92Q%Eon0lh?Q2tL?2nOFq%~)M z^NU)h1}5PIhQM&rJoC=epUx15MedzBJBtI)a%$;yv5o#`?d)W6z1+zLrCU#6*xyld z61r_Kh?HGpSNsf@-`Bu>=FQIAeMUwVNa$8d3CK4v8nz!g z8ddV_mOVin^fa)@vmp-Jw~|H@w{YY%x2i2{nCGf;=&}C(T;@!l1Iv_U+Nvk zqWxC+WpLMz%ZN3r_(QjDiR64+>Yn_6#;mEc^J3*bvf(WfFTDJ#a?QrP_3U%!n$(9f zGCvwFCSIhXB0|l8GMjqVTM4*400t-}KTwE2>gRWuC4aoE%aN&)%2oXMkP^`ksD*g+ z!j-j*E~8M~$CYMBypl_%7%d?O)da~8q}dU=6za35%Qc?sRyh7SRkvd6c0Tprc4NXlF7Bh${g^(wXq2c=d(woGQzQJ`9i9Uw?pU2NRyY*d8ejTNR zlde8|@#b{S*-1x}7jbePiYwyoK5zZ^Nq=pUlj;KiC#GtpySvY(_x#|KOrA#P*VLSm zk^*?bAg6o{5Ua0MhvmStXuNGhl9IF)%}hJ2Ae`J3+A`W6!FgKS6B&Mejp9ugq0`Tl(>)GyAfCeL+K z%e}(l?&}ZEqygkyNX=xk#!737U1x#$^E{bbO)Am6MR|_RT(Xf`E7`J}t^!d}QHqd8 zxRjZFgAv>`^_Dk55n*A=2RxG}u<=BKvMgih?-nY$TGp4+FStkDPtID-f}#n_qr3wS zP&0w%1igA7aH?eupjQAjr;leY=~Oype|1t$KNYWn-2U`epW+U(>{*#sXfC`-$_A9%o~02o4^4A9QShbCP7`m*o+cwS2LEuX3&a2+VhR8lF=8T3TFrCOteHA` zuj5pCg(nim-{Mdw;Co{Yt-O_LYc&;R#B z5s26@uRz@Jeq7AYzO=V)T|T>gIWQ*XL~tXG6OWh)o%fBejg1#WnaUr`rZFp1Z7lw8>e0=NtcXLw{JPC3)LfJx;?rGZ&xl=k(0$RXbgVI<wxsZU>*;{(ZTIHM#pQTtnPc>2~(X)6TcLco%&iCMr$n9UO`b(bCecJ1f1nyk|v2 zoBUQ+BE1$1yD(mfX1&Z3W2MQmia*bL-6&Gd~G?^vZq!GfILw% z4S(?@Et*%wMLj&?BQy@^MWJpoQQkiNfqHWwRe`Ny!=4HrfzEy8;`n%ALtF0zWce9; z2Ynl=Kq?qiZOo4J7z4lev=S?)t9F;gggy7L%agfr@hO%mIFMK`Li2R0g02tED&w70 zz9fw;;f62BiGkARH%)3u)7u9ftrDTj>kR(ftGo$`iDdM?!FJ9_tsdXSfj;nIz(=(? zD%t5ucAj1|{KRSfUi|IHSb_5G1eqt?-I?<*p@r>tW`MpnKQKiRIuPQ&crKt1|9yiF zE@sOA7I$O9?pvt;McaGFQ~m$%;|C#98j_KjGP6g?NTE>n$j-{jDB0sFLRKOYLiQ#k zdv6Nad&^$g`*%O|dVfEk&-?TK-oF3*&h7T{oc!$_$W{geA<=DV>FU^sbqd9RfiX@S1 z+~(_7fh-OP4i2Uj&Z1*I=@4bv2F}%%Ao1<_Cak*_Z(fW&h4#dzxr5PuMvq2c*lySV z(<50Xik~Ch>&SW)oC@uxLS82;43L8pJQn`#7f-UsxjIu-uMkqwVW80Nz~NC^U=R^p z_%l{4x}rFW?G-=8(<$8jgFTmf4||r9mlwekmVcu8Ecs2!R!wF(G0+EdbRywx-CvFi z5UMHKFl~!_VCzT0MJXP~F=7o$@aH`VsnFu{*ARYwOmsvA&Q^LO!v`o=EL@kmProL9 zeT`wGy%t*4(}N2TM17^Zu=@Icz*GJW2Uu7*g?j7vwhlnW)3d~G$;pF-!zP{mygKw$m*`+pF2Z6X*WG%w#3EEdVU(Ot*;i z<~mxGnL&Jrr>#vTD&}=9UR~vl$Ip5=sIE}Y>Wt>=)=F+~b5{f<`2Jd~Jg9Q}iSj+aVY`E7mn@8)|LT+bef zL2Uj>$P6DfI_dr4xII@G?4I|OQS5Fy<7E*#oK^qs5@6hsBruhG+9*#gU3Co`sxVe+ z^dP;vVy??H@MGPMmJj){HabF^Q}yHQP4?_*yoKB8ZVM|erv>U(x+@^{mxur z)de^K=JF}9e?&tz4+83_px=wy05m7yiN+%*@8`ni^kOBiH1+ivh`c~y6K zKC0NY%vsxw`t)xDXfz(gd2C;7eSRy){tz|>PhK-Mo#u~b2=M{*4LfoG?u(cx5OqG2 zKJfGBWy99QrvTq+l)u25KIF$mwHZA7T`Vm!U~f31jvm?}%_?oFdBSdP{FNi+2CsRZ zOmwN>-c9QoFSaPhMG-)af*lc&)7IkF%uv!5oO4%KItOT^j#0I@>0jO(=+3r${50Zt zM*2saG zjOm&GRi>$KwO1uH8ZEGD`S9ia@$yyil+FWEe={&u@wDI!wJkhtvwl;~G z?whBCsRZ8W)xXo*$q9ijGArS;{r)p=3Jh>$n;K zqp&3-bF$Csdjt-(=+;Kvcv3t@(3#0{6PI_U&NfLIEGd9Z5V17E?E&EWo2jCZ3d0}DEP?0BeF8_afI)6$l$}fR8ONG?Qg+r zhJ!kVYg-2di%)`u!^IOrgPf|Q0d+k~FX5Q?`gaeTwZ2H5K2?aCjeN{5u!lqa!j<~8 zQC}=JdR~mSXs)it*7BO&&rrrdwR3U)FLzoAO-yjvAz7=G zzyG@<2EFv>s;u&TADhL2uz|#+q=|~x(PMLSZsVJ#;7sqDe1Fv}@*LXKC-lLbP9TwbU zw{IuXD03nO=b`+RkD!4$*4FB^+98Acvl(*Z-oZkw2Qzm2S;sTj%7j|k+sWLhpSH)# z5;)q@L7tTNV{OD8wnQfRWV!b+7D;#<=)?mk8^2Vv+(J77yludbD~fs(ch3!bf{Xey zfv1G#lDd?TDmjz_oh$$KnDLH`=%T2q7D`}I%? zP>EL#+@z{nV08MyrP&RE~Q;DEJ z*n*N&L@{u2I1hJ#vY6Rh^nHa9XRKVc=jnj$ZxzZOp)-&;a&JB7G*|=nDe3{h0LUP(_&XB+Pa`fKUWga2a)y>S za0MLKUy-4ir_Z;!IGlPJm>nF0;^MBA?Z2e>-AY&;+&25ZG2Uq4`_12F+5&O-FHgI< zf;Z!3)97G6k%-+dqa(WiTU4%?wZv#cDl;X&pv1kB!fZqOdoOAlAci;5(QG%Q$pUPU zfZvyr;YJk_2v#T?`q$?Vbz7w*RKvgr)Sy|xKLj# zMh>?RI*mUc%yV;-`4=vtcM+hiZf*70`x0&g`oxvrSEzR-HumEf?0IcQ+;$sz7@yd6 zu1>zRf1P(RM7jIw8Odg3)ome(yR5Dj6mqVXXOSM$+FcOE$k|tZb(NLWo@l@L*DeZu zLe4p%w$b4y%fA>~+A}9BJ9>y=R%4>CgU8=XnTS3#o^r256XxJ2&*ujI_&yL^TxM+ zMWD@ZF$TYHp7O{{l4Tl=R}2rh!jy+EnSiCw86_Sf=1@w>uSxukQ4RKfxUh|!ptju> zIPBAyqrZPEvmAur>@$L`d@O!#*H3H-Z;AJ3UzPO0gt+$9U!o>?__MS853jraU^ofwrQ)S?*gl+crM{b?e7P{7VBp0kVKxGH zoKjB@Ut)-VNuk)Ze$Q%}hLh z-c{7XyNGwn+x5o+%fm+(jkrzHdH~hoM3#n2k1V6GATs<`kDNR80YwqA+aInl1CMWi9bF7=+vPDF8Gk3W?+<;f`B1}NFwWp(3>H0 z00`kHU}mzCCG&juXJ~_EEZ$h}>g|hIalhVHRG_$x`{`Q02e1Wr@0^9C5@7mJ{>>el ze`MSLj??R*&9W&$%mhrv>kk%^2S8R+SLz0o z6??)GkLXso9@=DO7pw|hKm!%2k04& zeuSvQAf82d{aD&&UqJ_*e7Is%3T5QBXNMaIdOw?BVYgiz17^Fa&4YenXzx9_cb-sJG- zxSjwK4-rO2Lh8TS-A%_vd=2mNPr?_(do;k|yz#6Rt)GeGpPeYdBR zs;;oJ$TAR#B`Z7aXP}cqE=x;FUJS-JEGTw-i_T36IiI44Lr;GhKKS9ok~3zK@`0FG zA(944Pu_=r#8FWh*kil-x5I)`q!2GfT0KY>#6>VE509 zA|uawRCyA5hLN%x%%hx%WtDG;1V6-p{Qpyh7iEdeF0#?a{*jKc6t%JW_;Vfz`0d@@ z-h{;VH-B*(@wm#OMgo5v>YF<{va;PIXYVTGJW?e+pTmhV4E4eQ9yClMfpZuy33W01 z%&|X||DzPbrf0J6eHqnp`q<&(2#u==yx z0@f^bE`-Qlg?K+M%xj`sS`DsI@HE8aw?zNJ1E`5gJ# za>mF{>2)O(gxAKzaaaPWRqz0A!(Q*0LDWwe9x9@3E5{z*Gs>?0bDPT9Z(2Q1bci?*Z=VsWypu)v#=_YmqMzu7;hRc$#Z7UN$y3-gA`~S5 z^`-vz9t2cu4cJah@r~4$zClhsA{S15Xola>+lmW%@Q#F(I4JOSnCMOEIE^>=RAB|~ zS)ciYIm`)^obs#0+8cu>Nw($L3W^GdQv7+G<{humC1bhx-){K==R8S*<7JqZJRuS4 zBKStC^UL_k`f@11xLM5PJ~V(D$1x9?^K0CI85x^Nu88`neJ?{^N3P}%ZC-X=ZL`YP ztx=s*-%Y$Lly7Fkj~XRT2_&0tP~VE2^#60qon_M}tF@u0BY4ij&Oz1k*@s8lS?>j= z#ba{QeQO$G_#WcL72QTdv7~DGMxHjWGe}9$4fyw?EB$t;ViX4MzCvbuDN!rBmh|5U zpS!D4vF4;a);TOX?;Gv1b9oU{U44*0Tdd;-0Rb#1OLlzdTsB%}vw>W~2Qr_lehsO! zeDwMm?)hC%tFGk$7wVYs%{to-DNq4@N_)lP8%}u_d>RQKxlPR@YDAjZV_qT!y}_TQNV49^^3(=^*9M;bDS@ z6G2cDb%6>lC)d-aZj4=)3L}OT&ggfd_zhPn-@QX*Z~17Ry&#vO&ptylHkq~a7wz@Y zV14i`@tm|Y)4a0mt$U+*d|;&gAuJ4|aPSzr)$&BorOQ4aKHxK^cpu~Ov{KR%Zn?R+ zknX2;JWP`B$uUvraFPVRw^KnUSU#lNy0nbRey=i6Z)e=#_%_FoWS-2nM7pt-p`$Ny z#dl*YS)9&6`!RJ8;0S`%^83$0rz%e8g?}g~ep7xK)|2FW@}?RvrcM&+t*=A^M?dC;*BjJ=lckso4@{h3g@MRt`qu=IuZ)b+ zc-!=eEUNWxQnRSI__G+ZnsS zMqjLGVhEZx+06`je|OUAc~9@;WFmarwB@KOy~neOvbVri?_U?74>o@@YoSm7@15$c z-_bLId{KW$XxFnQ_Mz@4yKarqzVp=b#f%uh)Y0a&qWO4`2J)(|;5o-!_VD1Q_IJ#Vq}F?ov~Yp)knx6exGPuE zQH2!S#(fP9jqJ|n{=g?+AnHu1`Hs+gmPi{hRk>WcAb9q8(26SC89$@=EM$E-s3xuA z^U`~*VJw;n9R2CxoAOV;I&55lIPUc}`*X^oExQWB3sq1VwxB5!bG*{h`A{)zUCPbCu)rq;&>}-*|Svd8O&ClcgK}F)>`tI|={plNi z;&Jw2<%rb2&BE#3tz|>4?~rkDdbXcpqx1mE#tfYbb>hT?kM^xDS)8@UMdvQQhy$8@ z9n9b2pBx}|T8K4NPvP?8dZ3Yg_}|mLO$y?G9v~wWCprDd?_ivr<9mZNqn(Z3&|{BPL&Md2$$vUD&q<8rC*zD_+hYJ1#w!>D5yyK`%^dVMw*O}D(5 z4d7WWbQ{*TXI!vTPz1!GE&%(vZF7KnwqAW^((pOeleUe8Y)L@z=pfdPdC|O{_tZU}d{Uw3bdZoi z^SsjOQMAxy^h-bYS!K8g+?ayBbBlf6sH-Hr)^*OE|8L*v$f5y+Kb?!;1Mu=x){#()pCsfNx{k`z|ZeO zR?2q%A6%5E*iHAWEW#?{A6|e#4lH30mQi^5lb6>)3N}{2VNg$+t<3u3-bEDk%FbN| zqI18IMWRhRb0}PS6Ci`dqFO`(k!7VO|3sCC?~^j8gjyZ|WAm#PZgXLv{(E-cwrI3z zPdd7`Wo0%<#`QtgqQ}~ml^*TsbeBV`zgdBw$`ME{{kGh84ql6e>P%C)vbS~c2C`VI zM#>X*rsJKx5XgL#GJy^mn;xKRor1iXkJB$r-<_H7F|!*N>^Z2_die0+*Oc#7!`g*? z4kg*$X<6qg+-pS9*gndY<~|NqfScQL*#RZ!fK|hDc5{pGuOF{tbVXEUM;FeL?}oX% zUDYhYscvn(BJ5ONOUu%bVf^8S*lt?bO`;s+Im_@c&Y8U>%oVJGf6jt*NWi9T|>Zsl77KVYf2So9B3^q+|}* zAV{Y-o$2Y+)eKuW60R!cTE7WJX%kIT%tl@PR3ajgEJ8I`pt-NKXp5G+u-#`02}jU{ zJdWk2ao@3RuaKT|T-oxMH$KiCn0c zJozqyd^|~F@Lqx*H~JN89~A)VT_tTg!?w$H)m>d((p`eww394E?JVhoi)Wm@SW&2s zm`K70mr1P8kC(ZjFl?8G(W?VB4NZ2%A@I;Y)-G>vZ$I6ClfC_-*%qBm1%xmL%8eSG z-3UbPGhYM<41*1544dzEAm-Xcc8vu z&`Rc$?8?M@F+F7Y{S`$3~i{ zQjCp%+sw|+-a;%#4GW5jo-P#p+Mb&~OR`=!-@BeXQbpP73pB^oJ2rz(v4BEB+ONbm z&ySSBUfa=(dKf{34vVeNK=xHl1~QPp zx?`9IGBWnfu%J^951a-4-gu1fVdzgr!ts(s zJ};%We3^a?&s-;9+F-I_3=QL7;J0TgvRQN!ble>OGu8Yg*G4HYx;THB(hYBdUT6GG z<4k|vnR8cfy)7uXLu`hLV5;fCekuof*>Ey`I&@`zZC?s8hw8+7SiQ3intAo-UiB8N z&eM0pUQTxIz=`B>1h4bB{1wL~m~hWa31YrZU{e0%VK>%Iu60~0SI=kJ&HgQD_;Zi> zf!sSjF}UR-+hyf+XZhjdBV^zV_P-Ty++aABVeXvf-a$5cE zC~M?cP;0}RaZaa(BV?3k*CoO*!j|$e>oflph5Nt-`Ji(l4VhIcq5KNtHO41iGyK6p zO3!P+J3J{9z?YM2MyCOyi&aQ&6I{9>ux}dvAE*RjWFWPE?c&v|Z)OZGKv4rIS{9>4 zdm)>!VT*2njIDeS7j{49kBBGKTgE{eBZuxJ`y1!&z`~!9)z7X|rH@XgL-Q6O#Jjqw zzD(S|mD5KQzwvs_r#|=o^H~4i!U|iwHXAbgf5B$V`Sd>G;X`JXL645|* zn|`~SX`ujxI@m1*9Y4DCU8l3?9$FGC(rf$DbDkn^aIh|X>od=C)>X0F!?LqCj1;H@ zx*mH^j30W~me$p(ppV@lYAT0^XS&iHi5<&9WBKx>I+>gTa!kr0DW{pXv9~_w_+%`f zz#$D5gzDoQP2jWYy^#s}mHDG{u+k;8nQ8iz`rrsz`#Mv-O&>)f1}G^&-!kp=Wi17R=ZT`uR<$&KT^SSzE{{PfklJd^l055pH^qc+7l}7 z&^(If#b#twgMA>x=qIc>Q>4e?&BaLS)7ws6k_ft<=+5`$n%?Y7U#;p{AAMpcX2uV5 zE{?JlByh4ub!Q!2gtKdIjmZs&N?ZRX1^(0ur3sF2zcm^Bw&`OI{BbISyG*)-;5C|7 zfQRJC76>2rPY9v}rhIrf?sAY3mF(9(f0jKAzdR_SJ{)Op?eEEn{U_?CKHbo1-~(V? zh+H?Nuw6Ri!S*hZ-w6nKOU*2`_c}yWA+e7=s81{BO=Ty(%ALwffBQE!8i&-qUr*5i zDI^NUa)KH3zw;p0|APlXj&B!;kpIAgFnO#yU~yW9K~W+NB)Y}RLbb(}qA1`=KFAvj zbtiW+F@&6Z-)M(_gSb?SFp~95Khe#2dB)E~k~3#Lb!YEztYVzPu(Yyb{&*;fbr^pU z(hohx=YG4z*U&X!Gy1t9czAf;kdpRWR9`fh{{M{!G4+|A41P}ke{vNGwWU;4ekyF( zLy~vz_LRykGN^s?hVFp+s(C|NlmbFnJK+ zBe=;tOa&@0-8IbjW);vmn_Y>tklYB>h+2Q>XrV(qool+3tS zboSaANHF_9M2R6f=U*-3d)xQM#zx}#V4f2Y6lPBP=;ZoJ%}BV^g?7q3xs*vI*-U-AlzxMGAb6i}H-Z#IU#;;Jq-rB|9Yw0fX;SV5Wb zA3hTPd_U&v7~-z;4ChfF|J`V8%Zs9W@6nvd2_@3bK})L+_#HH0j=f;mBOJ&sEACVb zKgLjjOf}+u!WS0v3l)D|m;k?_%nyf}87ncJ;It~KYi@Hj>NPM>@$#h0Zxm48Cz-t= z;)$KO1o)z87}Qt-eYc8ZC;T&Q(@o}yF#}vWd) z^@{2i$uw&namr)kIX=eQqF7s=s&5Qyr;Db$=vt0s!g5uzDQ?;f8uz-63)9`9qu3T+(aRKx73P{@(QbFU4Mhj zuM%UuZ9d0yR`=>ByeJ&g9i(4kx@+scn<6FIKb%(GC$su2f`MF+BmE1bNdl4n;9d0H z=p`EBW=HFJxBCxt)6KC^k-O{l4Q-^cTW3&RsScw}jn|SVm!4_e2z*F=+O4bgvGmgw z(;qK=FT0HnW2tH5PVJ8b}U*Q}Ln#VN69 z208dWRX*@y`&FNz-Nw|gvJe*`&*s|eM>lGR-N8;qRkiPy%^deVH~xzJvi!%+uoe}Z z3v?86c`AKl=P^6*x8FubLof*G2j`x$(Z&uEr&(DFXwhTZ8C2D zEfGcD{@2ZVbnK9sfpjpYrFHEx$1`gR9tFM99Ud) z?S*mi)>23RS@NzTF|IuGUyn@ro_8*l?%@lbLsb+XYu*Te^nO>7J=aa`;^D<@!?d0h zy@&`w^J@|ZUICp2jYvm{P$r$(u1+x}Dfhi|Ue(qt+;mT%pu)q!$!4iPE{~iy)p`D- zN#FX7yyp&}E^99F6opcu*+dJ0Fub{dwL8D$B9p4@Ki~D;z{>fXQ;5sXP3c^Ee>TMk zEQBIBx>o*1U54g_gLA2|Z4G$AUyKMoqB>O75&O?K~0nxtn}45}PZ+NN}u!zWm?xr`cJD`f0gAROIaU&emx+ib(a)lVUq%)753nY` z-3dnC+f@xDz;~H^HI657PBrYdjRXr?m`sSCj$5Nq!q9rZ=7NXkn?{qf40eQAs0yW@ z=B>)&;^8gVBSR)-AD)g#(K=TS(l4$u_;_bk;0bB^C`ILGo>!lPqT^IJ*h|&6rhciQ zR?X0e%A-chsZ|)NW?(!L!A4P2EvTO8AE5^Sk#XTW7F>gi&Z4^<9+t<7aPY&wU*g|4 zfEI+blTuUjyeLi2bnGA1F))Qq4u zc<}QJVjFu!m~Y?wFbAT9LhP~$vv>@C!Cxm|LA9s8 zTfP)y?y-)R%x!BX5gnbFVOFdPB_?ie(In|8)~`cQqi2`FI035m=myD0ni>9HE+Nw@ zYx(eNelyB41pgeKyn{m}*O>(yTzGp8%ZKklpeX;JYg=`O*j;0D)D8s79Pr`!h^{$$ zaHsrda6zApdZMQWJPQ8N_c1@7P$-luIePq|*s=!}!?~s(BT%8LWNp%;;I(Vy8!}2;OPV~+yYoeROU2(Nhql&N?mLHozqdrV zpy@ktB)~-u0F_^zDIYdEJFcy-$&@GCE*BF~Q7ylS81!jR;$EdW1vA~$9&Xz1%hs75 z(@L&8UFn|j$VTw&j_u^zROYp%u_kkN8R_yS53=Rl){mx(;nv}IY~SfRzOtpT=mTff zk_k%ZmC6SWlYw5`$RX{}$h6Rb?cfuY2pr_>9NO_=cXMFbx>eBDzVk+Y>^f)_o_mJY zKIMdjB6TqRP=?l#MK?ywfiSmY_tm~dn|vE+292Xk|ICzbzWfgGgc2xQvX@i+8Rqa@ z5^HhLQM}2fX?3oelX95$zOvh+V$Y`c)`_wc&ilXUQ^A!(U6xt`P;sPV=2t6>4#lA0 z$jF5IxP*;kmIZlzB~y2La2;g&Cx079Z_Ep+Jl~2+RVa?)w^@j_B`#MVbzX~a4ev7T z$}lDDN+pfkT;w-yEMArfI!7fGJCjTn6rYkMqw-4eY~-D-qfi5=b-1U=U!Q7|Q8d?n zTe&$j%aWXrKh?7?AOiVPyj&*Jqpeb0q4qj0kX~5Nm$)=T`Q|{X^r8cq;I7!?Xx@&E z+yto~!;Q{A%=1l$ORzJ0rlcc_Od!!eG<|-w^8Vc3jGj+n%xf~<0=fG*gsr*hsSL`Q z8W}RIR>KC-PN|ofl{HuGN8h1`q+KM~8C;Sf==3Aa?VRt9Lc%%pQXPi+6`&-!%@xCa z?c33`utmp!?-i3nw?dPVm{L#zi??4R4mR><+vsCVV^m;k@t3!$H|NyvpK`K_UkD^@ z{PaRGQCRC{r(O90aS~*3PdW~Ksl@6k-dYTbcU&q|A93C)HJ^Qv_N+BL4r1F$<7J76 z*!8}GRnrY*`6zy_GbO{gBQe=Dw1tf8_w}FA_FT{pQXy z9Z_x-78alH&Qz)Ox!~Zq>hYa#=vCaXR*9^L$m^hZwz6$``2H#fyVmFdpQ_F$4!`zz zp4BeuTIp8zwbq-c3+FO?_BsG-)Qpjlap$m@2$6BA6WTRO(c0Z=HtG2N>~ZvA5lnUB zn-0ZodC>L>S$-5ry_DJLW`gS1m?Uw5I1qxH9yn~I$1!P*8sRbDXC@PL2rk=Oay&5o zA>|=tVGdy;SXl)QJD9$R8i0SZL5Rbyubx1xniJeHMy;DaIw!ITjeNmAGmWH}_JCMu zFXd2If!sAPR*4tddtPW>e!#1;H=kK94c|Q&?Iog$d+utR<8o;hebkJ$E>GFl0&nr* zGBM_If)6_p8=N(p!QU<3uhu-s(O&yRAW=R8dUC(kXB7-`l^85btfpHSxmmuAu9e+V z>k-wA^Eg9nT=hmGoLwgf(bY9?D|n&TRU&2;FhFE52!&87=0hYPUE~9s2$(pf>D7;K zfKx{ba^$k}ZeAj~FLy+CsE8w+!zvZ7fJv@mY5BGVj+d^ks2;0<7(K_Ho*-_+7IGi& zLJff&LD@Ku<0kps;0{%$%}|kbm#-vM{udJ zwRgbcCR*j4+rEizc6{ErRoz?x#A{e(?41dwnoypyuEj4sspY|fD6pmR~!u6@Jm;& zA?SZ2N2MxGlm*AC*;@JQ6K53uSh=}f9V)U_Ds`~VTc0p6*AX%IC+A^m*ZzrLZPLCj@&ac$n|V`S?cJO4 z^v>fh0||GQ7trp<{G0o0arjOwHnof0;GsbCp>dKd7jneazAtd)+whqDE-k;S3SKR^ z9wy7sia`5VFPGXD54m(a<};aY8Ns*C#J^mXr}rQT7M?G{N4rwxn#e+QRA8XRUj6P? z*SaxRp2f0Io>8Ah44SZS-~R%X9xUm}!qW zh#OuT89+$k$* zvAm~o@g_hxXSTgB6(u}i%TO!5cj3Z!sdqhJM4S({CuDYpd6C0=N|_oG`9n5oEz!bR zFu+Lt#cOM7K$=lJf4EzU;?ApX@EPK<9Q{C<*ZA{;5LA}_ROjxniW7I(zh&QEKl`dF zrD~aD>=pkIre`@7ZYF4Nblp^RltEanmbc{FS`iHw;RkwJ`}soKqt}M4w<70yV@h$( zl6@JlD4qz?^Siq9&0+m*S15T|JLnnkIChiIjg&_p9<+bLTn?od7vOoM+NbJZ(Rf4$ zW88*@fk9*e?Y>a5^itu^{px$xn+vM>dMVQiAQTyEH68Q~YT+R5SuHzzNb*~qcXS@o zeT@PMDQCR@JFBO;?WQtLuD-x`(M?mz4;@dzlS?)?@$uy=`BIw2uX<`!w2LS0Y=@k^ z#>Z`pf6nEZ*XNrJWM;D+sd#%|;eAxH^V`PZ2pou~IJoI*CU^_&+mnntZa}AjMMoIa zbY%X%8O}VlzauqFFSFN~rY$qz(u*u@j_L0g;5mRd;!yvA^IGj^7xnMYt({M!1r~wl z2T|!Uq30L|5~W4{e-3OJqxSv4IZ9plU_EyrI~v)oUEHgvxJw~?c*KTRY_VJ>Ful9p zF;%o&=E$v6bxUyNX>_w^4wNMBj{CB~s7Q>d#xZSl^xYV}PdI~w+98pQse#v`yJ5fJ z0nImmJCi5b@6Ou(K!kEt1of7-^V#<3+_zbi@aqo|2SOh$%tcNx!nkOX{qIz_QydnXEG_E3W>X@lwQ^Qi}Zb zq4qW6fPu;1649^Sab~hz0!&xF=oBq}*Xl2}jfO2R#&NlLI>?d6uHCTh3&vbeez_;1 zqokli%^cL^&L12(f7w|ZdF8K=XQJf1F(uApKG>TlU@%&N&~H2`ujly_CO0=+8UgYO zX&_c+Qdwm$=A?|V%)G#P3N|Q8dssUTIv)!1jFTSwVmW1tJa|WGO+NiQLfxc~J~|cF zLO9WPsQV7La9PoV9H_Q)o*a6c0SvShcBY+{rC+tAgfhZ{@^U>IaTr*@q`vg&&e}st zdaDK8D=iztj2N^$Cxf|ExGk844!@f8m^^Vphc%q0BZrYbett}wFQ{hLzCvMK-m}Ff zf&5yV-<#tEk_AGJU! zqZL%CYI#051a|ib1^2(qZ^Aiu-ebCcrXet{|Jx2ZtSqWUh}~?Bv4Y{;Xr+76X1^(q zQ_cAyn}Li>mz^#wB0d?d2aOMqg@2p)h86L!zd@Pt1RqD|6EbU7e*Rx_?X#t1z zWN|+`ap9wN-%Rf!alQJoco%1?9vIIW!opB#92(_f5^uA#{}{dTA_w!>f;%kH>+mX6ts0z6L=N6Gy&iWmi2QQrJ&~(>v+^Bc`GO^R2 z#w0S1edGKznwjyun!PPVp6i*kwVCCoy`RQMhca_s8N%Qi$;TuhkX~UGQp@Lw%48ir zcg9DzDL5s3cXwS%%b-#vByU>6fPv*{D<;IBqt>O4Bblt4hcPtnUbA^UiAL!2JGXI; zCjn{ZQuYw5($%JNKl+MQwd1wF0@xP+8UdEwwb(fS0f2r8f~-+W$D0a5+@5`T2=B@gTU zyN6BVYc=Q-5%$v$fe9rvC3Yqmi zi56GaavOAP8OC14=1XB%hTL}MmwU-?khgoew_BgHNyk=W#+`GzGv!p{Y;a@EgK;Si z$6~lS*LE1UbiyB0XH~=aDG_-Zn#!DAbpzgr5=}B!PKG-JnSSd8*XffQj5wLv=D__@ z{;6=FLAUFHFEwvXADF10p1 zeb1zrEXy(xg1s*T@xIXYl6#+8ZbYGlv#UqJ`74%_E4TM8!QHY)H{$m9S@2i3LK}@0 z#h)cU4|$Hgd4`Zs$-$%u{I_xpRCKGte6x6J*T#rEKzuvbUr+w&tV zHzYE05rVfTB@5?@K^ZC?mV)AUh6A}g$XwqqAHVcD{%7DZqu)R+rtHg7=ct%-GAL5z z6N11fBP2LDeKME`&=H4XI+VftuDPW5ZBP4XnHqE%_v@3O;D_noM}*vYGU8NmfAYEFWnPFbldb0?x{_bSISm{hY$qa*BhX&3i9dhh zpDoV0PMC0P{kzTLTbus&ExylN24Qk}3k5i4;tlpqHL| zjk~m!Jn|X~fmMU42%eEFsT;4erbSO7)XH61%dag-@pgkk*KeyMkB9*<)DX@d*e% zmLqoq>l(tYzaOu>eBotgxMf}o3pM(bAjHTx>*pu#%Ooz^WU>+3STjHiYs|vta|8W& zX2#ocjS{4Q%(1PLynYQa;@Y$zWLnd(d{xU3OYYv=MlwK=-$`1&U3Ev@T|ZZ8(*~@z zXRb3p&*9M2rP&32qCyK>38O-VJjwd6rv8gGjOYJS6C#mtvX9-e$VeQYiD)tD%xpFoz{bXzOIzl%CnDM3o zF0?Lu4ww{RZ$);YLnL>b$ zxS?Q6SHY*B%bd|F8t_J@`xjY->8BsPScqff?hT2Vx=x} z?k?o#kVVHhp^(kccgw~-6Gtfv3HjRov(`rw?gFWCI;AAmi)~t7gvlyNhUm3`NvFm_O3BATcpzvC+eIM3!c#?I3m(!KWS+4Bmku^FlqiYtzXN`brY* zRoAJE27`^mHxa$A0vEx>UFT@e@)g7a3~1+8y>@2~@0hFj&u4Z;1_)$oMwA7Wmv>F5 zk#+k90wfCz&vgkXQRs)>s7QhoS5D_YGN0@zbSfUG|hiluZl zXnAZEG)=%D0_cVep~JoEXhb49Lp7=TL4fhZR)qD)ggf`v;&m17&A;qY0XBA#9ck@m zhPuh3r+L`;2~M}w%v!Ba$5f{(=lLv^Wh6zBZQBLb z|G>lN|7Jc#4E0R6zr$BBFdQg+LyP(%d)z((ip!q-lD$XjQF=+6O9hjQw<*iESOuMy zH9g4oSn03R~`Jlq>!5i!wQ<6%@LVl*gt+oyj7v&8#rpzpby!Cxb|; z)-fBQVW7riDxbU=8sQB0=h8b0gPfW#u5sY9ombYd1?n#4F;`JY@`%_XboBCno#*4< za2$$HWvv`92mga5l1n{iiFUf3aZnm$2%6@&>w2NV&2qT8fL{tjb2Z>B=hiP zL(`9JDP6Sr*UD|0m@!Fd{AddU>+Rim zxqZCZ$UihHKtI918V~+gT$2nk5mzu#f7oHG+g80yL_(JqB2`QL20bjdS<-l18Iw_{ zN%v#7!++5S{|^kqf4$`7unIe@RI_Z=tSFq&8fRZQ6kpZw1pgP=r%zp(l+&q?P{83~ zp{6L0$wrC#cTr%>kXTi9Pq9$)`p(Yk_hgplA3u~KZXBPGX&M>P4(wubg!2$X&+&oY zspZ$T`YFp>ubllEfaJl$&&2#Ux@Q2a!V1OFOTUxk+zz+FvuDU$c=AJwP&eA58>!*# z9bB+%jV*%N%-}KGC^Q8pZm_h1uF;5TYdaswZ{H95=H0@R6ThT`gC`t6U~kF<>gIiW zM;Kr)*N@Ftwy$n76zr;IxM);jq9p(E{`z+^4f*ec+uaL4qIe$U8vbO=UWHs)pV&AP zBM6)*^P)KoQsEa3aQQ+G#fFMDWh47H)@PHVC4#{6D+VC;qJE-85K!tm9`0XGpQ99r z2M6tt-fc+J52edcEzPWH2^<&|xeslGhNn$>zGu)GBi-qR z2xD=mSS5eBU#k4*uox6Y;uKpPLH*f!epoD9u!uQU_YGZ&O=LeDjaWj~uux6s(C0K) z&Swz2!HH>iONy6F6d4cf-1)7;t2p*bV z0j6ScBww59X?F!E5o;VImI-MBz4B^FBWQl}-}#UEZs8O5;$P&2Y`_K77yaW26U+f= zTypc>d})#)OeRCS&oZ=1>lQaHCtCS%0)!v$}^hhgWGvf2_p|=8HDxM9deRz_D=ZSwt7ZRAcvTeX*|I4fTC_>}Y+v^W-jjobz+@PS4T~b@ z$?0qXvoE3J_1vIlb)tR)lSM(QA?4WxoKBrc{1wlli1*7n}J# zU<(VJfy@~PYuUjvi~euk;AIrfV{ya1l3HRHpfCJ$_)OX008{IAoRVNr12X^DCBQ~K z2n=)Pcenl^&1@1u-5GltL7n*{aX!8S3225T&$Qckk}Hmg3K=wGk?AK21x1IsG&a7u zwN}1@cW1A1-v#J0v(nwu7!6ejnI-NDZ^nOgE-DcPw=bd-pFK|9jZ_{qFh<6mylhh< z;=YUiMLDbJYjh=r?Y=_R{+5B+FjArf2qOht?BBjmr}8E^*Gw& zD_C`Jb6HVeKRCa+fVO=3_7`$p6Rp)-u&@NOW=CU4K6oJ*ijw_ERF4=gjBh*t{Qqcs z&#LM=A9^U=Kp)>;bQSSSPSci?E_jTqMx^(4JZ#_L(8nl((|7MTtWpoS5 z7uWmzQ$MuL=rR1p^LG-&4pY#boTNt6R+mTrp4TJ)p4h8<{7YUxdYugu%B}ed7|@n1 z<;Hhji7}9mql@9f<<4&li}63}(Kvo&%i)lz4VrA(P=RGUuqo1j6F~iXQs}xPF*i~a z5xti$QS^bS|C*8_1A5&KMTEy7mRwRfQ5F(w=wZOPSX>hpmetlK8~TSBm^-*3cAwry z($bKffzsCG{m1Q8J3A`p&d~f>c+7|{yPR?utI~(M=UoMs-uE9p(uD>V%)45Xd|;Yn zfv%`ET1B2r-tR2Y2=+PdC2>i96jtBOd~GKsIQUGM)uQh_F(}Pq2pXPq*R{;1XSCwG zzkLgt`Ek&UkrEZFIHy`Y)B{U8_VXXa-GAHp@UOUpp6ws~FD8vcaIguZ{u#n%BFq7U zYjh|g4}AjQnkPcGt*s4Rc}HS2Ix^?{_`wI7e89>}XlrXj09?0`W`6nj$rJ0v0e-M7 z{q8gkAg!YEA7EpmE6~f5V>UN82U^XbHRcV&<;$lC;PYCLk+MC|G9kzE3NWH`2>wE6!0M=(KM9_DoC!l?6w;j%J-BiqZ`gBA_fXFHQW0Dfea zE*$l^@MD4wGxGhIW~vVZR8*^zsXy?;e06QD!Pe$yh5PAFC^kz-O3r#;jgnJURYijO zq}pLFxkkfTP}^jPX!-{AkNY@{)O=Rcfyu)lq^OtOYXuLsdjVjDBFr3mnyPvWj>w6^ zh()V8)9l{$_6HnEO6i*46_SEM_T=M|-Jhn21P}oO^4|dB*IOppPZN2OV~@vyJHKi$ zSeOeY&{=40=mbC7AJzlxMKm* zl@Fme|0%HaIq+kCKj^{g`qA(|hNbT;wp*K6T1v+`eV)8f)_*Ro=pmi+b}VBObT#ZQ zSCT*>c>{Yc1w`FYJaacV9@N>;3cZ4i4B|WFxF%awT|L|TGP*O8-*TWjoYyo8==U!Y zKIgA-b91-wqfZs|%Pc`8^)nQ~=2V%2)E3RVQq>Y*9AdI|r3Ww}2x~ zR^nI~D0otKxSMQ917#ZgQ>WxVuxl_%L&46*Nh8q3#pS_fgpgepdU^f2z*)ETbf^}+t2XDO;ffd>UYtCM`7mxJpm&3ERoJ;eWT)rCzcb;*7$M>hKAU9BN?Kt+!yAQpk@p07Eg@;pusWzo9Z7%d5gGzH~&ND%Vc}<7Z zA0|8ju|F%Pj6LPbM8(cG{rB?*34J8D*|Uwk8WeJUDZ&(MOdj16d~XfVldc+PbV znzJH!j32`=ci$qJ|#UXeb_BqJ9m z>8D;}%oBkCD-Uz-6rsE1&>lAAt!L#JA{st9I6l|`5YZYW{PHt}UOiEVO}hcoipkO; zOz-^s!WjK1IYpgz*V}Xhgue+c{tyHA)D|xtvOeNQ0$@>*HefK{R14joVjhI@Em6W7 zpqo5f{^kVE<^>VQAG_-_e{6dYW%U3h5*g-d-{ z{$1#sS>GNHfb}x$$*Bj`_GGq!C(FR8*j}X!_zZ|8BqJX|^CwxS>Rs9r%oRu? zxxFt3M$EEe*>A)H7I#1H9!1NVy86)(CZ@PQA4y=i9G9j~h&JQ8JiaF-Cjd3UI3-Ox z2{`!o6rO($s2Y_ZYt4eQgGKrI4^Ci0&5vW^q{7i5bd&DeLCYW>dIt;)3?1oOxBaMY zR`-7e9c{kjRM(;&Ld!&L5bE2Mnxn(Rr^D8;F=;dxXwc;EA9X|c_uu%+917xDrXMhL zzy2-w#>fF?KuR>Q9Z8RtFfmqW_UaP_p zmg(W%gMN<&_BOf~V`6fa-+_A(f@Yt@I|!oJw;%x60ghHe`GDD{YHXoht{J8|!C8T) zfDpJMnh4gnJ`9d7+o)hhZlb{jajAjZ3ylnAbgKlNqQvd(*HC6+78LC7{~8;~8PSxb zno5wNI@wtN*yCpmDD&7Cv0;{}(1j}31!x3qY*5a$=vyFIUwaZ09i87GYWK&g{ux)@ zGw$!A?gT?=xByBVj&IG|-~avZXMw+;2Ui({wLM=2*yM@$QXC=tzLItN3JMCLe<2f^ zN6P7g`@1hA1NB8$SSA$@7oC?p5pY+Da1C5>P`YqI2`X~$rWYYiFV;|G8*?&)5Mm3w z{;Q_f{|Nn#--=-VQ)BG^<~{$n-tre?V!mDlzXesrKt_O&h{TJVrg%`GSm{UOVx*QJFwsI(+mumXa^~{4LIM1Za?rVTQ+r&Lbx2O6vy@$Aw2m=w}$QK-OYt$ zkUDkv>JRwmy?%7CV(_i1ni@k;ScT?`j_J0z&Rjz!=)AcH0D^#+SP>cnJ5tqng^%{v zvU-g^L5PKklJ82Ob-(ji=bKy_uu>(ngy@leKp#VK^jDfk^yJg)ot?6 zO~?ztFz{5^T7%{_7wt^?f0)OWLf$V_vsAqH5S*Mo%%}LOa0L^Sa?Ix`#e+y=TKZAx zUCrk8U6={`9f4oiZ*(eYYNxr>{EjTW2Poj* znCtG&ZV^eIn3!-hG!yt-2;zAtK-?O%MPt&8l>vaw?{M-HhG3#1;*>7kdO}MF&#=7DseD`ayk0=perB-8Y|SG>YHx3`4hBuztgocd~~P;fA$1=&vKsq#D=+sizF0Rp2&+L!Yx4(8X)_M4W4F-nMwPosANCj13*Vgpe1 zJ(i}r`a7)UquAKk;CS01yL-Xh786oVyE6&!rRq_ouoz*C!h7@C zyD%#q8t}=b+d-5FzEmBn92hNzqQNxyy24!(SQ@~GzoGw<9Q-9f*FwJonCEK<<8snQ zVq=mH0^oeS$ie!PlEYnOE;ybr%DXuU(Ut zjFa!ybTE$U-&`6_htBmmK)H4KOV-^QaP~lM_JSfdrvChKy2c1)WF?S!?0}H~K(T*+ z6fJ_Ldr>z0$mf=zv-oh;k`Ou|JL}j&h7k_wU2soVq(Qe?;rBP$T$4co;q_KA`%!m_ zc%Pe878hF6(dU||*YF%zUv1%AshS|uY*k6b3ovz} zpLfbRqmCZ4&GUB^pdq9q_{xJExE~bjWc4rDAMQ-8<-o9}oy~xE?;gVv4Iqb4Ve~{H z--Xd;!KDsJWzU^G8wbWnq1*zx-?0FAv{r2%@hI=_MV;oictOFYQK(Q8K&ON{*H|$; z;AGXboOiy4KDzY9hpva?)}P7QhV(Xsg6)L{_} zaj2iMf@3x*txi}NWD*ax?;kqg@XLj8E0ZWY1`4ue_nS+c(wNO>_9;_ zcqgD$VJ~0RP$ymnsLsN`Fcv(1UHylg>?dw{9i1;Q?|VTYDtkqz8E+So%!!%)MET1z zrVbd#l`4whc-TOovh%%txWW~3A!*>Rk?9zKov7nn8LLXuRbsLI42=$H)E4g<9M_t7 z)2KNp&cnzz7U(+x{BzyvBJk#l5H02gFqq-z$I0Z#EVn@iGY$^UwJTSua^D|W&^I z=Ki}AA&;yeCZZ;XB7A_q>wSjlufVDGl{n-#zR1qX&em|c=Svw2M_L|1mf8+`Ouc~s zIy+}SQMKk7tHC#dGR-xpDnpuTsZl_G<%-1U=xAEt`2EJ{+gcI4rd@E?SEOx+5vTmd zKc`JQ;eLz3$HQiiwt@`zPZ8Z+;4sOt!%!RvY3ww}kUWO8GY2J4z+^NEUAjgd zqrC)(v^WS(w!!UdG>{J2OQO z^LORUFYtZfSY&=YMgXA{8d6n3KY7^8%GxqK&ZxIsu&)&X_d&z+`>DJrVTbR)f7|&Z z>uvX7AC^vBp~AwHRt82|d>g@W{6O|MYhWvV2Y@cH1_BhAGV9D(Cl!=+PS0msPCdM? znj^(K^g7OdYcVx2Fwn6dMFunNUqL$_@x&#hjDbv#!U4or+OtiM9s)b0(MEZEhKzX} zb?)7(Z~IM(n&M*a1Vdhw=t<|SjAm?`i-XCKt0h79_3qs};8(k0Dw`FMQpN*6DMk_7K5l+^zGqi)x<+y1TG7%GxtRkH8}5P;}%?LK-`5h z-y+B_Tu5$hZPiHw-Q(QjQm;z@%#!W^=b-W7B{yg*`TLhnOkT&rC|yN!9Khq~;;LkS zgAPQDI?i$Z8h-u1)*Sz}^0N%tBsF2n)M59On3=Ad5MUHDU zF>*kGfTBCJ|DAv*afUpm2hLftKua-@V}Wh@3hL^S$7#axxkMqG<&nEU#zIg2>mu@P zFCZD9*W;pqRV^H<{5LukQYr{+P;GFO5f^_8EyQRy(e`m?88X5NaWf<126T4Pou#F1 zmi&Z~t3RgQVl(bx-M?@&g^5`|E-b=L|Le;Ar&U4WxXa@YxmK=O?;iro2~L^=FxjcI zLV`7b4W4KBrX|X1H!BUivoLwIcoS1@dz|kf|9fH-==N1#G{FgF1yBDQ_CQCGttq;7 z_qLX{Y^3145q5h4LQU}RLNgWd`cR4BWvh(hrTjD6>0UBrG{n&f6I>+%ku@6 z)m$YzAT$VauK~o}8yNYj ztV{_#=pnjmdEy|B^o5) zl68Rp0g{r3@4dMAbB!;dQ{JkU)LsEdndj^f)_Wgx3=csn@SY5Od_9Q*^+dn3gro0V zpg4^o4clsqU}sl4m$wwa&0h*bWYF4kIKL%R>Hg{iI9f;pd`cDMQX`X-IK}&|$%@ID zKw4>(K9B5!T;HPp+1*5<_Tq3k@YV z8ZN!a5QLApVK#C{z0m3u;45qlBO~JoKsK-uEDX%v`vNrsN?sEhI3{xvJ{BG?P+e!e ze0(*HRwd&qrMhosH!0f(g#V!JWguO&=w12c}f8E6&_}LZx2027tV?3;sO_k zj>Z{-REO{N@+GKayo2!htm5q{7~Gg|V%HB>2A6vAwcRbzXU{Idc|;dr$u8uY$o6i+ zsHN|7yzF<`x44suG>=F8R#hh_ z$mtxHu`tu@TX-&49=yLKAV4i5B4Y229ot|z(|!etkYWr$7>tpT5qhKnv|Ln_zJbNr zE0J5xbrF@8mhw4n-vES69CqLRMboF5+&N@wDq(NusXCxvJO9ft;Xm3h_XIk{ckFrs zD-PHB^^+K>J@!m}t@L1Q@G;FiB_MfTINWKFJG8I#p{-0>ib~8H^gk92-VAt&qdXZM zK&YnNMzHwhy`{2oKpvuioH!v@%>ihU?(5@oT4ZnjCg31C7-))!1J&%SN}H+}p_^j* z9=Jz-I6CSLxy~poGL&vOA)=T=N`iV2*k9scJL|JPRr@AT5@pu;yNlg{wTcvRqK53T zW_h&I`uEGm@HYUzFNuht^A6GbcG}I+90ZPJ`hY!N=HXCET&IEg>V$L$lA?06MF0eW z-4v50pk%gKxeN9*GC!Zfnhn6+5dax#>KL%U`Sj28gGIckV*rcSULN_0fBLjo(&Miu zIUe1)gYl;oCdgGyEg~8PL&C>@?NkKS7g_rAKAe!M!9>Iu$DLLEzMN~2NV>zQIU}WW zq-64KNRY@eQ; z{bBlbdOeFXAlwW;YeQxYv+^jQUf2pdSZI!rnj0Sort%M3&fb73bik!fccorHD>kf8 zVnuQGflN`(H@OHk41{-m8v3S^QJaB*qM|}hyX2Q8eQy}pfoc{SPBr#{09+2PxhQI|5XO+xA z>vN)9tm~p3u12BNPssm3NS+K-UX|pKXh9O_l$u&UP5;{3S|#dl zoe%6auqA3&a|}8OpdeBSE(&D$NW|~m)9uaD>os}lY$+G9$>hENe%PrOy1FO)RQ=#!i?Sd& z3;p778A+<-i3=Al7U#vXm z7X^eRR*o4kF$VsOudiP$wM|)&jp54~_v1@H(+H~2*Xrs>UvZOqS3!a2o}?tM0!vt~ zSeyL8sN~+hz&zut1;e=#RZvoK<7fLR2Ea~k#1`#Ax>SU@owptRoj`y!VdU?*v&IQJ= ze(Bs{^GHZY$Q6Sjc;>J5P|<6uriO;oFumUS3Ckt?^4B`wT7! zA_E-3hH8}Bc^;mfqnFRWkMW;56Lsmzl~Z+fErB0DYCjgVv3U#=PAfaBh`v7mIyy0J zw4&_o_3nav{hD|xKSK1YW?0O63DW=!8GOBX61%L6VzRsOh;0|KL_m`Ht6WvowL_xu z6EIP1XX$pfJmZ<4{rwk!CrebzXBTG(k{IvQ=l)?i#k4qh)cs|lbZkZiCydojO~{1d zOU2l(--Eyg;U)vOV{2d`gRtuP_U%bWsP61^A@`~kk3`KS?kawYr(`Cv^~f2#?K&r9 zw|WvrhTnu#0g8HO6}~H+I>({_*CnB@PGd4$>Id9>jMYp#%=#g7HpTom+6zuAEpkBslIwWN1`5_rX>(;0$pB^wg^PgQsza|m!C+3GXUnj#DzLP$5QV5rP^@J< zh7+HD=JElFL;MlFM77q_n9?Hl4?7%(dW$A85l8lg3hBr|1Xo_io$B*iKEH|}KVc5L zZ#CO-t-lza@H4ot-fv|<@xMOY=LeqXnMD~`_41`fb`S-ZF9^<$5qQetP&qX8b3z1b zWat11irjBZ;ejZ4`R`+8K04TfeiT45g|DE3TMn4d46sZ|7HV9O5zFNvMk;_sbpf19 zNlUjiL9bL`-E%&(5mZI%WP!RrV0`r=8zSItL?MqDnVInhMspm2yVdFx&G~F6|0&OY)kVb?;SKvl3^YKwaR@u^4i63~RM9MZV!#pwD@=(#jNhi{)F2rf};G zAt4%K;@;bD@o;g!fZ_Ij6BH0&;N~U=u+CMmglBGxg_*2ZBz07S2YDCv0@K#c{r$>4 z?E4TM*#1Tbc`zpoX1p5l6N8)&&7^>jkCFMv^%|-zR+C-nS^@N89wTtGiAw3TFjg8Y z$sMqco+0!mAA%UCXKLzopj148;io&=8$KFYSn%`pB{Ui=JO^Oi$$tYXS0_>xePGFT z_P19gIa;9j4kHUL1xc9!M?**_qRz{~!h#UMaEhw6sTO(28whFmTBkQR^gCN$Fx{CL z)72C-l^fK=@qURXB_w#q$stU|c(4qigNC?7Kyi6?kcCx3oggqODoS?{c+F9;mER9= zsl;NXa4)64FH!OaU8)i$Rkd=&@LaZU`NyG+|tTAcmP{0BiPv zvJV%uWyd@N%26&!LGpSFltD6ph(nR~YrCWaR#v67lc+Z8N#tOIqS}{ASE1h&xqnni zJ7X9bQz(GP)0wTM^6X41?yR8UrIlH1ZzYPv#eFP&S)^RY!h-9U4kydg`a?Dspq58~ zTJ24vwfkx@Sx@RM{(5^kR@x~cq3j3CueP?jMEmOZEvHaK)7z^oh=E7VqB>+hcRfX` zj23zgdVp=SSsd^NeqbEg-&x!K6JZJ?^$jq0Aai&5VEPcHFc!~Pe|`KhwF%Bbj7;J+ zD>*u9I__!0m}pGx%6T^>X&=}bBa^>(=tLa7pd?J783p(agYvCd7y@@u-X&OI`-QUI zVe&#XymmTRD-W$!oeabNRD*Yk zy}vP@vPy?DN7dM$DFh+T>7y`p z;hDO&pDx1u$0~Y1+2+cbQ<(DVYV6_co)2!aO|f#r>S?!k{9c~NmnO%&Ht&DKwX-2c z5+*HoRMbAvs;;3C+i8H(Bvylf1wjS3qN%AVzV!2Ftzv6np8r0MWK#wPd%wScs2*A; zTu`9h{uOyp_$s~B*m=!uESZ%MI@df+VfKrbrpgb~VUd!f&!0cbr>XP%^uIZ*f&0@Vr>j={JEWfC*;&diC>0cG1VrW;j^PmTpQUuQ76+AF?BbRq>m?!UKM)1 zTs~b0JH^e%$ER+5X?}tL^ZIb$$4gpDHIejE#M^87*3hw-k0kK#B!J?*!O|I+nejh< z{K#j!NP`)fOV=9qL3hW*#B-~qp^NBnZomT9X&YQ|PMhs-n?u_gE~fSC1BwR6y`#ra z`$AJLG?#*6K{YTmGA0jfBi=|6X5JI-xuyJZ%@M=UO&yq55dP8u`SjzW3k()Ke-blh zaUBzM@)KVFrOn2}SuruNcc7op+!G4jO16eSS#4}=_`Bc?$}iwx$*8GWwqyE^{u+qWSLxePHJ3&FyI z0olaBLBz3cL8Xu$+$iMYuQ%tZ&a){$TTy0u6y*zH9dc{O?NQHg?pMJQ{d9b0m+aT4 zvGDNl28!*@LIW9BA(4EN07vN#VjXc;31^;xM0Da$^x8hjZ-}SGEL-n>=-~C(I^%i` zZ(}&}+z;>`$=)X~hGH*biDrC|Zr1apgRO$VsBzv5zPBO~Z6txM|HE;I3nJTFNNC3ahb5{Z`Ro`JFxaQRJL$6iRHuYw-QAlr6Vk*} zAWCrux(r$~b?^Q7G2!^=2)uNrb|o$>-S}L3nIt6bP4DEBJ4YIOb)_CWi76g9`!u<$ zc4gF!+7CDXu*BoX4~G{UQ}Yw9Ks=qev0#7?XmIx5(BN@`M}|y}K?R}$%DwVHQ-Y*8 z%Bf(`)bF}H2F&DBD`4LFKQG<&Efb{Qy{XOpHnIxGEvAP`1kpskr$?FFxQ`qKhY*H4 z3~oWFHCq}IhME!vu0qRcBdpgO8$;^-YdLAr)2HnvDFs5(5`0EJwwMB>ct)p@>67jZ z=dN9=drfNFJZ(y8Lfe%O;-eCH5z%Ij~ku zbiT89R*6zSSSJR)Y<7Dv!$%n}NY^f;uMV~aw2oM%e-D*nTwYymFL}&W7S9rOnRE11 z@RQ)c$bG_(AHS7M{%n3oprm9ANboKbE74Wt-b3yvwn*Q1~EGnv*R{f4HVox-w13dyQuPPm> zuf%57VLv;o2Kz>*uPM~IdXg+Lh<(J$RK|9|y9XQA(DNTx5XzB54HK-1&YYzKXmGb6 zE2@iFI-zyIgY*blW^d*laU+3a9!h#XTYM0AmeAz zAT}U0#U)<|#6NaGQ~cwX!U+5n|CKc`c(t)F7UO_;m zdRE}?h5eJfKtK7vShW8^#(Y+G--K)SWS7_{23dsnIww6@?!Ig5K?uis{o(-VCGWeM zt=Dp5?p!as#1?+^>A||!M3&!turO;_-Sf%{dtQwipusMhvuJ(CD;MU@v^9V{>EFh zQWU6UQm2_LlRl7{#9%&f9JvAP99*}YVuz58dlxj|uP8qF$nQW6MHuu7HKbLVE4*~0 z^CJ(Lug&Pb@VouqlG@VnsLf>I&^-(3+U(2IFl18|qJudq5+UFGGR;PH2&Z`|Vc>VU z4)e^OfjpO0Ej~OK&{M)O_4HH`q=~^_7*AJb8LIffPI%2=?j19S%=vI;?i5(IWF!`Ar0Lk%+Ze38D~1+UwO$_cz>@3lzJb7*>y zRo=TCzu2$e6@TSWxrC?twPn4yE$#mx7Vo?R;0!*X>)DwcFhm?>v{k%3hfj*iM;B zju|KX89hJ3f2EuArmgU)ASJr8!>lu4{L4$Ji1lyw$TBZg=es?HdPVZ%f&GO}%a_=@ zIXPeKyuWwgi#aNMy~%b8LrO;x0B@ocGD}Qr9H9F{&&NzSGegx|EtJl8X+)Xhc|`qO zk8$D=Z&;|4x))TcZ2 zTGLubH~n&k;tl76$&I`{>y}de-?JJe$;^HOzl zg1xh=yr)h^)x2d(Z(SShWbL-v``vy;9=7XSHQuAns+Y5N+HDn8)7`eDu#l|?Y&|c( z5`Vo1N-^@{mT$`jDJ`A1IlD8twkUPyH=iw_tyA~S8n^1S!D z`B0P3g8QJ^PASpA?p}qSqh-&QU*D zWEQnSKj7dX7P?P20Kc)?bL2xLiQcM}eKNa1hCB0S*uw8;iIQHA>F3i4?ph_&x;lnZ zwCZkFH4Hz9iQdcw3Yhh93#$ni{Z<=U)o7rwE;T#_|DBZ^af|0}gUtD#&)-mqR?d!& zRq4Za1$ntkn|;>B2R2S`Jvu8teyDSu_W2M4v-lOYZmVS2EC4wAdINd2Y6~)DT;Co= zxKB?%z_?uY4A8lAM8CY5=JD$H)i~)8$#9`p--o=ZG0rMk)z5K z%D29Lu{^#S&29)Dv35_Z{PITXn^!l#l_yAA6J8J?fHdN~(D~}kg6)K_;rvcK(2M5} z!*Rac@2sa3wqR?HF1nOhW~^pAvgiFoj)VK;@0T*}3M{v_Ypl&L?nSZ%?Bek7oRNv< zJV(Fbx^nRATJNH}dhRSq2f=d9{85ujcDB!mGGXp@t0QM58+r8T5$gUhq?D8{5q3nTX7S_H0&hbtDO^ zy<%TECbF~(}b*2-xix=NKTpicB$E2MP;`5Ia@>n-e^uDMaSx_oFgY*y~`gn zb>Z{v!VT7X^Z6}qm4(uBIJu&;6t_h$r{gA^8!rD-t)f9ybfWCeQ-0DUt?MpbL+3Ea zrNL}M>hAo&%^jJ<28B13v*v*V2Uok5=QocCt-r#d+)pRXb!Z}|oC*3bBm{1*FeW-) zzBE{XpQq$MUEeRcQCdl7l5%Zo(|nrvDJay`AhlPXu!DWSILM_nos&IKciE@esFbVNwk=z-;x^}k!& zLupXiGwJ(omr6vWlhbZiT#E4wfP2dBv}y)}83JyT0l8LX%Kj;6boIg|8%2!>BbRG% zZoc0E18oM~!g~zqht5aF=l1svbXG&Vb&-wwTfcs(Uo+Q@4k0*KuR9jMQkd!O=T}uf ztQ2Ql)K$pU^a;83vsK&8&%a8pUvz6J<$%`+PBXS%Vo=|*e8_gZ32M|#!|s;Y|Lnl!+Zm&Y?47vDd~iWbW3noYgt~y&h-2PkV)t5Nu^XJ<=(`?x z_*1_mud`Du2pQT@!?=9EPpW>8*QKd5PR?OxiqfY(ovgi|7=!T|PpfopdCXkB=u%yE z;`=AE48fvvV?`g{d?LeOX40Z#(nd~K9W`P9I>UV8GJOGpvnhyFthu}>w8^e!dj7GF zE1d0ym{iF#$QB}R+hUQ>iHO1g#+5ELJyONn=!tdgG*N*u0#mlY-Esl zVZ9zG*^${WL#CQb&y5IkwdXA~ODu>k4jGboi+`D8jn~W=n(XkXuILdN92g9=;KxDW zNchh|L0hu5)eAYi96ODc^XbEP61Ika8{W*Yxf50AIwr8me+ob4>z0F@+{OKkghM@3 z;5>M)ofk7cJy@2#$q{;`E9A;K`d!ZC)g#6)I2Uc{XO=+%tLF zbeZR2wEarc^30Q$t?5VID8m8sa}d9yD4{p^zlyqf<*&`(pCjoCv73JMBL>tLD=+k<`K9i|5~SKlI86P!2Z3a@!t z#&WJ^b3|N7z`~fE*a#pA?3s1$;47&7W5Y$mBjdikVm#Q1#n3so@bF2VYF=LFq}J8v zw`k94cGSsDQ2YEzWl2Xek(Ei*PB1anuQOA9xU`0G84D=f8kb2hnG=&IFC;q7RxVC3 z9oS_5IyR1XdRdnc*&q)f>qlWGz$(0H1wImaXS=eJ+ z9bq}Oevz=G5wfCu`7pW)cJA`4EfY}C)Au(wGR~S1dq3QT=ZaIYBYGbMM4- z(~M{h*h*P6_qhn3LwDkfeQ|fi`AYX^kCsWK*s86-1rUhvR32!(?VkR+eO&Lt=6w>cf3Bhn|#BVx1cUy z+-F2URl|KgJ4ZD;uW4YGS|H$*-(b&LtlYQx%J(n4%dQST_a1*Mx5Mwe1Ky)$JY7Xx zC$V^rzC>)%7~xN$#hYo%txY)+2|e@+8v4$w{;lMLq1|UkzRlS-1FQ)cXBeA#KBMtD zRn_80oFbb8zpm6i-Huw$o)SZn`T6-)NZ;T*8$n)PUQdA~uOuOzUta2P)tdvnrbUhv zXXb}de173bTFha?bKoyjR|0N#-Hnx-9*VrAupsaTX*I~j|E`8-?dB%O%ZH!zZXo-$ zC?6l+2pqL895x*){>pnBOvDY3_$LT|!a3gZc0HfguXA`k8O~3LQ%^mC*|3p;^99iy2tTq?+5+f=3-4)cyeLGR%*c@<#^M$ zk79Ce?TUod=a=3sH*6Ojtrqu1>Ki7*1@t_I9EU&MGCLf=DIs}+y0B^@0*xW)@`KfyyZW;Y>gy3MtB1b6x4p8=BP(AC7*u(qC>(U%KSDZm#5eX!G`` z={d`@)YPt%^0#4W;xzTWOb~nM-`SpPxo!qk%T!f6(`A*7=@kS`k35`jo=H_JbAxX2 zF-T$CGN0ge5H%mjV%sHAP`jq8<;B9xMKfz_pazpSKBzEOOt+28#X8zKu1vmseJFHp zZ|mZXIhVoQIlORgbAoEey^AoW{2g@BjBb7wEKnjPb^DpgiFA0JYS@|l5FMvAe7A72 zXKhOp>PlzVC>qIlNSW4EU`8#Ch}B88d?U2=qbp6tw1cN_Atd02!2~6m#RCst_2vZL z%Jk^?04sTSW=quqvNY1)Hr|@^>MY=3Abq}tYrTxkegoNWqs28;PcR&Yx>?g^toNPGmg4lF8UY2D*@ z1+AHSA64%k_8Pwt$AV|!Y_tp4iFPqote}muo6Y(=8$LY< z6|vsJ`wZc-v%%ZS@tZ2|ZH2KKWZr8Zr2Y~uy(mlz=Y;QhZuRN@j-Fd}oCYs?*pu;! zs4vgZuQR#pS#^#|!TVc`d_UL`==*}E(uATVLXKe=Ui6dR+OISqS^9T%_(s_b=#}?V ziWreArmDLg?Ty_8(cpmzJ~(jW4x`W;Ki{O2m%puB8~7$8*U3pMz|BqgJckMfsuI2z zZ(_l&yel_&sWDP-H$=6_>Hu>BceB!a{OS$I9;xRqUVJh9Kw@#717XA!)74ERdh$LS z{Z4*E7M(-ypUc{DW)RgIBX2!juImdGnQGpnyZ_;uA5ay~s@`d}B@B1l&ou;YF6C9_ z>q?G+94;lNBYB4bQR(*T&1@aEce>FLX>>LokCT4&a1M_)engY2oS{mhChxyS_~e^Y zfPy==7%oCmgB%Ih-Fj%*brvHNd4uY+fK8Jn+gmmqllN6DP_Hav=oE>Pck zcL&b3->|MH9CX_Bi{P%9r+YDCKTkwRCqQu3Kl)d=d0bnH-EW#b@+^(h`~jy_G<91% ztCxU)KaKJp80xyf+4lxgqjR~lu%J0C4%pQO&`GTXO48IN$>Ro%PmK6dD= zw;;uA-{>~+kQ?5A$6|?#T=>sj6~Xpr!eU^8^!M$e^t=4-uB>dy4GP}5Q#YVdW`62n za~cz9EUuEsd=$E9+@H&{z3@!2($f#A*fbX8)cvE7^Qymof|B_qbaWMZZez;hy`N-Q zH`qi9IWe}_i|>2|F3^5!#=Z2Ql>MqmlpmEK_16au&;I!Kf~p|0Lt|XGI>*7< z#*jtyr$y~;iNmJu%9viykI_fmhF!nx^riV>$m<;YxfXc`IFO67L$-KLj zl4O*ECOIk#kUXKUkMHv7m1{w8T|OyTDQ)elY@{o2jpco}<}9zDz-WdQn~hdfIeG>D ztpFtIUt6tng(Is%AvhSb1y!~@)BcYyKi&^3CZ$6tOh>2xzRl}h6vI&?c9O!o#>PhV zsep^T)V!txTs{7hsc%$MGtI32QO%He6jYWK)2OCrwlRAvyT8CU9+<8L7rhnOjTWfor){V+Td_lchD6<&S~_WH!tJm|W-{&>KUJJ8>U_MyT{o>u%?%h}vN z-0;juI!jJ85}=K3W)?Q*2_1vWGpneOdnWbGnRDN0?N6(&Hio>+-fYprFugv9ky z)EW)QnqBbtGnFGGT74fHkq`dCjOzIweTwQ|ehvNeZUWpkGoT7|^T6!!B z5>$-Iefmj<;6$^SQGX^CP>^@~ZBn7vA7qqG0C~{aJQj3pEjat)=*EeNd=qXCc}%(U zo)BM3#L1^}tntn(m$_FB%n;QTA|sQ?&ah13;xnY)G23MYa-E4Jp0}%iF8=z~y%x7s zVXlHC3LgaRPO2xe?xH{SsP|pvBldgnN{DXxH0F-R75o;weeBc@&YG-;K4l&gKW{M? zItAqTUw&peNlBv^(A|_@;7Iz=$Nuj1bmA%sORx{(noeE%!EALi1n&Fg6)VDchxd2K zch9$rM4z($$YQ1}OdMQv6y9<5@1B}W>lyG^W^!=2hDPwb1=T6T+aF~`+}g`HJD$2? zF#n0+=;I2D-L|3z&%SjL2<$iO<>|F4!(^CCgBxc%&N;?zm#MfYW9vO*WZXj1%blkl zy{2uIQNCoeDYwJx+~$es4z}=<-7Y<$H(gYiOs7yf+S*s_oDp~6zayuV;+g5?$S zy_a+(YwlUhL*7Z{Z`E#`JPkK4rT-T;aClvQjUGxbY+CLp{OSSjKMT#)Y zRyf|4(!k;Z?q03A-AUg!d|O2?d>2EGzs<|y>3o!mT;Tk}LvLTNG&x5BoR5AY9$j_9 zYE%(OOUa=`vU?NKlr8sRt4;Q?!_H5p&55~qS5=&do)BPEOVVCU;jd(S77kw_F`b|d zl?<6fbiAh<_IJLCnq3gx zt-W7MIUykzZRdOXuO-dE82=Zop~01#?aqnGho=zco0o)h&XCSbX^DFWjBGdDU_Qa1 z?VydvNRlSHQl&n)@B3b>@|89T-ys(bFlX8h&Q}>%GNl%>Wt1eJj#pjT0o&syHVLHN z=2yE7%m)Wvf5TpE8V$bQLhbyT1Owkb7rCm6#Pj0cr==W-i+qqdC+3#d30pp|-*0+y z#UsLuB)ZyV#9)SOfalWqZ4fK-q(3We1=A*Dd!e&uV+L{IPJLgH+*yyAmTCnJWl_NQT}>gva(aH{ zIpHc}{G+7Hmvl^gkL^GTA8mF1ZR&ytuDgX{$;HaT=2kM%-z|ZB`NFi8 zYw*t&_r#OG^|>>$LsSI`V=@>|4-5*$$S0>>#QkeRL7n;?20w~EE$7-prevzw3cp1+6}i&Ml>O+{Pz;e~)#;Dv$! z#D1!oS7sTu;=NhtQZN30#JvSnm+9Ir&WxkZScnoTr2?X)7)WD)N(j;o3L?@Vg7oXC zD3VI5l%jMANS8qf2&i-mNP|c>oa<#~_J4n8o$u^#ue0}mvz9X`Ki+tr`?>qNZa*J1 zt=s$Ohtm1^?;PhM8!+NN{Se&nhijlL`=CU>sad+KOMy0-Cn}NAC;W6ExcJo?6|HQ! zweS4tKq&iBKm8jnBi8DVh8pq-|8BjAe`&Y><1j2U+rk+^;`ZJOnNgpMU^~YtP+0Jwqg0G6?lF3W_haG-#mOd-UkeJ>D&fRT$w- zekp7#*8dF&uCHIe{_5m(&NIXG^WQ)$G%i=g*DxF8i+IreB{=`Q)DnN})xUHX{tn7v z#?`FunEUf4Nsa(%wqtuT*g_8caqc3y@N#D6=0w-Pz!oQ`jh-2th+ASaB+itVKiKYR z-Zj*{4ePh#f#l@&KgB7)O*85A*|S1^N;{s_U;ElUWbw$3+YdcCt{a@ z$lBNLe&cs65OodK%a>-3Za(sb=Apa!V+>zj`%2qSsiEOsoOxbe{sfW7o$kLr&Ou=|43MZCnvQ>|J5u5yR?&W%BMLpP6%)R>xaI|LljX*YDero%AsG!MC{{V ze*X4{=gqh#>`vo~e;tARzgvt=ODn&_(If%0CK>a=k{8PlJR;8T^)CnD&~WtP!Oh?M z1uMtQgL>p7zRo|2mFUVTy7H>QT4znLqt8h8|uVwjp?Tb>8lx7E0%PVrY-vqy&hSURul zJl>{vWVelWmPFdKli?ax{nd;>!&-a{;Kik$f4*jgxud4{6(g<1>8kzKp5gj?Jj8f0 z9zx|)+4Rp+v;bBSz_7j8n;W^K0!Syso(;3+{dSjmY?pd22b(4_Z?41g__O7fPuJ+$~n>S5l>t0Hc z`?l`HL2>Iv4u))|yXoK5t=k?PJRu^sokqSbOD6fY_U!tVA)+`RCDC7zQaPij==W^G z!omUo=W_t4O^WjWvEh+^k)K#Mlb~RL&AF@1fOr3tH0E^X>USdB!r(3E=R>LT3jCaaWO=Ov59)fy`CCROuIt)_3ALkfsOq z3Pmtn@&Ot(Psb^13MZOvs(nnQaayV~8lNr%%Ehb}c-jq5WUmH3-jo1XG@7Ez$wee&5M$A&vVlD?%Vehnr5@Dx^62>qg8Z^#i#Wc zSa5mnN7pXF>sOKuyNT{@vcXe1Nt4E=@8erE>mD|$W&jF9_UW;>lRZ)0?C6pO=Ci_@ zaDVXNl!U}D5$-zgNPe1umJCjkumXD=3wolrwYB-PJLnFau9jz0u-2-Pkm$>`AK$-$ zl4%PnKudtv9>`J(^-WC6EbUzg|jjA-cyi<_;dq+DCB` zcn%Uc{bHp)S*LZxwcg}7dWGH5)&8OPIwm<@Mr(WSe3oTrDf-FDmiI^i=)lXh5eok& z3Sh|VbzB7uO1Gfp_73GWlv^8?N4mRzP8H~{{{hY%$oV=@z){=+fxwvq{#{_PsttT{ zj4O0wzc3K^8p*ybKq2e-MY18qPH?VgZt%2&i@LRdxfPe)44&=YJfE1TqV5hw2R#6O#{6!+Xq}0KkN$IEiGzb_RyfQTpG` zm{(jm^6@djw+{4Ie0T;d)b^b_?|}dAOaCW zX&m&$mjUSj&n_cC9(TaBV3c=5;lsGxhl#3iQF@fqB-}R9AOmqfHa1qIOgT6ywr7v>0?rN@ya)OKAk_hGjXn|4 ze~v@ywI+A&%`qR~ZeCy`Nfau0Bi%8pl!P;#h^q>nsfvv~s7n*<3p;~8tNQ?bp`9TT zVCkzF!M2Q>1ZU_cZ?)3|&2$=C(S>1^Ft zzx54AOdGfWmE8a~r84wOD}a}5>U%pq3jDuNkZtgMe0+~Zo%l&)IO2a2-w$Fp!-`9g zBZ^xPu0)+YS|ln3XKIsmgaw3!dobzueS6-`RFJ@sbP5r!3&uV~FAEC`-~-m!Q;Ii_ zSkB#8HOy%_*53EBzn-p(mFRhqU98upE6H-neKP|~p90JN{X0&1#}@1CREu=q6?xnGr{8`} zt6E;!H}$@XqV~?=XWET|Hq{?**b?SCI`zwg--qVjQo3%(5%YAJZ9f5^)WvMGiErgJ zVp&2C6W`48JD0!T>;Zw7J4Te91+Lp5!e!>ceJ01)cS|70*$-*hg;Izwh@LpX#-?!j zF*x~-+hOqVH86dR02joE*#XkQi_EKY=SB)o%{5?(fcQweW1e*(r*F!7~7A>ALkMm=S6t6U!^JMZO?DF1~Q0of`D02BB~o#=)YL zWLMAu*tr5I4YDwq_yz%LW!L3lJvyHg3dMFsxjnV_3Yk@HMV0O7>4e)WEc*2=%D}S3 zi#5n^GKz3nyCd{z{=0P@mJ8!l@%o_PPm)fS(g(mc(Lfec{7-+eG6|y}&Z-N|l)= zmi^tn#FBv-mev}>YbC)^&>iW?;{iaupguPf^T@0B+a$&NwE`_iTwT8BHxCXk$vX6B zC_f3-b&UIRnOuzefjW+MM?V5g>Vr;9m2YV z#`trj z`B4F1aH>NvJoXO91%sT8O!j-t)2sN&&jkhsM!nxA%*CynZ=dl#%e0Xv410k4z+(vB zhTl+DRSnW5oJKQ_q0Icciof+GIF@PejR9WMf|dS409JSG=Jz)8&y6oq>`|gKO)sS1 z2jIG!d9wG8;>N}?VRq8M;k)wdl_dICID?^S(4EESJSd{h%LH*rk$=eV&oNj_EP#Y6 z{#df|H@hH3X(%i?FcZl25T)KSP!;lEn!DM8qo;)ZQj|VaFy9vv2U?av{E}Qs{)9A1 z%7uT2S~>_y!~+)|AKnM4S(OG)o{5d zv}n)N=b6p6d_KL4vEUzwhW3cY=@-Vw59+u~*EbV(t>6`}!_flKnqPpTv?m>}9QH&F zn3zVBGM7)MHb#LylRYpvm~Le@q;u&&J49L1Hyt}1cD>?|TM>qubYm-3vsbI09AzhW zo!&B^FHa7@>@)|ET*k*S}#sKPDZ@@Dq^)>I~soG{NEMmR2yfTIcWjsa6ev&%q;v-90}Ashrn z(A}#!Xn=M53)MLWg}FRD+1A}hSV6|Yd)&O`SO#5rQb$}Lz~C1}*z4yUm&Xv07qT?i)FCmzcQ_6C4MaFW~ykQcpr*9+P$T_FgP67aBJ zK;sx8CpP~LqrO8qxQPfcmoLW~wfz}aD=I5%$?tqXPsZV$z|k-xMv{BRoY^MGs$*NP zf+?=MaSpyiE7uW_!a9&R1QeT_KdM^euj)@p~8Z7kth95QoX zUI@6UyQo<+*N^@Ub=?C!!=&(55@BlE)LAA0-JXg?p$J>=zA-T$lB~ zzWE*fUY3%;#&(|*Ur@LK7SD>>-J*^+rbb&&R1-qOiQxQET7r)71V88@klMU%iF}P| z!GiuO4P61+^Z zhU;YVG?Y)|+Bawzm9PbC?~n=R@dlr_-kLfC%n~P2A2L-&fXR(~Mr#O~q(m|FIX$T3 zFKa_K-MSQ|`K-Rad3T*xC-)c}X$H`Oo?)>6`a4x+Lnma0nf&_=xEry9ypU%e2qOH^ za}p8^H`}boLAc3|m!Ssk*&W6$8x)8J@cTalB;@WsSADZ^CzOB>QOT3XMQ-%Fd>~U< z9Wk$3{T}=(<%O9EPoCV^cdyZl%mBT1$t<;mmVC+*@bN{0ABKu*99-L_q|EhB=O3US z=GXDsnp%}?3Ytg{V4o#ZbPKvm=`9nj=7APtDr0goyBwi~&H$ilt93u?Hk+mt(3TMl zHnM;XP_NukLT;^wHOX&0x?Q#RTwNhJ`Ghr1qT=E!N0}9+&1{h^Gh)ccT%Zgj%^ae!+ufkM&AFUBN%9HcW zFMDaCk|l_7l{DPhV5ak6lDEwsFQqpCG8wx7pQBiBb)k`TLN=v**K-_O(Y5@~|rK$WfC61=*MSVDs-=$YjFi3*Mj{a|D8G4K&Q z;5r%7DIrn(`$nc+r2T9IH*kXYdQuQqmpfOz>2&S)kruNFMu+HuGvEp4TnF1JQ}0U)JJ8xgd^V75G#}9+mmQ=H}>e^>tSGyVa1H%9m|WezV7aT zt4p9OH{qC1y!wjm;mQbi-bREHT(rfTgah5(5xXA-_t5+-$;ZB+?eLf;hLP$s=ne!hjG^bLY4QUc zl;Y0Sm01#txd*BB4W3(!41{ z0-hOQuNWDdm>?$1Gy_LFJr$Z)lAC%HhFXOO}Rf9uWCS_D~7wzX3dsMF)tv6hl1>VC>y4T2&m1QMUKWOHLx?ZgKqole_rB z2WxUyoVHVy)R2InQj=aqT`Zxnb{?jWBq8=Gt#O@6C%xkR`}M&`=2i*rG-fDE4;{N^ zHrMF{JsMZix$k;Y)NKTu2(bJK&Yx1F{S6R~iGswKN=?UBh2(ohqZJc;0ACD&-~>?f zQNhH{O1ry7D_qxP>Tu=6MhDI!rQTs@ep3}np2jOGt#2xN>@nk}2{ zuo(~7#iBXz^7kM~0x!0Q+0DN+QHH*UUq_`rrz)8jKB}=7vv}dV*}YkoM5kD|>%t%+ zTH`uUVFht%?5Gi$ltp0Sn$cqdZ6X3$YxYkf)wErUaf|>?Nux<<3F(uj7hx9NJP8@@ z8aqzP(8m=E7w%4v${@w~S7s#^v#B0%=ku9e!=|?k*hx4h92Gr(M{8!tR08*#J z2nTmYyQY0)gtb*D!Ze*Zg*4WM)jfAA!Y7l;PnZ`KDujQvf@g@_%_nI_rpi0B10xG2EilW^Czpx$m;S7&O?VD=q+{Aji*N}bAi{E z5wuwDMN7TBG)%wnBQytJ`RCIaT7fLSB1gVMSV=8OYD8-ok`j3M={MyP6Tw*V84_nSwcvQ0O-)HTdjtce=+s3}P#gwzZ8n)63%sY1 z{QC7V5RUC3)tI)`+x04%>?#UyB}{VO!)q6TlSoHy*UTy$c02DzQ$!M^r}TqAu2*&G ztWU4-Yk9Hxmsa!fa$5w9zq}k7D_WUOaogSiuj(2?Z8HDDVh8>BPM&M=*Y^_+#`s4! z^HDra;*EK=kue~VYT zI*hva(P{w}CdYy20?Sji1_;2dv2wILdbKMByGlmJ8X706LIu+gSJ%o3C%sFf$!kv; zntT0x?7oUZvw41UwARN_dkAR>Y4E|q?TG;WV7163cE#Xq*M#K+slk$QC|h>+6@tB+ zMt6Wn7zsOFqDeP4kUJ3R*^L+XTDMJLudYLHASl%uHH(}a=67N!;eE?v&o6=Z5iDr8 z?7JVZM?#mAJ8d|Y+hmfE6p8$sDdVPwskZp|hO6Sb%?7>|iK9Jt^us4r`sg$CI(Nxi zJyzrh{lpp-09^k?f#+Qn9-?o%;tAKF2&(~v&=*J_hol8>fp#F-#1)}NymEyzRaL1uIax6|A#*Wm7ztjhd=3rLQvN?HbTdszfE0WBi zfoi%rErwdqX~{BVREe#S=^~I}kw#Kgv-bg^4$%%ntQtXHrVbwd$lZq}+tMe>g_DuY zAY;T*A4aVyp*V|@@R8p5gk)*tqvXlsvM^h;8b&(No7e@k=Ox^Xn;%dGM|`zHwr&t^ zi!2%AgnoUMpD#j&0AW})W2EbhksTyQ6VQ~lBJ!Fd;61z~<0~qbvoFcPNytIdMo-=s zU)qOgi(mA|n{|V*a5tX{SnCggbxsKCX!Cp0RfLVObKA*)0f+5__;}YId8_Q{2CW$6 zFKGIRVt1-IFdq&+I>%Ig50+Z71x|nxm=fY|L`KAini(0iMW494)tb2dJ}}Jc-ETCR zvkEWHMv?iO<1p)(VWLYTwu(wuO3x*N? z2~5M6Cm)DLE-28WsVK#yAaSWkf99r&PGSABWl1HumQ$5_D@VYo%r%NYVK7L`BJQv@ zA2I7)<gfZ}BqU@bk1*dmXu~$L6bW!(||*rY5jLLO2Pv@Y2)Fr`KYx1c=I zpVf07CnWcXyE@yY^?;)&2E-f5y-#CxOWI<_ATXf4$f|=2Hu9~0__Se7lB#WfvKh1X zN4~3u2&)yEk2UsJh)U%CE-pOEbEcFr&+TcrnIS$A5+&6JZqBk--zp7~LX^m;x zcm{g>LZcqx(gMbKB{)j8r#3PM93YTsGv+#98UBHc!R1kmxB$jeZfE~D*D*HJc`Z1^ zK~RJ<|3zE7?zJwEStyW;g{-)W4f9fP)?Dj0L&J#Nt^ z0EP(80#q+dz1EZQc}l^I=H-|cup=CUQC3Ng0Cy1)B?kVB46)$JORtCGkJ38RCynlY zFyCiIpF$rp;d*;I0rJae^N}wO>|BFzl4T*g7u2+^B~dWZaI;)@5J5FEfAU3hCA?o? z-fN-Vg0MZCI_)#T+%&3~Wzn8SkvdWM6+AF<14 z3?#Bz9mye=9UsM#V5`^{p2MiI^0- zHmC17MsB_WB-v$iC&HuTA5R(srw41qvhqAvt%*G|}6;5>{t9Nt21+%liQBS{AQHbha4rOnT|gm84kG zDnkk~gih@yLXv-4x1pGf1xde%G^(hM(IROTYo$7O;WI*W14QhpNY0Gdm{U+BDB@Od z_-l0UYJ_oTwH>j@8_hhvtu{&~coT1Y;*ex0j-|*p@ueU2K1M2y8smgGGRq`aQ(*N` zvkLyF>f0;jwq0+!eBXSa`K#7<;`U}9chlsY19GC%bzmC33Yeh)X>M&-0z*3`@XqSU zm3U**K!_icuZEsd zhwR<>%=^yYfBM%>IiKZ_I%6KA1;XvOh5R9AP|o)^?N6 z1)u-ZZ+4`pRVrsT>3cTmPgWUx{u0FpK7J(TPLa6)F{AgITKV?YaN@+tzzUO4QcLc^n9>g-hLAk2Z=ZZmaEmF zyD@df3&|DbvTyUW9C%iQ_2w}c6<5PNul#RGv`gBH>=GYq#2Ij8T z8Z1QGzS-gW9h*TOy$d|Io;U>OWr9m-GfYZo3xm9E_eC9y(>N+^Qs)i|?yaIH$Oqe> z)MMV@xKXuyoQf#Sz>_J^Un@0x+67d>G`4e=6P2iI2`1fhWmZpuy=AZR; z-*dcMxO2YxUN~D@P2)8ei*)Q_Xb+3o9$bTwe7hv0{AOIk0J>=$HoXMwS_LZiGE^b7 zT4t$|?qvb(IR(Y;RPw(c+%boM;^bL$;!sc= zi5k{t9g}r&(ec`Vzc&4v=&$}tDPd+<{}}%Irtvk8?x$Hk@UQ+~FQSjx6ci7sFsO>+ zme)VHZ?vWXD6cnnBkXstA6(P#Pak&?A;j z?#N~lt1Afw&X}A-=DQ;AEoYvu?R1~NAGFk2)0Lrrswm8$Ji9ZcelEzXh>bS1=?HCT zzPZHwmudbYJlL?7vF(Lx@V>_3s)=Q`m?V%v(hKnR@}aP^3zuOLFetjVCQp#$2_TF_0zIYU(<`{`68N?o z$#5SGZ#fL>QF&) z{M`U5q$6-|s48`PnU7t&h=QdsvaLH&{CWVtbsuKWdD|mZ{{mi`H8S(11fo@Da!ugK zmXbjb{5$!NPmgngJ!LKJHv(VCZ9Hiy`S&MBjY`4c*MsoQ7i7W5Nz3oKL!sL-e?Z|Qj&Rp{Z!s$b#%RGlX*bA7Yz`{HF9r=XAI9{v_ zDRU|?w;6&fm;+NH7{P&(cz6V!-7X|$?8(TBs!~kas+=vjc;9^n#mCjCs54m>Osg{3 zHG%UMd}9H-j+-cxcg;lVb}e@W-%G1c<OX6d7jI_wap=qOG7x9}l0$^WWmh@kV( zl9)BxeBsM=qY~poR`f`V2=Ce&yLb*nVJ!Rg$*>3;EHL@;XwP^VvoBft6uL369YSp( zg7n__n{|}Mg8iX8Q%8CzA(I{vOW)W(1H=4S$d)i^gFmQ%0^2pz0HP)fk!UC;1H`Ph z>oVGKb`&%h>N%X?ne@Pa@_FGS#DVnoZc<{%iVSJ|z!i3gtI}UyY&V$+1!#i{x%>j0 zyQw`fH%UJPPDnTWCm+&lfc;?r)1=p00Qt(ig?Rk{bu3{hgPlld`J$Y}E-fvsk3hvu z{V;Zw9Om04gjrz93{E4dsm)hI$k^ThVe)6RVr=TsRp6`CtnVdPNFOZp*54kTI}0;l z0OxHS341~Mb9}Au;^7ywfa8*h3hv`26u_sJy#MYH2b$t}942-G0<^yQ9JI^N_3D@o_pSCBjeL!D`R?vs z#qTRg2#C_QJD(-$3a^+21_91~=|VgkLep1!;Uji8zJ%M$L@bSysk}|{R;biaqe|j~ zPM7>2zog=aK&sQA8t2ZVlUppqTR<(o@Yy#KlxUyf3GEWPaqV&_ihmF8Y!iyzzF`I# zj=3>nm7Y9I3aQVK)F3k#R8+RZM1!~bjNAk494nknrN`vp+){;ej5K5d0XfR3S6t_q zU2b#*{vdyV6cOo4C4}js+Jht=CIle~NIn8wv9t=32%Vl=E7R+cQgkts(+Cw=^sRVoi^Zy9`l2%{kD6@WGv zRGzdFRXk-9(9f~;W0X{n(i{?P-(@IFgk|b2yDrg;_Z~k-UEmC}QxY4bei5l4cSB2m zy_LI8Dq`rQBMFK1%NTEdTmhmt!=BOFTw*FHy@HI2aBlE}VZ|v@{;N(U`LK8lQ-N2$ZcE-cKhC2srX_%!as5zG$YSQ0ZR^*X+do{DcZHmPvI zu!~Nw$|=P)wfQq0kr4_lHaO|4-(^WKDA>5=$#D3pzn|dE>MmR7v0F{5XEd@e{C;Wh zGO_EpF!SyxCuXMOc7soS(|cDXll?YaU?~hG)CS4LRF=#rzMYiW!ht!#%&3j<=KJMG z8ihL?(8Tb&F6RxL9P@kFy|w10%pDx&_mpKtv%lqBOGPlts3)h*bMf-(_1v&T>YGfw z8lY6Yvsjy5D$|nG14VSg%?8Ys^473q{`5Tu8oh$!qBPpKC=kk zJrS~>kRuTGfK1WpH6qJ*d913L$Z$zII5l$E4|Q(tN%95im=FnK-36vF5t#Z_o? zviLRzM)Ef28cGzHM=qrkl$+iM9@Con{*cYI(40dy=CL)m=Jvr(O9^kCS#*x*;w0y= z1c_YN3XH}i`X9C`GF}wAlGV*xS$l9)C~o*R#qZ?666il%peK~GrY-qsMnt3 z9ANQeK=R202L;`93ilLzWb5pLt;tRA;1OMoe9U!^uP%Te2ua z#zz=~sF;r&bwXGTvV3O|xA&lANq8YkRsx&eXzzMQot7+n?5q)6H0!ciA`=oI+CGXB zyZ|0$u~Hm!@s7v1`fQM2+-rWEmeI1I-`uy~ScPQZ4SV2*-E|roKdWXuOK7 z^2t6NsT!v4+*x0F_2tz%A(N9_d#+#Sa#<)mPcX~-PN*?^@~(EiO|>6+#^Ig!*g9}^ zu}a-aw@iKEOZIu@3!YImZFI+<5(TZ>G3P8kzSrQ_)DfB`GF6O5t?gtB2pI&D9;5im zxbF){v|AV6krsWL?$`jjLLSQ!|KTKWvdxLK-q3WU`!UyC<4UO7(-fjv55{LF5@VKR z{+*OT0n`V3;HdFxlXK0;qFXk8`~u3%8tHOLcm*$T!uimLHHUo83)GuaVHV1;Cwkes zV7pDnfQh`(?ilf9V|1C?XABR(Q}!lnOkhqX-A}SMhAITno>AIs3I#xJjhi7EdXjYw zMQJx1L1)GiE>o4@9d{bpc=ju9+(6%p!oM$eeXVc2^`r_j2S>=--Tk#^rOq*05n(Tx&o#(x9 zCV2h|FU(_NmlKY6u8=W}W_g=Ky657p6_byl^R6Rx@yod(FKn;DPg={zY(3HT>ba3y z;LCtW_yS}qY_1bJZ71r@=d{t%M1P|LS1By-c(UMl%ycF!<+zWDlhIF!*Wd|_!;ve+ z^mzu-eIUr9ClgXi?;2$hP`>JNUvIXZOogM$z%q{IJ4Cu>qz!@pu=p9hGFwGWap{nJ z%jq(R1H~n!bRMyL7tK5G;V%@I<`j5j$GXDHCZjHX7$b$-;^qJO@BAx&1@Heae4Bs%$#DO_5(fW~ z1t9nTKe+(p{r{5-K;Hj9xd6o9r;Pps5wISU_KxwtDetO#*fAFAZq`TGhin7&D$-myd6}g|o!^3^#*W0(dOACMd z5PxeV>-NdU*HsgXFOJz=doC4n;Ca4YP3^`bPY}9x3QF~b*i=&--U}iZ@@vcawR#l= z#X3L$$uHu~tt(`WiQ@nAnSbX;*5vrt+WD zoA<}mc15(T-Qd=K8zIIcA>1WAG5AqJef&pRr&La|R7gSL!G84U8C6sJ)XGD4X_&L2 zS{_Fbbb0&Ne)!B@jx9o2R#x_ppB_0PZ4n~_Xdkzo;o8qner6DMRrZqsF1>`OGQiLA z-KeiL8+(Lbv)LnVeq9Xg*t9u);l-LeM`1;~?Of)OqodMNg8PsdZth-IOz!ks?{_6D zhLeRwM?*v7dQRvH2V{XZ|&x{z6=jMDhlxP;|Q*#8Ho?j zyy~f8ovE&pcq6s5;#kznaI3{6vb;(`A=jE`RMcj1sL<;IA0PQzzuE;#GvY$cNY_A`YDR|0`Samjvu@V7KHcQ4M#xo;1 zZ<9gpg0Fp?ADP{hR9FhDwxKU9<4V1tZb~T1L01&ba7t1 zMWIosKU9SsmDkB_yG+D7P105!M>S5req5GK!|qwAIr9<~C3)o!3C~Prq#P%ctZ~KG zpLHWnJ{~U#uCNoBN+H_mN8)$Qv4P$N*B?aRk7kx#nAq}_ryZ-8{4hdT@!Ldc0pBSh zm(QAYp0%g$Y&7X;n;&ZLf3&}Go#3C>7eJd2(H1Q%znUGw$(MTS(~!SfV8!vNx;O08 zNGi=okwfSPP-%R`>gJ|#W48Udjd^e5l~ZV*np)ZD|Lum5?Y9pKXr|VRkX@DqvR`@Z z+@i_KZ9xzBUpq#RGC91A!5^bfnPc3+m2BzrxA*K@lOn&DCiMw%I(fslb-amNV4qJ5 zXPOEq_1PU0$4tZ@mU*1pQP0*?@3$msbn0<^{3aTX0d&GEpgwm@zxeQ027!})uffJ% z^;EF+RblIBLrjEobaht8^WqKO$|)9SY)4ykHWz7r(=Y-*^u6SR!wtzwcrB6kueP~# z?>E;_stl`|E2p2;$*`zDOUR3j2iT1?U2f9FXOyF^Z?zp%w9hOJ$?Zj*x9HfwAdz7G zqAy-4?{`PBC3hbN!R~s#O05_Grs7m8`QueHR38l=0Wq%au$}Lo1N@3%EnCqrvl0Dv z*TRGXwFj&RzC`8q=cJDxVCtw_)AY{hJKUy{peY03+H=CF`3|K>qG^h848~;)PGwZ1 ziakB`=54%ALZN1s$qV^t*QY6o^OJM~i65D7{nboxZzfDRPt~RUQ=xxfjou~uLh0T; z3uEq&h8jkhR8my6idGg9`h~8w(eET*sYs{uwIxvy&J<9q)PQH?Vo&3lM42w8gi|H} z(!O9nbbo04l04cl)#bN3D?)9!w)W4Arl?^&^Vx!#T(PAeEK-{sDevqU8)l-Ti-9mp z`5~n{tg$lxdN6$R*Xl6K`ZPnCV@BU)fw5EhGH6ycGb&t{H_M`#&;3k>t;-06h6 zyqnee#JULAi6`s|KPEVNhk|LuP1@#C{a$|iMqMB}t`jjlV&2X=h~COc)=g;GaOBp> zRZqWK^YH!PlyL}vNnff?-25`Z9Au19^^)Xf1`> zMP0vvb@aP#Dt94rWe*l~gwG}KsVjQ-gXp&sV3oSFDti8aztm3l!UU@KdMfwnEe~sd zl~L@i2sQ@nZs>;6xdJ{5uRX_NQw}k^jySBKB%%U1`0*Lb-{Pd4AYxo@7^sfwmP+DHV!>8+E{7Ee_w)RaiK7}bC<;jXC8{Re+u|a3HC{rq$ z?T4Y4$1IlAL8Kt%cW;}EE&HsW)?oW%AE@L;Czrfj9f(!PaMrpK3g^9+Rm%j zEKiyAYtSv$&3;OXtWv!dfs$1-5Zr>WN6Y3~ZpYwL)HadSZIQiy=WmOM0u`T-q1vS8??9W;sJ1&2< zH00#Vm(kR@)gPav*N>Nm9Cw)5xB#qIJxIZcg1Ijb_3N91b9#))}-mVC^MLLkcc&6`Q|?CkQe zu8w1Kl;dDY@MKc@<@aab_t=^?#sLx&Ubb}y{k8gdbgJKe-}MQUko9|03)KkQ56hQZ zB7(RVs~;X5sIOeq9b$_rcB0Ln?N|)I}9?Rl0sXt*A{+|!io}NMCl$6bO?e5~ zY^Vxr9!Jq>sCCwQv@J&oTmZF?`7C2E>$4n} zH6vb*_jF7pGSkqoNeR7Ly#+m*0QX30;-lXaKfg$<8LHExjx){u9vRFy$nUobvb$II zeyNqGZ1}E|mtoQFSTIrHu3!JQG52MRQEXLxBWag&`@a)|03D_^o8^9+64~ZQy)*2n zmQlTl3Y*m8Eb}Lb|7(+86VZ91_#~sKW8JVL4K=0S+JUB6|3vs^p`%Ds?T^{^w6P2r z8W%D1+;FC27r`6xdAc!6DbKEPFp5qusNG^Vf93a$D^ZDwW?Pw-yi`+kUr@2=j<@}G z$`36lDOm@68vClW>Wfw>%-eG>SYBWlt1ns29ydTWE!x$ESxr%qP)wb*#hl-8iBq$A zd2X_iC;em(#j$&c9%h+!^*2&V(bc)&N{}91w?^L$q3IuIe6P(*QBVAp;J*J5|IsW*3K6ELtwb7^|Vds9+$VN4jsUA3#Ujx~-nAKfy|W%h*E zR@l1xrI2mDB!Ou%e2F#~)2f;7XkM6BV>eQr>BDOafUs9b=;6HhU^K zytzI_Pag2xN4k#VG-m{%oYu|+p#4%`R@OOHYZRrIyl?%}#MphGJ7YUszh%xYK{@$( z%!U;kr}@dZUc80M(kAhGJJ+uWtg!JL5vS%Sdh5F@`u2z|(NyUjE_-zt`+pK@6eDTI=NB zacE-3Q!|)Yb$ZzGR6v(oOD7JaWe;(2$%2$=$o1w4mkg`${{72c_niiw7;Q+(j8p!%AM!KLVEzk~O!#PLz#Pen{H6<^mox z&UqiF;LPSaOh}N2nZn9--~W~&SgP)_`Xz4@9qaw~gE=fZ)_=w&b2`zYoJ}g(dktHT zE-P;PBjCH$$rkf+13vunTY&Nt+33HEduTl+ErMkbC{fy}@EjzTZMCoG8KzRNDn@9r zlg>CnvBa_eh&JCNg)}3h!GTAtB`x|iyLTtQI?QuwxvIK~ zo;o~_)|~h`73cg5y9ezwF3<{otLrS22M|F^PF%bA-3R^DgCcG5AKZU+D^L6gB8Wpf z)kdyM{SneGaqv_}dwI#`Tu^+><>Bo``0amjTPI1e#@z1;U-?x}Zaa;Sf2_ohJP(@6 z$}T&O*3p1NANTv`%=v%cC+^?Os`OY=gC{1`BA7$@;8?_UB}IAa)eT;2%SgRfP*Acw zM)69P5#N^Qzo>K3N}j#P$s;CbZCx^^@X+(GRLiAZYwv)Z3-P}#`~QEbkUNJ7+MsYE z{6Lj!T z>0s_h=Vw2P2Uqsa+X#il1Pca+nFnjhHJgpQ#@*3#q-AA~s4MB+c_riC;tPSb-{Co! z^V`o-N1n*Sp*iw|kXg#uV=%9TMUp!YFc5W~_KzW@xL^k^Lj?Gu2 zVq$3XcuM4GuNWCEvaS1L%{|I`uX73uCp7g^3v0X~bk;&$ieIQ)})-M+4msg1)#z$aB#q5sZR>ZekhURTR% z<;FjQ+u!i&RSpa>r}ZpJu|4a$;`74Y@FG>smnhb5jqUmjB62an35NOAn@pQ}JuvK6UNL6KY!8=T*Y@|eAVtbKFa*rO*Mt*rR;Gw>O8gKeD75S!b%Dt_TxO!m0E+q8y@rLuy$Y1|)+HTivn^Coj z@Z*Zf%SBSgG1UdvW%EC(>@XZ%VAjxV+Y`(2bM{FBRQN%28!sy>2Y`fYx3AjmpQ+AK zRo>bc9wqZ^?S*&!?#0Kq)$7u0Eq!|Rea-1_Qm4)sZY#QwJj%IAp8C9E%b}dil#6{o zTEA%@Ke1iq7ptGF1sFDM=4@_@FVTPWzU$y;bM1lu_M*hvRiAKKt%$t%kWv*s{Zw!G zX9|m~yyDX8z9S)35K^{W@69@UyASH`K3trB<2PlI&8NNAu{`8E5dAxqmz|8+I!@O6 z`vhjqI3`SWHfAkGZL`bML4R%?Mt%gsg&>nM=z7iV4bl=BZbQ@8`a(N&8O?{Ecp}T8 zL_~X`#V!dwxLO!FlP-suRl3lUDHT(h7C)++eX^L4%4_il7fkm=K z*gJ@%#CVPfga&w*L&uM+AS`f157gEt%|~lIZN_J`Mbq=aUo;FqWWKtQY){19vo6!8 z6fVSPnl*RZhVf7nBx%dkG{b&eAMO287}iW8M}eF)1*X{c-n2GPu&(pCB;Y8AgoHGCiVWe^eQwJ~Qz74Ajj%Lx6}HRn!Qb-rAMBk?*?ak?~15?Y3zFJOe!rRcKQR z3<&sUoY%1_Dl-S}feUyMgzSGjs|eyw*v2R{(4bYb`us`G*o*ZpHBT@V8Uxjz@P_-{ z0FM{9cJ@UytUkh0C23~dK#y8HE-Yp)uH2G%qLZ>l&1jLUes@GnR8qST5he%Pm~-OG zQ~oO}i{xY{IlR?p1egxGH8ZOq;W7atgv6xP1Gp_k0#ixSDI|d|;v-)_-} ze$v<1KJR~0)n}utOsg85Wh)$vezeAf>FeY=i6s$*+2}qOSw)-hf`;!hn!t{O!Vme( z8oKJ<%3#xhPtW)8>EG?IB<^SRg7{Ao+vxWaI?22vzj^ZB5GN5z>EHsAc~A%?^k0~O z2(=)k@Mx${{<&jyX=!OZsDRwWBEYtTZwA50_ptoR7a&0UCNrHMcxUyiD|Ea-!(=pe zc~P5iyT)Mj@$qv|;US_OGHFhW0@+^j{A52TAtKUdHJ)$NF9(5<@`Db@!1u?|$9TSV z3PQ6}-qPSncz7~`Y5e0!01w@a96(R#(&0NP7`{S1k~xo_Y!b`Op%m?9kvn*R6iTG( zNT&=<_+O`8@9K-#Bx$6dWfZoXV(3Ay8=`>pH@3bAfqvUb900pu92{%Em&ga3g4<%x zv1<=`atHQDWHEo_PdHkrCjb$7dR#_9K|yTn+`&?TvDufPGNN6`8RC6wkp&8X9Fh$V z9f<=#2Y1pki(b|pHJ|=YR?z0?&ngO-h=->qX~eN9gt&R>p84a zXt`8H987AP!5jMfc!?6RrcqnGDq>1UP-R>>@+9E#<5;v*ngD<@RG$zmzj)-zhlfA= z|BTWEPjKar{u@Fr9If>I=4o#nmBcj`NN%nlKdd5#`+O(&sUa2$ zeDsKTZdtUfiZlBNY7M=Ru{cN9fP8f;bcJkb7P%IH{$XgogoT^?0`wh^L^uo(NfBt-rYaS!R@He8o%gR2j1%1}z4#I`SrNK5I8)su7O6V=UKq)r& zEZm`Qcf>3Ub&on`hY^edRwn_IP{4(i(d&**%c@sCNYDU@Oatc*O`S?$o(m!06I{?X z+nNu$r;L7VwRfbiY`gLn;&6G+KBCtn3yh{grcPhPXbw(Xk^|=1qFlBfLT%#Nkxcg5i|~=mwuMZwCUCJ z{VXgsE%aU5x7)8y!Xwdqb?J8yjCuxe{aU|kqvpZatzZr?1?>ScE2)474dz^`T2`pg zdQPhZdw%!sFN}iMC2&KCR8aX9MF^VcgF9^op&{xY2$d$%WSw^6hWZ3{a|+4cILQ10 zlowmMKkGQzj=f2C$G4T?8$zP1eJk^|4v)BA9m`Ru_U^Q2(y|=nH68oy`l^filhsDm z?=Rf+is#}1CwzLu(1TnvxEIPG+KdCPAO+lOisR$s;nTR!76Y@~8-tN~#P{6F$)+x= zUE!3Jlr<;r^~wIJfY8X@?<`iA7VtJmnC@2dQcdVHWMlb5E}->1OWu&w^02$e8D{7k z7}SHh1vCNj@T>g6g(Ur_h{36Rit`WcZj8lQKqV;vri9)i`xHr}_B>^*DV2DE-rX0_ zTPnQyKW?{KWP#uY4nD~t_qpGtl2f^+8B9CFKoU=j6e6`;53pK^lSEPkazRKn?>V4*^ogv;g9o1hadGKzebs8Fi^-&);6T=+V6;E1=J}qUlbhY_ zoWR#J1Zvu+z{&SjSLK9gLEG5^b2Imv_xY|`vQ9#J3t5&CuB*#8N#6(0RF8z?Ymobr z#Kj&S9u+5+l3tA|cl_!`%#gf@CTNRZ03w=I3f=nYFOI;^kH?o)l!BYY1Vkk)mc@KD3x_{!M7%+yk>L#VF~8qSZz50u(EUI*W>6 z$e)3$qd(+)G&pbf9KLj`KLw?a`HHn~gV`+$uh6Ly@SX0gHkt9mPC4Z&3{G7!0td1f zq27Phhmt|y85pMQORd8aWO{S#oy35@GV5?D=e+4Wj0b%|sxGk5>iSM*G@FJ0W=eYQ zD7=|o7hu?PB_Fo+bm?lXf=ebvxb5fj*jS7ovL)4KC)Pc&Z1=b`1C@wkdeDK7LPVr8Moi#^0DLsYL z?OwGK(e);QP$n zyP67J^0qOF#6naYh#+{J8X#(j*U8K5Iw#;TA67vR2Z;19PFRG3buSS(l0no$gXIXZ zFw4`0M!(zCW>x4O)@`U>M=fX_@-evHe|Uho!Z|stt&B3L$?pC(#(0<+QNY1+hvE}R zBZ&a1clbLk4NdP8k(j-(_oNGooM!x60`U=oFS1f+U7Z~Mhw|w?UCyv5gSDGRmB1AL zM{P3aM($?IvuE$g7yN{nnBS~vuM`=MY-3vLXXt?1IdbHP^Y;xSRrA}KnN#3o%3o(e z5dts9p_OS?I1#TL7l{*Yf^6fLL2He|Ext%;?h(2{#Io0prbwKM4Nu2tg8n7L9E2*M z(t5OG$BrqG&>6#b0`JQmSOAxfpcAR%(+rcnq8v9FdO-&DRip2E&ao>WwgcN+p5XFp ziGUCN3AwJWE@;~bQuD!R52Kz{2PffWZTfJ(?hP{8d|1{Do=C;VkIE7f#9jH;sm!qX z9q_YrF2CQf40LcVSl*OTPDAK2IF&P!Fv%AVy$e+{t1S@y@_)5y{aH^b#xx z2q+99C{lzGq)Sw!NKC!>q zyxW;`&hwme?tRXW%TG$O$^Q2Dt#_^Ut~d2Fkm>5l#TNuW$cdYfA!XTJR7J%+GCCqc zFlh@r9C9_(o(yM>F)Tlze`AHsAWgsUZ?K{3ZHTptob>1k(*di$oAzkJkz!WQypa?za{;CA<`Agzn1(*drV0LF)j z)}kOfz*+*Hb^=><`IUUOSCq9}<6)RD7EH``&s5b;fL(s(4 zdsqJ9=g+^Q8KyT#pb!0opou6DWv35WnP+Jtdhw|M{Vz;*QC4*82w%svE_$G+G4Hr; z1EYEEE}$I;Xe)!p?x*o*ZlQVyR4++x2jiBfd%f!14l%-5VZS-7a=(C1Q6?>HCZg#t zAah}IZd6={9%HJ98P=KW&=HFkXkoqg1U5qCw_#KqIj#kD%(Gv9H5 zKs$vl1VC1=#3|)%9PO|ztrhHl&OMbZ#u#@+poa=xMI31eycxM6*@bcnP zUA9X6KH3o(zVcHLSroA%*kSE0mzLXqE$f;dtay-ptUI1v*m1?6r%Sp0;Z5Dzni|9? z-%bxoSa1oQ&NN61c2&9%?sdU;++A+=Zfh0^A(s%Myk z&MlAN)y1Tx4d9<>N8bQ$^uz$-HLKzvUk60V1ay$MqICg0yOb4*a7+NP2)sQg1do-n zAVZXP;*!b`o;BpL6!TLYtJf2;*Y$=#S6$(z!m5ELF;OuwZP@EtA(PN1zuOgJYwp$Y zjPH|G$XB+32%`dY#lTa1sqsg2!HnJ`o5FoT^q{2dfL!SesFS`xz@-61Lk34zD+!Et zqfkrg287tYgm(0oElJAUiVsNQPaX52eGENXU_8KUD8InKL-^92&&1J`6JYPT0l{8v z(86y70rODt&Sy`eCnyTd(cg#ssY|bB1MbpJ6?0A$1(hJMVBGHCEa)q{fQL*z^?^rM zpUihh*SRZORjy|0(gmydt1W;g7Pyzsk8<;_B{@gvu(~KbJ8RSg@K;#al zbZ{-O>@Q4r_=1r6tfw%zGi~xtn?Sa3lGq5(r_T!N$jru=EX!Rv09%*_h5Yl5OjWLi zQ5^}LpMi(<^9lXEViR-W*^|?!Pu=@Nsg7Iq4n2|ho&>OI%hoQb?KsIu@|ub&!SA9@ z|F@`}_i5fZ%Q8D)y1{>TwdbKt-qCMc!|J{{g_HTdIT)6wpyAL<@jS)7j&GZ}zeyc% z;ml>@8NrqA6iePESoeUvfrq2LdXENB&kwkO&NBQM5bSAH*|bE7yjjlE%g!N1+|1&f zukprRUvqahU^%I4YHAuW^LP^Ts8&B!k!`5r{5$=3(w2et$i%_do`)Xt?AADHt*g63 zh-W(X(@)nLe!is>VrF~GWm)+rmh;clG&ID7ghsQAC%!%k4GlfkU%GDqqXu;QjsVYC z$p^u}W4l=Hl&*Vs<`=(Kryxg5e;fLbEPIZFEDqHYa4X^wUx~EGfq^F@zDB%E9R(`) zDoW+5oy8!)<%-DHK`C*(l>g>og$GW>@8srGi|l`3c^C;Eousq(48SglA|OxCw@u?O zm}cgZq`dt6nB-(hu<;F@dN_pq8%GZZ7Vro9K>b@-C(5To;R4_B&5&X>X`7B+K8zQ< zH>t+5#~4a71odJn@PSsKE?Iv^P8>3x+TOT%Gt z&*=vfa0+T&%ZhpWlfG7AFQ%{}fSSWG0YVZsFf_FM88%y6e8jXA{?gww))#gi0QLXl zE<2=I(AyUDmzD7!R!!u;v2zZQ%tU6kd_v9ze^(EO{KnnO_HIjkrZWg&+-jU|S?gjD z#=lLvQYQ$ag2RzFyK1Ex{g!t~%AXym`XG?@U3j@`rD&2@%^)ze4k@T?C$Ev>+%i8c zA^()Z{(qIQ8b9*~`7Y#5?e2UHYT>rL=yXSkNmvl6MEgay`L+-&uN}tffBIjw)5524 zL#FG`r5_ER=vwCT7hx3^osP!$nw%uAIugk7M*_uO1onB!)8?ml54`6>1)>9-g8w2K zY`e^uW;8WkY492Iu&rDQjJ_}Z$@u$!&Uy4q)GjYMuC+q)@4cJXxmO=KY_QrQi_SO! zK16i#cM3JqGiQq9=VMmir6<9YXP6QSF=I=a>7PAI+811JUAZE;Jf3vqkoW>4VHLWv<&3`N{Je9B)_6!(gTc!nVbQ5h zk+JoSH+)%4vFy!@e~^!P!#Hs~B;%VR`yO3{#0VqUbvb`_I?KH>-TMmCBYp)-0F>}l zMH;Aj@k(x)z<>#YrwKOU$@By#Al^zqpYnhXq?Lsv|(jx&+}loU7m9W!wNZp*5gy zHy!^xPGT-{DczT~Y~{Eu)~gV&>AT{!7V+|0gHcgrA2MwMQ`2`xD{cv@v#n8Qd*}T{ zpBKG2;dIXV;4bo@Z{#SAJ^1rETnnUNPgaOm?}}KRNp~&^`%HsR`&;Z-rjrXK<0+*T>;hLg~E6{L0sOd3jM3Cx#fk zeg**Vo_V^w?a@W{di0rDB!?;CE2zdZedmb_6>7^ppNJ%Qjp5VR6gtljUKs5 zaQCM_<<>4dMcgMXww&?@>X?w)ZU7|MBCsTfOj{sG?PIDIM~-Rki$E`TcR@wAKaK#i z+}PvsV$8j9+C8R0PM0AWm7yvd$3cl%n&BS9Zx=?#2x<|wohj0qgD)3%i;GowWlu@r zrMfDcleS$rFBwg2XAQ?X1NO$w<6ny@*%cp0q(H z2Wv^P|^?N3{$8^WU>tlZyN)g&<5PQlGy})*&D#+kiahm^L0>N z2`%TaF%x>cdwkyIx`JkjnP04`!S({dg~AUCO?*nGhe4QtbSr)M6Hb`o2S|N#WpH~f zx4COtu&M?LbFrc`!8)D|dVm>VS|d1SKy3xH)9&g1vf}C`Lqo&DyTht(vjhG4p?}@2 zclPjn_PnwB9qzKJCGYNid>=p(>ZtVb5?HBIW~%2^w~cAkT2G$Zw4GMgpQ+j}zR)d4 z5a>7j8nXvO>T{y|dvq#qj$vKYkO(Q?oQCHZM$d*r%Lo5&o(HKG!FK13t zlTY_u#gD(9A;9j|Ac)~yONk@Q;M1Bs*2kxudpCqNixM5KtlVtKqm?X+`%AQ>sU5zy_<;o>IIi8mwOi=Fv!128YUv?#f=);ax@c;= z!eTOZ7KKEP5=v0PGYu+Dh)L9k0X$0#l0_!K)qtgg92^UKbrcdHu^#ml72e*AI)f5q z@ToH0;s#Y35K#5y@k?{rtzKSW+9HdIRvdB1 zIs4)}2RO!%%j<^A%-+T%qpu?6%C}PZFm*Ki_H9vVjY!VV5g1=2kfHBEjEgza~l__dj>$dYsgtu!_=+ zbZIWzTZETZe;s*A~h{$gci6&x5iClL}B2F|tpzw++Ej+i2U;*_5> zVSWZD*sP(9ngnw3u#8E_vz(6Q12BoaDG+6BqmfEFZ<2s;k$7W9L0@2Oudq@Ex`?hEIO}tL4zWuJ$pDKRMX*- zwCK%h&15E@MO9X4{TI;+6E54ZNkPN7L`e}RlHttgBVny^+83`*d5h~^3&=`t;%Uic zCfV?Q*QGR%$429Uy~0}LDgu&>DXY}H99f+l8+GQ_HvROx7`CN_bUwf*jK0O3L^Bf2 zwKXkoK<+A;Uz~w;F(M~r+1zr;vUn0lTv(xQ5gr~}udvqToa%j%-ME9Zl_(M9x6p^C zOo9OoT*etdw_GnF*hbI*!ba8(hu03zN$3DJwXv}|Pdh({{Qbz0Q9ykNkQ<1H`&0_F z!P19|`$7KpRbo1nuZ3do4*dq(i5(K6e_&xgNf9T~ zCQhGtHT!gEeeh?TWKPsV{Mn$r?dl}(Tnq3^>5T3RaEuo-iW0_=%k}a!8s=#v0-!^L zeRGg*a*jfU&y;UaHli617+EOGtD++V z4f}8)l}C#0_(Sv0eF`~1uO=$+!7WNdKmRvx5-F45{F&oTBo(K$0)2QNqL>#UK#u2x z{(_sALRmh*r4%}faiF*1YVD)_E3Q7XKro>()|7G-9RTSPZ>2ab_r}}tqW^n)IHFK3 zljF)+K`m_^S{#iGBis)w+_r5 zM~k`-trzp!Vwhnn=`7;!Ps^PW!o@TCf@|BRPAJCu9;I=0>9Du@D&HWxVQed`!<$}l z2uF_fEQd(H+DfVMsuCp@(l(1u?M&{z(+T5mUP8jHn2Zdnv!a6}P=iVemG_))IlwK( zJ#U~V&^b7$^4<>d=7m6@dqhBfO^YETCeW9XOOt@WPR`S^Sex?x`DGP^660Vp_T-c7l0&0u%b-@7;Nm~ zumT$Mc5hJ*IxfbWfwVg9sPB@?QXOe8^KjOSlU4_mQ3-KL*{7}RPzOI6{tTjhN0x~c zu)NSBak&FtCj%~79DWK{WDNKdlWiTbOmjZIX6U_Z!pNZVeYeF{@m!ZieT;6>*I$es zU(eMK8ZIZc!g!y6CfUO@kb`Y2wmT-cbdg|h-(=~*`$o&m9;){(bKI=wb)3K!(JZ=Q zyUCz)_l}sg^@>QEC^2W8b#|fiT%%w6MRvZya>|>16{&N6Wo%s6!(>%s>-fj;#lMKS zgeOR>e$lJif8nlj{@x{5M~mm#^haXlv&sQGe{8XU1R)9pQwip!OdWfx}&2k`MqMluDAa_`H1eZOwO__4pR_&?G|+nGd8l z#w!xjn-IHv^4k$sm^xye+=V_-urIYkJDc%=9!JZy9y|J@)u#pqSKfvg!f?Rd9lpQK zbB}IfLQFE6*gYCb?0h3`IKVj^@iGJ((Bs_a)EJjU7i19@i1clRvl0$JXsH7y?!d@G!J=S#T7uNP zTUmd=Hgl6$f=>pY(ktem%(is?W$=BqU_}DtRrBmGtZvrE=)bdhfbuq!EBZE-gnZ$s z?CtyN1jQH?`vP6#Be6Yd4}{}x7l#vTZz>`dB8E2E$JVdJX53t|G{FdtA#m7cUVZ+f zfFJaM?f_5J{?n)WTe?;QfI-nhH^~23K98=Dm(&^90z=&Fx#P^1kC8HFu>p=;TMeFZ zlJkQ+2hlqA{DdmqPt_ERe$w1q>Q--mW&sB z;;D%6g+v`mlcGHSxZuz?RJ)KB9e&hb|4nZAyq#S@TN~0IlN2LLqD@e~cfGTm|Dnk) zBzu@WI4DeCO)Yhhy5#UzyKUljunMqJ=+{Z}e{JLbZ+eygW25)g?=SdoZPEWn%kw{8 aW)+!}NVqMeX>l2S4K4M{YGhSQzrO*R8q56v delta 100304 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 *(&mqbE()a$e}x4AWT@a{fvPf&$1TO54&9+y;M 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