Class RowMutationInformation
java.lang.Object
org.apache.beam.sdk.io.gcp.bigquery.RowMutationInformation
This class indicates how to apply a row update to BigQuery. A sequence number must always be
supplied to order the updates. Incorrect sequence numbers will result in unexpected state in the
BigQuery table.
-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract StringThe value supplied to the BigQuery_CHANGE_SEQUENCE_NUMBERpseudo-column.abstract RowMutationInformation.MutationTypeDeprecated.static RowMutationInformationof(RowMutationInformation.MutationType mutationType, long sequenceNumber) Deprecated.static RowMutationInformationof(RowMutationInformation.MutationType mutationType, String changeSequenceNumber) InstantiateRowMutationInformationwithRowMutationInformation.MutationTypeand the , which sets the BigQuery API_CHANGE_SEQUENCE_NUMBERpseudo column, enabling custom user-supplied ordering ofRowMutations.
-
Constructor Details
-
RowMutationInformation
public RowMutationInformation()
-
-
Method Details
-
getMutationType
-
getSequenceNumber
Deprecated.The sequence number used to drive the order of applied row mutations. @deprecatedgetChangeSequenceNumber()replaces this field as the BigQuery API instead supports the use of a string. -
getChangeSequenceNumber
The value supplied to the BigQuery_CHANGE_SEQUENCE_NUMBERpseudo-column. Seeof(MutationType, String)for more details. -
of
@Deprecated public static RowMutationInformation of(RowMutationInformation.MutationType mutationType, long sequenceNumber) Deprecated.InstantiateRowMutationInformationwithRowMutationInformation.MutationTypeand the . @deprecated - instantiatesRowMutationInformationviaof(MutationType, String)forwarding the value usingLong.toHexString(long). values< 0will throw an error. -
of
public static RowMutationInformation of(RowMutationInformation.MutationType mutationType, String changeSequenceNumber) InstantiateRowMutationInformationwithRowMutationInformation.MutationTypeand the , which sets the BigQuery API_CHANGE_SEQUENCE_NUMBERpseudo column, enabling custom user-supplied ordering ofRowMutations.Requirements for the :
- fixed format
Stringin hexadecimal format - do not use hexadecimals encoded from negative numbers
- each hexadecimal string separated into sections by forward slash:
/ - up to four sections allowed
- each section is limited to
16hexadecimal characters:0-9,A-F, ora-f - The allowable range supported are values between
0/0/0/0andFFFFFFFFFFFFFFFF/FFFFFFFFFFFFFFFF/FFFFFFFFFFFFFFFF/FFFFFFFFFFFFFFFF
Below are some scenarios:
Record #1: Record #2: BigQuery API compares as "B""ABC"Record #2 is considered the latest record: 'ABC' > 'B' (i.e. '2748' > '11')"FFF/B""FFF/ABC"Record #2 is considered the latest record: "FFF/B" > "FFF/ABC" (i.e. "4095/2748" > "4095/11")"BA/FFFFFFFF""ABC"Record #2 is considered the latest record: "ABC" > "BA/FFFFFFFF" (i.e. "2748" > "186/4294967295")"FFF/ABC""ABC"Record #1 is considered the latest record: "FFF/ABC" > "ABC" (i.e. "4095/2748" > "2748")"FFF""FFF"Record #1 and #2 change sequence number identical; BigQuery uses system ingestion time to take precedence over previously ingested records. Below are some code examples.
RowMutationInformation.of(UPSERT, "FFF/ABC")- Using Apache Commons
Hex.encodeHexString(byte[])(Java 17+ users can useHexFormat)RowMutationInformation.of(UPSERT, Hex.encodeHexString("2024-04-30 11:19:44 UTC".getBytes(StandardCharsets.UTF_8))) - Using
Long.toHexString(long):RowMutationInformation.of(DELETE, Long.toHexString(123L))
- fixed format
-