bigquery

package module
v0.2.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 31, 2020 License: MIT Imports: 14 Imported by: 0

README

BigQuery SQL Driver for Golang

This is an implementation of the BigQuery Client as a database/sql/driver for easy integration and usage.

Goals of project

This project is meant to be a basic database/sql driver implementation for Golang so that developers can easily use tools like Gorm, and *sql.DB functions, with Google's BigQuery database.

Usage

Check out the example application in the examples directory, for a few examples.

Authentication

As this is using the Google Cloud Go SDK, you will need to have your credentials available via the GOOGLE_APPLICATION_CREDENTIALS environment variable point to your credential JSON file.

Alternatively, you can specify apiKey connection string parameter with API key value, or CredentialsFile parameter with Credentials File(json format) Local Path or credentials parameter with base-64 encoded service account or refresh token JSON credentials as the value.
Connection string examples:

"bigquery://projectid/location/dataset?CredentialsFile=/path/filename.json"
"bigquery://projectid/location/dataset?apiKey=AIzaSyB6XK8IO5AzKZXoioQOVNTFYzbDBjY5hy4"
"bigquery://projectid/location/dataset?credentials=eyJ0eXBlIjoiYXV0..."

Vanilla *sql.DB usage

Just like any other database/sql driver you'll need to import it

package main

import (
    "database/sql"
    _ "github.com/iodeal/go-sql-bigquery"
    "log"
)

func main() {
    config := "bigquery://{project_id}/{location}/{dataset_id}?CredentialsFile={Local Credentials File Path}"
    db, err := sql.Open("bigquery", config)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close() 
    var rs string
	err = db.QueryRow("select 'query row' msg").Scan(&rs)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(rs)
	rows, err := db.Query("select 1 union all select 2 union all select 3")
	if err != nil {
		fmt.Println(err)
	}
	defer rows.Close()
	var cnt int
	for rows.Next() {
		err = rows.Scan(&cnt)
		fmt.Println(cnt)
	}
}

Contribution

Pull Requests are welcome!

Current Support

  • driver.Conn implemented
  • driver.Querier implemented
  • driver.Pinger implemented
  • Prepared Statements - supported via a quick hack
  • Parametiterized Queries

Documentation

Index

Constants

View Source
const (
	//ConnectionStringEnvKey Connection String Environment Key
	ConnectionStringEnvKey = "BIGQUERY_CONNECTION_STRING"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	ProjectID       string
	Location        string
	DatasetID       string
	APIKey          string
	Credentials     string
	CredentialsFile string
}

Config A bigquery client configuration

func ConfigFromConnString

func ConfigFromConnString(in string) (*Config, error)

ConfigFromConnString will return the Config structures

type Conn

type Conn struct {
	// contains filtered or unexported fields
}

Conn A connecton

func NewConn

func NewConn(ctx context.Context, cfg *Config) (c *Conn, err error)

NewConn returns a connection for this Config

func (*Conn) Begin

func (c *Conn) Begin() (driver.Tx, error)

Begin Begin is stubbed out and not used

func (*Conn) Close

func (c *Conn) Close() (err error)

Close Close closes the connection

func (*Conn) Exec

func (c *Conn) Exec(query string, args []driver.Value) (res driver.Result, err error)

Exec Deprecated: Drivers should implement ExecerContext instead.

func (*Conn) ExecContext

func (c *Conn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error)

ExecContext Execute with Context parameter

func (*Conn) Ping

func (c *Conn) Ping(ctx context.Context) (err error)

Ping the BigQuery service and make sure it's reachable

func (*Conn) Prepare

func (c *Conn) Prepare(query string) (stmt driver.Stmt, err error)

Prepare Prepare is stubbed out and not used

func (*Conn) Query

func (c *Conn) Query(query string, args []driver.Value) (rows driver.Rows, err error)

Query Deprecated: Drivers should implement QueryerContext instead.

func (*Conn) QueryContext

