google-cloud-bigquery 1.20.0 → 1.21.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d887921d9819a9fae907aa50bb5f7ca805514b7911edeee335d7caa82bcca8a
4
- data.tar.gz: 45abf44f843328b5e9d0f7dad0780735dfb12b5766ded4b12dc35c0a5f949555
3
+ metadata.gz: 41107fdb920537ef29f375d86dea227cf33bbf8ca29ac17daa228e1a0df2367e
4
+ data.tar.gz: 632289096e6fca9acefda0a767c377a7f04a5e25698e696651c6cedaa2f254e5
5
5
  SHA512:
6
- metadata.gz: 754714cfca94ca584b8900bf5dbe483693594d873f0344051fa71b41dfcacec8a642720d34939db881ba9e9f2cf7ca6baeb4a3a98c67430e046062bcc91d5b06
7
- data.tar.gz: 24b37f4222cd43dee18edef1150db12cdc0d25e686b70ee1429f474b6670a30e5cacb26b809fc484be6cb55e9f9a63ef693d1acb0c44902a20e1cb633b1f2274
6
+ metadata.gz: d565666e1b6f242603ee8f3e05960219d2d5345fd7e1730214f45ea835e7116327a09a7814831390fd2e1fcea507d97ed098cdfd2e251d7679011812cd49090e
7
+ data.tar.gz: 7d3136310a7fa8ff8474b021e348e4dcb933dcfa80a764e53984cd390cf8a2ad38015ffe31450f88e2d7bc57f6dde3c11c568a17348c30833b8dc32dfb754cd9
@@ -1,5 +1,15 @@
1
1
  # Release History
2
2
 
3
+ ### 1.21.0 / 2020-03-31
4
+
5
+ #### Features
6
+
7
+ * Add Job#parent_job_id and Job#script_statistics
8
+ * Add parent_job to Project#jobs
9
+ * Add Job#num_child_jobs
10
+ * Add Job#parent_job_id
11
+ * Add Job#script_statistics
12
+
3
13
  ### 1.20.0 / 2020-03-11
4
14
 
5
15
  #### Features
@@ -197,6 +197,72 @@ module Google
197
197
  Convert.millis_to_time @gapi.statistics.end_time
198
198
  end
199
199
 
200
+ ##
201
+ # The number of child jobs executed.
202
+ #
203
+ # @return [Integer] The number of child jobs executed.
204
+ #
205
+ def num_child_jobs
206
+ @gapi.statistics.num_child_jobs || 0
207
+ end
208
+
209
+ ##
210
+ # If this is a child job, the id of the parent.
211
+ #
212
+ # @return [String, nil] The ID of the parent job, or `nil` if not a child job.
213
+ #
214
+ def parent_job_id
215
+ @gapi.statistics.parent_job_id
216
+ end
217
+
218
+ ##
219
+ # The statistics including stack frames for a child job of a script.
220
+ #
221
+ # @return [Google::Cloud::Bigquery::Job::ScriptStatistics, nil] The script statistics, or `nil` if the job is
222
+ # not a child job.
223
+ #
224
+ # @example
225
+ # require "google/cloud/bigquery"
226
+ #
227
+ # bigquery = Google::Cloud::Bigquery.new
228
+ #
229
+ # multi_statement_sql = <<~SQL
230
+ # -- Declare a variable to hold names as an array.
231
+ # DECLARE top_names ARRAY<STRING>;
232
+ # -- Build an array of the top 100 names from the year 2017.
233
+ # SET top_names = (
234
+ # SELECT ARRAY_AGG(name ORDER BY number DESC LIMIT 100)
235
+ # FROM `bigquery-public-data.usa_names.usa_1910_current`
236
+ # WHERE year = 2017
237
+ # );
238
+ # -- Which names appear as words in Shakespeare's plays?
239
+ # SELECT
240
+ # name AS shakespeare_name
241
+ # FROM UNNEST(top_names) AS name
242
+ # WHERE name IN (
243
+ # SELECT word
244
+ # FROM `bigquery-public-data.samples.shakespeare`
245
+ # );
246
+ # SQL
247
+ #
248
+ # job = bigquery.query_job multi_statement_sql
249
+ #
250
+ # job.wait_until_done!
251
+ #
252
+ # child_jobs = bigquery.jobs parent_job: job
253
+ #
254
+ # child_jobs.each do |child_job|
255
+ # script_statistics = child_job.script_statistics
256
+ # puts script_statistics.evaluation_kind
257
+ # script_statistics.stack_frames.each do |stack_frame|
258
+ # puts stack_frame.text
259
+ # end
260
+ # end
261
+ #
262
+ def script_statistics
263
+ ScriptStatistics.from_gapi @gapi.statistics.script_statistics if @gapi.statistics.script_statistics
264
+ end
265
+
200
266
  ##
