feat(bigquery): job creation mode GA (#3804) · googleapis/java-bigquery@a21cde8

@@ -111,6 +111,7 @@

111111

import com.google.cloud.bigquery.PolicyTags;

112112

import com.google.cloud.bigquery.PrimaryKey;

113113

import com.google.cloud.bigquery.QueryJobConfiguration;

114+

import com.google.cloud.bigquery.QueryJobConfiguration.JobCreationMode;

114115

import com.google.cloud.bigquery.QueryJobConfiguration.Priority;

115116

import com.google.cloud.bigquery.QueryParameterValue;

116117

import com.google.cloud.bigquery.Range;

@@ -3483,6 +3484,7 @@ public void testExecuteSelectWithReadApi() throws SQLException {

34833484

final int rowLimit = 5000;

34843485

final String QUERY =

34853486

"SELECT * FROM bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2017 LIMIT %s";

3487+

bigquery.getOptions().setDefaultJobCreationMode(JobCreationMode.JOB_CREATION_REQUIRED);

34863488

// Job timeout is somewhat arbitrary - just ensures that fast query is not used.

34873489

// min result size and page row count ratio ensure that the ReadAPI is used.

34883490

ConnectionSettings connectionSettingsReadAPIEnabledFastQueryDisabled =

@@ -7084,26 +7086,19 @@ public void testStatelessQueries() throws InterruptedException {

70847086

RemoteBigQueryHelper bigqueryHelper = RemoteBigQueryHelper.create();

70857087

BigQuery bigQuery = bigqueryHelper.getOptions().getService();

708670887087-

// Simulate setting the QUERY_PREVIEW_ENABLED environment variable.

7088-

bigQuery.getOptions().setQueryPreviewEnabled("TRUE");

7089+

// Stateless query should have no job id.

7090+

bigQuery.getOptions().setDefaultJobCreationMode(JobCreationMode.JOB_CREATION_OPTIONAL);

70897091

TableResult tableResult = executeSimpleQuery(bigQuery);

70907092

assertNotNull(tableResult.getQueryId());

70917093

assertNull(tableResult.getJobId());

709270947093-

// The flag should be case-insensitive.

7094-

bigQuery.getOptions().setQueryPreviewEnabled("tRuE");

7095+

// Job creation takes over, no query id is created.

7096+

bigQuery.getOptions().setDefaultJobCreationMode(JobCreationMode.JOB_CREATION_REQUIRED);

70957097

tableResult = executeSimpleQuery(bigQuery);

7096-

assertNotNull(tableResult.getQueryId());

7097-

assertNull(tableResult.getJobId());

7098-7099-

// Any other values won't enable optional job creation mode.

7100-

bigQuery.getOptions().setQueryPreviewEnabled("test_value");

7101-

tableResult = executeSimpleQuery(bigQuery);

7102-

assertNotNull(tableResult.getQueryId());

7098+

assertNull(tableResult.getQueryId());

71037099

assertNotNull(tableResult.getJobId());

710471007105-

// Reset the flag.

7106-

bigQuery.getOptions().setQueryPreviewEnabled(null);

7101+

bigQuery.getOptions().setDefaultJobCreationMode(JobCreationMode.JOB_CREATION_MODE_UNSPECIFIED);

71077102

tableResult = executeSimpleQuery(bigQuery);

71087103

assertNotNull(tableResult.getQueryId());

71097104

assertNotNull(tableResult.getJobId());

@@ -7128,8 +7123,8 @@ public void testTableResultJobIdAndQueryId() throws InterruptedException {

71287123

// Create local BigQuery for test scenario 1 to not contaminate global test parameters.

71297124

RemoteBigQueryHelper bigqueryHelper = RemoteBigQueryHelper.create();

71307125

BigQuery bigQuery = bigqueryHelper.getOptions().getService();

7131-

// Simulate setting the QUERY_PREVIEW_ENABLED environment variable.

7132-

bigQuery.getOptions().setQueryPreviewEnabled("TRUE");

7126+

// Allow queries to be stateless.

7127+

bigQuery.getOptions().setDefaultJobCreationMode(JobCreationMode.JOB_CREATION_OPTIONAL);

71337128

String query = "SELECT 1 as one";

71347129

QueryJobConfiguration configStateless = QueryJobConfiguration.newBuilder(query).build();

71357130

TableResult result = bigQuery.query(configStateless);

@@ -7181,15 +7176,17 @@ public void testStatelessQueriesWithLocation() throws Exception {

71817176

table.getTableId().getTable());

7182717771837178

// Test stateless query when BigQueryOption location matches dataset location.

7184-

bigQuery.getOptions().setQueryPreviewEnabled("TRUE");

7179+

bigQuery.getOptions().setDefaultJobCreationMode(JobCreationMode.JOB_CREATION_OPTIONAL);

71857180

TableResult tb = bigQuery.query(QueryJobConfiguration.of(query));

71867181

assertNull(tb.getJobId());

7187718271887183

// Test stateless query when BigQueryOption location does not match dataset location.

71897184

try {

71907185

BigQuery bigQueryWrongLocation =

71917186

bigqueryHelper.getOptions().toBuilder().setLocation(wrongLocation).build().getService();

7192-

bigQueryWrongLocation.getOptions().setQueryPreviewEnabled("TRUE");

7187+

bigQueryWrongLocation

7188+

.getOptions()

7189+

.setDefaultJobCreationMode(JobCreationMode.JOB_CREATION_OPTIONAL);

71937190

bigQueryWrongLocation.query(QueryJobConfiguration.of(query));

71947191

fail("querying a table with wrong location shouldn't work");

71957192

} catch (BigQueryException e) {