diff --git a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/HivePartitioningOptions.java b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/HivePartitioningOptions.java
index 08694285a..db6e434ce 100644
--- a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/HivePartitioningOptions.java
+++ b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/HivePartitioningOptions.java
@@ -23,17 +23,20 @@
public final class HivePartitioningOptions {
private final String mode;
+ private final Boolean requirePartitionFilter;
private final String sourceUriPrefix;
public static final class Builder {
private String mode;
+ private Boolean requirePartitionFilter;
private String sourceUriPrefix;
private Builder() {}
private Builder(HivePartitioningOptions options) {
this.mode = options.mode;
+ this.requirePartitionFilter = options.requirePartitionFilter;
this.sourceUriPrefix = options.sourceUriPrefix;
}
@@ -50,6 +53,17 @@ public Builder setMode(String mode) {
return this;
}
+ /**
+ * [Optional] If set to true, queries over this table require a partition filter that can be
+ * used for partition elimination to be specified. Note that this field should only be true when
+ * creating a permanent external table or querying a temporary external table. Hive-partitioned
+ * loads with requirePartitionFilter explicitly set to true will fail.
+ */
+ public Builder setRequirePartitionFilter(Boolean requirePartitionFilter) {
+ this.requirePartitionFilter = requirePartitionFilter;
+ return this;
+ }
+
/**
* [Optional] When hive partition detection is requested, a common prefix for all source uris
* should be supplied. The prefix must end immediately before the partition key encoding begins.
@@ -72,6 +86,7 @@ public HivePartitioningOptions build() {
private HivePartitioningOptions(Builder builder) {
this.mode = builder.mode;
+ this.requirePartitionFilter = builder.requirePartitionFilter;
this.sourceUriPrefix = builder.sourceUriPrefix;
}
@@ -80,6 +95,14 @@ public String getMode() {
return mode;
}
+ /**
+ * Returns true if a partition filter (that can be used for partition elimination) is required for
+ * queries over this table.
+ */
+ public Boolean getRequirePartitionFilter() {
+ return requirePartitionFilter;
+ }
+
/* Returns the sourceUriPrefix of hive partitioning */
public String getSourceUriPrefix() {
return sourceUriPrefix;
@@ -99,6 +122,7 @@ public static Builder newBuilder() {
public String toString() {
return MoreObjects.toStringHelper(this)
.add("mode", mode)
+ .add("requirePartitionFilter", requirePartitionFilter)
.add("sourceUriPrefix", sourceUriPrefix)
.toString();
}
@@ -109,6 +133,8 @@ public boolean equals(Object obj) {
|| obj != null
&& obj.getClass().equals(HivePartitioningOptions.class)
&& Objects.equals(mode, ((HivePartitioningOptions) obj).getMode())
+ && Objects.equals(
+ requirePartitionFilter, ((HivePartitioningOptions) obj).getRequirePartitionFilter())
&& Objects.equals(
sourceUriPrefix, ((HivePartitioningOptions) obj).getSourceUriPrefix());
}
@@ -122,6 +148,7 @@ com.google.api.services.bigquery.model.HivePartitioningOptions toPb() {
com.google.api.services.bigquery.model.HivePartitioningOptions options =
new com.google.api.services.bigquery.model.HivePartitioningOptions();
options.setMode(mode);
+ options.setRequirePartitionFilter(requirePartitionFilter);
options.setSourceUriPrefix(sourceUriPrefix);
return options;
}
@@ -132,6 +159,9 @@ static HivePartitioningOptions fromPb(
if (options.getMode() != null) {
builder.setMode(options.getMode());
}
+ if (options.getRequirePartitionFilter() != null) {
+ builder.setRequirePartitionFilter(options.getRequirePartitionFilter());
+ }
if (options.getSourceUriPrefix() != null) {
builder.setSourceUriPrefix(options.getSourceUriPrefix());
}
diff --git a/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/HivePartitioningOptionsTest.java b/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/HivePartitioningOptionsTest.java
index 6c2aa5427..05bf05b9a 100644
--- a/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/HivePartitioningOptionsTest.java
+++ b/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/HivePartitioningOptionsTest.java
@@ -24,9 +24,11 @@ public class HivePartitioningOptionsTest {
private static final String MODE = "STRING";
private static final String SOURCE_URI_PREFIX = "gs://bucket/path_to_table";
+ private static final Boolean REQUIRE_PARTITION_FILTER = true;
private static final HivePartitioningOptions HIVE_PARTITIONING_OPTIONS =
HivePartitioningOptions.newBuilder()
.setMode(MODE)
+ .setRequirePartitionFilter(REQUIRE_PARTITION_FILTER)
.setSourceUriPrefix(SOURCE_URI_PREFIX)
.build();
@@ -49,6 +51,8 @@ public void testToBuilderIncomplete() {
@Test
public void testBuilder() {
assertThat(HIVE_PARTITIONING_OPTIONS.getMode()).isEqualTo(MODE);
+ assertThat(HIVE_PARTITIONING_OPTIONS.getRequirePartitionFilter())
+ .isEqualTo(REQUIRE_PARTITION_FILTER);
assertThat(HIVE_PARTITIONING_OPTIONS.getSourceUriPrefix()).isEqualTo(SOURCE_URI_PREFIX);
}
@@ -62,6 +66,7 @@ public void testToAndFromPb() {
private void compareHivePartitioningOptions(
HivePartitioningOptions expected, HivePartitioningOptions value) {
assertThat(value.getMode()).isEqualTo(expected.getMode());
+ assertThat(value.getRequirePartitionFilter()).isEqualTo(expected.getRequirePartitionFilter());
assertThat(value.getSourceUriPrefix()).isEqualTo(expected.getSourceUriPrefix());
assertThat(value.toString()).isEqualTo(expected.toString());
assertThat(value.hashCode()).isEqualTo(expected.hashCode());
diff --git a/pom.xml b/pom.xml
index b2b916977..c9b580e9d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,7 +63,7 @@
UTF-8
github
google-cloud-bigquery-parent
- v2-rev20200916-1.30.10
+ v2-rev20200925-1.30.10