Class: Google::Cloud::Bigquery::Job
- Inherits:
-
Object
- Object
- Google::Cloud::Bigquery::Job
- Defined in:
- lib/google/cloud/bigquery/job.rb,
lib/google/cloud/bigquery/job/list.rb
Overview
Job
Represents a generic Job that may be performed on a Table.
The subclasses of Job represent the specific BigQuery job types: CopyJob, ExtractJob, LoadJob, and QueryJob.
A job instance is created when you call Project#query_job, Dataset#query_job, Table#copy_job, Table#extract_job, Table#load_job.
Direct Known Subclasses
Defined Under Namespace
Classes: List
Attributes collapse
-
#cancel ⇒ Object
Cancels the job.
-
#configuration ⇒ Object
(also: #config)
The configuration for the job.
-
#created_at ⇒ Time?
The time when the job was created.
-
#done? ⇒ Boolean
Checks if the job's state is
DONE
. -
#ended_at ⇒ Time?
The time when the job ended.
-
#error ⇒ Hash?
The last error for the job, if any errors have occurred.
-
#errors ⇒ Array<Hash>?
The errors for the job, if any errors have occurred.
-
#failed? ⇒ Boolean
Checks if an error is present.
-
#labels ⇒ Hash
A hash of user-provided labels associated with this job.
-
#location ⇒ String
The geographic location where the job runs.
-
#pending? ⇒ Boolean
Checks if the job's state is
PENDING
. -
#reload! ⇒ Object
(also: #refresh!)
Reloads the job with current data from the BigQuery service.
-
#rerun! ⇒ Object
Created a new job with the current configuration.
-
#running? ⇒ Boolean
Checks if the job's state is
RUNNING
. -
#started_at ⇒ Time?
The time when the job was started.
-
#state ⇒ String
The current state of the job.
-
#statistics ⇒ Hash
(also: #stats)
The statistics for the job.
-
#status ⇒ Hash
The job's status.
-
#user_email ⇒ String
The email address of the user who ran the job.
-
#wait_until_done! ⇒ Object
Refreshes the job until the job is
DONE
.
Instance Method Summary collapse
-
#job_id ⇒ String
The ID of the job.
-
#project_id ⇒ String
The ID of the project containing the job.
Instance Method Details
#cancel ⇒ Object
Cancels the job.
305 306 307 308 309 310 |
# File 'lib/google/cloud/bigquery/job.rb', line 305 def cancel ensure_service! resp = service.cancel_job job_id, location: location @gapi = resp.job true end |
#configuration ⇒ Object Also known as: config
The configuration for the job. Returns a hash.
210 211 212 |
# File 'lib/google/cloud/bigquery/job.rb', line 210 def configuration JSON.parse @gapi.configuration.to_json end |
#created_at ⇒ Time?
The time when the job was created.
174 175 176 177 178 |
# File 'lib/google/cloud/bigquery/job.rb', line 174 def created_at ::Time.at(Integer(@gapi.statistics.creation_time) / 1000.0) rescue StandardError nil end |
#done? ⇒ Boolean
Checks if the job's state is DONE
. When true
, the job has stopped
running. However, a DONE
state does not mean that the job completed
successfully. Use #failed? to detect if an error occurred or if the
job was successful.
154 155 156 157 |
# File 'lib/google/cloud/bigquery/job.rb', line 154 def done? return false if state.nil? "done".casecmp(state).zero? end |
#ended_at ⇒ Time?
The time when the job ended.
This field is present when the job's state is DONE
.
199 200 201 202 203 |
# File 'lib/google/cloud/bigquery/job.rb', line 199 def ended_at ::Time.at(Integer(@gapi.statistics.end_time) / 1000.0) rescue StandardError nil end |
#error ⇒ Hash?
The last error for the job, if any errors have occurred. Returns a hash.
253 254 255 |
# File 'lib/google/cloud/bigquery/job.rb', line 253 def error status["errorResult"] end |
#errors ⇒ Array<Hash>?
The errors for the job, if any errors have occurred. Returns an array of hash objects. See #error.
269 270 271 |
# File 'lib/google/cloud/bigquery/job.rb', line 269 def errors Array status["errors"] end |
#failed? ⇒ Boolean
Checks if an error is present. Use #error to access the error object.
165 166 167 |
# File 'lib/google/cloud/bigquery/job.rb', line 165 def failed? !error.nil? end |
#job_id ⇒ String
The ID of the job.
80 81 82 |
# File 'lib/google/cloud/bigquery/job.rb', line 80 def job_id @gapi.job_reference.job_id end |
#labels ⇒ Hash
A hash of user-provided labels associated with this job. Labels can be provided when the job is created, and used to organize and group jobs.
The returned hash is frozen and changes are not allowed. Use #labels= to replace the entire hash.
284 285 286 287 288 |
# File 'lib/google/cloud/bigquery/job.rb', line 284 def labels m = @gapi.configuration.labels m = m.to_h if m.respond_to? :to_h m.dup.freeze end |
#location ⇒ String
The geographic location where the job runs.
100 101 102 |
# File 'lib/google/cloud/bigquery/job.rb', line 100 def location @gapi.job_reference.location end |
#pending? ⇒ Boolean
Checks if the job's state is PENDING
.
141 142 143 144 |
# File 'lib/google/cloud/bigquery/job.rb', line 141 def pending? return false if state.nil? "pending".casecmp(state).zero? end |
#project_id ⇒ String
The ID of the project containing the job.
89 90 91 |
# File 'lib/google/cloud/bigquery/job.rb', line 89 def project_id @gapi.job_reference.project_id end |
#reload! ⇒ Object Also known as: refresh!
Reloads the job with current data from the BigQuery service.
351 352 353 354 355 |
# File 'lib/google/cloud/bigquery/job.rb', line 351 def reload! ensure_service! gapi = service.get_job job_id, location: location @gapi = gapi end |
#rerun! ⇒ Object
Created a new job with the current configuration.
328 329 330 331 332 |
# File 'lib/google/cloud/bigquery/job.rb', line 328 def rerun! ensure_service! gapi = service.insert_job @gapi.configuration, location: location Job.from_gapi gapi, service end |
#running? ⇒ Boolean
Checks if the job's state is RUNNING
.
131 132 133 134 |
# File 'lib/google/cloud/bigquery/job.rb', line 131 def running? return false if state.nil? "running".casecmp(state).zero? end |
#started_at ⇒ Time?
The time when the job was started.
This field is present after the job's state changes from PENDING
to either RUNNING
or DONE
.
187 188 189 190 191 |
# File 'lib/google/cloud/bigquery/job.rb', line 187 def started_at ::Time.at(Integer(@gapi.statistics.start_time) / 1000.0) rescue StandardError nil end |
#state ⇒ String
The current state of the job. A DONE
state does not mean that the
job completed successfully. Use #failed? to discover if an error
occurred or if the job was successful.
121 122 123 124 |
# File 'lib/google/cloud/bigquery/job.rb', line 121 def state return nil if @gapi.status.nil? @gapi.status.state end |
#statistics ⇒ Hash Also known as: stats
The statistics for the job. Returns a hash.
223 224 225 |
# File 'lib/google/cloud/bigquery/job.rb', line 223 def statistics JSON.parse @gapi.statistics.to_json end |
#status ⇒ Hash
234 235 236 |
# File 'lib/google/cloud/bigquery/job.rb', line 234 def status JSON.parse @gapi.status.to_json end |
#user_email ⇒ String
The email address of the user who ran the job.
109 110 111 |
# File 'lib/google/cloud/bigquery/job.rb', line 109 def user_email @gapi.user_email end |
#wait_until_done! ⇒ Object
Refreshes the job until the job is DONE
. The delay between refreshes
starts at 5 seconds and increases exponentially to a maximum of 60
seconds.
375 376 377 378 379 380 381 382 383 384 385 386 |
# File 'lib/google/cloud/bigquery/job.rb', line 375 def wait_until_done! backoff = lambda do |retries| delay = [retries**2 + 5, 60].min # Maximum delay is 60 sleep delay end retries = 0 until done? backoff.call retries retries += 1 reload! end end |