public sealed class ReadChangeStreamResponse.Types.DataChange : IMessage<ReadChangeStreamResponse.Types.DataChange>, IEquatable<ReadChangeStreamResponse.Types.DataChange>, IDeepCloneable<ReadChangeStreamResponse.Types.DataChange>, IBufferMessage, IMessage
Reference documentation and code samples for the Google Bigtable v2 API class ReadChangeStreamResponse.Types.DataChange.
A message corresponding to one or more mutations to the partition
being streamed. A single logical DataChange message may also be split
across a sequence of multiple individual messages. Messages other than
the first in a sequence will only have the type and chunks fields
populated, with the final message in the sequence also containing done
set to true.
public Timestamp EstimatedLowWatermark { get; set; }
An estimate of the commit timestamp that is usually lower than or equal
to any timestamp for a record that will be delivered in the future on the
stream. It is possible that, under particular circumstances that a future
record has a timestamp that is lower than a previously seen timestamp.
For an example usage see
https://beam.apache.org/documentation/basics/#watermarks
The row key for all mutations that are part of this DataChange.
If the DataChange is chunked across multiple messages, then this field
will only be set for the first message.
A value that lets stream consumers reconstruct Bigtable's
conflict resolution semantics.
https://cloud.google.com/bigtable/docs/writes#conflict-resolution
In the event that the same row key, column family, column qualifier,
timestamp are modified on different clusters at the same
commit_timestamp, the mutation with the larger tiebreaker will be the
one chosen for the eventually consistent state of the system.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-12 UTC."],[[["\u003cp\u003eThis document provides reference documentation for the \u003ccode\u003eReadChangeStreamResponse.Types.DataChange\u003c/code\u003e class within the Google Bigtable v2 API for .NET.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eDataChange\u003c/code\u003e class represents a message containing one or more mutations to a streamed partition, which may be split across multiple individual messages.\u003c/p\u003e\n"],["\u003cp\u003eThe document details various versions of the API, with version 3.17.0 being the latest.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eDataChange\u003c/code\u003e messages contain information such as the type of mutation, commit timestamp, row key, source cluster ID, and whether the message is the final one in a sequence.\u003c/p\u003e\n"],["\u003cp\u003eThe class \u003ccode\u003eDataChange\u003c/code\u003e implements multiple interfaces including \u003ccode\u003eIMessage\u003c/code\u003e, \u003ccode\u003eIEquatable\u003c/code\u003e, \u003ccode\u003eIDeepCloneable\u003c/code\u003e, and \u003ccode\u003eIBufferMessage\u003c/code\u003e.\u003c/p\u003e\n"]]],[],null,["# Google Bigtable v2 API - Class ReadChangeStreamResponse.Types.DataChange (3.23.0)\n\nVersion latestkeyboard_arrow_down\n\n- [3.23.0 (latest)](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/latest/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.22.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.22.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.21.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.21.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.20.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.20.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.19.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.19.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.18.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.18.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.17.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.17.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.16.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.16.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.15.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.15.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.14.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.14.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.13.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.13.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.12.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.12.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.11.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.11.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.10.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.10.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.9.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.9.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.8.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.8.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.7.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.7.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.6.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.6.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.5.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.5.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.4.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.4.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.3.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.3.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.2.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.2.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.1.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.1.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [3.0.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/3.0.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [2.6.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/2.6.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [2.5.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/2.5.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [2.4.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/2.4.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [2.3.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/2.3.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange)\n- [2.2.0](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/2.2.0/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange) \n\n public sealed class ReadChangeStreamResponse.Types.DataChange : IMessage\u003cReadChangeStreamResponse.Types.DataChange\u003e, IEquatable\u003cReadChangeStreamResponse.Types.DataChange\u003e, IDeepCloneable\u003cReadChangeStreamResponse.Types.DataChange\u003e, IBufferMessage, IMessage\n\nReference documentation and code samples for the Google Bigtable v2 API class ReadChangeStreamResponse.Types.DataChange.\n\nA message corresponding to one or more mutations to the partition\nbeing streamed. A single logical `DataChange` message may also be split\nacross a sequence of multiple individual messages. Messages other than\nthe first in a sequence will only have the `type` and `chunks` fields\npopulated, with the final message in the sequence also containing `done`\nset to true. \n\nInheritance\n-----------\n\n[object](https://learn.microsoft.com/dotnet/api/system.object) \\\u003e ReadChangeStreamResponse.Types.DataChange \n\nImplements\n----------\n\n[IMessage](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage-1.html)[ReadChangeStreamResponse](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/latest/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse)[Types](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/latest/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types)[DataChange](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/latest/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange), [IEquatable](https://learn.microsoft.com/dotnet/api/system.iequatable-1)[ReadChangeStreamResponse](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/latest/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse)[Types](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/latest/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types)[DataChange](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/latest/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange), [IDeepCloneable](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IDeepCloneable-1.html)[ReadChangeStreamResponse](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/latest/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse)[Types](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/latest/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types)[DataChange](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/latest/Google.Cloud.Bigtable.V2.ReadChangeStreamResponse.Types.DataChange), [IBufferMessage](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IBufferMessage.html), [IMessage](https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.IMessage.html) \n\nInherited Members\n-----------------\n\n[object.GetHashCode()](https://learn.microsoft.com/dotnet/api/system.object.gethashcode) \n[object.GetType()](https://learn.microsoft.com/dotnet/api/system.object.gettype) \n[object.ToString()](https://learn.microsoft.com/dotnet/api/system.object.tostring)\n\nNamespace\n---------\n\n[Google.Cloud.Bigtable.V2](/dotnet/docs/reference/Google.Cloud.Bigtable.V2/latest/Google.Cloud.Bigtable.V2)\n\nAssembly\n--------\n\nGoogle.Cloud.Bigtable.V2.dll\n\nConstructors\n------------\n\n### DataChange()\n\n public DataChange()\n\n### DataChange(DataChange)\n\n public DataChange(ReadChangeStreamResponse.Types.DataChange other)\n\nProperties\n----------\n\n### Chunks\n\n public RepeatedField\u003cReadChangeStreamResponse.Types.MutationChunk\u003e Chunks { get; }\n\nThe mutations associated with this change to the partition.\nMay contain complete mutations or chunks of a multi-message chunked\n`DataChange` record.\n\n### CommitTimestamp\n\n public Timestamp CommitTimestamp { get; set; }\n\nThe timestamp at which the mutation was applied on the Bigtable server.\n\n### Done\n\n public bool Done { get; set; }\n\nWhen true, indicates that the entire `DataChange` has been read\nand the client can safely process the message.\n\n### EstimatedLowWatermark\n\n public Timestamp EstimatedLowWatermark { get; set; }\n\nAn estimate of the commit timestamp that is usually lower than or equal\nto any timestamp for a record that will be delivered in the future on the\nstream. It is possible that, under particular circumstances that a future\nrecord has a timestamp that is lower than a previously seen timestamp.\nFor an example usage see\n\u003chttps://beam.apache.org/documentation/basics/#watermarks\u003e\n\n### RowKey\n\n public ByteString RowKey { get; set; }\n\nThe row key for all mutations that are part of this `DataChange`.\nIf the `DataChange` is chunked across multiple messages, then this field\nwill only be set for the first message.\n\n### SourceClusterId\n\n public string SourceClusterId { get; set; }\n\nThe cluster where the mutation was applied.\nNot set when `type` is `GARBAGE_COLLECTION`.\n\n### Tiebreaker\n\n public int Tiebreaker { get; set; }\n\nA value that lets stream consumers reconstruct Bigtable's\nconflict resolution semantics.\n\u003chttps://cloud.google.com/bigtable/docs/writes#conflict-resolution\u003e\nIn the event that the same row key, column family, column qualifier,\ntimestamp are modified on different clusters at the same\n`commit_timestamp`, the mutation with the larger `tiebreaker` will be the\none chosen for the eventually consistent state of the system.\n\n### Token\n\n public string Token { get; set; }\n\nAn encoded position for this stream's partition to restart reading from.\nThis token is for the StreamPartition from the request.\n\n### Type\n\n public ReadChangeStreamResponse.Types.DataChange.Types.Type Type { get; set; }\n\nThe type of the mutation."]]