From b4a3b1f86906a9d719f50e1004f0923a7cb2f48c Mon Sep 17 00:00:00 2001
From: Rafael Audibert <32079912+rafaeelaudibert@users.noreply.github.com>
Date: Thu, 5 Dec 2024 13:17:17 -0300
Subject: [PATCH 01/15] build: Add Browserslist update on a schedule (#26665)
---
.../actions/browserslist-update/action.yml | 32 +++++++++++++++++++
1 file changed, 32 insertions(+)
create mode 100644 .github/actions/browserslist-update/action.yml
diff --git a/.github/actions/browserslist-update/action.yml b/.github/actions/browserslist-update/action.yml
new file mode 100644
index 0000000000000..28fe56bee93b3
--- /dev/null
+++ b/.github/actions/browserslist-update/action.yml
@@ -0,0 +1,32 @@
+name: Update Browserslist database
+
+on:
+ schedule:
+ - cron: '0 0 5,15,25 * *'
+ workflow_dispatch:
+
+permissions:
+ contents: write
+ pull-requests: write
+
+jobs:
+ update-browserslist-database:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ - name: Configure git
+ run: |
+ # Setup for committing using built-in token. See https://github.com/actions/checkout#push-a-commit-using-the-built-in-token
+ git config user.name "github-actions[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+ - name: Update Browserslist database and create PR if applies
+ uses: c2corg/browserslist-update-action@v2
+ with:
+ base_branch: main
+ commit_message: 'build: update Browserslist db'
+ title: 'build: update Browserslist db'
+ body: 'Auto-generated by [browserslist-update-action](https://github.com/c2corg/browserslist-update-action/)'
+ labels: 'dependencies, automerge'
From 68e06a527c3b5bc33c0c6aee622cc14feb0b8403 Mon Sep 17 00:00:00 2001
From: Manoel Aranda Neto <5731772+marandaneto@users.noreply.github.com>
Date: Thu, 5 Dec 2024 18:06:48 +0100
Subject: [PATCH 02/15] fix: flutter web analytics onboarding (#26687)
---
.../sdks/sdk-install-instructions/flutter.tsx | 23 +++++++++++++++++++
.../SessionReplaySDKInstructions.tsx | 4 ++--
.../onboarding/sdks/session-replay/index.tsx | 2 ++
.../WebAnalyticsSDKInstructions.tsx | 2 +-
.../onboarding/sdks/web-analytics/flutter.tsx | 13 +++++++++++
.../onboarding/sdks/web-analytics/index.tsx | 1 +
6 files changed, 42 insertions(+), 3 deletions(-)
create mode 100644 frontend/src/scenes/onboarding/sdks/web-analytics/flutter.tsx
diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/flutter.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/flutter.tsx
index d9c2860b784fc..1017f86e4a4a6 100644
--- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/flutter.tsx
+++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/flutter.tsx
@@ -189,3 +189,26 @@ export function SDKInstallFlutterInstructions(props: FlutterSetupProps): JSX.Ele
>
)
}
+
+export function SDKInstallFlutterTrackScreenInstructions(): JSX.Element {
+ return (
+ <>
+
+ With the PosthogObserver Observer,
+ PostHog will try to record all screen changes automatically.
+
+
+ If you want to manually send a new screen capture event, use the screen
function.
+
+ {`import 'package:posthog_flutter/posthog_flutter.dart';
+
+await Posthog().screen(
+ screenName: 'Dashboard',
+ properties: {
+ 'background': 'blue',
+ 'hero': 'superhog'
+ });
+`}
+ >
+ )
+}
diff --git a/frontend/src/scenes/onboarding/sdks/session-replay/SessionReplaySDKInstructions.tsx b/frontend/src/scenes/onboarding/sdks/session-replay/SessionReplaySDKInstructions.tsx
index 7eaef80918243..29641d978af38 100644
--- a/frontend/src/scenes/onboarding/sdks/session-replay/SessionReplaySDKInstructions.tsx
+++ b/frontend/src/scenes/onboarding/sdks/session-replay/SessionReplaySDKInstructions.tsx
@@ -12,6 +12,7 @@ import {
AngularInstructions,
AstroInstructions,
BubbleInstructions,
+ FlutterInstructions,
FramerInstructions,
HTMLSnippetInstructions,
iOSInstructions,
@@ -20,12 +21,11 @@ import {
NuxtJSInstructions,
ReactInstructions,
RemixInstructions,
+ RNInstructions,
SvelteInstructions,
VueInstructions,
WebflowInstructions,
} from '.'
-import { FlutterInstructions } from './flutter'
-import { RNInstructions } from './react-native'
export const SessionReplaySDKInstructions: SDKInstructionsMap = {
[SDKKey.JS_WEB]: JSWebInstructions,
diff --git a/frontend/src/scenes/onboarding/sdks/session-replay/index.tsx b/frontend/src/scenes/onboarding/sdks/session-replay/index.tsx
index 3a5aadfe8909d..a769433142bec 100644
--- a/frontend/src/scenes/onboarding/sdks/session-replay/index.tsx
+++ b/frontend/src/scenes/onboarding/sdks/session-replay/index.tsx
@@ -2,6 +2,7 @@ export * from './android'
export * from './angular'
export * from './astro'
export * from './bubble'
+export * from './flutter'
export * from './framer'
export * from './html-snippet'
export * from './ios'
@@ -9,6 +10,7 @@ export * from './js-web'
export * from './next-js'
export * from './nuxt'
export * from './react'
+export * from './react-native'
export * from './remix'
export * from './svelte'
export * from './vue'
diff --git a/frontend/src/scenes/onboarding/sdks/web-analytics/WebAnalyticsSDKInstructions.tsx b/frontend/src/scenes/onboarding/sdks/web-analytics/WebAnalyticsSDKInstructions.tsx
index 4c6e9a7953123..4457c6dfb7b3d 100644
--- a/frontend/src/scenes/onboarding/sdks/web-analytics/WebAnalyticsSDKInstructions.tsx
+++ b/frontend/src/scenes/onboarding/sdks/web-analytics/WebAnalyticsSDKInstructions.tsx
@@ -1,11 +1,11 @@
import { SDKInstructionsMap, SDKKey } from '~/types'
-import { FlutterInstructions } from '../session-replay/flutter'
import {
AndroidInstructions,
AngularInstructions,
AstroInstructions,
BubbleInstructions,
+ FlutterInstructions,
FramerInstructions,
HTMLSnippetInstructions,
iOSInstructions,
diff --git a/frontend/src/scenes/onboarding/sdks/web-analytics/flutter.tsx b/frontend/src/scenes/onboarding/sdks/web-analytics/flutter.tsx
new file mode 100644
index 0000000000000..7496820b35ad1
--- /dev/null
+++ b/frontend/src/scenes/onboarding/sdks/web-analytics/flutter.tsx
@@ -0,0 +1,13 @@
+import { WebAnalyticsMobileFinalSteps } from 'scenes/onboarding/sdks/web-analytics/FinalSteps'
+
+import { SDKInstallFlutterInstructions, SDKInstallFlutterTrackScreenInstructions } from '../sdk-install-instructions'
+
+export function FlutterInstructions(): JSX.Element {
+ return (
+ <>
+
+
+
+ >
+ )
+}
diff --git a/frontend/src/scenes/onboarding/sdks/web-analytics/index.tsx b/frontend/src/scenes/onboarding/sdks/web-analytics/index.tsx
index 463169921abcb..a769433142bec 100644
--- a/frontend/src/scenes/onboarding/sdks/web-analytics/index.tsx
+++ b/frontend/src/scenes/onboarding/sdks/web-analytics/index.tsx
@@ -2,6 +2,7 @@ export * from './android'
export * from './angular'
export * from './astro'
export * from './bubble'
+export * from './flutter'
export * from './framer'
export * from './html-snippet'
export * from './ios'
From 42d32569c00b1d5315320eb90bcd4f9c77c10c47 Mon Sep 17 00:00:00 2001
From: Anirudh Pillai
Date: Thu, 5 Dec 2024 17:12:45 +0000
Subject: [PATCH 03/15] fix(exports): comparisons with breakdowns (#26636)
---
posthog/tasks/exports/csv_exporter.py | 14 ++-
.../tasks/exports/test/test_csv_exporter.py | 112 ++++++++++++++----
2 files changed, 98 insertions(+), 28 deletions(-)
diff --git a/posthog/tasks/exports/csv_exporter.py b/posthog/tasks/exports/csv_exporter.py
index 751b8f5db70cc..7657db26c203f 100644
--- a/posthog/tasks/exports/csv_exporter.py
+++ b/posthog/tasks/exports/csv_exporter.py
@@ -170,19 +170,21 @@ def _convert_response_to_csv_data(data: Any) -> Generator[Any, None, None]:
yield line
return
elif isinstance(first_result.get("data"), list):
+ is_comparison = first_result.get("compare_label")
+
+ # take date labels from current results, when comparing against previous
+ # as previous results will be indexed with offset
+ date_labels_item = next((x for x in results if x.get("compare_label") == "current"), None)
+
# TRENDS LIKE
for index, item in enumerate(results):
label = item.get("label", f"Series #{index + 1}")
compare_label = item.get("compare_label", "")
series_name = f"{label} - {compare_label}" if compare_label else label
- line = {"series": series_name}
- # take labels from current results, when comparing against previous
- if item.get("compare_label") == "previous":
- label_item = results[index - 1]
- else:
- label_item = item
+ line = {"series": series_name}
+ label_item = date_labels_item if is_comparison else item
action = item.get("action")
if isinstance(action, dict) and action.get("custom_name"):
diff --git a/posthog/tasks/exports/test/test_csv_exporter.py b/posthog/tasks/exports/test/test_csv_exporter.py
index 29b57da6d7a0b..4d53742ed65bb 100644
--- a/posthog/tasks/exports/test/test_csv_exporter.py
+++ b/posthog/tasks/exports/test/test_csv_exporter.py
@@ -2,13 +2,13 @@
from typing import Any, Optional
from unittest import mock
from unittest.mock import MagicMock, Mock, patch, ANY
+from dateutil.relativedelta import relativedelta
from openpyxl import load_workbook
from io import BytesIO
import pytest
from boto3 import resource
from botocore.client import Config
-from dateutil.relativedelta import relativedelta
from django.test import override_settings
from django.utils.timezone import now
from requests.exceptions import HTTPError
@@ -703,23 +703,75 @@ def test_csv_exporter_trends_query_with_compare_previous_option(
self,
) -> None:
_create_person(distinct_ids=[f"user_1"], team=self.team)
- events_by_person = {
- "user_1": [
- {
- "event": "$pageview",
- "timestamp": datetime(2023, 3, 21, 13, 46),
- },
- {
- "event": "$pageview",
- "timestamp": datetime(2023, 3, 21, 13, 46),
- },
- {
- "event": "$pageview",
- "timestamp": datetime(2023, 3, 22, 13, 47),
- },
- ],
- }
- journeys_for(events_by_person, self.team)
+
+ date = datetime(2023, 3, 21, 13, 46)
+ date_next_week = date + relativedelta(days=7)
+
+ _create_event(
+ event="$pageview",
+ distinct_id="1",
+ team=self.team,
+ timestamp=date,
+ properties={"$browser": "Safari"},
+ )
+ _create_event(
+ event="$pageview",
+ distinct_id="1",
+ team=self.team,
+ timestamp=date,
+ properties={"$browser": "Chrome"},
+ )
+ _create_event(
+ event="$pageview",
+ distinct_id="1",
+ team=self.team,
+ timestamp=date,
+ properties={"$browser": "Chrome"},
+ )
+ _create_event(
+ event="$pageview",
+ distinct_id="1",
+ team=self.team,
+ timestamp=date,
+ properties={"$browser": "Firefox"},
+ )
+
+ _create_event(
+ event="$pageview",
+ distinct_id="1",
+ team=self.team,
+ timestamp=date_next_week,
+ properties={"$browser": "Chrome"},
+ )
+ _create_event(
+ event="$pageview",
+ distinct_id="1",
+ team=self.team,
+ timestamp=date_next_week,
+ properties={"$browser": "Chrome"},
+ )
+ _create_event(
+ event="$pageview",
+ distinct_id="1",
+ team=self.team,
+ timestamp=date_next_week,
+ properties={"$browser": "Chrome"},
+ )
+ _create_event(
+ event="$pageview",
+ distinct_id="1",
+ team=self.team,
+ timestamp=date_next_week,
+ properties={"$browser": "Firefox"},
+ )
+ _create_event(
+ event="$pageview",
+ distinct_id="1",
+ team=self.team,
+ timestamp=date_next_week,
+ properties={"$browser": "Firefox"},
+ )
+
flush_persons_and_events()
exported_asset = ExportedAsset(
@@ -728,7 +780,10 @@ def test_csv_exporter_trends_query_with_compare_previous_option(
export_context={
"source": {
"kind": "TrendsQuery",
- "dateRange": {"date_to": "2023-03-22", "date_from": "2023-03-22"},
+ "dateRange": {
+ "date_from": date.strftime("%Y-%m-%d"),
+ "date_to": date_next_week.strftime("%Y-%m-%d"),
+ },
"series": [
{
"kind": "EventsNode",
@@ -738,7 +793,8 @@ def test_csv_exporter_trends_query_with_compare_previous_option(
},
],
"interval": "day",
- "compareFilter": {"compare": True},
+ "compareFilter": {"compare": True, "compare_to": "-1w"},
+ "breakdownFilter": {"breakdown": "$browser", "breakdown_type": "event"},
}
},
)
@@ -747,5 +803,17 @@ def test_csv_exporter_trends_query_with_compare_previous_option(
with self.settings(OBJECT_STORAGE_ENABLED=True, OBJECT_STORAGE_EXPORTS_FOLDER="Test-Exports"):
csv_exporter.export_tabular(exported_asset)
content = object_storage.read(exported_asset.content_location) # type: ignore
- lines = (content or "").strip().split("\r\n")
- self.assertEqual(lines, ["series,22-Mar-2023", "$pageview - current,1", "$pageview - previous,2"])
+
+ lines = (content or "").strip().splitlines()
+
+ expected_lines = [
+ "series,21-Mar-2023,22-Mar-2023,23-Mar-2023,24-Mar-2023,25-Mar-2023,26-Mar-2023,27-Mar-2023,28-Mar-2023",
+ "Chrome - current,2.0,0.0,0.0,0.0,0.0,0.0,0.0,3.0",
+ "Firefox - current,1.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0",
+ "Safari - current,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0",
+ "Chrome - previous,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0",
+ "Firefox - previous,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0",
+ "Safari - previous,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0",
+ ]
+
+ self.assertEqual(lines, expected_lines)
From 16075ff5c3671587db9e6a6a3ed396058d0f413b Mon Sep 17 00:00:00 2001
From: Sandy Spicer
Date: Thu, 5 Dec 2024 11:31:52 -0600
Subject: [PATCH 04/15] fix: actor query oom (#26666)
---
mypy-baseline.txt | 1 -
posthog/hogql_queries/actors_query_runner.py | 3 +-
.../test/__snapshots__/test_funnel.ambr | 32 ++-
.../test_funnel_correlation.ambr | 160 +++++++++++----
.../test_funnel_correlation_actors.ambr | 12 +-
.../test_funnel_correlation_actors_udf.ambr | 12 +-
.../test_funnel_correlation_udf.ambr | 160 +++++++++++----
.../__snapshots__/test_funnel_persons.ambr | 12 +-
.../test_funnel_persons_udf.ambr | 12 +-
.../__snapshots__/test_funnel_strict.ambr | 16 +-
.../test_funnel_strict_persons.ambr | 12 +-
.../test_funnel_strict_persons_udf.ambr | 12 +-
.../__snapshots__/test_funnel_strict_udf.ambr | 16 +-
.../test_funnel_trends_actors.ambr | 12 +-
.../test_funnel_trends_actors_udf.ambr | 12 +-
.../test/__snapshots__/test_funnel_udf.ambr | 32 ++-
.../__snapshots__/test_funnel_unordered.ambr | 16 +-
.../test_funnel_unordered_persons.ambr | 4 +-
.../test_insight_actors_query_runner.ambr | 21 +-
.../test_paths_query_runner_ee.ambr | 192 +++++++++++++-----
.../test_retention_query_runner.ambr | 8 +-
.../test/__snapshots__/test_trends.ambr | 8 +-
.../test/test_actors_query_runner.py | 7 +-
23 files changed, 576 insertions(+), 196 deletions(-)
diff --git a/mypy-baseline.txt b/mypy-baseline.txt
index 96984826e9c5a..462352d8fe0bc 100644
--- a/mypy-baseline.txt
+++ b/mypy-baseline.txt
@@ -664,7 +664,6 @@ posthog/queries/trends/test/test_person.py:0: error: Invalid index type "int" fo
posthog/queries/trends/test/test_person.py:0: error: "str" has no attribute "get" [attr-defined]
posthog/queries/trends/test/test_person.py:0: error: Invalid index type "int" for "_MonkeyPatchedResponse"; expected type "str" [index]
posthog/models/test/test_organization_model.py:0: error: Module "django.utils.timezone" does not explicitly export attribute "timedelta" [attr-defined]
-posthog/hogql_queries/test/test_actors_query_runner.py:0: error: Incompatible types in assignment (expression has type "Expr", variable has type "SelectQuery") [assignment]
posthog/hogql/test/test_resolver.py:0: error: Item "None" of "JoinExpr | None" has no attribute "next_join" [union-attr]
posthog/hogql/test/test_resolver.py:0: error: Item "None" of "JoinExpr | Any | None" has no attribute "constraint" [union-attr]
posthog/hogql/test/test_resolver.py:0: error: Item "None" of "JoinConstraint | Any | None" has no attribute "constraint_type" [union-attr]
diff --git a/posthog/hogql_queries/actors_query_runner.py b/posthog/hogql_queries/actors_query_runner.py
index cec4b7019f212..cde5bd2d6311f 100644
--- a/posthog/hogql_queries/actors_query_runner.py
+++ b/posthog/hogql_queries/actors_query_runner.py
@@ -3,7 +3,7 @@
from collections.abc import Sequence, Iterator
from posthog.hogql import ast
-from posthog.hogql.constants import HogQLGlobalSettings
+from posthog.hogql.constants import HogQLGlobalSettings, HogQLQuerySettings
from posthog.hogql.parser import parse_expr, parse_order_expr
from posthog.hogql.property import has_aggregation
from posthog.hogql.resolver_utils import extract_select_queries
@@ -307,6 +307,7 @@ def to_query(self) -> ast.SelectQuery:
having=having,
group_by=group_by if has_any_aggregation else None,
order_by=order_by,
+ settings=HogQLQuerySettings(join_algorithm="auto", optimize_aggregation_in_order=True),
)
def to_actors_query(self) -> ast.SelectQuery:
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 2315f2b51ebf6..2f2933fb62433 100644
--- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr
+++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr
@@ -193,7 +193,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -612,7 +614,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -730,7 +734,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -848,7 +854,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1848,7 +1856,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1989,7 +1999,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2130,7 +2142,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2271,7 +2285,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
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 f95e83e21b1d9..4573056cf6cac 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
@@ -482,7 +482,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -673,7 +675,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -864,7 +868,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1055,7 +1061,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1408,7 +1416,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1599,7 +1609,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1790,7 +1802,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1981,7 +1995,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2520,7 +2536,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2635,7 +2653,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2750,7 +2770,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2865,7 +2887,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3128,7 +3152,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3243,7 +3269,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3490,7 +3518,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3605,7 +3635,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3720,7 +3752,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3835,7 +3869,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4098,7 +4134,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4213,7 +4251,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4482,7 +4522,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4604,7 +4646,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4726,7 +4770,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4848,7 +4894,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -5264,7 +5312,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -5386,7 +5436,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -5508,7 +5560,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -5630,7 +5684,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -6046,7 +6102,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -6168,7 +6226,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -6290,7 +6350,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -6412,7 +6474,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -6828,7 +6892,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -6950,7 +7016,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -7072,7 +7140,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -7194,7 +7264,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -7610,7 +7682,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -7732,7 +7806,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -7854,7 +7930,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -7976,7 +8054,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors.ambr
index ca6d26d135828..ea2c02c121f49 100644
--- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors.ambr
+++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors.ambr
@@ -163,7 +163,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -428,7 +430,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -619,7 +623,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors_udf.ambr
index dcec437b05683..f1f604cc85b02 100644
--- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors_udf.ambr
+++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors_udf.ambr
@@ -107,7 +107,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -239,7 +241,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -374,7 +378,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_udf.ambr
index 0912fa7845d36..71680063ab927 100644
--- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_udf.ambr
+++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_udf.ambr
@@ -358,7 +358,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -493,7 +495,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -628,7 +632,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -763,7 +769,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1026,7 +1034,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1161,7 +1171,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1296,7 +1308,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1431,7 +1445,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1820,7 +1836,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1887,7 +1905,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1954,7 +1974,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2021,7 +2043,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2202,7 +2226,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2269,7 +2295,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2434,7 +2462,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2501,7 +2531,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2568,7 +2600,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2635,7 +2669,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2816,7 +2852,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2883,7 +2921,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3070,7 +3110,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3144,7 +3186,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3218,7 +3262,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3292,7 +3338,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3592,7 +3640,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3666,7 +3716,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3740,7 +3792,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3814,7 +3868,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4114,7 +4170,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4188,7 +4246,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4262,7 +4322,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4336,7 +4398,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4636,7 +4700,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4710,7 +4776,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4784,7 +4852,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4858,7 +4928,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -5158,7 +5230,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -5232,7 +5306,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -5306,7 +5382,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -5380,7 +5458,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
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 f623ea36204cd..d2d6bbab5f69f 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
@@ -162,7 +162,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -349,7 +351,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -536,7 +540,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons_udf.ambr
index 9fbd6af6c74ed..38542d31104b9 100644
--- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons_udf.ambr
+++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_persons_udf.ambr
@@ -53,7 +53,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -131,7 +133,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -209,7 +213,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
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 163abb23ac305..d06597a0b35da 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
@@ -754,7 +754,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -872,7 +874,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -990,7 +994,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1108,7 +1114,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
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 f2e6752d368d0..651f296097a7b 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
@@ -122,7 +122,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -269,7 +271,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -416,7 +420,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons_udf.ambr
index 846e534decf6a..3a0a96ffa7162 100644
--- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons_udf.ambr
+++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_persons_udf.ambr
@@ -53,7 +53,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -131,7 +133,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -209,7 +213,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_udf.ambr
index f0bbdae5329d3..21eb841990a53 100644
--- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_udf.ambr
+++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_strict_udf.ambr
@@ -554,7 +554,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -637,7 +639,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -720,7 +724,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -803,7 +809,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_actors.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_actors.ambr
index e735153b628c3..5eafb6901598c 100644
--- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_actors.ambr
+++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_actors.ambr
@@ -148,7 +148,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -321,7 +323,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -494,7 +498,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_actors_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_actors_udf.ambr
index 6e86eda210324..36d25b420b5ee 100644
--- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_actors_udf.ambr
+++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_trends_actors_udf.ambr
@@ -51,7 +51,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -127,7 +129,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -203,7 +207,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_udf.ambr
index cb6d8db14b8ce..545e7fa4d506c 100644
--- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_udf.ambr
+++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_udf.ambr
@@ -115,7 +115,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -419,7 +421,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -491,7 +495,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -563,7 +569,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1258,7 +1266,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1341,7 +1351,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1424,7 +1436,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1507,7 +1521,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=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 3f5e9e4467e64..c52ab6eb60b8d 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
@@ -1471,7 +1471,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2310,7 +2312,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2572,7 +2576,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2834,7 +2840,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
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 a4bfbc566ff43..4315f4b9bba92 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
@@ -266,7 +266,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
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 b8db8df7c3613..b2a235c2308e0 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
@@ -66,7 +66,8 @@
WHERE equals(person.team_id, 99999)
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)
+ ORDER BY persons.properties___name ASC SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto')
LIMIT 100 SETTINGS readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
@@ -154,7 +155,8 @@
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)
+ ORDER BY persons.properties___name ASC SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto')
LIMIT 100 SETTINGS readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
@@ -192,7 +194,8 @@
WHERE equals(groups.team_id, 99999)
GROUP BY groups.group_type_index,
groups.group_key) AS groups ON equals(groups.key, source.group_key)
- ORDER BY groups.properties___name ASC)
+ ORDER BY groups.properties___name ASC SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto')
LIMIT 100 SETTINGS readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
@@ -258,7 +261,8 @@
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)
+ ORDER BY persons.properties___name ASC SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto')
LIMIT 100 SETTINGS readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
@@ -291,7 +295,8 @@
WHERE equals(groups.team_id, 99999)
GROUP BY groups.group_type_index,
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
- ORDER BY groups.properties___name ASC)
+ ORDER BY groups.properties___name ASC SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto')
LIMIT 100 SETTINGS readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
@@ -357,7 +362,8 @@
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)
+ ORDER BY persons.properties___name ASC SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto')
LIMIT 100 SETTINGS readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
@@ -432,7 +438,8 @@
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)
+ ORDER BY persons.properties___name ASC SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto')
LIMIT 100 SETTINGS readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
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 20f2012034bba..905fb297fe4a9 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
@@ -1301,7 +1301,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1448,7 +1450,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1595,7 +1599,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1744,7 +1750,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1891,7 +1899,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2038,7 +2048,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2187,7 +2199,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2334,7 +2348,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2481,7 +2497,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2723,7 +2741,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -2890,7 +2910,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3043,7 +3065,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3208,7 +3232,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3383,7 +3409,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3723,7 +3751,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -3967,7 +3997,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4211,7 +4243,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4455,7 +4489,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4849,7 +4885,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -4996,7 +5034,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -5225,7 +5265,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -5454,7 +5496,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -5601,7 +5645,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -5748,7 +5794,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -13155,7 +13203,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -13302,7 +13352,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -13449,7 +13501,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -13598,7 +13652,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -13745,7 +13801,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -13892,7 +13950,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -14041,7 +14101,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -14188,7 +14250,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -14335,7 +14399,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -14577,7 +14643,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -14744,7 +14812,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -14897,7 +14967,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -15062,7 +15134,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -15237,7 +15311,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -15577,7 +15653,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -15821,7 +15899,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -16065,7 +16145,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -16309,7 +16391,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -16703,7 +16787,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -16850,7 +16936,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -17079,7 +17167,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -17308,7 +17398,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -17455,7 +17547,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -17602,7 +17696,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
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 d726c177939a3..477e07b03d8f9 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
@@ -63,7 +63,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY length(source.appearances) DESC, source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -164,7 +166,9 @@
groups.group_key) AS groups ON equals(groups.key, source.actor_id)
ORDER BY length(source.appearances) DESC, source.actor_id ASC
LIMIT 101
- OFFSET 0 SETTINGS readonly=2,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
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 4b096b060262e..cd5f8114b5b72 100644
--- a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr
+++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr
@@ -278,7 +278,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
@@ -1422,7 +1424,9 @@
HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), 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,
+ OFFSET 0 SETTINGS optimize_aggregation_in_order=1,
+ join_algorithm='auto',
+ readonly=2,
max_execution_time=60,
allow_experimental_object_type=1,
format_csv_allow_double_quotes=0,
diff --git a/posthog/hogql_queries/test/test_actors_query_runner.py b/posthog/hogql_queries/test/test_actors_query_runner.py
index 904c1adad8d9f..36a12166cb589 100644
--- a/posthog/hogql_queries/test/test_actors_query_runner.py
+++ b/posthog/hogql_queries/test/test_actors_query_runner.py
@@ -1,3 +1,5 @@
+from typing import cast
+
import pytest
from posthog.hogql import ast
@@ -66,7 +68,7 @@ def test_default_persons_query(self):
runner = self._create_runner(ActorsQuery())
query = runner.to_query()
- query = clear_locations(query)
+ query = cast(ast.SelectQuery, clear_locations(query))
expected = ast.SelectQuery(
select=[
ast.Field(chain=["id"]),
@@ -78,7 +80,8 @@ def test_default_persons_query(self):
where=None,
order_by=[ast.OrderExpr(expr=ast.Field(chain=["created_at"]), order="DESC")],
)
- assert clear_locations(query) == expected
+ query.settings = None
+ assert query == expected
response = runner.calculate()
assert len(response.results) == 10
From f66065ece18c8f28408eb3b1962668cd74152f16 Mon Sep 17 00:00:00 2001
From: Rafael Audibert <32079912+rafaeelaudibert@users.noreply.github.com>
Date: Thu, 5 Dec 2024 14:35:32 -0300
Subject: [PATCH 05/15] fix: Fix base branch for browserlist database update
(#26689)
---
.github/actions/browserslist-update/action.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/actions/browserslist-update/action.yml b/.github/actions/browserslist-update/action.yml
index 28fe56bee93b3..e7282d624a5fd 100644
--- a/.github/actions/browserslist-update/action.yml
+++ b/.github/actions/browserslist-update/action.yml
@@ -25,7 +25,7 @@ jobs:
- name: Update Browserslist database and create PR if applies
uses: c2corg/browserslist-update-action@v2
with:
- base_branch: main
+ base_branch: master
commit_message: 'build: update Browserslist db'
title: 'build: update Browserslist db'
body: 'Auto-generated by [browserslist-update-action](https://github.com/c2corg/browserslist-update-action/)'
From 63e9b2ed43839c22862ba14d08e13b089797cefc Mon Sep 17 00:00:00 2001
From: Rafael Audibert <32079912+rafaeelaudibert@users.noreply.github.com>
Date: Thu, 5 Dec 2024 14:58:30 -0300
Subject: [PATCH 06/15] fix(chore): Move workflow to the right folder (#26690)
---
.../action.yml => workflows/browserslist-update.yml} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename .github/{actions/browserslist-update/action.yml => workflows/browserslist-update.yml} (100%)
diff --git a/.github/actions/browserslist-update/action.yml b/.github/workflows/browserslist-update.yml
similarity index 100%
rename from .github/actions/browserslist-update/action.yml
rename to .github/workflows/browserslist-update.yml
From 1930a7eab38a9c48cf0e111b28a0e51a3f15d934 Mon Sep 17 00:00:00 2001
From: ted kaemming <65315+tkaemming@users.noreply.github.com>
Date: Thu, 5 Dec 2024 10:33:34 -0800
Subject: [PATCH 07/15] fix: Don't use port returned by `system.clusters` in
`ClickhouseCluster` (#26663)
---
ee/clickhouse/materialized_columns/columns.py | 2 +-
posthog/clickhouse/cluster.py | 12 +++++++-----
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/ee/clickhouse/materialized_columns/columns.py b/ee/clickhouse/materialized_columns/columns.py
index c9624bf96bacd..acfc972c7d3d7 100644
--- a/ee/clickhouse/materialized_columns/columns.py
+++ b/ee/clickhouse/materialized_columns/columns.py
@@ -126,7 +126,7 @@ def get_materialized_columns(
def get_cluster() -> ClickhouseCluster:
extra_hosts = []
for host_config in map(copy, CLICKHOUSE_PER_TEAM_SETTINGS.values()):
- extra_hosts.append(ConnectionInfo(host_config.pop("host"), host_config.pop("port", None)))
+ extra_hosts.append(ConnectionInfo(host_config.pop("host")))
assert len(host_config) == 0, f"unexpected values: {host_config!r}"
return ClickhouseCluster(default_client(), extra_hosts=extra_hosts)
diff --git a/posthog/clickhouse/cluster.py b/posthog/clickhouse/cluster.py
index 3aa67c94ff3b5..75c91db9da75f 100644
--- a/posthog/clickhouse/cluster.py
+++ b/posthog/clickhouse/cluster.py
@@ -52,7 +52,9 @@ def result(
class ConnectionInfo(NamedTuple):
address: str
- port: int
+
+ def make_pool(self) -> ChPool:
+ return make_ch_pool(host=self.address)
class HostInfo(NamedTuple):
@@ -67,10 +69,10 @@ class HostInfo(NamedTuple):
class ClickhouseCluster:
def __init__(self, bootstrap_client: Client, extra_hosts: Sequence[ConnectionInfo] | None = None) -> None:
self.__hosts = [
- HostInfo(ConnectionInfo(host_address, port), shard_num, replica_num)
- for (host_address, port, shard_num, replica_num) in bootstrap_client.execute(
+ HostInfo(ConnectionInfo(host_address), shard_num, replica_num)
+ for (host_address, shard_num, replica_num) in bootstrap_client.execute(
"""
- SELECT host_address, port, shard_num, replica_num
+ SELECT host_address, shard_num, replica_num
FROM system.clusters
WHERE name = %(name)s
ORDER BY shard_num, replica_num
@@ -87,7 +89,7 @@ def __init__(self, bootstrap_client: Client, extra_hosts: Sequence[ConnectionInf
def __get_task_function(self, host: HostInfo, fn: Callable[[Client], T]) -> Callable[[], T]:
pool = self.__pools.get(host)
if pool is None:
- pool = self.__pools[host] = make_ch_pool(host=host.connection_info.address, port=host.connection_info.port)
+ pool = self.__pools[host] = host.connection_info.make_pool()
def task():
with pool.get_client() as client:
From 56c4865af607c3f6ed1d8f1af32b25ee1f0c0064 Mon Sep 17 00:00:00 2001
From: Rafael Audibert <32079912+rafaeelaudibert@users.noreply.github.com>
Date: Thu, 5 Dec 2024 16:12:01 -0300
Subject: [PATCH 08/15] fix: Pass `github_token` to the `browserslist` action
(#26691)
---
.github/workflows/browserslist-update.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/browserslist-update.yml b/.github/workflows/browserslist-update.yml
index e7282d624a5fd..84b0dcf6db785 100644
--- a/.github/workflows/browserslist-update.yml
+++ b/.github/workflows/browserslist-update.yml
@@ -25,6 +25,7 @@ jobs:
- name: Update Browserslist database and create PR if applies
uses: c2corg/browserslist-update-action@v2
with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
base_branch: master
commit_message: 'build: update Browserslist db'
title: 'build: update Browserslist db'
From dc3cdef51e5c74cc8dcabb0af908d9f2ca860c05 Mon Sep 17 00:00:00 2001
From: Paul D'Ambra
Date: Thu, 5 Dec 2024 20:28:04 +0100
Subject: [PATCH 09/15] feat: clearer platform support in settings (#26649)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
---
...nel-top-to-bottom-breakdown-edit--dark.png | Bin 164279 -> 163796 bytes
...other-settings--settings-project--dark.png | Bin 793172 -> 817855 bytes
...ther-settings--settings-project--light.png | Bin 790770 -> 815826 bytes
...ngs-project-with-replay-features--dark.png | Bin 838663 -> 871047 bytes
...gs-project-with-replay-features--light.png | Bin 836549 -> 868388 bytes
...ings-session-timeout-all-options--dark.png | Bin 793172 -> 817855 bytes
...ngs-session-timeout-all-options--light.png | Bin 790770 -> 815826 bytes
...gs-session-timeout-password-only--dark.png | Bin 793172 -> 817855 bytes
...s-session-timeout-password-only--light.png | Bin 790770 -> 815826 bytes
...sion-timeout-sso-enforced-github--dark.png | Bin 793172 -> 817855 bytes
...ion-timeout-sso-enforced-github--light.png | Bin 790770 -> 815826 bytes
...sion-timeout-sso-enforced-google--dark.png | Bin 793172 -> 817855 bytes
...ion-timeout-sso-enforced-google--light.png | Bin 790770 -> 815826 bytes
...ession-timeout-sso-enforced-saml--dark.png | Bin 793172 -> 817855 bytes
...ssion-timeout-sso-enforced-saml--light.png | Bin 790770 -> 815826 bytes
...ettings-session-timeout-sso-only--dark.png | Bin 793172 -> 817855 bytes
...ttings-session-timeout-sso-only--light.png | Bin 790770 -> 815826 bytes
.../SessionRecordingIngestionSettings.tsx | 3 +
.../environment/SessionRecordingSettings.tsx | 108 +++++++++++++++++-
19 files changed, 107 insertions(+), 4 deletions(-)
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 64260538a2c7ba5b14c503776032739035c06357..ee27b11bed568bba4e9eb8494c84cc453b4e1094 100644
GIT binary patch
delta 126122
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