Skip to content

Commit 9e0b351

Browse files
feat: add destinationExpirationTime to CopyJobConfiguration (#2031)
* Add destinationExpirationTime * Added testDestExpTimeTableCopyJob IT * Added testDestExpTimeTableCopyJob IT * Removed testDestExpTimeTableCopyJob IT. Modified testCopyJobWithLabelsAndExpTime to add destinationExpiryTime * Modified Builder to add destinationExpiryTime * Modified testCopyJobWithLabelsAndExpTime. Added assertion for destinationExpiryTime * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent 7f09014 commit 9e0b351

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

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

+28
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public final class CopyJobConfiguration extends JobConfiguration {
3939
private final List<TableId> sourceTables;
4040
private final TableId destinationTable;
4141
private final String operationType;
42+
private final String destinationExpirationTime;
4243
private final JobInfo.CreateDisposition createDisposition;
4344
private final JobInfo.WriteDisposition writeDisposition;
4445
private final EncryptionConfiguration destinationEncryptionConfiguration;
@@ -51,6 +52,7 @@ public static final class Builder
5152
private List<TableId> sourceTables;
5253
private TableId destinationTable;
5354
private String operationType;
55+
private String destinationExpirationTime;
5456
private JobInfo.CreateDisposition createDisposition;
5557
private JobInfo.WriteDisposition writeDisposition;
5658
private EncryptionConfiguration destinationEncryptionConfiguration;
@@ -66,6 +68,7 @@ private Builder(CopyJobConfiguration jobConfiguration) {
6668
this.sourceTables = jobConfiguration.sourceTables;
6769
this.destinationTable = jobConfiguration.destinationTable;
6870
this.operationType = jobConfiguration.operationType;
71+
this.destinationExpirationTime = jobConfiguration.destinationExpirationTime;
6972
this.createDisposition = jobConfiguration.createDisposition;
7073
this.writeDisposition = jobConfiguration.writeDisposition;
7174
this.destinationEncryptionConfiguration = jobConfiguration.destinationEncryptionConfiguration;
@@ -80,6 +83,10 @@ private Builder(com.google.api.services.bigquery.model.JobConfiguration configur
8083
if (copyConfigurationPb.getOperationType() != null) {
8184
this.operationType = copyConfigurationPb.getOperationType();
8285
}
86+
if (copyConfigurationPb.getDestinationExpirationTime() != null) {
87+
this.destinationExpirationTime =
88+
copyConfigurationPb.getDestinationExpirationTime().toString();
89+
}
8390
if (copyConfigurationPb.getSourceTables() != null) {
8491
this.sourceTables =
8592
Lists.transform(copyConfigurationPb.getSourceTables(), TableId.FROM_PB_FUNCTION);
@@ -129,6 +136,16 @@ public Builder setOperationType(String operationType) {
129136
return this;
130137
}
131138

139+
/**
140+
* Sets the time when the destination table expires. Expired tables will be deleted and their
141+
* storage reclaimed. More info:
142+
* https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfigurationtablecopy
143+
*/
144+
public Builder setDestinationExpirationTime(String destinationExpirationTime) {
145+
this.destinationExpirationTime = destinationExpirationTime;
146+
return this;
147+
}
148+
132149
public Builder setDestinationEncryptionConfiguration(
133150
EncryptionConfiguration encryptionConfiguration) {
134151
this.destinationEncryptionConfiguration = encryptionConfiguration;
@@ -194,6 +211,7 @@ private CopyJobConfiguration(Builder builder) {
194211
this.sourceTables = checkNotNull(builder.sourceTables);
195212
this.destinationTable = checkNotNull(builder.destinationTable);
196213
this.operationType = builder.operationType;
214+
this.destinationExpirationTime = builder.destinationExpirationTime;
197215
this.createDisposition = builder.createDisposition;
198216
this.writeDisposition = builder.writeDisposition;
199217
this.destinationEncryptionConfiguration = builder.destinationEncryptionConfiguration;
@@ -216,6 +234,11 @@ public String getOperationType() {
216234
return operationType;
217235
}
218236

237+
/** Returns the time when the destination table expires */
238+
public String getDestinationExpirationTime() {
239+
return destinationExpirationTime;
240+
}
241+
219242
public EncryptionConfiguration getDestinationEncryptionConfiguration() {
220243
return destinationEncryptionConfiguration;
221244
}
@@ -263,6 +286,7 @@ ToStringHelper toStringHelper() {
263286
.add("sourceTables", sourceTables)
264287
.add("destinationTable", destinationTable)
265288
.add("operationType", operationType)
289+
.add("destinationExpirationTime", destinationExpirationTime)
266290
.add("destinationEncryptionConfiguration", destinationEncryptionConfiguration)
267291
.add("createDisposition", createDisposition)
268292
.add("writeDisposition", writeDisposition)
@@ -283,6 +307,7 @@ public int hashCode() {
283307
sourceTables,
284308
destinationTable,
285309
operationType,
310+
destinationExpirationTime,
286311
createDisposition,
287312
writeDisposition,
288313
labels,
@@ -322,6 +347,9 @@ com.google.api.services.bigquery.model.JobConfiguration toPb() {
322347
if (operationType != null) {
323348
configurationPb.setOperationType(operationType);
324349
}
350+
if (destinationExpirationTime != null) {
351+
configurationPb.setDestinationExpirationTime(destinationExpirationTime);
352+
}
325353
if (createDisposition != null) {
326354
configurationPb.setCreateDisposition(createDisposition.toString());
327355
}

google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -3893,7 +3893,8 @@ public void testSnapshotTableCopyJob() throws InterruptedException {
38933893
}
38943894

38953895
@Test
3896-
public void testCopyJobWithLabels() throws InterruptedException {
3896+
public void testCopyJobWithLabelsAndExpTime() throws InterruptedException {
3897+
String destExpiryTime = "2025-12-31T23:59:59.999999999Z";
38973898
String sourceTableName = "test_copy_job_source_table_label";
38983899
String destinationTableName = "test_copy_job_destination_table_label";
38993900
Map<String, String> labels = ImmutableMap.of("test_job_name", "test_copy_job");
@@ -3904,12 +3905,17 @@ public void testCopyJobWithLabels() throws InterruptedException {
39043905
assertNotNull(createdTable);
39053906
TableId destinationTable = TableId.of(DATASET, destinationTableName);
39063907
CopyJobConfiguration configuration =
3907-
CopyJobConfiguration.newBuilder(destinationTable, sourceTable).setLabels(labels).build();
3908+
CopyJobConfiguration.newBuilder(destinationTable, sourceTable)
3909+
.setLabels(labels)
3910+
.setDestinationExpirationTime(destExpiryTime)
3911+
.build();
39083912
Job remoteJob = bigquery.create(JobInfo.of(configuration));
39093913
remoteJob = remoteJob.waitFor();
39103914
assertNull(remoteJob.getStatus().getError());
39113915
CopyJobConfiguration copyJobConfiguration = remoteJob.getConfiguration();
39123916
assertEquals(labels, copyJobConfiguration.getLabels());
3917+
assertNotNull(copyJobConfiguration.getDestinationExpirationTime());
3918+
assertEquals(destExpiryTime, copyJobConfiguration.getDestinationExpirationTime());
39133919
Table remoteTable = bigquery.getTable(DATASET, destinationTableName);
39143920
assertNotNull(remoteTable);
39153921
assertTrue(createdTable.delete());

0 commit comments

Comments
 (0)