Skip to content

Commit 9b2e004

Browse files
committed
feat(bigquery): update Arrow serialization options with enums and defaults
1 parent 1785222 commit 9b2e004

3 files changed

Lines changed: 40 additions & 10 deletions

File tree

java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/ArrowSerializationOptions.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,9 @@ public String toString() {
5858
/** <b>[Beta]</b> Timestamp precision for Apache Arrow timestamp types. */
5959
@BetaApi
6060
public enum TimestampPrecision {
61-
PRECISION_MILLIS("PRECISION_MILLIS"),
62-
PRECISION_MICROS("PRECISION_MICROS"),
63-
PRECISION_NANOS("PRECISION_NANOS"),
64-
PRECISION_PICOS("PRECISION_PICOS");
61+
MICROS("PRECISION_MICROS"),
62+
NANOS("PRECISION_NANOS"),
63+
PICOS("PRECISION_PICOS");
6564

6665
private final String value;
6766

@@ -155,7 +154,7 @@ static ArrowSerializationOptions fromPb(
155154
@BetaApi
156155
public static final class Builder {
157156
private CompressionCodec bufferCompression = CompressionCodec.UNCOMPRESSED;
158-
private TimestampPrecision picosTimestampPrecision = TimestampPrecision.PRECISION_MICROS;
157+
private TimestampPrecision picosTimestampPrecision = TimestampPrecision.MICROS;
159158

160159
private Builder() {}
161160

java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/QueryJobConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public static final class Builder
147147
private Long maxResults;
148148
private JobCreationMode jobCreationMode;
149149
private String reservation;
150-
private QueryResultsFormat queryResultsFormat;
150+
private QueryResultsFormat queryResultsFormat = QueryResultsFormat.STRUCT_ENCODING;
151151
private ArrowSerializationOptions arrowSerializationOptions;
152152

153153
private Builder() {

java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/QueryJobConfigurationTest.java

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,7 @@ public void testArrowConfigurations() {
248248
ArrowSerializationOptions options =
249249
ArrowSerializationOptions.newBuilder()
250250
.setBufferCompression(ArrowSerializationOptions.CompressionCodec.LZ4_FRAME)
251-
.setPicosTimestampPrecision(
252-
ArrowSerializationOptions.TimestampPrecision.PRECISION_MILLIS)
251+
.setPicosTimestampPrecision(ArrowSerializationOptions.TimestampPrecision.NANOS)
253252
.build();
254253
QueryJobConfiguration job =
255254
QueryJobConfiguration.newBuilder(QUERY)
@@ -268,7 +267,7 @@ public void testArrowConfigurations() {
268267

269268
// Test toPb/fromPb (not preserved)
270269
QueryJobConfiguration jobFromPb = QueryJobConfiguration.fromPb(job.toPb());
271-
assertNull(jobFromPb.getQueryResultsFormat());
270+
assertEquals(QueryResultsFormat.STRUCT_ENCODING, jobFromPb.getQueryResultsFormat());
272271
assertNull(jobFromPb.getArrowSerializationOptions());
273272
}
274273

@@ -279,7 +278,7 @@ public void testArrowSerializationOptionsNullChecks() {
279278
ArrowSerializationOptions.CompressionCodec.UNCOMPRESSED,
280279
builder.build().getBufferCompression());
281280
assertEquals(
282-
ArrowSerializationOptions.TimestampPrecision.PRECISION_MICROS,
281+
ArrowSerializationOptions.TimestampPrecision.MICROS,
283282
builder.build().getPicosTimestampPrecision());
284283

285284
NullPointerException ex1 =
@@ -291,6 +290,36 @@ public void testArrowSerializationOptionsNullChecks() {
291290
assertEquals("picosTimestampPrecision cannot be null", ex2.getMessage());
292291
}
293292

293+
@Test
294+
public void testQueryJobConfigurationDefaults() {
295+
QueryJobConfiguration defaultJob = QueryJobConfiguration.newBuilder(QUERY).build();
296+
297+
// Default query format is STRUCT_ENCODING; Arrow options are null by default
298+
assertEquals(QueryResultsFormat.STRUCT_ENCODING, defaultJob.getQueryResultsFormat());
299+
assertNull(defaultJob.getArrowSerializationOptions());
300+
301+
// Verify toBuilder preserves defaults
302+
QueryJobConfiguration copiedJob = defaultJob.toBuilder().build();
303+
assertEquals(QueryResultsFormat.STRUCT_ENCODING, copiedJob.getQueryResultsFormat());
304+
assertNull(copiedJob.getArrowSerializationOptions());
305+
}
306+
307+
@Test
308+
public void testArrowFormatWithNullSerializationOptions() {
309+
QueryJobConfiguration job =
310+
QueryJobConfiguration.newBuilder(QUERY)
311+
.setQueryResultsFormat(QueryResultsFormat.ARROW)
312+
.build();
313+
314+
assertEquals(QueryResultsFormat.ARROW, job.getQueryResultsFormat());
315+
assertNull(job.getArrowSerializationOptions());
316+
317+
// Verify toBuilder preserves ARROW format with null options
318+
QueryJobConfiguration copiedJob = job.toBuilder().build();
319+
assertEquals(QueryResultsFormat.ARROW, copiedJob.getQueryResultsFormat());
320+
assertNull(copiedJob.getArrowSerializationOptions());
321+
}
322+
294323
@Test
295324
public void testQueryJobConfigurationArrowNullChecks() {
296325
QueryJobConfiguration.Builder builder = QueryJobConfiguration.newBuilder(QUERY);
@@ -338,5 +367,7 @@ private void compareQueryJobConfiguration(
338367
assertEquals(expected.getPositionalParameters(), value.getPositionalParameters());
339368
assertEquals(expected.getNamedParameters(), value.getNamedParameters());
340369
assertEquals(expected.getReservation(), value.getReservation());
370+
assertEquals(expected.getQueryResultsFormat(), value.getQueryResultsFormat());
371+
assertEquals(expected.getArrowSerializationOptions(), value.getArrowSerializationOptions());
341372
}
342373
}

0 commit comments

Comments
 (0)