google-cloud-go: Bigquery sets expiration Table expiration time to today, even if date is in the future
Client
BigQuery
Describe Your Environment
gLinux
Expected Behavior
Sets Table expiration date to Dec 1st 9999
Actual Behavior
Sets Table expiration date to current timestamp, causing table to be deleted.
Example Code:
package main
import (
"fmt"
"time"
"log"
"context"
"cloud.google.com/go/bigquery"
"encoding/json"
)
func main() {
ctx := context.Background()
c, err := bigquery.NewClient(ctx, "snap-tests-217018")
if err != nil {
log.Fatal("failed to make client", err)
}
d := c.Dataset("testdataset")
md, err := d.Metadata(ctx)
if err != nil {
log.Fatal("failed to get dataset metadata", err)
}
bmd, _ := json.MarshalIndent(md, "", " ")
log.Println("Datset Metadata", string(bmd))
t := d.Table("testtable")
mt, err := t.Metadata(ctx)
if err != nil {
log.Fatal("failed to get table metadata", err)
}
bmt, _ := json.MarshalIndent(mt, "", " ")
log.Println("Table Metadata", string(bmt))
mt2, err := t.Update(ctx, bigquery.TableMetadataToUpdate{
Description: fmt.Sprintf("My Table (timestamp - %d)", time.Now().Unix()),
ExpirationTime: time.Date(3119, time.December, 10, 23, 0, 0, 0, time.UTC),
}, "")
if err != nil {
log.Fatal("Failed to change table metadata", err)
}
bmt2, _ := json.MarshalIndent(mt2, "", " ")
log.Println("Changed Table Metadata", string(bmt2))
}
(Note output shows Expiration time is not 3119, but current date && no error was thrown)
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 15 (5 by maintainers)
Correct. Since the library doesn’t ask for Unix Time, but a time.Time. The library should return an error for times > year 2262.
When time.TIme.IsZero(), we silently ignore the value & do nothing. Can the SDK throw an error that Zero Times are not supported… either set a time of > 0 || NeverExpire.