From 28c800129f8936bda718969d6ecf97c374b7e1b9 Mon Sep 17 00:00:00 2001 From: Jin Seop Kim Date: Wed, 16 Sep 2026 22:44:53 -0400 Subject: [PATCH 1/3] test(bigquery): add integration tests for row-based query() with Arrow format --- .../cloud/bigquery/it/ITBigQueryTest.java | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java index 2a576a47d603..b1815a790be8 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java @@ -7517,7 +7517,7 @@ void testQueryResultsFormatArrow() throws InterruptedException { totalRows += root.getRowCount(); assertEquals(1, root.getRowCount()); } - assertTrue(batchCount > 0); + assertEquals(1, batchCount); assertEquals(1, totalRows); } } @@ -7532,14 +7532,54 @@ void testQueryResultsFormatArrowMultiPage() throws InterruptedException { .build(); try (ArrowQueryResult result = bigquery.queryArrow(config)) { assertNotNull(result); + int batchCount = 0; long totalRows = 0; for (VectorSchemaRoot root : result) { + batchCount++; totalRows += root.getRowCount(); } + assertTrue(batchCount > 1); assertEquals(15000, totalRows); } } + @Test + void testQueryRowBasedWithArrowFormat() throws InterruptedException { + String query = "SELECT 1 as id, 'hello' as name, TIMESTAMP('2026-08-10T12:00:00Z') as ts"; + QueryJobConfiguration config = + QueryJobConfiguration.newBuilder(query) + .setQueryResultsFormat(QueryResultsFormat.ARROW) + .setJobCreationMode(JobCreationMode.JOB_CREATION_OPTIONAL) + .build(); + TableResult result = bigquery.query(config); + assertNotNull(result); + assertEquals(1, result.getTotalRows()); + List rows = ImmutableList.copyOf(result.iterateAll()); + assertEquals(1, rows.size()); + FieldValueList row = rows.get(0); + assertEquals(1L, row.get("id").getLongValue()); + assertEquals("hello", row.get("name").getStringValue()); + } + + @Test + void testQueryRowBasedWithArrowFormatMultiPage() throws InterruptedException { + String query = "SELECT x FROM UNNEST(GENERATE_ARRAY(1, 15000)) AS x"; + QueryJobConfiguration config = + QueryJobConfiguration.newBuilder(query) + .setQueryResultsFormat(QueryResultsFormat.ARROW) + .setJobCreationMode(JobCreationMode.JOB_CREATION_OPTIONAL) + .build(); + TableResult result = bigquery.query(config); + assertNotNull(result); + assertEquals(15000, result.getTotalRows()); + long count = 0; + for (FieldValueList row : result.iterateAll()) { + count++; + assertEquals(count, row.get("x").getLongValue()); + } + assertEquals(15000, count); + } + @Test void testUniverseDomainWithInvalidUniverseDomain() { RemoteBigQueryHelper bigqueryHelper = RemoteBigQueryHelper.create(); From 404dab2b3d0563a6902cad75a5a330d8a8460401 Mon Sep 17 00:00:00 2001 From: Jin Seop Kim Date: Wed, 16 Sep 2026 22:47:19 -0400 Subject: [PATCH 2/3] test(bigquery): assert timestamp column value in queryRowBasedWithArrowFormat --- .../test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java index b1815a790be8..7784e5232f6c 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java @@ -7559,6 +7559,7 @@ void testQueryRowBasedWithArrowFormat() throws InterruptedException { FieldValueList row = rows.get(0); assertEquals(1L, row.get("id").getLongValue()); assertEquals("hello", row.get("name").getStringValue()); + assertEquals(1786363200000000L, row.get("ts").getTimestampValue()); } @Test From 115a12ed4e3922930f8a289dacab4546cfe38347 Mon Sep 17 00:00:00 2001 From: Jin Seop Kim Date: Thu, 17 Sep 2026 06:59:15 -0400 Subject: [PATCH 3/3] test(bigquery): add fallback execution integration tests for Arrow queries --- .../cloud/bigquery/it/ITBigQueryTest.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java index 7784e5232f6c..e249f55d39f1 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java @@ -7581,6 +7581,54 @@ void testQueryRowBasedWithArrowFormatMultiPage() throws InterruptedException { assertEquals(15000, count); } + @Test + void testQueryResultsFormatArrowFallback() throws InterruptedException { + String query = "SELECT 1 as id, 'fallback' as name, TIMESTAMP('2026-08-10T12:00:00Z') as ts"; + QueryJobConfiguration config = + QueryJobConfiguration.newBuilder(query) + .setQueryResultsFormat(QueryResultsFormat.ARROW) + .build(); + JobId customJobId = + JobId.of("arrow_it_fallback_" + UUID.randomUUID().toString().replace("-", "_")); + try (ArrowQueryResult result = bigquery.queryArrow(config, customJobId)) { + assertNotNull(result); + assertNotNull(result.getArrowSchema()); + assertNotNull(result.getJobId()); + assertEquals(customJobId.getJob(), result.getJobId().getJob()); + int batchCount = 0; + long totalRows = 0; + for (VectorSchemaRoot root : result) { + batchCount++; + totalRows += root.getRowCount(); + assertEquals(1, root.getRowCount()); + } + assertEquals(1, batchCount); + assertEquals(1, totalRows); + } + } + + @Test + void testQueryRowBasedWithArrowFormatFallback() throws InterruptedException { + String query = "SELECT 1 as id, 'fallback' as name, TIMESTAMP('2026-08-10T12:00:00Z') as ts"; + QueryJobConfiguration config = + QueryJobConfiguration.newBuilder(query) + .setQueryResultsFormat(QueryResultsFormat.ARROW) + .build(); + JobId customJobId = + JobId.of("row_it_fallback_" + UUID.randomUUID().toString().replace("-", "_")); + TableResult result = bigquery.query(config, customJobId); + assertNotNull(result); + assertNotNull(result.getJobId()); + assertEquals(customJobId.getJob(), result.getJobId().getJob()); + assertEquals(1, result.getTotalRows()); + List rows = ImmutableList.copyOf(result.iterateAll()); + assertEquals(1, rows.size()); + FieldValueList row = rows.get(0); + assertEquals(1L, row.get("id").getLongValue()); + assertEquals("fallback", row.get("name").getStringValue()); + assertEquals(1786363200000000L, row.get("ts").getTimestampValue()); + } + @Test void testUniverseDomainWithInvalidUniverseDomain() { RemoteBigQueryHelper bigqueryHelper = RemoteBigQueryHelper.create();