Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit ccc2bb3

Browse files
authoredMar 20, 2020
feat: add support for Hive partitioning options when creating external tables (#235) (#236)
1 parent a1e0656 commit ccc2bb3

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed
 

‎google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/ExternalTableDefinition.java

+32
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,14 @@ public Builder setFormatOptions(FormatOptions formatOptions) {
135135
/** Sets the table schema. */
136136
public abstract Builder setSchema(Schema schema);
137137

138+
/** Sets the table Hive partitioning options. */
139+
public Builder setHivePartitioningOptions(HivePartitioningOptions hivePartitioningOptions) {
140+
return setHivePartitioningOptionsInner(hivePartitioningOptions);
141+
};
142+
143+
abstract Builder setHivePartitioningOptionsInner(
144+
HivePartitioningOptions hivePartitioningOptions);
145+
138146
/** Creates an {@code ExternalTableDefinition} object. */
139147
@Override
140148
public abstract ExternalTableDefinition build();
@@ -212,6 +220,19 @@ public <F extends FormatOptions> F getFormatOptions() {
212220
@Nullable
213221
public abstract Boolean getAutodetect();
214222

223+
/**
224+
* [Experimental] Returns the HivePartitioningOptions when the data layout follows Hive
225+
* partitioning convention
226+
*/
227+
@SuppressWarnings("unchecked")
228+
@Nullable
229+
public HivePartitioningOptions getHivePartitioningOptions() {
230+
return getHivePartitioningOptionsInner();
231+
}
232+
233+
@Nullable
234+
abstract HivePartitioningOptions getHivePartitioningOptionsInner();
235+
215236
/** Returns a builder for the {@code ExternalTableDefinition} object. */
216237
public abstract Builder toBuilder();
217238

@@ -257,6 +278,9 @@ com.google.api.services.bigquery.model.ExternalDataConfiguration toExternalDataC
257278
if (getAutodetect() != null) {
258279
externalConfigurationPb.setAutodetect(getAutodetect());
259280
}
281+
if (getHivePartitioningOptions() != null) {
282+
externalConfigurationPb.setHivePartitioningOptions(getHivePartitioningOptions().toPb());
283+
}
260284
return externalConfigurationPb;
261285
}
262286

@@ -405,6 +429,10 @@ static ExternalTableDefinition fromPb(Table tablePb) {
405429
}
406430
builder.setMaxBadRecords(externalDataConfiguration.getMaxBadRecords());
407431
builder.setAutodetect(externalDataConfiguration.getAutodetect());
432+
if (externalDataConfiguration.getHivePartitioningOptions() != null) {
433+
builder.setHivePartitioningOptions(
434+
HivePartitioningOptions.fromPb(externalDataConfiguration.getHivePartitioningOptions()));
435+
}
408436
}
409437
return builder.build();
410438
}
@@ -444,6 +472,10 @@ static ExternalTableDefinition fromExternalDataConfiguration(
444472
if (externalDataConfiguration.getAutodetect() != null) {
445473
builder.setAutodetect(externalDataConfiguration.getAutodetect());
446474
}
475+
if (externalDataConfiguration.getHivePartitioningOptions() != null) {
476+
builder.setHivePartitioningOptions(
477+
HivePartitioningOptions.fromPb(externalDataConfiguration.getHivePartitioningOptions()));
478+
}
447479
return builder.build();
448480
}
449481
}

‎google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/HivePartitioningOptions.java

+10
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,16 @@ public String toString() {
103103
.toString();
104104
}
105105

106+
@Override
107+
public boolean equals(Object obj) {
108+
return obj == this
109+
|| obj != null
110+
&& obj.getClass().equals(HivePartitioningOptions.class)
111+
&& Objects.equals(mode, ((HivePartitioningOptions) obj).getMode())
112+
&& Objects.equals(
113+
sourceUriPrefix, ((HivePartitioningOptions) obj).getSourceUriPrefix());
114+
}
115+
106116
@Override
107117
public int hashCode() {
108118
return Objects.hash(mode, sourceUriPrefix);

‎google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/ExternalTableDefinitionTest.java

+8
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,18 @@ public class ExternalTableDefinitionTest {
4646
private static final String COMPRESSION = "GZIP";
4747
private static final Boolean AUTODETECT = true;
4848
private static final CsvOptions CSV_OPTIONS = CsvOptions.newBuilder().build();
49+
private static final HivePartitioningOptions HIVE_PARTITIONING_OPTIONS =
50+
HivePartitioningOptions.newBuilder()
51+
.setMode("AUTO")
52+
.setSourceUriPrefix(SOURCE_URIS.get(0))
53+
.build();
4954
private static final ExternalTableDefinition EXTERNAL_TABLE_DEFINITION =
5055
ExternalTableDefinition.newBuilder(SOURCE_URIS, TABLE_SCHEMA, CSV_OPTIONS)
5156
.setCompression(COMPRESSION)
5257
.setIgnoreUnknownValues(IGNORE_UNKNOWN_VALUES)
5358
.setMaxBadRecords(MAX_BAD_RECORDS)
5459
.setAutodetect(AUTODETECT)
60+
.setHivePartitioningOptions(HIVE_PARTITIONING_OPTIONS)
5561
.build();
5662

5763
@Test
@@ -83,6 +89,7 @@ public void testBuilder() {
8389
assertEquals(TABLE_SCHEMA, EXTERNAL_TABLE_DEFINITION.getSchema());
8490
assertEquals(SOURCE_URIS, EXTERNAL_TABLE_DEFINITION.getSourceUris());
8591
assertEquals(AUTODETECT, EXTERNAL_TABLE_DEFINITION.getAutodetect());
92+
assertEquals(HIVE_PARTITIONING_OPTIONS, EXTERNAL_TABLE_DEFINITION.getHivePartitioningOptions());
8693
}
8794

8895
@Test
@@ -107,5 +114,6 @@ private void compareExternalTableDefinition(
107114
assertEquals(expected.getSourceUris(), value.getSourceUris());
108115
assertEquals(expected.hashCode(), value.hashCode());
109116
assertEquals(expected.getAutodetect(), value.getAutodetect());
117+
assertEquals(expected.getHivePartitioningOptions(), value.getHivePartitioningOptions());
110118
}
111119
}

0 commit comments

Comments
 (0)
Failed to load comments.