Package 

Class TelemetryBatch.Builder

  • All Implemented Interfaces:
    com.doorstepai.sdks.tracking.proto.TelemetryBatchOrBuilder , com.google.protobuf.MessageLite.Builder , com.google.protobuf.MessageLiteOrBuilder , java.lang.Cloneable

    
    public final class TelemetryBatch.Builder
    extends GeneratedMessageLite.Builder<TelemetryBatch, TelemetryBatch.Builder> implements TelemetryBatchOrBuilder
                        
    One upload window (~10 s). Deflate(serialize(TelemetryBatch)) is the HTTP body.
    
    Protobuf type {@code doorstepai.telemetry.v3.TelemetryBatch}
    • Method Summary

      Modifier and Type Method Description
      int getFormatVersion()
      Format version carried in the payload (= 3 for this "v3" format). Distinct
      from the HTTP `X-DoorstepAI-Payload-Version` header (= 4); both are sent.
      
      uint32 format_version = 1;
      TelemetryBatch.Builder setFormatVersion(int value)
      Format version carried in the payload (= 3 for this "v3" format). Distinct
      from the HTTP `X-DoorstepAI-Payload-Version` header (= 4); both are sent.
      
      uint32 format_version = 1;
      TelemetryBatch.Builder clearFormatVersion()
      Format version carried in the payload (= 3 for this "v3" format). Distinct
      from the HTTP `X-DoorstepAI-Payload-Version` header (= 4); both are sent.
      
      uint32 format_version = 1;
      long getBatchId()
      Monotonic per-process batch id (never resets across restarts; seeded from
      wall-clock seconds), mirrors the DSDP v2 envelope `batch_id`.
      
      uint64 batch_id = 2;
      TelemetryBatch.Builder setBatchId(long value)
      Monotonic per-process batch id (never resets across restarts; seeded from
      wall-clock seconds), mirrors the DSDP v2 envelope `batch_id`.
      
      uint64 batch_id = 2;
      TelemetryBatch.Builder clearBatchId()
      Monotonic per-process batch id (never resets across restarts; seeded from
      wall-clock seconds), mirrors the DSDP v2 envelope `batch_id`.
      
      uint64 batch_id = 2;
      ByteString getPrimarySessionUuid()
      Primary session UUID as 16 raw bytes in RFC 4122 (big-endian) order — the
      same byte order the server already accepts for DSDP.
      
      bytes primary_session_uuid = 3;
      TelemetryBatch.Builder setPrimarySessionUuid(ByteString value)
      Primary session UUID as 16 raw bytes in RFC 4122 (big-endian) order — the
      same byte order the server already accepts for DSDP.
      
      bytes primary_session_uuid = 3;
      TelemetryBatch.Builder clearPrimarySessionUuid()
      Primary session UUID as 16 raw bytes in RFC 4122 (big-endian) order — the
      same byte order the server already accepts for DSDP.
      
      bytes primary_session_uuid = 3;
      List<ByteString> getExtraSessionUuidsList()
      Additional concurrently-active session UUIDs (16 bytes each), for windows
      that fan out to more than one delivery.
      
      repeated bytes extra_session_uuids = 4;
      int getExtraSessionUuidsCount()
      Additional concurrently-active session UUIDs (16 bytes each), for windows
      that fan out to more than one delivery.
      
      repeated bytes extra_session_uuids = 4;
      ByteString getExtraSessionUuids(int index)
      Additional concurrently-active session UUIDs (16 bytes each), for windows
      that fan out to more than one delivery.
      
      repeated bytes extra_session_uuids = 4;
      TelemetryBatch.Builder setExtraSessionUuids(int index, ByteString value)
      Additional concurrently-active session UUIDs (16 bytes each), for windows
      that fan out to more than one delivery.
      
      repeated bytes extra_session_uuids = 4;
      TelemetryBatch.Builder addExtraSessionUuids(ByteString value)
      Additional concurrently-active session UUIDs (16 bytes each), for windows
      that fan out to more than one delivery.
      
      repeated bytes extra_session_uuids = 4;
      TelemetryBatch.Builder addAllExtraSessionUuids(Iterable<out ByteString> values)
      Additional concurrently-active session UUIDs (16 bytes each), for windows
      that fan out to more than one delivery.
      
      repeated bytes extra_session_uuids = 4;
      TelemetryBatch.Builder clearExtraSessionUuids()
      Additional concurrently-active session UUIDs (16 bytes each), for windows
      that fan out to more than one delivery.
      
      repeated bytes extra_session_uuids = 4;
      long getWallEpochMs()
      Batch anchor: min wall-clock across all streams, in epoch milliseconds.
      
      int64 wall_epoch_ms = 5;
      TelemetryBatch.Builder setWallEpochMs(long value)
      Batch anchor: min wall-clock across all streams, in epoch milliseconds.
      
      int64 wall_epoch_ms = 5;
      TelemetryBatch.Builder clearWallEpochMs()
      Batch anchor: min wall-clock across all streams, in epoch milliseconds.
      
      int64 wall_epoch_ms = 5;
      List<StreamColumn> getStreamsList()
      Typed, columnar streams (see the stream/channel registry below).
      
      repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      int getStreamsCount()
      Typed, columnar streams (see the stream/channel registry below).
      
      repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      StreamColumn getStreams(int index)
      Typed, columnar streams (see the stream/channel registry below).
      
      repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      TelemetryBatch.Builder setStreams(int index, StreamColumn value)
      Typed, columnar streams (see the stream/channel registry below).
      
      repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      TelemetryBatch.Builder setStreams(int index, StreamColumn.Builder builderForValue)
      Typed, columnar streams (see the stream/channel registry below).
      
      repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      TelemetryBatch.Builder addStreams(StreamColumn value)
      Typed, columnar streams (see the stream/channel registry below).
      
      repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      TelemetryBatch.Builder addStreams(int index, StreamColumn value)
      Typed, columnar streams (see the stream/channel registry below).
      
      repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      TelemetryBatch.Builder addStreams(StreamColumn.Builder builderForValue)
      Typed, columnar streams (see the stream/channel registry below).
      
      repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      TelemetryBatch.Builder addStreams(int index, StreamColumn.Builder builderForValue)
      Typed, columnar streams (see the stream/channel registry below).
      
      repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      TelemetryBatch.Builder addAllStreams(Iterable<out StreamColumn> values)
      Typed, columnar streams (see the stream/channel registry below).
      
      repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      TelemetryBatch.Builder clearStreams()
      Typed, columnar streams (see the stream/channel registry below).
      
      repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      TelemetryBatch.Builder removeStreams(int index)
      Typed, columnar streams (see the stream/channel registry below).
      
      repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      ByteString getJsonRemainder()
      Streams not yet migrated to typed columns are carried here as the existing
      DataPushBody JSON with ONLY those streams populated (IMU/env/pressure/
      altitude stripped out). The server parses this with its existing JSON path
      and merges the typed streams above — so v3 is zero-data-loss from day one,
      and streams migrate into typed columns over time (shrinking this toward
      empty). UTF-8 JSON bytes; the outer deflate compresses it.
      
      bytes json_remainder = 7;
      TelemetryBatch.Builder setJsonRemainder(ByteString value)
      Streams not yet migrated to typed columns are carried here as the existing
      DataPushBody JSON with ONLY those streams populated (IMU/env/pressure/
      altitude stripped out). The server parses this with its existing JSON path
      and merges the typed streams above — so v3 is zero-data-loss from day one,
      and streams migrate into typed columns over time (shrinking this toward
      empty). UTF-8 JSON bytes; the outer deflate compresses it.
      
      bytes json_remainder = 7;
      TelemetryBatch.Builder clearJsonRemainder()
      Streams not yet migrated to typed columns are carried here as the existing
      DataPushBody JSON with ONLY those streams populated (IMU/env/pressure/
      altitude stripped out). The server parses this with its existing JSON path
      and merges the typed streams above — so v3 is zero-data-loss from day one,
      and streams migrate into typed columns over time (shrinking this toward
      empty). UTF-8 JSON bytes; the outer deflate compresses it.
      
      bytes json_remainder = 7;
      List<Table> getTablesList()
      Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
      encoded as generic columnar Tables — the same quantize/delta/varint recipe
      plus string-dictionary dedup and a per-column null bitmap. As a stream
      moves from json_remainder into a Table here it drops ~3x (verified on real
      device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
      
      repeated .doorstepai.telemetry.v3.Table tables = 8;
      int getTablesCount()
      Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
      encoded as generic columnar Tables — the same quantize/delta/varint recipe
      plus string-dictionary dedup and a per-column null bitmap. As a stream
      moves from json_remainder into a Table here it drops ~3x (verified on real
      device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
      
      repeated .doorstepai.telemetry.v3.Table tables = 8;
      Table getTables(int index)
      Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
      encoded as generic columnar Tables — the same quantize/delta/varint recipe
      plus string-dictionary dedup and a per-column null bitmap. As a stream
      moves from json_remainder into a Table here it drops ~3x (verified on real
      device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
      
      repeated .doorstepai.telemetry.v3.Table tables = 8;
      TelemetryBatch.Builder setTables(int index, Table value)
      Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
      encoded as generic columnar Tables — the same quantize/delta/varint recipe
      plus string-dictionary dedup and a per-column null bitmap. As a stream
      moves from json_remainder into a Table here it drops ~3x (verified on real
      device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
      
      repeated .doorstepai.telemetry.v3.Table tables = 8;
      TelemetryBatch.Builder setTables(int index, Table.Builder builderForValue)
      Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
      encoded as generic columnar Tables — the same quantize/delta/varint recipe
      plus string-dictionary dedup and a per-column null bitmap. As a stream
      moves from json_remainder into a Table here it drops ~3x (verified on real
      device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
      
      repeated .doorstepai.telemetry.v3.Table tables = 8;
      TelemetryBatch.Builder addTables(Table value)
      Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
      encoded as generic columnar Tables — the same quantize/delta/varint recipe
      plus string-dictionary dedup and a per-column null bitmap. As a stream
      moves from json_remainder into a Table here it drops ~3x (verified on real
      device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
      
      repeated .doorstepai.telemetry.v3.Table tables = 8;
      TelemetryBatch.Builder addTables(int index, Table value)
      Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
      encoded as generic columnar Tables — the same quantize/delta/varint recipe
      plus string-dictionary dedup and a per-column null bitmap. As a stream
      moves from json_remainder into a Table here it drops ~3x (verified on real
      device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
      
      repeated .doorstepai.telemetry.v3.Table tables = 8;
      TelemetryBatch.Builder addTables(Table.Builder builderForValue)
      Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
      encoded as generic columnar Tables — the same quantize/delta/varint recipe
      plus string-dictionary dedup and a per-column null bitmap. As a stream
      moves from json_remainder into a Table here it drops ~3x (verified on real
      device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
      
      repeated .doorstepai.telemetry.v3.Table tables = 8;
      TelemetryBatch.Builder addTables(int index, Table.Builder builderForValue)
      Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
      encoded as generic columnar Tables — the same quantize/delta/varint recipe
      plus string-dictionary dedup and a per-column null bitmap. As a stream
      moves from json_remainder into a Table here it drops ~3x (verified on real
      device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
      
      repeated .doorstepai.telemetry.v3.Table tables = 8;
      TelemetryBatch.Builder addAllTables(Iterable<out Table> values)
      Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
      encoded as generic columnar Tables — the same quantize/delta/varint recipe
      plus string-dictionary dedup and a per-column null bitmap. As a stream
      moves from json_remainder into a Table here it drops ~3x (verified on real
      device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
      
      repeated .doorstepai.telemetry.v3.Table tables = 8;
      TelemetryBatch.Builder clearTables()
      Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
      encoded as generic columnar Tables — the same quantize/delta/varint recipe
      plus string-dictionary dedup and a per-column null bitmap. As a stream
      moves from json_remainder into a Table here it drops ~3x (verified on real
      device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
      
      repeated .doorstepai.telemetry.v3.Table tables = 8;
      TelemetryBatch.Builder removeTables(int index)
      Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
      encoded as generic columnar Tables — the same quantize/delta/varint recipe
      plus string-dictionary dedup and a per-column null bitmap. As a stream
      moves from json_remainder into a Table here it drops ~3x (verified on real
      device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
      
      repeated .doorstepai.telemetry.v3.Table tables = 8;
      • Methods inherited from class com.google.protobuf.GeneratedMessageLite.Builder

        build, buildPartial, clear, clone, getDefaultInstanceForType, isInitialized, mergeFrom
      • Methods inherited from class com.google.protobuf.AbstractMessageLite.Builder

        mergeDelimitedFrom
      • Methods inherited from class com.google.protobuf.MessageLite.Builder

        build, buildPartial, clear, clone, mergeFrom
      • Methods inherited from class com.google.protobuf.MessageLiteOrBuilder

        getDefaultInstanceForType
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • getFormatVersion

         int getFormatVersion()
        Format version carried in the payload (= 3 for this "v3" format). Distinct
        from the HTTP `X-DoorstepAI-Payload-Version` header (= 4); both are sent.
        
        uint32 format_version = 1;
      • setFormatVersion

         TelemetryBatch.Builder setFormatVersion(int value)
        Format version carried in the payload (= 3 for this "v3" format). Distinct
        from the HTTP `X-DoorstepAI-Payload-Version` header (= 4); both are sent.
        
        uint32 format_version = 1;
        Parameters:
        value - The formatVersion to set.
      • clearFormatVersion

         TelemetryBatch.Builder clearFormatVersion()
        Format version carried in the payload (= 3 for this "v3" format). Distinct
        from the HTTP `X-DoorstepAI-Payload-Version` header (= 4); both are sent.
        
        uint32 format_version = 1;
      • getBatchId

         long getBatchId()
        Monotonic per-process batch id (never resets across restarts; seeded from
        wall-clock seconds), mirrors the DSDP v2 envelope `batch_id`.
        
        uint64 batch_id = 2;
      • setBatchId

         TelemetryBatch.Builder setBatchId(long value)
        Monotonic per-process batch id (never resets across restarts; seeded from
        wall-clock seconds), mirrors the DSDP v2 envelope `batch_id`.
        
        uint64 batch_id = 2;
        Parameters:
        value - The batchId to set.
      • clearBatchId

         TelemetryBatch.Builder clearBatchId()
        Monotonic per-process batch id (never resets across restarts; seeded from
        wall-clock seconds), mirrors the DSDP v2 envelope `batch_id`.
        
        uint64 batch_id = 2;
      • getPrimarySessionUuid

         ByteString getPrimarySessionUuid()
        Primary session UUID as 16 raw bytes in RFC 4122 (big-endian) order — the
        same byte order the server already accepts for DSDP.
        
        bytes primary_session_uuid = 3;
      • setPrimarySessionUuid

         TelemetryBatch.Builder setPrimarySessionUuid(ByteString value)
        Primary session UUID as 16 raw bytes in RFC 4122 (big-endian) order — the
        same byte order the server already accepts for DSDP.
        
        bytes primary_session_uuid = 3;
        Parameters:
        value - The primarySessionUuid to set.
      • clearPrimarySessionUuid

         TelemetryBatch.Builder clearPrimarySessionUuid()
        Primary session UUID as 16 raw bytes in RFC 4122 (big-endian) order — the
        same byte order the server already accepts for DSDP.
        
        bytes primary_session_uuid = 3;
      • getExtraSessionUuidsList

         List<ByteString> getExtraSessionUuidsList()
        Additional concurrently-active session UUIDs (16 bytes each), for windows
        that fan out to more than one delivery.
        
        repeated bytes extra_session_uuids = 4;
      • getExtraSessionUuidsCount

         int getExtraSessionUuidsCount()
        Additional concurrently-active session UUIDs (16 bytes each), for windows
        that fan out to more than one delivery.
        
        repeated bytes extra_session_uuids = 4;
      • getExtraSessionUuids

         ByteString getExtraSessionUuids(int index)
        Additional concurrently-active session UUIDs (16 bytes each), for windows
        that fan out to more than one delivery.
        
        repeated bytes extra_session_uuids = 4;
        Parameters:
        index - The index of the element to return.
      • setExtraSessionUuids

         TelemetryBatch.Builder setExtraSessionUuids(int index, ByteString value)
        Additional concurrently-active session UUIDs (16 bytes each), for windows
        that fan out to more than one delivery.
        
        repeated bytes extra_session_uuids = 4;
        Parameters:
        value - The extraSessionUuids to set.
      • addExtraSessionUuids

         TelemetryBatch.Builder addExtraSessionUuids(ByteString value)
        Additional concurrently-active session UUIDs (16 bytes each), for windows
        that fan out to more than one delivery.
        
        repeated bytes extra_session_uuids = 4;
        Parameters:
        value - The extraSessionUuids to add.
      • addAllExtraSessionUuids

         TelemetryBatch.Builder addAllExtraSessionUuids(Iterable<out ByteString> values)
        Additional concurrently-active session UUIDs (16 bytes each), for windows
        that fan out to more than one delivery.
        
        repeated bytes extra_session_uuids = 4;
        Parameters:
        values - The extraSessionUuids to add.
      • clearExtraSessionUuids

         TelemetryBatch.Builder clearExtraSessionUuids()
        Additional concurrently-active session UUIDs (16 bytes each), for windows
        that fan out to more than one delivery.
        
        repeated bytes extra_session_uuids = 4;
      • getWallEpochMs

         long getWallEpochMs()
        Batch anchor: min wall-clock across all streams, in epoch milliseconds.
        
        int64 wall_epoch_ms = 5;
      • setWallEpochMs

         TelemetryBatch.Builder setWallEpochMs(long value)
        Batch anchor: min wall-clock across all streams, in epoch milliseconds.
        
        int64 wall_epoch_ms = 5;
        Parameters:
        value - The wallEpochMs to set.
      • getStreamsList

         List<StreamColumn> getStreamsList()
        Typed, columnar streams (see the stream/channel registry below).
        
        repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      • getStreamsCount

         int getStreamsCount()
        Typed, columnar streams (see the stream/channel registry below).
        
        repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      • getStreams

         StreamColumn getStreams(int index)
        Typed, columnar streams (see the stream/channel registry below).
        
        repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      • clearStreams

         TelemetryBatch.Builder clearStreams()
        Typed, columnar streams (see the stream/channel registry below).
        
        repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      • removeStreams

         TelemetryBatch.Builder removeStreams(int index)
        Typed, columnar streams (see the stream/channel registry below).
        
        repeated .doorstepai.telemetry.v3.StreamColumn streams = 6;
      • getJsonRemainder

         ByteString getJsonRemainder()
        Streams not yet migrated to typed columns are carried here as the existing
        DataPushBody JSON with ONLY those streams populated (IMU/env/pressure/
        altitude stripped out). The server parses this with its existing JSON path
        and merges the typed streams above — so v3 is zero-data-loss from day one,
        and streams migrate into typed columns over time (shrinking this toward
        empty). UTF-8 JSON bytes; the outer deflate compresses it.
        
        bytes json_remainder = 7;
      • setJsonRemainder

         TelemetryBatch.Builder setJsonRemainder(ByteString value)
        Streams not yet migrated to typed columns are carried here as the existing
        DataPushBody JSON with ONLY those streams populated (IMU/env/pressure/
        altitude stripped out). The server parses this with its existing JSON path
        and merges the typed streams above — so v3 is zero-data-loss from day one,
        and streams migrate into typed columns over time (shrinking this toward
        empty). UTF-8 JSON bytes; the outer deflate compresses it.
        
        bytes json_remainder = 7;
        Parameters:
        value - The jsonRemainder to set.
      • clearJsonRemainder

         TelemetryBatch.Builder clearJsonRemainder()
        Streams not yet migrated to typed columns are carried here as the existing
        DataPushBody JSON with ONLY those streams populated (IMU/env/pressure/
        altitude stripped out). The server parses this with its existing JSON path
        and merges the typed streams above — so v3 is zero-data-loss from day one,
        and streams migrate into typed columns over time (shrinking this toward
        empty). UTF-8 JSON bytes; the outer deflate compresses it.
        
        bytes json_remainder = 7;
      • getTablesList

         List<Table> getTablesList()
        Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
        encoded as generic columnar Tables — the same quantize/delta/varint recipe
        plus string-dictionary dedup and a per-column null bitmap. As a stream
        moves from json_remainder into a Table here it drops ~3x (verified on real
        device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
        
        repeated .doorstepai.telemetry.v3.Table tables = 8;
      • getTablesCount

         int getTablesCount()
        Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
        encoded as generic columnar Tables — the same quantize/delta/varint recipe
        plus string-dictionary dedup and a per-column null bitmap. As a stream
        moves from json_remainder into a Table here it drops ~3x (verified on real
        device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
        
        repeated .doorstepai.telemetry.v3.Table tables = 8;
      • getTables

         Table getTables(int index)
        Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
        encoded as generic columnar Tables — the same quantize/delta/varint recipe
        plus string-dictionary dedup and a per-column null bitmap. As a stream
        moves from json_remainder into a Table here it drops ~3x (verified on real
        device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
        
        repeated .doorstepai.telemetry.v3.Table tables = 8;
      • setTables

         TelemetryBatch.Builder setTables(int index, Table value)
        Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
        encoded as generic columnar Tables — the same quantize/delta/varint recipe
        plus string-dictionary dedup and a per-column null bitmap. As a stream
        moves from json_remainder into a Table here it drops ~3x (verified on real
        device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
        
        repeated .doorstepai.telemetry.v3.Table tables = 8;
      • setTables

         TelemetryBatch.Builder setTables(int index, Table.Builder builderForValue)
        Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
        encoded as generic columnar Tables — the same quantize/delta/varint recipe
        plus string-dictionary dedup and a per-column null bitmap. As a stream
        moves from json_remainder into a Table here it drops ~3x (verified on real
        device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
        
        repeated .doorstepai.telemetry.v3.Table tables = 8;
      • addTables

         TelemetryBatch.Builder addTables(Table value)
        Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
        encoded as generic columnar Tables — the same quantize/delta/varint recipe
        plus string-dictionary dedup and a per-column null bitmap. As a stream
        moves from json_remainder into a Table here it drops ~3x (verified on real
        device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
        
        repeated .doorstepai.telemetry.v3.Table tables = 8;
      • addTables

         TelemetryBatch.Builder addTables(int index, Table value)
        Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
        encoded as generic columnar Tables — the same quantize/delta/varint recipe
        plus string-dictionary dedup and a per-column null bitmap. As a stream
        moves from json_remainder into a Table here it drops ~3x (verified on real
        device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
        
        repeated .doorstepai.telemetry.v3.Table tables = 8;
      • addTables

         TelemetryBatch.Builder addTables(Table.Builder builderForValue)
        Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
        encoded as generic columnar Tables — the same quantize/delta/varint recipe
        plus string-dictionary dedup and a per-column null bitmap. As a stream
        moves from json_remainder into a Table here it drops ~3x (verified on real
        device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
        
        repeated .doorstepai.telemetry.v3.Table tables = 8;
      • addTables

         TelemetryBatch.Builder addTables(int index, Table.Builder builderForValue)
        Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
        encoded as generic columnar Tables — the same quantize/delta/varint recipe
        plus string-dictionary dedup and a per-column null bitmap. As a stream
        moves from json_remainder into a Table here it drops ~3x (verified on real
        device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
        
        repeated .doorstepai.telemetry.v3.Table tables = 8;
      • addAllTables

         TelemetryBatch.Builder addAllTables(Iterable<out Table> values)
        Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
        encoded as generic columnar Tables — the same quantize/delta/varint recipe
        plus string-dictionary dedup and a per-column null bitmap. As a stream
        moves from json_remainder into a Table here it drops ~3x (verified on real
        device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
        
        repeated .doorstepai.telemetry.v3.Table tables = 8;
      • clearTables

         TelemetryBatch.Builder clearTables()
        Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
        encoded as generic columnar Tables — the same quantize/delta/varint recipe
        plus string-dictionary dedup and a per-column null bitmap. As a stream
        moves from json_remainder into a Table here it drops ~3x (verified on real
        device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
        
        repeated .doorstepai.telemetry.v3.Table tables = 8;
      • removeTables

         TelemetryBatch.Builder removeTables(int index)
        Ragged / string-heavy streams (WiFi scans, GNSS measurement/status, BLE)
        encoded as generic columnar Tables — the same quantize/delta/varint recipe
        plus string-dictionary dedup and a per-column null bitmap. As a stream
        moves from json_remainder into a Table here it drops ~3x (verified on real
        device data: gnss 3.5x, ble 3.4x, all fields equivalence-checked).
        
        repeated .doorstepai.telemetry.v3.Table tables = 8;