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  }