import (
"context"
"fmt"
"io"
"cloud.google.com/go/bigquery"
)
// createTableComplexSchema demonstrates creating a BigQuery table and specifying a complex schema that includes
// an array of Struct types.
func createTableComplexSchema(w io.Writer, projectID, datasetID, tableID string) error {
// projectID := "my-project-id"
// datasetID := "mydatasetid"
// tableID := "mytableid"
ctx := context.Background()
client, err := bigquery.NewClient(ctx, projectID)
if err != nil {
return fmt.Errorf("bigquery.NewClient: %w", err)
}
defer client.Close()
sampleSchema := bigquery.Schema{
{Name: "id", Type: bigquery.StringFieldType},
{Name: "first_name", Type: bigquery.StringFieldType},
{Name: "last_name", Type: bigquery.StringFieldType},
{Name: "dob", Type: bigquery.DateFieldType},
{Name: "addresses",
Type: bigquery.RecordFieldType,
Repeated: true,
Schema: bigquery.Schema{
{Name: "status", Type: bigquery.StringFieldType},
{Name: "address", Type: bigquery.StringFieldType},
{Name: "city", Type: bigquery.StringFieldType},
{Name: "state", Type: bigquery.StringFieldType},
{Name: "zip", Type: bigquery.StringFieldType},
{Name: "numberOfYears", Type: bigquery.StringFieldType},
}},
}
metaData := &bigquery.TableMetadata{
Schema: sampleSchema,
}
tableRef := client.Dataset(datasetID).Table(tableID)
if err := tableRef.Create(ctx, metaData); err != nil {
return err
}
fmt.Fprintf(w, "created table %s\n", tableRef.FullyQualifiedName())
return nil
}