google-cloud-bigquery 1.16.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHENTICATION.md +7 -27
  3. data/CHANGELOG.md +8 -0
  4. data/CONTRIBUTING.md +1 -1
  5. data/OVERVIEW.md +5 -5
  6. data/lib/google-cloud-bigquery.rb +5 -11
  7. data/lib/google/cloud/bigquery.rb +3 -5
  8. data/lib/google/cloud/bigquery/convert.rb +23 -46
  9. data/lib/google/cloud/bigquery/copy_job.rb +6 -16
  10. data/lib/google/cloud/bigquery/credentials.rb +5 -12
  11. data/lib/google/cloud/bigquery/data.rb +10 -16
  12. data/lib/google/cloud/bigquery/dataset.rb +58 -118
  13. data/lib/google/cloud/bigquery/dataset/access.rb +5 -13
  14. data/lib/google/cloud/bigquery/dataset/list.rb +4 -9
  15. data/lib/google/cloud/bigquery/external.rb +14 -35
  16. data/lib/google/cloud/bigquery/extract_job.rb +2 -5
  17. data/lib/google/cloud/bigquery/insert_response.rb +1 -3
  18. data/lib/google/cloud/bigquery/job.rb +5 -9
  19. data/lib/google/cloud/bigquery/job/list.rb +3 -7
  20. data/lib/google/cloud/bigquery/load_job.rb +18 -33
  21. data/lib/google/cloud/bigquery/model.rb +1 -4
  22. data/lib/google/cloud/bigquery/model/list.rb +3 -7
  23. data/lib/google/cloud/bigquery/project.rb +27 -56
  24. data/lib/google/cloud/bigquery/project/list.rb +3 -7
  25. data/lib/google/cloud/bigquery/query_job.rb +40 -79
  26. data/lib/google/cloud/bigquery/schema.rb +3 -8
  27. data/lib/google/cloud/bigquery/schema/field.rb +6 -11
  28. data/lib/google/cloud/bigquery/service.rb +26 -58
  29. data/lib/google/cloud/bigquery/table.rb +58 -112
  30. data/lib/google/cloud/bigquery/table/async_inserter.rb +10 -18
  31. data/lib/google/cloud/bigquery/table/list.rb +3 -7
  32. data/lib/google/cloud/bigquery/version.rb +1 -1
  33. metadata +36 -42
@@ -205,11 +205,8 @@ module Google
205
205
  # end
206
206
  #
207
207
  def query_plan
208
- return nil unless @gapi.statistics.query &&
209
- @gapi.statistics.query.query_plan
210
- Array(@gapi.statistics.query.query_plan).map do |stage|
211
- Stage.from_gapi stage
212
- end
208
+ return nil unless @gapi&.statistics&.query&.query_plan
209
+ Array(@gapi.statistics.query.query_plan).map { |stage| Stage.from_gapi stage }
213
210
  end
214
211
 
215
212
  ##
@@ -261,8 +258,8 @@ module Google
261
258
  # query_job.ddl? #=> true
262
259
  #
263
260
  def ddl?
264
- %w[CREATE_MODEL CREATE_TABLE CREATE_TABLE_AS_SELECT CREATE_VIEW \
265
- DROP_MODEL DROP_TABLE DROP_VIEW].include? statement_type
261
+ ["CREATE_MODEL", "CREATE_TABLE", "CREATE_TABLE_AS_SELECT", "CREATE_VIEW", "\n", "DROP_MODEL", "DROP_TABLE",
262
+ "DROP_VIEW"].include? statement_type
266
263
  end
267
264
 
268
265
  ##
@@ -285,7 +282,7 @@ module Google
285
282
  # query_job.dml? #=> true
286
283
  #
287
284
  def dml?
288
- %w[INSERT UPDATE MERGE DELETE].include? statement_type
285
+ ["INSERT", "UPDATE", "MERGE", "DELETE"].include? statement_type
289
286
  end
290
287
 
291
288
  ##
@@ -383,9 +380,7 @@ module Google
383
380
  def udfs
384
381
  udfs_gapi = @gapi.configuration.query.user_defined_function_resources
385
382
  return nil unless udfs_gapi
386
- Array(udfs_gapi).map do |udf|
387
- udf.inline_code || udf.resource_uri
388
- end
383
+ Array(udfs_gapi).map { |udf| udf.inline_code || udf.resource_uri }
389
384
  end