201
267
  # The configuration for the job. Returns a hash.
202
268
  #
@@ -423,6 +489,138 @@ module Google
423
489
  end
424
490
  end
425
491
 
492
+ ##
493
+ # Represents statistics for a child job of a script.
494
+ #
495
+ # @attr_reader [String] evaluation_kind Indicates the type of child job. Possible values include `STATEMENT` and
496
+ # `EXPRESSION`.
497
+ # @attr_reader [Array<Google::Cloud::Bigquery::Job::ScriptStackFrame>] stack_frames Stack trace where the
498
+ # current evaluation happened. Shows line/column/procedure name of each frame on the stack at the point where
499
+ # the current evaluation happened. The leaf frame is first, the primary script is last.
500
+ #
501
+ # @example
502
+ # require "google/cloud/bigquery"
503
+ #
504
+ # bigquery = Google::Cloud::Bigquery.new
505
+ #
506
+ # multi_statement_sql = <<~SQL
507
+ # -- Declare a variable to hold names as an array.
508
+ # DECLARE top_names ARRAY<STRING>;
509
+ # -- Build an array of the top 100 names from the year 2017.
510
+ # SET top_names = (
511
+ # SELECT ARRAY_AGG(name ORDER BY number DESC LIMIT 100)
512
+ # FROM `bigquery-public-data.usa_names.usa_1910_current`
513
+ # WHERE year = 2017
514
+ # );
515
+ # -- Which names appear as words in Shakespeare's plays?
516
+ # SELECT
517
+ # name AS shakespeare_name
518
+ # FROM UNNEST(top_names) AS name
519
+ # WHERE name IN (
520
+ # SELECT word
521
+ # FROM `bigquery-public-data.samples.shakespeare`
522
+ # );
523
+ # SQL
524
+ #
525
+ # job = bigquery.query_job multi_statement_sql
526
+ #
527
+ # job.wait_until_done!
528
+ #
529
+ # child_jobs = bigquery.jobs parent_job: job
530
+ #
531
+ # child_jobs.each do |child_job|
532
+ # script_statistics = child_job.script_statistics
533
+ # puts script_statistics.evaluation_kind
534
+ # script_statistics.stack_frames.each do |stack_frame|
535
+ # puts stack_frame.text
536
+ # end
537
+ # end
538
+ #
539
+ class ScriptStatistics
540
+ attr_reader :evaluation_kind, :stack_frames
541
+
542
+ ##
543
+ # @private Creates a new ScriptStatistics instance.
544
+ def initialize evaluation_kind, stack_frames
545
+ @evaluation_kind = evaluation_kind
546
+ @stack_frames = stack_frames
547
+ end
548
+
549
+ ##
550
+ # @private New ScriptStatistics from a statistics.script_statistics object.
551
+ def self.from_gapi gapi
552
+ frames = Array(gapi.stack_frames).map { |g| ScriptStackFrame.from_gapi g }
553
+ new gapi.evaluation_kind, frames
554
+ end
555
+ end
556
+
557
+ ##
558
+ # Represents a stack frame showing the line/column/procedure name where the current evaluation happened.
559
+ #
560
+ # @attr_reader [Integer] start_line One-based start line.
561
+ # @attr_reader [Integer] start_column One-based start column.
562
+ # @attr_reader [Integer] end_line One-based end line.
563
+ # @attr_reader [Integer] end_column One-based end column.
564
+ # @attr_reader [String] text Text of the current statement/expression.
565
+ #
566
+ # @example
567
+ # require "google/cloud/bigquery"
568
+ #
569
+ # bigquery = Google::Cloud::Bigquery.new
570
+ #
571
+ # multi_statement_sql = <<~SQL
572
+ # -- Declare a variable to hold names as an array.
573
+ # DECLARE top_names ARRAY<STRING>;
574
+ # -- Build an array of the top 100 names from the year 2017.
575
+ # SET top_names = (
576
+ # SELECT ARRAY_AGG(name ORDER BY number DESC LIMIT 100)
577
+ # FROM `bigquery-public-data.usa_names.usa_1910_current`
578
+ # WHERE year = 2017
579
+ # );
580
+ # -- Which names appear as words in Shakespeare's plays?
581
+ # SELECT
582
+ # name AS shakespeare_name
583
+ # FROM UNNEST(top_names) AS name
584
+ # WHERE name IN (
585
+ # SELECT word
586
+ # FROM `bigquery-public-data.samples.shakespeare`
587
+ # );
588
+ # SQL
589
+ #
590
+ # job = bigquery.query_job multi_statement_sql
591
+ #
592
+ # job.wait_until_done!
593
+ #
594
+ # child_jobs = bigquery.jobs parent_job: job
595
+ #
596
+ # child_jobs.each do |child_job|
597
+ # script_statistics = child_job.script_statistics
598
+ # puts script_statistics.evaluation_kind
599
+ # script_statistics.stack_frames.each do |stack_frame|
600
+ # puts stack_frame.text
601
+ # end
602
+ # end
603
+ #
604
+ class ScriptStackFrame
605
+ attr_reader :start_line, :start_column, :end_line, :end_column, :text
606
+
607
+ ##
608
+ # @private Creates a new ScriptStackFrame instance.
609
+ def initialize start_line, start_column, end_line, end_column, text
610
+ @start_line = start_line
611
+ @start_column = start_column
612
+ @end_line = end_line
613
+ @end_column = end_column
614
+ @text = text
615
+ end
616
+
617
+ ##
618
+ # @private New ScriptStackFrame from a statistics.script_statistics[].stack_frames element.
619
+ def self.from_gapi gapi
620
+ new gapi.start_line, gapi.start_column, gapi.end_line, gapi.end_column, gapi.text
621
+ end
622
+ end
623
+
426
624
  protected
