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