google-cloud-bigquery 1.27.0 → 1.32.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +58 -0
  3. data/CONTRIBUTING.md +3 -4
  4. data/LOGGING.md +1 -1
  5. data/OVERVIEW.md +15 -14
  6. data/lib/google/cloud/bigquery/convert.rb +72 -76
  7. data/lib/google/cloud/bigquery/copy_job.rb +1 -0
  8. data/lib/google/cloud/bigquery/data.rb +2 -2
  9. data/lib/google/cloud/bigquery/dataset.rb +181 -62
  10. data/lib/google/cloud/bigquery/dataset/access.rb +3 -3
  11. data/lib/google/cloud/bigquery/dataset/list.rb +2 -2
  12. data/lib/google/cloud/bigquery/external.rb +9 -2619
  13. data/lib/google/cloud/bigquery/external/bigtable_source.rb +230 -0
  14. data/lib/google/cloud/bigquery/external/bigtable_source/column.rb +404 -0
  15. data/lib/google/cloud/bigquery/external/bigtable_source/column_family.rb +945 -0
  16. data/lib/google/cloud/bigquery/external/csv_source.rb +481 -0
  17. data/lib/google/cloud/bigquery/external/data_source.rb +771 -0
  18. data/lib/google/cloud/bigquery/external/json_source.rb +170 -0
  19. data/lib/google/cloud/bigquery/external/parquet_source.rb +148 -0
  20. data/lib/google/cloud/bigquery/external/sheets_source.rb +166 -0
  21. data/lib/google/cloud/bigquery/extract_job.rb +4 -2
  22. data/lib/google/cloud/bigquery/job.rb +9 -3
  23. data/lib/google/cloud/bigquery/job/list.rb +4 -4
  24. data/lib/google/cloud/bigquery/load_job.rb +178 -19
  25. data/lib/google/cloud/bigquery/model/list.rb +2 -2
  26. data/lib/google/cloud/bigquery/policy.rb +2 -1
  27. data/lib/google/cloud/bigquery/project.rb +47 -43
  28. data/lib/google/cloud/bigquery/project/list.rb +2 -2
  29. data/lib/google/cloud/bigquery/query_job.rb +84 -62
  30. data/lib/google/cloud/bigquery/routine.rb +1 -4
  31. data/lib/google/cloud/bigquery/routine/list.rb +2 -2
  32. data/lib/google/cloud/bigquery/schema.rb +39 -3
  33. data/lib/google/cloud/bigquery/schema/field.rb +63 -13
  34. data/lib/google/cloud/bigquery/service.rb +11 -13
  35. data/lib/google/cloud/bigquery/standard_sql.rb +15 -3
  36. data/lib/google/cloud/bigquery/table.rb +312 -69
  37. data/lib/google/cloud/bigquery/table/async_inserter.rb +44 -17
  38. data/lib/google/cloud/bigquery/table/list.rb +2 -2
  39. data/lib/google/cloud/bigquery/version.rb +1 -1
  40. metadata +28 -14
@@ -64,7 +64,10 @@ module Google
64
64
  class AsyncInserter
65
65
  include MonitorMixin
66
66
 
67
- attr_reader :max_bytes, :max_rows, :interval, :threads
67
+ attr_reader :max_bytes
68
+ attr_reader :max_rows
69
+ attr_reader :interval
70
+ attr_reader :threads
68
71
  ##
69
72
  # @private Implementation accessors
70
73
  attr_reader :table, :batch
@@ -98,6 +101,21 @@ module Google
98
101
  # collected in batches and inserted together.
99
102
  # See {Google::Cloud::Bigquery::Table#insert_async}.
100
103
  #
104
+ # Simple Ruby types are generally accepted per JSON rules, along with the following support for BigQuery's
105
+ # more complex types:
106
+ #
107
+ # | BigQuery | Ruby | Notes |
108
+ # |--------------|--------------------------------------|----------------------------------------------------|
109
+ # | `NUMERIC` | `BigDecimal` | `BigDecimal` values will be rounded to scale 9. |
110
+ # | `BIGNUMERIC` | `String` | Pass as `String` to avoid rounding to scale 9. |
111
+ # | `DATETIME` | `DateTime` | `DATETIME` does not support time zone. |
112
+ # | `DATE` | `Date` | |
113
+ # | `TIMESTAMP` | `Time` | |
114
+ # | `TIME` | `Google::Cloud::BigQuery::Time` | |
115
+ # | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
116
+ # | `ARRAY` | `Array` | Nested arrays, `nil` values are not supported. |
117
+ # | `STRUCT` | `Hash` | Hash keys may be strings or symbols. |
118
+ #
101
119
  # Because BigQuery's streaming API is designed for high insertion
