使用Golang如何获取带有元数据的数据集表的列表

时间:2018-10-19 17:42:31

标签: go google-cloud-platform google-bigquery

使用BigQuery Golang sdk,如何获取数据集中包含其元数据的表的列表?

1 个答案:

答案 0 :(得分:2)

package main

import (
        "context"
        "cloud.google.com/go/bigquery"
        "google.golang.org/api/iterator"
        "fmt"
        "encoding/json"
)

func main() {
        tables, metas, err := tableMetadatas(context.Background(), "my-project", "my-dataset")
        if err != nil {
                fmt.Println("Error: %v", err)
        } else {
                fmt.Println("Tables:")
                bt, _ := json.MarshalIndent(tables, "", "  ")
                fmt.Println(string(bt))

                fmt.Println("Table Metadatas:")
                bm, _ := json.MarshalIndent(metas, "", "  ")
                fmt.Println(string(bm))
        }
}

// Gets a list of Tables & Their respective Metadata in a Dataset
func tableMetadatas(ctx context.Context, project string, dataset string) ([]*bigquery.Table, []*bigquery.TableMetadata, error) {
        c, err := bigquery.NewClient(ctx, project)
        if err != nil {
                return nil, nil, err
        }

        metas := make([]*bigquery.TableMetadata, 0)
        tables := make([]*bigquery.Table, 0)
        d := c.Dataset(dataset)
        it := d.Tables(ctx)
        for {
                t, err := it.Next()
                if err == iterator.Done {
                        break;
                }

                if err != nil {
                        return nil, nil, err
                }

                m, err := t.Metadata(ctx)
                if err != nil {
                        return nil, nil, err
                }

                tables = append(tables, t)
                metas = append(metas, m)
        }
        return tables, metas, nil
}