390
385
 
391
386
  ##
@@ -396,9 +391,7 @@ module Google
396
391
  #
397
392
  # @!group Attributes
398
393
  def encryption
399
- EncryptionConfiguration.from_gapi(
400
- @gapi.configuration.query.destination_encryption_configuration
401
- )
394
+ EncryptionConfiguration.from_gapi @gapi.configuration.query.destination_encryption_configuration
402
395
  end
403
396
 
404
397
  ###
@@ -535,8 +528,7 @@ module Google
535
528
 
536
529
  ensure_service!
537
530
  loop do
538
- query_results_gapi = service.job_query_results \
539
- job_id, location: location, max: 0
531
+ query_results_gapi = service.job_query_results job_id, location: location, max: 0
540
532
  if query_results_gapi.job_complete
541
533
  @destination_schema_gapi = query_results_gapi.schema
542
534
  break
@@ -573,9 +565,7 @@ module Google
573
565
  #
574
566
  def data token: nil, max: nil, start: nil
575
567
  return nil unless done?
576
- if dryrun?
577
- return Data.from_gapi_json({ rows: [] }, nil, @gapi, service)
578
- end
568
+ return Data.from_gapi_json({ rows: [] }, nil, @gapi, service) if dryrun?
579
569
  if ddl? || dml?
580
570
  data_hash = { totalRows: nil, rows: [] }
581
571
  return Data.from_gapi_json data_hash, nil, @gapi, service
@@ -583,10 +573,7 @@ module Google
583
573
  ensure_schema!
584
574
 
585
575
  options = { token: token, max: max, start: start }
586
- data_hash = service.list_tabledata \
587
- destination_table_dataset_id,
588
- destination_table_table_id,
589
- options
576
+ data_hash = service.list_tabledata destination_table_dataset_id, destination_table_table_id, options
590
577
  Data.from_gapi_json data_hash, destination_table_gapi, @gapi, service
591
578
  end
592
579
  alias query_results data
@@ -631,8 +618,7 @@ module Google
631
618
  updater.dryrun = options[:dryrun]
632
619
  updater.maximum_bytes_billed = options[:maximum_bytes_billed]
633
620
  updater.labels = options[:labels] if options[:labels]
634
- updater.legacy_sql = Convert.resolve_legacy_sql(
635
- options[:standard_sql], options[:legacy_sql])
621
+ updater.legacy_sql = Convert.resolve_legacy_sql options[:standard_sql], options[:legacy_sql]
636
622
  updater.external = options[:external] if options[:external]
637
623
  updater.priority = options[:priority]
638
624
  updater.cache = options[:cache]
@@ -731,8 +717,7 @@ module Google
731
717
  #
732
718
  # @!group Attributes
733
719
  def dataset= value
734
- @gapi.configuration.query.default_dataset =
735
- @service.dataset_ref_from value
720
+ @gapi.configuration.query.default_dataset = @service.dataset_ref_from value
736
721
  end
737
722
 
738
723
  ##
@@ -752,17 +737,13 @@ module Google
752
737
  when Array then
753
738
  @gapi.configuration.query.use_legacy_sql = false
754
739
  @gapi.configuration.query.parameter_mode = "POSITIONAL"
755
- @gapi.configuration.query.query_parameters = params.map do |param|
756
- Convert.to_query_param param
757
- end
740
+ @gapi.configuration.query.query_parameters = params.map { |param| Convert.to_query_param param }
758
741
  when Hash then
759
742
  @gapi.configuration.query.use_legacy_sql = false
760
743
  @gapi.configuration.query.parameter_mode = "NAMED"
761
744
  @gapi.configuration.query.query_parameters =
762
745
  params.map do |name, param|
763
- Convert.to_query_param(param).tap do |named_param|
764
- named_param.name = String name
765
- end
746
+ Convert.to_query_param(param).tap { |named_param| named_param.name = String name }
766
747
  end
767
748
  else
768
749
  raise "Query parameters must be an Array or a Hash."
@@ -783,8 +764,7 @@ module Google
783
764
  #
784
765
  # @!group Attributes
785
766
  def create= value
786
- @gapi.configuration.query.create_disposition =
787
- Convert.create_disposition value
767
+ @gapi.configuration.query.create_disposition = Convert.create_disposition value
788
768
  end
789
769
 
790
770
  ##
@@ -802,8 +782,7 @@ module Google
802
782
  #