102
120
  # rates, modifications to the underlying table metadata are eventually
103
121
  # consistent when interacting with the streaming system. In most cases
@@ -111,8 +129,11 @@ module Google
111
129
  # @see https://cloud.google.com/bigquery/troubleshooting-errors#metadata-errors-for-streaming-inserts
112
130
  # BigQuery Troubleshooting: Metadata errors for streaming inserts
113
131
  #
114
- # @param [Hash, Array<Hash>] rows A hash object or array of hash
115
- # objects containing the data.
132
+ # @param [Hash, Array<Hash>] rows A hash object or array of hash objects
133
+ # containing the data. Required. `BigDecimal` values will be rounded to
134
+ # scale 9 to conform with the BigQuery `NUMERIC` data type. To avoid
135
+ # rounding `BIGNUMERIC` type values with scale greater than 9, use `String`
136
+ # instead of `BigDecimal`.
116
137
  # @param [Array<String|Symbol>, Symbol] insert_ids A unique ID for each row. BigQuery uses this property to
117
138
  # detect duplicate insertion requests on a best-effort basis. For more information, see [data
118
139
  # consistency](https://cloud.google.com/bigquery/streaming-data-into-bigquery#dataconsistency). Optional. If
@@ -265,18 +286,19 @@ module Google
265
286
  json_rows = @batch.json_rows
266
287
  insert_ids = @batch.insert_ids
267
288
  Concurrent::Future.new executor: @thread_pool do
268
- begin
269
- raise ArgumentError, "No rows provided" if json_rows.empty?
270
- options = { skip_invalid: @skip_invalid, ignore_unknown: @ignore_unknown, insert_ids: insert_ids }
271
- insert_resp = @table.service.insert_tabledata_json_rows(
272
- @table.dataset_id, @table.table_id, json_rows, options
273
- )
274
- result = Result.new InsertResponse.from_gapi(orig_rows, insert_resp)
275
- rescue StandardError => e
276
- result = Result.new nil, e
277
- ensure
278
- @callback&.call result
279
- end
289
+ raise ArgumentError, "No rows provided" if json_rows.empty?
290
+ insert_resp = @table.service.insert_tabledata_json_rows @table.dataset_id,
291
+ @table.table_id,
292
+ json_rows,
293
+ skip_invalid: @skip_invalid,
294
+ ignore_unknown: @ignore_unknown,
295
+ insert_ids: insert_ids
296
+
297
+ result = Result.new InsertResponse.from_gapi(orig_rows, insert_resp)
298
+ rescue StandardError => e
299
+ result = Result.new nil, e
300
+ ensure
301
+ @callback&.call result
280
302
  end.execute
281
303
 
282
304
  @batch = nil
@@ -286,7 +308,11 @@ module Google
286
308
  ##
287
309
  # @private
288
310
  class Batch
289
- attr_reader :max_bytes, :max_rows, :rows, :json_rows, :insert_ids
311
+ attr_reader :max_bytes
312
+ attr_reader :max_rows
313
+ attr_reader :rows
314
+ attr_reader :json_rows
315
+ attr_reader :insert_ids
290
316
 
291
317
  def initialize max_bytes: 10_000_000, max_rows: 500
292
318
  @max_bytes = max_bytes
@@ -395,7 +421,8 @@ module Google
395
421
  @error = error
396
422
  end
397
423
 
398
- attr_reader :insert_response, :error
424
+ attr_reader :insert_response
425
+ attr_reader :error
399
426
 
400
427
  ##
401
428
  # Checks if an error is present, meaning that the insert operation
@@ -130,12 +130,12 @@ module Google
130
130
  # puts table.name
131
131
  # end
132
132
  #
133
- def all request_limit: nil
133
+ def all request_limit: nil, &block
134
134
  request_limit = request_limit.to_i if request_limit
