-
Notifications
You must be signed in to change notification settings - Fork 26
/
bigquery.go
38 lines (33 loc) · 923 Bytes
/
bigquery.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package bigquery
import (
"cloud.google.com/go/bigquery"
"context"
"errors"
"fmt"
"google.golang.org/api/option"
"k8s.io/klog/v2"
)
type Client struct {
*bigquery.Client
}
func NewBigQueryClient(project, credentialsFile string) (*Client, error) {
bc, err := bigquery.NewClient(context.Background(), project, option.WithCredentialsFile(credentialsFile))
if err != nil {
return nil, fmt.Errorf("unable to create BigQuery client: %v", err)
}
return &Client{bc}, nil
}
func (c Client) WriteRows(ctx context.Context, dataset, table string, rows interface{}) error {
inserter := c.Dataset(dataset).Table(table).Inserter()
err := inserter.Put(ctx, rows)
if err != nil {
var multiErr bigquery.PutMultiError
if errors.As(err, &multiErr) {
for _, putErr := range multiErr {
klog.Errorf("failed to insert row %d with err: %v \n", putErr.RowIndex, putErr.Error())
}
}
return err
}
return nil
}