Skip to content

Commit a57dbdf

Browse files
feat: add additional time partitioning intervals (#737)
* feat: add additional time partitioning intervals * docstring updates based on comments
1 parent 4e0d5a9 commit a57dbdf

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

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

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,20 @@ public abstract class TimePartitioning implements Serializable {
3737
private static final long serialVersionUID = -8565064035346940951L;
3838

3939
/**
40-
* The supported types are DAY, which will generate one partition per day, and HOUR, which will
41-
* generate one partition per hour. (Providing an empty string used to cause an error, but in
42-
* OnePlatform the field will be treated as unset.)
40+
* [Optional] The supported types are DAY, HOUR, MONTH, and YEAR, which will generate one
41+
* partition per day, hour, month, and year, respectively. When the interval is not specified, the
42+
* default behavior is DAY.
4343
*/
4444
public enum Type {
4545

46-
/** Table is partitioned per day, based on data loading time. */
46+
/** Table is partitioned per day. */
4747
DAY,
48-
/** Table is partitioned per hour, based on data loading time. */
49-
HOUR
48+
/** Table is partitioned per hour. */
49+
HOUR,
50+
/** Table is partitioned per month. */
51+
MONTH,
52+
/** Table is partitioned per year. */
53+
YEAR
5054
}
5155

5256
TimePartitioning() {

google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TimePartitioningTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public class TimePartitioningTest {
2929

3030
private static final Type TYPE_DAY = Type.DAY;
3131
private static final Type TYPE_HOUR = Type.HOUR;
32+
private static final Type TYPE_MONTH = Type.MONTH;
33+
private static final Type TYPE_YEAR = Type.YEAR;
3234
private static final long EXPIRATION_MS = 42;
3335
private static final boolean REQUIRE_PARTITION_FILTER = false;
3436
private static final String FIELD = "field";
@@ -44,11 +46,25 @@ public class TimePartitioningTest {
4446
.setRequirePartitionFilter(REQUIRE_PARTITION_FILTER)
4547
.setField(FIELD)
4648
.build();
49+
private static final TimePartitioning TIME_PARTITIONING_MONTH =
50+
TimePartitioning.newBuilder(TYPE_MONTH)
51+
.setExpirationMs(EXPIRATION_MS)
52+
.setRequirePartitionFilter(REQUIRE_PARTITION_FILTER)
53+
.setField(FIELD)
54+
.build();
55+
private static final TimePartitioning TIME_PARTITIONING_YEAR =
56+
TimePartitioning.newBuilder(TYPE_YEAR)
57+
.setExpirationMs(EXPIRATION_MS)
58+
.setRequirePartitionFilter(REQUIRE_PARTITION_FILTER)
59+
.setField(FIELD)
60+
.build();
4761

4862
@Test
4963
public void testOf() {
5064
assertEquals(TYPE_DAY, TIME_PARTITIONING_DAY.getType());
5165
assertEquals(TYPE_HOUR, TIME_PARTITIONING_HOUR.getType());
66+
assertEquals(TYPE_MONTH, TIME_PARTITIONING_MONTH.getType());
67+
assertEquals(TYPE_YEAR, TIME_PARTITIONING_YEAR.getType());
5268
assertEquals(EXPIRATION_MS, TIME_PARTITIONING_DAY.getExpirationMs().longValue());
5369
assertEquals(REQUIRE_PARTITION_FILTER, TIME_PARTITIONING_DAY.getRequirePartitionFilter());
5470
assertEquals(FIELD, TIME_PARTITIONING_DAY.getField());

0 commit comments

Comments
 (0)