803
783
  # @!group Attributes
804
784
  def write= value
805
- @gapi.configuration.query.write_disposition =
806
- Convert.write_disposition value
785
+ @gapi.configuration.query.write_disposition = Convert.write_disposition value
807
786
  end
808
787
 
809
788
  ##
@@ -905,9 +884,7 @@ module Google
905
884
  # @!group Attributes
906
885
  #
907
886
  def external= value
908
- external_table_pairs = value.map do |name, obj|
909
- [String(name), obj.to_gapi]
910
- end
887
+ external_table_pairs = value.map { |name, obj| [String(name), obj.to_gapi] }
911
888
  external_table_hash = Hash[external_table_pairs]
912
889
  @gapi.configuration.query.table_definitions = external_table_hash
913
890
  end
@@ -925,8 +902,7 @@ module Google
925
902
  #
926
903
  # @!group Attributes
927
904
  def udfs= value
928
- @gapi.configuration.query.user_defined_function_resources =
929
- udfs_gapi_from value
905
+ @gapi.configuration.query.user_defined_function_resources = udfs_gapi_from value
930
906
  end
931
907
 
932
908
  ##
@@ -950,9 +926,7 @@ module Google
950
926
  #
951
927
  # @!group Attributes
952
928
  def encryption= val
953
- @gapi.configuration.query.update!(
954
- destination_encryption_configuration: val.to_gapi
955
- )
929
+ @gapi.configuration.query.update! destination_encryption_configuration: val.to_gapi
956
930
  end
957
931
 
958
932
  ##
@@ -989,8 +963,7 @@ module Google
989
963
  # @!group Attributes
990
964
  #
991
965
  def time_partitioning_type= type
992
- @gapi.configuration.query.time_partitioning ||= \
993
- Google::Apis::BigqueryV2::TimePartitioning.new
966
+ @gapi.configuration.query.time_partitioning ||= Google::Apis::BigqueryV2::TimePartitioning.new
994
967
  @gapi.configuration.query.time_partitioning.update! type: type
995
968
  end
996
969
 
@@ -1036,8 +1009,7 @@ module Google
1036
1009
  # @!group Attributes
1037
1010
  #
1038
1011
  def time_partitioning_field= field
1039
- @gapi.configuration.query.time_partitioning ||= \
1040
- Google::Apis::BigqueryV2::TimePartitioning.new
1012
+ @gapi.configuration.query.time_partitioning ||= Google::Apis::BigqueryV2::TimePartitioning.new
1041
1013
  @gapi.configuration.query.time_partitioning.update! field: field
1042
1014
  end
1043
1015
 
@@ -1076,10 +1048,8 @@ module Google
1076
1048
  # @!group Attributes
1077
1049
  #
1078
1050
  def time_partitioning_expiration= expiration
1079
- @gapi.configuration.query.time_partitioning ||= \
1080
- Google::Apis::BigqueryV2::TimePartitioning.new
1081
- @gapi.configuration.query.time_partitioning.update! \
1082
- expiration_ms: expiration * 1000
1051
+ @gapi.configuration.query.time_partitioning ||= Google::Apis::BigqueryV2::TimePartitioning.new
1052
+ @gapi.configuration.query.time_partitioning.update! expiration_ms: expiration * 1000
1083
1053
  end
1084
1054
 
1085
1055
  ##
@@ -1094,10 +1064,8 @@ module Google
1094
1064
  # @!group Attributes
1095
1065
  #
1096
1066
  def time_partitioning_require_filter= val
1097
- @gapi.configuration.query.time_partitioning ||= \
1098
- Google::Apis::BigqueryV2::TimePartitioning.new
1099
- @gapi.configuration.query.time_partitioning.update! \
1100
- require_partition_filter: val
1067
+ @gapi.configuration.query.time_partitioning ||= Google::Apis::BigqueryV2::TimePartitioning.new
1068
+ @gapi.configuration.query.time_partitioning.update! require_partition_filter: val
1101
1069
  end
1102
1070
 
1103
1071
  ##
@@ -1143,8 +1111,7 @@ module Google
1143
1111
  # @!group Attributes
1144
1112
  #
1145
1113
  def clustering_fields= fields
1146
- @gapi.configuration.query.clustering ||= \
1147
- Google::Apis::BigqueryV2::Clustering.new
1114
+ @gapi.configuration.query.clustering ||= Google::Apis::BigqueryV2::Clustering.new
1148
1115
  @gapi.configuration.query.clustering.fields = fields