427
625
 
428
626
  ##
@@ -1084,18 +1084,22 @@ module Google
1084
1084
  # part of the larger set of results to view. Optional.
1085
1085
  # @param [Integer] max Maximum number of jobs to return. Optional.
1086
1086
  # @param [String] filter A filter for job state. Optional.
1087
- # @param [Time] min_created_at Min value for {Job#created_at}. When
1088
- # provided, only jobs created after or at this time are returned.
1089
- # Optional.
1090
- # @param [Time] max_created_at Max value for {Job#created_at}. When
1091
- # provided, only jobs created before or at this time are returned.
1092
- # Optional.
1093
1087
  #
1094
1088
  # Acceptable values are:
1095
1089
  #
1096
1090
  # * `done` - Finished jobs
1097
1091
  # * `pending` - Pending jobs
1098
1092
  # * `running` - Running jobs
1093
+ # @param [Time] min_created_at Min value for {Job#created_at}. When
1094
+ # provided, only jobs created after or at this time are returned.
1095
+ # Optional.
1096
+ # @param [Time] max_created_at Max value for {Job#created_at}. When
1097
+ # provided, only jobs created before or at this time are returned.
1098
+ # Optional.
1099
+ # @param [Google::Cloud::Bigquery::Job, String] parent_job A job
1100
+ # object or a job ID. If set, retrieve only child jobs of the
1101
+ # specified parent. Optional. See {Job#job_id}, {Job#num_child_jobs},
1102
+ # and {Job#parent_job_id}.
1099
1103
  #
1100
1104
  # @return [Array<Google::Cloud::Bigquery::Job>] (See
1101
1105
  # {Google::Cloud::Bigquery::Job::List})
@@ -1144,13 +1148,63 @@ module Google
1144
1148
  # # process job
1145
1149
  # end
1146
1150
  #
1147
- def jobs all: nil, token: nil, max: nil, filter: nil,
1148
- min_created_at: nil, max_created_at: nil
1151
+ # @example Retrieve child jobs by setting `parent_job`:
1152
+ # require "google/cloud/bigquery"
1153
+ #
1154
+ # bigquery = Google::Cloud::Bigquery.new
1155
+ #
1156
+ # multi_statement_sql = <<~SQL
1157
+ # -- Declare a variable to hold names as an array.
1158
+ # DECLARE top_names ARRAY<STRING>;
1159
+ # -- Build an array of the top 100 names from the year 2017.
1160
+ # SET top_names = (
1161
+ # SELECT ARRAY_AGG(name ORDER BY number DESC LIMIT 100)
1162
+ # FROM `bigquery-public-data.usa_names.usa_1910_current`
1163
+ # WHERE year = 2017
1164
+ # );
1165
+ # -- Which names appear as words in Shakespeare's plays?
1166
+ # SELECT
1167
+ # name AS shakespeare_name
1168
+ # FROM UNNEST(top_names) AS name
1169
+ # WHERE name IN (
1170
+ # SELECT word
1171
+ # FROM `bigquery-public-data.samples.shakespeare`
1172
+ # );
1173
+ # SQL
1174
+ #
1175
+ # job = bigquery.query_job multi_statement_sql
1176
+ #
1177
+ # job.wait_until_done!
1178
+ #
1179
+ # child_jobs = bigquery.jobs parent_job: job
1180
+ #
1181
+ # child_jobs.each do |child_job|
1182
+ # script_statistics = child_job.script_statistics
1183
+ # puts script_statistics.evaluation_kind
1184
+ # script_statistics.stack_frames.each do |stack_frame|
1185
+ # puts stack_frame.text
1186
+ # end
1187
+ # end
1188
+ #
1189
+ def jobs all: nil,
1190
+ token: nil,
1191
+ max: nil,
1192
+ filter: nil,
1193
+ min_created_at: nil,
1194
+ max_created_at: nil,
1195
+ parent_job: nil
1149
1196
  ensure_service!
