Class: BigQuery::BigQueryApi

Inherits:
Object
  • Object
show all
Defined in:
lib/bigquery/bigquery_api.rb

Constant Summary collapse

AUTH_SCOPE =
'https://www.googleapis.com/auth/bigquery'
MAX_RESULTS =
10000

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(auth) ⇒ BigQueryApi

Returns a new instance of BigQueryApi.



31
32
33
34
35
36
# 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

Class Method Details

.auth_account_by_cert(auth_email, auth_key, auth_pass) ⇒ Object



11
12
13
14
15
16
# File 'lib/bigquery/bigquery_api.rb', line 11

def (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) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# 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

Instance Method Details

#datasets_get(dataset_id) ⇒ Object



48
49
50
# 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) ⇒ Object



44
45
46
# 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) ⇒ Object



75
76
77
# 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) ⇒ Object



108
109
110
111
112
113
114
115
116
117
# 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) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# 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) ⇒ Object



71
72
73
# 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) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
# 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_listObject



39
40
41
# 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) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
# 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) ⇒ Object



53
54
55
# 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