135
135
  return enum_for :all, request_limit: request_limit unless block_given?
136
136
  results = self
137
137
  loop do
138
- results.each { |r| yield r }
138
+ results.each(&block)
139
139
  if request_limit
140
140
  request_limit -= 1
141
141
  break if request_limit.negative?
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Bigquery
19
- VERSION = "1.27.0".freeze
19
+ VERSION = "1.32.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.27.0
4
+ version: 1.32.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: 2021-02-10 00:00:00.000000000 Z
12
+ date: 2021-06-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby
@@ -40,33 +40,39 @@ dependencies:
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0.1'
42
42
  - !ruby/object:Gem::Dependency
43
- name: google-cloud-core
43
+ name: googleauth
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - "~>"
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: '1.2'
48
+ version: 0.16.2
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: 2.a
49
52
  type: :runtime
50
53
  prerelease: false
51
54
  version_requirements: !ruby/object:Gem::Requirement
52
55
  requirements:
53
- - - "~>"
56
+ - - ">="
54
57
  - !ruby/object:Gem::Version
55
- version: '1.2'
58
+ version: 0.16.2
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: 2.a
56
62
  - !ruby/object:Gem::Dependency
57
- name: googleauth
63
+ name: google-cloud-core
58
64
  requirement: !ruby/object:Gem::Requirement
59
65
  requirements:
60
66
  - - "~>"
61
67
  - !ruby/object:Gem::Version
62
- version: '0.9'
68
+ version: '1.6'
63
69
  type: :runtime
64
70
  prerelease: false
65
71
  version_requirements: !ruby/object:Gem::Requirement
66
72
  requirements:
67
73
  - - "~>"
68
74
  - !ruby/object:Gem::Version
69
- version: '0.9'
75
+ version: '1.6'
70
76
  - !ruby/object:Gem::Dependency
71
77
  name: mini_mime
72
78
  requirement: !ruby/object:Gem::Requirement
@@ -101,14 +107,14 @@ dependencies:
101
107
  requirements:
102
108
  - - "~>"
103
109
  - !ruby/object:Gem::Version
104
- version: 1.24.0
110
+ version: 1.25.1
105
111
  type: :development
106
112
  prerelease: false
107
113
  version_requirements: !ruby/object:Gem::Requirement
108
114
  requirements:
109
115
  - - "~>"
110
116
  - !ruby/object:Gem::Version
111
- version: 1.24.0
117
+ version: 1.25.1
112
118
  - !ruby/object:Gem::Dependency
113
119
  name: minitest
114
120
  requirement: !ruby/object:Gem::Requirement
@@ -250,6 +256,14 @@ files:
250
256
  - lib/google/cloud/bigquery/dataset/list.rb
251
257
  - lib/google/cloud/bigquery/encryption_configuration.rb
252
258
  - lib/google/cloud/bigquery/external.rb
259
+ - lib/google/cloud/bigquery/external/bigtable_source.rb
260
+ - lib/google/cloud/bigquery/external/bigtable_source/column.rb
261
+ - lib/google/cloud/bigquery/external/bigtable_source/column_family.rb
262
+ - lib/google/cloud/bigquery/external/csv_source.rb
263
+ - lib/google/cloud/bigquery/external/data_source.rb
264
+ - lib/google/cloud/bigquery/external/json_source.rb
265
+ - lib/google/cloud/bigquery/external/parquet_source.rb
266
+ - lib/google/cloud/bigquery/external/sheets_source.rb
253
267
  - lib/google/cloud/bigquery/extract_job.rb
254
268
  - lib/google/cloud/bigquery/insert_response.rb
255
269
  - lib/google/cloud/bigquery/job.rb
@@ -284,14 +298,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
284
298
  requirements:
285
299
  - - ">="
286
300
  - !ruby/object:Gem::Version
287
- version: '2.4'
301
+ version: '2.5'
288
302
  required_rubygems_version: !ruby/object:Gem::Requirement
289
303
  requirements:
290
304
  - - ">="
291
305
  - !ruby/object:Gem::Version
292
306
  version: '0'
293
307
  requirements: []
294
- rubygems_version: 3.2.6
308
+ rubygems_version: 3.2.17
295
309
  signing_key:
296
310
  specification_version: 4
297
311
  summary: API Client library for Google BigQuery