1150
- options = { all: all, token: token, max: max, filter: filter, min_created_at: min_created_at,
1151
- max_created_at: max_created_at }
1152
- gapi = service.list_jobs options
1153
- Job::List.from_gapi gapi, service, options
1197
+ parent_job = parent_job.job_id if parent_job.is_a? Job
1198
+ options = {
1199
+ parent_job_id: parent_job,
1200
+ all: all,
1201
+ token: token,
1202
+ max: max, filter: filter,
1203
+ min_created_at: min_created_at,
1204
+ max_created_at: max_created_at
1205
+ }
1206
+ gapi = service.list_jobs(**options)
1207
+ Job::List.from_gapi gapi, service, **options
1154
1208
  end
1155
1209
 
1156
1210
  ##
@@ -48,6 +48,44 @@ module Google
48
48
  # puts job.data.first
49
49
  # end
50
50
  #
51
+ # @example With multiple statements and child jobs:
52
+ # require "google/cloud/bigquery"
53
+ #
54
+ # bigquery = Google::Cloud::Bigquery.new
55
+ #
56
+ # multi_statement_sql = <<~SQL
57
+ # -- Declare a variable to hold names as an array.
58
+ # DECLARE top_names ARRAY<STRING>;
59
+ # -- Build an array of the top 100 names from the year 2017.
60
+ # SET top_names = (
61
+ # SELECT ARRAY_AGG(name ORDER BY number DESC LIMIT 100)
62
+ # FROM `bigquery-public-data.usa_names.usa_1910_current`
63
+ # WHERE year = 2017
64
+ # );
65
+ # -- Which names appear as words in Shakespeare's plays?
66
+ # SELECT
67
+ # name AS shakespeare_name
68
+ # FROM UNNEST(top_names) AS name
69
+ # WHERE name IN (
70
+ # SELECT word
71
+ # FROM `bigquery-public-data.samples.shakespeare`
72
+ # );
73
+ # SQL
74
+ #
75
+ # job = bigquery.query_job multi_statement_sql
76
+ #
77
+ # job.wait_until_done!
78
+ #
79
+ # child_jobs = bigquery.jobs parent_job: job
80
+ #
81
+ # child_jobs.each do |child_job|
82
+ # script_statistics = child_job.script_statistics
83
+ # puts script_statistics.evaluation_kind
84
+ # script_statistics.stack_frames.each do |stack_frame|
85
+ # puts stack_frame.text
86
+ # end
87
+ # end
88
+ #
51
89
  class QueryJob < Job
52
90
  ##
53
91
  # Checks if the priority for the query is `BATCH`.
@@ -339,14 +339,16 @@ module Google
339
339
  ##
340
340
  # Lists all jobs in the specified project to which you have
341
341
  # been granted the READER job role.
342
- def list_jobs all: nil, max: nil, token: nil, filter: nil, min_created_at: nil, max_created_at: nil
342
+ def list_jobs all: nil, token: nil, max: nil, filter: nil, min_created_at: nil, max_created_at: nil,
343
+ parent_job_id: nil
343
344
  # The list operation is considered idempotent
344
345
  min_creation_time = Convert.time_to_millis min_created_at
345
346
  max_creation_time = Convert.time_to_millis max_created_at
346
347
  execute backoff: true do
347
348
  service.list_jobs @project, all_users: all, max_results: max,
348
349
  page_token: token, projection: "full", state_filter: filter,
349
- min_creation_time: min_creation_time, max_creation_time: max_creation_time
350
+ min_creation_time: min_creation_time, max_creation_time: max_creation_time,
351
+ parent_job_id: parent_job_id
350
352
  end
351
353
  end
352
354
 
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Bigquery
19
- VERSION = "1.20.0".freeze
19
+ VERSION = "1.21.0".freeze
20
20
  end
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-cloud-bigquery
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.20.0
4
+ version: 1.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Moore
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-03-11 00:00:00.000000000 Z
12
+ date: 2020-03-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby