@@ -45,6 +45,10 @@ type DatasetMetadata struct {
45
45
Access []* AccessEntry // Access permissions.
46
46
DefaultEncryptionConfig * EncryptionConfig
47
47
48
+ // DefaultPartitionExpiration is the default expiration time for
49
+ // all newly created partitioned tables in the dataset.
50
+ DefaultPartitionExpiration time.Duration
51
+
48
52
// These fields are read-only.
49
53
CreationTime time.Time
50
54
LastModifiedTime time.Time // When the dataset or any of its tables were modified.
@@ -91,6 +95,11 @@ type DatasetMetadataToUpdate struct {
91
95
// If set to time.Duration(0), new tables never expire.
92
96
DefaultTableExpiration optional.Duration
93
97
98
+ // DefaultTableExpiration is the default expiration time for
99
+ // all newly created partitioned tables.
100
+ // If set to time.Duration(0), new table partitions never expire.
101
+ DefaultPartitionExpiration optional.Duration
102
+
94
103
// DefaultEncryptionConfig defines CMEK settings for new resources created
95
104
// in the dataset.
96
105
DefaultEncryptionConfig * EncryptionConfig
@@ -164,6 +173,7 @@ func (dm *DatasetMetadata) toBQ() (*bq.Dataset, error) {
164
173
ds .Description = dm .Description
165
174
ds .Location = dm .Location
166
175
ds .DefaultTableExpirationMs = int64 (dm .DefaultTableExpiration / time .Millisecond )
176
+ ds .DefaultPartitionExpirationMs = int64 (dm .DefaultPartitionExpiration / time .Millisecond )
167
177
ds .Labels = dm .Labels
168
178
var err error
169
179
ds .Access , err = accessListToBQ (dm .Access )
@@ -245,16 +255,17 @@ func (d *Dataset) Metadata(ctx context.Context) (md *DatasetMetadata, err error)
245
255
246
256
func bqToDatasetMetadata (d * bq.Dataset , c * Client ) (* DatasetMetadata , error ) {
247
257
dm := & DatasetMetadata {
248
- CreationTime : unixMillisToTime (d .CreationTime ),
249
- LastModifiedTime : unixMillisToTime (d .LastModifiedTime ),
250
- DefaultTableExpiration : time .Duration (d .DefaultTableExpirationMs ) * time .Millisecond ,
251
- DefaultEncryptionConfig : bqToEncryptionConfig (d .DefaultEncryptionConfiguration ),
252
- Description : d .Description ,
253
- Name : d .FriendlyName ,
254
- FullID : d .Id ,
255
- Location : d .Location ,
256
- Labels : d .Labels ,
257
- ETag : d .Etag ,
258
+ CreationTime : unixMillisToTime (d .CreationTime ),
259
+ LastModifiedTime : unixMillisToTime (d .LastModifiedTime ),
260
+ DefaultTableExpiration : time .Duration (d .DefaultTableExpirationMs ) * time .Millisecond ,
261
+ DefaultPartitionExpiration : time .Duration (d .DefaultPartitionExpirationMs ) * time .Millisecond ,
262
+ DefaultEncryptionConfig : bqToEncryptionConfig (d .DefaultEncryptionConfiguration ),
263
+ Description : d .Description ,
264
+ Name : d .FriendlyName ,
265
+ FullID : d .Id ,
266
+ Location : d .Location ,
267
+ Labels : d .Labels ,
268
+ ETag : d .Etag ,
258
269
}
259
270
for _ , a := range d .Access {
260
271
e , err := bqToAccessEntry (a , c )
@@ -324,6 +335,15 @@ func (dm *DatasetMetadataToUpdate) toBQ() (*bq.Dataset, error) {
324
335
ds .DefaultTableExpirationMs = int64 (dur / time .Millisecond )
325
336
}
326
337
}
338
+ if dm .DefaultPartitionExpiration != nil {
339
+ dur := optional .ToDuration (dm .DefaultPartitionExpiration )
340
+ if dur == 0 {
341
+ // Send a null to delete the field.
342
+ ds .NullFields = append (ds .NullFields , "DefaultPartitionExpirationMs" )
343
+ } else {
344
+ ds .DefaultPartitionExpirationMs = int64 (dur / time .Millisecond )
345
+ }
346
+ }
327
347
if dm .DefaultEncryptionConfig != nil {
328
348
ds .DefaultEncryptionConfiguration = dm .DefaultEncryptionConfig .toBQ ()
329
349
ds .DefaultEncryptionConfiguration .ForceSendFields = []string {"KmsKeyName" }
0 commit comments