1149
1116
  end
1150
1117
 
@@ -1170,14 +1137,12 @@ module Google
1170
1137
  end
1171
1138
 
1172
1139
  def priority_value str
1173
- { "batch" => "BATCH",
1174
- "interactive" => "INTERACTIVE" }[str.to_s.downcase]
1140
+ { "batch" => "BATCH", "interactive" => "INTERACTIVE" }[str.to_s.downcase]
1175
1141
  end
1176
1142
 
1177
1143
  def udfs_gapi_from array_or_str
1178
1144
  Array(array_or_str).map do |uri_or_code|
1179
- resource =
1180
- Google::Apis::BigqueryV2::UserDefinedFunctionResource.new
1145
+ resource = Google::Apis::BigqueryV2::UserDefinedFunctionResource.new
1181
1146
  if uri_or_code.start_with? "gs://"
1182
1147
  resource.resource_uri = uri_or_code
1183
1148
  else
@@ -1237,17 +1202,15 @@ module Google
1237
1202
  # end
1238
1203
  #
1239
1204
  class Stage
1240
- attr_reader :compute_ratio_avg, :compute_ratio_max, :id, :name,
1241
- :read_ratio_avg, :read_ratio_max, :records_read,
1242
- :records_written, :status, :steps, :wait_ratio_avg,
1243
- :wait_ratio_max, :write_ratio_avg, :write_ratio_max
1205
+ attr_reader :compute_ratio_avg, :compute_ratio_max, :id, :name, :read_ratio_avg, :read_ratio_max,
1206
+ :records_read, :records_written, :status, :steps, :wait_ratio_avg, :wait_ratio_max,
1207
+ :write_ratio_avg, :write_ratio_max
1244
1208
 
1245
1209
  ##
1246
1210
  # @private Creates a new Stage instance.
1247
- def initialize compute_ratio_avg, compute_ratio_max, id, name,
1248
- read_ratio_avg, read_ratio_max, records_read,
1249
- records_written, status, steps, wait_ratio_avg,
1250
- wait_ratio_max, write_ratio_avg, write_ratio_max
1211
+ def initialize compute_ratio_avg, compute_ratio_max, id, name, read_ratio_avg, read_ratio_max, records_read,
1212
+ records_written, status, steps, wait_ratio_avg, wait_ratio_max, write_ratio_avg,
1213
+ write_ratio_max
1251
1214
  @compute_ratio_avg = compute_ratio_avg
1252
1215
  @compute_ratio_max = compute_ratio_max
1253
1216
  @id = id
@@ -1268,11 +1231,9 @@ module Google
1268
1231
  # @private New Stage from a statistics.query.queryPlan element.
1269
1232
  def self.from_gapi gapi
1270
1233
  steps = Array(gapi.steps).map { |g| Step.from_gapi g }
1271
- new gapi.compute_ratio_avg, gapi.compute_ratio_max, gapi.id,
1272
- gapi.name, gapi.read_ratio_avg, gapi.read_ratio_max,
1273
- gapi.records_read, gapi.records_written, gapi.status, steps,
1274
- gapi.wait_ratio_avg, gapi.wait_ratio_max, gapi.write_ratio_avg,
1275
- gapi.write_ratio_max
1234
+ new gapi.compute_ratio_avg, gapi.compute_ratio_max, gapi.id, gapi.name, gapi.read_ratio_avg,
1235
+ gapi.read_ratio_max, gapi.records_read, gapi.records_written, gapi.status, steps, gapi.wait_ratio_avg,
1236
+ gapi.wait_ratio_max, gapi.write_ratio_avg, gapi.write_ratio_max
1276
1237
  end
1277
1238
  end
1278
1239
 
@@ -1327,8 +1288,7 @@ module Google
1327
1288
  def ensure_schema!
1328
1289
  return unless destination_schema.nil?
1329
1290
 
1330
- query_results_gapi = service.job_query_results \
1331
- job_id, location: location, max: 0
1291
+ query_results_gapi = service.job_query_results job_id, location: location, max: 0
1332
1292
  # raise "unable to retrieve schema" if query_results_gapi.schema.nil?
1333
1293
  @destination_schema_gapi = query_results_gapi.schema
1334
1294
  end
@@ -1346,9 +1306,10 @@ module Google
1346
1306
  end
