bigtable_rs/google/google.bigtable.v2.rs
1// This file is @generated by prost-build.
2/// `Type` represents the type of data that is written to, read from, or stored
3/// in Bigtable. It is heavily based on the GoogleSQL standard to help maintain
4/// familiarity and consistency across products and features.
5///
6/// For compatibility with Bigtable's existing untyped APIs, each `Type` includes
7/// an `Encoding` which describes how to convert to/from the underlying data.
8///
9/// Each encoding also defines the following properties:
10///
11/// * Order-preserving: Does the encoded value sort consistently with the
12/// original typed value? Note that Bigtable will always sort data based on
13/// the raw encoded value, *not* the decoded type.
14/// * Example: BYTES values sort in the same order as their raw encodings.
15/// * Counterexample: Encoding INT64 as a fixed-width decimal string does
16/// *not* preserve sort order when dealing with negative numbers.
17/// `INT64(1) > INT64(-1)`, but `STRING("-00001") > STRING("00001)`.
18/// * Self-delimiting: If we concatenate two encoded values, can we always tell
19/// where the first one ends and the second one begins?
20/// * Example: If we encode INT64s to fixed-width STRINGs, the first value
21/// will always contain exactly N digits, possibly preceded by a sign.
22/// * Counterexample: If we concatenate two UTF-8 encoded STRINGs, we have
23/// no way to tell where the first one ends.
24/// * Compatibility: Which other systems have matching encoding schemes? For
25/// example, does this encoding have a GoogleSQL equivalent? HBase? Java?
26#[serde_with::serde_as]
27#[derive(serde::Serialize, serde::Deserialize)]
28#[serde(rename_all = "camelCase")]
29#[derive(Clone, PartialEq, ::prost::Message)]
30pub struct Type {
31 /// The kind of type that this represents.
32 #[prost(oneof = "r#type::Kind", tags = "1, 2, 5, 12, 9, 8, 10, 11, 6, 7, 3, 4")]
33 pub kind: ::core::option::Option<r#type::Kind>,
34}
35/// Nested message and enum types in `Type`.
36pub mod r#type {
37 /// Bytes
38 /// Values of type `Bytes` are stored in `Value.bytes_value`.
39 #[serde_with::serde_as]
40 #[derive(serde::Serialize, serde::Deserialize)]
41 #[serde(rename_all = "camelCase")]
42 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
43 pub struct Bytes {
44 /// The encoding to use when converting to/from lower level types.
45 #[prost(message, optional, tag = "1")]
46 pub encoding: ::core::option::Option<bytes::Encoding>,
47 }
48 /// Nested message and enum types in `Bytes`.
49 pub mod bytes {
50 /// Rules used to convert to/from lower level types.
51 #[serde_with::serde_as]
52 #[derive(serde::Serialize, serde::Deserialize)]
53 #[serde(rename_all = "camelCase")]
54 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
55 pub struct Encoding {
56 /// Which encoding to use.
57 #[prost(oneof = "encoding::Encoding", tags = "1")]
58 pub encoding: ::core::option::Option<encoding::Encoding>,
59 }
60 /// Nested message and enum types in `Encoding`.
61 pub mod encoding {
62 /// Leaves the value "as-is"
63 ///
64 /// * Order-preserving? Yes
65 /// * Self-delimiting? No
66 /// * Compatibility? N/A
67 #[serde_with::serde_as]
68 #[derive(serde::Serialize, serde::Deserialize)]
69 #[serde(rename_all = "camelCase")]
70 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
71 pub struct Raw {}
72 /// Which encoding to use.
73 #[serde_with::serde_as]
74 #[derive(serde::Serialize, serde::Deserialize)]
75 #[serde(rename_all = "camelCase")]
76 #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
77 pub enum Encoding {
78 /// Use `Raw` encoding.
79 #[prost(message, tag = "1")]
80 Raw(Raw),
81 }
82 }
83 }
84 /// String
85 /// Values of type `String` are stored in `Value.string_value`.
86 #[serde_with::serde_as]
87 #[derive(serde::Serialize, serde::Deserialize)]
88 #[serde(rename_all = "camelCase")]
89 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
90 pub struct String {
91 /// The encoding to use when converting to/from lower level types.
92 #[prost(message, optional, tag = "1")]
93 pub encoding: ::core::option::Option<string::Encoding>,
94 }
95 /// Nested message and enum types in `String`.
96 pub mod string {
97 /// Rules used to convert to/from lower level types.
98 #[serde_with::serde_as]
99 #[derive(serde::Serialize, serde::Deserialize)]
100 #[serde(rename_all = "camelCase")]
101 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
102 pub struct Encoding {
103 /// Which encoding to use.
104 #[prost(oneof = "encoding::Encoding", tags = "1, 2")]
105 pub encoding: ::core::option::Option<encoding::Encoding>,
106 }
107 /// Nested message and enum types in `Encoding`.
108 pub mod encoding {
109 /// Deprecated: prefer the equivalent `Utf8Bytes`.
110 #[serde_with::serde_as]
111 #[derive(serde::Serialize, serde::Deserialize)]
112 #[serde(rename_all = "camelCase")]
113 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
114 pub struct Utf8Raw {}
115 /// UTF-8 encoding
116 ///
117 /// * Order-preserving? Yes (code point order)
118 /// * Self-delimiting? No
119 /// * Compatibility?
120 /// * BigQuery Federation `TEXT` encoding
121 /// * HBase `Bytes.toBytes`
122 /// * Java `String#getBytes(StandardCharsets.UTF_8)`
123 #[serde_with::serde_as]
124 #[derive(serde::Serialize, serde::Deserialize)]
125 #[serde(rename_all = "camelCase")]
126 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
127 pub struct Utf8Bytes {}
128 /// Which encoding to use.
129 #[serde_with::serde_as]
130 #[derive(serde::Serialize, serde::Deserialize)]
131 #[serde(rename_all = "camelCase")]
132 #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
133 pub enum Encoding {
134 /// Deprecated: if set, converts to an empty `utf8_bytes`.
135 #[prost(message, tag = "1")]
136 Utf8Raw(Utf8Raw),
137 /// Use `Utf8Bytes` encoding.
138 #[prost(message, tag = "2")]
139 Utf8Bytes(Utf8Bytes),
140 }
141 }
142 }
143 /// Int64
144 /// Values of type `Int64` are stored in `Value.int_value`.
145 #[serde_with::serde_as]
146 #[derive(serde::Serialize, serde::Deserialize)]
147 #[serde(rename_all = "camelCase")]
148 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
149 pub struct Int64 {
150 /// The encoding to use when converting to/from lower level types.
151 #[prost(message, optional, tag = "1")]
152 pub encoding: ::core::option::Option<int64::Encoding>,
153 }
154 /// Nested message and enum types in `Int64`.
155 pub mod int64 {
156 /// Rules used to convert to/from lower level types.
157 #[serde_with::serde_as]
158 #[derive(serde::Serialize, serde::Deserialize)]
159 #[serde(rename_all = "camelCase")]
160 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
161 pub struct Encoding {
162 /// Which encoding to use.
163 #[prost(oneof = "encoding::Encoding", tags = "1")]
164 pub encoding: ::core::option::Option<encoding::Encoding>,
165 }
166 /// Nested message and enum types in `Encoding`.
167 pub mod encoding {
168 /// Encodes the value as an 8-byte big endian twos complement `Bytes`
169 /// value.
170 ///
171 /// * Order-preserving? No (positive values only)
172 /// * Self-delimiting? Yes
173 /// * Compatibility?
174 /// * BigQuery Federation `BINARY` encoding
175 /// * HBase `Bytes.toBytes`
176 /// * Java `ByteBuffer.putLong()` with `ByteOrder.BIG_ENDIAN`
177 #[serde_with::serde_as]
178 #[derive(serde::Serialize, serde::Deserialize)]
179 #[serde(rename_all = "camelCase")]
180 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
181 pub struct BigEndianBytes {
182 /// Deprecated: ignored if set.
183 #[prost(message, optional, tag = "1")]
184 pub bytes_type: ::core::option::Option<super::super::Bytes>,
185 }
186 /// Which encoding to use.
187 #[serde_with::serde_as]
188 #[derive(serde::Serialize, serde::Deserialize)]
189 #[serde(rename_all = "camelCase")]
190 #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
191 pub enum Encoding {
192 /// Use `BigEndianBytes` encoding.
193 #[prost(message, tag = "1")]
194 BigEndianBytes(BigEndianBytes),
195 }
196 }
197 }
198 /// bool
199 /// Values of type `Bool` are stored in `Value.bool_value`.
200 #[serde_with::serde_as]
201 #[derive(serde::Serialize, serde::Deserialize)]
202 #[serde(rename_all = "camelCase")]
203 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
204 pub struct Bool {}
205 /// Float32
206 /// Values of type `Float32` are stored in `Value.float_value`.
207 #[serde_with::serde_as]
208 #[derive(serde::Serialize, serde::Deserialize)]
209 #[serde(rename_all = "camelCase")]
210 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
211 pub struct Float32 {}
212 /// Float64
213 /// Values of type `Float64` are stored in `Value.float_value`.
214 #[serde_with::serde_as]
215 #[derive(serde::Serialize, serde::Deserialize)]
216 #[serde(rename_all = "camelCase")]
217 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
218 pub struct Float64 {}
219 /// Timestamp
220 /// Values of type `Timestamp` are stored in `Value.timestamp_value`.
221 #[serde_with::serde_as]
222 #[derive(serde::Serialize, serde::Deserialize)]
223 #[serde(rename_all = "camelCase")]
224 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
225 pub struct Timestamp {}
226 /// Date
227 /// Values of type `Date` are stored in `Value.date_value`.
228 #[serde_with::serde_as]
229 #[derive(serde::Serialize, serde::Deserialize)]
230 #[serde(rename_all = "camelCase")]
231 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
232 pub struct Date {}
233 /// A structured data value, consisting of fields which map to dynamically
234 /// typed values.
235 /// Values of type `Struct` are stored in `Value.array_value` where entries are
236 /// in the same order and number as `field_types`.
237 #[serde_with::serde_as]
238 #[derive(serde::Serialize, serde::Deserialize)]
239 #[serde(rename_all = "camelCase")]
240 #[derive(Clone, PartialEq, ::prost::Message)]
241 pub struct Struct {
242 /// The names and types of the fields in this struct.
243 #[prost(message, repeated, tag = "1")]
244 pub fields: ::prost::alloc::vec::Vec<r#struct::Field>,
245 }
246 /// Nested message and enum types in `Struct`.
247 pub mod r#struct {
248 /// A struct field and its type.
249 #[serde_with::serde_as]
250 #[derive(serde::Serialize, serde::Deserialize)]
251 #[serde(rename_all = "camelCase")]
252 #[derive(Clone, PartialEq, ::prost::Message)]
253 pub struct Field {
254 /// The field name (optional). Fields without a `field_name` are considered
255 /// anonymous and cannot be referenced by name.
256 #[prost(string, tag = "1")]
257 pub field_name: ::prost::alloc::string::String,
258 /// The type of values in this field.
259 #[prost(message, optional, tag = "2")]
260 pub r#type: ::core::option::Option<super::super::Type>,
261 }
262 }
263 /// An ordered list of elements of a given type.
264 /// Values of type `Array` are stored in `Value.array_value`.
265 #[serde_with::serde_as]
266 #[derive(serde::Serialize, serde::Deserialize)]
267 #[serde(rename_all = "camelCase")]
268 #[derive(Clone, PartialEq, ::prost::Message)]
269 pub struct Array {
270 /// The type of the elements in the array. This must not be `Array`.
271 #[prost(message, optional, boxed, tag = "1")]
272 pub element_type: ::core::option::Option<::prost::alloc::boxed::Box<super::Type>>,
273 }
274 /// A mapping of keys to values of a given type.
275 /// Values of type `Map` are stored in a `Value.array_value` where each entry
276 /// is another `Value.array_value` with two elements (the key and the value,
277 /// in that order).
278 /// Normally encoded Map values won't have repeated keys, however, clients are
279 /// expected to handle the case in which they do. If the same key appears
280 /// multiple times, the *last* value takes precedence.
281 #[serde_with::serde_as]
282 #[derive(serde::Serialize, serde::Deserialize)]
283 #[serde(rename_all = "camelCase")]
284 #[derive(Clone, PartialEq, ::prost::Message)]
285 pub struct Map {
286 /// The type of a map key.
287 /// Only `Bytes`, `String`, and `Int64` are allowed as key types.
288 #[prost(message, optional, boxed, tag = "1")]
289 pub key_type: ::core::option::Option<::prost::alloc::boxed::Box<super::Type>>,
290 /// The type of the values in a map.
291 #[prost(message, optional, boxed, tag = "2")]
292 pub value_type: ::core::option::Option<::prost::alloc::boxed::Box<super::Type>>,
293 }
294 /// A value that combines incremental updates into a summarized value.
295 ///
296 /// Data is never directly written or read using type `Aggregate`. Writes will
297 /// provide either the `input_type` or `state_type`, and reads will always
298 /// return the `state_type` .
299 #[serde_with::serde_as]
300 #[derive(serde::Serialize, serde::Deserialize)]
301 #[serde(rename_all = "camelCase")]
302 #[derive(Clone, PartialEq, ::prost::Message)]
303 pub struct Aggregate {
304 /// Type of the inputs that are accumulated by this `Aggregate`, which must
305 /// specify a full encoding.
306 /// Use `AddInput` mutations to accumulate new inputs.
307 #[prost(message, optional, boxed, tag = "1")]
308 pub input_type: ::core::option::Option<::prost::alloc::boxed::Box<super::Type>>,
309 /// Output only. Type that holds the internal accumulator state for the
310 /// `Aggregate`. This is a function of the `input_type` and `aggregator`
311 /// chosen, and will always specify a full encoding.
312 #[prost(message, optional, boxed, tag = "2")]
313 pub state_type: ::core::option::Option<::prost::alloc::boxed::Box<super::Type>>,
314 /// Which aggregator function to use. The configured types must match.
315 #[prost(oneof = "aggregate::Aggregator", tags = "4, 5, 6, 7")]
316 pub aggregator: ::core::option::Option<aggregate::Aggregator>,
317 }
318 /// Nested message and enum types in `Aggregate`.
319 pub mod aggregate {
320 /// Computes the sum of the input values.
321 /// Allowed input: `Int64`
322 /// State: same as input
323 #[serde_with::serde_as]
324 #[derive(serde::Serialize, serde::Deserialize)]
325 #[serde(rename_all = "camelCase")]
326 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
327 pub struct Sum {}
328 /// Computes the max of the input values.
329 /// Allowed input: `Int64`
330 /// State: same as input
331 #[serde_with::serde_as]
332 #[derive(serde::Serialize, serde::Deserialize)]
333 #[serde(rename_all = "camelCase")]
334 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
335 pub struct Max {}
336 /// Computes the min of the input values.
337 /// Allowed input: `Int64`
338 /// State: same as input
339 #[serde_with::serde_as]
340 #[derive(serde::Serialize, serde::Deserialize)]
341 #[serde(rename_all = "camelCase")]
342 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
343 pub struct Min {}
344 /// Computes an approximate unique count over the input values. When using
345 /// raw data as input, be careful to use a consistent encoding. Otherwise
346 /// the same value encoded differently could count more than once, or two
347 /// distinct values could count as identical.
348 /// Input: Any, or omit for Raw
349 /// State: TBD
350 /// Special state conversions: `Int64` (the unique count estimate)
351 #[serde_with::serde_as]
352 #[derive(serde::Serialize, serde::Deserialize)]
353 #[serde(rename_all = "camelCase")]
354 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
355 pub struct HyperLogLogPlusPlusUniqueCount {}
356 /// Which aggregator function to use. The configured types must match.
357 #[serde_with::serde_as]
358 #[derive(serde::Serialize, serde::Deserialize)]
359 #[serde(rename_all = "camelCase")]
360 #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
361 pub enum Aggregator {
362 /// Sum aggregator.
363 #[prost(message, tag = "4")]
364 Sum(Sum),
365 /// HyperLogLogPlusPlusUniqueCount aggregator.
366 #[prost(message, tag = "5")]
367 HllppUniqueCount(HyperLogLogPlusPlusUniqueCount),
368 /// Max aggregator.
369 #[prost(message, tag = "6")]
370 Max(Max),
371 /// Min aggregator.
372 #[prost(message, tag = "7")]
373 Min(Min),
374 }
375 }
376 /// The kind of type that this represents.
377 #[serde_with::serde_as]
378 #[derive(serde::Serialize, serde::Deserialize)]
379 #[serde(rename_all = "camelCase")]
380 #[derive(Clone, PartialEq, ::prost::Oneof)]
381 pub enum Kind {
382 /// Bytes
383 #[prost(message, tag = "1")]
384 BytesType(Bytes),
385 /// String
386 #[prost(message, tag = "2")]
387 StringType(String),
388 /// Int64
389 #[prost(message, tag = "5")]
390 Int64Type(Int64),
391 /// Float32
392 #[prost(message, tag = "12")]
393 Float32Type(Float32),
394 /// Float64
395 #[prost(message, tag = "9")]
396 Float64Type(Float64),
397 /// Bool
398 #[prost(message, tag = "8")]
399 BoolType(Bool),
400 /// Timestamp
401 #[prost(message, tag = "10")]
402 TimestampType(Timestamp),
403 /// Date
404 #[prost(message, tag = "11")]
405 DateType(Date),
406 /// Aggregate
407 #[prost(message, tag = "6")]
408 AggregateType(::prost::alloc::boxed::Box<Aggregate>),
409 /// Struct
410 #[prost(message, tag = "7")]
411 StructType(Struct),
412 /// Array
413 #[prost(message, tag = "3")]
414 ArrayType(::prost::alloc::boxed::Box<Array>),
415 /// Map
416 #[prost(message, tag = "4")]
417 MapType(::prost::alloc::boxed::Box<Map>),
418 }
419}
420/// Specifies the complete (requested) contents of a single row of a table.
421/// Rows which exceed 256MiB in size cannot be read in full.
422#[serde_with::serde_as]
423#[derive(serde::Serialize, serde::Deserialize)]
424#[serde(rename_all = "camelCase")]
425#[derive(Clone, PartialEq, ::prost::Message)]
426pub struct Row {
427 /// The unique key which identifies this row within its table. This is the same
428 /// key that's used to identify the row in, for example, a MutateRowRequest.
429 /// May contain any non-empty byte string up to 4KiB in length.
430 #[prost(bytes = "vec", tag = "1")]
431 pub key: ::prost::alloc::vec::Vec<u8>,
432 /// May be empty, but only if the entire row is empty.
433 /// The mutual ordering of column families is not specified.
434 #[prost(message, repeated, tag = "2")]
435 pub families: ::prost::alloc::vec::Vec<Family>,
436}
437/// Specifies (some of) the contents of a single row/column family intersection
438/// of a table.
439#[serde_with::serde_as]
440#[derive(serde::Serialize, serde::Deserialize)]
441#[serde(rename_all = "camelCase")]
442#[derive(Clone, PartialEq, ::prost::Message)]
443pub struct Family {
444 /// The unique key which identifies this family within its row. This is the
445 /// same key that's used to identify the family in, for example, a RowFilter
446 /// which sets its "family_name_regex_filter" field.
447 /// Must match `\[-_.a-zA-Z0-9\]+`, except that AggregatingRowProcessors may
448 /// produce cells in a sentinel family with an empty name.
449 /// Must be no greater than 64 characters in length.
450 #[prost(string, tag = "1")]
451 pub name: ::prost::alloc::string::String,
452 /// Must not be empty. Sorted in order of increasing "qualifier".
453 #[prost(message, repeated, tag = "2")]
454 pub columns: ::prost::alloc::vec::Vec<Column>,
455}
456/// Specifies (some of) the contents of a single row/column intersection of a
457/// table.
458#[serde_with::serde_as]
459#[derive(serde::Serialize, serde::Deserialize)]
460#[serde(rename_all = "camelCase")]
461#[derive(Clone, PartialEq, ::prost::Message)]
462pub struct Column {
463 /// The unique key which identifies this column within its family. This is the
464 /// same key that's used to identify the column in, for example, a RowFilter
465 /// which sets its `column_qualifier_regex_filter` field.
466 /// May contain any byte string, including the empty string, up to 16kiB in
467 /// length.
468 #[prost(bytes = "vec", tag = "1")]
469 pub qualifier: ::prost::alloc::vec::Vec<u8>,
470 /// Must not be empty. Sorted in order of decreasing "timestamp_micros".
471 #[prost(message, repeated, tag = "2")]
472 pub cells: ::prost::alloc::vec::Vec<Cell>,
473}
474/// Specifies (some of) the contents of a single row/column/timestamp of a table.
475#[serde_with::serde_as]
476#[derive(serde::Serialize, serde::Deserialize)]
477#[serde(rename_all = "camelCase")]
478#[derive(Clone, PartialEq, ::prost::Message)]
479pub struct Cell {
480 /// The cell's stored timestamp, which also uniquely identifies it within
481 /// its column.
482 /// Values are always expressed in microseconds, but individual tables may set
483 /// a coarser granularity to further restrict the allowed values. For
484 /// example, a table which specifies millisecond granularity will only allow
485 /// values of `timestamp_micros` which are multiples of 1000.
486 #[prost(int64, tag = "1")]
487 pub timestamp_micros: i64,
488 /// The value stored in the cell.
489 /// May contain any byte string, including the empty string, up to 100MiB in
490 /// length.
491 #[prost(bytes = "vec", tag = "2")]
492 pub value: ::prost::alloc::vec::Vec<u8>,
493 /// Labels applied to the cell by a \[RowFilter\]\[google.bigtable.v2.RowFilter\].
494 #[prost(string, repeated, tag = "3")]
495 pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
496}
497/// `Value` represents a dynamically typed value.
498/// The typed fields in `Value` are used as a transport encoding for the actual
499/// value (which may be of a more complex type). See the documentation of the
500/// `Type` message for more details.
501#[serde_with::serde_as]
502#[derive(serde::Serialize, serde::Deserialize)]
503#[serde(rename_all = "camelCase")]
504#[derive(Clone, PartialEq, ::prost::Message)]
505pub struct Value {
506 /// The verified `Type` of this `Value`, if it cannot be inferred.
507 ///
508 /// Read results will never specify the encoding for `type` since the value
509 /// will already have been decoded by the server. Furthermore, the `type` will
510 /// be omitted entirely if it can be inferred from a previous response. The
511 /// exact semantics for inferring `type` will vary, and are therefore
512 /// documented separately for each read method.
513 ///
514 /// When using composite types (Struct, Array, Map) only the outermost `Value`
515 /// will specify the `type`. This top-level `type` will define the types for
516 /// any nested `Struct' fields, `Array`elements, or`Map`key/value pairs. If a nested`Value`provides a`type\` on write, the request will be
517 /// rejected with INVALID_ARGUMENT.
518 #[prost(message, optional, tag = "7")]
519 pub r#type: ::core::option::Option<Type>,
520 /// Options for transporting values within the protobuf type system. A given
521 /// `kind` may support more than one `type` and vice versa. On write, this is
522 /// roughly analogous to a GoogleSQL literal.
523 ///
524 /// The value is `NULL` if none of the fields in `kind` is set. If `type` is
525 /// also omitted on write, we will infer it based on the schema.
526 #[prost(oneof = "value::Kind", tags = "8, 9, 2, 3, 6, 10, 11, 12, 13, 4")]
527 pub kind: ::core::option::Option<value::Kind>,
528}
529/// Nested message and enum types in `Value`.
530pub mod value {
531 /// Options for transporting values within the protobuf type system. A given
532 /// `kind` may support more than one `type` and vice versa. On write, this is
533 /// roughly analogous to a GoogleSQL literal.
534 ///
535 /// The value is `NULL` if none of the fields in `kind` is set. If `type` is
536 /// also omitted on write, we will infer it based on the schema.
537 #[serde_with::serde_as]
538 #[derive(serde::Serialize, serde::Deserialize)]
539 #[serde(rename_all = "camelCase")]
540 #[derive(Clone, PartialEq, ::prost::Oneof)]
541 pub enum Kind {
542 /// Represents a raw byte sequence with no type information.
543 /// The `type` field must be omitted.
544 #[prost(bytes, tag = "8")]
545 RawValue(::prost::alloc::vec::Vec<u8>),
546 /// Represents a raw cell timestamp with no type information.
547 /// The `type` field must be omitted.
548 #[prost(int64, tag = "9")]
549 RawTimestampMicros(i64),
550 /// Represents a typed value transported as a byte sequence.
551 #[prost(bytes, tag = "2")]
552 BytesValue(::prost::alloc::vec::Vec<u8>),
553 /// Represents a typed value transported as a string.
554 #[prost(string, tag = "3")]
555 StringValue(::prost::alloc::string::String),
556 /// Represents a typed value transported as an integer.
557 #[prost(int64, tag = "6")]
558 IntValue(i64),
559 /// Represents a typed value transported as a boolean.
560 #[prost(bool, tag = "10")]
561 BoolValue(bool),
562 /// Represents a typed value transported as a floating point number.
563 #[prost(double, tag = "11")]
564 FloatValue(f64),
565 /// Represents a typed value transported as a timestamp.
566 #[prost(message, tag = "12")]
567 TimestampValue(::prost_wkt_types::Timestamp),
568 /// Represents a typed value transported as a date.
569 #[prost(message, tag = "13")]
570 DateValue(super::super::super::r#type::Date),
571 /// Represents a typed value transported as a sequence of values.
572 /// To differentiate between `Struct`, `Array`, and `Map`, the outermost
573 /// `Value` must provide an explicit `type` on write. This `type` will
574 /// apply recursively to the nested `Struct` fields, `Array` elements,
575 /// or `Map` key/value pairs, which *must not* supply their own `type`.
576 #[prost(message, tag = "4")]
577 ArrayValue(super::ArrayValue),
578 }
579}
580/// `ArrayValue` is an ordered list of `Value`.
581#[serde_with::serde_as]
582#[derive(serde::Serialize, serde::Deserialize)]
583#[serde(rename_all = "camelCase")]
584#[derive(Clone, PartialEq, ::prost::Message)]
585pub struct ArrayValue {
586 /// The ordered elements in the array.
587 #[prost(message, repeated, tag = "1")]
588 pub values: ::prost::alloc::vec::Vec<Value>,
589}
590/// Specifies a contiguous range of rows.
591#[serde_with::serde_as]
592#[derive(serde::Serialize, serde::Deserialize)]
593#[serde(rename_all = "camelCase")]
594#[derive(Clone, PartialEq, ::prost::Message)]
595pub struct RowRange {
596 /// The row key at which to start the range.
597 /// If neither field is set, interpreted as the empty string, inclusive.
598 #[prost(oneof = "row_range::StartKey", tags = "1, 2")]
599 pub start_key: ::core::option::Option<row_range::StartKey>,
600 /// The row key at which to end the range.
601 /// If neither field is set, interpreted as the infinite row key, exclusive.
602 #[prost(oneof = "row_range::EndKey", tags = "3, 4")]
603 pub end_key: ::core::option::Option<row_range::EndKey>,
604}
605/// Nested message and enum types in `RowRange`.
606pub mod row_range {
607 /// The row key at which to start the range.
608 /// If neither field is set, interpreted as the empty string, inclusive.
609 #[serde_with::serde_as]
610 #[derive(serde::Serialize, serde::Deserialize)]
611 #[serde(rename_all = "camelCase")]
612 #[derive(Clone, PartialEq, ::prost::Oneof)]
613 pub enum StartKey {
614 /// Used when giving an inclusive lower bound for the range.
615 #[prost(bytes, tag = "1")]
616 StartKeyClosed(::prost::alloc::vec::Vec<u8>),
617 /// Used when giving an exclusive lower bound for the range.
618 #[prost(bytes, tag = "2")]
619 StartKeyOpen(::prost::alloc::vec::Vec<u8>),
620 }
621 /// The row key at which to end the range.
622 /// If neither field is set, interpreted as the infinite row key, exclusive.
623 #[serde_with::serde_as]
624 #[derive(serde::Serialize, serde::Deserialize)]
625 #[serde(rename_all = "camelCase")]
626 #[derive(Clone, PartialEq, ::prost::Oneof)]
627 pub enum EndKey {
628 /// Used when giving an exclusive upper bound for the range.
629 #[prost(bytes, tag = "3")]
630 EndKeyOpen(::prost::alloc::vec::Vec<u8>),
631 /// Used when giving an inclusive upper bound for the range.
632 #[prost(bytes, tag = "4")]
633 EndKeyClosed(::prost::alloc::vec::Vec<u8>),
634 }
635}
636/// Specifies a non-contiguous set of rows.
637#[serde_with::serde_as]
638#[derive(serde::Serialize, serde::Deserialize)]
639#[serde(rename_all = "camelCase")]
640#[derive(Clone, PartialEq, ::prost::Message)]
641pub struct RowSet {
642 /// Single rows included in the set.
643 #[prost(bytes = "vec", repeated, tag = "1")]
644 pub row_keys: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
645 /// Contiguous row ranges included in the set.
646 #[prost(message, repeated, tag = "2")]
647 pub row_ranges: ::prost::alloc::vec::Vec<RowRange>,
648}
649/// Specifies a contiguous range of columns within a single column family.
650/// The range spans from \<column_family\>:\<start_qualifier\> to
651/// \<column_family\>:\<end_qualifier\>, where both bounds can be either
652/// inclusive or exclusive.
653#[serde_with::serde_as]
654#[derive(serde::Serialize, serde::Deserialize)]
655#[serde(rename_all = "camelCase")]
656#[derive(Clone, PartialEq, ::prost::Message)]
657pub struct ColumnRange {
658 /// The name of the column family within which this range falls.
659 #[prost(string, tag = "1")]
660 pub family_name: ::prost::alloc::string::String,
661 /// The column qualifier at which to start the range (within `column_family`).
662 /// If neither field is set, interpreted as the empty string, inclusive.
663 #[prost(oneof = "column_range::StartQualifier", tags = "2, 3")]
664 pub start_qualifier: ::core::option::Option<column_range::StartQualifier>,
665 /// The column qualifier at which to end the range (within `column_family`).
666 /// If neither field is set, interpreted as the infinite string, exclusive.
667 #[prost(oneof = "column_range::EndQualifier", tags = "4, 5")]
668 pub end_qualifier: ::core::option::Option<column_range::EndQualifier>,
669}
670/// Nested message and enum types in `ColumnRange`.
671pub mod column_range {
672 /// The column qualifier at which to start the range (within `column_family`).
673 /// If neither field is set, interpreted as the empty string, inclusive.
674 #[serde_with::serde_as]
675 #[derive(serde::Serialize, serde::Deserialize)]
676 #[serde(rename_all = "camelCase")]
677 #[derive(Clone, PartialEq, ::prost::Oneof)]
678 pub enum StartQualifier {
679 /// Used when giving an inclusive lower bound for the range.
680 #[prost(bytes, tag = "2")]
681 StartQualifierClosed(::prost::alloc::vec::Vec<u8>),
682 /// Used when giving an exclusive lower bound for the range.
683 #[prost(bytes, tag = "3")]
684 StartQualifierOpen(::prost::alloc::vec::Vec<u8>),
685 }
686 /// The column qualifier at which to end the range (within `column_family`).
687 /// If neither field is set, interpreted as the infinite string, exclusive.
688 #[serde_with::serde_as]
689 #[derive(serde::Serialize, serde::Deserialize)]
690 #[serde(rename_all = "camelCase")]
691 #[derive(Clone, PartialEq, ::prost::Oneof)]
692 pub enum EndQualifier {
693 /// Used when giving an inclusive upper bound for the range.
694 #[prost(bytes, tag = "4")]
695 EndQualifierClosed(::prost::alloc::vec::Vec<u8>),
696 /// Used when giving an exclusive upper bound for the range.
697 #[prost(bytes, tag = "5")]
698 EndQualifierOpen(::prost::alloc::vec::Vec<u8>),
699 }
700}
701/// Specified a contiguous range of microsecond timestamps.
702#[serde_with::serde_as]
703#[derive(serde::Serialize, serde::Deserialize)]
704#[serde(rename_all = "camelCase")]
705#[derive(Clone, Copy, PartialEq, ::prost::Message)]
706pub struct TimestampRange {
707 /// Inclusive lower bound. If left empty, interpreted as 0.
708 #[prost(int64, tag = "1")]
709 pub start_timestamp_micros: i64,
710 /// Exclusive upper bound. If left empty, interpreted as infinity.
711 #[prost(int64, tag = "2")]
712 pub end_timestamp_micros: i64,
713}
714/// Specifies a contiguous range of raw byte values.
715#[serde_with::serde_as]
716#[derive(serde::Serialize, serde::Deserialize)]
717#[serde(rename_all = "camelCase")]
718#[derive(Clone, PartialEq, ::prost::Message)]
719pub struct ValueRange {
720 /// The value at which to start the range.
721 /// If neither field is set, interpreted as the empty string, inclusive.
722 #[prost(oneof = "value_range::StartValue", tags = "1, 2")]
723 pub start_value: ::core::option::Option<value_range::StartValue>,
724 /// The value at which to end the range.
725 /// If neither field is set, interpreted as the infinite string, exclusive.
726 #[prost(oneof = "value_range::EndValue", tags = "3, 4")]
727 pub end_value: ::core::option::Option<value_range::EndValue>,
728}
729/// Nested message and enum types in `ValueRange`.
730pub mod value_range {
731 /// The value at which to start the range.
732 /// If neither field is set, interpreted as the empty string, inclusive.
733 #[serde_with::serde_as]
734 #[derive(serde::Serialize, serde::Deserialize)]
735 #[serde(rename_all = "camelCase")]
736 #[derive(Clone, PartialEq, ::prost::Oneof)]
737 pub enum StartValue {
738 /// Used when giving an inclusive lower bound for the range.
739 #[prost(bytes, tag = "1")]
740 StartValueClosed(::prost::alloc::vec::Vec<u8>),
741 /// Used when giving an exclusive lower bound for the range.
742 #[prost(bytes, tag = "2")]
743 StartValueOpen(::prost::alloc::vec::Vec<u8>),
744 }
745 /// The value at which to end the range.
746 /// If neither field is set, interpreted as the infinite string, exclusive.
747 #[serde_with::serde_as]
748 #[derive(serde::Serialize, serde::Deserialize)]
749 #[serde(rename_all = "camelCase")]
750 #[derive(Clone, PartialEq, ::prost::Oneof)]
751 pub enum EndValue {
752 /// Used when giving an inclusive upper bound for the range.
753 #[prost(bytes, tag = "3")]
754 EndValueClosed(::prost::alloc::vec::Vec<u8>),
755 /// Used when giving an exclusive upper bound for the range.
756 #[prost(bytes, tag = "4")]
757 EndValueOpen(::prost::alloc::vec::Vec<u8>),
758 }
759}
760/// Takes a row as input and produces an alternate view of the row based on
761/// specified rules. For example, a RowFilter might trim down a row to include
762/// just the cells from columns matching a given regular expression, or might
763/// return all the cells of a row but not their values. More complicated filters
764/// can be composed out of these components to express requests such as, "within
765/// every column of a particular family, give just the two most recent cells
766/// which are older than timestamp X."
767///
768/// There are two broad categories of RowFilters (true filters and transformers),
769/// as well as two ways to compose simple filters into more complex ones
770/// (chains and interleaves). They work as follows:
771///
772/// * True filters alter the input row by excluding some of its cells wholesale
773/// from the output row. An example of a true filter is the `value_regex_filter`,
774/// which excludes cells whose values don't match the specified pattern. All
775/// regex true filters use RE2 syntax (<https://github.com/google/re2/wiki/Syntax>)
776/// in raw byte mode (RE2::Latin1), and are evaluated as full matches. An
777/// important point to keep in mind is that `RE2(.)` is equivalent by default to
778/// `RE2(\[^\n\])`, meaning that it does not match newlines. When attempting to
779/// match an arbitrary byte, you should therefore use the escape sequence `\C`,
780/// which may need to be further escaped as `\\C` in your client language.
781///
782/// * Transformers alter the input row by changing the values of some of its
783/// cells in the output, without excluding them completely. Currently, the only
784/// supported transformer is the `strip_value_transformer`, which replaces every
785/// cell's value with the empty string.
786///
787/// * Chains and interleaves are described in more detail in the
788/// RowFilter.Chain and RowFilter.Interleave documentation.
789///
790/// The total serialized size of a RowFilter message must not
791/// exceed 20480 bytes, and RowFilters may not be nested within each other
792/// (in Chains or Interleaves) to a depth of more than 20.
793#[serde_with::serde_as]
794#[derive(serde::Serialize, serde::Deserialize)]
795#[serde(rename_all = "camelCase")]
796#[derive(Clone, PartialEq, ::prost::Message)]
797pub struct RowFilter {
798 /// Which of the possible RowFilter types to apply. If none are set, this
799 /// RowFilter returns all cells in the input row.
800 #[prost(
801 oneof = "row_filter::Filter",
802 tags = "1, 2, 3, 16, 17, 18, 4, 14, 5, 6, 7, 8, 9, 15, 10, 11, 12, 13, 19"
803 )]
804 pub filter: ::core::option::Option<row_filter::Filter>,
805}
806/// Nested message and enum types in `RowFilter`.
807pub mod row_filter {
808 /// A RowFilter which sends rows through several RowFilters in sequence.
809 #[serde_with::serde_as]
810 #[derive(serde::Serialize, serde::Deserialize)]
811 #[serde(rename_all = "camelCase")]
812 #[derive(Clone, PartialEq, ::prost::Message)]
813 pub struct Chain {
814 /// The elements of "filters" are chained together to process the input row:
815 /// in row -> f(0) -> intermediate row -> f(1) -> ... -> f(N) -> out row
816 /// The full chain is executed atomically.
817 #[prost(message, repeated, tag = "1")]
818 pub filters: ::prost::alloc::vec::Vec<super::RowFilter>,
819 }
820 /// A RowFilter which sends each row to each of several component
821 /// RowFilters and interleaves the results.
822 #[serde_with::serde_as]
823 #[derive(serde::Serialize, serde::Deserialize)]
824 #[serde(rename_all = "camelCase")]
825 #[derive(Clone, PartialEq, ::prost::Message)]
826 pub struct Interleave {
827 /// The elements of "filters" all process a copy of the input row, and the
828 /// results are pooled, sorted, and combined into a single output row.
829 /// If multiple cells are produced with the same column and timestamp,
830 /// they will all appear in the output row in an unspecified mutual order.
831 /// Consider the following example, with three filters:
832 ///
833 /// ```text
834 /// input row
835 /// |
836 /// -----------------------------------------------------
837 /// | | |
838 /// f(0) f(1) f(2)
839 /// | | |
840 /// 1: foo,bar,10,x foo,bar,10,z far,bar,7,a
841 /// 2: foo,blah,11,z far,blah,5,x far,blah,5,x
842 /// | | |
843 /// -----------------------------------------------------
844 /// |
845 /// 1: foo,bar,10,z // could have switched with #2
846 /// 2: foo,bar,10,x // could have switched with #1
847 /// 3: foo,blah,11,z
848 /// 4: far,bar,7,a
849 /// 5: far,blah,5,x // identical to #6
850 /// 6: far,blah,5,x // identical to #5
851 /// ```
852 ///
853 /// All interleaved filters are executed atomically.
854 #[prost(message, repeated, tag = "1")]
855 pub filters: ::prost::alloc::vec::Vec<super::RowFilter>,
856 }
857 /// A RowFilter which evaluates one of two possible RowFilters, depending on
858 /// whether or not a predicate RowFilter outputs any cells from the input row.
859 ///
860 /// IMPORTANT NOTE: The predicate filter does not execute atomically with the
861 /// true and false filters, which may lead to inconsistent or unexpected
862 /// results. Additionally, Condition filters have poor performance, especially
863 /// when filters are set for the false condition.
864 #[serde_with::serde_as]
865 #[derive(serde::Serialize, serde::Deserialize)]
866 #[serde(rename_all = "camelCase")]
867 #[derive(Clone, PartialEq, ::prost::Message)]
868 pub struct Condition {
869 /// If `predicate_filter` outputs any cells, then `true_filter` will be
870 /// evaluated on the input row. Otherwise, `false_filter` will be evaluated.
871 #[prost(message, optional, boxed, tag = "1")]
872 pub predicate_filter: ::core::option::Option<::prost::alloc::boxed::Box<super::RowFilter>>,
873 /// The filter to apply to the input row if `predicate_filter` returns any
874 /// results. If not provided, no results will be returned in the true case.
875 #[prost(message, optional, boxed, tag = "2")]
876 pub true_filter: ::core::option::Option<::prost::alloc::boxed::Box<super::RowFilter>>,
877 /// The filter to apply to the input row if `predicate_filter` does not
878 /// return any results. If not provided, no results will be returned in the
879 /// false case.
880 #[prost(message, optional, boxed, tag = "3")]
881 pub false_filter: ::core::option::Option<::prost::alloc::boxed::Box<super::RowFilter>>,
882 }
883 /// Which of the possible RowFilter types to apply. If none are set, this
884 /// RowFilter returns all cells in the input row.
885 #[serde_with::serde_as]
886 #[derive(serde::Serialize, serde::Deserialize)]
887 #[serde(rename_all = "camelCase")]
888 #[derive(Clone, PartialEq, ::prost::Oneof)]
889 pub enum Filter {
890 /// Applies several RowFilters to the data in sequence, progressively
891 /// narrowing the results.
892 #[prost(message, tag = "1")]
893 Chain(Chain),
894 /// Applies several RowFilters to the data in parallel and combines the
895 /// results.
896 #[prost(message, tag = "2")]
897 Interleave(Interleave),
898 /// Applies one of two possible RowFilters to the data based on the output of
899 /// a predicate RowFilter.
900 #[prost(message, tag = "3")]
901 Condition(::prost::alloc::boxed::Box<Condition>),
902 /// ADVANCED USE ONLY.
903 /// Hook for introspection into the RowFilter. Outputs all cells directly to
904 /// the output of the read rather than to any parent filter. Consider the
905 /// following example:
906 ///
907 /// ```text
908 /// Chain(
909 /// FamilyRegex("A"),
910 /// Interleave(
911 /// All(),
912 /// Chain(Label("foo"), Sink())
913 /// ),
914 /// QualifierRegex("B")
915 /// )
916 ///
917 /// A,A,1,w
918 /// A,B,2,x
919 /// B,B,4,z
920 /// |
921 /// FamilyRegex("A")
922 /// |
923 /// A,A,1,w
924 /// A,B,2,x
925 /// |
926 /// +------------+-------------+
927 /// | |
928 /// All() Label(foo)
929 /// | |
930 /// A,A,1,w A,A,1,w,labels:\[foo\]
931 /// A,B,2,x A,B,2,x,labels:\[foo\]
932 /// | |
933 /// | Sink() --------------+
934 /// | | |
935 /// +------------+ x------+ A,A,1,w,labels:\[foo\]
936 /// | A,B,2,x,labels:\[foo\]
937 /// A,A,1,w |
938 /// A,B,2,x |
939 /// | |
940 /// QualifierRegex("B") |
941 /// | |
942 /// A,B,2,x |
943 /// | |
944 /// +--------------------------------+
945 /// |
946 /// A,A,1,w,labels:\[foo\]
947 /// A,B,2,x,labels:\[foo\] // could be switched
948 /// A,B,2,x // could be switched
949 /// ```
950 ///
951 /// Despite being excluded by the qualifier filter, a copy of every cell
952 /// that reaches the sink is present in the final result.
953 ///
954 /// As with an \[Interleave\]\[google.bigtable.v2.RowFilter.Interleave\],
955 /// duplicate cells are possible, and appear in an unspecified mutual order.
956 /// In this case we have a duplicate with column "A:B" and timestamp 2,
957 /// because one copy passed through the all filter while the other was
958 /// passed through the label and sink. Note that one copy has label "foo",
959 /// while the other does not.
960 ///
961 /// Cannot be used within the `predicate_filter`, `true_filter`, or
962 /// `false_filter` of a \[Condition\]\[google.bigtable.v2.RowFilter.Condition\].
963 #[prost(bool, tag = "16")]
964 Sink(bool),
965 /// Matches all cells, regardless of input. Functionally equivalent to
966 /// leaving `filter` unset, but included for completeness.
967 #[prost(bool, tag = "17")]
968 PassAllFilter(bool),
969 /// Does not match any cells, regardless of input. Useful for temporarily
970 /// disabling just part of a filter.
971 #[prost(bool, tag = "18")]
972 BlockAllFilter(bool),
973 /// Matches only cells from rows whose keys satisfy the given RE2 regex. In
974 /// other words, passes through the entire row when the key matches, and
975 /// otherwise produces an empty row.
976 /// Note that, since row keys can contain arbitrary bytes, the `\C` escape
977 /// sequence must be used if a true wildcard is desired. The `.` character
978 /// will not match the new line character `\n`, which may be present in a
979 /// binary key.
980 #[prost(bytes, tag = "4")]
981 RowKeyRegexFilter(::prost::alloc::vec::Vec<u8>),
982 /// Matches all cells from a row with probability p, and matches no cells
983 /// from the row with probability 1-p.
984 #[prost(double, tag = "14")]
985 RowSampleFilter(f64),
986 /// Matches only cells from columns whose families satisfy the given RE2
987 /// regex. For technical reasons, the regex must not contain the `:`
988 /// character, even if it is not being used as a literal.
989 /// Note that, since column families cannot contain the new line character
990 /// `\n`, it is sufficient to use `.` as a full wildcard when matching
991 /// column family names.
992 #[prost(string, tag = "5")]
993 FamilyNameRegexFilter(::prost::alloc::string::String),
994 /// Matches only cells from columns whose qualifiers satisfy the given RE2
995 /// regex.
996 /// Note that, since column qualifiers can contain arbitrary bytes, the `\C`
997 /// escape sequence must be used if a true wildcard is desired. The `.`
998 /// character will not match the new line character `\n`, which may be
999 /// present in a binary qualifier.
1000 #[prost(bytes, tag = "6")]
1001 ColumnQualifierRegexFilter(::prost::alloc::vec::Vec<u8>),
1002 /// Matches only cells from columns within the given range.
1003 #[prost(message, tag = "7")]
1004 ColumnRangeFilter(super::ColumnRange),
1005 /// Matches only cells with timestamps within the given range.
1006 #[prost(message, tag = "8")]
1007 TimestampRangeFilter(super::TimestampRange),
1008 /// Matches only cells with values that satisfy the given regular expression.
1009 /// Note that, since cell values can contain arbitrary bytes, the `\C` escape
1010 /// sequence must be used if a true wildcard is desired. The `.` character
1011 /// will not match the new line character `\n`, which may be present in a
1012 /// binary value.
1013 #[prost(bytes, tag = "9")]
1014 ValueRegexFilter(::prost::alloc::vec::Vec<u8>),
1015 /// Matches only cells with values that fall within the given range.
1016 #[prost(message, tag = "15")]
1017 ValueRangeFilter(super::ValueRange),
1018 /// Skips the first N cells of each row, matching all subsequent cells.
1019 /// If duplicate cells are present, as is possible when using an Interleave,
1020 /// each copy of the cell is counted separately.
1021 #[prost(int32, tag = "10")]
1022 CellsPerRowOffsetFilter(i32),
1023 /// Matches only the first N cells of each row.
1024 /// If duplicate cells are present, as is possible when using an Interleave,
1025 /// each copy of the cell is counted separately.
1026 #[prost(int32, tag = "11")]
1027 CellsPerRowLimitFilter(i32),
1028 /// Matches only the most recent N cells within each column. For example,
1029 /// if N=2, this filter would match column `foo:bar` at timestamps 10 and 9,
1030 /// skip all earlier cells in `foo:bar`, and then begin matching again in
1031 /// column `foo:bar2`.
1032 /// If duplicate cells are present, as is possible when using an Interleave,
1033 /// each copy of the cell is counted separately.
1034 #[prost(int32, tag = "12")]
1035 CellsPerColumnLimitFilter(i32),
1036 /// Replaces each cell's value with the empty string.
1037 #[prost(bool, tag = "13")]
1038 StripValueTransformer(bool),
1039 /// Applies the given label to all cells in the output row. This allows
1040 /// the client to determine which results were produced from which part of
1041 /// the filter.
1042 ///
1043 /// Values must be at most 15 characters in length, and match the RE2
1044 /// pattern `\[a-z0-9\\-\]+`
1045 ///
1046 /// Due to a technical limitation, it is not currently possible to apply
1047 /// multiple labels to a cell. As a result, a Chain may have no more than
1048 /// one sub-filter which contains a `apply_label_transformer`. It is okay for
1049 /// an Interleave to contain multiple `apply_label_transformers`, as they
1050 /// will be applied to separate copies of the input. This may be relaxed in
1051 /// the future.
1052 #[prost(string, tag = "19")]
1053 ApplyLabelTransformer(::prost::alloc::string::String),
1054 }
1055}
1056/// Specifies a particular change to be made to the contents of a row.
1057#[serde_with::serde_as]
1058#[derive(serde::Serialize, serde::Deserialize)]
1059#[serde(rename_all = "camelCase")]
1060#[derive(Clone, PartialEq, ::prost::Message)]
1061pub struct Mutation {
1062 /// Which of the possible Mutation types to apply.
1063 #[prost(oneof = "mutation::Mutation", tags = "1, 5, 6, 2, 3, 4")]
1064 pub mutation: ::core::option::Option<mutation::Mutation>,
1065}
1066/// Nested message and enum types in `Mutation`.
1067pub mod mutation {
1068 /// A Mutation which sets the value of the specified cell.
1069 #[serde_with::serde_as]
1070 #[derive(serde::Serialize, serde::Deserialize)]
1071 #[serde(rename_all = "camelCase")]
1072 #[derive(Clone, PartialEq, ::prost::Message)]
1073 pub struct SetCell {
1074 /// The name of the family into which new data should be written.
1075 /// Must match `\[-_.a-zA-Z0-9\]+`
1076 #[prost(string, tag = "1")]
1077 pub family_name: ::prost::alloc::string::String,
1078 /// The qualifier of the column into which new data should be written.
1079 /// Can be any byte string, including the empty string.
1080 #[prost(bytes = "vec", tag = "2")]
1081 pub column_qualifier: ::prost::alloc::vec::Vec<u8>,
1082 /// The timestamp of the cell into which new data should be written.
1083 /// Use -1 for current Bigtable server time.
1084 /// Otherwise, the client should set this value itself, noting that the
1085 /// default value is a timestamp of zero if the field is left unspecified.
1086 /// Values must match the granularity of the table (e.g. micros, millis).
1087 #[prost(int64, tag = "3")]
1088 pub timestamp_micros: i64,
1089 /// The value to be written into the specified cell.
1090 #[prost(bytes = "vec", tag = "4")]
1091 pub value: ::prost::alloc::vec::Vec<u8>,
1092 }
1093 /// A Mutation which incrementally updates a cell in an `Aggregate` family.
1094 #[serde_with::serde_as]
1095 #[derive(serde::Serialize, serde::Deserialize)]
1096 #[serde(rename_all = "camelCase")]
1097 #[derive(Clone, PartialEq, ::prost::Message)]
1098 pub struct AddToCell {
1099 /// The name of the `Aggregate` family into which new data should be added.
1100 /// This must be a family with a `value_type` of `Aggregate`.
1101 /// Format: `\[-_.a-zA-Z0-9\]+`
1102 #[prost(string, tag = "1")]
1103 pub family_name: ::prost::alloc::string::String,
1104 /// The qualifier of the column into which new data should be added. This
1105 /// must be a `raw_value`.
1106 #[prost(message, optional, tag = "2")]
1107 pub column_qualifier: ::core::option::Option<super::Value>,
1108 /// The timestamp of the cell to which new data should be added. This must
1109 /// be a `raw_timestamp_micros` that matches the table's `granularity`.
1110 #[prost(message, optional, tag = "3")]
1111 pub timestamp: ::core::option::Option<super::Value>,
1112 /// The input value to be accumulated into the specified cell. This must be
1113 /// compatible with the family's `value_type.input_type`.
1114 #[prost(message, optional, tag = "4")]
1115 pub input: ::core::option::Option<super::Value>,
1116 }
1117 /// A Mutation which merges accumulated state into a cell in an `Aggregate`
1118 /// family.
1119 #[serde_with::serde_as]
1120 #[derive(serde::Serialize, serde::Deserialize)]
1121 #[serde(rename_all = "camelCase")]
1122 #[derive(Clone, PartialEq, ::prost::Message)]
1123 pub struct MergeToCell {
1124 /// The name of the `Aggregate` family into which new data should be added.
1125 /// This must be a family with a `value_type` of `Aggregate`.
1126 /// Format: `\[-_.a-zA-Z0-9\]+`
1127 #[prost(string, tag = "1")]
1128 pub family_name: ::prost::alloc::string::String,
1129 /// The qualifier of the column into which new data should be added. This
1130 /// must be a `raw_value`.
1131 #[prost(message, optional, tag = "2")]
1132 pub column_qualifier: ::core::option::Option<super::Value>,
1133 /// The timestamp of the cell to which new data should be added. This must
1134 /// be a `raw_timestamp_micros` that matches the table's `granularity`.
1135 #[prost(message, optional, tag = "3")]
1136 pub timestamp: ::core::option::Option<super::Value>,
1137 /// The input value to be merged into the specified cell. This must be
1138 /// compatible with the family's `value_type.state_type`. Merging `NULL` is
1139 /// allowed, but has no effect.
1140 #[prost(message, optional, tag = "4")]
1141 pub input: ::core::option::Option<super::Value>,
1142 }
1143 /// A Mutation which deletes cells from the specified column, optionally
1144 /// restricting the deletions to a given timestamp range.
1145 #[serde_with::serde_as]
1146 #[derive(serde::Serialize, serde::Deserialize)]
1147 #[serde(rename_all = "camelCase")]
1148 #[derive(Clone, PartialEq, ::prost::Message)]
1149 pub struct DeleteFromColumn {
1150 /// The name of the family from which cells should be deleted.
1151 /// Must match `\[-_.a-zA-Z0-9\]+`
1152 #[prost(string, tag = "1")]
1153 pub family_name: ::prost::alloc::string::String,
1154 /// The qualifier of the column from which cells should be deleted.
1155 /// Can be any byte string, including the empty string.
1156 #[prost(bytes = "vec", tag = "2")]
1157 pub column_qualifier: ::prost::alloc::vec::Vec<u8>,
1158 /// The range of timestamps within which cells should be deleted.
1159 #[prost(message, optional, tag = "3")]
1160 pub time_range: ::core::option::Option<super::TimestampRange>,
1161 }
1162 /// A Mutation which deletes all cells from the specified column family.
1163 #[serde_with::serde_as]
1164 #[derive(serde::Serialize, serde::Deserialize)]
1165 #[serde(rename_all = "camelCase")]
1166 #[derive(Clone, PartialEq, ::prost::Message)]
1167 pub struct DeleteFromFamily {
1168 /// The name of the family from which cells should be deleted.
1169 /// Must match `\[-_.a-zA-Z0-9\]+`
1170 #[prost(string, tag = "1")]
1171 pub family_name: ::prost::alloc::string::String,
1172 }
1173 /// A Mutation which deletes all cells from the containing row.
1174 #[serde_with::serde_as]
1175 #[derive(serde::Serialize, serde::Deserialize)]
1176 #[serde(rename_all = "camelCase")]
1177 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
1178 pub struct DeleteFromRow {}
1179 /// Which of the possible Mutation types to apply.
1180 #[serde_with::serde_as]
1181 #[derive(serde::Serialize, serde::Deserialize)]
1182 #[serde(rename_all = "camelCase")]
1183 #[derive(Clone, PartialEq, ::prost::Oneof)]
1184 pub enum Mutation {
1185 /// Set a cell's value.
1186 #[prost(message, tag = "1")]
1187 SetCell(SetCell),
1188 /// Incrementally updates an `Aggregate` cell.
1189 #[prost(message, tag = "5")]
1190 AddToCell(AddToCell),
1191 /// Merges accumulated state to an `Aggregate` cell.
1192 #[prost(message, tag = "6")]
1193 MergeToCell(MergeToCell),
1194 /// Deletes cells from a column.
1195 #[prost(message, tag = "2")]
1196 DeleteFromColumn(DeleteFromColumn),
1197 /// Deletes cells from a column family.
1198 #[prost(message, tag = "3")]
1199 DeleteFromFamily(DeleteFromFamily),
1200 /// Deletes cells from the entire row.
1201 #[prost(message, tag = "4")]
1202 DeleteFromRow(DeleteFromRow),
1203 }
1204}
1205/// Specifies an atomic read/modify/write operation on the latest value of the
1206/// specified column.
1207#[serde_with::serde_as]
1208#[derive(serde::Serialize, serde::Deserialize)]
1209#[serde(rename_all = "camelCase")]
1210#[derive(Clone, PartialEq, ::prost::Message)]
1211pub struct ReadModifyWriteRule {
1212 /// The name of the family to which the read/modify/write should be applied.
1213 /// Must match `\[-_.a-zA-Z0-9\]+`
1214 #[prost(string, tag = "1")]
1215 pub family_name: ::prost::alloc::string::String,
1216 /// The qualifier of the column to which the read/modify/write should be
1217 /// applied.
1218 /// Can be any byte string, including the empty string.
1219 #[prost(bytes = "vec", tag = "2")]
1220 pub column_qualifier: ::prost::alloc::vec::Vec<u8>,
1221 /// The rule used to determine the column's new latest value from its current
1222 /// latest value.
1223 #[prost(oneof = "read_modify_write_rule::Rule", tags = "3, 4")]
1224 pub rule: ::core::option::Option<read_modify_write_rule::Rule>,
1225}
1226/// Nested message and enum types in `ReadModifyWriteRule`.
1227pub mod read_modify_write_rule {
1228 /// The rule used to determine the column's new latest value from its current
1229 /// latest value.
1230 #[serde_with::serde_as]
1231 #[derive(serde::Serialize, serde::Deserialize)]
1232 #[serde(rename_all = "camelCase")]
1233 #[derive(Clone, PartialEq, ::prost::Oneof)]
1234 pub enum Rule {
1235 /// Rule specifying that `append_value` be appended to the existing value.
1236 /// If the targeted cell is unset, it will be treated as containing the
1237 /// empty string.
1238 #[prost(bytes, tag = "3")]
1239 AppendValue(::prost::alloc::vec::Vec<u8>),
1240 /// Rule specifying that `increment_amount` be added to the existing value.
1241 /// If the targeted cell is unset, it will be treated as containing a zero.
1242 /// Otherwise, the targeted cell must contain an 8-byte value (interpreted
1243 /// as a 64-bit big-endian signed integer), or the entire request will fail.
1244 #[prost(int64, tag = "4")]
1245 IncrementAmount(i64),
1246 }
1247}
1248/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
1249/// A partition of a change stream.
1250#[serde_with::serde_as]
1251#[derive(serde::Serialize, serde::Deserialize)]
1252#[serde(rename_all = "camelCase")]
1253#[derive(Clone, PartialEq, ::prost::Message)]
1254pub struct StreamPartition {
1255 /// The row range covered by this partition and is specified by
1256 /// \[`start_key_closed`, `end_key_open`).
1257 #[prost(message, optional, tag = "1")]
1258 pub row_range: ::core::option::Option<RowRange>,
1259}
1260/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
1261/// The information required to continue reading the data from multiple
1262/// `StreamPartitions` from where a previous read left off.
1263#[serde_with::serde_as]
1264#[derive(serde::Serialize, serde::Deserialize)]
1265#[serde(rename_all = "camelCase")]
1266#[derive(Clone, PartialEq, ::prost::Message)]
1267pub struct StreamContinuationTokens {
1268 /// List of continuation tokens.
1269 #[prost(message, repeated, tag = "1")]
1270 pub tokens: ::prost::alloc::vec::Vec<StreamContinuationToken>,
1271}
1272/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
1273/// The information required to continue reading the data from a
1274/// `StreamPartition` from where a previous read left off.
1275#[serde_with::serde_as]
1276#[derive(serde::Serialize, serde::Deserialize)]
1277#[serde(rename_all = "camelCase")]
1278#[derive(Clone, PartialEq, ::prost::Message)]
1279pub struct StreamContinuationToken {
1280 /// The partition that this token applies to.
1281 #[prost(message, optional, tag = "1")]
1282 pub partition: ::core::option::Option<StreamPartition>,
1283 /// An encoded position in the stream to restart reading from.
1284 #[prost(string, tag = "2")]
1285 pub token: ::prost::alloc::string::String,
1286}
1287/// Protocol buffers format descriptor, as described by Messages ProtoSchema and
1288/// ProtoRows
1289#[serde_with::serde_as]
1290#[derive(serde::Serialize, serde::Deserialize)]
1291#[serde(rename_all = "camelCase")]
1292#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1293pub struct ProtoFormat {}
1294/// Describes a column in a Bigtable Query Language result set.
1295#[serde_with::serde_as]
1296#[derive(serde::Serialize, serde::Deserialize)]
1297#[serde(rename_all = "camelCase")]
1298#[derive(Clone, PartialEq, ::prost::Message)]
1299pub struct ColumnMetadata {
1300 /// The name of the column.
1301 #[prost(string, tag = "1")]
1302 pub name: ::prost::alloc::string::String,
1303 /// The type of the column.
1304 #[prost(message, optional, tag = "2")]
1305 pub r#type: ::core::option::Option<Type>,
1306}
1307/// ResultSet schema in proto format
1308#[serde_with::serde_as]
1309#[derive(serde::Serialize, serde::Deserialize)]
1310#[serde(rename_all = "camelCase")]
1311#[derive(Clone, PartialEq, ::prost::Message)]
1312pub struct ProtoSchema {
1313 /// The columns in the result set.
1314 #[prost(message, repeated, tag = "1")]
1315 pub columns: ::prost::alloc::vec::Vec<ColumnMetadata>,
1316}
1317/// Describes the structure of a Bigtable result set.
1318#[serde_with::serde_as]
1319#[derive(serde::Serialize, serde::Deserialize)]
1320#[serde(rename_all = "camelCase")]
1321#[derive(Clone, PartialEq, ::prost::Message)]
1322pub struct ResultSetMetadata {
1323 /// The schema of the ResultSet, contains ordered list of column names
1324 /// with types
1325 #[prost(oneof = "result_set_metadata::Schema", tags = "1")]
1326 pub schema: ::core::option::Option<result_set_metadata::Schema>,
1327}
1328/// Nested message and enum types in `ResultSetMetadata`.
1329pub mod result_set_metadata {
1330 /// The schema of the ResultSet, contains ordered list of column names
1331 /// with types
1332 #[serde_with::serde_as]
1333 #[derive(serde::Serialize, serde::Deserialize)]
1334 #[serde(rename_all = "camelCase")]
1335 #[derive(Clone, PartialEq, ::prost::Oneof)]
1336 pub enum Schema {
1337 /// Schema in proto format
1338 #[prost(message, tag = "1")]
1339 ProtoSchema(super::ProtoSchema),
1340 }
1341}
1342/// Rows represented in proto format.
1343///
1344/// This should be constructed by concatenating the `batch_data` from each
1345/// of the relevant `ProtoRowsBatch` messages and parsing the result as a
1346/// `ProtoRows` message.
1347#[serde_with::serde_as]
1348#[derive(serde::Serialize, serde::Deserialize)]
1349#[serde(rename_all = "camelCase")]
1350#[derive(Clone, PartialEq, ::prost::Message)]
1351pub struct ProtoRows {
1352 /// A proto rows message consists of a list of values. Every N complete values
1353 /// defines a row, where N is equal to the number of entries in the
1354 /// `metadata.proto_schema.columns` value received in the first response.
1355 #[prost(message, repeated, tag = "2")]
1356 pub values: ::prost::alloc::vec::Vec<Value>,
1357}
1358/// Batch of serialized ProtoRows.
1359#[serde_with::serde_as]
1360#[derive(serde::Serialize, serde::Deserialize)]
1361#[serde(rename_all = "camelCase")]
1362#[derive(Clone, PartialEq, ::prost::Message)]
1363pub struct ProtoRowsBatch {
1364 /// Merge partial results by concatenating these bytes, then parsing the
1365 /// overall value as a `ProtoRows` message.
1366 #[prost(bytes = "vec", tag = "1")]
1367 pub batch_data: ::prost::alloc::vec::Vec<u8>,
1368}
1369/// A partial result set from the streaming query API.
1370/// CBT client will buffer partial_rows from result_sets until it gets a
1371/// resumption_token.
1372#[serde_with::serde_as]
1373#[derive(serde::Serialize, serde::Deserialize)]
1374#[serde(rename_all = "camelCase")]
1375#[derive(Clone, PartialEq, ::prost::Message)]
1376pub struct PartialResultSet {
1377 /// An opaque token sent by the server to allow query resumption and signal
1378 /// the client to accumulate `partial_rows` since the last non-empty
1379 /// `resume_token`. On resumption, the resumed query will return the remaining
1380 /// rows for this query.
1381 ///
1382 /// If there is a batch in progress, a non-empty `resume_token`
1383 /// means that that the batch of `partial_rows` will be complete after merging
1384 /// the `partial_rows` from this response. The client must only yield
1385 /// completed batches to the application, and must ensure that any future
1386 /// retries send the latest token to avoid returning duplicate data.
1387 ///
1388 /// The server may set 'resume_token' without a 'partial_rows'. If there is a
1389 /// batch in progress the client should yield it.
1390 ///
1391 /// The server will also send a sentinel `resume_token` when last batch of
1392 /// `partial_rows` is sent. If the client retries the ExecuteQueryRequest with
1393 /// the sentinel `resume_token`, the server will emit it again without any
1394 /// `partial_rows`, then return OK.
1395 #[prost(bytes = "vec", tag = "5")]
1396 pub resume_token: ::prost::alloc::vec::Vec<u8>,
1397 /// Estimated size of a new batch. The server will always set this when
1398 /// returning the first `partial_rows` of a batch, and will not set it at any
1399 /// other time.
1400 ///
1401 /// The client can use this estimate to allocate an initial buffer for the
1402 /// batched results. This helps minimize the number of allocations required,
1403 /// though the buffer size may still need to be increased if the estimate is
1404 /// too low.
1405 #[prost(int32, tag = "4")]
1406 pub estimated_batch_size: i32,
1407 /// Partial Rows in one of the supported formats. It may require many
1408 /// PartialResultSets to stream a batch of rows that can decoded on the client.
1409 /// The client should buffer partial_rows until it gets a `resume_token`,
1410 /// at which point the batch is complete and can be decoded and yielded to the
1411 /// user. Each sub-message documents the appropriate way to combine results.
1412 #[prost(oneof = "partial_result_set::PartialRows", tags = "3")]
1413 pub partial_rows: ::core::option::Option<partial_result_set::PartialRows>,
1414}
1415/// Nested message and enum types in `PartialResultSet`.
1416pub mod partial_result_set {
1417 /// Partial Rows in one of the supported formats. It may require many
1418 /// PartialResultSets to stream a batch of rows that can decoded on the client.
1419 /// The client should buffer partial_rows until it gets a `resume_token`,
1420 /// at which point the batch is complete and can be decoded and yielded to the
1421 /// user. Each sub-message documents the appropriate way to combine results.
1422 #[serde_with::serde_as]
1423 #[derive(serde::Serialize, serde::Deserialize)]
1424 #[serde(rename_all = "camelCase")]
1425 #[derive(Clone, PartialEq, ::prost::Oneof)]
1426 pub enum PartialRows {
1427 /// Partial rows in serialized ProtoRows format.
1428 #[prost(message, tag = "3")]
1429 ProtoRowsBatch(super::ProtoRowsBatch),
1430 }
1431}
1432/// ReadIterationStats captures information about the iteration of rows or cells
1433/// over the course of a read, e.g. how many results were scanned in a read
1434/// operation versus the results returned.
1435#[serde_with::serde_as]
1436#[derive(serde::Serialize, serde::Deserialize)]
1437#[serde(rename_all = "camelCase")]
1438#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1439pub struct ReadIterationStats {
1440 /// The rows seen (scanned) as part of the request. This includes the count of
1441 /// rows returned, as captured below.
1442 #[prost(int64, tag = "1")]
1443 pub rows_seen_count: i64,
1444 /// The rows returned as part of the request.
1445 #[prost(int64, tag = "2")]
1446 pub rows_returned_count: i64,
1447 /// The cells seen (scanned) as part of the request. This includes the count of
1448 /// cells returned, as captured below.
1449 #[prost(int64, tag = "3")]
1450 pub cells_seen_count: i64,
1451 /// The cells returned as part of the request.
1452 #[prost(int64, tag = "4")]
1453 pub cells_returned_count: i64,
1454}
1455/// RequestLatencyStats provides a measurement of the latency of the request as
1456/// it interacts with different systems over its lifetime, e.g. how long the
1457/// request took to execute within a frontend server.
1458#[serde_with::serde_as]
1459#[derive(serde::Serialize, serde::Deserialize)]
1460#[serde(rename_all = "camelCase")]
1461#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1462pub struct RequestLatencyStats {
1463 /// The latency measured by the frontend server handling this request, from
1464 /// when the request was received, to when this value is sent back in the
1465 /// response. For more context on the component that is measuring this latency,
1466 /// see: <https://cloud.google.com/bigtable/docs/overview>
1467 ///
1468 /// Note: This value may be slightly shorter than the value reported into
1469 /// aggregate latency metrics in Monitoring for this request
1470 /// (<https://cloud.google.com/bigtable/docs/monitoring-instance>) as this value
1471 /// needs to be sent in the response before the latency measurement including
1472 /// that transmission is finalized.
1473 ///
1474 /// Note: This value includes the end-to-end latency of contacting nodes in
1475 /// the targeted cluster, e.g. measuring from when the first byte arrives at
1476 /// the frontend server, to when this value is sent back as the last value in
1477 /// the response, including any latency incurred by contacting nodes, waiting
1478 /// for results from nodes, and finally sending results from nodes back to the
1479 /// caller.
1480 #[prost(message, optional, tag = "1")]
1481 pub frontend_server_latency: ::core::option::Option<::prost_wkt_types::Duration>,
1482}
1483/// FullReadStatsView captures all known information about a read.
1484#[serde_with::serde_as]
1485#[derive(serde::Serialize, serde::Deserialize)]
1486#[serde(rename_all = "camelCase")]
1487#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1488pub struct FullReadStatsView {
1489 /// Iteration stats describe how efficient the read is, e.g. comparing
1490 /// rows seen vs. rows returned or cells seen vs cells returned can provide an
1491 /// indication of read efficiency (the higher the ratio of seen to retuned the
1492 /// better).
1493 #[prost(message, optional, tag = "1")]
1494 pub read_iteration_stats: ::core::option::Option<ReadIterationStats>,
1495 /// Request latency stats describe the time taken to complete a request, from
1496 /// the server side.
1497 #[prost(message, optional, tag = "2")]
1498 pub request_latency_stats: ::core::option::Option<RequestLatencyStats>,
1499}
1500/// RequestStats is the container for additional information pertaining to a
1501/// single request, helpful for evaluating the performance of the sent request.
1502/// Currently, there are the following supported methods:
1503///
1504/// * google.bigtable.v2.ReadRows
1505#[serde_with::serde_as]
1506#[derive(serde::Serialize, serde::Deserialize)]
1507#[serde(rename_all = "camelCase")]
1508#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1509pub struct RequestStats {
1510 /// Information pertaining to each request type received. The type is chosen
1511 /// based on the requested view.
1512 ///
1513 /// See the messages above for additional context.
1514 #[prost(oneof = "request_stats::StatsView", tags = "1")]
1515 pub stats_view: ::core::option::Option<request_stats::StatsView>,
1516}
1517/// Nested message and enum types in `RequestStats`.
1518pub mod request_stats {
1519 /// Information pertaining to each request type received. The type is chosen
1520 /// based on the requested view.
1521 ///
1522 /// See the messages above for additional context.
1523 #[serde_with::serde_as]
1524 #[derive(serde::Serialize, serde::Deserialize)]
1525 #[serde(rename_all = "camelCase")]
1526 #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1527 pub enum StatsView {
1528 /// Available with the ReadRowsRequest.RequestStatsView.REQUEST_STATS_FULL
1529 /// view, see package google.bigtable.v2.
1530 #[prost(message, tag = "1")]
1531 FullReadStatsView(super::FullReadStatsView),
1532 }
1533}
1534/// Request message for Bigtable.ReadRows.
1535#[serde_with::serde_as]
1536#[derive(serde::Serialize, serde::Deserialize)]
1537#[serde(rename_all = "camelCase")]
1538#[derive(Clone, PartialEq, ::prost::Message)]
1539pub struct ReadRowsRequest {
1540 /// Optional. The unique name of the table from which to read.
1541 ///
1542 /// Values are of the form
1543 /// `projects/<project>/instances/<instance>/tables/<table>`.
1544 #[prost(string, tag = "1")]
1545 pub table_name: ::prost::alloc::string::String,
1546 /// Optional. The unique name of the AuthorizedView from which to read.
1547 ///
1548 /// Values are of the form
1549 /// `projects/<project>/instances/<instance>/tables/<table>/authorizedViews/<authorized_view>`.
1550 #[prost(string, tag = "9")]
1551 pub authorized_view_name: ::prost::alloc::string::String,
1552 /// This value specifies routing for replication. If not specified, the
1553 /// "default" application profile will be used.
1554 #[prost(string, tag = "5")]
1555 pub app_profile_id: ::prost::alloc::string::String,
1556 /// The row keys and/or ranges to read sequentially. If not specified, reads
1557 /// from all rows.
1558 #[prost(message, optional, tag = "2")]
1559 pub rows: ::core::option::Option<RowSet>,
1560 /// The filter to apply to the contents of the specified row(s). If unset,
1561 /// reads the entirety of each row.
1562 #[prost(message, optional, tag = "3")]
1563 pub filter: ::core::option::Option<RowFilter>,
1564 /// The read will stop after committing to N rows' worth of results. The
1565 /// default (zero) is to return all results.
1566 #[prost(int64, tag = "4")]
1567 pub rows_limit: i64,
1568 /// The view into RequestStats, as described above.
1569 #[prost(enumeration = "read_rows_request::RequestStatsView", tag = "6")]
1570 pub request_stats_view: i32,
1571 /// Experimental API - Please note that this API is currently experimental
1572 /// and can change in the future.
1573 ///
1574 /// Return rows in lexiographical descending order of the row keys. The row
1575 /// contents will not be affected by this flag.
1576 ///
1577 /// Example result set:
1578 ///
1579 /// ```text
1580 /// [
1581 /// {key: "k2", "f:col1": "v1", "f:col2": "v1"},
1582 /// {key: "k1", "f:col1": "v2", "f:col2": "v2"}
1583 /// ]
1584 /// ```
1585 #[prost(bool, tag = "7")]
1586 pub reversed: bool,
1587}
1588/// Nested message and enum types in `ReadRowsRequest`.
1589pub mod read_rows_request {
1590 /// The desired view into RequestStats that should be returned in the response.
1591 ///
1592 /// See also: RequestStats message.
1593 #[serde_with::serde_as]
1594 #[derive(serde::Serialize, serde::Deserialize)]
1595 #[serde(rename_all = "camelCase")]
1596 #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1597 #[repr(i32)]
1598 pub enum RequestStatsView {
1599 /// The default / unset value. The API will default to the NONE option below.
1600 Unspecified = 0,
1601 /// Do not include any RequestStats in the response. This will leave the
1602 /// RequestStats embedded message unset in the response.
1603 RequestStatsNone = 1,
1604 /// Include the full set of available RequestStats in the response,
1605 /// applicable to this read.
1606 RequestStatsFull = 2,
1607 }
1608 impl RequestStatsView {
1609 /// String value of the enum field names used in the ProtoBuf definition.
1610 ///
1611 /// The values are not transformed in any way and thus are considered stable
1612 /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1613 pub fn as_str_name(&self) -> &'static str {
1614 match self {
1615 Self::Unspecified => "REQUEST_STATS_VIEW_UNSPECIFIED",
1616 Self::RequestStatsNone => "REQUEST_STATS_NONE",
1617 Self::RequestStatsFull => "REQUEST_STATS_FULL",
1618 }
1619 }
1620 /// Creates an enum from field names used in the ProtoBuf definition.
1621 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1622 match value {
1623 "REQUEST_STATS_VIEW_UNSPECIFIED" => Some(Self::Unspecified),
1624 "REQUEST_STATS_NONE" => Some(Self::RequestStatsNone),
1625 "REQUEST_STATS_FULL" => Some(Self::RequestStatsFull),
1626 _ => None,
1627 }
1628 }
1629 }
1630}
1631/// Response message for Bigtable.ReadRows.
1632#[serde_with::serde_as]
1633#[derive(serde::Serialize, serde::Deserialize)]
1634#[serde(rename_all = "camelCase")]
1635#[derive(Clone, PartialEq, ::prost::Message)]
1636pub struct ReadRowsResponse {
1637 /// A collection of a row's contents as part of the read request.
1638 #[prost(message, repeated, tag = "1")]
1639 pub chunks: ::prost::alloc::vec::Vec<read_rows_response::CellChunk>,
1640 /// Optionally the server might return the row key of the last row it
1641 /// has scanned. The client can use this to construct a more
1642 /// efficient retry request if needed: any row keys or portions of
1643 /// ranges less than this row key can be dropped from the request.
1644 /// This is primarily useful for cases where the server has read a
1645 /// lot of data that was filtered out since the last committed row
1646 /// key, allowing the client to skip that work on a retry.
1647 #[prost(bytes = "vec", tag = "2")]
1648 pub last_scanned_row_key: ::prost::alloc::vec::Vec<u8>,
1649 /// If requested, provide enhanced query performance statistics. The semantics
1650 /// dictate:
1651 ///
1652 /// * request_stats is empty on every (streamed) response, except
1653 /// * request_stats has non-empty information after all chunks have been
1654 /// streamed, where the ReadRowsResponse message only contains
1655 /// request_stats.
1656 /// * For example, if a read request would have returned an empty
1657 /// response instead a single ReadRowsResponse is streamed with empty
1658 /// chunks and request_stats filled.
1659 ///
1660 /// Visually, response messages will stream as follows:
1661 /// ... -> {chunks: \[...\]} -> {chunks: \[\], request_stats: {...}}
1662 /// \_*********************/ \_*********************\_\_\_\_\_\_\_\_\_\_/
1663 /// Primary response Trailer of RequestStats info
1664 ///
1665 /// Or if the read did not return any values:
1666 /// {chunks: \[\], request_stats: {...}}
1667 /// \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_/
1668 /// Trailer of RequestStats info
1669 #[prost(message, optional, tag = "3")]
1670 pub request_stats: ::core::option::Option<RequestStats>,
1671}
1672/// Nested message and enum types in `ReadRowsResponse`.
1673pub mod read_rows_response {
1674 /// Specifies a piece of a row's contents returned as part of the read
1675 /// response stream.
1676 #[serde_with::serde_as]
1677 #[derive(serde::Serialize, serde::Deserialize)]
1678 #[serde(rename_all = "camelCase")]
1679 #[derive(Clone, PartialEq, ::prost::Message)]
1680 pub struct CellChunk {
1681 /// The row key for this chunk of data. If the row key is empty,
1682 /// this CellChunk is a continuation of the same row as the previous
1683 /// CellChunk in the response stream, even if that CellChunk was in a
1684 /// previous ReadRowsResponse message.
1685 #[prost(bytes = "vec", tag = "1")]
1686 #[serde_as(as = "serde_with::base64::Base64")]
1687 #[serde(default)]
1688 pub row_key: ::prost::alloc::vec::Vec<u8>,
1689 /// The column family name for this chunk of data. If this message
1690 /// is not present this CellChunk is a continuation of the same column
1691 /// family as the previous CellChunk. The empty string can occur as a
1692 /// column family name in a response so clients must check
1693 /// explicitly for the presence of this message, not just for
1694 /// `family_name.value` being non-empty.
1695 #[prost(message, optional, tag = "2")]
1696 pub family_name: ::core::option::Option<::prost::alloc::string::String>,
1697 /// The column qualifier for this chunk of data. If this message
1698 /// is not present, this CellChunk is a continuation of the same column
1699 /// as the previous CellChunk. Column qualifiers may be empty so
1700 /// clients must check for the presence of this message, not just
1701 /// for `qualifier.value` being non-empty.
1702 #[prost(message, optional, tag = "3")]
1703 #[serde_as(as = "Option<serde_with::base64::Base64>")]
1704 #[serde(default)]
1705 pub qualifier: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1706 /// The cell's stored timestamp, which also uniquely identifies it
1707 /// within its column. Values are always expressed in
1708 /// microseconds, but individual tables may set a coarser
1709 /// granularity to further restrict the allowed values. For
1710 /// example, a table which specifies millisecond granularity will
1711 /// only allow values of `timestamp_micros` which are multiples of
1712 /// 1000. Timestamps are only set in the first CellChunk per cell
1713 /// (for cells split into multiple chunks).
1714 #[prost(int64, tag = "4")]
1715 #[serde(default)]
1716 #[serde_as(as = "serde_with::DisplayFromStr")]
1717 pub timestamp_micros: i64,
1718 /// Labels applied to the cell by a
1719 /// \[RowFilter\]\[google.bigtable.v2.RowFilter\]. Labels are only set
1720 /// on the first CellChunk per cell.
1721 #[prost(string, repeated, tag = "5")]
1722 #[serde(default)]
1723 pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1724 /// The value stored in the cell. Cell values can be split across
1725 /// multiple CellChunks. In that case only the value field will be
1726 /// set in CellChunks after the first: the timestamp and labels
1727 /// will only be present in the first CellChunk, even if the first
1728 /// CellChunk came in a previous ReadRowsResponse.
1729 #[prost(bytes = "vec", tag = "6")]
1730 #[serde_as(as = "serde_with::base64::Base64")]
1731 #[serde(default)]
1732 pub value: ::prost::alloc::vec::Vec<u8>,
1733 /// If this CellChunk is part of a chunked cell value and this is
1734 /// not the final chunk of that cell, value_size will be set to the
1735 /// total length of the cell value. The client can use this size
1736 /// to pre-allocate memory to hold the full cell value.
1737 #[prost(int32, tag = "7")]
1738 #[serde(default)]
1739 pub value_size: i32,
1740 /// Signals to the client concerning previous CellChunks received.
1741 #[prost(oneof = "cell_chunk::RowStatus", tags = "8, 9")]
1742 pub row_status: ::core::option::Option<cell_chunk::RowStatus>,
1743 }
1744 /// Nested message and enum types in `CellChunk`.
1745 pub mod cell_chunk {
1746 /// Signals to the client concerning previous CellChunks received.
1747 #[serde_with::serde_as]
1748 #[derive(serde::Serialize, serde::Deserialize)]
1749 #[serde(rename_all = "camelCase")]
1750 #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
1751 pub enum RowStatus {
1752 /// Indicates that the client should drop all previous chunks for
1753 /// `row_key`, as it will be re-read from the beginning.
1754 #[prost(bool, tag = "8")]
1755 ResetRow(bool),
1756 /// Indicates that the client can safely process all previous chunks for
1757 /// `row_key`, as its data has been fully read.
1758 #[prost(bool, tag = "9")]
1759 CommitRow(bool),
1760 }
1761 }
1762}
1763/// Request message for Bigtable.SampleRowKeys.
1764#[serde_with::serde_as]
1765#[derive(serde::Serialize, serde::Deserialize)]
1766#[serde(rename_all = "camelCase")]
1767#[derive(Clone, PartialEq, ::prost::Message)]
1768pub struct SampleRowKeysRequest {
1769 /// Optional. The unique name of the table from which to sample row keys.
1770 ///
1771 /// Values are of the form
1772 /// `projects/<project>/instances/<instance>/tables/<table>`.
1773 #[prost(string, tag = "1")]
1774 pub table_name: ::prost::alloc::string::String,
1775 /// Optional. The unique name of the AuthorizedView from which to sample row
1776 /// keys.
1777 ///
1778 /// Values are of the form
1779 /// `projects/<project>/instances/<instance>/tables/<table>/authorizedViews/<authorized_view>`.
1780 #[prost(string, tag = "4")]
1781 pub authorized_view_name: ::prost::alloc::string::String,
1782 /// This value specifies routing for replication. If not specified, the
1783 /// "default" application profile will be used.
1784 #[prost(string, tag = "2")]
1785 pub app_profile_id: ::prost::alloc::string::String,
1786}
1787/// Response message for Bigtable.SampleRowKeys.
1788#[serde_with::serde_as]
1789#[derive(serde::Serialize, serde::Deserialize)]
1790#[serde(rename_all = "camelCase")]
1791#[derive(Clone, PartialEq, ::prost::Message)]
1792pub struct SampleRowKeysResponse {
1793 /// Sorted streamed sequence of sample row keys in the table. The table might
1794 /// have contents before the first row key in the list and after the last one,
1795 /// but a key containing the empty string indicates "end of table" and will be
1796 /// the last response given, if present.
1797 /// Note that row keys in this list may not have ever been written to or read
1798 /// from, and users should therefore not make any assumptions about the row key
1799 /// structure that are specific to their use case.
1800 #[prost(bytes = "vec", tag = "1")]
1801 pub row_key: ::prost::alloc::vec::Vec<u8>,
1802 /// Approximate total storage space used by all rows in the table which precede
1803 /// `row_key`. Buffering the contents of all rows between two subsequent
1804 /// samples would require space roughly equal to the difference in their
1805 /// `offset_bytes` fields.
1806 #[prost(int64, tag = "2")]
1807 pub offset_bytes: i64,
1808}
1809/// Request message for Bigtable.MutateRow.
1810#[serde_with::serde_as]
1811#[derive(serde::Serialize, serde::Deserialize)]
1812#[serde(rename_all = "camelCase")]
1813#[derive(Clone, PartialEq, ::prost::Message)]
1814pub struct MutateRowRequest {
1815 /// Optional. The unique name of the table to which the mutation should be
1816 /// applied.
1817 ///
1818 /// Values are of the form
1819 /// `projects/<project>/instances/<instance>/tables/<table>`.
1820 #[prost(string, tag = "1")]
1821 pub table_name: ::prost::alloc::string::String,
1822 /// Optional. The unique name of the AuthorizedView to which the mutation
1823 /// should be applied.
1824 ///
1825 /// Values are of the form
1826 /// `projects/<project>/instances/<instance>/tables/<table>/authorizedViews/<authorized_view>`.
1827 #[prost(string, tag = "6")]
1828 pub authorized_view_name: ::prost::alloc::string::String,
1829 /// This value specifies routing for replication. If not specified, the
1830 /// "default" application profile will be used.
1831 #[prost(string, tag = "4")]
1832 pub app_profile_id: ::prost::alloc::string::String,
1833 /// Required. The key of the row to which the mutation should be applied.
1834 #[prost(bytes = "vec", tag = "2")]
1835 pub row_key: ::prost::alloc::vec::Vec<u8>,
1836 /// Required. Changes to be atomically applied to the specified row. Entries
1837 /// are applied in order, meaning that earlier mutations can be masked by later
1838 /// ones. Must contain at least one entry and at most 100000.
1839 #[prost(message, repeated, tag = "3")]
1840 pub mutations: ::prost::alloc::vec::Vec<Mutation>,
1841}
1842/// Response message for Bigtable.MutateRow.
1843#[serde_with::serde_as]
1844#[derive(serde::Serialize, serde::Deserialize)]
1845#[serde(rename_all = "camelCase")]
1846#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1847pub struct MutateRowResponse {}
1848/// Request message for BigtableService.MutateRows.
1849#[serde_with::serde_as]
1850#[derive(serde::Serialize, serde::Deserialize)]
1851#[serde(rename_all = "camelCase")]
1852#[derive(Clone, PartialEq, ::prost::Message)]
1853pub struct MutateRowsRequest {
1854 /// Optional. The unique name of the table to which the mutations should be
1855 /// applied.
1856 ///
1857 /// Values are of the form
1858 /// `projects/<project>/instances/<instance>/tables/<table>`.
1859 #[prost(string, tag = "1")]
1860 pub table_name: ::prost::alloc::string::String,
1861 /// Optional. The unique name of the AuthorizedView to which the mutations
1862 /// should be applied.
1863 ///
1864 /// Values are of the form
1865 /// `projects/<project>/instances/<instance>/tables/<table>/authorizedViews/<authorized_view>`.
1866 #[prost(string, tag = "5")]
1867 pub authorized_view_name: ::prost::alloc::string::String,
1868 /// This value specifies routing for replication. If not specified, the
1869 /// "default" application profile will be used.
1870 #[prost(string, tag = "3")]
1871 pub app_profile_id: ::prost::alloc::string::String,
1872 /// Required. The row keys and corresponding mutations to be applied in bulk.
1873 /// Each entry is applied as an atomic mutation, but the entries may be
1874 /// applied in arbitrary order (even between entries for the same row).
1875 /// At least one entry must be specified, and in total the entries can
1876 /// contain at most 100000 mutations.
1877 #[prost(message, repeated, tag = "2")]
1878 pub entries: ::prost::alloc::vec::Vec<mutate_rows_request::Entry>,
1879}
1880/// Nested message and enum types in `MutateRowsRequest`.
1881pub mod mutate_rows_request {
1882 /// A mutation for a given row.
1883 #[serde_with::serde_as]
1884 #[derive(serde::Serialize, serde::Deserialize)]
1885 #[serde(rename_all = "camelCase")]
1886 #[derive(Clone, PartialEq, ::prost::Message)]
1887 pub struct Entry {
1888 /// The key of the row to which the `mutations` should be applied.
1889 #[prost(bytes = "vec", tag = "1")]
1890 pub row_key: ::prost::alloc::vec::Vec<u8>,
1891 /// Required. Changes to be atomically applied to the specified row.
1892 /// Mutations are applied in order, meaning that earlier mutations can be
1893 /// masked by later ones. You must specify at least one mutation.
1894 #[prost(message, repeated, tag = "2")]
1895 pub mutations: ::prost::alloc::vec::Vec<super::Mutation>,
1896 }
1897}
1898/// Response message for BigtableService.MutateRows.
1899#[serde_with::serde_as]
1900#[derive(serde::Serialize, serde::Deserialize)]
1901#[serde(rename_all = "camelCase")]
1902#[derive(Clone, PartialEq, ::prost::Message)]
1903pub struct MutateRowsResponse {
1904 /// One or more results for Entries from the batch request.
1905 #[prost(message, repeated, tag = "1")]
1906 pub entries: ::prost::alloc::vec::Vec<mutate_rows_response::Entry>,
1907 /// Information about how client should limit the rate (QPS). Primirily used by
1908 /// supported official Cloud Bigtable clients. If unset, the rate limit info is
1909 /// not provided by the server.
1910 #[prost(message, optional, tag = "3")]
1911 pub rate_limit_info: ::core::option::Option<RateLimitInfo>,
1912}
1913/// Nested message and enum types in `MutateRowsResponse`.
1914pub mod mutate_rows_response {
1915 /// The result of applying a passed mutation in the original request.
1916 #[serde_with::serde_as]
1917 #[derive(serde::Serialize, serde::Deserialize)]
1918 #[serde(rename_all = "camelCase")]
1919 #[derive(Clone, PartialEq, ::prost::Message)]
1920 pub struct Entry {
1921 /// The index into the original request's `entries` list of the Entry
1922 /// for which a result is being reported.
1923 #[prost(int64, tag = "1")]
1924 pub index: i64,
1925 /// The result of the request Entry identified by `index`.
1926 /// Depending on how requests are batched during execution, it is possible
1927 /// for one Entry to fail due to an error with another Entry. In the event
1928 /// that this occurs, the same error will be reported for both entries.
1929 #[prost(message, optional, tag = "2")]
1930 pub status: ::core::option::Option<super::super::super::rpc::Status>,
1931 }
1932}
1933/// Information about how client should adjust the load to Bigtable.
1934#[serde_with::serde_as]
1935#[derive(serde::Serialize, serde::Deserialize)]
1936#[serde(rename_all = "camelCase")]
1937#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1938pub struct RateLimitInfo {
1939 /// Time that clients should wait before adjusting the target rate again.
1940 /// If clients adjust rate too frequently, the impact of the previous
1941 /// adjustment may not have been taken into account and may
1942 /// over-throttle or under-throttle. If clients adjust rate too slowly, they
1943 /// will not be responsive to load changes on server side, and may
1944 /// over-throttle or under-throttle.
1945 #[prost(message, optional, tag = "1")]
1946 pub period: ::core::option::Option<::prost_wkt_types::Duration>,
1947 /// If it has been at least one `period` since the last load adjustment, the
1948 /// client should multiply the current load by this value to get the new target
1949 /// load. For example, if the current load is 100 and `factor` is 0.8, the new
1950 /// target load should be 80. After adjusting, the client should ignore
1951 /// `factor` until another `period` has passed.
1952 ///
1953 /// The client can measure its load using any unit that's comparable over time
1954 /// For example, QPS can be used as long as each request involves a similar
1955 /// amount of work.
1956 #[prost(double, tag = "2")]
1957 pub factor: f64,
1958}
1959/// Request message for Bigtable.CheckAndMutateRow.
1960#[serde_with::serde_as]
1961#[derive(serde::Serialize, serde::Deserialize)]
1962#[serde(rename_all = "camelCase")]
1963#[derive(Clone, PartialEq, ::prost::Message)]
1964pub struct CheckAndMutateRowRequest {
1965 /// Optional. The unique name of the table to which the conditional mutation
1966 /// should be applied.
1967 ///
1968 /// Values are of the form
1969 /// `projects/<project>/instances/<instance>/tables/<table>`.
1970 #[prost(string, tag = "1")]
1971 pub table_name: ::prost::alloc::string::String,
1972 /// Optional. The unique name of the AuthorizedView to which the conditional
1973 /// mutation should be applied.
1974 ///
1975 /// Values are of the form
1976 /// `projects/<project>/instances/<instance>/tables/<table>/authorizedViews/<authorized_view>`.
1977 #[prost(string, tag = "9")]
1978 pub authorized_view_name: ::prost::alloc::string::String,
1979 /// This value specifies routing for replication. If not specified, the
1980 /// "default" application profile will be used.
1981 #[prost(string, tag = "7")]
1982 pub app_profile_id: ::prost::alloc::string::String,
1983 /// Required. The key of the row to which the conditional mutation should be
1984 /// applied.
1985 #[prost(bytes = "vec", tag = "2")]
1986 pub row_key: ::prost::alloc::vec::Vec<u8>,
1987 /// The filter to be applied to the contents of the specified row. Depending
1988 /// on whether or not any results are yielded, either `true_mutations` or
1989 /// `false_mutations` will be executed. If unset, checks that the row contains
1990 /// any values at all.
1991 #[prost(message, optional, tag = "6")]
1992 pub predicate_filter: ::core::option::Option<RowFilter>,
1993 /// Changes to be atomically applied to the specified row if `predicate_filter`
1994 /// yields at least one cell when applied to `row_key`. Entries are applied in
1995 /// order, meaning that earlier mutations can be masked by later ones.
1996 /// Must contain at least one entry if `false_mutations` is empty, and at most
1997 /// 100000.
1998 #[prost(message, repeated, tag = "4")]
1999 pub true_mutations: ::prost::alloc::vec::Vec<Mutation>,
2000 /// Changes to be atomically applied to the specified row if `predicate_filter`
2001 /// does not yield any cells when applied to `row_key`. Entries are applied in
2002 /// order, meaning that earlier mutations can be masked by later ones.
2003 /// Must contain at least one entry if `true_mutations` is empty, and at most
2004 /// 100000.
2005 #[prost(message, repeated, tag = "5")]
2006 pub false_mutations: ::prost::alloc::vec::Vec<Mutation>,
2007}
2008/// Response message for Bigtable.CheckAndMutateRow.
2009#[serde_with::serde_as]
2010#[derive(serde::Serialize, serde::Deserialize)]
2011#[serde(rename_all = "camelCase")]
2012#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2013pub struct CheckAndMutateRowResponse {
2014 /// Whether or not the request's `predicate_filter` yielded any results for
2015 /// the specified row.
2016 #[prost(bool, tag = "1")]
2017 pub predicate_matched: bool,
2018}
2019/// Request message for client connection keep-alive and warming.
2020#[serde_with::serde_as]
2021#[derive(serde::Serialize, serde::Deserialize)]
2022#[serde(rename_all = "camelCase")]
2023#[derive(Clone, PartialEq, ::prost::Message)]
2024pub struct PingAndWarmRequest {
2025 /// Required. The unique name of the instance to check permissions for as well
2026 /// as respond. Values are of the form
2027 /// `projects/<project>/instances/<instance>`.
2028 #[prost(string, tag = "1")]
2029 pub name: ::prost::alloc::string::String,
2030 /// This value specifies routing for replication. If not specified, the
2031 /// "default" application profile will be used.
2032 #[prost(string, tag = "2")]
2033 pub app_profile_id: ::prost::alloc::string::String,
2034}
2035/// Response message for Bigtable.PingAndWarm connection keepalive and warming.
2036#[serde_with::serde_as]
2037#[derive(serde::Serialize, serde::Deserialize)]
2038#[serde(rename_all = "camelCase")]
2039#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2040pub struct PingAndWarmResponse {}
2041/// Request message for Bigtable.ReadModifyWriteRow.
2042#[serde_with::serde_as]
2043#[derive(serde::Serialize, serde::Deserialize)]
2044#[serde(rename_all = "camelCase")]
2045#[derive(Clone, PartialEq, ::prost::Message)]
2046pub struct ReadModifyWriteRowRequest {
2047 /// Optional. The unique name of the table to which the read/modify/write rules
2048 /// should be applied.
2049 ///
2050 /// Values are of the form
2051 /// `projects/<project>/instances/<instance>/tables/<table>`.
2052 #[prost(string, tag = "1")]
2053 pub table_name: ::prost::alloc::string::String,
2054 /// Optional. The unique name of the AuthorizedView to which the
2055 /// read/modify/write rules should be applied.
2056 ///
2057 /// Values are of the form
2058 /// `projects/<project>/instances/<instance>/tables/<table>/authorizedViews/<authorized_view>`.
2059 #[prost(string, tag = "6")]
2060 pub authorized_view_name: ::prost::alloc::string::String,
2061 /// This value specifies routing for replication. If not specified, the
2062 /// "default" application profile will be used.
2063 #[prost(string, tag = "4")]
2064 pub app_profile_id: ::prost::alloc::string::String,
2065 /// Required. The key of the row to which the read/modify/write rules should be
2066 /// applied.
2067 #[prost(bytes = "vec", tag = "2")]
2068 pub row_key: ::prost::alloc::vec::Vec<u8>,
2069 /// Required. Rules specifying how the specified row's contents are to be
2070 /// transformed into writes. Entries are applied in order, meaning that earlier
2071 /// rules will affect the results of later ones.
2072 #[prost(message, repeated, tag = "3")]
2073 pub rules: ::prost::alloc::vec::Vec<ReadModifyWriteRule>,
2074}
2075/// Response message for Bigtable.ReadModifyWriteRow.
2076#[serde_with::serde_as]
2077#[derive(serde::Serialize, serde::Deserialize)]
2078#[serde(rename_all = "camelCase")]
2079#[derive(Clone, PartialEq, ::prost::Message)]
2080pub struct ReadModifyWriteRowResponse {
2081 /// A Row containing the new contents of all cells modified by the request.
2082 #[prost(message, optional, tag = "1")]
2083 pub row: ::core::option::Option<Row>,
2084}
2085/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
2086/// Request message for Bigtable.GenerateInitialChangeStreamPartitions.
2087#[serde_with::serde_as]
2088#[derive(serde::Serialize, serde::Deserialize)]
2089#[serde(rename_all = "camelCase")]
2090#[derive(Clone, PartialEq, ::prost::Message)]
2091pub struct GenerateInitialChangeStreamPartitionsRequest {
2092 /// Required. The unique name of the table from which to get change stream
2093 /// partitions. Values are of the form
2094 /// `projects/<project>/instances/<instance>/tables/<table>`.
2095 /// Change streaming must be enabled on the table.
2096 #[prost(string, tag = "1")]
2097 pub table_name: ::prost::alloc::string::String,
2098 /// This value specifies routing for replication. If not specified, the
2099 /// "default" application profile will be used.
2100 /// Single cluster routing must be configured on the profile.
2101 #[prost(string, tag = "2")]
2102 pub app_profile_id: ::prost::alloc::string::String,
2103}
2104/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
2105/// Response message for Bigtable.GenerateInitialChangeStreamPartitions.
2106#[serde_with::serde_as]
2107#[derive(serde::Serialize, serde::Deserialize)]
2108#[serde(rename_all = "camelCase")]
2109#[derive(Clone, PartialEq, ::prost::Message)]
2110pub struct GenerateInitialChangeStreamPartitionsResponse {
2111 /// A partition of the change stream.
2112 #[prost(message, optional, tag = "1")]
2113 pub partition: ::core::option::Option<StreamPartition>,
2114}
2115/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
2116/// Request message for Bigtable.ReadChangeStream.
2117#[serde_with::serde_as]
2118#[derive(serde::Serialize, serde::Deserialize)]
2119#[serde(rename_all = "camelCase")]
2120#[derive(Clone, PartialEq, ::prost::Message)]
2121pub struct ReadChangeStreamRequest {
2122 /// Required. The unique name of the table from which to read a change stream.
2123 /// Values are of the form
2124 /// `projects/<project>/instances/<instance>/tables/<table>`.
2125 /// Change streaming must be enabled on the table.
2126 #[prost(string, tag = "1")]
2127 pub table_name: ::prost::alloc::string::String,
2128 /// This value specifies routing for replication. If not specified, the
2129 /// "default" application profile will be used.
2130 /// Single cluster routing must be configured on the profile.
2131 #[prost(string, tag = "2")]
2132 pub app_profile_id: ::prost::alloc::string::String,
2133 /// The partition to read changes from.
2134 #[prost(message, optional, tag = "3")]
2135 pub partition: ::core::option::Option<StreamPartition>,
2136 /// If specified, OK will be returned when the stream advances beyond
2137 /// this time. Otherwise, changes will be continuously delivered on the stream.
2138 /// This value is inclusive and will be truncated to microsecond granularity.
2139 #[prost(message, optional, tag = "5")]
2140 pub end_time: ::core::option::Option<::prost_wkt_types::Timestamp>,
2141 /// If specified, the duration between `Heartbeat` messages on the stream.
2142 /// Otherwise, defaults to 5 seconds.
2143 #[prost(message, optional, tag = "7")]
2144 pub heartbeat_duration: ::core::option::Option<::prost_wkt_types::Duration>,
2145 /// Options for describing where we want to start reading from the stream.
2146 #[prost(oneof = "read_change_stream_request::StartFrom", tags = "4, 6")]
2147 pub start_from: ::core::option::Option<read_change_stream_request::StartFrom>,
2148}
2149/// Nested message and enum types in `ReadChangeStreamRequest`.
2150pub mod read_change_stream_request {
2151 /// Options for describing where we want to start reading from the stream.
2152 #[serde_with::serde_as]
2153 #[derive(serde::Serialize, serde::Deserialize)]
2154 #[serde(rename_all = "camelCase")]
2155 #[derive(Clone, PartialEq, ::prost::Oneof)]
2156 pub enum StartFrom {
2157 /// Start reading the stream at the specified timestamp. This timestamp must
2158 /// be within the change stream retention period, less than or equal to the
2159 /// current time, and after change stream creation, whichever is greater.
2160 /// This value is inclusive and will be truncated to microsecond granularity.
2161 #[prost(message, tag = "4")]
2162 StartTime(::prost_wkt_types::Timestamp),
2163 /// Tokens that describe how to resume reading a stream where reading
2164 /// previously left off. If specified, changes will be read starting at the
2165 /// the position. Tokens are delivered on the stream as part of `Heartbeat`
2166 /// and `CloseStream` messages.
2167 ///
2168 /// If a single token is provided, the token’s partition must exactly match
2169 /// the request’s partition. If multiple tokens are provided, as in the case
2170 /// of a partition merge, the union of the token partitions must exactly
2171 /// cover the request’s partition. Otherwise, INVALID_ARGUMENT will be
2172 /// returned.
2173 #[prost(message, tag = "6")]
2174 ContinuationTokens(super::StreamContinuationTokens),
2175 }
2176}
2177/// NOTE: This API is intended to be used by Apache Beam BigtableIO.
2178/// Response message for Bigtable.ReadChangeStream.
2179#[serde_with::serde_as]
2180#[derive(serde::Serialize, serde::Deserialize)]
2181#[serde(rename_all = "camelCase")]
2182#[derive(Clone, PartialEq, ::prost::Message)]
2183pub struct ReadChangeStreamResponse {
2184 /// The data or control message on the stream.
2185 #[prost(oneof = "read_change_stream_response::StreamRecord", tags = "1, 2, 3")]
2186 pub stream_record: ::core::option::Option<read_change_stream_response::StreamRecord>,
2187}
2188/// Nested message and enum types in `ReadChangeStreamResponse`.
2189pub mod read_change_stream_response {
2190 /// A partial or complete mutation.
2191 #[serde_with::serde_as]
2192 #[derive(serde::Serialize, serde::Deserialize)]
2193 #[serde(rename_all = "camelCase")]
2194 #[derive(Clone, PartialEq, ::prost::Message)]
2195 pub struct MutationChunk {
2196 /// If set, then the mutation is a `SetCell` with a chunked value across
2197 /// multiple messages.
2198 #[prost(message, optional, tag = "1")]
2199 pub chunk_info: ::core::option::Option<mutation_chunk::ChunkInfo>,
2200 /// If this is a continuation of a chunked message (`chunked_value_offset` >
2201 /// 0), ignore all fields except the `SetCell`'s value and merge it with
2202 /// the previous message by concatenating the value fields.
2203 #[prost(message, optional, tag = "2")]
2204 pub mutation: ::core::option::Option<super::Mutation>,
2205 }
2206 /// Nested message and enum types in `MutationChunk`.
2207 pub mod mutation_chunk {
2208 /// Information about the chunking of this mutation.
2209 /// Only `SetCell` mutations can be chunked, and all chunks for a `SetCell`
2210 /// will be delivered contiguously with no other mutation types interleaved.
2211 #[serde_with::serde_as]
2212 #[derive(serde::Serialize, serde::Deserialize)]
2213 #[serde(rename_all = "camelCase")]
2214 #[derive(Clone, Copy, PartialEq, ::prost::Message)]
2215 pub struct ChunkInfo {
2216 /// The total value size of all the chunks that make up the `SetCell`.
2217 #[prost(int32, tag = "1")]
2218 pub chunked_value_size: i32,
2219 /// The byte offset of this chunk into the total value size of the
2220 /// mutation.
2221 #[prost(int32, tag = "2")]
2222 pub chunked_value_offset: i32,
2223 /// When true, this is the last chunk of a chunked `SetCell`.
2224 #[prost(bool, tag = "3")]
2225 pub last_chunk: bool,
2226 }
2227 }
2228 /// A message corresponding to one or more mutations to the partition
2229 /// being streamed. A single logical `DataChange` message may also be split
2230 /// across a sequence of multiple individual messages. Messages other than
2231 /// the first in a sequence will only have the `type` and `chunks` fields
2232 /// populated, with the final message in the sequence also containing `done`
2233 /// set to true.
2234 #[serde_with::serde_as]
2235 #[derive(serde::Serialize, serde::Deserialize)]
2236 #[serde(rename_all = "camelCase")]
2237 #[derive(Clone, PartialEq, ::prost::Message)]
2238 pub struct DataChange {
2239 /// The type of the mutation.
2240 #[prost(enumeration = "data_change::Type", tag = "1")]
2241 pub r#type: i32,
2242 /// The cluster where the mutation was applied.
2243 /// Not set when `type` is `GARBAGE_COLLECTION`.
2244 #[prost(string, tag = "2")]
2245 pub source_cluster_id: ::prost::alloc::string::String,
2246 /// The row key for all mutations that are part of this `DataChange`.
2247 /// If the `DataChange` is chunked across multiple messages, then this field
2248 /// will only be set for the first message.
2249 #[prost(bytes = "vec", tag = "3")]
2250 pub row_key: ::prost::alloc::vec::Vec<u8>,
2251 /// The timestamp at which the mutation was applied on the Bigtable server.
2252 #[prost(message, optional, tag = "4")]
2253 pub commit_timestamp: ::core::option::Option<::prost_wkt_types::Timestamp>,
2254 /// A value that lets stream consumers reconstruct Bigtable's
2255 /// conflict resolution semantics.
2256 /// <https://cloud.google.com/bigtable/docs/writes#conflict-resolution>
2257 /// In the event that the same row key, column family, column qualifier,
2258 /// timestamp are modified on different clusters at the same
2259 /// `commit_timestamp`, the mutation with the larger `tiebreaker` will be the
2260 /// one chosen for the eventually consistent state of the system.
2261 #[prost(int32, tag = "5")]
2262 pub tiebreaker: i32,
2263 /// The mutations associated with this change to the partition.
2264 /// May contain complete mutations or chunks of a multi-message chunked
2265 /// `DataChange` record.
2266 #[prost(message, repeated, tag = "6")]
2267 pub chunks: ::prost::alloc::vec::Vec<MutationChunk>,
2268 /// When true, indicates that the entire `DataChange` has been read
2269 /// and the client can safely process the message.
2270 #[prost(bool, tag = "8")]
2271 pub done: bool,
2272 /// An encoded position for this stream's partition to restart reading from.
2273 /// This token is for the StreamPartition from the request.
2274 #[prost(string, tag = "9")]
2275 pub token: ::prost::alloc::string::String,
2276 /// An estimate of the commit timestamp that is usually lower than or equal
2277 /// to any timestamp for a record that will be delivered in the future on the
2278 /// stream. It is possible that, under particular circumstances that a future
2279 /// record has a timestamp is is lower than a previously seen timestamp. For
2280 /// an example usage see
2281 /// <https://beam.apache.org/documentation/basics/#watermarks>
2282 #[prost(message, optional, tag = "10")]
2283 pub estimated_low_watermark: ::core::option::Option<::prost_wkt_types::Timestamp>,
2284 }
2285 /// Nested message and enum types in `DataChange`.
2286 pub mod data_change {
2287 /// The type of mutation.
2288 #[serde_with::serde_as]
2289 #[derive(serde::Serialize, serde::Deserialize)]
2290 #[serde(rename_all = "camelCase")]
2291 #[derive(
2292 Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration,
2293 )]
2294 #[repr(i32)]
2295 pub enum Type {
2296 /// The type is unspecified.
2297 Unspecified = 0,
2298 /// A user-initiated mutation.
2299 User = 1,
2300 /// A system-initiated mutation as part of garbage collection.
2301 /// <https://cloud.google.com/bigtable/docs/garbage-collection>
2302 GarbageCollection = 2,
2303 /// This is a continuation of a multi-message change.
2304 Continuation = 3,
2305 }
2306 impl Type {
2307 /// String value of the enum field names used in the ProtoBuf definition.
2308 ///
2309 /// The values are not transformed in any way and thus are considered stable
2310 /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2311 pub fn as_str_name(&self) -> &'static str {
2312 match self {
2313 Self::Unspecified => "TYPE_UNSPECIFIED",
2314 Self::User => "USER",
2315 Self::GarbageCollection => "GARBAGE_COLLECTION",
2316 Self::Continuation => "CONTINUATION",
2317 }
2318 }
2319 /// Creates an enum from field names used in the ProtoBuf definition.
2320 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2321 match value {
2322 "TYPE_UNSPECIFIED" => Some(Self::Unspecified),
2323 "USER" => Some(Self::User),
2324 "GARBAGE_COLLECTION" => Some(Self::GarbageCollection),
2325 "CONTINUATION" => Some(Self::Continuation),
2326 _ => None,
2327 }
2328 }
2329 }
2330 }
2331 /// A periodic message with information that can be used to checkpoint
2332 /// the state of a stream.
2333 #[serde_with::serde_as]
2334 #[derive(serde::Serialize, serde::Deserialize)]
2335 #[serde(rename_all = "camelCase")]
2336 #[derive(Clone, PartialEq, ::prost::Message)]
2337 pub struct Heartbeat {
2338 /// A token that can be provided to a subsequent `ReadChangeStream` call
2339 /// to pick up reading at the current stream position.
2340 #[prost(message, optional, tag = "1")]
2341 pub continuation_token: ::core::option::Option<super::StreamContinuationToken>,
2342 /// An estimate of the commit timestamp that is usually lower than or equal
2343 /// to any timestamp for a record that will be delivered in the future on the
2344 /// stream. It is possible that, under particular circumstances that a future
2345 /// record has a timestamp is is lower than a previously seen timestamp. For
2346 /// an example usage see
2347 /// <https://beam.apache.org/documentation/basics/#watermarks>
2348 #[prost(message, optional, tag = "2")]
2349 pub estimated_low_watermark: ::core::option::Option<::prost_wkt_types::Timestamp>,
2350 }
2351 /// A message indicating that the client should stop reading from the stream.
2352 /// If status is OK and `continuation_tokens` & `new_partitions` are empty, the
2353 /// stream has finished (for example if there was an `end_time` specified).
2354 /// If `continuation_tokens` & `new_partitions` are present, then a change in
2355 /// partitioning requires the client to open a new stream for each token to
2356 /// resume reading. Example:
2357 /// \[B, D) ends
2358 /// \|
2359 /// v
2360 /// new_partitions: \[A, C) \[C, E)
2361 /// continuation_tokens.partitions: \[B,C) \[C,D)
2362 /// ^---^ ^---^
2363 /// ^ ^
2364 /// \| |
2365 /// \| StreamContinuationToken 2
2366 /// \|
2367 /// StreamContinuationToken 1
2368 /// To read the new partition \[A,C), supply the continuation tokens whose
2369 /// ranges cover the new partition, for example ContinuationToken\[A,B) &
2370 /// ContinuationToken\[B,C).
2371 #[serde_with::serde_as]
2372 #[derive(serde::Serialize, serde::Deserialize)]
2373 #[serde(rename_all = "camelCase")]
2374 #[derive(Clone, PartialEq, ::prost::Message)]
2375 pub struct CloseStream {
2376 /// The status of the stream.
2377 #[prost(message, optional, tag = "1")]
2378 pub status: ::core::option::Option<super::super::super::rpc::Status>,
2379 /// If non-empty, contains the information needed to resume reading their
2380 /// associated partitions.
2381 #[prost(message, repeated, tag = "2")]
2382 pub continuation_tokens: ::prost::alloc::vec::Vec<super::StreamContinuationToken>,
2383 /// If non-empty, contains the new partitions to start reading from, which
2384 /// are related to but not necessarily identical to the partitions for the
2385 /// above `continuation_tokens`.
2386 #[prost(message, repeated, tag = "3")]
2387 pub new_partitions: ::prost::alloc::vec::Vec<super::StreamPartition>,
2388 }
2389 /// The data or control message on the stream.
2390 #[serde_with::serde_as]
2391 #[derive(serde::Serialize, serde::Deserialize)]
2392 #[serde(rename_all = "camelCase")]
2393 #[derive(Clone, PartialEq, ::prost::Oneof)]
2394 pub enum StreamRecord {
2395 /// A mutation to the partition.
2396 #[prost(message, tag = "1")]
2397 DataChange(DataChange),
2398 /// A periodic heartbeat message.
2399 #[prost(message, tag = "2")]
2400 Heartbeat(Heartbeat),
2401 /// An indication that the stream should be closed.
2402 #[prost(message, tag = "3")]
2403 CloseStream(CloseStream),
2404 }
2405}
2406/// Request message for Bigtable.ExecuteQuery
2407#[serde_with::serde_as]
2408#[derive(serde::Serialize, serde::Deserialize)]
2409#[serde(rename_all = "camelCase")]
2410#[derive(Clone, PartialEq, ::prost::Message)]
2411pub struct ExecuteQueryRequest {
2412 /// Required. The unique name of the instance against which the query should be
2413 /// executed.
2414 /// Values are of the form `projects/<project>/instances/<instance>`
2415 #[prost(string, tag = "1")]
2416 pub instance_name: ::prost::alloc::string::String,
2417 /// Optional. This value specifies routing for replication. If not specified,
2418 /// the `default` application profile will be used.
2419 #[prost(string, tag = "2")]
2420 pub app_profile_id: ::prost::alloc::string::String,
2421 /// Required. The query string.
2422 #[prost(string, tag = "3")]
2423 pub query: ::prost::alloc::string::String,
2424 /// Optional. If this request is resuming a previously interrupted query
2425 /// execution, `resume_token` should be copied from the last
2426 /// PartialResultSet yielded before the interruption. Doing this
2427 /// enables the query execution to resume where the last one left
2428 /// off.
2429 /// The rest of the request parameters must exactly match the
2430 /// request that yielded this token. Otherwise the request will fail.
2431 #[prost(bytes = "vec", tag = "8")]
2432 pub resume_token: ::prost::alloc::vec::Vec<u8>,
2433 /// Required. params contains string type keys and Bigtable type values that
2434 /// bind to placeholders in the query string. In query string, a parameter
2435 /// placeholder consists of the
2436 /// `@` character followed by the parameter name (for example, `@firstName`) in
2437 /// the query string.
2438 ///
2439 /// For example, if
2440 /// `params\["firstName"\] = bytes_value: "foo" type {bytes_type {}}`
2441 /// then `@firstName` will be replaced with googlesql bytes value "foo" in the
2442 /// query string during query evaluation.
2443 ///
2444 /// In case of Value.kind is not set, it will be set to corresponding null
2445 /// value in googlesql.
2446 /// `params\["firstName"\] = type {string_type {}}`
2447 /// then `@firstName` will be replaced with googlesql null string.
2448 ///
2449 /// Value.type should always be set and no inference of type will be made from
2450 /// Value.kind. If Value.type is not set, we will return INVALID_ARGUMENT
2451 /// error.
2452 #[prost(map = "string, message", tag = "7")]
2453 pub params: ::std::collections::HashMap<::prost::alloc::string::String, Value>,
2454 /// Required. Requested data format for the response.
2455 #[prost(oneof = "execute_query_request::DataFormat", tags = "4")]
2456 pub data_format: ::core::option::Option<execute_query_request::DataFormat>,
2457}
2458/// Nested message and enum types in `ExecuteQueryRequest`.
2459pub mod execute_query_request {
2460 /// Required. Requested data format for the response.
2461 #[serde_with::serde_as]
2462 #[derive(serde::Serialize, serde::Deserialize)]
2463 #[serde(rename_all = "camelCase")]
2464 #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
2465 pub enum DataFormat {
2466 /// Protocol buffer format as described by ProtoSchema and ProtoRows
2467 /// messages.
2468 #[prost(message, tag = "4")]
2469 ProtoFormat(super::ProtoFormat),
2470 }
2471}
2472/// Response message for Bigtable.ExecuteQuery
2473#[serde_with::serde_as]
2474#[derive(serde::Serialize, serde::Deserialize)]
2475#[serde(rename_all = "camelCase")]
2476#[derive(Clone, PartialEq, ::prost::Message)]
2477pub struct ExecuteQueryResponse {
2478 /// The first response streamed from the server is of type `ResultSetMetadata`
2479 /// and includes information about the columns and types of the result set.
2480 /// From there on, we stream `PartialResultSet` messages with no additional
2481 /// information. `PartialResultSet` will contain `resume_token` to restart the
2482 /// response if query interrupts. In case of resumption with `resume_token`,
2483 /// the server will not resend the ResultSetMetadata.
2484 #[prost(oneof = "execute_query_response::Response", tags = "1, 2")]
2485 pub response: ::core::option::Option<execute_query_response::Response>,
2486}
2487/// Nested message and enum types in `ExecuteQueryResponse`.
2488pub mod execute_query_response {
2489 /// The first response streamed from the server is of type `ResultSetMetadata`
2490 /// and includes information about the columns and types of the result set.
2491 /// From there on, we stream `PartialResultSet` messages with no additional
2492 /// information. `PartialResultSet` will contain `resume_token` to restart the
2493 /// response if query interrupts. In case of resumption with `resume_token`,
2494 /// the server will not resend the ResultSetMetadata.
2495 #[serde_with::serde_as]
2496 #[derive(serde::Serialize, serde::Deserialize)]
2497 #[serde(rename_all = "camelCase")]
2498 #[derive(Clone, PartialEq, ::prost::Oneof)]
2499 pub enum Response {
2500 /// Structure of rows in this response stream. The first (and only the first)
2501 /// response streamed from the server will be of this type.
2502 #[prost(message, tag = "1")]
2503 Metadata(super::ResultSetMetadata),
2504 /// A partial result set with row data potentially including additional
2505 /// instructions on how recent past and future partial responses should be
2506 /// interpreted.
2507 #[prost(message, tag = "2")]
2508 Results(super::PartialResultSet),
2509 }
2510}
2511/// Generated client implementations.
2512pub mod bigtable_client {
2513 #![allow(
2514 unused_variables,
2515 dead_code,
2516 missing_docs,
2517 clippy::wildcard_imports,
2518 clippy::let_unit_value
2519 )]
2520 use tonic::codegen::http::Uri;
2521 use tonic::codegen::*;
2522 /// Service for reading from and writing to existing Bigtable tables.
2523 #[derive(Debug, Clone)]
2524 pub struct BigtableClient<T> {
2525 inner: tonic::client::Grpc<T>,
2526 }
2527 impl BigtableClient<tonic::transport::Channel> {
2528 /// Attempt to create a new client by connecting to a given endpoint.
2529 pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
2530 where
2531 D: TryInto<tonic::transport::Endpoint>,
2532 D::Error: Into<StdError>,
2533 {
2534 let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
2535 Ok(Self::new(conn))
2536 }
2537 }
2538 impl<T> BigtableClient<T>
2539 where
2540 T: tonic::client::GrpcService<tonic::body::BoxBody>,
2541 T::Error: Into<StdError>,
2542 T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
2543 <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
2544 {
2545 pub fn new(inner: T) -> Self {
2546 let inner = tonic::client::Grpc::new(inner);
2547 Self { inner }
2548 }
2549 pub fn with_origin(inner: T, origin: Uri) -> Self {
2550 let inner = tonic::client::Grpc::with_origin(inner, origin);
2551 Self { inner }
2552 }
2553 pub fn with_interceptor<F>(
2554 inner: T,
2555 interceptor: F,
2556 ) -> BigtableClient<InterceptedService<T, F>>
2557 where
2558 F: tonic::service::Interceptor,
2559 T::ResponseBody: Default,
2560 T: tonic::codegen::Service<
2561 http::Request<tonic::body::BoxBody>,
2562 Response = http::Response<
2563 <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
2564 >,
2565 >,
2566 <T as tonic::codegen::Service<http::Request<tonic::body::BoxBody>>>::Error:
2567 Into<StdError> + std::marker::Send + std::marker::Sync,
2568 {
2569 BigtableClient::new(InterceptedService::new(inner, interceptor))
2570 }
2571 /// Compress requests with the given encoding.
2572 ///
2573 /// This requires the server to support it otherwise it might respond with an
2574 /// error.
2575 #[must_use]
2576 pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
2577 self.inner = self.inner.send_compressed(encoding);
2578 self
2579 }
2580 /// Enable decompressing responses.
2581 #[must_use]
2582 pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
2583 self.inner = self.inner.accept_compressed(encoding);
2584 self
2585 }
2586 /// Limits the maximum size of a decoded message.
2587 ///
2588 /// Default: `4MB`
2589 #[must_use]
2590 pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
2591 self.inner = self.inner.max_decoding_message_size(limit);
2592 self
2593 }
2594 /// Limits the maximum size of an encoded message.
2595 ///
2596 /// Default: `usize::MAX`
2597 #[must_use]
2598 pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
2599 self.inner = self.inner.max_encoding_message_size(limit);
2600 self
2601 }
2602 /// Streams back the contents of all requested rows in key order, optionally
2603 /// applying the same Reader filter to each. Depending on their size,
2604 /// rows and cells may be broken up across multiple responses, but
2605 /// atomicity of each row will still be preserved. See the
2606 /// ReadRowsResponse documentation for details.
2607 pub async fn read_rows(
2608 &mut self,
2609 request: impl tonic::IntoRequest<super::ReadRowsRequest>,
2610 ) -> std::result::Result<
2611 tonic::Response<tonic::codec::Streaming<super::ReadRowsResponse>>,
2612 tonic::Status,
2613 > {
2614 self.inner.ready().await.map_err(|e| {
2615 tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2616 })?;
2617 let codec = tonic::codec::ProstCodec::default();
2618 let path =
2619 http::uri::PathAndQuery::from_static("/google.bigtable.v2.Bigtable/ReadRows");
2620 let mut req = request.into_request();
2621 req.extensions_mut()
2622 .insert(GrpcMethod::new("google.bigtable.v2.Bigtable", "ReadRows"));
2623 self.inner.server_streaming(req, path, codec).await
2624 }
2625 /// Returns a sample of row keys in the table. The returned row keys will
2626 /// delimit contiguous sections of the table of approximately equal size,
2627 /// which can be used to break up the data for distributed tasks like
2628 /// mapreduces.
2629 pub async fn sample_row_keys(
2630 &mut self,
2631 request: impl tonic::IntoRequest<super::SampleRowKeysRequest>,
2632 ) -> std::result::Result<
2633 tonic::Response<tonic::codec::Streaming<super::SampleRowKeysResponse>>,
2634 tonic::Status,
2635 > {
2636 self.inner.ready().await.map_err(|e| {
2637 tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2638 })?;
2639 let codec = tonic::codec::ProstCodec::default();
2640 let path =
2641 http::uri::PathAndQuery::from_static("/google.bigtable.v2.Bigtable/SampleRowKeys");
2642 let mut req = request.into_request();
2643 req.extensions_mut().insert(GrpcMethod::new(
2644 "google.bigtable.v2.Bigtable",
2645 "SampleRowKeys",
2646 ));
2647 self.inner.server_streaming(req, path, codec).await
2648 }
2649 /// Mutates a row atomically. Cells already present in the row are left
2650 /// unchanged unless explicitly changed by `mutation`.
2651 pub async fn mutate_row(
2652 &mut self,
2653 request: impl tonic::IntoRequest<super::MutateRowRequest>,
2654 ) -> std::result::Result<tonic::Response<super::MutateRowResponse>, tonic::Status> {
2655 self.inner.ready().await.map_err(|e| {
2656 tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2657 })?;
2658 let codec = tonic::codec::ProstCodec::default();
2659 let path =
2660 http::uri::PathAndQuery::from_static("/google.bigtable.v2.Bigtable/MutateRow");
2661 let mut req = request.into_request();
2662 req.extensions_mut()
2663 .insert(GrpcMethod::new("google.bigtable.v2.Bigtable", "MutateRow"));
2664 self.inner.unary(req, path, codec).await
2665 }
2666 /// Mutates multiple rows in a batch. Each individual row is mutated
2667 /// atomically as in MutateRow, but the entire batch is not executed
2668 /// atomically.
2669 pub async fn mutate_rows(
2670 &mut self,
2671 request: impl tonic::IntoRequest<super::MutateRowsRequest>,
2672 ) -> std::result::Result<
2673 tonic::Response<tonic::codec::Streaming<super::MutateRowsResponse>>,
2674 tonic::Status,
2675 > {
2676 self.inner.ready().await.map_err(|e| {
2677 tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2678 })?;
2679 let codec = tonic::codec::ProstCodec::default();
2680 let path =
2681 http::uri::PathAndQuery::from_static("/google.bigtable.v2.Bigtable/MutateRows");
2682 let mut req = request.into_request();
2683 req.extensions_mut()
2684 .insert(GrpcMethod::new("google.bigtable.v2.Bigtable", "MutateRows"));
2685 self.inner.server_streaming(req, path, codec).await
2686 }
2687 /// Mutates a row atomically based on the output of a predicate Reader filter.
2688 pub async fn check_and_mutate_row(
2689 &mut self,
2690 request: impl tonic::IntoRequest<super::CheckAndMutateRowRequest>,
2691 ) -> std::result::Result<tonic::Response<super::CheckAndMutateRowResponse>, tonic::Status>
2692 {
2693 self.inner.ready().await.map_err(|e| {
2694 tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2695 })?;
2696 let codec = tonic::codec::ProstCodec::default();
2697 let path = http::uri::PathAndQuery::from_static(
2698 "/google.bigtable.v2.Bigtable/CheckAndMutateRow",
2699 );
2700 let mut req = request.into_request();
2701 req.extensions_mut().insert(GrpcMethod::new(
2702 "google.bigtable.v2.Bigtable",
2703 "CheckAndMutateRow",
2704 ));
2705 self.inner.unary(req, path, codec).await
2706 }
2707 /// Warm up associated instance metadata for this connection.
2708 /// This call is not required but may be useful for connection keep-alive.
2709 pub async fn ping_and_warm(
2710 &mut self,
2711 request: impl tonic::IntoRequest<super::PingAndWarmRequest>,
2712 ) -> std::result::Result<tonic::Response<super::PingAndWarmResponse>, tonic::Status>
2713 {
2714 self.inner.ready().await.map_err(|e| {
2715 tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2716 })?;
2717 let codec = tonic::codec::ProstCodec::default();
2718 let path =
2719 http::uri::PathAndQuery::from_static("/google.bigtable.v2.Bigtable/PingAndWarm");
2720 let mut req = request.into_request();
2721 req.extensions_mut().insert(GrpcMethod::new(
2722 "google.bigtable.v2.Bigtable",
2723 "PingAndWarm",
2724 ));
2725 self.inner.unary(req, path, codec).await
2726 }
2727 /// Modifies a row atomically on the server. The method reads the latest
2728 /// existing timestamp and value from the specified columns and writes a new
2729 /// entry based on pre-defined read/modify/write rules. The new value for the
2730 /// timestamp is the greater of the existing timestamp or the current server
2731 /// time. The method returns the new contents of all modified cells.
2732 pub async fn read_modify_write_row(
2733 &mut self,
2734 request: impl tonic::IntoRequest<super::ReadModifyWriteRowRequest>,
2735 ) -> std::result::Result<tonic::Response<super::ReadModifyWriteRowResponse>, tonic::Status>
2736 {
2737 self.inner.ready().await.map_err(|e| {
2738 tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2739 })?;
2740 let codec = tonic::codec::ProstCodec::default();
2741 let path = http::uri::PathAndQuery::from_static(
2742 "/google.bigtable.v2.Bigtable/ReadModifyWriteRow",
2743 );
2744 let mut req = request.into_request();
2745 req.extensions_mut().insert(GrpcMethod::new(
2746 "google.bigtable.v2.Bigtable",
2747 "ReadModifyWriteRow",
2748 ));
2749 self.inner.unary(req, path, codec).await
2750 }
2751 /// NOTE: This API is intended to be used by Apache Beam BigtableIO.
2752 /// Returns the current list of partitions that make up the table's
2753 /// change stream. The union of partitions will cover the entire keyspace.
2754 /// Partitions can be read with `ReadChangeStream`.
2755 pub async fn generate_initial_change_stream_partitions(
2756 &mut self,
2757 request: impl tonic::IntoRequest<super::GenerateInitialChangeStreamPartitionsRequest>,
2758 ) -> std::result::Result<
2759 tonic::Response<
2760 tonic::codec::Streaming<super::GenerateInitialChangeStreamPartitionsResponse>,
2761 >,
2762 tonic::Status,
2763 > {
2764 self.inner.ready().await.map_err(|e| {
2765 tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2766 })?;
2767 let codec = tonic::codec::ProstCodec::default();
2768 let path = http::uri::PathAndQuery::from_static(
2769 "/google.bigtable.v2.Bigtable/GenerateInitialChangeStreamPartitions",
2770 );
2771 let mut req = request.into_request();
2772 req.extensions_mut().insert(GrpcMethod::new(
2773 "google.bigtable.v2.Bigtable",
2774 "GenerateInitialChangeStreamPartitions",
2775 ));
2776 self.inner.server_streaming(req, path, codec).await
2777 }
2778 /// NOTE: This API is intended to be used by Apache Beam BigtableIO.
2779 /// Reads changes from a table's change stream. Changes will
2780 /// reflect both user-initiated mutations and mutations that are caused by
2781 /// garbage collection.
2782 pub async fn read_change_stream(
2783 &mut self,
2784 request: impl tonic::IntoRequest<super::ReadChangeStreamRequest>,
2785 ) -> std::result::Result<
2786 tonic::Response<tonic::codec::Streaming<super::ReadChangeStreamResponse>>,
2787 tonic::Status,
2788 > {
2789 self.inner.ready().await.map_err(|e| {
2790 tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2791 })?;
2792 let codec = tonic::codec::ProstCodec::default();
2793 let path = http::uri::PathAndQuery::from_static(
2794 "/google.bigtable.v2.Bigtable/ReadChangeStream",
2795 );
2796 let mut req = request.into_request();
2797 req.extensions_mut().insert(GrpcMethod::new(
2798 "google.bigtable.v2.Bigtable",
2799 "ReadChangeStream",
2800 ));
2801 self.inner.server_streaming(req, path, codec).await
2802 }
2803 /// Executes a BTQL query against a particular Cloud Bigtable instance.
2804 pub async fn execute_query(
2805 &mut self,
2806 request: impl tonic::IntoRequest<super::ExecuteQueryRequest>,
2807 ) -> std::result::Result<
2808 tonic::Response<tonic::codec::Streaming<super::ExecuteQueryResponse>>,
2809 tonic::Status,
2810 > {
2811 self.inner.ready().await.map_err(|e| {
2812 tonic::Status::unknown(format!("Service was not ready: {}", e.into()))
2813 })?;
2814 let codec = tonic::codec::ProstCodec::default();
2815 let path =
2816 http::uri::PathAndQuery::from_static("/google.bigtable.v2.Bigtable/ExecuteQuery");
2817 let mut req = request.into_request();
2818 req.extensions_mut().insert(GrpcMethod::new(
2819 "google.bigtable.v2.Bigtable",
2820 "ExecuteQuery",
2821 ));
2822 self.inner.server_streaming(req, path, codec).await
2823 }
2824 }
2825}