class BigQuery::BigQueryApi

Constants

AUTH_SCOPE
MAX_RESULTS

Public Class Methods

auth_account_by_cert(auth_email, auth_key, auth_pass) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 11
def auth_account_by_cert(auth_email, auth_key, auth_pass)
  key = Google::APIClient::KeyUtils.load_from_pkcs12(auth_key, auth_pass)

  asserter = Google::APIClient::JWTAsserter.new(auth_email, AUTH_SCOPE, key)
  asserter.authorize
end
auth_installed_app(client_id, client_secret) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 18
def auth_installed_app(client_id, client_secret)
  params = {
    :client_id => client_id,
    :client_secret => client_secret,
    :scope => AUTH_SCOPE,
  }

  flow = Google::APIClient::InstalledAppFlow.new(params)
  flow.authorize
end
new(auth) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 31
def initialize(auth)
  @client = Google::APIClient.new(application_name: NAME, application_version: VERSION)
  @client.authorization = auth

  @bq = @client.discovered_api('bigquery', 'v2')
end

Public Instance Methods

datasets_get(dataset_id) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 48
def datasets_get(dataset_id)
  execute(@bq.datasets.get, params: { projectId: project_id, datasetId: dataset_id })
end
datasets_list(project_id) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 44
def datasets_list(project_id)
  execute(@bq.datasets.list, params: { projectId: project_id })
end
jobs_get(project_id, job_id) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 75
def jobs_get(project_id, job_id)
  execute(@bq.jobs.get, params: { projectId: project_id, jobId: job_id })
end
jobs_get_query_results(project_id, job_id) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 108
def jobs_get_query_results(project_id, job_id)
  params = {
    projectId: project_id,
    jobId: job_id,
    maxResults: MAX_RESULTS,
    timeoutMs: 10000,
  }

  execute(@bq.jobs.get_query_results, params: params)
end
jobs_insert(project_id, dataset_id, sql, dry_run = false) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 91
def jobs_insert(project_id, dataset_id, sql, dry_run = false)
  body = {
    configuration: {
      query: {
        query: sql,
        defaultDataset: { datasetId: dataset_id },
        priority: 'INTERACTIVE',   # or 'BATCH'
        allowLargeResults: false,
        useQueryCache: true,
      },
      dryRun: dry_run,
    },
  }

  execute(@bq.jobs.insert, params: { projectId: project_id }, body: body)
end
jobs_list(project_id) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 71
def jobs_list(project_id)
  execute(@bq.jobs.list, params: { projectId: project_id })
end
jobs_query(project_id, dataset_id, sql, dry_run = false) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 79
def jobs_query(project_id, dataset_id, sql, dry_run = false)
  body = {
    query: sql,
    defaultDataset: { datasetId: dataset_id },
    maxResults: MAX_RESULTS,
    timeoutMs: 10000,
    dryRun: dry_run,
  }

  execute(@bq.jobs.query, params: { projectId: project_id }, body: body)
end
projects_list() click to toggle source
# File lib/bigquery/bigquery_api.rb, line 39
def projects_list
  execute(@bq.projects.list)
end
tables_insert(project_id, dataset_id, table_id, schema) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 57
def tables_insert(project_id, dataset_id, table_id, schema)
  body = {
    tableReference: {
      "projectId": project_id,
      "datasetId": dataset_id,
      "tableId": table_id,
    },
    schema: { fields: schema },
  }

  execute(@bq.tables.insert, params: { projectId: project_id, datasetId: dataset_id }, body: body)
end
tables_list(project_id, dataset_id) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 53
def tables_list(project_id, dataset_id)
  execute(@bq.tables.list, params: { projectId: project_id, datasetId: dataset_id })
end

Private Instance Methods

execute(method, params: nil, body: nil) click to toggle source
# File lib/bigquery/bigquery_api.rb, line 121
def execute(method, params: nil, body: nil)
  args = { api_method: method }
  args[:parameters] = params if !params.nil?
  args[:body_object] = body if !body.nil?

  res = JSON.parse(@client.execute(args).response.body)
  raise BigQueryError.new(res['error']['message']) if res['error']
  res
end