1347
1307
 
1348
1308
  def destination_table_gapi
1349
- Google::Apis::BigqueryV2::Table.new \
1309
+ Google::Apis::BigqueryV2::Table.new(
1350
1310
  table_reference: @gapi.configuration.query.destination_table,
1351
1311
  schema: destination_schema
1312
+ )
1352
1313
  end
1353
1314
  end
1354
1315
  end
@@ -461,8 +461,7 @@ module Google
461
461
  # TODO: do we need to raise if no block was given?
462
462
  raise ArgumentError, "a block is required" unless block_given?
463
463
 
464
- nested_field = add_field name, :record, description: description,
465
- mode: mode
464
+ nested_field = add_field name, :record, description: description, mode: mode
466
465
  yield nested_field
467
466
  nested_field
468
467
  end
@@ -528,18 +527,14 @@ module Google
528
527
 
529
528
  def verify_type type
530
529
  type = type.to_s.upcase
531
- unless Field::TYPES.include? type
532
- raise ArgumentError, "Type '#{type}' not found"
533
- end
530
+ raise ArgumentError, "Type '#{type}' not found" unless Field::TYPES.include? type
534
531
  type
535
532
  end
536
533
 
537
534
  def verify_mode mode
538
535
  mode = :nullable if mode.nil?
539
536
  mode = mode.to_s.upcase
540
- unless Field::MODES.include? mode
541
- raise ArgumentError "Unable to determine mode for '#{mode}'"
542
- end
537
+ raise ArgumentError "Unable to determine mode for '#{mode}'" unless Field::MODES.include? mode
543
538
  mode
544
539
  end
545
540
  end
@@ -37,11 +37,11 @@ module Google
37
37
  #
38
38
  class Field
39
39
  # @private
40
- MODES = %w[NULLABLE REQUIRED REPEATED].freeze
40
+ MODES = ["NULLABLE", "REQUIRED", "REPEATED"].freeze
41
41
 
42
42
  # @private
43
- TYPES = %w[STRING INTEGER INT64 FLOAT FLOAT64 NUMERIC BOOLEAN BOOL
44
- BYTES TIMESTAMP TIME DATETIME DATE RECORD STRUCT].freeze
43
+ TYPES = ["STRING", "INTEGER", "INT64", "FLOAT", "FLOAT64", "NUMERIC", "BOOLEAN", "BOOL", "BYTES", "TIMESTAMP",
44
+ "TIME", "DATETIME", "DATE", "RECORD", "STRUCT"].freeze
45
45
 
46
46
  ##
47
47
  # The name of the field.
@@ -548,8 +548,7 @@ module Google
548
548
  # TODO: do we need to raise if no block was given?
549
549
  raise ArgumentError, "a block is required" unless block_given?
550
550
 
551
- nested_field = add_field name, :record, description: description,
552
- mode: mode
551
+ nested_field = add_field name, :record, description: description, mode: mode
553
552
  yield nested_field
554
553
  nested_field
555
554
  end
@@ -621,18 +620,14 @@ module Google
621
620
 
622
621
  def verify_type type
623
622
  type = type.to_s.upcase
624
- unless TYPES.include? type
625
- raise ArgumentError, "Type '#{type}' not found"
626
- end
623
+ raise ArgumentError, "Type '#{type}' not found" unless TYPES.include? type
627
624
  type
628
625
  end
629
626
 
630
627
  def verify_mode mode
631
628
  mode = :nullable if mode.nil?
632
629
  mode = mode.to_s.upcase
633
- unless MODES.include? mode
634
- raise ArgumentError "Unable to determine mode for '#{mode}'"
635
- end
630
+ raise ArgumentError "Unable to determine mode for '#{mode}'" unless MODES.include? mode
636
631
  mode
637
632
  end
638
633
  end
@@ -43,8 +43,7 @@ module Google
43
43
 
44
44
  ##
45
45
  # Creates a new Service instance.
46
- def initialize project, credentials,
47
- retries: nil, timeout: nil, host: nil
46
+ def initialize project, credentials, retries: nil, timeout: nil, host: nil
48
47
  @project = project
49
48
  @credentials = credentials
50
49
  @retries = retries
@@ -57,8 +56,7 @@ module Google
57
56
  @service ||= begin
58
57
  service = API::BigqueryService.new
59
58
  service.client_options.application_name = "gcloud-ruby"