func (c *Conn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error)

QueryContext Query with Context parameter

type Connector

type Connector struct {
	Info   map[string]string
	Client *bigquery.Client
	// contains filtered or unexported fields
}

Connector Connector struct

func NewConnector

func NewConnector(connectionString string) *Connector

NewConnector Create a new Connector

func (*Connector) Connect

func (c *Connector) Connect(ctx context.Context) (driver.Conn, error)

Connect Connect the server

func (*Connector) Driver

func (c *Connector) Driver() driver.Driver

Driver Get the Connector Driver

type Dataset

type Dataset interface {
	// Create creates a dataset in the BigQuery service. An error will be returned if the
	// dataset already exists. Pass in a DatasetMetadata value to configure the dataset.
	Create(ctx context.Context, md *bigquery.DatasetMetadata) (err error)
	// Delete deletes the dataset.  Delete will fail if the dataset is not empty.
	Delete(ctx context.Context) (err error)
	// DeleteWithContents deletes the dataset, as well as contained resources.
	DeleteWithContents(ctx context.Context) (err error)
	// Metadata fetches the metadata for the dataset.
	Metadata(ctx context.Context) (md *bigquery.DatasetMetadata, err error)
	// Update modifies specific Dataset metadata fields.
	// To perform a read-modify-write that protects against intervening reads,
	// set the etag argument to the DatasetMetadata.ETag field from the read.
	// Pass the empty string for etag for a "blind write" that will always succeed.
	Update(ctx context.Context, dm bigquery.DatasetMetadataToUpdate, etag string) (md *bigquery.DatasetMetadata, err error)
	// Table creates a handle to a BigQuery table in the dataset.
	// To determine if a table exists, call Table.Metadata.
	// If the table does not already exist, use Table.Create to create it.
	Table(tableID string) *bigquery.Table
	// Tables returns an iterator over the tables in the Dataset.
	Tables(ctx context.Context) *bigquery.TableIterator
	// Model creates a handle to a BigQuery model in the dataset.
	// To determine if a model exists, call Model.Metadata.
	// If the model does not already exist, you can create it via execution
	// of a CREATE MODEL query.
	Model(modelID string) *bigquery.Model
	// Models returns an iterator over the models in the Dataset.
	Models(ctx context.Context) *bigquery.ModelIterator
	// Routine creates a handle to a BigQuery routine in the dataset.
	// To determine if a routine exists, call Routine.Metadata.
	Routine(routineID string) *bigquery.Routine
	// Routines returns an iterator over the routines in the Dataset.
	Routines(ctx context.Context) *bigquery.RoutineIterator
}

Dataset Bigquery Dataset

type Driver

type Driver struct {
}

Driver Database Driver

func (*Driver) Open

func (d *Driver) Open(connectionString string) (c driver.Conn, err error)

Open Open a database driver connection

func (*Driver) OpenConnector

func (d *Driver) OpenConnector(connectionString string) (c driver.Connector, err error)

OpenConnector Open a database driver connection

type Stmt

type Stmt struct {
	// contains filtered or unexported fields
}

Stmt A query statement

func NewStmt

func NewStmt(query string, c *Conn) *Stmt

NewStmt New Statement

func (*Stmt) Close

func (s *Stmt) Close() error

Close close Stmt

func (*Stmt) Exec

func (s *Stmt) Exec(args []driver.Value) (driver.Result, error)

Exec Deprecated: Drivers should implement StmtExecContext instead (or additionally).

func (*Stmt) ExecContext

func (s *Stmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error)

ExecContext Exec with Context parameter

func (*Stmt) NumInput

func (s *Stmt) NumInput() int

NumInput number of input

func (*Stmt) Query

func (s *Stmt) Query(args []driver.Value) (driver.Rows, error)

Query Deprecated: Drivers should implement StmtQueryContext instead (or additionally).

func (*Stmt) QueryContext

func (s *Stmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error)

QueryContext Query with Context parameter

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL