Choose Your Feed: Daily vs Hourly

How the daily and hourly Conviva Connect Video Session Feed schedules differ, the hourly deduplication rule, and how to derive per-day metrics from session totals.

Updated 2026-09-25 video-ssd, daily, hourly, deduplication, cumulative

Conviva Connect delivers the Video Session Feed on a daily or an hourly schedule. Both describe the same sessions, but they include rows differently, and the hourly feed needs a deduplication step before you aggregate. Pick the feed that matches your latency needs.

Daily feed

The daily feed carries lifetime metrics: each row reports a session's totals over its full lifespan. It is timezone-aligned to your customer's local day and delivers one row per session with the final metrics for sessions that ended during the day, plus a last-hour snapshot for sessions that were still in flight at the day boundary. This is the clean one-row-per-session feed, and it avoids cross-day double counting. Lifetime metrics are most useful once a session has ended.

Use the daily feed when you want the simplest correct dataset: daily reporting, per-session analysis, and warehouse loads where a few hours of latency is acceptable.

Hourly feed

The hourly feed delivers a file every hour instead of once a day, carrying interval metrics: each row reports a session's totals as of that hour, which lets you track sessions while they are still ongoing. Each file includes every session that was active during that hour, including sessions that have not ended yet. Each row carries the session's totals accumulated up to that hour (cumulative to that hour, not just that hour's activity). A session that is live from 09:15 to 11:45 appears in the 09:00, 10:00, and 11:00 files, and each of those rows reports the session's totals up to that hour.

Deduplicate before you aggregate. Because a multi-hour session repeats across hourly files, any cross-hour or cross-file aggregation must deduplicate on ConvivaSessionID plus StartTimeUnixMs, keeping the latest row (the most recent dt hour bucket). Skipping this step double counts multi-hour sessions.

Deduplication example

Keep only the latest row per session before computing any hour-spanning aggregate:

WITH ranked AS (
  SELECT
    *,
    ROW_NUMBER() OVER (
      PARTITION BY ConvivaSessionID, StartTimeUnixMs
      ORDER BY dt DESC
    ) AS rn
  FROM hourly_ssd
)
SELECT * FROM ranked WHERE rn = 1;

Metrics are session totals, not per-interval values

In both feeds, each row reports the session's totals, not the activity in a single day or hour: the daily feed reports lifetime totals per session, and the hourly feed reports each session's totals as of the hour. To derive per-day (interval) values from the daily lifetime feed, subtract the prior day's lifetime totals from the current day's. The Calculating Interval (day) Metrics section of Content Summary shows the SQL.

Sample rows: daily vs hourly

These anonymized samples show how the same schema looks in each feed. The values are synthetic (test-network IP addresses and placeholder names), but they preserve the real differences you should expect between the two feeds. Scroll each table horizontally to see all 84 columns.

In the daily sample, IPAddress arrives in plaintext-style IPv4 form, DeviceOS is populated, and StreamURL is not set. Download the full sample daily Connect file.

Daily sample

ViewerIDAssetNameDeviceOSCountryStateCityPostalCodeASNISPStartTimeUnixStartTimeUnixMsStartupTimePlayingTimeReBufferingTimeInterruptsAverageBitRateStartupErrorSessionTagsIPV4IPV6IPAddressIPTypeCDNBrowserConvivaSessionIDStreamURLErrorListPercentageCompleteConnectionInducedRebufferingTimeVideoRestartTimeRejoinedCountVPFVPFErrorListContentLengthEndedStatusSessionEndedStatusEndTimeUnixEndTimeUnixMsVSFBusinessVSFBusinessErrorListVSFTechnicalVSFTechnicalErrorListVPFBusinessVPFBusinessErrorListVPFTechnicalVPFTechnicalErrorListPauseTimeCIRRInterruptCountMicroPlayingTimeMicroPlayingInterruptionsMicroBufferingTimeMicroBufferingInterruptionsLongRebufferingTimeLongRebufferingInterruptionsLastCDNEdgeServerLastCDNGroupIDExitDuringPreRollAdRelatedRebufferingRebufferingDuringAdsPausedRatioLastPlayheadTimeNumBitrateSwitchesAvgAverageBitRateCIRRelatedExitDeviceHardwareTypeDeviceManufactureDeviceMarketingNameDeviceNameDeviceOSVersionDeviceOSFamilyBrowserVersionPlayerFrameworkNamePlayerFrameworkVersionDeviceModelDeviceVendorConnectionTypeisLiveDMADecisionResourceDecisionBitrateDecisionResourceIdpCoreCDNDecisionResourceResolveddt
abcdef0000000000000000000000000000000000000000000000000000000001Example Asset 1Example OSUnited StatesSpringfield64500Example ISP176852160017685216000001650106080010000falsedv.mod=ExampleModel&c3.cm.id=example_id&net.t=WiFi&c3.device.conn=WiFi&c3.cm.genre=Example&c3.cws.clv=3.5.12&dv.os=Example%20OS&c3.cm.affiliate=N%2FA&dv.fw=Example%20Framework&c3.cm.seriesName=Example%20Series&c3.cm.brand=N%2FA&dv.cat=Example&dv.br=Native%20App&c3.cm.channel=example&c3.player.name=Example%20Player&c3.cm.showTitle=Example%20Show&c3.cm.contentType=Example&c3.cm.name=Example&c3.app.version=1.0.0&dv.mnf=ExampleMfr&c3.video.isLive=F&dv.osv=Example%20OS%201.0&c3.cm.genreList=Example&c3.cws.sf=7&has_an_ad=false192.0.2.10192.0.2.10IPv4OnlyINHOUSENative App1000000001:1000000002:1000000003:1000000004:1000000005N/A1000false1876000GracefulEnd17685216131768521613079falsefalsefalsefalse00000000unknownunknownfalse000.016900010falseSet Top BoxExampleMfrExample DeviceExample DeviceExample OS 1.0Example OSNative AppExample FrameworkExample Framework 1.0ExampleModelWiFifalse2026-01-15T23:00:00.000Z
abcdef0000000000000000000000000000000000000000000000000000000002Example Asset 2Example OSUnited StatesSpringfield64500Example ISP1768520000176852000032311944088350010000falsedv.mod=ExampleModel&c3.cm.id=example_id&net.t=WiFi&c3.device.conn=WiFi&c3.cm.genre=Example&c3.cws.clv=3.5.12&dv.os=Example%20OS&c3.cm.affiliate=N%2FA&dv.fw=Example%20Framework&c3.cm.seriesName=Example%20Series&c3.cm.brand=N%2FA&dv.cat=Example&dv.br=Native%20App&c3.cm.channel=example&c3.player.name=Example%20Player&c3.cm.showTitle=Example%20Show&c3.cm.contentType=Example&c3.cm.name=Example&c3.app.version=1.0.0&dv.mnf=ExampleMfr&c3.video.isLive=F&dv.osv=Example%20OS%201.0&c3.cm.genreList=Example&c3.cws.sf=7&has_an_ad=false198.51.100.23198.51.100.23IPv4OnlyINHOUSENative App1000000006:1000000007:1000000008:1000000009:1000000010N/A-1000falseByExpiration17685208001768520800439falsefalsefalsefalse00000000unknownunknownfalse000.0226200010falseSet Top BoxExampleMfrExample DeviceExample DeviceExample OS 1.0Example OSNative AppExample FrameworkExample Framework 1.0ExampleModelWiFitrue2026-01-15T23:00:00.000Z

In the hourly sample, IPAddress is hashed (for example md5:...), DeviceOS is blank, and StreamURL is populated. The rows are cumulative-to-hour snapshots, so remember the deduplication rule above before you aggregate. Download the full sample hourly Connect file.

Hourly sample

ViewerIDAssetNameDeviceOSCountryStateCityPostalCodeASNISPStartTimeUnixStartTimeUnixMsStartupTimePlayingTimeReBufferingTimeInterruptsAverageBitRateStartupErrorSessionTagsIPV4IPV6IPAddressIPTypeCDNBrowserConvivaSessionIDStreamURLErrorListPercentageCompleteConnectionInducedRebufferingTimeVideoRestartTimeRejoinedCountVPFVPFErrorListContentLengthEndedStatusSessionEndedStatusEndTimeUnixEndTimeUnixMsVSFBusinessVSFBusinessErrorListVSFTechnicalVSFTechnicalErrorListVPFBusinessVPFBusinessErrorListVPFTechnicalVPFTechnicalErrorListPauseTimeCIRRInterruptCountMicroPlayingTimeMicroPlayingInterruptionsMicroBufferingTimeMicroBufferingInterruptionsLongRebufferingTimeLongRebufferingInterruptionsLastCDNEdgeServerLastCDNGroupIDExitDuringPreRollAdRelatedRebufferingRebufferingDuringAdsPausedRatioLastPlayheadTimeNumBitrateSwitchesAvgAverageBitRateCIRRelatedExitDeviceHardwareTypeDeviceManufactureDeviceMarketingNameDeviceNameDeviceOSVersionDeviceOSFamilyBrowserVersionPlayerFrameworkNamePlayerFrameworkVersionDeviceModelDeviceVendorConnectionTypeisLiveDMADecisionResourceDecisionBitrateDecisionResourceIdpCoreCDNDecisionResourceResolveddt
aaaa0000bbbb1111cccc2222dddd3333eeee444455556Example Asset 1SpainSpringfield64500Example ISP1748961459174896145920273954354206000falsec3.cm.id=example_id&c3.cm.genre=Example&c3.cws.clv=4.7.2&c3.cm.episodeNumber=1&dv.fw=HTML5&c3.cm.seriesName=Example%20Series&dv.cat=Web&c3.cm.channel=example&c3.player.name=Example%20Player&c3.cm.showTitle=Example%20Show&c3.cm.seasonNumber=1&c3.cm.contentType=Clip&dv.n=Example%20Web&c3.device.usesSdk=T&c3.app.version=Example%20App%201.0.0&c3.video.isLive=T&c3.cm.genreList=Example&c3.cws.sf=7&has_an_ad=falsemd5:00000000000000000000000000000001IPv4OnlyFASTLY2000000001:2000000002:2000000003:2000000004:2000000005https://example.com/stream-1000falseGracefulEnd17489689451748968945481falsefalsefalsefalse479920000000unknownunknownfalse001.09436191400falseSet Top BoxExample WebHTML5HTML5 Unknowntrue2025-06-03T16:00:00.000Z
bbbb1111cccc2222dddd3333eeee4444ffff555566667Example Asset 2SpainSpringfield64500Example ISP17489617441748961744259933546330561663150falsec3.cm.id=example_id&c3.cm.genre=Example&c3.cws.clv=4.7.2&c3.cm.episodeNumber=1&dv.fw=HTML5&c3.cm.seriesName=Example%20Series&dv.cat=Web&c3.cm.channel=example&c3.player.name=Example%20Player&c3.cm.showTitle=Example%20Show&c3.cm.seasonNumber=1&c3.cm.contentType=Clip&dv.n=Example%20Web&c3.device.usesSdk=T&c3.app.version=Example%20App%201.0.0&c3.video.isLive=T&c3.cm.genreList=Example&c3.cws.sf=7&has_an_ad=falsemd5:00000000000000000000000000000002IPv4OnlyFASTLY2000000006:2000000007:2000000008:2000000009:2000000010https://example.com/stream-10166312falseByExpiration17489664211748966421515falsefalsefalsefalse182340000000unknownunknownfalse000.39463613900falseSet Top BoxExample WebHTML5HTML5 Unknowntrue2025-06-03T16:00:00.000Z

Which to choose

If you need Choose
The simplest correct dataset, one row per session Daily
Lowest latency, and you can run the dedup step Hourly
Daily reporting without cross-day double counting Daily

Next: review the schema and column dictionary, then follow Build your first pipeline.