60
- service.client_options.application_version = \
61
- Google::Cloud::Bigquery::VERSION
59
+ service.client_options.application_version = Google::Cloud::Bigquery::VERSION
62
60
  service.client_options.open_timeout_sec = timeout
63
61
  service.client_options.read_timeout_sec = timeout
64
62
  service.client_options.send_timeout_sec = timeout
@@ -116,8 +114,7 @@ module Google
116
114
  patch_with_backoff = true
117
115
  end
118
116
  execute backoff: patch_with_backoff do
119
- service.patch_dataset @project, dataset_id, patched_dataset_gapi,
120
- options: options
117
+ service.patch_dataset @project, dataset_id, patched_dataset_gapi, options: options
121
118
  end
122
119
  end
123
120
 
@@ -139,9 +136,7 @@ module Google
139
136
  def list_tables dataset_id, options = {}
140
137
  # The list operation is considered idempotent
141
138
  execute backoff: true do
142
- service.list_tables @project, dataset_id,
143
- max_results: options[:max],
144
- page_token: options[:token]
139
+ service.list_tables @project, dataset_id, max_results: options[:max], page_token: options[:token]
145
140
  end
146
141
  end
147
142
 
@@ -182,8 +177,7 @@ module Google
182
177
  patch_with_backoff = true
183
178
  end
184
179
  execute backoff: patch_with_backoff do
185
- service.patch_table @project, dataset_id, table_id,
186
- patched_table_gapi, options: options
180
+ service.patch_table @project, dataset_id, table_id, patched_table_gapi, options: options
187
181
  end
188
182
  end
189
183
 
@@ -214,9 +208,7 @@ module Google
214
208
  insert_tabledata_json_rows dataset_id, table_id, json_rows, options
215
209
  end
216
210
 
217
- def insert_tabledata_json_rows dataset_id, table_id, json_rows,
218
- options = {}
219
-
211
+ def insert_tabledata_json_rows dataset_id, table_id, json_rows, options = {}
220
212
  rows_and_ids = Array(json_rows).zip Array(options[:insert_ids])
221
213
  insert_rows = rows_and_ids.map do |json_row, insert_id|
222
214
  insert_id ||= SecureRandom.uuid
@@ -248,10 +240,7 @@ module Google
248
240
  options = { skip_deserialization: true }
249
241
  # The list operation is considered idempotent
250
242
  execute backoff: true do
251
- json_txt = service.list_models @project, dataset_id,
252
- max_results: max,
253
- page_token: token,
254
- options: options
243
+ json_txt = service.list_models @project, dataset_id, max_results: max, page_token: token, options: options
255
244
  JSON.parse json_txt, symbolize_names: true
256
245
  end
257
246
  end
@@ -263,8 +252,7 @@ module Google
263
252
  def get_model dataset_id, model_id
264
253
  # The get operation is considered idempotent
265
254
  execute backoff: true do
266
- json_txt = service.get_model @project, dataset_id, model_id,
267
- options: { skip_deserialization: true }
255
+ json_txt = service.get_model @project, dataset_id, model_id, options: { skip_deserialization: true }
268
256
  JSON.parse json_txt, symbolize_names: true
269
257
  end
270
258
  end
@@ -281,9 +269,7 @@ module Google
281
269
  patch_with_backoff = true
282
270
  end
283
271
  execute backoff: patch_with_backoff do
284
- json_txt = service.patch_model @project, dataset_id, model_id,
285
- patched_model_gapi,
286
- options: options
272
+ json_txt = service.patch_model @project, dataset_id, model_id, patched_model_gapi, options: options
287
273
  JSON.parse json_txt, symbolize_names: true
288
274
  end
289
275
  end
@@ -303,12 +289,9 @@ module Google
303
289
  min_creation_time = Convert.time_to_millis options[:min_created_at]
304
290
  max_creation_time = Convert.time_to_millis options[:max_created_at]
305
291
  execute backoff: true do
306
- service.list_jobs \
307
- @project, all_users: options[:all], max_results: options[:max],
308
- page_token: options[:token], projection: "full",
309
- state_filter: options[:filter],
310
- min_creation_time: min_creation_time,
311
- max_creation_time: max_creation_time
292
+ service.list_jobs @project, all_users: options[:all], max_results: options[:max],
293
+ page_token: options[:token], projection: "full", state_filter: options[:filter],
294
+ min_creation_time: min_creation_time, max_creation_time: max_creation_time
312
295
  end
