@@ -45,6 +45,10 @@ type DatasetMetadata struct {
4545 Access []* AccessEntry // Access permissions.
4646 DefaultEncryptionConfig * EncryptionConfig
4747
48+ // DefaultPartitionExpiration is the default expiration time for
49+ // all newly created partitioned tables in the dataset.
50+ DefaultPartitionExpiration time.Duration
51+
4852 // These fields are read-only.
4953 CreationTime time.Time
5054 LastModifiedTime time.Time // When the dataset or any of its tables were modified.
@@ -91,6 +95,11 @@ type DatasetMetadataToUpdate struct {
9195 // If set to time.Duration(0), new tables never expire.
9296 DefaultTableExpiration optional.Duration
9397
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+
94103 // DefaultEncryptionConfig defines CMEK settings for new resources created
95104 // in the dataset.
96105 DefaultEncryptionConfig * EncryptionConfig
@@ -164,6 +173,7 @@ func (dm *DatasetMetadata) toBQ() (*bq.Dataset, error) {
164173 ds .Description = dm .Description
165174 ds .Location = dm .Location
166175 ds .DefaultTableExpirationMs = int64 (dm .DefaultTableExpiration / time .Millisecond )
176+ ds .DefaultPartitionExpirationMs = int64 (dm .DefaultPartitionExpiration / time .Millisecond )
167177 ds .Labels = dm .Labels
168178 var err error
169179 ds .Access , err = accessListToBQ (dm .Access )
@@ -245,16 +255,17 @@ func (d *Dataset) Metadata(ctx context.Context) (md *DatasetMetadata, err error)
245255
246256func bqToDatasetMetadata (d * bq.Dataset , c * Client ) (* DatasetMetadata , error ) {
247257 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 ,
258269 }
259270 for _ , a := range d .Access {
260271 e , err := bqToAccessEntry (a , c )
@@ -324,6 +335,15 @@ func (dm *DatasetMetadataToUpdate) toBQ() (*bq.Dataset, error) {
324335 ds .DefaultTableExpirationMs = int64 (dur / time .Millisecond )
325336 }
326337 }
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+ }
327347 if dm .DefaultEncryptionConfig != nil {
328348 ds .DefaultEncryptionConfiguration = dm .DefaultEncryptionConfig .toBQ ()
329349 ds .DefaultEncryptionConfiguration .ForceSendFields = []string {"KmsKeyName" }
0 commit comments