@@ -883,7 +883,10 @@ async fn get_analytics_live_inner(
883883 {
884884 Ok ( rows) => Ok ( analytics_live_response ( window, fetched_at, rows) ) ,
885885 Err ( error) => {
886- tracing:: warn!( ?error, "player_events live query failed; falling back to rollups" ) ;
886+ tracing:: warn!(
887+ ?error,
888+ "player_events live query failed; falling back to rollups"
889+ ) ;
887890 analytics_live_from_rollups ( state, & organization_id, window, fetched_at) . await
888891 }
889892 }
@@ -2011,7 +2014,7 @@ fn clickhouse_live_analytics_query(
20112014 "\
20122015 SELECT \
20132016 'bucket' AS row_kind, \
2014- toUnixTimestamp64Milli( toStartOfMinute(observed_at)) AS bucket_start_ms, \
2017+ toInt64(toUnixTimestamp( toStartOfMinute(observed_at))) * 1000 AS bucket_start_ms, \
20152018 countIf(phase = 'first_frame') AS views, \
20162019 sumIf(watch_delta_ms, phase = 'watch_heartbeat') AS watch_time_ms, \
20172020 toUInt64(0) AS unique_viewers, \
@@ -2846,6 +2849,22 @@ mod tests {
28462849 ) ;
28472850 }
28482851
2852+ #[ test]
2853+ fn live_analytics_bucket_query_keeps_clickhouse_datetime64_compatible ( ) {
2854+ let window = NormalizedPlaybackAnalyticsWindow {
2855+ started_at : DateTime :: parse_from_rfc3339 ( "2026-06-13T11:00:00.000Z" )
2856+ . unwrap ( )
2857+ . with_timezone ( & Utc ) ,
2858+ ended_at : DateTime :: parse_from_rfc3339 ( "2026-06-13T12:00:00.000Z" )
2859+ . unwrap ( )
2860+ . with_timezone ( & Utc ) ,
2861+ } ;
2862+ let query = clickhouse_live_analytics_query ( "00000000-0000-0000-0000-000000000001" , window) ;
2863+
2864+ assert ! ( query. contains( "toInt64(toUnixTimestamp(toStartOfMinute(observed_at))) * 1000" ) ) ;
2865+ assert ! ( !query. contains( "toUnixTimestamp64Milli(toStartOfMinute(observed_at))" ) ) ;
2866+ }
2867+
28492868 #[ test]
28502869 fn analytics_breakdowns_query_covers_acquisition_dimensions ( ) {
28512870 let window = NormalizedPlaybackAnalyticsWindow {
@@ -2860,8 +2879,18 @@ mod tests {
28602879 clickhouse_analytics_breakdowns_query ( "00000000-0000-0000-0000-000000000001" , window) ;
28612880
28622881 for dimension in [
2863- "channel" , "referrer" , "campaign" , "keyword" , "hostname" , "country" , "region" , "city" ,
2864- "browser" , "os" , "device" , "page_type" ,
2882+ "channel" ,
2883+ "referrer" ,
2884+ "campaign" ,
2885+ "keyword" ,
2886+ "hostname" ,
2887+ "country" ,
2888+ "region" ,
2889+ "city" ,
2890+ "browser" ,
2891+ "os" ,
2892+ "device" ,
2893+ "page_type" ,
28652894 ] {
28662895 assert ! (
28672896 query. contains( & format!( "'{dimension}' AS dimension" ) ) ,
0 commit comments