313
296
  end
314
297
 
@@ -331,10 +314,7 @@ module Google
331
314
  end
332
315
 
333
316
  def insert_job config, location: nil
334
- job_object = API::Job.new(
335
- job_reference: job_ref_from(nil, nil, location: location),
336
- configuration: config
337
- )
317
+ job_object = API::Job.new job_reference: job_ref_from(nil, nil, location: location), configuration: config
338
318
  # Jobs have generated id, so this operation is considered idempotent
339
319
  execute backoff: true do
340
320
  service.insert_job @project, job_object
@@ -352,13 +332,12 @@ module Google
352
332
  def job_query_results job_id, options = {}
353
333
  # The get operation is considered idempotent
354
334
  execute backoff: true do
355
- service.get_job_query_results \
356
- @project, job_id,
357
- location: options.delete(:location),
358
- max_results: options.delete(:max),
359
- page_token: options.delete(:token),
360
- start_index: options.delete(:start),
361
- timeout_ms: options.delete(:timeout)
335
+ service.get_job_query_results @project, job_id,
336
+ location: options.delete(:location),
337
+ max_results: options.delete(:max),
338
+ page_token: options.delete(:token),
339
+ start_index: options.delete(:start),
340
+ timeout_ms: options.delete(:timeout)
362
341
  end
363
342
  end
364
343
 
@@ -382,10 +361,7 @@ module Google
382
361
 
383
362
  def load_table_file file, load_job_gapi
384
363
  execute backoff: true do
385
- service.insert_job \
386
- @project,
387
- load_job_gapi,
388
- upload_source: file, content_type: mime_type_for(file)
364
+ service.insert_job @project, load_job_gapi, upload_source: file, content_type: mime_type_for(file)
389
365
  end
390
366
  end
391
367
 
@@ -409,9 +385,7 @@ module Google
409
385
  def self.table_ref_from_s str, default_ref: {}
410
386
  str = str.to_s
411
387
  m = /\A(((?<prj>\S*)(:|\.))?(?<dts>\S*)\.)?(?<tbl>\S*)\z/.match str
412
- unless m
413
- raise ArgumentError, "unable to identify table from #{str.inspect}"
414
- end
388
+ raise ArgumentError, "unable to identify table from #{str.inspect}" unless m
415
389
  str_table_ref_hash = {
416
390
  project_id: m["prj"],
417
391
  dataset_id: m["dts"],
@@ -424,10 +398,8 @@ module Google
424
398
  end
425
399
 
426
400
  def self.validate_table_ref table_ref
427
- %i[project_id dataset_id table_id].each do |f|
428
- if table_ref.send(f).nil?
429
- raise ArgumentError, "TableReference is missing #{f}"
430
- end
401
+ [:project_id, :dataset_id, :table_id].each do |f|
402
+ raise ArgumentError, "TableReference is missing #{f}" if table_ref.send(f).nil?
431
403
  end
432
404
  end
433
405
 
@@ -435,8 +407,7 @@ module Google
435
407
  # Lists all projects to which you have been granted any project role.
436
408
  def list_projects options = {}
437
409
  execute backoff: true do
438
- service.list_projects max_results: options[:max],
439
- page_token: options[:token]
410
+ service.list_projects max_results: options[:max], page_token: options[:token]
440
411
  end
441
412
  end
442
413
 
@@ -446,10 +417,7 @@ module Google
446
417
  def job_ref_from job_id, prefix, location: nil
447
418
  prefix ||= "job_"
448
419
  job_id ||= "#{prefix}#{generate_id}"
449
- job_ref = API::JobReference.new(
450
- project_id: @project,
451
- job_id: job_id
452
- )
420
+ job_ref = API::JobReference.new project_id: @project, job_id: job_id
453
421
  # BigQuery does not allow nil location, but missing is ok.
454
422
  job_ref.location = location if location
455
423
  job_ref
@@ -507,7 +475,7 @@ module Google
507
475
  attr_accessor :backoff
508
476
  end
509
477
  self.retries = 5
510
- self.reasons = %w[rateLimitExceeded backendError]
478
+ self.reasons = ["rateLimitExceeded", "backendError"]
511
479
  self.backoff = lambda do |retries|
512
480
  # Max delay is 32 seconds
513
481
  # See "Back-off Requirements" here: