class BigQuery

Constants

DEFAULT_KEY_PASS
NAME
VERSION

Attributes

dataset_id[RW]
project_id[RW]

Public Class Methods

new(project_id: nil, dataset_id: nil, api: nil, auth_email: nil, auth_key: nil, auth_pass: DEFAULT_KEY_PASS, client_id: nil, client_secret: nil) click to toggle source
# File lib/bigquery.rb, line 13
def initialize(project_id: nil, dataset_id: nil, api: nil,
               auth_email: nil, auth_key: nil, auth_pass: DEFAULT_KEY_PASS,
               client_id: nil, client_secret: nil)

  @project_id = project_id
  @dataset_id = dataset_id

  if !api.nil?
    @api = api
  else
    auth = do_auth(auth_email, auth_key, auth_pass, client_id, client_secret)
    @api = BigQueryApi.new(auth)
  end
end

Public Instance Methods

create_table(table_id, schema) click to toggle source
# File lib/bigquery.rb, line 54
def create_table(table_id, schema)
  check_dataset!
  @api.tables_insert(@project_id, @dataset_id, table_id, schema)
end
datasets() click to toggle source
# File lib/bigquery.rb, line 35
def datasets
  check_project!
  result = @api.datasets_list(@project_id)
  result['datasets'].map {|d| BigQuery::Resource.new(d) }
end
jobs() click to toggle source
# File lib/bigquery.rb, line 41
def jobs
  check_project!
  result = @api.jobs_list(@project_id)
  result['jobs'].map {|d| BigQuery::Resource.new(d) }
end
projects() click to toggle source
# File lib/bigquery.rb, line 29
def projects
  result = @api.projects_list
  result['projects'].map {|d| BigQuery::Resource.new(d) }
end
query(sql, dry_run: false) click to toggle source
# File lib/bigquery.rb, line 59
def query(sql, dry_run: false)
  check_dataset!
  result = do_query(sql, dry_run)
  (dry_run) ? [] : BigQuery::QueryResult.new(result)
end
query_async(sql, dry_run: false) click to toggle source
# File lib/bigquery.rb, line 65
def query_async(sql, dry_run: false)
  check_dataset!
  result = @api.jobs_insert(@project_id, @dataset_id, sql, dry_run)
  job_id = result['jobReference']['jobId']
  (dry_run) ? nil : BigQuery::QueryAsync.new(@api, @project_id, job_id)
end
tables() click to toggle source
# File lib/bigquery.rb, line 48
def tables
  check_dataset!
  result = @api.tables_list(@project_id, @dataset_id)
  result['tables'].map {|d| BigQuery::Resource.new(d) }
end

Private Instance Methods

check_dataset!() click to toggle source
# File lib/bigquery.rb, line 104
def check_dataset!
  check_project!
  raise 'dataset is not selected. set dataset_id.' if @dataset_id.nil?
end
check_project!() click to toggle source
# File lib/bigquery.rb, line 100
def check_project!
  raise 'project is not selected. set project_id.' if @project_id.nil?
end
do_auth(auth_email, auth_key, auth_pass, client_id, client_secret) click to toggle source
# File lib/bigquery.rb, line 74
def do_auth(auth_email, auth_key, auth_pass, client_id, client_secret)
  if !auth_email.nil?
    auth = BigQueryApi.auth_account_by_cert(auth_email, auth_key, auth_pass)
  end

  if !client_id.nil?
    auth = BigQueryApi.auth_installed_app(client_id, client_secret)
  end

  raise 'not authenticated' if auth.nil?
  auth
end
do_query(sql, dry_run = false) click to toggle source
# File lib/bigquery.rb, line 87
def do_query(sql, dry_run = false)
  job_id = nil
  res = @api.jobs_query(@project_id, @dataset_id, sql, dry_run)

  10.times do
    return res if res['jobComplete']

    job_id ||= res['jobReference']['jobId']
    res = @api.jobs_get_query_results(@project_id, job_id)
  end
  raise 'bigquery query failed'
end