2018-06-19 15:30:26 +02:00
|
|
|
// Copyright 2016 Google LLC
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
package bigquery_test
|
|
|
|
|
|
|
|
import (
|
2019-03-17 20:19:56 +01:00
|
|
|
"context"
|
2018-06-19 15:30:26 +02:00
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"cloud.google.com/go/bigquery"
|
|
|
|
"google.golang.org/api/iterator"
|
|
|
|
)
|
|
|
|
|
|
|
|
func ExampleNewClient() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
_ = client // TODO: Use client.
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleClient_Dataset() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
ds := client.Dataset("my_dataset")
|
|
|
|
fmt.Println(ds)
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleClient_DatasetInProject() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
ds := client.DatasetInProject("their-project-id", "their-dataset")
|
|
|
|
fmt.Println(ds)
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleClient_Datasets() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
it := client.Datasets(ctx)
|
|
|
|
_ = it // TODO: iterate using Next or iterator.Pager.
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleClient_DatasetsInProject() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
it := client.DatasetsInProject(ctx, "their-project-id")
|
|
|
|
_ = it // TODO: iterate using Next or iterator.Pager.
|
|
|
|
}
|
|
|
|
|
|
|
|
func getJobID() string { return "" }
|
|
|
|
|
|
|
|
func ExampleClient_JobFromID() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
jobID := getJobID() // Get a job ID using Job.ID, the console or elsewhere.
|
|
|
|
job, err := client.JobFromID(ctx, jobID)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
fmt.Println(job.LastStatus()) // Display the job's status.
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleClient_Jobs() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
it := client.Jobs(ctx)
|
|
|
|
it.State = bigquery.Running // list only running jobs.
|
|
|
|
_ = it // TODO: iterate using Next or iterator.Pager.
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleNewGCSReference() {
|
|
|
|
gcsRef := bigquery.NewGCSReference("gs://my-bucket/my-object")
|
|
|
|
fmt.Println(gcsRef)
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleClient_Query() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
q := client.Query("select name, num from t1")
|
|
|
|
q.DefaultProjectID = "project-id"
|
|
|
|
// TODO: set other options on the Query.
|
|
|
|
// TODO: Call Query.Run or Query.Read.
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleClient_Query_parameters() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
q := client.Query("select num from t1 where name = @user")
|
|
|
|
q.Parameters = []bigquery.QueryParameter{
|
|
|
|
{Name: "user", Value: "Elizabeth"},
|
|
|
|
}
|
|
|
|
// TODO: set other options on the Query.
|
|
|
|
// TODO: Call Query.Run or Query.Read.
|
|
|
|
}
|
|
|
|
|
|
|
|
// This example demonstrates how to run a query job on a table
|
|
|
|
// with a customer-managed encryption key. The same
|
|
|
|
// applies to load and copy jobs as well.
|
|
|
|
func ExampleClient_Query_encryptionKey() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
q := client.Query("select name, num from t1")
|
|
|
|
// TODO: Replace this key with a key you have created in Cloud KMS.
|
|
|
|
keyName := "projects/P/locations/L/keyRings/R/cryptoKeys/K"
|
|
|
|
q.DestinationEncryptionConfig = &bigquery.EncryptionConfig{KMSKeyName: keyName}
|
|
|
|
// TODO: set other options on the Query.
|
|
|
|
// TODO: Call Query.Run or Query.Read.
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleQuery_Read() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
q := client.Query("select name, num from t1")
|
|
|
|
it, err := q.Read(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
_ = it // TODO: iterate using Next or iterator.Pager.
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleRowIterator_Next() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
q := client.Query("select name, num from t1")
|
|
|
|
it, err := q.Read(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
for {
|
|
|
|
var row []bigquery.Value
|
|
|
|
err := it.Next(&row)
|
|
|
|
if err == iterator.Done {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
fmt.Println(row)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleRowIterator_Next_struct() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
|
|
|
|
type score struct {
|
|
|
|
Name string
|
|
|
|
Num int
|
|
|
|
}
|
|
|
|
|
|
|
|
q := client.Query("select name, num from t1")
|
|
|
|
it, err := q.Read(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
for {
|
|
|
|
var s score
|
|
|
|
err := it.Next(&s)
|
|
|
|
if err == iterator.Done {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
fmt.Println(s)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleJob_Read() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
q := client.Query("select name, num from t1")
|
|
|
|
// Call Query.Run to get a Job, then call Read on the job.
|
|
|
|
// Note: Query.Read is a shorthand for this.
|
|
|
|
job, err := q.Run(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
it, err := job.Read(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
_ = it // TODO: iterate using Next or iterator.Pager.
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleJob_Wait() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
ds := client.Dataset("my_dataset")
|
|
|
|
job, err := ds.Table("t1").CopierFrom(ds.Table("t2")).Run(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
status, err := job.Wait(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
if status.Err() != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleJob_Config() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
ds := client.Dataset("my_dataset")
|
|
|
|
job, err := ds.Table("t1").CopierFrom(ds.Table("t2")).Run(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
jc, err := job.Config()
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
copyConfig := jc.(*bigquery.CopyConfig)
|
|
|
|
fmt.Println(copyConfig.Dst, copyConfig.CreateDisposition)
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleDataset_Create() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
ds := client.Dataset("my_dataset")
|
|
|
|
if err := ds.Create(ctx, &bigquery.DatasetMetadata{Location: "EU"}); err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleDataset_Delete() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
if err := client.Dataset("my_dataset").Delete(ctx); err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleDataset_Metadata() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
md, err := client.Dataset("my_dataset").Metadata(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
fmt.Println(md)
|
|
|
|
}
|
|
|
|
|
|
|
|
// This example illustrates how to perform a read-modify-write sequence on dataset
|
|
|
|
// metadata. Passing the metadata's ETag to the Update call ensures that the call
|
|
|
|
// will fail if the metadata was changed since the read.
|
|
|
|
func ExampleDataset_Update_readModifyWrite() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
ds := client.Dataset("my_dataset")
|
|
|
|
md, err := ds.Metadata(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
md2, err := ds.Update(ctx,
|
|
|
|
bigquery.DatasetMetadataToUpdate{Name: "new " + md.Name},
|
|
|
|
md.ETag)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
fmt.Println(md2)
|
|
|
|
}
|
|
|
|
|
|
|
|
// To perform a blind write, ignoring the existing state (and possibly overwriting
|
|
|
|
// other updates), pass the empty string as the etag.
|
|
|
|
func ExampleDataset_Update_blindWrite() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
md, err := client.Dataset("my_dataset").Update(ctx, bigquery.DatasetMetadataToUpdate{Name: "blind"}, "")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
fmt.Println(md)
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleDataset_Table() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
// Table creates a reference to the table. It does not create the actual
|
|
|
|
// table in BigQuery; to do so, use Table.Create.
|
|
|
|
t := client.Dataset("my_dataset").Table("my_table")
|
|
|
|
fmt.Println(t)
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleDataset_Tables() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
it := client.Dataset("my_dataset").Tables(ctx)
|
|
|
|
_ = it // TODO: iterate using Next or iterator.Pager.
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleDatasetIterator_Next() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
it := client.Datasets(ctx)
|
|
|
|
for {
|
|
|
|
ds, err := it.Next()
|
|
|
|
if err == iterator.Done {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
fmt.Println(ds)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleInferSchema() {
|
|
|
|
type Item struct {
|
|
|
|
Name string
|
|
|
|
Size float64
|
|
|
|
Count int
|
|
|
|
}
|
|
|
|
schema, err := bigquery.InferSchema(Item{})
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
for _, fs := range schema {
|
|
|
|
fmt.Println(fs.Name, fs.Type)
|
|
|
|
}
|
|
|
|
// Output:
|
|
|
|
// Name STRING
|
|
|
|
// Size FLOAT
|
|
|
|
// Count INTEGER
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleInferSchema_tags() {
|
|
|
|
type Item struct {
|
|
|
|
Name string
|
|
|
|
Size float64
|
|
|
|
Count int `bigquery:"number"`
|
|
|
|
Secret []byte `bigquery:"-"`
|
|
|
|
Optional bigquery.NullBool
|
|
|
|
OptBytes []byte `bigquery:",nullable"`
|
|
|
|
}
|
|
|
|
schema, err := bigquery.InferSchema(Item{})
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
for _, fs := range schema {
|
|
|
|
fmt.Println(fs.Name, fs.Type, fs.Required)
|
|
|
|
}
|
|
|
|
// Output:
|
|
|
|
// Name STRING true
|
|
|
|
// Size FLOAT true
|
|
|
|
// number INTEGER true
|
|
|
|
// Optional BOOLEAN false
|
|
|
|
// OptBytes BYTES false
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleTable_Create() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
t := client.Dataset("my_dataset").Table("new-table")
|
|
|
|
if err := t.Create(ctx, nil); err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Initialize a new table by passing TableMetadata to Table.Create.
|
|
|
|
func ExampleTable_Create_initialize() {
|
|
|
|
ctx := context.Background()
|
|
|
|
// Infer table schema from a Go type.
|
|
|
|
schema, err := bigquery.InferSchema(Item{})
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
t := client.Dataset("my_dataset").Table("new-table")
|
|
|
|
if err := t.Create(ctx,
|
|
|
|
&bigquery.TableMetadata{
|
|
|
|
Name: "My New Table",
|
|
|
|
Schema: schema,
|
|
|
|
ExpirationTime: time.Now().Add(24 * time.Hour),
|
|
|
|
}); err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// This example demonstrates how to create a table with
|
|
|
|
// a customer-managed encryption key.
|
|
|
|
func ExampleTable_Create_encryptionKey() {
|
|
|
|
ctx := context.Background()
|
|
|
|
// Infer table schema from a Go type.
|
|
|
|
schema, err := bigquery.InferSchema(Item{})
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
t := client.Dataset("my_dataset").Table("new-table")
|
|
|
|
|
|
|
|
// TODO: Replace this key with a key you have created in Cloud KMS.
|
|
|
|
keyName := "projects/P/locations/L/keyRings/R/cryptoKeys/K"
|
|
|
|
if err := t.Create(ctx,
|
|
|
|
&bigquery.TableMetadata{
|
|
|
|
Name: "My New Table",
|
|
|
|
Schema: schema,
|
|
|
|
EncryptionConfig: &bigquery.EncryptionConfig{KMSKeyName: keyName},
|
|
|
|
}); err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleTable_Delete() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
if err := client.Dataset("my_dataset").Table("my_table").Delete(ctx); err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleTable_Metadata() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
md, err := client.Dataset("my_dataset").Table("my_table").Metadata(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
fmt.Println(md)
|
|
|
|
}
|
|
|
|
|
2019-03-17 20:19:56 +01:00
|
|
|
func ExampleTable_Inserter() {
|
2018-06-19 15:30:26 +02:00
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
2019-03-17 20:19:56 +01:00
|
|
|
ins := client.Dataset("my_dataset").Table("my_table").Inserter()
|
|
|
|
_ = ins // TODO: Use ins.
|
2018-06-19 15:30:26 +02:00
|
|
|
}
|
|
|
|
|
2019-03-17 20:19:56 +01:00
|
|
|
func ExampleTable_Inserter_options() {
|
2018-06-19 15:30:26 +02:00
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
2019-03-17 20:19:56 +01:00
|
|
|
ins := client.Dataset("my_dataset").Table("my_table").Inserter()
|
|
|
|
ins.SkipInvalidRows = true
|
|
|
|
ins.IgnoreUnknownValues = true
|
|
|
|
_ = ins // TODO: Use ins.
|
2018-06-19 15:30:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleTable_CopierFrom() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
ds := client.Dataset("my_dataset")
|
|
|
|
c := ds.Table("combined").CopierFrom(ds.Table("t1"), ds.Table("t2"))
|
|
|
|
c.WriteDisposition = bigquery.WriteTruncate
|
|
|
|
// TODO: set other options on the Copier.
|
|
|
|
job, err := c.Run(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
status, err := job.Wait(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
if status.Err() != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleTable_ExtractorTo() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
gcsRef := bigquery.NewGCSReference("gs://my-bucket/my-object")
|
|
|
|
gcsRef.FieldDelimiter = ":"
|
|
|
|
// TODO: set other options on the GCSReference.
|
|
|
|
ds := client.Dataset("my_dataset")
|
|
|
|
extractor := ds.Table("my_table").ExtractorTo(gcsRef)
|
|
|
|
extractor.DisableHeader = true
|
|
|
|
// TODO: set other options on the Extractor.
|
|
|
|
job, err := extractor.Run(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
status, err := job.Wait(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
if status.Err() != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleTable_LoaderFrom() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
gcsRef := bigquery.NewGCSReference("gs://my-bucket/my-object")
|
|
|
|
gcsRef.AllowJaggedRows = true
|
|
|
|
gcsRef.MaxBadRecords = 5
|
|
|
|
gcsRef.Schema = schema
|
|
|
|
// TODO: set other options on the GCSReference.
|
|
|
|
ds := client.Dataset("my_dataset")
|
|
|
|
loader := ds.Table("my_table").LoaderFrom(gcsRef)
|
|
|
|
loader.CreateDisposition = bigquery.CreateNever
|
|
|
|
// TODO: set other options on the Loader.
|
|
|
|
job, err := loader.Run(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
status, err := job.Wait(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
if status.Err() != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleTable_LoaderFrom_reader() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
f, err := os.Open("data.csv")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
rs := bigquery.NewReaderSource(f)
|
|
|
|
rs.AllowJaggedRows = true
|
|
|
|
rs.MaxBadRecords = 5
|
|
|
|
rs.Schema = schema
|
|
|
|
// TODO: set other options on the GCSReference.
|
|
|
|
ds := client.Dataset("my_dataset")
|
|
|
|
loader := ds.Table("my_table").LoaderFrom(rs)
|
|
|
|
loader.CreateDisposition = bigquery.CreateNever
|
|
|
|
// TODO: set other options on the Loader.
|
|
|
|
job, err := loader.Run(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
status, err := job.Wait(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
if status.Err() != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleTable_Read() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
it := client.Dataset("my_dataset").Table("my_table").Read(ctx)
|
|
|
|
_ = it // TODO: iterate using Next or iterator.Pager.
|
|
|
|
}
|
|
|
|
|
|
|
|
// This example illustrates how to perform a read-modify-write sequence on table
|
|
|
|
// metadata. Passing the metadata's ETag to the Update call ensures that the call
|
|
|
|
// will fail if the metadata was changed since the read.
|
|
|
|
func ExampleTable_Update_readModifyWrite() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
t := client.Dataset("my_dataset").Table("my_table")
|
|
|
|
md, err := t.Metadata(ctx)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
md2, err := t.Update(ctx,
|
|
|
|
bigquery.TableMetadataToUpdate{Name: "new " + md.Name},
|
|
|
|
md.ETag)
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
fmt.Println(md2)
|
|
|
|
}
|
|
|
|
|
|
|
|
// To perform a blind write, ignoring the existing state (and possibly overwriting
|
|
|
|
// other updates), pass the empty string as the etag.
|
|
|
|
func ExampleTable_Update_blindWrite() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
t := client.Dataset("my_dataset").Table("my_table")
|
|
|
|
tm, err := t.Update(ctx, bigquery.TableMetadataToUpdate{
|
|
|
|
Description: "my favorite table",
|
|
|
|
}, "")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
fmt.Println(tm)
|
|
|
|
}
|
|
|
|
|
|
|
|
func ExampleTableIterator_Next() {
|
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
it := client.Dataset("my_dataset").Tables(ctx)
|
|
|
|
for {
|
|
|
|
t, err := it.Next()
|
|
|
|
if err == iterator.Done {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
fmt.Println(t)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
type Item struct {
|
|
|
|
Name string
|
|
|
|
Size float64
|
|
|
|
Count int
|
|
|
|
}
|
|
|
|
|
|
|
|
// Save implements the ValueSaver interface.
|
|
|
|
func (i *Item) Save() (map[string]bigquery.Value, string, error) {
|
|
|
|
return map[string]bigquery.Value{
|
|
|
|
"Name": i.Name,
|
|
|
|
"Size": i.Size,
|
|
|
|
"Count": i.Count,
|
|
|
|
}, "", nil
|
|
|
|
}
|
|
|
|
|
2019-03-17 20:19:56 +01:00
|
|
|
func ExampleInserter_Put() {
|
2018-06-19 15:30:26 +02:00
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
2019-03-17 20:19:56 +01:00
|
|
|
ins := client.Dataset("my_dataset").Table("my_table").Inserter()
|
2018-06-19 15:30:26 +02:00
|
|
|
// Item implements the ValueSaver interface.
|
|
|
|
items := []*Item{
|
|
|
|
{Name: "n1", Size: 32.6, Count: 7},
|
|
|
|
{Name: "n2", Size: 4, Count: 2},
|
|
|
|
{Name: "n3", Size: 101.5, Count: 1},
|
|
|
|
}
|
2019-03-17 20:19:56 +01:00
|
|
|
if err := ins.Put(ctx, items); err != nil {
|
2018-06-19 15:30:26 +02:00
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var schema bigquery.Schema
|
|
|
|
|
2019-03-17 20:19:56 +01:00
|
|
|
func ExampleInserter_Put_structSaver() {
|
2018-06-19 15:30:26 +02:00
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
2019-03-17 20:19:56 +01:00
|
|
|
ins := client.Dataset("my_dataset").Table("my_table").Inserter()
|
2018-06-19 15:30:26 +02:00
|
|
|
|
|
|
|
type score struct {
|
|
|
|
Name string
|
|
|
|
Num int
|
|
|
|
}
|
|
|
|
|
|
|
|
// Assume schema holds the table's schema.
|
|
|
|
savers := []*bigquery.StructSaver{
|
|
|
|
{Struct: score{Name: "n1", Num: 12}, Schema: schema, InsertID: "id1"},
|
|
|
|
{Struct: score{Name: "n2", Num: 31}, Schema: schema, InsertID: "id2"},
|
|
|
|
{Struct: score{Name: "n3", Num: 7}, Schema: schema, InsertID: "id3"},
|
|
|
|
}
|
2019-03-17 20:19:56 +01:00
|
|
|
if err := ins.Put(ctx, savers); err != nil {
|
2018-06-19 15:30:26 +02:00
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-17 20:19:56 +01:00
|
|
|
func ExampleInserter_Put_struct() {
|
2018-06-19 15:30:26 +02:00
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
2019-03-17 20:19:56 +01:00
|
|
|
ins := client.Dataset("my_dataset").Table("my_table").Inserter()
|
2018-06-19 15:30:26 +02:00
|
|
|
|
|
|
|
type score struct {
|
|
|
|
Name string
|
|
|
|
Num int
|
|
|
|
}
|
|
|
|
scores := []score{
|
|
|
|
{Name: "n1", Num: 12},
|
|
|
|
{Name: "n2", Num: 31},
|
|
|
|
{Name: "n3", Num: 7},
|
|
|
|
}
|
|
|
|
// Schema is inferred from the score type.
|
2019-03-17 20:19:56 +01:00
|
|
|
if err := ins.Put(ctx, scores); err != nil {
|
2018-06-19 15:30:26 +02:00
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-17 20:19:56 +01:00
|
|
|
func ExampleInserter_Put_valuesSaver() {
|
2018-06-19 15:30:26 +02:00
|
|
|
ctx := context.Background()
|
|
|
|
client, err := bigquery.NewClient(ctx, "project-id")
|
|
|
|
if err != nil {
|
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
|
2019-03-17 20:19:56 +01:00
|
|
|
ins := client.Dataset("my_dataset").Table("my_table").Inserter()
|
2018-06-19 15:30:26 +02:00
|
|
|
|
|
|
|
var vss []*bigquery.ValuesSaver
|
|
|
|
for i, name := range []string{"n1", "n2", "n3"} {
|
|
|
|
// Assume schema holds the table's schema.
|
|
|
|
vss = append(vss, &bigquery.ValuesSaver{
|
|
|
|
Schema: schema,
|
|
|
|
InsertID: name,
|
|
|
|
Row: []bigquery.Value{name, int64(i)},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2019-03-17 20:19:56 +01:00
|
|
|
if err := ins.Put(ctx, vss); err != nil {
|
2018-06-19 15:30:26 +02:00
|
|
|
// TODO: Handle error.
|
|
|
|
}
|
|
|
|
}
|