Skip to content

Commit 37b41e5

Browse files
author
Praful Makani
authored
Bigquery: add range partitioning to tables, load jobs, and query jobs. (#6552)
* added RangePartitioning feature to LoadJobConfiguration * add range partitioning to tables, load job and query job * fix javadoc
1 parent 368d310 commit 37b41e5

File tree

7 files changed

+429
-14
lines changed

7 files changed

+429
-14
lines changed

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

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public final class LoadJobConfiguration extends JobConfiguration implements Load
5353
private final Boolean useAvroLogicalTypes;
5454
private final Map<String, String> labels;
5555
private final Long jobTimeoutMs;
56+
private final RangePartitioning rangePartitioning;
5657

5758
public static final class Builder extends JobConfiguration.Builder<LoadJobConfiguration, Builder>
5859
implements LoadConfiguration.Builder {
@@ -75,6 +76,7 @@ public static final class Builder extends JobConfiguration.Builder<LoadJobConfig
7576
private Boolean useAvroLogicalTypes;
7677
private Map<String, String> labels;
7778
private Long jobTimeoutMs;
79+
private RangePartitioning rangePartitioning;
7880

7981
private Builder() {
8082
super(Type.LOAD);
@@ -100,6 +102,7 @@ private Builder(LoadJobConfiguration loadConfiguration) {
100102
this.useAvroLogicalTypes = loadConfiguration.useAvroLogicalTypes;
101103
this.labels = loadConfiguration.labels;
102104
this.jobTimeoutMs = loadConfiguration.jobTimeoutMs;
105+
this.rangePartitioning = loadConfiguration.rangePartitioning;
103106
}
104107

105108
private Builder(com.google.api.services.bigquery.model.JobConfiguration configurationPb) {
@@ -179,6 +182,10 @@ private Builder(com.google.api.services.bigquery.model.JobConfiguration configur
179182
if (configurationPb.getJobTimeoutMs() != null) {
180183
this.jobTimeoutMs = configurationPb.getJobTimeoutMs();
181184
}
185+
if (loadConfigurationPb.getRangePartitioning() != null) {
186+
this.rangePartitioning =
187+
RangePartitioning.fromPb(loadConfigurationPb.getRangePartitioning());
188+
}
182189
}
183190

184191
@Override
@@ -301,6 +308,17 @@ public Builder setJobTimeoutMs(Long jobTimeoutMs) {
301308
return this;
302309
}
303310

311+
/**
312+
* Range partitioning specification for this table. Only one of timePartitioning and
313+
* rangePartitioning should be specified.
314+
*
315+
* @param rangePartitioning rangePartitioning or {@code null} for none
316+
*/
317+
public Builder setRangePartitioning(RangePartitioning rangePartitioning) {
318+
this.rangePartitioning = rangePartitioning;
319+
return this;
320+
}
321+
304322
@Override
305323
public LoadJobConfiguration build() {
306324
return new LoadJobConfiguration(this);
@@ -326,6 +344,7 @@ private LoadJobConfiguration(Builder builder) {
326344
this.useAvroLogicalTypes = builder.useAvroLogicalTypes;
327345
this.labels = builder.labels;
328346
this.jobTimeoutMs = builder.jobTimeoutMs;
347+
this.rangePartitioning = builder.rangePartitioning;
329348
}
330349

331350
@Override
@@ -428,6 +447,11 @@ public Long getJobTimeoutMs() {
428447
return jobTimeoutMs;
429448
}
430449

450+
/** Returns the range partitioning specification for the table */
451+
public RangePartitioning getRangePartitioning() {
452+
return rangePartitioning;
453+
}
454+
431455
@Override
432456
public Builder toBuilder() {
433457
return new Builder(this);
@@ -452,7 +476,8 @@ ToStringHelper toStringHelper() {
452476
.add("clustering", clustering)
453477
.add("useAvroLogicalTypes", useAvroLogicalTypes)
454478
.add("labels", labels)
455-
.add("jobTimeoutMs", jobTimeoutMs);
479+
.add("jobTimeoutMs", jobTimeoutMs)
480+
.add("rangePartitioning", rangePartitioning);
456481
}
457482

458483
@Override
@@ -542,6 +567,9 @@ com.google.api.services.bigquery.model.JobConfiguration toPb() {
542567
if (jobTimeoutMs != null) {
543568
jobConfiguration.setJobTimeoutMs(jobTimeoutMs);
544569
}
570+
if (rangePartitioning != null) {
571+
loadConfigurationPb.setRangePartitioning(rangePartitioning.toPb());
572+
}
545573
jobConfiguration.setLoad(loadConfigurationPb);
546574
return jobConfiguration;
547575
}

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

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public final class QueryJobConfiguration extends JobConfiguration {
6767
private final Clustering clustering;
6868
private final Long jobTimeoutMs;
6969
private final Map<String, String> labels;
70+
private final RangePartitioning rangePartitioning;
7071

7172
/**
7273
* Priority levels for a query. If not specified the priority is assumed to be {@link
@@ -114,6 +115,7 @@ public static final class Builder
114115
private Clustering clustering;
115116
private Long jobTimeoutMs;
116117
private Map<String, String> labels;
118+
private RangePartitioning rangePartitioning;
117119

118120
private Builder() {
119121
super(Type.QUERY);
@@ -144,6 +146,7 @@ private Builder(QueryJobConfiguration jobConfiguration) {
144146
this.clustering = jobConfiguration.clustering;
145147
this.jobTimeoutMs = jobConfiguration.jobTimeoutMs;
146148
this.labels = jobConfiguration.labels;
149+
this.rangePartitioning = jobConfiguration.rangePartitioning;
147150
}
148151

149152
private Builder(com.google.api.services.bigquery.model.JobConfiguration configurationPb) {
@@ -233,6 +236,10 @@ private Builder(com.google.api.services.bigquery.model.JobConfiguration configur
233236
if (configurationPb.getLabels() != null) {
234237
this.labels = configurationPb.getLabels();
235238
}
239+
if (queryConfigurationPb.getRangePartitioning() != null) {
240+
this.rangePartitioning =
241+
RangePartitioning.fromPb(queryConfigurationPb.getRangePartitioning());
242+
}
236243
}
237244

238245
/** Sets the BigQuery SQL query to execute. */
@@ -561,6 +568,17 @@ public Builder setLabels(Map<String, String> labels) {
561568
return this;
562569
}
563570

571+
/**
572+
* Range partitioning specification for this table. Only one of timePartitioning and
573+
* rangePartitioning should be specified.
574+
*
575+
* @param rangePartitioning rangePartitioning or {@code null} for none
576+
*/
577+
public Builder setRangePartitioning(RangePartitioning rangePartitioning) {
578+
this.rangePartitioning = rangePartitioning;
579+
return this;
580+
}
581+
564582
public QueryJobConfiguration build() {
565583
return new QueryJobConfiguration(this);
566584
}
@@ -600,6 +618,7 @@ private QueryJobConfiguration(Builder builder) {
600618
this.clustering = builder.clustering;
601619
this.jobTimeoutMs = builder.jobTimeoutMs;
602620
this.labels = builder.labels;
621+
this.rangePartitioning = builder.rangePartitioning;
603622
}
604623

605624
/**
@@ -779,6 +798,11 @@ public Map<String, String> getLabels() {
779798
return labels;
780799
}
781800

801+
/** Returns the range partitioning specification for the table */
802+
public RangePartitioning getRangePartitioning() {
803+
return rangePartitioning;
804+
}
805+
782806
@Override
783807
public Builder toBuilder() {
784808
return new Builder(this);
@@ -809,7 +833,8 @@ ToStringHelper toStringHelper() {
809833
.add("timePartitioning", timePartitioning)
810834
.add("clustering", clustering)
811835
.add("jobTimeoutMs", jobTimeoutMs)
812-
.add("labels", labels);
836+
.add("labels", labels)
837+
.add("rangePartitioning", rangePartitioning);
813838
}
814839

815840
@Override
@@ -843,7 +868,8 @@ public int hashCode() {
843868
timePartitioning,
844869
clustering,
845870
jobTimeoutMs,
846-
labels);
871+
labels,
872+
rangePartitioning);
847873
}
848874

849875
@Override
@@ -939,6 +965,9 @@ com.google.api.services.bigquery.model.JobConfiguration toPb() {
939965
if (labels != null) {
940966
configurationPb.setLabels(labels);
941967
}
968+
if (rangePartitioning != null) {
969+
queryConfigurationPb.setRangePartitioning(rangePartitioning.toPb());
970+
}
942971
configurationPb.setQuery(queryConfigurationPb);
943972
return configurationPb;
944973
}

0 commit comments

Comments
 (0)