in bigquery/main.go [333:358]
func (bq *actualBQ) EnsureTable(ctx context.Context, tableName string) error {
// Check for existence of table, create if false
bq.table = bq.dataset.Table(tableName)
schema, err := bigquery.InferSchema(bqRow{})
if err != nil {
return fmt.Errorf("failed to infer schema: %v", err)
}
metadata, err := bq.dataset.Table(tableName).Metadata(ctx)
if err != nil {
log.Warningf("Error obtaining table metadata: %q;Creating new BigQuery table: %q", err, tableName)
// Create table if it does not exist.
if err := bq.table.Create(ctx, &bigquery.TableMetadata{Name: tableName, Description: "BigQuery Notifier Build Data Table", Schema: schema}); err != nil {
return fmt.Errorf("failed to initialize table %v: ", err)
}
} else if len(metadata.Schema) == 0 {
log.Warningf("No schema found for table, writing new schema for table: %v", tableName)
update := bigquery.TableMetadataToUpdate{
Schema: schema,
}
if _, err := bq.table.Update(ctx, update, metadata.ETag); err != nil {
return fmt.Errorf("error: unable to update schema of table: %v", err)
}
}
return nil
}