github.com/instill-ai/component@v0.16.0-beta/pkg/connector/bigquery/v0/insert.go (about) 1 package bigquery 2 3 import ( 4 "context" 5 "fmt" 6 7 "cloud.google.com/go/bigquery" 8 "google.golang.org/protobuf/types/known/structpb" 9 ) 10 11 type DataSaver struct { 12 Schema bigquery.Schema 13 DataMap map[string]bigquery.Value 14 } 15 16 func (v DataSaver) Save() (row map[string]bigquery.Value, insertID string, err error) { 17 return v.DataMap, bigquery.NoDedupeID, nil 18 } 19 20 func insertDataToBigQuery(projectID, datasetID, tableName string, valueSaver DataSaver, client *bigquery.Client) error { 21 ctx := context.Background() 22 tableRef := client.Dataset(datasetID).Table(tableName) 23 inserter := tableRef.Inserter() 24 if err := inserter.Put(ctx, valueSaver); err != nil { 25 return fmt.Errorf("error inserting data: %v", err) 26 } 27 fmt.Printf("Data inserted into %s.%s.%s.\n", projectID, datasetID, tableName) 28 return nil 29 } 30 31 func getDataSaver(input *structpb.Struct, schema bigquery.Schema) (DataSaver, error) { 32 inputObj := input.GetFields()["data"].GetStructValue() 33 dataMap := map[string]bigquery.Value{} 34 for _, sc := range schema { 35 dataMap[sc.Name] = inputObj.GetFields()[sc.Name].AsInterface() 36 } 37 return DataSaver{Schema: schema, DataMap: dataMap}, nil 38 }