Colin Bookman
Colin Bookman

Reputation: 51

Using Golang how do I get a list of Dataset tables with metadata

using the BigQuery Golang sdk, how does one get a list of tables in a dataset that also contains their metadata?

Upvotes: 1

Views: 747

Answers (1)

Colin Bookman
Colin Bookman

Reputation: 51

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
}    

Upvotes: 2

Related Questions